From 72c73c25b7b387d086127727148c1a1101c8de4e Mon Sep 17 00:00:00 2001 From: Ian Norden Date: Wed, 3 Apr 2019 00:14:02 -0500 Subject: [PATCH] update vendor dep; constrain to revision of geth with UnpackIntoMap; updates to match --- Gopkg.lock | 38 +- Gopkg.toml | 2 +- Makefile | 1 - README.md | 2 - pkg/datastore/ethereum/database.go | 5 +- .../ethereum/level/database_reader.go | 5 +- .../ethereum/go-ethereum/.github/CODEOWNERS | 4 + .../ethereum/go-ethereum/.gitignore | 1 + .../ethereum/go-ethereum/.travis.yml | 59 +- .../ethereum/go-ethereum/Dockerfile | 2 +- .../ethereum/go-ethereum/Dockerfile.alltools | 2 +- .../github.com/ethereum/go-ethereum/README.md | 32 +- .../ethereum/go-ethereum/accounts/abi/abi.go | 32 +- .../go-ethereum/accounts/abi/abi_test.go | 174 +- .../go-ethereum/accounts/abi/argument.go | 4 +- .../accounts/abi/bind/backends/simulated.go | 21 +- .../abi/bind/backends/simulated_test.go | 82 + .../accounts/abi/bind/base_test.go | 313 +- .../accounts/abi/bind/bind_test.go | 41 +- .../go-ethereum/accounts/abi/bind/topics.go | 41 +- .../accounts/abi/bind/topics_test.go | 103 + .../ethereum/go-ethereum/accounts/abi/type.go | 1 + .../go-ethereum/accounts/abi/type_test.go | 8 +- .../go-ethereum/accounts/abi/unpack.go | 2 +- .../go-ethereum/accounts/abi/unpack_test.go | 15 + .../ethereum/go-ethereum/accounts/accounts.go | 73 +- .../accounts_test.go} | 20 +- .../go-ethereum/accounts/external/backend.go | 228 + .../go-ethereum/accounts/keystore/keystore.go | 6 +- .../go-ethereum/accounts/keystore/wallet.go | 46 +- .../go-ethereum/accounts/usbwallet/hub.go | 6 +- .../go-ethereum/accounts/usbwallet/trezor.go | 66 +- .../{internal => }/trezor/messages.pb.go | 0 .../{internal => }/trezor/messages.proto | 0 .../usbwallet/{internal => }/trezor/trezor.go | 0 .../{internal => }/trezor/types.pb.go | 0 .../{internal => }/trezor/types.proto | 0 .../go-ethereum/accounts/usbwallet/wallet.go | 29 +- .../ethereum/go-ethereum/appveyor.yml | 4 +- .../ethereum/go-ethereum/build/ci-notes.md | 6 +- .../ethereum/go-ethereum/build/ci.go | 11 +- .../build/deb/ethereum-swarm/deb.control | 2 +- .../build/deb/ethereum-swarm/deb.rules | 5 +- .../build/deb/ethereum/deb.control | 2 +- .../go-ethereum/build/deb/ethereum/deb.rules | 5 +- .../go-ethereum/build/travis_keepalive.sh | 46 + .../ethereum/go-ethereum/cmd/abigen/main.go | 38 +- .../ethereum/go-ethereum/cmd/bootnode/main.go | 13 +- .../ethereum/go-ethereum/cmd/clef/README.md | 215 +- .../go-ethereum/cmd/clef/datatypes.md | 224 + .../cmd/clef/docs/clef_architecture_pt1.png | Bin 0 -> 69221 bytes .../cmd/clef/docs/clef_architecture_pt2.png | Bin 0 -> 81521 bytes .../cmd/clef/docs/clef_architecture_pt3.png | Bin 0 -> 101351 bytes .../cmd/clef/docs/clef_architecture_pt4.png | Bin 0 -> 117597 bytes .../go-ethereum/cmd/clef/extapi_changelog.md | 15 + .../go-ethereum/cmd/clef/intapi_changelog.md | 70 + .../ethereum/go-ethereum/cmd/clef/main.go | 403 +- .../go-ethereum/cmd/clef/tests/testsigner.js | 73 + .../cmd/evm/internal/compiler/compiler.go | 2 +- .../ethereum/go-ethereum/cmd/evm/main.go | 6 + .../ethereum/go-ethereum/cmd/evm/runner.go | 11 +- .../ethereum/go-ethereum/cmd/faucet/faucet.go | 2 +- .../ethereum/go-ethereum/cmd/geth/chaincmd.go | 55 +- .../ethereum/go-ethereum/cmd/geth/config.go | 9 + .../go-ethereum/cmd/geth/consolecmd.go | 4 +- .../ethereum/go-ethereum/cmd/geth/dao_test.go | 3 +- .../ethereum/go-ethereum/cmd/geth/main.go | 63 +- .../go-ethereum/cmd/geth/monitorcmd.go | 6 +- .../ethereum/go-ethereum/cmd/geth/usage.go | 21 +- .../ethereum/go-ethereum/cmd/swarm/access.go | 4 +- .../go-ethereum/cmd/swarm/access_test.go | 4 +- .../ethereum/go-ethereum/cmd/swarm/config.go | 116 +- .../go-ethereum/cmd/swarm/config_test.go | 4 +- .../ethereum/go-ethereum/cmd/swarm/flags.go | 41 +- .../ethereum/go-ethereum/cmd/swarm/fs.go | 2 +- .../cmd/swarm/global-store/explorer.go | 66 + .../cmd/swarm/global-store/explorer_test.go | 254 + .../cmd/swarm/global-store/global_store.go | 24 +- .../swarm/global-store/global_store_test.go | 68 +- .../cmd/swarm/global-store/main.go | 44 +- .../ethereum/go-ethereum/cmd/swarm/hash.go | 59 +- .../ethereum/go-ethereum/cmd/swarm/main.go | 18 +- .../go-ethereum/cmd/swarm/run_test.go | 14 + .../go-ethereum/cmd/swarm/swarm-smoke/main.go | 7 + .../cmd/swarm/swarm-smoke/sliding_window.go | 74 +- .../cmd/swarm/swarm-smoke/upload_and_sync.go | 67 +- .../cmd/swarm/swarm-snapshot/create.go | 11 +- .../cmd/swarm/swarm-snapshot/create_test.go | 4 +- .../cmd/swarm/swarm-snapshot/main.go | 2 +- .../ethereum/go-ethereum/cmd/swarm/upload.go | 4 +- .../ethereum/go-ethereum/cmd/utils/cmd.go | 4 +- .../ethereum/go-ethereum/cmd/utils/flags.go | 194 +- .../go-ethereum/common/compiler/helpers.go | 64 + .../go-ethereum/common/compiler/solidity.go | 46 +- .../common/compiler/solidity_test.go | 9 +- .../go-ethereum/common/compiler/test.v.py | 3 + .../go-ethereum/common/compiler/test_bad.v.py | 3 + .../go-ethereum/common/compiler/vyper.go | 144 + .../go-ethereum/common/compiler/vyper_test.go | 71 + .../common/fdlimit/fdlimit_darwin.go | 71 + .../common/fdlimit/fdlimit_freebsd.go | 2 +- .../common/fdlimit/fdlimit_unix.go | 2 +- .../common/fdlimit/fdlimit_windows.go | 1 + .../go-ethereum/common/hexutil/json.go | 55 + .../ethereum/go-ethereum/common/size.go | 16 +- .../ethereum/go-ethereum/common/size_test.go | 4 +- .../ethereum/go-ethereum/common/types.go | 33 +- .../ethereum/go-ethereum/common/types_test.go | 4 +- .../go-ethereum/consensus/clique/clique.go | 88 +- .../consensus/clique/snapshot_test.go | 10 +- .../ethereum/go-ethereum/console/bridge.go | 35 +- .../ethereum/go-ethereum/console/console.go | 6 +- .../go-ethereum/console/console_test.go | 4 +- .../docker/develop-alpine/Dockerfile | 14 - .../docker/develop-ubuntu/Dockerfile | 17 - .../docker/master-alpine/Dockerfile | 14 - .../docker/master-ubuntu/Dockerfile | 17 - .../contracts/chequebook/cheque.go | 225 +- .../go-ethereum/contracts/ens/README.md | 10 + .../ethereum/go-ethereum/contracts/ens/cid.go | 121 + .../go-ethereum/contracts/ens/cid_test.go | 158 + .../contracts/ens/contract/AbstractENS.sol | 23 - .../contracts/ens/contract/ENS.sol | 104 +- .../contracts/ens/contract/ENSRegistry.sol | 99 + .../contracts/ens/contract/FIFSRegistrar.sol | 25 +- .../contracts/ens/contract/PublicResolver.sol | 226 +- .../go-ethereum/contracts/ens/contract/ens.go | 101 +- .../contracts/ens/contract/ensregistry.go | 892 + .../contracts/ens/contract/fifsregistrar.go | 37 +- .../contracts/ens/contract/publicresolver.go | 256 +- .../ethereum/go-ethereum/contracts/ens/ens.go | 90 +- .../go-ethereum/contracts/ens/ens_test.go | 52 +- .../ens/fallback_contract/PublicResolver.sol | 212 + .../ens/fallback_contract/publicresolver.go | 1321 + .../ethereum/go-ethereum/core/asm/lex_test.go | 2 +- .../ethereum/go-ethereum/core/asm/lexer.go | 2 +- .../ethereum/go-ethereum/core/bench_test.go | 10 +- .../go-ethereum/core/block_validator.go | 2 +- .../go-ethereum/core/block_validator_test.go | 8 +- .../ethereum/go-ethereum/core/blockchain.go | 221 +- .../go-ethereum/core/blockchain_insert.go | 10 +- .../go-ethereum/core/blockchain_test.go | 157 +- .../go-ethereum/core/chain_indexer.go | 2 +- .../go-ethereum/core/chain_indexer_test.go | 5 +- .../go-ethereum/core/chain_makers_test.go | 4 +- .../ethereum/go-ethereum/core/dao_test.go | 16 +- .../ethereum/go-ethereum/core/genesis.go | 4 +- .../ethereum/go-ethereum/core/genesis_test.go | 2 +- .../ethereum/go-ethereum/core/headerchain.go | 20 +- .../ethereum/go-ethereum/core/helper_test.go | 3 +- .../ethereum/go-ethereum/core/mkalloc.go | 3 +- .../go-ethereum/core/rawdb/accessors_chain.go | 121 +- .../core/rawdb/accessors_chain_test.go | 19 +- .../core/rawdb/accessors_indexes.go | 78 +- .../core/rawdb/accessors_indexes_test.go | 26 +- .../core/rawdb/accessors_metadata.go | 13 +- .../go-ethereum/core/rawdb/database.go | 52 + .../ethereum/go-ethereum/core/rawdb/schema.go | 11 +- .../ethereum/go-ethereum/core/rawdb/table.go | 155 + .../go-ethereum/core/state/database.go | 111 +- .../go-ethereum/core/state/iterator_test.go | 5 +- .../core/state/managed_state_test.go | 4 +- .../go-ethereum/core/state/state_object.go | 20 + .../go-ethereum/core/state/state_test.go | 7 +- .../go-ethereum/core/state/statedb.go | 90 +- .../go-ethereum/core/state/statedb_test.go | 46 +- .../ethereum/go-ethereum/core/state/sync.go | 3 +- .../go-ethereum/core/state/sync_test.go | 15 +- .../go-ethereum/core/state_processor.go | 3 + .../ethereum/go-ethereum/core/tx_pool.go | 24 +- .../ethereum/go-ethereum/core/tx_pool_test.go | 52 +- .../ethereum/go-ethereum/core/types.go | 2 +- .../ethereum/go-ethereum/core/types/block.go | 6 +- .../go-ethereum/core/types/gen_log_json.go | 2 + .../core/types/gen_receipt_json.go | 19 + .../go-ethereum/core/types/gen_tx_json.go | 2 + .../ethereum/go-ethereum/core/types/log.go | 47 +- .../go-ethereum/core/types/receipt.go | 47 +- .../ethereum/go-ethereum/core/vm/common.go | 30 +- .../ethereum/go-ethereum/core/vm/evm.go | 15 +- .../ethereum/go-ethereum/core/vm/gas.go | 8 +- .../ethereum/go-ethereum/core/vm/gas_table.go | 22 +- .../go-ethereum/core/vm/instructions.go | 37 +- .../go-ethereum/core/vm/interpreter.go | 54 +- .../go-ethereum/core/vm/jump_table.go | 1358 +- .../go-ethereum/core/vm/memory_table.go | 116 +- .../go-ethereum/core/vm/runtime/runtime.go | 6 +- .../core/vm/runtime/runtime_test.go | 6 +- .../go-ethereum/core/vm/stack_table.go | 32 +- .../crypto/bn256/cloudflare/main_test.go | 2 +- .../crypto/bn256/cloudflare/mul_arm64.h | 32 +- .../crypto/bn256/google/main_test.go | 2 +- .../go-ethereum/crypto/ecies/ecies_test.go | 13 - .../go-ethereum/crypto/signature_cgo.go | 2 +- .../go-ethereum/crypto/signature_nocgo.go | 2 +- .../ethereum/go-ethereum/dashboard/assets.go | 77187 ++++++++-------- .../dashboard/assets/.eslintignore | 3 + .../go-ethereum/dashboard/assets/.eslintrc | 107 +- .../go-ethereum/dashboard/assets/.flowconfig | 2 + .../go-ethereum/dashboard/assets/common.jsx | 33 +- .../dashboard/assets/components/ChartRow.jsx | 4 +- .../assets/components/CustomTooltip.jsx | 19 +- .../dashboard/assets/components/Dashboard.jsx | 32 +- .../dashboard/assets/components/Footer.jsx | 76 +- .../dashboard/assets/components/Header.jsx | 18 +- .../dashboard/assets/components/Logs.jsx | 17 +- .../dashboard/assets/components/Main.jsx | 38 +- .../dashboard/assets/components/Network.jsx | 529 + .../dashboard/assets/components/SideBar.jsx | 20 +- .../dashboard/assets/fa-only-woff-loader.js | 12 +- .../go-ethereum/dashboard/assets/index.html | 2 +- .../go-ethereum/dashboard/assets/index.jsx | 7 +- .../go-ethereum/dashboard/assets/package.json | 97 +- .../dashboard/assets/types/content.jsx | 46 +- ...ack.config.js => webpack.config.common.js} | 70 +- .../assets/webpack.config.dev.js} | 34 +- .../assets/webpack.config.prod.js} | 52 +- .../go-ethereum/dashboard/assets/yarn.lock | 7657 +- .../go-ethereum/dashboard/dashboard.go | 215 +- .../ethereum/go-ethereum/dashboard/geoip.go | 98 + .../ethereum/go-ethereum/dashboard/log.go | 18 +- .../ethereum/go-ethereum/dashboard/message.go | 13 +- .../ethereum/go-ethereum/dashboard/peers.go | 552 + .../ethereum/go-ethereum/dashboard/system.go | 146 + .../audits/2017-04-25_Geth-audit_Truesec.pdf | Bin 0 -> 124427 bytes .../docs/audits/2018-09-14_Clef-audit_NCC.pdf | Bin 0 -> 755237 bytes .../ethereum/go-ethereum/eth/api.go | 14 +- .../ethereum/go-ethereum/eth/api_backend.go | 4 +- .../ethereum/go-ethereum/eth/api_test.go | 4 +- .../ethereum/go-ethereum/eth/api_tracer.go | 45 +- .../ethereum/go-ethereum/eth/backend.go | 55 +- .../ethereum/go-ethereum/eth/bloombits.go | 2 +- .../ethereum/go-ethereum/eth/config.go | 28 +- .../go-ethereum/eth/downloader/downloader.go | 43 +- .../eth/downloader/downloader_test.go | 6 +- .../go-ethereum/eth/downloader/events.go | 6 +- .../go-ethereum/eth/downloader/statesync.go | 8 +- .../eth/downloader/testchain_test.go | 4 +- .../go-ethereum/eth/fetcher/fetcher.go | 2 - .../go-ethereum/eth/fetcher/fetcher_test.go | 6 +- .../go-ethereum/eth/filters/bench_test.go | 33 +- .../eth/filters/filter_system_test.go | 14 +- .../go-ethereum/eth/filters/filter_test.go | 5 +- .../ethereum/go-ethereum/eth/gen_config.go | 41 +- .../ethereum/go-ethereum/eth/handler_test.go | 16 +- .../ethereum/go-ethereum/eth/helper_test.go | 7 +- ...l_tracer_inner_create_oog_outer_throw.json | 2 +- .../tracers/testdata/call_tracer_throw.json | 2 +- .../go-ethereum/eth/tracers/tracers_test.go | 12 +- .../ethereum/go-ethereum/eth/ulc_config.go | 9 + .../ethereum/go-ethereum/ethdb/.gitignore | 12 - .../ethdb/{interface.go => batch.go} | 52 +- .../ethereum/go-ethereum/ethdb/database.go | 402 +- .../ethereum/go-ethereum/ethdb/database_js.go | 68 - .../go-ethereum/ethdb/database_test.go | 214 - .../ethereum/go-ethereum/ethdb/iterator.go | 61 + .../go-ethereum/ethdb/leveldb/leveldb.go | 447 + .../go-ethereum/ethdb/memory_database.go | 143 - .../go-ethereum/ethdb/memorydb/memorydb.go | 314 + .../ethdb/memorydb/memorydb_test.go | 100 + .../ethereum/go-ethereum/ethdb/table.go | 51 - .../ethereum/go-ethereum/ethdb/table_batch.go | 51 - .../ethereum/go-ethereum/graphql/graphiql.go | 95 + .../ethereum/go-ethereum/graphql/graphql.go | 1233 + .../graphql_test.go} | 16 +- .../ethereum/go-ethereum/graphql/schema.go | 320 + .../ethereum/go-ethereum/interfaces.go | 6 +- .../go-ethereum/internal/build/util.go | 4 +- .../go-ethereum/internal/ethapi/api.go | 171 +- .../go-ethereum/internal/jsre/jsre.go | 4 +- .../go-ethereum/internal/web3ext/web3ext.go | 62 +- .../ethereum/go-ethereum/les/api.go | 454 + .../ethereum/go-ethereum/les/api_test.go | 525 + .../ethereum/go-ethereum/les/backend.go | 36 +- .../ethereum/go-ethereum/les/benchmark.go | 353 + .../ethereum/go-ethereum/les/costtracker.go | 388 + .../ethereum/go-ethereum/les/distributor.go | 10 +- .../go-ethereum/les/distributor_test.go | 6 +- .../ethereum/go-ethereum/les/fetcher.go | 307 +- .../ethereum/go-ethereum/les/fetcher_test.go | 152 + .../go-ethereum/les/flowcontrol/control.go | 369 +- .../go-ethereum/les/flowcontrol/logger.go | 65 + .../go-ethereum/les/flowcontrol/manager.go | 493 +- .../les/flowcontrol/manager_test.go | 123 + .../ethereum/go-ethereum/les/freeclient.go | 95 +- .../go-ethereum/les/freeclient_test.go | 56 +- .../ethereum/go-ethereum/les/handler.go | 905 +- .../ethereum/go-ethereum/les/handler_test.go | 15 +- .../ethereum/go-ethereum/les/helper_test.go | 42 +- .../ethereum/go-ethereum/les/odr.go | 7 +- .../ethereum/go-ethereum/les/odr_requests.go | 4 +- .../ethereum/go-ethereum/les/peer.go | 299 +- .../ethereum/go-ethereum/les/peer_test.go | 290 + .../ethereum/go-ethereum/les/protocol.go | 26 +- .../ethereum/go-ethereum/les/randselect.go | 1 - .../ethereum/go-ethereum/les/retrieve.go | 2 - .../ethereum/go-ethereum/les/server.go | 338 +- .../ethereum/go-ethereum/les/serverpool.go | 102 +- .../ethereum/go-ethereum/les/servingqueue.go | 261 + .../ethereum/go-ethereum/les/txrelay.go | 12 +- .../ethereum/go-ethereum/les/ulc.go | 39 + .../ethereum/go-ethereum/les/ulc_test.go | 238 + .../ethereum/go-ethereum/light/lightchain.go | 317 +- .../go-ethereum/light/lightchain_test.go | 8 +- .../ethereum/go-ethereum/light/nodeset.go | 20 +- .../ethereum/go-ethereum/light/odr.go | 2 - .../ethereum/go-ethereum/light/odr_test.go | 4 +- .../ethereum/go-ethereum/light/odr_util.go | 2 +- .../ethereum/go-ethereum/light/postprocess.go | 8 +- .../ethereum/go-ethereum/light/trie.go | 4 +- .../ethereum/go-ethereum/light/trie_test.go | 6 +- .../ethereum/go-ethereum/light/txpool.go | 78 +- .../ethereum/go-ethereum/light/txpool_test.go | 6 +- .../go-ethereum/metrics/influxdb/influxdb.go | 1 + .../ethereum/go-ethereum/metrics/metrics.go | 33 +- .../ethereum/go-ethereum/metrics/opentsdb.go | 2 +- .../go-ethereum/miner/stress_clique.go | 2 +- .../go-ethereum/miner/stress_ethash.go | 2 +- .../ethereum/go-ethereum/miner/worker.go | 5 + .../ethereum/go-ethereum/miner/worker_test.go | 13 +- .../ethereum/go-ethereum/mobile/geth.go | 10 + .../ethereum/go-ethereum/mobile/types.go | 12 +- .../ethereum/go-ethereum/node/config.go | 78 +- .../ethereum/go-ethereum/node/config_test.go | 18 +- .../ethereum/go-ethereum/node/defaults.go | 48 +- .../ethereum/go-ethereum/node/node.go | 32 +- .../go-ethereum/node/node_example_test.go | 2 + .../ethereum/go-ethereum/node/node_test.go | 24 + .../ethereum/go-ethereum/node/service.go | 7 +- .../ethereum/go-ethereum/node/service_test.go | 5 +- .../go-ethereum/p2p/discover/table_test.go | 2 + .../p2p/discover/table_util_test.go | 9 - .../ethereum/go-ethereum/p2p/discover/udp.go | 16 +- .../ethereum/go-ethereum/p2p/enode/nodedb.go | 6 +- .../go-ethereum/p2p/enode/nodedb_test.go | 2 +- .../ethereum/go-ethereum/p2p/metrics.go | 1 + .../protocols/accounting_simulation_test.go | 7 +- .../go-ethereum/p2p/protocols/protocol.go | 5 +- .../p2p/protocols/protocol_test.go | 63 +- .../go-ethereum/p2p/protocols/reporter.go | 15 + .../p2p/protocols/reporter_test.go | 2 +- .../p2p/simulations/adapters/exec.go | 17 +- .../p2p/simulations/adapters/inproc.go | 18 +- .../p2p/simulations/adapters/types.go | 51 +- .../go-ethereum/p2p/simulations/network.go | 10 +- .../p2p/simulations/network_test.go | 4 +- .../go-ethereum/p2p/testing/protocoltester.go | 38 +- .../go-ethereum/params/protocol_params.go | 2 +- .../ethereum/go-ethereum/params/version.go | 8 +- .../ethereum/go-ethereum/rlp/decode.go | 21 +- .../ethereum/go-ethereum/rpc/client.go | 562 +- .../ethereum/go-ethereum/rpc/client_test.go | 145 +- .../ethereum/go-ethereum/rpc/doc.go | 82 +- .../ethereum/go-ethereum/rpc/errors.go | 39 +- .../ethereum/go-ethereum/rpc/handler.go | 397 + .../ethereum/go-ethereum/rpc/http.go | 80 +- .../ethereum/go-ethereum/rpc/inproc.go | 4 +- .../ethereum/go-ethereum/rpc/ipc.go | 16 +- .../ethereum/go-ethereum/rpc/json.go | 497 +- .../ethereum/go-ethereum/rpc/json_test.go | 178 - .../ethereum/go-ethereum/rpc/server.go | 475 +- .../ethereum/go-ethereum/rpc/server_test.go | 230 +- .../ethereum/go-ethereum/rpc/service.go | 285 + .../ethereum/go-ethereum/rpc/stdio.go | 38 +- .../ethereum/go-ethereum/rpc/subscription.go | 360 +- .../go-ethereum/rpc/subscription_test.go | 323 +- .../go-ethereum/rpc/testdata/invalid-badid.js | 7 + .../go-ethereum/rpc/testdata/invalid-batch.js | 14 + .../rpc/testdata/invalid-idonly.js | 7 + .../rpc/testdata/invalid-nonobj.js | 4 + .../rpc/testdata/invalid-syntax.json | 5 + .../go-ethereum/rpc/testdata/reqresp-batch.js | 8 + .../go-ethereum/rpc/testdata/reqresp-echo.js | 16 + .../rpc/testdata/reqresp-namedparam.js | 5 + .../rpc/testdata/reqresp-noargsrets.js | 4 + .../rpc/testdata/reqresp-nomethod.js | 4 + .../rpc/testdata/reqresp-noparam.js | 4 + .../rpc/testdata/reqresp-paramsnull.js | 4 + .../go-ethereum/rpc/testdata/revcall.js | 6 + .../go-ethereum/rpc/testdata/revcall2.js | 7 + .../go-ethereum/rpc/testdata/subscription.js | 12 + .../go-ethereum/rpc/testservice_test.go | 180 + .../ethereum/go-ethereum/rpc/types.go | 82 +- .../ethereum/go-ethereum/rpc/utils.go | 226 - .../ethereum/go-ethereum/rpc/websocket.go | 60 +- .../go-ethereum/signer/core/abihelper.go | 19 +- .../go-ethereum/signer/core/abihelper_test.go | 5 +- .../ethereum/go-ethereum/signer/core/api.go | 334 +- .../go-ethereum/signer/core/api_test.go | 242 +- .../go-ethereum/signer/core/auditlog.go | 51 +- .../ethereum/go-ethereum/signer/core/cliui.go | 75 +- .../go-ethereum/signer/core/signed_data.go | 917 + .../signer/core/signed_data_test.go | 774 + .../go-ethereum/signer/core/stdioui.go | 58 +- .../ethereum/go-ethereum/signer/core/types.go | 30 +- .../ethereum/go-ethereum/signer/core/uiapi.go | 201 + .../signer/core/validation_test.go | 1 - .../go-ethereum/signer/rules/rules.go | 55 +- .../go-ethereum/signer/rules/rules_test.go | 88 +- .../go-ethereum/signer/storage/storage.go | 16 +- .../ethereum/go-ethereum/swarm/api/act.go | 2 +- .../ethereum/go-ethereum/swarm/api/api.go | 8 +- .../ethereum/go-ethereum/swarm/api/config.go | 75 +- .../go-ethereum/swarm/api/config_test.go | 10 +- .../go-ethereum/swarm/api/inspector.go | 9 + .../ethereum/go-ethereum/swarm/chunk/chunk.go | 108 +- .../types_test.go => chunk/proximity_test.go} | 2 +- .../go-ethereum/swarm/fuse/swarmfs.go | 8 +- .../go-ethereum/swarm/fuse/swarmfs_unix.go | 2 +- .../swarm/network/discovery_test.go | 7 +- .../ethereum/go-ethereum/swarm/network/enr.go | 93 + .../go-ethereum/swarm/network/fetcher.go | 19 +- .../go-ethereum/swarm/network/hive_test.go | 35 +- .../go-ethereum/swarm/network/kademlia.go | 51 +- .../go-ethereum/swarm/network/network.go | 105 + .../network/priorityqueue/priorityqueue.go | 23 +- .../go-ethereum/swarm/network/protocol.go | 57 - .../swarm/network/protocol_test.go | 97 +- .../swarm/network/simulation/kademlia.go | 110 +- .../swarm/network/simulation/kademlia_test.go | 269 +- .../swarm/network/simulation/node.go | 78 +- .../swarm/network/simulation/node_test.go | 6 +- .../swarm/network/simulation/simulation.go | 9 +- .../simulations/discovery/discovery_test.go | 11 +- .../swarm/network/simulations/overlay_test.go | 1 - .../swarm/network/stream/common_test.go | 12 +- .../swarm/network/stream/delivery.go | 38 +- .../swarm/network/stream/delivery_test.go | 12 +- .../swarm/network/stream/messages.go | 2 +- .../go-ethereum/swarm/network/stream/peer.go | 52 +- .../network/stream/snapshot_retrieval_test.go | 80 +- .../network/stream/snapshot_sync_test.go | 69 +- .../swarm/network/stream/stream.go | 76 +- .../swarm/network/stream/streamer_test.go | 46 +- .../swarm/network/stream/syncer.go | 5 + .../swarm/network/stream/syncer_test.go | 8 +- .../network/stream/testing/snapshot_128.json | 2 +- .../network/stream/testing/snapshot_16.json | 2 +- .../network/stream/testing/snapshot_256.json | 2 +- .../network/stream/testing/snapshot_32.json | 2 +- .../network/stream/testing/snapshot_4.json | 2 +- .../network/stream/testing/snapshot_64.json | 2 +- .../visualized_snapshot_sync_sim_test.go | 353 - .../go-ethereum/swarm/network_test.go | 130 +- .../swarm/pss/client/client_test.go | 16 - .../go-ethereum/swarm/pss/handshake.go | 78 +- .../go-ethereum/swarm/pss/handshake_test.go | 5 +- .../go-ethereum/swarm/pss/keystore.go | 4 +- .../swarm/pss/notify/notify_test.go | 16 +- .../go-ethereum/swarm/pss/prox_test.go | 473 + .../ethereum/go-ethereum/swarm/pss/pss.go | 89 +- .../go-ethereum/swarm/pss/pss_test.go | 16 - .../testdata/addpsstodiscoverytestsnapshot.pl | 28 - .../testdata/addpsstodiscoverytestsnapshot.sh | 3 - .../swarm/pss/testdata/snapshot_128.json | 2 +- .../swarm/pss/testdata/snapshot_16.json | 2 +- .../swarm/pss/testdata/snapshot_2.json | 2 +- .../swarm/pss/testdata/snapshot_256.json | 2 +- .../swarm/pss/testdata/snapshot_3.json | 2 +- .../swarm/pss/testdata/snapshot_32.json | 2 +- .../swarm/pss/testdata/snapshot_4.json | 2 +- .../swarm/pss/testdata/snapshot_64.json | 2 +- .../swarm/pss/testdata/snapshot_8.json | 2 +- .../ethereum/go-ethereum/swarm/shed/db.go | 43 +- .../go-ethereum/swarm/shed/db_test.go | 8 +- .../ethereum/go-ethereum/swarm/shed/index.go | 110 +- .../go-ethereum/swarm/shed/index_test.go | 183 +- .../go-ethereum/swarm/shed/vector_uint64.go | 146 + .../swarm/shed/vector_uint64_test.go | 312 + .../go-ethereum/swarm/storage/chunker.go | 11 +- .../go-ethereum/swarm/storage/common_test.go | 6 +- .../go-ethereum/swarm/storage/error.go | 9 +- .../swarm/storage/feed/lookup/lookup_test.go | 2 +- .../go-ethereum/swarm/storage/hasherstore.go | 16 +- .../go-ethereum/swarm/storage/ldbstore.go | 23 +- .../swarm/storage/ldbstore_test.go | 45 +- .../go-ethereum/swarm/storage/localstore.go | 2 +- .../swarm/storage/localstore/gc.go | 221 +- .../swarm/storage/localstore/gc_test.go | 109 +- .../swarm/storage/localstore/index_test.go | 10 +- .../swarm/storage/localstore/localstore.go | 131 +- .../storage/localstore/localstore_test.go | 166 +- .../swarm/storage/localstore/mode_get.go | 19 +- .../swarm/storage/localstore/mode_get_test.go | 4 +- .../swarm/storage/localstore/mode_has.go | 39 + .../swarm/storage/localstore/mode_has_test.go | 55 + .../swarm/storage/localstore/mode_put.go | 20 +- .../swarm/storage/localstore/mode_put_test.go | 18 +- .../swarm/storage/localstore/mode_set.go | 24 +- .../swarm/storage/localstore/mode_set_test.go | 6 +- .../localstore/retrieval_index_test.go | 10 +- .../storage/localstore/subscription_pull.go | 22 +- .../localstore/subscription_pull_test.go | 185 +- .../storage/localstore/subscription_push.go | 8 +- .../localstore/subscription_push_test.go | 32 +- .../swarm/storage/localstore_test.go | 12 +- .../go-ethereum/swarm/storage/mock/db/db.go | 295 +- .../swarm/storage/mock/db/db_test.go | 70 +- .../swarm/storage/mock/explorer/explorer.go | 257 + .../storage/mock/explorer/explorer_test.go | 471 + .../storage/mock/explorer/headers_test.go | 163 + .../swarm/storage/mock/explorer/swagger.yaml | 176 + .../go-ethereum/swarm/storage/mock/mem/mem.go | 270 +- .../swarm/storage/mock/mem/mem_test.go | 6 + .../go-ethereum/swarm/storage/mock/mock.go | 31 + .../go-ethereum/swarm/storage/mock/rpc/rpc.go | 24 + .../swarm/storage/mock/rpc/rpc_test.go | 29 +- .../swarm/storage/mock/test/test.go | 118 + .../go-ethereum/swarm/storage/netstore.go | 50 +- .../swarm/storage/netstore_test.go | 24 +- .../go-ethereum/swarm/storage/pyramid.go | 6 +- .../go-ethereum/swarm/storage/types.go | 120 +- .../ethereum/go-ethereum/swarm/swarm.go | 11 +- .../ethereum/go-ethereum/swarm/swarm_test.go | 12 +- .../config.go => swarm/testutil/norace.go} | 19 +- .../stream/race_test.go => testutil/race.go} | 8 +- .../go-ethereum/swarm/tracing/tracing.go | 77 +- .../go-ethereum/swarm/version/version.go | 8 +- .../go-ethereum/tests/block_test_util.go | 4 +- .../go-ethereum/tests/state_test_util.go | 3 +- .../go-ethereum/tests/vm_test_util.go | 4 +- .../ethereum/go-ethereum/trie/database.go | 175 +- .../ethereum/go-ethereum/trie/hasher.go | 25 +- .../ethereum/go-ethereum/trie/iterator.go | 2 +- .../go-ethereum/trie/iterator_test.go | 17 +- .../ethereum/go-ethereum/trie/node.go | 38 +- .../ethereum/go-ethereum/trie/node_test.go | 58 - .../ethereum/go-ethereum/trie/proof.go | 12 +- .../ethereum/go-ethereum/trie/proof_test.go | 31 +- .../ethereum/go-ethereum/trie/secure_trie.go | 11 +- .../go-ethereum/trie/secure_trie_test.go | 9 +- .../ethereum/go-ethereum/trie/sync.go | 14 +- .../ethereum/go-ethereum/trie/sync_test.go | 34 +- .../ethereum/go-ethereum/trie/trie.go | 47 +- .../ethereum/go-ethereum/trie/trie_test.go | 90 +- .../go-ethereum/whisper/whisperv5/api.go | 561 - .../whisper/whisperv5/benchmarks_test.go | 206 - .../go-ethereum/whisper/whisperv5/doc.go | 87 - .../go-ethereum/whisper/whisperv5/envelope.go | 246 - .../go-ethereum/whisper/whisperv5/filter.go | 243 - .../whisper/whisperv5/filter_test.go | 848 - .../whisper/whisperv5/gen_criteria_json.go | 64 - .../whisper/whisperv5/gen_message_json.go | 82 - .../whisper/whisperv5/gen_newmessage_json.go | 88 - .../go-ethereum/whisper/whisperv5/message.go | 352 - .../whisper/whisperv5/message_test.go | 415 - .../go-ethereum/whisper/whisperv5/peer.go | 174 - .../whisper/whisperv5/peer_test.go | 297 - .../go-ethereum/whisper/whisperv5/topic.go | 55 - .../whisper/whisperv5/topic_test.go | 134 - .../go-ethereum/whisper/whisperv5/whisper.go | 855 - .../whisper/whisperv5/whisper_test.go | 858 - .../go-ethereum/whisper/whisperv6/envelope.go | 24 +- .../whisper/whisperv6/envelope_test.go | 27 + vendor/github.com/philhofer/fwd/LICENSE.md | 7 - vendor/github.com/philhofer/fwd/README.md | 315 - vendor/github.com/philhofer/fwd/reader.go | 383 - .../github.com/philhofer/fwd/reader_test.go | 398 - vendor/github.com/philhofer/fwd/writer.go | 224 - .../philhofer/fwd/writer_appengine.go | 5 - .../github.com/philhofer/fwd/writer_test.go | 239 - .../github.com/philhofer/fwd/writer_unsafe.go | 18 - vendor/github.com/tinylib/msgp/.gitignore | 7 - vendor/github.com/tinylib/msgp/.travis.yml | 11 - vendor/github.com/tinylib/msgp/LICENSE | 8 - vendor/github.com/tinylib/msgp/Makefile | 55 - vendor/github.com/tinylib/msgp/README.md | 102 - .../github.com/tinylib/msgp/_generated/def.go | 212 - .../tinylib/msgp/_generated/gen_test.go | 150 - .../tinylib/msgp/_generated/issue94.go | 31 - .../tinylib/msgp/_generated/search.sh | 12 - vendor/github.com/tinylib/msgp/gen/decode.go | 218 - vendor/github.com/tinylib/msgp/gen/elem.go | 598 - vendor/github.com/tinylib/msgp/gen/encode.go | 184 - vendor/github.com/tinylib/msgp/gen/marshal.go | 198 - vendor/github.com/tinylib/msgp/gen/size.go | 272 - vendor/github.com/tinylib/msgp/gen/spec.go | 376 - vendor/github.com/tinylib/msgp/gen/testgen.go | 182 - .../github.com/tinylib/msgp/gen/unmarshal.go | 199 - vendor/github.com/tinylib/msgp/main.go | 119 - .../tinylib/msgp/msgp/advise_linux.go | 24 - .../tinylib/msgp/msgp/advise_other.go | 17 - .../github.com/tinylib/msgp/msgp/appengine.go | 15 - .../github.com/tinylib/msgp/msgp/circular.go | 39 - vendor/github.com/tinylib/msgp/msgp/defs.go | 142 - .../github.com/tinylib/msgp/msgp/defs_test.go | 12 - vendor/github.com/tinylib/msgp/msgp/edit.go | 241 - .../github.com/tinylib/msgp/msgp/edit_test.go | 200 - vendor/github.com/tinylib/msgp/msgp/elsize.go | 99 - vendor/github.com/tinylib/msgp/msgp/errors.go | 142 - .../github.com/tinylib/msgp/msgp/extension.go | 548 - .../tinylib/msgp/msgp/extension_test.go | 49 - vendor/github.com/tinylib/msgp/msgp/file.go | 92 - .../github.com/tinylib/msgp/msgp/file_port.go | 47 - .../github.com/tinylib/msgp/msgp/file_test.go | 103 - .../tinylib/msgp/msgp/floatbench_test.go | 25 - .../github.com/tinylib/msgp/msgp/integers.go | 174 - vendor/github.com/tinylib/msgp/msgp/json.go | 542 - .../tinylib/msgp/msgp/json_bytes.go | 363 - .../tinylib/msgp/msgp/json_bytes_test.go | 121 - .../github.com/tinylib/msgp/msgp/json_test.go | 142 - vendor/github.com/tinylib/msgp/msgp/number.go | 267 - .../tinylib/msgp/msgp/number_test.go | 94 - .../github.com/tinylib/msgp/msgp/raw_test.go | 85 - vendor/github.com/tinylib/msgp/msgp/read.go | 1265 - .../tinylib/msgp/msgp/read_bytes.go | 1089 - .../tinylib/msgp/msgp/read_bytes_test.go | 518 - .../github.com/tinylib/msgp/msgp/read_test.go | 770 - vendor/github.com/tinylib/msgp/msgp/size.go | 38 - vendor/github.com/tinylib/msgp/msgp/unsafe.go | 40 - vendor/github.com/tinylib/msgp/msgp/write.go | 845 - .../tinylib/msgp/msgp/write_bytes.go | 411 - .../tinylib/msgp/msgp/write_bytes_test.go | 319 - .../tinylib/msgp/msgp/write_test.go | 405 - .../tinylib/msgp/parse/directives.go | 117 - .../github.com/tinylib/msgp/parse/getast.go | 589 - .../github.com/tinylib/msgp/parse/inline.go | 146 - .../github.com/tinylib/msgp/printer/print.go | 128 - .../dd-trace-go.v1/.circleci/config.yml | 135 - .../DataDog/dd-trace-go.v1/.gitignore | 14 - .../DataDog/dd-trace-go.v1/CONTRIBUTING.md | 17 - .../gopkg.in/DataDog/dd-trace-go.v1/LICENSE | 24 - .../dd-trace-go.v1/LICENSE-3rdparty.csv | 2 - .../DataDog/dd-trace-go.v1/MIGRATING.md | 104 - .../gopkg.in/DataDog/dd-trace-go.v1/README.md | 30 - .../DataDog/dd-trace-go.v1/contrib/README.md | 19 - .../contrib/Shopify/sarama/example_test.go | 77 - .../contrib/Shopify/sarama/headers.go | 90 - .../contrib/Shopify/sarama/option.go | 19 - .../contrib/Shopify/sarama/sarama.go | 258 - .../contrib/Shopify/sarama/sarama_test.go | 290 - .../contrib/aws/aws-sdk-go/aws/aws.go | 99 - .../contrib/aws/aws-sdk-go/aws/aws_test.go | 77 - .../aws/aws-sdk-go/aws/example_test.go | 21 - .../contrib/aws/aws-sdk-go/aws/option.go | 17 - .../gomemcache/memcache/example_test.go | 22 - .../bradfitz/gomemcache/memcache/memcache.go | 162 - .../gomemcache/memcache/memcache_test.go | 146 - .../bradfitz/gomemcache/memcache/option.go | 22 - .../confluent-kafka-go/kafka/headers.go | 47 - .../confluent-kafka-go/kafka/kafka.go | 223 - .../confluent-kafka-go/kafka/kafka_test.go | 172 - .../confluent-kafka-go/kafka/option.go | 36 - .../contrib/database/sql/conn.go | 119 - .../contrib/database/sql/driver.go | 82 - .../contrib/database/sql/example_test.go | 82 - .../contrib/database/sql/internal/dsn.go | 83 - .../contrib/database/sql/internal/dsn_test.go | 100 - .../contrib/database/sql/internal/mysql.go | 167 - .../contrib/database/sql/internal/postgres.go | 194 - .../contrib/database/sql/option.go | 17 - .../contrib/database/sql/sql.go | 60 - .../contrib/database/sql/sql_test.go | 77 - .../contrib/database/sql/stmt.go | 82 - .../dd-trace-go.v1/contrib/database/sql/tx.go | 35 - .../contrib/garyburd/redigo/example_test.go | 80 - .../contrib/garyburd/redigo/option.go | 17 - .../contrib/garyburd/redigo/redigo.go | 153 - .../contrib/garyburd/redigo/redigo_test.go | 176 - .../contrib/gin-gonic/gin/example_test.go | 53 - .../contrib/gin-gonic/gin/gintrace.go | 62 - .../contrib/gin-gonic/gin/gintrace_test.go | 191 - .../contrib/globalsign/mgo/collection.go | 202 - .../contrib/globalsign/mgo/mgo.go | 144 - .../contrib/globalsign/mgo/mgo_test.go | 354 - .../contrib/globalsign/mgo/option.go | 32 - .../contrib/globalsign/mgo/pipe.go | 60 - .../contrib/globalsign/mgo/query.go | 183 - .../contrib/go-redis/redis/example_test.go | 54 - .../contrib/go-redis/redis/option.go | 17 - .../contrib/go-redis/redis/redis.go | 176 - .../contrib/go-redis/redis/redis_test.go | 196 - .../contrib/gocql/gocql/example_test.go | 32 - .../contrib/gocql/gocql/gocql.go | 150 - .../contrib/gocql/gocql/gocql_test.go | 121 - .../contrib/gocql/gocql/option.go | 29 - .../contrib/google.golang.org/api/api.go | 50 - .../contrib/google.golang.org/api/api_test.go | 106 - .../google.golang.org/api/endpoints_gen.go | 6238 -- .../google.golang.org/api/example_test.go | 22 - .../google.golang.org/api/internal/tree.go | 121 - .../api/internal/tree_test.go | 39 - .../google.golang.org/api/make_endpoints.go | 173 - .../contrib/google.golang.org/api/option.go | 45 - .../grpc.v12/example_test.go | 45 - .../grpc.v12/fixtures_test.pb.go | 163 - .../grpc.v12/fixtures_test.proto | 21 - .../google.golang.org/grpc.v12/grpc.go | 93 - .../google.golang.org/grpc.v12/grpc_test.go | 203 - .../google.golang.org/grpc.v12/option.go | 18 - .../google.golang.org/grpc.v12/tags.go | 7 - .../contrib/google.golang.org/grpc/client.go | 176 - .../google.golang.org/grpc/example_test.go | 48 - .../grpc/fixtures_test.pb.go | 230 - .../grpc/fixtures_test.proto | 22 - .../contrib/google.golang.org/grpc/grpc.go | 41 - .../google.golang.org/grpc/grpc_test.go | 423 - .../contrib/google.golang.org/grpc/option.go | 51 - .../contrib/google.golang.org/grpc/server.go | 93 - .../contrib/google.golang.org/grpc/tags.go | 7 - .../internal/grpcutil/mdcarrier.go | 44 - .../internal/grpcutil/mdcarrier_test.go | 57 - .../contrib/gorilla/mux/example_test.go | 23 - .../dd-trace-go.v1/contrib/gorilla/mux/mux.go | 103 - .../contrib/gorilla/mux/mux_test.go | 141 - .../contrib/gorilla/mux/option.go | 30 - .../graph-gophers/graphql-go/example_test.go | 32 - .../graph-gophers/graphql-go/graphql.go | 81 - .../graph-gophers/graphql-go/graphql_test.go | 63 - .../graph-gophers/graphql-go/option.go | 17 - .../internal/httputil/make_responsewriter.go | 68 - .../contrib/internal/httputil/trace.go | 66 - .../contrib/internal/httputil/trace_gen.go | 121 - .../contrib/internal/httputil/trace_test.go | 160 - .../contrib/internal/lists/combinations.go | 39 - .../internal/lists/combinations_test.go | 39 - .../contrib/internal/sqltest/sqltest.go | 216 - .../contrib/jinzhu/gorm/example_test.go | 31 - .../contrib/jinzhu/gorm/gorm.go | 18 - .../contrib/jinzhu/gorm/gorm_test.go | 78 - .../contrib/jmoiron/sqlx/example_test.go | 34 - .../contrib/jmoiron/sqlx/sql.go | 62 - .../contrib/jmoiron/sqlx/sql_test.go | 78 - .../julienschmidt/httprouter/example_test.go | 35 - .../julienschmidt/httprouter/httprouter.go | 39 - .../httprouter/httprouter_test.go | 80 - .../julienschmidt/httprouter/option.go | 17 - .../client-go/kubernetes/example_test.go | 32 - .../k8s.io/client-go/kubernetes/kubernetes.go | 71 - .../client-go/kubernetes/kubernetes_test.go | 70 - .../dd-trace-go.v1/contrib/miekg/dns/dns.go | 111 - .../contrib/miekg/dns/dns_test.go | 72 - .../contrib/miekg/dns/example_test.go | 28 - .../mongo-go-driver/mongo/example_test.go | 35 - .../mongodb/mongo-go-driver/mongo/mongo.go | 100 - .../mongo-go-driver/mongo/mongo_test.go | 192 - .../contrib/net/http/example_test.go | 23 - .../dd-trace-go.v1/contrib/net/http/http.go | 46 - .../contrib/net/http/http_test.go | 106 - .../dd-trace-go.v1/contrib/net/http/option.go | 56 - .../contrib/net/http/roundtripper.go | 68 - .../contrib/net/http/roundtripper_test.go | 61 - .../contrib/olivere/elastic/elastictrace.go | 116 - .../olivere/elastic/elastictrace_test.go | 345 - .../contrib/olivere/elastic/example_test.go | 62 - .../contrib/olivere/elastic/option.go | 30 - .../syndtr/goleveldb/leveldb/example_test.go | 23 - .../syndtr/goleveldb/leveldb/leveldb.go | 267 - .../syndtr/goleveldb/leveldb/leveldb_test.go | 145 - .../syndtr/goleveldb/leveldb/option.go | 36 - .../contrib/tidwall/buntdb/buntdb.go | 313 - .../contrib/tidwall/buntdb/buntdb_test.go | 425 - .../contrib/tidwall/buntdb/example_test.go | 36 - .../contrib/tidwall/buntdb/option.go | 30 - .../DataDog/dd-trace-go.v1/ddtrace/Gopkg.toml | 9 - .../DataDog/dd-trace-go.v1/ddtrace/ddtrace.go | 108 - .../dd-trace-go.v1/ddtrace/example_test.go | 73 - .../dd-trace-go.v1/ddtrace/ext/app_types.go | 70 - .../dd-trace-go.v1/ddtrace/ext/cassandra.go | 21 - .../DataDog/dd-trace-go.v1/ddtrace/ext/db.go | 16 - .../dd-trace-go.v1/ddtrace/ext/ext_test.go | 36 - .../dd-trace-go.v1/ddtrace/ext/peer.go | 14 - .../dd-trace-go.v1/ddtrace/ext/priority.go | 22 - .../dd-trace-go.v1/ddtrace/ext/system.go | 7 - .../dd-trace-go.v1/ddtrace/ext/tags.go | 57 - .../ddtrace/internal/globaltracer.go | 98 - .../ddtrace/mocktracer/example_test.go | 21 - .../ddtrace/mocktracer/mockspan.go | 214 - .../ddtrace/mocktracer/mockspan_test.go | 173 - .../ddtrace/mocktracer/mockspancontext.go | 73 - .../mocktracer/mockspancontext_test.go | 61 - .../ddtrace/mocktracer/mocktracer.go | 159 - .../ddtrace/mocktracer/mocktracer_test.go | 238 - .../ddtrace/opentracer/example_test.go | 18 - .../ddtrace/opentracer/option.go | 24 - .../dd-trace-go.v1/ddtrace/opentracer/span.go | 83 - .../ddtrace/opentracer/tracer.go | 81 - .../ddtrace/opentracer/tracer_test.go | 20 - .../dd-trace-go.v1/ddtrace/tracer/context.go | 42 - .../ddtrace/tracer/context_test.go | 71 - .../dd-trace-go.v1/ddtrace/tracer/doc.go | 50 - .../dd-trace-go.v1/ddtrace/tracer/errors.go | 69 - .../ddtrace/tracer/errors_test.go | 38 - .../ddtrace/tracer/example_test.go | 34 - .../dd-trace-go.v1/ddtrace/tracer/option.go | 163 - .../ddtrace/tracer/option_test.go | 40 - .../dd-trace-go.v1/ddtrace/tracer/payload.go | 116 - .../ddtrace/tracer/payload_test.go | 100 - .../ddtrace/tracer/propagator.go | 52 - .../dd-trace-go.v1/ddtrace/tracer/rand.go | 50 - .../dd-trace-go.v1/ddtrace/tracer/sampler.go | 72 - .../ddtrace/tracer/sampler_test.go | 38 - .../dd-trace-go.v1/ddtrace/tracer/span.go | 231 - .../ddtrace/tracer/span_msgp.go | 448 - .../ddtrace/tracer/span_test.go | 348 - .../ddtrace/tracer/spancontext.go | 193 - .../ddtrace/tracer/spancontext_test.go | 285 - .../dd-trace-go.v1/ddtrace/tracer/textmap.go | 197 - .../ddtrace/tracer/textmap_test.go | 170 - .../dd-trace-go.v1/ddtrace/tracer/time.go | 10 - .../ddtrace/tracer/time_windows.go | 35 - .../ddtrace/tracer/time_windows_test.go | 30 - .../dd-trace-go.v1/ddtrace/tracer/tracer.go | 370 - .../ddtrace/tracer/tracer_test.go | 902 - .../ddtrace/tracer/transport.go | 129 - .../ddtrace/tracer/transport_test.go | 163 - .../dd-trace-go.v1/ddtrace/tracer/util.go | 50 - .../ddtrace/tracer/util_test.go | 60 - 808 files changed, 70962 insertions(+), 99488 deletions(-) create mode 100644 vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics_test.go rename vendor/github.com/ethereum/go-ethereum/{swarm/network/stream/norace_test.go => accounts/accounts_test.go} (70%) create mode 100644 vendor/github.com/ethereum/go-ethereum/accounts/external/backend.go rename vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/{internal => }/trezor/messages.pb.go (100%) rename vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/{internal => }/trezor/messages.proto (100%) rename vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/{internal => }/trezor/trezor.go (100%) rename vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/{internal => }/trezor/types.pb.go (100%) rename vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/{internal => }/trezor/types.proto (100%) create mode 100755 vendor/github.com/ethereum/go-ethereum/build/travis_keepalive.sh create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/datatypes.md create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt1.png create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt2.png create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt3.png create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt4.png create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/clef/tests/testsigner.js create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer.go create mode 100644 vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/common/compiler/helpers.go create mode 100644 vendor/github.com/ethereum/go-ethereum/common/compiler/test.v.py create mode 100644 vendor/github.com/ethereum/go-ethereum/common/compiler/test_bad.v.py create mode 100644 vendor/github.com/ethereum/go-ethereum/common/compiler/vyper.go create mode 100644 vendor/github.com/ethereum/go-ethereum/common/compiler/vyper_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_darwin.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/containers/docker/develop-alpine/Dockerfile delete mode 100644 vendor/github.com/ethereum/go-ethereum/containers/docker/develop-ubuntu/Dockerfile delete mode 100644 vendor/github.com/ethereum/go-ethereum/containers/docker/master-alpine/Dockerfile delete mode 100644 vendor/github.com/ethereum/go-ethereum/containers/docker/master-ubuntu/Dockerfile create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/cid.go create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/cid_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/AbstractENS.sol create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENSRegistry.sol create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ensregistry.go create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/PublicResolver.sol create mode 100644 vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/publicresolver.go create mode 100644 vendor/github.com/ethereum/go-ethereum/core/rawdb/database.go create mode 100644 vendor/github.com/ethereum/go-ethereum/core/rawdb/table.go create mode 100644 vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintignore create mode 100644 vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx rename vendor/github.com/ethereum/go-ethereum/dashboard/assets/{webpack.config.js => webpack.config.common.js} (58%) rename vendor/github.com/ethereum/go-ethereum/{core/rawdb/interfaces.go => dashboard/assets/webpack.config.dev.js} (63%) rename vendor/github.com/ethereum/go-ethereum/{rpc/utils_test.go => dashboard/assets/webpack.config.prod.js} (53%) create mode 100644 vendor/github.com/ethereum/go-ethereum/dashboard/geoip.go create mode 100644 vendor/github.com/ethereum/go-ethereum/dashboard/peers.go create mode 100644 vendor/github.com/ethereum/go-ethereum/dashboard/system.go create mode 100644 vendor/github.com/ethereum/go-ethereum/docs/audits/2017-04-25_Geth-audit_Truesec.pdf create mode 100644 vendor/github.com/ethereum/go-ethereum/docs/audits/2018-09-14_Clef-audit_NCC.pdf create mode 100644 vendor/github.com/ethereum/go-ethereum/eth/ulc_config.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/.gitignore rename vendor/github.com/ethereum/go-ethereum/ethdb/{interface.go => batch.go} (53%) delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/database_js.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/database_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/iterator.go create mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/leveldb/leveldb.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/memory_database.go create mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb.go create mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/table.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/ethdb/table_batch.go create mode 100644 vendor/github.com/ethereum/go-ethereum/graphql/graphiql.go create mode 100644 vendor/github.com/ethereum/go-ethereum/graphql/graphql.go rename vendor/github.com/ethereum/go-ethereum/{ethdb/database_js_test.go => graphql/graphql_test.go} (72%) create mode 100644 vendor/github.com/ethereum/go-ethereum/graphql/schema.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/api.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/api_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/benchmark.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/costtracker.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/fetcher_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/flowcontrol/logger.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/peer_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/servingqueue.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/ulc.go create mode 100644 vendor/github.com/ethereum/go-ethereum/les/ulc_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/handler.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/json_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/service.go create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-badid.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-batch.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-idonly.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-nonobj.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-syntax.json create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-batch.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-echo.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-namedparam.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noargsrets.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-nomethod.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noparam.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-paramsnull.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall2.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testdata/subscription.js create mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/testservice_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/rpc/utils.go create mode 100644 vendor/github.com/ethereum/go-ethereum/signer/core/signed_data.go create mode 100644 vendor/github.com/ethereum/go-ethereum/signer/core/signed_data_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/signer/core/uiapi.go rename vendor/github.com/ethereum/go-ethereum/swarm/{storage/types_test.go => chunk/proximity_test.go} (99%) create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/network/enr.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/network/network.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/network/stream/visualized_snapshot_sync_sim_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/pss/prox_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl delete mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/headers_test.go create mode 100644 vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/swagger.yaml rename vendor/github.com/ethereum/go-ethereum/{whisper/whisperv5/config.go => swarm/testutil/norace.go} (62%) rename vendor/github.com/ethereum/go-ethereum/swarm/{network/stream/race_test.go => testutil/race.go} (83%) delete mode 100644 vendor/github.com/ethereum/go-ethereum/trie/node_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/api.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/benchmarks_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/doc.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/envelope.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_criteria_json.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_message_json.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_newmessage_json.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic_test.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper.go delete mode 100644 vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper_test.go delete mode 100644 vendor/github.com/philhofer/fwd/LICENSE.md delete mode 100644 vendor/github.com/philhofer/fwd/README.md delete mode 100644 vendor/github.com/philhofer/fwd/reader.go delete mode 100644 vendor/github.com/philhofer/fwd/reader_test.go delete mode 100644 vendor/github.com/philhofer/fwd/writer.go delete mode 100644 vendor/github.com/philhofer/fwd/writer_appengine.go delete mode 100644 vendor/github.com/philhofer/fwd/writer_test.go delete mode 100644 vendor/github.com/philhofer/fwd/writer_unsafe.go delete mode 100644 vendor/github.com/tinylib/msgp/.gitignore delete mode 100644 vendor/github.com/tinylib/msgp/.travis.yml delete mode 100644 vendor/github.com/tinylib/msgp/LICENSE delete mode 100644 vendor/github.com/tinylib/msgp/Makefile delete mode 100644 vendor/github.com/tinylib/msgp/README.md delete mode 100644 vendor/github.com/tinylib/msgp/_generated/def.go delete mode 100644 vendor/github.com/tinylib/msgp/_generated/gen_test.go delete mode 100644 vendor/github.com/tinylib/msgp/_generated/issue94.go delete mode 100755 vendor/github.com/tinylib/msgp/_generated/search.sh delete mode 100644 vendor/github.com/tinylib/msgp/gen/decode.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/elem.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/encode.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/marshal.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/size.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/spec.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/testgen.go delete mode 100644 vendor/github.com/tinylib/msgp/gen/unmarshal.go delete mode 100644 vendor/github.com/tinylib/msgp/main.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/advise_linux.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/advise_other.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/appengine.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/circular.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/defs.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/defs_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/edit.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/edit_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/elsize.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/errors.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/extension.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/extension_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/file.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/file_port.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/file_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/floatbench_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/integers.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/json.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/json_bytes.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/json_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/number.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/number_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/raw_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/read.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/read_bytes.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/read_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/size.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/unsafe.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/write.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/write_bytes.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go delete mode 100644 vendor/github.com/tinylib/msgp/msgp/write_test.go delete mode 100644 vendor/github.com/tinylib/msgp/parse/directives.go delete mode 100644 vendor/github.com/tinylib/msgp/parse/getast.go delete mode 100644 vendor/github.com/tinylib/msgp/parse/inline.go delete mode 100644 vendor/github.com/tinylib/msgp/printer/print.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/.circleci/config.yml delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/.gitignore delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/CONTRIBUTING.md delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE-3rdparty.csv delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/MIGRATING.md delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/README.md delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/README.md delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/headers.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/headers.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/conn.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/driver.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/mysql.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/postgres.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/stmt.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/tx.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/collection.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/pipe.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/query.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/endpoints_gen.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/make_endpoints.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.pb.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.proto delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/tags.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/client.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.pb.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.proto delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/server.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/tags.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/make_responsewriter.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_gen.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest/sqltest.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/Gopkg.toml delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ddtrace.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/app_types.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/cassandra.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/db.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/ext_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/peer.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/priority.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/system.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/tags.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal/globaltracer.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/doc.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/example_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/propagator.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/rand.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_msgp.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport_test.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util.go delete mode 100644 vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util_test.go diff --git a/Gopkg.lock b/Gopkg.lock index 22758f14..adc6f867 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -45,7 +45,7 @@ version = "v1.7.1" [[projects]] - digest = "1:49b5451a4ce27b50393cc0d4c6fdd9cf7fa148ee4c0dd9c1d6c515b232427022" + digest = "1:90d36f5b581e95e00ced808cd48824ed6c320c25887828cce461bdef4cb7bc7c" name = "github.com/ethereum/go-ethereum" packages = [ ".", @@ -66,6 +66,8 @@ "crypto/secp256k1", "ethclient", "ethdb", + "ethdb/leveldb", + "ethdb/memorydb", "event", "log", "metrics", @@ -82,8 +84,7 @@ "trie", ] pruneopts = "" - revision = "c942700427557e3ff6de3aaf6b916e2f056c1ec2" - version = "v1.8.23" + revision = "cd79bc61a983d6482579d12cdd239b37bbfa12ef" [[projects]] digest = "1:eb53021a8aa3f599d29c7102e65026242bdedce998a54837dc67f14b6a97c5fd" @@ -320,14 +321,6 @@ revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" version = "v1.2.0" -[[projects]] - digest = "1:210286d0cb60ffe28f1ca00b664029e8943009f95d06d8f8c336301b28e1aee5" - name = "github.com/philhofer/fwd" - packages = ["."] - pruneopts = "" - revision = "bb6d471dc95d4fe11e432687f8b70ff496cf3136" - version = "v1.0.0" - [[projects]] digest = "1:7143292549152d009ca9e9c493b74736a2ebd93f921bea8a4b308d7cc5edc6b3" name = "github.com/rjeczalik/notify" @@ -424,14 +417,6 @@ pruneopts = "" revision = "ae2bd5eed72d46b28834ec3f60db3a3ebedd8dbd" -[[projects]] - digest = "1:cae65c1f3471b1f456a9d8a160440f4824ad50c718a15da4144490fbc3b12e49" - name = "github.com/tinylib/msgp" - packages = ["msgp"] - pruneopts = "" - revision = "b2b6a672cf1e5b90748f79b8b81fc8c5cf0571a1" - version = "1.0.2" - [[projects]] branch = "master" digest = "1:59b49c47c11a48f1054529207f65907c014ecf5f9a7c0d9c0f1616dec7b062ed" @@ -507,19 +492,6 @@ revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" -[[projects]] - digest = "1:be560af8c72c59788a6748eae60b8e1fe136fefdf049b7dfb6f5b591ea337984" - name = "gopkg.in/DataDog/dd-trace-go.v1" - packages = [ - "ddtrace", - "ddtrace/ext", - "ddtrace/internal", - "ddtrace/tracer", - ] - pruneopts = "" - revision = "bcd20367df871708a36549e7fe36183ee5b4fc55" - version = "v1.3.0" - [[projects]] digest = "1:eb53021a8aa3f599d29c7102e65026242bdedce998a54837dc67f14b6a97c5fd" name = "gopkg.in/fsnotify.v1" @@ -571,6 +543,7 @@ "github.com/ethereum/go-ethereum/p2p", "github.com/ethereum/go-ethereum/p2p/discv5", "github.com/ethereum/go-ethereum/params", + "github.com/ethereum/go-ethereum/rlp", "github.com/ethereum/go-ethereum/rpc", "github.com/hashicorp/golang-lru", "github.com/hpcloud/tail", @@ -585,7 +558,6 @@ "github.com/spf13/viper", "golang.org/x/net/context", "golang.org/x/sync/errgroup", - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer", "gopkg.in/tomb.v1", ] solver-name = "gps-cdcl" diff --git a/Gopkg.toml b/Gopkg.toml index 3b76f9ee..e42fb2af 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -51,4 +51,4 @@ [[constraint]] name = "github.com/ethereum/go-ethereum" - version = "1.8.23" + revision = "cd79bc61a983d6482579d12cdd239b37bbfa12ef" diff --git a/Makefile b/Makefile index ab1413e6..f8658e97 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,6 @@ dep: | $(DEP) $(DEP) ensure build: dep - git checkout vendor/github.com/ethereum/go-ethereum/accounts/abi go fmt ./... go build diff --git a/README.md b/README.md index 77ccdee1..3315847d 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,6 @@ In order to install packages with `dep`, ensure you are in the project directory After `dep` finishes, dependencies should be installed within your `GOPATH` at the versions specified in `Gopkg.toml`. -Because we are working with a modified version of the go-ethereum accounts/abi package, after running `dep ensure` you will need to run `git checkout vendor/github/ethereum/go-ethereum/accounts/abi` to checkout the modified dependency. - Lastly, ensure that `GOPATH` is defined in your shell. If necessary, `GOPATH` can be set in `~/.bashrc` or `~/.bash_profile`, depending upon your system. It can be additionally helpful to add `$GOPATH/bin` to your shell's `$PATH`. ### Setting up the Database diff --git a/pkg/datastore/ethereum/database.go b/pkg/datastore/ethereum/database.go index b034f515..2f36ea2a 100644 --- a/pkg/datastore/ethereum/database.go +++ b/pkg/datastore/ethereum/database.go @@ -18,11 +18,10 @@ package ethereum import ( "fmt" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/sirupsen/logrus" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/vulcanize/vulcanizedb/pkg/datastore/ethereum/level" ) @@ -36,7 +35,7 @@ type Database interface { func CreateDatabase(config DatabaseConfig) (Database, error) { switch config.Type { case Level: - levelDBConnection, err := ethdb.NewLDBDatabase(config.Path, 128, 1024) + levelDBConnection, err := rawdb.NewLevelDBDatabase(config.Path, 128, 1024, "vdb") if err != nil { logrus.Error("CreateDatabase: error connecting to new LDBD: ", err) return nil, err diff --git a/pkg/datastore/ethereum/level/database_reader.go b/pkg/datastore/ethereum/level/database_reader.go index 5a2b87a7..670fb2de 100644 --- a/pkg/datastore/ethereum/level/database_reader.go +++ b/pkg/datastore/ethereum/level/database_reader.go @@ -20,6 +20,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" ) type Reader interface { @@ -31,10 +32,10 @@ type Reader interface { } type LevelDatabaseReader struct { - reader rawdb.DatabaseReader + reader ethdb.Reader } -func NewLevelDatabaseReader(reader rawdb.DatabaseReader) *LevelDatabaseReader { +func NewLevelDatabaseReader(reader ethdb.Reader) *LevelDatabaseReader { return &LevelDatabaseReader{reader: reader} } diff --git a/vendor/github.com/ethereum/go-ethereum/.github/CODEOWNERS b/vendor/github.com/ethereum/go-ethereum/.github/CODEOWNERS index c03fa06c..959b5015 100644 --- a/vendor/github.com/ethereum/go-ethereum/.github/CODEOWNERS +++ b/vendor/github.com/ethereum/go-ethereum/.github/CODEOWNERS @@ -6,8 +6,12 @@ accounts/abi @gballet consensus @karalabe core/ @karalabe @holiman eth/ @karalabe +graphql/ @gballet les/ @zsfelfoldi light/ @zsfelfoldi mobile/ @karalabe p2p/ @fjl @zsfelfoldi +p2p/simulations @zelig @nonsense @janos @justelad +p2p/protocols @zelig @nonsense @janos @justelad +p2p/testing @zelig @nonsense @janos @justelad whisper/ @gballet @gluk256 diff --git a/vendor/github.com/ethereum/go-ethereum/.gitignore b/vendor/github.com/ethereum/go-ethereum/.gitignore index 3e0009e1..3016face 100644 --- a/vendor/github.com/ethereum/go-ethereum/.gitignore +++ b/vendor/github.com/ethereum/go-ethereum/.gitignore @@ -42,6 +42,7 @@ profile.cov /dashboard/assets/node_modules /dashboard/assets/stats.json /dashboard/assets/bundle.js +/dashboard/assets/bundle.js.map /dashboard/assets/package-lock.json **/yarn-error.log diff --git a/vendor/github.com/ethereum/go-ethereum/.travis.yml b/vendor/github.com/ethereum/go-ethereum/.travis.yml index a079d9eb..8ff5fa3c 100644 --- a/vendor/github.com/ethereum/go-ethereum/.travis.yml +++ b/vendor/github.com/ethereum/go-ethereum/.travis.yml @@ -14,7 +14,6 @@ matrix: - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES - # These are the latest Go versions. - os: linux dist: trusty sudo: required @@ -26,8 +25,20 @@ matrix: - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES + # These are the latest Go versions. + - os: linux + dist: trusty + sudo: required + go: 1.12.x + script: + - sudo modprobe fuse + - sudo chmod 666 /dev/fuse + - sudo chown root:$USER /etc/fuse.conf + - go run build/ci.go install + - go run build/ci.go test -coverage $TEST_PACKAGES + - os: osx - go: 1.11.x + go: 1.12.x script: - echo "Increase the maximum number of open file descriptors on macOS" - NOFILE=20480 @@ -44,7 +55,7 @@ matrix: # This builder only tests code linters on latest version of Go - os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - lint git: @@ -53,10 +64,10 @@ matrix: - go run build/ci.go lint # This builder does the Ubuntu PPA upload - - if: type = push + - if: repo = ethereum/go-ethereum AND type = push os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - ubuntu-ppa git: @@ -75,11 +86,11 @@ matrix: - go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder " # This builder does the Linux Azure uploads - - if: type = push + - if: repo = ethereum/go-ethereum AND type = push os: linux dist: trusty sudo: required - go: 1.11.x + go: 1.12.x env: - azure-linux git: @@ -109,12 +120,12 @@ matrix: - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds # This builder does the Linux Azure MIPS xgo uploads - - if: type = push + - if: repo = ethereum/go-ethereum AND type = push os: linux dist: trusty services: - docker - go: 1.11.x + go: 1.12.x env: - azure-linux-mips git: @@ -137,7 +148,7 @@ matrix: - go run build/ci.go archive -arch mips64le -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds # This builder does the Android Maven and Azure uploads - - if: type = push + - if: repo = ethereum/go-ethereum AND type = push os: linux dist: trusty addons: @@ -159,25 +170,24 @@ matrix: git: submodules: false # avoid cloning ethereum/tests before_install: - - curl https://storage.googleapis.com/golang/go1.11.5.linux-amd64.tar.gz | tar -xz + - curl https://dl.google.com/go/go1.12.linux-amd64.tar.gz | tar -xz - export PATH=`pwd`/go/bin:$PATH - export GOROOT=`pwd`/go - export GOPATH=$HOME/go script: # Build the Android archive and upload it to Maven Central and Azure - - curl https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip -o android-ndk-r17b.zip - - unzip -q android-ndk-r17b.zip && rm android-ndk-r17b.zip - - mv android-ndk-r17b $HOME - - export ANDROID_NDK=$HOME/android-ndk-r17b + - curl https://dl.google.com/android/repository/android-ndk-r19b-linux-x86_64.zip -o android-ndk-r19b.zip + - unzip -q android-ndk-r19b.zip && rm android-ndk-r19b.zip + - mv android-ndk-r19b $ANDROID_HOME/ndk-bundle - mkdir -p $GOPATH/src/github.com/ethereum - - ln -s `pwd` $GOPATH/src/github.com/ethereum + - ln -s `pwd` $GOPATH/src/github.com/ethereum/go-ethereum - go run build/ci.go aar -signer ANDROID_SIGNING_KEY -deploy https://oss.sonatype.org -upload gethstore/builds # This builder does the OSX Azure, iOS CocoaPods and iOS Azure uploads - - if: type = push + - if: repo = ethereum/go-ethereum AND type = push os: osx - go: 1.11.x + go: 1.12.x env: - azure-osx - azure-ios @@ -204,13 +214,22 @@ matrix: - go run build/ci.go xcode -signer IOS_SIGNING_KEY -deploy trunk -upload gethstore/builds # This builder does the Azure archive purges to avoid accumulating junk - - if: type = cron + - if: repo = ethereum/go-ethereum AND type = cron os: linux dist: trusty - go: 1.11.x + go: 1.12.x env: - azure-purge git: submodules: false # avoid cloning ethereum/tests script: - go run build/ci.go purge -store gethstore/builds -days 14 + + - name: Race Detector for Swarm + if: repo = ethersphere/go-ethereum + os: linux + dist: trusty + go: 1.12.x + git: + submodules: false # avoid cloning ethereum/tests + script: ./build/travis_keepalive.sh go test -timeout 20m -race ./swarm... ./p2p/{protocols,simulations,testing}/... diff --git a/vendor/github.com/ethereum/go-ethereum/Dockerfile b/vendor/github.com/ethereum/go-ethereum/Dockerfile index e87dd35d..4b205d64 100644 --- a/vendor/github.com/ethereum/go-ethereum/Dockerfile +++ b/vendor/github.com/ethereum/go-ethereum/Dockerfile @@ -1,5 +1,5 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.12-alpine as builder RUN apk add --no-cache make gcc musl-dev linux-headers diff --git a/vendor/github.com/ethereum/go-ethereum/Dockerfile.alltools b/vendor/github.com/ethereum/go-ethereum/Dockerfile.alltools index e984a1b0..4a4a26f8 100644 --- a/vendor/github.com/ethereum/go-ethereum/Dockerfile.alltools +++ b/vendor/github.com/ethereum/go-ethereum/Dockerfile.alltools @@ -1,5 +1,5 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.12-alpine as builder RUN apk add --no-cache make gcc musl-dev linux-headers diff --git a/vendor/github.com/ethereum/go-ethereum/README.md b/vendor/github.com/ethereum/go-ethereum/README.md index 7593dd09..ea8b0a49 100644 --- a/vendor/github.com/ethereum/go-ethereum/README.md +++ b/vendor/github.com/ethereum/go-ethereum/README.md @@ -1,6 +1,6 @@ ## Go Ethereum -Official golang implementation of the Ethereum protocol. +Official Golang implementation of the Ethereum protocol. [![API Reference]( https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 @@ -18,7 +18,7 @@ For prerequisites and detailed build instructions please read the [Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) on the wiki. -Building geth requires both a Go (version 1.9 or later) and a C compiler. +Building geth requires both a Go (version 1.10 or later) and a C compiler. You can install them using your favourite package manager. Once the dependencies are installed, run @@ -35,12 +35,12 @@ The go-ethereum project comes with several wrappers/executables found in the `cm | Command | Description | |:----------:|-------------| | **`geth`** | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options) for command line options. | -| `abigen` | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. | +| `abigen` | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However, it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. | | `bootnode` | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks. | | `evm` | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug`). | | `gethrpctest` | Developer utility tool to support our [ethereum/rpc-test](https://github.com/ethereum/rpc-tests) test suite which validates baseline conformity to the [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) specs. Please see the [test suite's readme](https://github.com/ethereum/rpc-tests/blob/master/README.md) for details. | -| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | -| `swarm` | Swarm daemon and tools. This is the entrypoint for the Swarm network. `swarm --help` for command line options and subcommands. See [Swarm README](https://github.com/ethereum/go-ethereum/tree/master/swarm) for more information. | +| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | +| `swarm` | Swarm daemon and tools. This is the entry point for the Swarm network. `swarm --help` for command line options and subcommands. See [Swarm README](https://github.com/ethereum/go-ethereum/tree/master/swarm) for more information. | | `puppeth` | a CLI wizard that aids in creating a new Ethereum network. | ## Running geth @@ -72,7 +72,7 @@ This command will: This tool is optional and if you leave it out you can always attach to an already running Geth instance with `geth attach`. -### Full node on the Ethereum test network +### A Full node on the Ethereum test network Transitioning towards developers, if you'd like to play around with creating Ethereum contracts, you almost certainly would like to do that without any real money involved until you get the hang of the @@ -83,10 +83,10 @@ network with your node, which is fully equivalent to the main network, but with $ geth --testnet console ``` -The `console` subcommand have the exact same meaning as above and they are equally useful on the -testnet too. Please see above for their explanations if you've skipped to here. +The `console` subcommand has the exact same meaning as above and they are equally useful on the +testnet too. Please see above for their explanations if you've skipped here. -Specifying the `--testnet` flag however will reconfigure your Geth instance a bit: +Specifying the `--testnet` flag, however, will reconfigure your Geth instance a bit: * Instead of using the default data directory (`~/.ethereum` on Linux for example), Geth will nest itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on Linux). Note, on OSX @@ -103,7 +103,7 @@ separate the two networks and will not make any accounts available between them. ### Full node on the Rinkeby test network -The above test network is a cross client one based on the ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty / security. Go Ethereum also supports connecting to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) (operated by members of the community). This network is lighter, more secure, but is only supported by go-ethereum. +The above test network is a cross-client one based on the ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty/security. Go Ethereum also supports connecting to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) (operated by members of the community). This network is lighter, more secure, but is only supported by go-ethereum. ``` $ geth --rinkeby console @@ -139,13 +139,13 @@ This will start geth in fast-sync mode with a DB memory allowance of 1GB just as Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not accessible from the outside. -### Programatically interfacing Geth nodes +### Programmatically interfacing Geth nodes As a developer, sooner rather than later you'll want to start interacting with Geth and the Ethereum network via your own programs and not manually through the console. To aid this, Geth has built-in support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC) and [Geth specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)). These can be -exposed via HTTP, WebSockets and IPC (unix sockets on unix based platforms, and named pipes on Windows). +exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based platforms, and named pipes on Windows). The IPC interface is enabled by default and exposes all the APIs supported by Geth, whereas the HTTP and WS interfaces need to manually be enabled and only expose a subset of APIs due to security reasons. @@ -173,7 +173,7 @@ on all transports. You can reuse the same connection for multiple requests! **Note: Please understand the security implications of opening up an HTTP/WS based transport before doing so! Hackers on the internet are actively trying to subvert Ethereum nodes with exposed APIs! -Further, all browser tabs can access locally running webservers, so malicious webpages could try to +Further, all browser tabs can access locally running web servers, so malicious web pages could try to subvert locally available APIs!** ### Operating a private network @@ -241,7 +241,7 @@ that other nodes can use to connect to it and exchange peer information. Make su displayed IP address information (most probably `[::]`) with your externally accessible IP to get the actual `enode` URL. -*Note: You could also use a full fledged Geth node as a bootnode, but it's the less recommended way.* +*Note: You could also use a full-fledged Geth node as a bootnode, but it's the less recommended way.* #### Starting up your member nodes @@ -264,7 +264,7 @@ an OpenCL or CUDA enabled `ethminer` instance. For information on such a setup, [EtherMining subreddit](https://www.reddit.com/r/EtherMining/) and the [Genoil miner](https://github.com/Genoil/cpp-ethereum) repository. -In a private network setting however, a single CPU miner instance is more than enough for practical +In a private network setting, however a single CPU miner instance is more than enough for practical purposes as it can produce a stable stream of blocks at the correct intervals without needing heavy resources (consider running on a single thread, no need for multiple ones either). To start a Geth instance for mining, run it with all your usual flags, extended by: @@ -298,7 +298,7 @@ Please make sure your contributions adhere to our coding guidelines: * E.g. "eth, rpc: make trace configs optional" Please see the [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide) -for more details on configuring your environment, managing project dependencies and testing procedures. +for more details on configuring your environment, managing project dependencies, and testing procedures. ## License diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi.go index 3b65dfa6..c5fbc1e7 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi.go @@ -72,37 +72,39 @@ func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error) { } // Unpack output in v according to the abi specification -func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error) { - if len(output) == 0 { +func (abi ABI) Unpack(v interface{}, name string, data []byte) (err error) { + if len(data) == 0 { return fmt.Errorf("abi: unmarshalling empty output") } // since there can't be naming collisions with contracts and events, // we need to decide whether we're calling a method or an event if method, ok := abi.Methods[name]; ok { - if len(output)%32 != 0 { - return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(output), output) + if len(data)%32 != 0 { + return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(data), data) } - return method.Outputs.Unpack(v, output) - } else if event, ok := abi.Events[name]; ok { - return event.Inputs.Unpack(v, output) + return method.Outputs.Unpack(v, data) + } + if event, ok := abi.Events[name]; ok { + return event.Inputs.Unpack(v, data) } return fmt.Errorf("abi: could not locate named method or event") } -// Unpack output into a map according to the abi specification -func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, output []byte) (err error) { - if len(output) == 0 { +// UnpackIntoMap unpacks a log into the provided map[string]interface{} +func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, data []byte) (err error) { + if len(data) == 0 { return fmt.Errorf("abi: unmarshalling empty output") } // since there can't be naming collisions with contracts and events, // we need to decide whether we're calling a method or an event if method, ok := abi.Methods[name]; ok { - if len(output)%32 != 0 { + if len(data)%32 != 0 { return fmt.Errorf("abi: improperly formatted output") } - return method.Outputs.UnpackIntoMap(v, output) - } else if event, ok := abi.Events[name]; ok { - return event.Inputs.UnpackIntoMap(v, output) + return method.Outputs.UnpackIntoMap(v, data) + } + if event, ok := abi.Events[name]; ok { + return event.Inputs.UnpackIntoMap(v, data) } return fmt.Errorf("abi: could not locate named method or event") } @@ -154,7 +156,7 @@ func (abi *ABI) UnmarshalJSON(data []byte) error { // returns nil if none found func (abi *ABI) MethodById(sigdata []byte) (*Method, error) { if len(sigdata) < 4 { - return nil, fmt.Errorf("data too short (% bytes) for abi method lookup", len(sigdata)) + return nil, fmt.Errorf("data too short (%d bytes) for abi method lookup", len(sigdata)) } for _, method := range abi.Methods { if bytes.Equal(method.Id(), sigdata[:4]) { diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi_test.go index 6c2b7c2f..42b60a63 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/abi_test.go @@ -694,7 +694,7 @@ func TestUnpackEvent(t *testing.T) { } } -func TestUnpackIntoMapEvent(t *testing.T) { +func TestUnpackEventIntoMap(t *testing.T) { const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` abi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -714,39 +714,169 @@ func TestUnpackIntoMapEvent(t *testing.T) { expectedReceivedMap := map[string]interface{}{ "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), "amount": big.NewInt(1), - "memo": []uint8{88}, + "memo": []byte{88}, } - - err = abi.UnpackIntoMap(receivedMap, "received", data) - if err != nil { + if err := abi.UnpackIntoMap(receivedMap, "received", data); err != nil { t.Error(err) } - + if len(receivedMap) != 3 { + t.Error("unpacked `received` map expected to have length 3") + } if receivedMap["sender"] != expectedReceivedMap["sender"] { - t.Errorf("unpacked map does not match expected map") + t.Error("unpacked `received` map does not match expected map") } - - if receivedMap["amount"].(*big.Int).String() != expectedReceivedMap["amount"].(*big.Int).String() { - t.Errorf("unpacked map does not match expected map") + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked `received` map does not match expected map") } - - u8 := receivedMap["memo"].([]uint8) - expectedU8 := expectedReceivedMap["memo"].([]uint8) - for i, v := range expectedU8 { - if u8[i] != v { - t.Errorf("unpacked map does not match expected map") - } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked `received` map does not match expected map") } receivedAddrMap := map[string]interface{}{} - - err = abi.UnpackIntoMap(receivedAddrMap, "receivedAddr", data) - if err != nil { + if err = abi.UnpackIntoMap(receivedAddrMap, "receivedAddr", data); err != nil { t.Error(err) } - + if len(receivedAddrMap) != 1 { + t.Error("unpacked `receivedAddr` map expected to have length 1") + } if receivedAddrMap["sender"] != expectedReceivedMap["sender"] { - t.Errorf("unpacked map does not match expected map") + t.Error("unpacked `receivedAddr` map does not match expected map") + } +} + +func TestUnpackMethodIntoMap(t *testing.T) { + const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` + abi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + const hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158` + data, err := hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 != 0 { + t.Errorf("len(data) is %d, want a multiple of 32", len(data)) + } + + // Tests a method with no outputs + receiveMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(receiveMap, "receive", data); err != nil { + t.Error(err) + } + if len(receiveMap) > 0 { + t.Error("unpacked `receive` map expected to have length 0") + } + + // Tests a method with only outputs + sendMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(sendMap, "send", data); err != nil { + t.Error(err) + } + if len(sendMap) != 1 { + t.Error("unpacked `send` map expected to have length 1") + } + if sendMap["amount"].(*big.Int).Cmp(big.NewInt(1)) != 0 { + t.Error("unpacked `send` map expected `amount` value of 1") + } + + // Tests a method with outputs and inputs + getMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(getMap, "get", data); err != nil { + t.Error(err) + } + if len(sendMap) != 1 { + t.Error("unpacked `get` map expected to have length 1") + } + expectedBytes := []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, 96, 0, 0, 0, 0, 0, 0, 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, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 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, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 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, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 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, 88, 0} + if !bytes.Equal(getMap["hash"].([]byte), expectedBytes) { + t.Errorf("unpacked `get` map expected `hash` value of %v", expectedBytes) + } +} + +func TestUnpackIntoMapNamingConflict(t *testing.T) { + // Two methods have the same name + var abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"get","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` + abi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + var hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158` + data, err := hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + getMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(getMap, "get", data); err == nil { + t.Error("naming conflict between two methods; error expected") + } + + // Two events have the same name + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"received","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + hexdata = `000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158` + data, err = hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + receivedMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(receivedMap, "received", data); err != nil { + t.Error("naming conflict between two events; no error expected") + } + if len(receivedMap) != 1 { + t.Error("naming conflict between two events; event defined latest in the abi expected to be used") + } + + // Method and event have the same name + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + if err = abi.UnpackIntoMap(receivedMap, "received", data); err == nil { + t.Error("naming conflict between an event and a method; error expected") + } + + // Conflict is case sensitive + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + expectedReceivedMap := map[string]interface{}{ + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err = abi.UnpackIntoMap(receivedMap, "Received", data); err != nil { + t.Error(err) + } + if len(receivedMap) != 3 { + t.Error("unpacked `received` map expected to have length 3") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked `received` map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked `received` map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked `received` map does not match expected map") } } diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/argument.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/argument.go index 49cbf139..501cb162 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/argument.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/argument.go @@ -102,7 +102,7 @@ func (arguments Arguments) Unpack(v interface{}, data []byte) error { return arguments.unpackAtomic(v, marshalledValues[0]) } -// Unpack performs the operation hexdata -> mapping of argument name to argument value +// UnpackIntoMap performs the operation hexdata -> mapping of argument name to argument value func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte) error { marshalledValues, err := arguments.UnpackValues(data) if err != nil { @@ -170,7 +170,7 @@ func unpack(t *Type, dst interface{}, src interface{}) error { return nil } -// Unpack arguments into map +// unpackIntoMap unpacks marshalledValues into the provided map[string]interface{} func (arguments Arguments) unpackIntoMap(v map[string]interface{}, marshalledValues []interface{}) error { // Make sure map is not nil if v == nil { diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated.go index 6f46fc14..7371dfb1 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated.go @@ -66,7 +66,7 @@ type SimulatedBackend struct { // NewSimulatedBackend creates a new binding backend using a simulated blockchain // for testing purposes. func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend { - database := ethdb.NewMemDatabase() + database := rawdb.NewMemoryDatabase() genesis := core.Genesis{Config: params.AllEthashProtocolChanges, GasLimit: gasLimit, Alloc: alloc} genesis.MustCommit(database) blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{}, nil) @@ -164,6 +164,25 @@ func (b *SimulatedBackend) TransactionReceipt(ctx context.Context, txHash common return receipt, nil } +// TransactionByHash checks the pool of pending transactions in addition to the +// blockchain. The isPending return value indicates whether the transaction has been +// mined yet. Note that the transaction may not be part of the canonical chain even if +// it's not pending. +func (b *SimulatedBackend) TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error) { + b.mu.Lock() + defer b.mu.Unlock() + + tx := b.pendingBlock.Transaction(txHash) + if tx != nil { + return tx, true, nil + } + tx, _, _, _ = rawdb.ReadTransaction(b.database, txHash) + if tx != nil { + return tx, false, nil + } + return nil, false, ethereum.NotFound +} + // PendingCodeAt returns the code associated with an account in the pending state. func (b *SimulatedBackend) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) { b.mu.Lock() diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated_test.go new file mode 100644 index 00000000..bd75807d --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/backends/simulated_test.go @@ -0,0 +1,82 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package backends_test + +import ( + "context" + "math/big" + "testing" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" +) + +func TestSimulatedBackend(t *testing.T) { + var gasLimit uint64 = 8000029 + key, _ := crypto.GenerateKey() // nolint: gosec + auth := bind.NewKeyedTransactor(key) + genAlloc := make(core.GenesisAlloc) + genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)} + + sim := backends.NewSimulatedBackend(genAlloc, gasLimit) + + // should return an error if the tx is not found + txHash := common.HexToHash("2") + _, isPending, err := sim.TransactionByHash(context.Background(), txHash) + + if isPending { + t.Fatal("transaction should not be pending") + } + if err != ethereum.NotFound { + t.Fatalf("err should be `ethereum.NotFound` but received %v", err) + } + + // generate a transaction and confirm you can retrieve it + code := `6060604052600a8060106000396000f360606040526008565b00` + var gas uint64 = 3000000 + tx := types.NewContractCreation(0, big.NewInt(0), gas, big.NewInt(1), common.FromHex(code)) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, key) + + err = sim.SendTransaction(context.Background(), tx) + if err != nil { + t.Fatal("error sending transaction") + } + + txHash = tx.Hash() + _, isPending, err = sim.TransactionByHash(context.Background(), txHash) + if err != nil { + t.Fatalf("error getting transaction with hash: %v", txHash.String()) + } + if !isPending { + t.Fatal("transaction should have pending status") + } + + sim.Commit() + tx, isPending, err = sim.TransactionByHash(context.Background(), txHash) + if err != nil { + t.Fatalf("error getting transaction with hash: %v", txHash.String()) + } + if isPending { + t.Fatal("transaction should not have pending status") + } + +} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/base_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/base_test.go index 8adff8b5..f65c9e9b 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/base_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/base_test.go @@ -1,14 +1,36 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package bind_test import ( + "bytes" "context" "math/big" + "strings" "testing" - ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" ) type mockCaller struct { @@ -25,7 +47,6 @@ func (mc *mockCaller) CallContract(ctx context.Context, call ethereum.CallMsg, b mc.callContractBlockNumber = blockNumber return nil, nil } - func TestPassingBlockNumber(t *testing.T) { mc := &mockCaller{} @@ -62,3 +83,291 @@ func TestPassingBlockNumber(t *testing.T) { t.Fatalf("CodeAt() was passed a block number when it should not have been") } } + +const hexData = "0x000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158" + +func TestUnpackIndexedStringTyLogIntoMap(t *testing.T) { + hash := crypto.Keccak256Hash([]byte("testName")) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "name": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["name"] != expectedReceivedMap["name"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { + sliceBytes, err := rlp.EncodeToBytes([]string{"name1", "name2", "name3", "name4"}) + if err != nil { + t.Fatal(err) + } + hash := crypto.Keccak256Hash(sliceBytes) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"names","type":"string[]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "names": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["names"] != expectedReceivedMap["names"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { + arrBytes, err := rlp.EncodeToBytes([2]common.Address{common.HexToAddress("0x0"), common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2")}) + if err != nil { + t.Fatal(err) + } + hash := crypto.Keccak256Hash(arrBytes) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"addresses","type":"address[2]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "addresses": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["addresses"] != expectedReceivedMap["addresses"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { + mockAddress := common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2") + addrBytes := mockAddress.Bytes() + hash := crypto.Keccak256Hash([]byte("mockFunction(address,uint)")) + functionSelector := hash[:4] + functionTyBytes := append(addrBytes, functionSelector...) + var functionTy [24]byte + copy(functionTy[:], functionTyBytes[0:24]) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"), + common.BytesToHash(functionTyBytes), + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"function","type":"function"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "function": functionTy, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["function"] != expectedReceivedMap["function"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedBytesTyLogIntoMap(t *testing.T) { + byts := []byte{1, 2, 3, 4, 5} + hash := crypto.Keccak256Hash(byts) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"content","type":"bytes"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "content": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["content"] != expectedReceivedMap["content"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIntoMapNamingConflict(t *testing.T) { + hash := crypto.Keccak256Hash([]byte("testName")) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + receivedMap := make(map[string]interface{}) + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err == nil { + t.Error("naming conflict between two events; error expected") + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/bind_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/bind_test.go index 46e0b38d..eae12b3f 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/bind_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/bind_test.go @@ -670,7 +670,7 @@ var bindTests = []struct { `Eventer`, ` contract Eventer { - event SimpleEvent ( + event SimpleEvent ( address indexed Addr, bytes32 indexed Id, bool indexed Flag, @@ -698,10 +698,18 @@ var bindTests = []struct { function raiseDynamicEvent(string str, bytes blob) { DynamicEvent(str, blob, str, blob); } + + event FixedBytesEvent ( + bytes24 indexed IndexedBytes, + bytes24 NonIndexedBytes + ); + function raiseFixedBytesEvent(bytes24 blob) { + FixedBytesEvent(blob, blob); + } } `, - `6060604052341561000f57600080fd5b61042c8061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063528300ff1461005c578063630c31e2146100fc578063c7d116dd14610156575b600080fd5b341561006757600080fd5b6100fa600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610194565b005b341561010757600080fd5b610154600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080351515906020019091908035906020019091905050610367565b005b341561016157600080fd5b610192600480803590602001909190803560010b90602001909190803563ffffffff169060200190919050506103c3565b005b806040518082805190602001908083835b6020831015156101ca57805182526020820191506020810190506020830392506101a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826040518082805190602001908083835b60208310151561022d5780518252602082019150602081019050602083039250610208565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561032757808201518184015260208101905061030c565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b81151583600019168573ffffffffffffffffffffffffffffffffffffffff167f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8846040518082815260200191505060405180910390a450505050565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820d1f8a8bbddbc5bb29f285891d6ae1eef8420c52afdc05e1573f6114d8e1714710029`, - `[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"}]`, + `608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`, + `[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`, ` "math/big" "time" @@ -812,6 +820,33 @@ var bindTests = []struct { if err = dit.Error(); err != nil { t.Fatalf("dynamic event iteration failed: %v", err) } + // Test raising and filtering for events with fixed bytes components + var fblob [24]byte + copy(fblob[:], []byte("Fixed Bytes")) + + if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil { + t.Fatalf("failed to raise fixed bytes event: %v", err) + } + sim.Commit() + + fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob}) + if err != nil { + t.Fatalf("failed to filter for fixed bytes events: %v", err) + } + defer fit.Close() + + if !fit.Next() { + t.Fatalf("fixed bytes log not found: %v", fit.Error()) + } + if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob { + t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob) + } + if fit.Next() { + t.Errorf("unexpected fixed bytes event found: %+v", fit.Event) + } + if err = fit.Error(); err != nil { + t.Fatalf("fixed bytes event iteration failed: %v", err) + } // Test subscribing to an event and raising it afterwards ch := make(chan *EventerSimpleEvent, 16) sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil) diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics.go index 1569fae5..c7657b4a 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics.go @@ -17,6 +17,7 @@ package bind import ( + "encoding/binary" "errors" "fmt" "math/big" @@ -83,8 +84,10 @@ func makeTopics(query ...[]interface{}) ([][]common.Hash, error) { val := reflect.ValueOf(rule) switch { + + // static byte array case val.Kind() == reflect.Array && reflect.TypeOf(rule).Elem().Kind() == reflect.Uint8: - reflect.Copy(reflect.ValueOf(topic[common.HashLength-val.Len():]), val) + reflect.Copy(reflect.ValueOf(topic[:val.Len()]), val) default: return nil, fmt.Errorf("unsupported indexed type: %T", rule) @@ -175,8 +178,10 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er default: // Ran out of custom types, try the crazies switch { + + // static byte array case arg.Type.T == abi.FixedBytesTy: - reflect.Copy(field, reflect.ValueOf(topics[0][common.HashLength-arg.Type.Size:])) + reflect.Copy(field, reflect.ValueOf(topics[0][:arg.Type.Size])) default: return fmt.Errorf("unsupported indexed type: %v", arg.Type) @@ -188,7 +193,7 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er return nil } -// parseTopics converts the indexed topic field-value pairs into map key-value pairs +// parseTopicsIntoMap converts the indexed topic field-value pairs into map key-value pairs func parseTopicsIntoMap(out map[string]interface{}, fields abi.Arguments, topics []common.Hash) error { // Sanity check that the fields and topics match up if len(fields) != len(topics) { @@ -202,11 +207,7 @@ func parseTopicsIntoMap(out map[string]interface{}, fields abi.Arguments, topics switch arg.Type.T { case abi.BoolTy: - if topics[0][common.HashLength-1] == 1 { - out[arg.Name] = true - } else { - out[arg.Name] = false - } + out[arg.Name] = topics[0][common.HashLength-1] == 1 case abi.IntTy, abi.UintTy: num := new(big.Int).SetBytes(topics[0][:]) out[arg.Name] = num @@ -216,19 +217,21 @@ func parseTopicsIntoMap(out map[string]interface{}, fields abi.Arguments, topics out[arg.Name] = addr case abi.HashTy: out[arg.Name] = topics[0] - case abi.BytesTy, abi.FixedBytesTy: + case abi.FixedBytesTy: out[arg.Name] = topics[0][:] - case abi.StringTy: - bytes := topics[0].Bytes() - var trimmedBytes []byte - for i, by := range bytes { - if by != 0 { - trimmedBytes = bytes[i:] - break - } + case abi.StringTy, abi.BytesTy, abi.SliceTy, abi.ArrayTy: + // Array types (including strings and bytes) have their keccak256 hashes stored in the topic- not a hash + // whose bytes can be decoded to the actual value- so the best we can do is retrieve that hash + out[arg.Name] = topics[0] + case abi.FunctionTy: + if garbage := binary.BigEndian.Uint64(topics[0][0:8]); garbage != 0 { + return fmt.Errorf("bind: got improperly encoded function type, got %v", topics[0].Bytes()) } - out[arg.Name] = string(trimmedBytes) - default: + var tmp [24]byte + copy(tmp[:], topics[0][8:32]) + out[arg.Name] = tmp + default: // Not handling tuples + return fmt.Errorf("unsupported indexed type: %v", arg.Type) } topics = topics[1:] diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics_test.go new file mode 100644 index 00000000..e6f745a1 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/bind/topics_test.go @@ -0,0 +1,103 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bind + +import ( + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" +) + +func TestMakeTopics(t *testing.T) { + type args struct { + query [][]interface{} + } + tests := []struct { + name string + args args + want [][]common.Hash + wantErr bool + }{ + { + "support fixed byte types, right padded to 32 bytes", + args{[][]interface{}{{[5]byte{1, 2, 3, 4, 5}}}}, + [][]common.Hash{{common.Hash{1, 2, 3, 4, 5}}}, + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := makeTopics(tt.args.query...) + if (err != nil) != tt.wantErr { + t.Errorf("makeTopics() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("makeTopics() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestParseTopics(t *testing.T) { + type bytesStruct struct { + StaticBytes [5]byte + } + bytesType, _ := abi.NewType("bytes5", nil) + type args struct { + createObj func() interface{} + resultObj func() interface{} + fields abi.Arguments + topics []common.Hash + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "support fixed byte types, right padded to 32 bytes", + args: args{ + createObj: func() interface{} { return &bytesStruct{} }, + resultObj: func() interface{} { return &bytesStruct{StaticBytes: [5]byte{1, 2, 3, 4, 5}} }, + fields: abi.Arguments{abi.Argument{ + Name: "staticBytes", + Type: bytesType, + Indexed: true, + }}, + topics: []common.Hash{ + {1, 2, 3, 4, 5}, + }, + }, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + createObj := tt.args.createObj() + if err := parseTopics(createObj, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { + t.Errorf("parseTopics() error = %v, wantErr %v", err, tt.wantErr) + } + resultObj := tt.args.resultObj() + if !reflect.DeepEqual(createObj, resultObj) { + t.Errorf("parseTopics() = %v, want %v", createObj, resultObj) + } + }) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/type.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/type.go index 26151dbd..1a371823 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/type.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/type.go @@ -188,6 +188,7 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { fields = append(fields, reflect.StructField{ Name: ToCamelCase(c.Name), // reflect.StructOf will panic for any exported field. Type: cType.Type, + Tag: reflect.StructTag("json:\"" + c.Name + "\""), }) elems = append(elems, &cType) names = append(names, c.Name) diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/type_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/type_test.go index 7ef47330..5023456a 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/type_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/type_test.go @@ -95,8 +95,14 @@ func TestTypeRegexp(t *testing.T) { // {"fixed[2]", nil, Type{}}, // {"fixed128x128[]", nil, Type{}}, // {"fixed128x128[2]", nil, Type{}}, - {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct{ A int64 }{}), stringKind: "(int64)", + {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct { + A int64 `json:"a"` + }{}), stringKind: "(int64)", TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"a"}}}, + {"tuple with long name", []ArgumentMarshaling{{Name: "aTypicalParamName", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct { + ATypicalParamName int64 `json:"aTypicalParamName"` + }{}), stringKind: "(int64)", + TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"aTypicalParamName"}}}, } for _, tt := range tests { diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack.go index 8406b09c..b2e61d06 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack.go @@ -269,7 +269,7 @@ func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err totalSize.Add(totalSize, bigOffsetEnd) totalSize.Add(totalSize, lengthBig) if totalSize.BitLen() > 63 { - return 0, 0, fmt.Errorf("abi length larger than int64: %v", totalSize) + return 0, 0, fmt.Errorf("abi: length larger than int64: %v", totalSize) } if totalSize.Cmp(outputLength) > 0 { diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack_test.go index ff88be3d..fa8a69d0 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/abi/unpack_test.go @@ -512,6 +512,11 @@ func TestMethodMultiReturn(t *testing.T) { Int *big.Int } + newInterfaceSlice := func(len int) interface{} { + slice := make([]interface{}, len) + return &slice + } + abi, data, expected := methodMultiReturn(require.New(t)) bigint := new(big.Int) var testCases = []struct { @@ -539,6 +544,16 @@ func TestMethodMultiReturn(t *testing.T) { &[2]interface{}{&expected.Int, &expected.String}, "", "Can unpack into an array", + }, { + &[2]interface{}{}, + &[2]interface{}{expected.Int, expected.String}, + "", + "Can unpack into interface array", + }, { + newInterfaceSlice(2), + &[]interface{}{expected.Int, expected.String}, + "", + "Can unpack into interface slice", }, { &[]interface{}{new(int), new(int)}, &[]interface{}{&expected.Int, &expected.String}, diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/accounts.go b/vendor/github.com/ethereum/go-ethereum/accounts/accounts.go index cb1eae28..a52aa425 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/accounts.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/accounts.go @@ -18,12 +18,14 @@ package accounts import ( + "fmt" "math/big" ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" + "golang.org/x/crypto/sha3" ) // Account represents an Ethereum account located at a specific location defined @@ -33,6 +35,13 @@ type Account struct { URL URL `json:"url"` // Optional resource locator within a backend } +const ( + MimetypeTextWithValidator = "text/validator" + MimetypeTypedData = "data/typed" + MimetypeClique = "application/x-clique-header" + MimetypeTextPlain = "text/plain" +) + // Wallet represents a software or hardware wallet that might contain one or more // accounts (derived from the same seed). type Wallet interface { @@ -87,8 +96,26 @@ type Wallet interface { // chain state reader. SelfDerive(base DerivationPath, chain ethereum.ChainStateReader) - // SignHash requests the wallet to sign the given hash. + // SignData requests the wallet to sign the hash of the given data + // It looks up the account specified either solely via its address contained within, + // or optionally with the aid of any location metadata from the embedded URL field. // + // If the wallet requires additional authentication to sign the request (e.g. + // a password to decrypt the account, or a PIN code o verify the transaction), + // an AuthNeededError instance will be returned, containing infos for the user + // about which fields or actions are needed. The user may retry by providing + // the needed details via SignDataWithPassphrase, or by other means (e.g. unlock + // the account in a keystore). + SignData(account Account, mimeType string, data []byte) ([]byte, error) + + // SignDataWithPassphrase is identical to SignData, but also takes a password + // NOTE: there's an chance that an erroneous call might mistake the two strings, and + // supply password in the mimetype field, or vice versa. Thus, an implementation + // should never echo the mimetype or return the mimetype in the error-response + SignDataWithPassphrase(account Account, passphrase, mimeType string, data []byte) ([]byte, error) + + // SignText requests the wallet to sign the hash of a given piece of data, prefixed + // by the Ethereum prefix scheme // It looks up the account specified either solely via its address contained within, // or optionally with the aid of any location metadata from the embedded URL field. // @@ -98,7 +125,10 @@ type Wallet interface { // about which fields or actions are needed. The user may retry by providing // the needed details via SignHashWithPassphrase, or by other means (e.g. unlock // the account in a keystore). - SignHash(account Account, hash []byte) ([]byte, error) + SignText(account Account, text []byte) ([]byte, error) + + // SignTextWithPassphrase is identical to Signtext, but also takes a password + SignTextWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) // SignTx requests the wallet to sign the given transaction. // @@ -113,18 +143,7 @@ type Wallet interface { // the account in a keystore). SignTx(account Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) - // SignHashWithPassphrase requests the wallet to sign the given hash with the - // given passphrase as extra authentication information. - // - // It looks up the account specified either solely via its address contained within, - // or optionally with the aid of any location metadata from the embedded URL field. - SignHashWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) - - // SignTxWithPassphrase requests the wallet to sign the given transaction, with the - // given passphrase as extra authentication information. - // - // It looks up the account specified either solely via its address contained within, - // or optionally with the aid of any location metadata from the embedded URL field. + // SignTxWithPassphrase is identical to SignTx, but also takes a password SignTxWithPassphrase(account Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) } @@ -148,6 +167,32 @@ type Backend interface { Subscribe(sink chan<- WalletEvent) event.Subscription } +// TextHash is a helper function that calculates a hash for the given message that can be +// safely used to calculate a signature from. +// +// The hash is calulcated as +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// This gives context to the signed message and prevents signing of transactions. +func TextHash(data []byte) []byte { + hash, _ := TextAndHash(data) + return hash +} + +// TextAndHash is a helper function that calculates a hash for the given message that can be +// safely used to calculate a signature from. +// +// The hash is calulcated as +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// This gives context to the signed message and prevents signing of transactions. +func TextAndHash(data []byte) ([]byte, string) { + msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), string(data)) + hasher := sha3.NewLegacyKeccak256() + hasher.Write([]byte(msg)) + return hasher.Sum(nil), msg +} + // WalletEventType represents the different event types that can be fired by // the wallet subscription subsystem. type WalletEventType int diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/norace_test.go b/vendor/github.com/ethereum/go-ethereum/accounts/accounts_test.go similarity index 70% rename from vendor/github.com/ethereum/go-ethereum/swarm/network/stream/norace_test.go rename to vendor/github.com/ethereum/go-ethereum/accounts/accounts_test.go index b324f693..a49e3954 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/norace_test.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/accounts_test.go @@ -14,11 +14,19 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !race +package accounts -package stream +import ( + "bytes" + "testing" -// Provide a flag to reduce the scope of tests when running them -// with race detector. Some of the tests are doing a lot of allocations -// on the heap, and race detector uses much more memory to track them. -const raceTest = false + "github.com/ethereum/go-ethereum/common/hexutil" +) + +func TestTextHash(t *testing.T) { + hash := TextHash([]byte("Hello Joe")) + want := hexutil.MustDecode("0xa080337ae51c4e064c189e113edd0ba391df9206e2f49db658bb32cf2911730b") + if !bytes.Equal(hash, want) { + t.Fatalf("wrong hash: %x", hash) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/external/backend.go b/vendor/github.com/ethereum/go-ethereum/accounts/external/backend.go new file mode 100644 index 00000000..21a313b6 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/accounts/external/backend.go @@ -0,0 +1,228 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package external + +import ( + "fmt" + "math/big" + "sync" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/signer/core" +) + +type ExternalBackend struct { + signers []accounts.Wallet +} + +func (eb *ExternalBackend) Wallets() []accounts.Wallet { + return eb.signers +} + +func NewExternalBackend(endpoint string) (*ExternalBackend, error) { + signer, err := NewExternalSigner(endpoint) + if err != nil { + return nil, err + } + return &ExternalBackend{ + signers: []accounts.Wallet{signer}, + }, nil +} + +func (eb *ExternalBackend) Subscribe(sink chan<- accounts.WalletEvent) event.Subscription { + return event.NewSubscription(func(quit <-chan struct{}) error { + <-quit + return nil + }) +} + +// ExternalSigner provides an API to interact with an external signer (clef) +// It proxies request to the external signer while forwarding relevant +// request headers +type ExternalSigner struct { + client *rpc.Client + endpoint string + status string + cacheMu sync.RWMutex + cache []accounts.Account +} + +func NewExternalSigner(endpoint string) (*ExternalSigner, error) { + client, err := rpc.Dial(endpoint) + if err != nil { + return nil, err + } + extsigner := &ExternalSigner{ + client: client, + endpoint: endpoint, + } + // Check if reachable + version, err := extsigner.pingVersion() + if err != nil { + return nil, err + } + extsigner.status = fmt.Sprintf("ok [version=%v]", version) + return extsigner, nil +} + +func (api *ExternalSigner) URL() accounts.URL { + return accounts.URL{ + Scheme: "extapi", + Path: api.endpoint, + } +} + +func (api *ExternalSigner) Status() (string, error) { + return api.status, nil +} + +func (api *ExternalSigner) Open(passphrase string) error { + return fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) Close() error { + return fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) Accounts() []accounts.Account { + var accnts []accounts.Account + res, err := api.listAccounts() + if err != nil { + log.Error("account listing failed", "error", err) + return accnts + } + for _, addr := range res { + accnts = append(accnts, accounts.Account{ + URL: accounts.URL{ + Scheme: "extapi", + Path: api.endpoint, + }, + Address: addr, + }) + } + api.cacheMu.Lock() + api.cache = accnts + api.cacheMu.Unlock() + return accnts +} + +func (api *ExternalSigner) Contains(account accounts.Account) bool { + api.cacheMu.RLock() + defer api.cacheMu.RUnlock() + for _, a := range api.cache { + if a.Address == account.Address && (account.URL == (accounts.URL{}) || account.URL == api.URL()) { + return true + } + } + return false +} + +func (api *ExternalSigner) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) { + return accounts.Account{}, fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) { + log.Error("operation SelfDerive not supported on external signers") +} + +func (api *ExternalSigner) signHash(account accounts.Account, hash []byte) ([]byte, error) { + return []byte{}, fmt.Errorf("operation not supported on external signers") +} + +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + var res hexutil.Bytes + var signAddress = common.NewMixedcaseAddress(account.Address) + if err := api.client.Call(&res, "account_signData", + mimeType, + &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined + hexutil.Encode(data)); err != nil { + return nil, err + } + // If V is on 27/28-form, convert to to 0/1 for Clique + if mimeType == accounts.MimetypeClique && (res[64] == 27 || res[64] == 28) { + res[64] -= 27 // Transform V from 27/28 to 0/1 for Clique use + } + return res, nil +} + +func (api *ExternalSigner) SignText(account accounts.Account, text []byte) ([]byte, error) { + var res hexutil.Bytes + var signAddress = common.NewMixedcaseAddress(account.Address) + if err := api.client.Call(&res, "account_signData", + accounts.MimetypeTextPlain, + &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined + hexutil.Encode(text)); err != nil { + return nil, err + } + return res, nil +} + +func (api *ExternalSigner) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + res := ethapi.SignTransactionResult{} + to := common.NewMixedcaseAddress(*tx.To()) + data := hexutil.Bytes(tx.Data()) + args := &core.SendTxArgs{ + Data: &data, + Nonce: hexutil.Uint64(tx.Nonce()), + Value: hexutil.Big(*tx.Value()), + Gas: hexutil.Uint64(tx.Gas()), + GasPrice: hexutil.Big(*tx.GasPrice()), + To: &to, + From: common.NewMixedcaseAddress(account.Address), + } + + if err := api.client.Call(&res, "account_signTransaction", args); err != nil { + return nil, err + } + return res.Tx, nil +} + +func (api *ExternalSigner) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + return []byte{}, fmt.Errorf("passphrase-operations not supported on external signers") +} + +func (api *ExternalSigner) SignTxWithPassphrase(account accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + return nil, fmt.Errorf("passphrase-operations not supported on external signers") +} +func (api *ExternalSigner) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + return nil, fmt.Errorf("passphrase-operations not supported on external signers") +} + +func (api *ExternalSigner) listAccounts() ([]common.Address, error) { + var res []common.Address + if err := api.client.Call(&res, "account_list"); err != nil { + return nil, err + } + return res, nil +} + +func (api *ExternalSigner) pingVersion() (string, error) { + var v string + if err := api.client.Call(&v, "account_version"); err != nil { + return "", err + } + return v, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go b/vendor/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go index 2918047c..434e0350 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/keystore/keystore.go @@ -137,8 +137,10 @@ func (ks *KeyStore) refreshWallets() { accs := ks.cache.accounts() // Transform the current list of wallets into the new one - wallets := make([]accounts.Wallet, 0, len(accs)) - events := []accounts.WalletEvent{} + var ( + wallets = make([]accounts.Wallet, 0, len(accs)) + events []accounts.WalletEvent + ) for _, account := range accs { // Drop wallets while they were in front of the next account diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/keystore/wallet.go b/vendor/github.com/ethereum/go-ethereum/accounts/keystore/wallet.go index 2f774cc9..1b36b6df 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/keystore/wallet.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/keystore/wallet.go @@ -22,6 +22,7 @@ import ( ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" ) // keystoreWallet implements the accounts.Wallet interface for the original @@ -78,11 +79,11 @@ func (w *keystoreWallet) Derive(path accounts.DerivationPath, pin bool) (account // there is no notion of hierarchical account derivation for plain keystore accounts. func (w *keystoreWallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) {} -// SignHash implements accounts.Wallet, attempting to sign the given hash with +// signHash attempts to sign the given hash with // the given account. If the wallet does not wrap this particular account, an // error is returned to avoid account leakage (even though in theory we may be // able to sign via our shared keystore backend). -func (w *keystoreWallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { +func (w *keystoreWallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { // Make sure the requested account is contained within if !w.Contains(account) { return nil, accounts.ErrUnknownAccount @@ -91,6 +92,36 @@ func (w *keystoreWallet) SignHash(account accounts.Account, hash []byte) ([]byte return w.keystore.SignHash(account, hash) } +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *keystoreWallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + return w.signHash(account, crypto.Keccak256(data)) +} + +// SignDataWithPassphrase signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *keystoreWallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + // Make sure the requested account is contained within + if !w.Contains(account) { + return nil, accounts.ErrUnknownAccount + } + // Account seems valid, request the keystore to sign + return w.keystore.SignHashWithPassphrase(account, passphrase, crypto.Keccak256(data)) +} + +func (w *keystoreWallet) SignText(account accounts.Account, text []byte) ([]byte, error) { + return w.signHash(account, accounts.TextHash(text)) +} + +// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the +// given hash with the given account using passphrase as extra authentication. +func (w *keystoreWallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + // Make sure the requested account is contained within + if !w.Contains(account) { + return nil, accounts.ErrUnknownAccount + } + // Account seems valid, request the keystore to sign + return w.keystore.SignHashWithPassphrase(account, passphrase, accounts.TextHash(text)) +} + // SignTx implements accounts.Wallet, attempting to sign the given transaction // with the given account. If the wallet does not wrap this particular account, // an error is returned to avoid account leakage (even though in theory we may @@ -104,17 +135,6 @@ func (w *keystoreWallet) SignTx(account accounts.Account, tx *types.Transaction, return w.keystore.SignTx(account, tx, chainID) } -// SignHashWithPassphrase implements accounts.Wallet, attempting to sign the -// given hash with the given account using passphrase as extra authentication. -func (w *keystoreWallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { - // Make sure the requested account is contained within - if !w.Contains(account) { - return nil, accounts.ErrUnknownAccount - } - // Account seems valid, request the keystore to sign - return w.keystore.SignHashWithPassphrase(account, passphrase, hash) -} - // SignTxWithPassphrase implements accounts.Wallet, attempting to sign the given // transaction with the given account using passphrase as extra authentication. func (w *keystoreWallet) SignTxWithPassphrase(account accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go index 640320bc..a91340b4 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/hub.go @@ -150,8 +150,10 @@ func (hub *Hub) refreshWallets() { // Transform the current list of wallets into the new one hub.stateLock.Lock() - wallets := make([]accounts.Wallet, 0, len(devices)) - events := []accounts.WalletEvent{} + var ( + wallets = make([]accounts.Wallet, 0, len(devices)) + events []accounts.WalletEvent + ) for _, device := range devices { url := accounts.URL{Scheme: hub.scheme, Path: device.Path} diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor.go index a9d2e995..d3e17aba 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor.go @@ -28,7 +28,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor" + "github.com/ethereum/go-ethereum/accounts/usbwallet/trezor" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" @@ -41,6 +41,9 @@ import ( // encoded passphrase. var ErrTrezorPINNeeded = errors.New("trezor: pin needed") +// ErrTrezorPassphraseNeeded is returned if opening the trezor requires a passphrase +var ErrTrezorPassphraseNeeded = errors.New("trezor: passphrase needed") + // errTrezorReplyInvalidHeader is the error message returned by a Trezor data exchange // if the device replies with a mismatching header. This usually means the device // is in browser mode. @@ -48,12 +51,13 @@ var errTrezorReplyInvalidHeader = errors.New("trezor: invalid reply header") // trezorDriver implements the communication with a Trezor hardware wallet. type trezorDriver struct { - device io.ReadWriter // USB device connection to communicate through - version [3]uint32 // Current version of the Trezor firmware - label string // Current textual label of the Trezor device - pinwait bool // Flags whether the device is waiting for PIN entry - failure error // Any failure that would make the device unusable - log log.Logger // Contextual logger to tag the trezor with its id + device io.ReadWriter // USB device connection to communicate through + version [3]uint32 // Current version of the Trezor firmware + label string // Current textual label of the Trezor device + pinwait bool // Flags whether the device is waiting for PIN entry + passphrasewait bool // Flags whether the device is waiting for passphrase entry + failure error // Any failure that would make the device unusable + log log.Logger // Contextual logger to tag the trezor with its id } // newTrezorDriver creates a new instance of a Trezor USB protocol driver. @@ -79,7 +83,7 @@ func (w *trezorDriver) Status() (string, error) { } // Open implements usbwallet.driver, attempting to initialize the connection to -// the Trezor hardware wallet. Initializing the Trezor is a two phase operation: +// the Trezor hardware wallet. Initializing the Trezor is a two or three phase operation: // * The first phase is to initialize the connection and read the wallet's // features. This phase is invoked is the provided passphrase is empty. The // device will display the pinpad as a result and will return an appropriate @@ -87,11 +91,13 @@ func (w *trezorDriver) Status() (string, error) { // * The second phase is to unlock access to the Trezor, which is done by the // user actually providing a passphrase mapping a keyboard keypad to the pin // number of the user (shuffled according to the pinpad displayed). +// * If needed the device will ask for passphrase which will require calling +// open again with the actual passphrase (3rd phase) func (w *trezorDriver) Open(device io.ReadWriter, passphrase string) error { w.device, w.failure = device, nil // If phase 1 is requested, init the connection and wait for user callback - if passphrase == "" { + if passphrase == "" && !w.passphrasewait { // If we're already waiting for a PIN entry, insta-return if w.pinwait { return ErrTrezorPINNeeded @@ -104,26 +110,46 @@ func (w *trezorDriver) Open(device io.ReadWriter, passphrase string) error { w.version = [3]uint32{features.GetMajorVersion(), features.GetMinorVersion(), features.GetPatchVersion()} w.label = features.GetLabel() - // Do a manual ping, forcing the device to ask for its PIN + // Do a manual ping, forcing the device to ask for its PIN and Passphrase askPin := true - res, err := w.trezorExchange(&trezor.Ping{PinProtection: &askPin}, new(trezor.PinMatrixRequest), new(trezor.Success)) + askPassphrase := true + res, err := w.trezorExchange(&trezor.Ping{PinProtection: &askPin, PassphraseProtection: &askPassphrase}, new(trezor.PinMatrixRequest), new(trezor.PassphraseRequest), new(trezor.Success)) if err != nil { return err } // Only return the PIN request if the device wasn't unlocked until now - if res == 1 { - return nil // Device responded with trezor.Success + switch res { + case 0: + w.pinwait = true + return ErrTrezorPINNeeded + case 1: + w.pinwait = false + w.passphrasewait = true + return ErrTrezorPassphraseNeeded + case 2: + return nil // responded with trezor.Success } - w.pinwait = true - return ErrTrezorPINNeeded } // Phase 2 requested with actual PIN entry - w.pinwait = false - - if _, err := w.trezorExchange(&trezor.PinMatrixAck{Pin: &passphrase}, new(trezor.Success)); err != nil { - w.failure = err - return err + if w.pinwait { + w.pinwait = false + res, err := w.trezorExchange(&trezor.PinMatrixAck{Pin: &passphrase}, new(trezor.Success), new(trezor.PassphraseRequest)) + if err != nil { + w.failure = err + return err + } + if res == 1 { + w.passphrasewait = true + return ErrTrezorPassphraseNeeded + } + } else if w.passphrasewait { + w.passphrasewait = false + if _, err := w.trezorExchange(&trezor.PassphraseAck{Passphrase: &passphrase}, new(trezor.Success)); err != nil { + w.failure = err + return err + } } + return nil } diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/messages.pb.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/messages.pb.go similarity index 100% rename from vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/messages.pb.go rename to vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/messages.pb.go diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/messages.proto b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/messages.proto similarity index 100% rename from vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/messages.proto rename to vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/messages.proto diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/trezor.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/trezor.go similarity index 100% rename from vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/trezor.go rename to vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/trezor.go diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/types.pb.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/types.pb.go similarity index 100% rename from vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/types.pb.go rename to vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/types.pb.go diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/types.proto b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/types.proto similarity index 100% rename from vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor/types.proto rename to vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/trezor/types.proto diff --git a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/wallet.go b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/wallet.go index 6cef6e0f..2ddfa30a 100644 --- a/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/wallet.go +++ b/vendor/github.com/ethereum/go-ethereum/accounts/usbwallet/wallet.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/karalabe/hid" ) @@ -273,9 +274,7 @@ func (w *wallet) close() error { w.device = nil w.accounts, w.paths = nil, nil - w.driver.Close() - - return nil + return w.driver.Close() } // Accounts implements accounts.Wallet, returning the list of accounts pinned to @@ -495,12 +494,28 @@ func (w *wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainSt w.deriveChain = chain } -// SignHash implements accounts.Wallet, however signing arbitrary data is not +// signHash implements accounts.Wallet, however signing arbitrary data is not // supported for hardware wallets, so this method will always return an error. -func (w *wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { +func (w *wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { return nil, accounts.ErrNotSupported } +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + return w.signHash(account, crypto.Keccak256(data)) +} + +// SignDataWithPassphrase implements accounts.Wallet, attempting to sign the given +// data with the given account using passphrase as extra authentication. +// Since USB wallets don't rely on passphrases, these are silently ignored. +func (w *wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + return w.SignData(account, mimeType, data) +} + +func (w *wallet) SignText(account accounts.Account, text []byte) ([]byte, error) { + return w.signHash(account, accounts.TextHash(text)) +} + // SignTx implements accounts.Wallet. It sends the transaction over to the Ledger // wallet to request a confirmation from the user. It returns either the signed // transaction or a failure if the user denied the transaction. @@ -550,8 +565,8 @@ func (w *wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID // SignHashWithPassphrase implements accounts.Wallet, however signing arbitrary // data is not supported for Ledger wallets, so this method will always return // an error. -func (w *wallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { - return w.SignHash(account, hash) +func (w *wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + return w.SignText(account, accounts.TextHash(text)) } // SignTxWithPassphrase implements accounts.Wallet, attempting to sign the given diff --git a/vendor/github.com/ethereum/go-ethereum/appveyor.yml b/vendor/github.com/ethereum/go-ethereum/appveyor.yml index 9ed4f114..0eb9163d 100644 --- a/vendor/github.com/ethereum/go-ethereum/appveyor.yml +++ b/vendor/github.com/ethereum/go-ethereum/appveyor.yml @@ -23,8 +23,8 @@ environment: install: - git submodule update --init - rmdir C:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.11.5.windows-%GETH_ARCH%.zip - - 7z x go1.11.5.windows-%GETH_ARCH%.zip -y -oC:\ > NUL + - appveyor DownloadFile https://dl.google.com/go/go1.12.1.windows-%GETH_ARCH%.zip + - 7z x go1.12.1.windows-%GETH_ARCH%.zip -y -oC:\ > NUL - go version - gcc --version diff --git a/vendor/github.com/ethereum/go-ethereum/build/ci-notes.md b/vendor/github.com/ethereum/go-ethereum/build/ci-notes.md index ba27cdb1..13e1fd23 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/ci-notes.md +++ b/vendor/github.com/ethereum/go-ethereum/build/ci-notes.md @@ -23,18 +23,18 @@ variables `PPA_SIGNING_KEY` and `PPA_SSH_KEY` on Travis. We want to build go-ethereum with the most recent version of Go, irrespective of the Go version that is available in the main Ubuntu repository. In order to make this possible, our PPA depends on the ~gophers/ubuntu/archive PPA. Our source package build-depends on -golang-1.10, which is co-installable alongside the regular golang package. PPA dependencies +golang-1.11, which is co-installable alongside the regular golang package. PPA dependencies can be edited at https://launchpad.net/%7Eethereum/+archive/ubuntu/ethereum/+edit-dependencies ## Building Packages Locally (for testing) You need to run Ubuntu to do test packaging. -Add the gophers PPA and install Go 1.10 and Debian packaging tools: +Add the gophers PPA and install Go 1.11 and Debian packaging tools: $ sudo apt-add-repository ppa:gophers/ubuntu/archive $ sudo apt-get update - $ sudo apt-get install build-essential golang-1.10 devscripts debhelper python-bzrlib python-paramiko + $ sudo apt-get install build-essential golang-1.11 devscripts debhelper python-bzrlib python-paramiko Create the source packages: diff --git a/vendor/github.com/ethereum/go-ethereum/build/ci.go b/vendor/github.com/ethereum/go-ethereum/build/ci.go index 4ee76ced..f5553fd3 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/ci.go +++ b/vendor/github.com/ethereum/go-ethereum/build/ci.go @@ -80,6 +80,7 @@ var ( executablePath("puppeth"), executablePath("rlpdump"), executablePath("wnode"), + executablePath("clef"), } // Files that end up in the swarm*.zip archive. @@ -118,6 +119,10 @@ var ( BinaryName: "wnode", Description: "Ethereum Whisper diagnostic tool", }, + { + BinaryName: "clef", + Description: "Ethereum account management tool.", + }, } // A debian package is created for all executables listed here. @@ -156,7 +161,7 @@ var ( // Note: yakkety is unsupported because it was officially deprecated on lanchpad. // Note: zesty is unsupported because it was officially deprecated on lanchpad. // Note: artful is unsupported because it was officially deprecated on lanchpad. - debDistros = []string{"trusty", "xenial", "bionic", "cosmic"} + debDistros = []string{"trusty", "xenial", "bionic", "cosmic", "disco"} ) var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin")) @@ -800,12 +805,8 @@ func doAndroidArchive(cmdline []string) { if os.Getenv("ANDROID_HOME") == "" { log.Fatal("Please ensure ANDROID_HOME points to your Android SDK") } - if os.Getenv("ANDROID_NDK") == "" { - log.Fatal("Please ensure ANDROID_NDK points to your Android NDK") - } // Build the Android archive and Maven resources build.MustRun(goTool("get", "golang.org/x/mobile/cmd/gomobile", "golang.org/x/mobile/cmd/gobind")) - build.MustRun(gomobileTool("init", "--ndk", os.Getenv("ANDROID_NDK"))) build.MustRun(gomobileTool("bind", "-ldflags", "-s -w", "--target", "android", "--javapkg", "org.ethereum", "-v", "github.com/ethereum/go-ethereum/mobile")) if *local { diff --git a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.control b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.control index 8cd325bf..b0ced141 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.control +++ b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.control @@ -2,7 +2,7 @@ Source: {{.Name}} Section: science Priority: extra Maintainer: {{.Author}} -Build-Depends: debhelper (>= 8.0.0), golang-1.10 +Build-Depends: debhelper (>= 8.0.0), golang-1.11 Standards-Version: 3.9.5 Homepage: https://ethereum.org Vcs-Git: git://github.com/ethereum/go-ethereum.git diff --git a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.rules b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.rules index 7f286569..5280e0e5 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.rules +++ b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum-swarm/deb.rules @@ -4,8 +4,11 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +# Launchpad rejects Go's access to $HOME/.cache, use custom folder +export GOCACHE=/tmp/go-build + override_dh_auto_build: - build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} + build/env.sh /usr/lib/go-1.11/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} override_dh_auto_test: diff --git a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.control b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.control index defb106f..018067a1 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.control +++ b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.control @@ -2,7 +2,7 @@ Source: {{.Name}} Section: science Priority: extra Maintainer: {{.Author}} -Build-Depends: debhelper (>= 8.0.0), golang-1.10 +Build-Depends: debhelper (>= 8.0.0), golang-1.11 Standards-Version: 3.9.5 Homepage: https://ethereum.org Vcs-Git: git://github.com/ethereum/go-ethereum.git diff --git a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.rules b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.rules index 7f286569..5280e0e5 100644 --- a/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.rules +++ b/vendor/github.com/ethereum/go-ethereum/build/deb/ethereum/deb.rules @@ -4,8 +4,11 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +# Launchpad rejects Go's access to $HOME/.cache, use custom folder +export GOCACHE=/tmp/go-build + override_dh_auto_build: - build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} + build/env.sh /usr/lib/go-1.11/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} override_dh_auto_test: diff --git a/vendor/github.com/ethereum/go-ethereum/build/travis_keepalive.sh b/vendor/github.com/ethereum/go-ethereum/build/travis_keepalive.sh new file mode 100755 index 00000000..77cc623e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/build/travis_keepalive.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# travis_keepalive runs the given command and preserves its return value, +# while it forks a child process what periodically produces a log line, +# so that Travis won't abort the build after 10 minutes. + +# Why? +# `t.Log()` in Go holds the buffer until the test does not pass or fail, +# and `-race` can increase the execution time by 2-20x. + +set -euo pipefail + +readonly KEEPALIVE_INTERVAL=300 # seconds => 5m + +main() { + keepalive + $@ +} + +# Keepalive produces a log line in each KEEPALIVE_INTERVAL. +keepalive() { + local child_pid + # Note: We fork here! + repeat "keepalive" & + child_pid=$! + ensureChildOnEXIT "${child_pid}" +} + +repeat() { + local this="$1" + while true; do + echo "${this}" + sleep "${KEEPALIVE_INTERVAL}" + done +} + +# Ensures that the child gets killed on normal program exit. +ensureChildOnEXIT() { + # Note: SIGINT and SIGTERM are forwarded to the child process by Bash + # automatically, so we don't have to deal with signals. + + local child_pid="$1" + trap "kill ${child_pid}" EXIT +} + +main "$@" diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/abigen/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/abigen/main.go index d19164b1..b6ec04ce 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/abigen/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/abigen/main.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of go-ethereum. // // go-ethereum is free software: you can redistribute it and/or modify @@ -37,6 +37,9 @@ var ( solcFlag = flag.String("solc", "solc", "Solidity compiler to use if source builds are requested") excFlag = flag.String("exc", "", "Comma separated types to exclude from binding") + vyFlag = flag.String("vy", "", "Path to the Ethereum contract Vyper source to build and bind") + vyperFlag = flag.String("vyper", "vyper", "Vyper compiler to use if source builds are requested") + pkgFlag = flag.String("pkg", "", "Package name to generate the binding into") outFlag = flag.String("out", "", "Output file for the generated binding (default = stdout)") langFlag = flag.String("lang", "go", "Destination language for the bindings (go, java, objc)") @@ -46,11 +49,14 @@ func main() { // Parse and ensure all needed inputs are specified flag.Parse() - if *abiFlag == "" && *solFlag == "" { - fmt.Printf("No contract ABI (--abi) or Solidity source (--sol) specified\n") + if *abiFlag == "" && *solFlag == "" && *vyFlag == "" { + fmt.Printf("No contract ABI (--abi), Solidity source (--sol), or Vyper source (--vy) specified\n") os.Exit(-1) - } else if (*abiFlag != "" || *binFlag != "" || *typFlag != "") && *solFlag != "" { - fmt.Printf("Contract ABI (--abi), bytecode (--bin) and type (--type) flags are mutually exclusive with the Solidity source (--sol) flag\n") + } else if (*abiFlag != "" || *binFlag != "" || *typFlag != "") && (*solFlag != "" || *vyFlag != "") { + fmt.Printf("Contract ABI (--abi), bytecode (--bin) and type (--type) flags are mutually exclusive with the Solidity (--sol) and Vyper (--vy) flags\n") + os.Exit(-1) + } else if *solFlag != "" && *vyFlag != "" { + fmt.Printf("Solidity (--sol) and Vyper (--vy) flags are mutually exclusive\n") os.Exit(-1) } if *pkgFlag == "" { @@ -75,7 +81,7 @@ func main() { bins []string types []string ) - if *solFlag != "" || (*abiFlag == "-" && *pkgFlag == "") { + if *solFlag != "" || *vyFlag != "" || (*abiFlag == "-" && *pkgFlag == "") { // Generate the list of types to exclude from binding exclude := make(map[string]bool) for _, kind := range strings.Split(*excFlag, ",") { @@ -84,13 +90,21 @@ func main() { var contracts map[string]*compiler.Contract var err error - if *solFlag != "" { + + switch { + case *solFlag != "": contracts, err = compiler.CompileSolidity(*solcFlag, *solFlag) if err != nil { fmt.Printf("Failed to build Solidity contract: %v\n", err) os.Exit(-1) } - } else { + case *vyFlag != "": + contracts, err = compiler.CompileVyper(*vyperFlag, *vyFlag) + if err != nil { + fmt.Printf("Failed to build Vyper contract: %v\n", err) + os.Exit(-1) + } + default: contracts, err = contractsFromStdin() if err != nil { fmt.Printf("Failed to read input ABIs from STDIN: %v\n", err) @@ -102,7 +116,11 @@ func main() { if exclude[strings.ToLower(name)] { continue } - abi, _ := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse + abi, err := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse + if err != nil { + fmt.Printf("Failed to parse ABIs from compiler output: %v\n", err) + os.Exit(-1) + } abis = append(abis, string(abi)) bins = append(bins, contract.Code) @@ -124,7 +142,7 @@ func main() { } abis = append(abis, string(abi)) - bin := []byte{} + var bin []byte if *binFlag != "" { if bin, err = ioutil.ReadFile(*binFlag); err != nil { fmt.Printf("Failed to read input bytecode: %v\n", err) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/bootnode/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/bootnode/main.go index 32f7d63b..a40b32b6 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/bootnode/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/bootnode/main.go @@ -112,12 +112,13 @@ func main() { if !realaddr.IP.IsLoopback() { go nat.Map(natm, nil, "udp", realaddr.Port, realaddr.Port, "ethereum discovery") } - // TODO: react to external IP changes over time. if ext, err := natm.ExternalIP(); err == nil { realaddr = &net.UDPAddr{IP: ext, Port: realaddr.Port} } } + printNotice(&nodeKey.PublicKey, *realaddr) + if *runv5 { if _, err := discv5.ListenUDP(nodeKey, conn, "", restrictList); err != nil { utils.Fatalf("%v", err) @@ -136,3 +137,13 @@ func main() { select {} } + +func printNotice(nodeKey *ecdsa.PublicKey, addr net.UDPAddr) { + if addr.IP.IsUnspecified() { + addr.IP = net.IP{127, 0, 0, 1} + } + n := enode.NewV4(nodeKey, addr.IP, 0, addr.Port) + fmt.Println(n.String()) + fmt.Println("Note: you're using cmd/bootnode, a developer tool.") + fmt.Println("We recommend using a regular node as bootstrap node for production deployments.") +} diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/README.md b/vendor/github.com/ethereum/go-ethereum/cmd/clef/README.md index c9461be1..956957f3 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/clef/README.md +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/README.md @@ -16,7 +16,8 @@ Check out * the [tutorial](tutorial.md) for some concrete examples on how the signer works. * the [setup docs](docs/setup.md) for some information on how to configure it to work on QubesOS or USBArmory. - +* the [data types](datatypes.md) for detailed information on the json types used in the communication between + clef and an external UI ## Command line flags Clef accepts the following command line options: @@ -24,28 +25,34 @@ Clef accepts the following command line options: COMMANDS: init Initialize the signer, generate secret storage attest Attest that a js-file is to be used - addpw Store a credential for a keystore file + setpw Store a credential for a keystore file + gendoc Generate documentation about json-rpc format help Shows a list of commands or help for one command - + GLOBAL OPTIONS: --loglevel value log level to emit to the screen (default: 4) --keystore value Directory for the keystore (default: "$HOME/.ethereum/keystore") - --configdir value Directory for clef configuration (default: "$HOME/.clef") - --networkid value Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1) + --configdir value Directory for Clef configuration (default: "$HOME/.clef") + --chainid value Chain id to use for signing (1=mainnet, 3=ropsten, 4=rinkeby, 5=Goerli) (default: 1) --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength --nousb Disables monitoring for and managing USB hardware wallets --rpcaddr value HTTP-RPC server listening interface (default: "localhost") + --rpcvhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost") + --ipcdisable Disable the IPC-RPC server + --ipcpath Filename for IPC socket/pipe within the datadir (explicit paths escape it) + --rpc Enable the HTTP-RPC server --rpcport value HTTP-RPC server listening port (default: 8550) - --signersecret value A file containing the password used to encrypt signer credentials, e.g. keystore credentials and ruleset hash + --signersecret value A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash --4bytedb value File containing 4byte-identifiers (default: "./4byte.json") --4bytedb-custom value File used for writing new 4byte-identifiers submitted via API (default: "./4byte-custom.json") --auditlog value File used to emit audit logs. Set to "" to disable (default: "audit.log") --rules value Enable rule-engine (default: "rules.json") - --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when the signer is started by an external process. - --stdio-ui-test Mechanism to test interface between signer and UI. Requires 'stdio-ui'. + --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when Clef is started by an external process. + --stdio-ui-test Mechanism to test interface between Clef and UI. Requires 'stdio-ui'. + --advanced If enabled, issues warnings instead of rejections for suspicious requests. Default off --help, -h show help --version, -v print the version - + ``` @@ -189,7 +196,9 @@ None "method": "account_new", "params": [] } - +``` +Response +``` { "id": 0, "jsonrpc": "2.0", @@ -222,7 +231,9 @@ None "jsonrpc": "2.0", "method": "account_list" } - +``` +Response +``` { "id": 1, "jsonrpc": "2.0", @@ -285,8 +296,8 @@ Response ```json { + "id": 2, "jsonrpc": "2.0", - "id": 67, "error": { "code": -32000, "message": "Request denied" @@ -298,6 +309,7 @@ Response ```json { + "id": 67, "jsonrpc": "2.0", "method": "account_signTransaction", "params": [ @@ -311,8 +323,7 @@ Response "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" }, "safeSend(address)" - ], - "id": 67 + ] } ``` Response @@ -346,15 +357,18 @@ Bash example: {"jsonrpc":"2.0","id":67,"result":{"raw":"0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","tx":{"nonce":"0x0","gasPrice":"0x1","gas":"0x333","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0","value":"0x0","input":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012","v":"0x26","r":"0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e","s":"0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","hash":"0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"}}} ``` - -### account_sign +### account_signData #### Sign data Signs a chunk of data and returns the calculated signature. #### Arguments + - content type [string]: type of signed data + - `text/validator`: hex data with custom validator defined in a contract + - `application/clique`: [clique](https://github.com/ethereum/EIPs/issues/225) headers + - `text/plain`: simple hex data validated by `account_ecRecover` - account [address]: account to sign with - - data [data]: data to sign + - data [object]: data to sign #### Result - calculated signature [data] @@ -364,8 +378,9 @@ Bash example: { "id": 3, "jsonrpc": "2.0", - "method": "account_sign", + "method": "account_signData", "params": [ + "data/plain", "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", "0xaabbccdd" ] @@ -381,11 +396,109 @@ Response } ``` +### account_signTypedData + +#### Sign data + Signs a chunk of structured data conformant to [EIP712]([EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md)) and returns the calculated signature. + +#### Arguments + - account [address]: account to sign with + - data [object]: data to sign + +#### Result + - calculated signature [data] + +#### Sample call +```json +{ + "id": 68, + "jsonrpc": "2.0", + "method": "account_signTypedData", + "params": [ + "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826", + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } + ] +} +``` +Response + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c" +} +``` + ### account_ecRecover -#### Recover address - Derive the address from the account that was used to sign data from the data and signature. - +#### Sign data + +Derive the address from the account that was used to sign data with content type `text/plain` and the signature. + #### Arguments - data [data]: data that was signed - signature [data]: the signature to verify @@ -400,6 +513,7 @@ Response "jsonrpc": "2.0", "method": "account_ecRecover", "params": [ + "data/plain", "0xaabbccdd", "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c" ] @@ -413,7 +527,6 @@ Response "jsonrpc": "2.0", "result": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db" } - ``` ### account_import @@ -458,7 +571,7 @@ Response }, "id": "09bccb61-b8d3-4e93-bf4f-205a8194f0b9", "version": 3 - }, + } ] } ``` @@ -548,7 +661,7 @@ OBS! A slight deviation from `json` standard is in place: every request and resp Whereas the `json` specification allows for linebreaks, linebreaks __should not__ be used in this communication channel, to make things simpler for both parties. -### ApproveTx +### ApproveTx / `ui_approveTx` Invoked when there's a transaction for approval. @@ -560,13 +673,13 @@ Here's a method invocation: curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/ ``` - +Results in the following invocation on the UI: ```json { "jsonrpc": "2.0", "id": 1, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -611,7 +724,7 @@ curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","me { "jsonrpc": "2.0", "id": 1, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -654,7 +767,7 @@ One which has missing `to`, but with no `data`: { "jsonrpc": "2.0", "id": 3, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -683,33 +796,7 @@ One which has missing `to`, but with no `data`: } ``` -### ApproveExport - -Invoked when a request to export an account has been made. - -#### Sample call - -```json - -{ - "jsonrpc": "2.0", - "id": 7, - "method": "ApproveExport", - "params": [ - { - "address": "0x0000000000000000000000000000000000000000", - "meta": { - "remote": "signer binary", - "local": "main", - "scheme": "in-proc" - } - } - ] -} - -``` - -### ApproveListing +### ApproveListing / `ui_approveListing` Invoked when a request for account listing has been made. @@ -720,7 +807,7 @@ Invoked when a request for account listing has been made. { "jsonrpc": "2.0", "id": 5, - "method": "ApproveListing", + "method": "ui_approveListing", "params": [ { "accounts": [ @@ -747,7 +834,7 @@ Invoked when a request for account listing has been made. ``` -### ApproveSignData +### ApproveSignData / `ui_approveSignData` #### Sample call @@ -755,7 +842,7 @@ Invoked when a request for account listing has been made. { "jsonrpc": "2.0", "id": 4, - "method": "ApproveSignData", + "method": "ui_approveSignData", "params": [ { "address": "0x123409812340981234098123409812deadbeef42", @@ -773,7 +860,7 @@ Invoked when a request for account listing has been made. ``` -### ShowInfo +### ShowInfo / `ui_showInfo` The UI should show the info to the user. Does not expect response. @@ -783,7 +870,7 @@ The UI should show the info to the user. Does not expect response. { "jsonrpc": "2.0", "id": 9, - "method": "ShowInfo", + "method": "ui_showInfo", "params": [ { "text": "Tests completed" @@ -793,7 +880,7 @@ The UI should show the info to the user. Does not expect response. ``` -### ShowError +### ShowError / `ui_showError` The UI should show the info to the user. Does not expect response. @@ -812,7 +899,7 @@ The UI should show the info to the user. Does not expect response. ``` -### OnApproved +### OnApprovedTx / `ui_onApprovedTx` `OnApprovedTx` is called when a transaction has been approved and signed. The call contains the return value that will be sent to the external caller. The return value from this method is ignored - the reason for having this callback is to allow the ruleset to keep track of approved transactions. @@ -820,7 +907,7 @@ When implementing rate-limited rules, this callback should be used. TLDR; Use this method to keep track of signed transactions, instead of using the data in `ApproveTx`. -### OnSignerStartup +### OnSignerStartup / `ui_onSignerStartup` This method provide the UI with information about what API version the signer uses (both internal and external) aswell as build-info and external api, in k/v-form. @@ -831,7 +918,7 @@ Example call: { "jsonrpc": "2.0", "id": 1, - "method": "OnSignerStartup", + "method": "ui_onSignerStartup", "params": [ { "info": { diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/datatypes.md b/vendor/github.com/ethereum/go-ethereum/cmd/clef/datatypes.md new file mode 100644 index 00000000..a26c1c93 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/datatypes.md @@ -0,0 +1,224 @@ +## UI Client interface + +These data types are defined in the channel between clef and the UI +### SignDataRequest + +SignDataRequest contains information about a pending request to sign some data. The data to be signed can be of various types, defined by content-type. Clef has done most of the work in canonicalizing and making sense of the data, and it's up to the UI to presentthe user with the contents of the `message` + +Example: +```json +{ + "content_type": "text/plain", + "address": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "raw_data": "GUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOgoxMWhlbGxvIHdvcmxk", + "message": [ + { + "name": "message", + "value": "\u0019Ethereum Signed Message:\n11hello world", + "type": "text/plain" + } + ], + "hash": "0xd9eba16ed0ecae432b71fe008c98cc872bb4cc214d3220a36f365326cf807d68", + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### SignDataResponse - approve + +Response to SignDataRequest + +Example: +```json +{ + "approved": true +} +``` +### SignDataResponse - deny + +Response to SignDataRequest + +Example: +```json +{ + "approved": false +} +``` +### SignTxRequest + +SignTxRequest contains information about a pending request to sign a transaction. Aside from the transaction itself, there is also a `call_info`-struct. That struct contains messages of various types, that the user should be informed of. + +As in any request, it's important to consider that the `meta` info also contains untrusted data. + +The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, they must be identical, otherwise an error is generated. However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket) + +Example: +```json +{ + "transaction": { + "from": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "to": null, + "gas": "0x3e8", + "gasPrice": "0x5", + "value": "0x6", + "nonce": "0x1", + "data": "0x01020304" + }, + "call_info": [ + { + "type": "Warning", + "message": "Something looks odd, show this message as a warning" + }, + { + "type": "Info", + "message": "User should see this aswell" + } + ], + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### SignTxResponse - approve + +Response to request to sign a transaction. This response needs to contain the `transaction`, because the UI is free to make modifications to the transaction. + +Example: +```json +{ + "transaction": { + "from": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "to": null, + "gas": "0x3e8", + "gasPrice": "0x5", + "value": "0x6", + "nonce": "0x4", + "data": "0x04030201" + }, + "approved": true +} +``` +### SignTxResponse - deny + +Response to SignTxRequest. When denying a request, there's no need to provide the transaction in return + +Example: +```json +{ + "transaction": { + "from": "0x", + "to": null, + "gas": "0x0", + "gasPrice": "0x0", + "value": "0x0", + "nonce": "0x0", + "data": null + }, + "approved": false +} +``` +### OnApproved - SignTransactionResult + +SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)` + +This occurs _after_ successful completion of the entire signing procedure, but right before the signed transaction is passed to the external caller. This method (and data) can be used by the UI to signal to the user that the transaction was signed, but it is primarily useful for ruleset implementations. + +A ruleset that implements a rate limitation needs to know what transactions are sent out to the external interface. By hooking into this methods, the ruleset can maintain track of that count. + +**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. + +The `OnApproved` method cannot be responded to, it's purely informative + +Example: +```json +{ + "raw": "0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed", + "tx": { + "nonce": "0x64", + "gasPrice": "0x1", + "gas": "0x1", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "value": "0x1", + "input": "0x", + "v": "0x26", + "r": "0x716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293", + "s": "0x4e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed", + "hash": "0x662f6d772692dd692f1b5e8baa77a9ff95bbd909362df3fc3d301aafebde5441" + } +} +``` +### UserInputRequest + +Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free) + +Example: +```json +{ + "prompt": "The question to ask the user", + "title": "The title here", + "isPassword": true +} +``` +### UserInputResponse + +Response to UserInputRequest + +Example: +```json +{ + "text": "The textual response from user" +} +``` +### ListRequest + +Sent when a request has been made to list addresses. The UI is provided with the full `account`s, including local directory names. Note: this information is not passed back to the external caller, who only sees the `address`es. + +Example: +```json +{ + "accounts": [ + { + "address": "0xdeadbeef000000000000000000000000deadbeef", + "url": "keystore:///path/to/keyfile/a" + }, + { + "address": "0x1111111122222222222233333333334444444444", + "url": "keystore:///path/to/keyfile/b" + } + ], + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### ListResponse + +Response to list request. The response contains a list of all addresses to show to the caller. Note: the UI is free to respond with any address the caller, regardless of whether it exists or not + +Example: +```json +{ + "accounts": [ + { + "address": "0x0000000000000000000000000000000000000000", + "url": ".. ignored .." + }, + { + "address": "0xffffffffffffffffffffffffffffffffffffffff", + "url": "" + } + ] +} +``` diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt1.png b/vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt1.png new file mode 100644 index 0000000000000000000000000000000000000000..e40e532f3051d6b583698b539ae97bf12560f740 GIT binary patch literal 69221 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

*@V)cs~^7_udH`|DL0Y7#oV`hCx? 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≶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

OgkN>Q6asVi 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

l6RLSeG*7gVi z({j7*h5{fJh@!Se;aWvM|0vr)?fC81wveuABwrZR@VqvGs@iNgxwkzkJ)QGrw#=fH zmxU!;*lxIe*C>XTtc;k;GU;H_+MdY=nA=TUhZxHmt}d1h=0aPmGA81a_`0|BHU z-2jWLSm`<5Oy&?CUYR}#x}RXCU^dL4eXtfFwpbY7jut#!q$+g#yUe$?RIbSmKP-bdJRWhmiPIDMmp84Q?<*{AeDXH=s=t0+nk%9A5 zZ?JYS5)3Wm#c#SQ;Xt5-WD6>ny@C?~HTzXPeSTOc^`!anTlHl`z2Vm$KfL{g1w2&* z$JeLz(AhwhbS-Y*o=+BFlz0(S`o4_o%_C;;l_OALXfGN$)Ur_5(Jer_*=I+gCS z{YpOm3QUfsAEX)2Gp=d4Sg>Iobo6%h*^fzXnMoT5&Oj@BhpBtwTDrtVWclP@y6(vl zkr$Y&yzE71x6q>oqUGs!_BURIRBevOo4iU!?7oM+V^F{k+dcp|)11qGr!-F@EPYeA z(q(QWOJcW|S@)#-wUym$y|o*lH954i;yUuV-YmtcHC^k5#Vs<;A6Ta=7k$!C`kj{5 zb)cwhn7}h!5ND9I9Y;M0hEEF@;gA{`*NY&q?VOnHO`vZv)w6sd=Q&o2%U(%)Wgu4j ziV7Q{nCN_YybV#%@8l^l-?S1|Z8DG9Q|>ofhSS%*Eiw0v3PryWA~ZT|hOZ&)Pz)#? zAxAwHNYyBmBe4GXrVMm*KE}MSr}qpS5bl+J*yh^1>S8a0Nf82NZJrseI8}y@UNtLM zWt7Sq$;66rGA^endDu1W#(vHkk4lD8x1B!b&#(h?WivmlNru5=SE{YEhg4Tgb#3Kh zf(E_SvJB}tq3aJLNS%XD^aTX!tU{kQbz~Jv+m6VwHjuU@oV%&pP%oQ|?uHEj+400|NG?I#u&zL-Tt+0eZ`U`z9eSKppw| zVbs)S09k_>^YlR4T5lELs!_FFVKA*}q+aC6;aI=R$I zzOPS$oYNi0LuSCQaEL>o>m& z`g7y-(OJKIS9-@3Qqst!GeymGiUut#(Fm%jYwN*q{FrPNr($C_;r8WOp-MC(=DAi) zxNcLhcdVpaMOgKR$K7r*=bIc20B!4h%qlhOKGro{G+N4~^+s4GEcekbelbQEJG}?R zvjS+==y7nay`NmJnpT0>^PQgM?Ib)Cshv3I8G%vXRq2(R)4FtB)JjN0lh4-l+X!O` zl^An{we1tz*6m9AX0)<020{8xn8NGZ5r#xYyvEP+*40h5XCsHfR}B*{{jkys6n1 z7Hx^nHugk47vwy_2@$D1Z&Sx-SbnYPlhpJEGL;OXQ_Qe)oa6?A0T{*K2&4h80|XkQ z`Z+18T`Hxe7&RQFlAyY18sZ}Law2Qnj_}>D=~7$am*?-NCMBi$J6d zP-Wm|7F1RB*~X`?;IoZhov&J*hF68jWCi|ad0p3&#?dFuOm&#%eY8M2NqdYypN+@S z8qFA`sDANobc(Qg zH5llBT8DKs&EX+#0qHL@XAX~mcolt`ptpw*@?-0d-}L+&e1w?qvElw$z*{ez?$Kdv zo<_SmK0mz0Bv6gU!B}Wmsy}GJUUVOtX1r^eQyr!luFvhnlwf;06kHl>CPzs@-PAF} zu~WQpC_AxjNk8?zMc=tr_3pXn;9;6rebXHn#>3d$ zROc0E_lRJy#&)U)Rd{^k%){~g`V;k^;nKCN#M?k0Y((^+f1hSp$@yelV^f#*`Kr`* zJ8PST_?6ordfAKeQ|Rs>>yob&U9G*fX;s{38>u9k-*JnR%g6%KyO>nXs_hE*Rnw1E zo_#P7y4nk>PR~d~LMUE2yWEA4NSvMp*nCF};ruyPa*d8?Lqap)PHvdL5{V<`gs-wf zk{b)nnsT?HW9eWCuAE>PU}`+x7_0b&R)|X;e7xNjc011Iw^*9AtpEqAgf8Q-O9h?- zM{>DFGjVoKTIOSJgYB)CG{~XT9CkHz^4-NuR(5Iudv88yi+UN}N5BDgJjo8is-kZu z)w|cgV9O16$&24xfAqlP+Pz*5&{C1*OPwmmtMj+@#C7O-hq0gq1oyK>CiM1Tz_LyI zCR6Y25a#nSzw4D3#TnN~6@Gfwz7lV1{m8Z{H)v5QxXQ(e@sU%CZacGk{5nuscNzl| zmfj6xY>qSYw@(*!KO)g@O>rT(fW~NiZ@xaEJ|XaTxKq^9K-StP1M2R zF@Ip?Iv9v8k|y-oaFTfP$&6G*6+Hgfh7UN=022Z!x0?~wS2d;24V-@E<%>86@w%)j zZ%kJ*^9k@rdyf}qG1Y#{69z(!!12X?3eh*CARZPVh`d+_K1Ow%s7pXQ_r4rj&~^ki z?mGcBY5lPNq*G~0EB+WUoLgF52&MLYO!mb5>ilo57D<$$8f!XR4gZ+z>+2FPA!}-0;C&YY4BJWi*NO<2o9itG1;{^m9FyJqTlZFRtn$$`tjb6y>_z20b zdK}ai9gf9@DAau42yDYR&6I9EbHWYCH&{=f`QDy;0!zrIHwVXGfIn%DLkV*r6A+;6 zzHfw_Co;~0(8v5sI{Rf{Z+o+d-#&u&jF;>B$|Fr%6@OkjnmBwthUV#0=)~(gQU?M7 zDJNOXb*(awErQ@d5{K;#1Rz6R|FyOFW#qP{#h?a|@7ER$Er>ev0Axjy0oYHVj2^rK zW$H>q#D;@nM2(o5k@hkYr+0m0unZW9Y$iKOtxn4xuw=8a#gZV#8Wq7U%U}V%tgA~o zLcC=R5XeTv|2ry101)q=4_yGXm@!Rs(LD!+gzCi%et54S_$m$%7$|;=w}x5Or~E7S zKEHue_0JAq=YrzLKFf=9nu6oA3qJ5>x9x$pK|p}J$O4@Z!nv?J1Lo@Af=RKGK72b3 zL>cyn_vR=y)|d?o!Hoim8_0|5n<`*!-dN06O&T2xh}_-oOzxFe6p6~} z$1ri!G1bC1*3o>C4kS_PM5im8O&C}+2CQHViu(F44OFv(!PkO!-v!`s#KyA#uhR8W zuksYNeg_sw24cU+l;4b`>+qt~W<5_!VNAEymA!ZOt!(7U$$XKrqex7Om#&+m1Rb`& zm*`KB4x0-nS(-`k@Y|ffqyGo}PXHD}XA3f#=p=rce$@kRn!YIrO`;D2QVJ@%y#lZ` z*idSLtTPwzjqj}r0fBC*5d_jT!8jV;x=yQmKBh%wTVVZB%ciEjCTo5*G%7eV&C04@ z{~cxXEkWQP0AA92|FR@KSG;y<_FSg{RfdGAIdm%I9W3hl`Fl{2HFs!2ItzpZ8kl%J!JAU*ougP?u_gaRt< z5F#J*Me|qLTK60{@c_kyCX2AH!NG-^7tAa{ASC#R;l&65mP)vBe}wAahp83#*|_4e zS-4ja8KfWebi~7&r!S%7r>3SNf0V|bQG59pY5O~4@(isF7{xs1dG>Ky&`Sl7^sd?2 z^q66s?zC|dXnKk$1^U1 zan#FNJQV!BrK>nHO=jirziFk@1G?ZU3`ae)5fOYD~=Kq03;e~rt-j>CiFoSHC` zwq+pAu6-(dG0Volzv+daf$7_2ogARrp8YIz{K*~OLH6`J$De~g<%s~h(>;sS z1cGuguQgMNR;I>T^Z?7{zf=Y$(n>18ItY4X3W(L)8VW6Mk^~_`X8LAwquWMs6%@cQ zP#KRv&hGY{ugXe-IhAxBaQwt+&pf(*>rgh6*6+G2Nd`Uka5aT_4c_RIH5p#1qTRmy zA9XW2f&{n9Nuy3-PW_NNcYDg_gUS)^E*|FQdd%vmf&!UcPPEf&$@lNnCU5|ic>C@x z-6Szwu;qc2k2NLUrs_9Nb8%>ox_YzeCZ?u_D?TLH011FMkh1LTk2Aras3lMnqk0!e zmR9Ll4!7^9L|_8tDM3q=OJ~Net35ocy>Da?Vj6~658ttG)5WehBsP7jQbBKJeZVKJ zto6=|z;s!;fM>aLNJjb)pf|t>%JAZ;heqVU+`6Ix=gq@6Ihux^5=SWim@|-ng?=!i zv7o*6kz?%b)U~L<7jM4z-rMU$Kw`SbCe?Cre23Wp8UPlW-iDsjZasUSz5oNNK~1&W z=NYNPaH<|y6H^B;QRM<9BQ|d68b0F4+;$_KrVBtqt)~#4;ms3P+`onAr9V5$B#`%- zJD!>1cE$C*>iHZk3cQHT7^G2!L-xgVoMq9wk^e<{d`G)VL#^xAraFNjqg%xSSG4Hp zB^Ae@L*;^BD1*X$TB)|K*m$@BmcVa_UBu=&t&j{i^V6rdTV8Hn7$R* zpY$I?d<_5#06uCN20G+$Fn_xqt}%3{pI0;e03z5x z0u5ZG|BJZ?sK5jWV3?`)jW7IDO7u(66Oy569!4#5_MpUMvrtnZW;M^JdaQ-SQASe}kEQ-OEEQ|Q~CI-s!d zU!pNdZbWFr;uk+oolV{P-Hh)jtz*3H7_eaAGsEqu;h-V|F@Z4w6tA{gHFl8o>7XDx zM)C&($M%F>0dR#@tk@w;o%_MR_y<@`VMgo`YO=4gr*s*^*u#zJF?6+h5Tj=2Y3GeL=iBxZg{7-z`e*JH3!`Nt~`-{jT-Jh z-t8KWQ6Tl?Z}R-V;S3pYmEaWn8~kv8(7&JuoUB{m?;sX9!V%62f5QRq18z+G1GDh3 z)!nWERq+S@TkQXb68|rFq#5{wrvKUlfM$Wuw|Bnw|3G}o=6_KCrm5lbeaMpcsi1FZ zm4rp$6K$R_k#dnI_tB9N2fKhj0V3hRoy`teF- zlt(s7M}T(>%)98o2x#pBR+tCwVqt|w>vk-6!2So6@NpZwmG}#2_^mH$$lp-^j}QLW zZ}zmxmB7dH7bSYcK`Vro|HS;i@bE7vk&R{%6##tQL9B3~`2X_YojM$ZyLdoks}i|G z3Vejb1fvIklSXx(=$1ftD054w{}LY#_CKJ6cX$W~;|_aqO8*VzEx+A;00;XI?*F{e z)5>{^l)o6zeBlqF{<^vwt3 zip57b?*DHOLjGU{-oQWV3r%45oYw`#&7mLc;E7scONMg%)?8oS4Q%&jwXK%$21apn zdIPh*(7$Fr#@fqJ$*(IC_ES!=bNm8Ort|Q1AR0b!4GU>{+_IlMaNU0TzJF3;Vj_Ao zFp4K2PIh+o2Y>hz-r!FQL^k-F_nZq9hfA#iF zK;%P!3r^3ys`FhWq*IP+pqa7ph5xYMWtHFM4QUZDoc|wRYrQ>(<%#UQ&@23dIi!a( zA5^{5SNN}bzHIgX4)+W@&$}!y?p?Lg-x&60KGYk%6-P? za$?-h=$KC31tk0Y{GC$I!zNLV@r>%R>%YdVt}~d_#-EQbH<18+mmLa%*Y`NXN`+I1 z4havpPp$MT$e9}#Is7W}Z2B+Ih>Wh+4$30JuNPQcd^seyq3%}-{8k_Qemc#GIU+i2 zd+LA#O_q+)=sRMXzUUvRq)Xhm{Awu`7FJ53sP~af&)*Gix%LRJ3gG3UL?cS$$^Btl z+oUx3M7VyFZa#*g+MID zV^>%=dLdW3S5^qsHXqN_SI!UmHc=7xAn47zzu&oug3NDUv_{%nIxL3?>UWouENFU% zuEyh-fgJY*ZH1Ix5^a8ueU9GSHP_KI7g{hpm!8j<6w0XjeN{57f2-@lpv$72dajA) zFujYPRjqKdkm*oIOy7nirL;bSWA5ua>f1bAV zoO0Lu1X;?(A3tQ6^F^7T=&a0(ub|yjnzexFDKJT+>~NJ*@|=Ls+;`fx%4IPlbH*R3XHm$Mph_B^H&%z z?d5Jy?8_=T5@Q4p<;vxeBa1mbze-A18gppHpySu3M+6;P4C}lFku{5@FA~gW+Nq9R zbWWf(M-a2^*ZLbdCvnupij$4DMS%xooZxr^UPDMWYK;`PFIC&gb*b=-xUZv3F z`}DHqWag6cy0EdhC11K>#AL?+jk1iz%=b;Z)3p|t>B({>5fZlAh_HS>CIeIr)VJPW zF1UTR)e}*dM`gBnS-uY#1BS@+@kAx0&^g~)#rZIzk2akM^NPeCqeY*-mQ`=sHEVG7 zNpYf2f5cIEnP%H_S~{y+I@{(YSbaWbmcB4&XZ8#e-Ef9yr~5)L8OLg{w~Uf(Fvi8B zaZAbce9Fmz;o1$K-|xXsckKkBiDK~iZdoUXYf4qms*WAo#>*(2YVswKddACB(fEmI za52&_lx4%jCP~SLfBvhNU4h-0Ca?p>Mw^MG6a?uv+62WZ2S|EUoq`1*h+;gL zX0wTAId87W&9rgXyrCj}B8I-MG+Z^wUTN%fWF+Ghy?M?o{X81H4y`EMwkG3`-X7xj zGQLO^onU3=ED^@^)I=dsaktM^EP`@S=ucTE)?OK*K2Znve;^~G{hTm8`v+dk77_oX_P znfd4Wy$LAu+u|wDoxvN?e37=&WZoZbYj>P((x9uSrfKDn^%V(^7a&~mi!veY_CUUX z8p@1AXzIr%KkmTSMZ=T6kqSwZqGiG>23>P6YMRe1CtKoU+Zr(9FAsQatEz@9a=H&y z#_Scwb`@Xn9<(EPa1POy7e%T2?7rK4G^U{2$OY3ZGu<+~>{A1g$C+7zOBTbodpLeM z!?xmMPh&8vYG881;fA3c`fsXC_X2Bt8X1B5w1e$KBo(Pm><63J`M+jD+^cU3{NpKiz=a&u50SA4HO#%x%47$47>!9$0GH- zXS{sv94E3a6Ey#}JMjFP==@rrcP?LCWaF4{ZFuhhdjM)T;JUEkSOpX}VUKKUJ52SJ z?@TZvaa&oa(;2E951;bZZo8Y$>-KM%ywOMg5>N8fmlqZz^nEyb`HW*)_NV|qWI0kc z!!32K3YU8OH3P>y*x^TW!lLOCawfK>z$c!j`R?QPigU@F^!!QjVeCva(~N5uTSxYK z9}H98OZ(?T<2LStJ3gT6=;th!0$Q%i3kfyLZ+|!j3s*JmqW-S?WU}+o$F0A-P9sNX zt$IEMC}k}yc2!QtUwLXTd{L<-%xxw1x=pl;rCd9{myb}`5gj+aAf24zk)_bptHC~#j_Jf+ z>5P0jnl1Kk57yD3ZB2w3O^N;#$(D z5e&h)^1^7w3@NQTR>loJ#Vg5^JIRd~-KtzWR0hXY41-8hTtun~t>$J>=P62I->=0W z#K=~>{Qe{i4Ec$l?l&DfbX7D+QdP$tvqOnoh1E4H@s5pYv#}_sU0?TL$6h(9!s<>m zqw=mZI!X~tGNEN4L5|gh^amR7nBgaWXOm-5YO?F&lyc0Q(t%V&I7}V1Z@sF3Uv61%N zf(=Eh=#bihtpiOZn+D`S6z4fAcX3p9+Seuv8lnnoF5Z1{qhkflpx-mMbBs)?TjL_Fs>D7XRTg!`&^eC zTDdcE4;D6~6Ppmn=9QY$z%C7FDj+PKZ`{Ikg9vJ4iaH+?-XF)Dp91n35(S5leKF6C z^ugRN*sDP}s|_^ML@_F|e)P%9b6qj0FcIv@7?{*=2fE-ax5qqDg%+7K%^?bzqlS8i z3{2R9#-{pArd%yhn~nz>g%s?~X6~IgQ42jm%28mL!#vavBRKY^$&S+Ap%N*gy=WQ? z=cs3~Qk4o>-my5E!YA0KtjqvYmB5&Iv?Kz=s zXAXm=W&H9s^Q-9nWRU|XlidGLcjx}k^#4BoIYi2#c&SjRNOH;)IZcs}Qz=G{#gNmS z<~)=nQjTpoj*=)WlsRrnQZ~)`G)&5I)`X3jZJ*T--=E%p!T0&&^Y%PE9@q7_uE*oL zKd$Tfw4U60bytA#oRo1i!onH>h83eB2*1@c3%)0mHq`(M$OKfWVo~2-{hf`g!h?Fo zbZvmWes@iAH-XkoHgvm-aA;SC2$e&`wW14 zwj?S*mSP4NO~L2tOYQy=7mADT4g1zgfE`S}Aq=Ix75#5BWA$F~LF2fefEwY(V7=^m z6Xd4ep4o@0X|B~TNxlb$0s(c=GRYEGS6+!hf0nbu&&A*Ip33ion-@|108ho{=ow!z zAmLf3g{YBV6(98`dT!aJNmC;y31}^siL>R{Gk_#&S=O@BMGapDu7qby>GSfie(08L zvcegJ&hYJ`ENW4)uJ(~$G-q||K=NTje_`HLCqg~UcN)7b^@qFgJ@*sN?i~#I-Irc$ zCRG!W)#7QmN;5Q$9VZ;g+cX3qJK%<}F~s>m(+cdA6$(uS145jRcCAu7#(vOC44u#{nMiVM@DXg+*Lk17}FgTmXzs0sKDm48`+E@`rZz#Lgekp4lrE;`w{L;NK0R zo+(AOp_6>SfzWl7Xq3MvU9!5S6i|<=04QEziry%OWOA1E~nv_MeN3PYh&c~7rrCkr^VjT zih*qG zt=$po;uNQ52w>!E=M`)Tml5H)n74rT>?J_J;Psmw?waQh7{Y|bxIuXhP>!4k)%AlB z_e6#r|Jv)%1q~1N_o|-~57?Qj#O&*|omiOve94=pCE7WbuJ~cn8(?QlOT2k7S;cfG zpjv!Iwwyip+}U;T?Nf$VOLkQtl6D~3%pdo4X;e&>s^h?@Aefm0X6!_7MJl4fa=KE% z(W?36NvHj2=&ME+Pq2Xs5xE0B?O?#uXA^JavUlb+^F=QZUy9G1LHze#%pAmrf~v2C=Af*h;ZX+)7U8v-OrP;%@%tACoCvJ0;Uq z)35O&qtAwy?_G9ravvCiYa{lSzjoi$>if(H#3fxD_#PO3v?XI0GxB*n01S$d^dNsR zJUEEarWlI%%J&&s5`KEFj9CH1%h^#IaY{Ey>|zoMCYuZks>NxB+Wg1Q*USRcT-v%W zOZE5XGHwMVOH(%K7$n_sfXd6z?4u&^<7%V(DaNcH5bPixa7&b?16V*Du)c!wQfd8`m$-0iC8i9x9I zB#>)n=_xkcrlWaMz(3gA)f2KYY@dL*O}D>XvQ6&!wBc1UnJS za^b8dubr35sy7S~^)UK{3ePnk0XOSjM&9mLvxsYxdVnuZE0qDYq}cEOZSjfxbmB_K zN(c)#-=BEz&Pdx;gzbf+B2+bIt)<*os^@AV=`3}{wCS$V%Mz`kJcYcFRfdkF>}vvW z?CKZ3dhg%2&1IextrzD|OZ8a6HF$s#)Xvxb@`~llxg!b`qJdbab>)-+o9dqoSOw_? zi4QU~>gA5pnmXNw_?Dy#Q!TS^=?UL8q`fmd5PW&TFm!`Ah=fm)mdK-Ra|o8A@EvOC z!i*w7csWyRs&zUQ2~Oo!0*sDMYUT7Vn=+npwiERDE<9iao7smP@Q_Xx_Br59N#oS? zB$JSSA=9)j3g*SrLIJk`6h($&*jN|Eep6~s5a|>sXV*;BsB(2MB|D~wH+nbiFEiZL z!cQfrwkI&a!YoHXa!W7rOI zADkpb7i>^v)Q$KUxOwZTAB^LJ9uL(fyWC@9yX%Gk?Q$NVuE~99DEgQVBzpQbxf0I2 z5yN!z4N@Q47mF(g9h;1fpNP6}O#k|i#g067ICZq+cGJL2#;$%tP1k{>|1?IEs1{9O z6Peu)4Ocx27k-7~pX7ibO%Y-rF?AvG`9a81H#w_fuZ&|6xYX^FGRGy~X}Rl{q#>h| zc?zJ9!xo>q%H?oC7!%4l07YkLm!Z{fkuq3s4~aUO?5c5nva*eC9TuI(7|=2*Kx6B4zjPi zNKp86MxC_Do_bjhGmPPw!6Uo?-sJKpWt!Z!8+33oV{BP(=e=e(@x*Exhx3SO;k5f` z*IuZRL*g;T4OU7p*WEJqNHM?k^TOV()u-GZFgMT z#>mEdDGsxqI=T_5#Rd6+Hmnvp@@d9m+}-}TK7x)4N-mdMir~s4V6E9i`3Fg*hcz3O zHcYa7wS( z9v|ga0M}b++H!8%8V<6y3E~D9C82U@I3Q`-G9l|bIG>)O>W!0t7f6_|JW5N#;^Zw zPHZSx#SRk~cbz@+U~PHyBVo7yc!1iJNm0u9g7X`-z0vac=wSTTv{O(Tg8VW8O^!yj z?(K|Xt#Z@|7Ko8t*oRAzpMthpZ7}OC;~=-p;&U;%#EEQlIm{a2nLsw%UX1nla0+Fd zPozC3it*ZXX<}54$(d{P%c1|(@|xURs{_sARJDjp{C(d3COWNZw`cQM?Hu^vo+>%1 znU!@M=g?B2;LFEr>j6+({&Dv!0L}YNaGlMJ-HsKFo_g1^ETwA`G`ZaHam@*=A_=V` zJp3%bwgh_dQzAYe|7y3dFo&kr#;>nViT^zs>pV)-d?~XYa&MGbH_egDXCHKR!q;*o zT+rHw18A+Hyzi9bDV8pr{NUOm;1)(VFccH5w(VMW*r!0JPQDb+`KJJ3e}v!{eW@Ut z*>1tN+st-}N3J=s-h9o?w=T#QY_%oWI|4Wk2TKh^Iycra${QH1b&LoG?s<~TH0!kz z2n#R<;c?53vk@X`It!OCYIu{EM>d#WakZ_GNZDjI$5q{B^x-b)x#0Zk14*PUJ0xFo z%~Q>m*_|79ZwNQ@%OyHnX^*9joQ&MhlVB&x%FMFSM_x=xLqsewE_V$q{oXH#RycjYoQKjGgNwZc&+$Sn};jWHU~!6S}EFHEq5UP{UZ zz?D9RRNawlGTSlt0G*5CwI`uyee3a8hFjq~V@C(hWB1=(uQD6lv{izGT;zKfh1K{& z!}c)GweJ?3hU@aY2cT2oPIU^v?ZFcs033w?M&G7Mth33=grn^HfFLtSm~`k=s#+Vo zetq(h;Ox&_U{M6c-OUjc!532LBgX*puZ@BBcy)}h%Y5Q1`xaR;$zulU_<^-`nVCDS zd7-8II^*~&nk9E_?H(8v1lJ8X{vAg+lMZ^s@jp=W3o_>}DOQ#qEW5+!j6NivItE@! zbOe;{rM_*HlO&{_ARSgi3y7d$B0eCao?h#T#Q@>?&zJwWFDjGDK8BuIhoYwA7_!M@ zSMTG*(&DUlLwvAW1+361YFBD53=PSj&&Z#*G6%?qa^0uC)PYm|md@~ApG+oOKEkn^ z_a4%d1l$*_XRYlpzxqBhK^I6R-{7$%qW6&4LOgZy2Du4 zC`)&JCP)iPon`s+9zIw(7xYcQj7{-@0YjyQ<$oFZ?d9u!ocTq0Ryt|O)!M{r zuPXmUreG?wpL6%+l`H*&hh3$?{I6}R4DukO^R&fsxZGN&+#WA6U32Gka0HmJ?kB}} z-SfZmr%2@(O?&hEA=eRkl1*R;h_w*d5#D}gBeRe?T{Zsn zP`Yg@Uc_-H;))LRzvRcRFnaV|g(=+f2+1i1PH(zK^gYWix2iW zaOb={KCHUL2}tZwReUg59`9?|M6k*s5q3K4F@N2{?u?MnJ5M*Uw@8AX<|VK9k0Ha# zfC<0E$6S+=`YB9*DBo55571}y`b4s`&b;H>@dYbp&_q#5nonu9Wm(O7DWr<-W6+)$ zW!N;Gm!5Z|o*5uRf9(m;KTUCnz7+o=ZRcO<4^Fyc$H?hm@<72&z`vxO_QtskG`3%r z{^f59#lML$F}_;|gONOpbHi z>4qN!faK4HA$YX&g2fDaLm`HJ1>*U~RJ}}ZpGhz$;ZR0DuJbZr4~8urjc~Wb1X1ERekO{~kD|;Nu=Z90JSyH+dl7e~ zx7p2qmNNy|9U!qJT%uMG3wxMbDWGS|79<4#pv;~xW<7Q?u~ZW>DW-*@$>v^S7w@m? zPB4LFhaP={I@XBNKtyYz*sA1_s=b{j*Y({OvOWVJ!^m-^nm*W<+0oLbn8qXH)USTH zR7M1(n+lD0xB^~>{!FJ$JY#0Srn6yW399ST9Y}z{a4wT}enS3(64zJ*;%w8n4(->W=UYCt_^hs#c4bOVf8N|ZPA9-^k+#Lz73iMw#tq4f}r z;t0qQLgIvk7V11<8e4AZUXUJy(cH2e)rZ~jwO;vh!^h;ysOr|lWmjLYLz7P3Q@7_I zxwp*YpWEi&4x3-ShG_iJJ9`mPONCXWz;#bhl9VZb&O4|)=6d89L}_e%8HHU0C55bP zkFD*v3q`EQQoR{A(|5nd^K9_3+PU7Q8dEif$xUA-aR`=K>2Wl zWsbOi#n~2o>_@0?Tpf-7B9`e2q&112hGqMq3qSK?*NJ^hzvQh~M?)Yk(Lm=~D;LnW zaJ@Z!HwP88@LEPn@q_UWxt9c=FZg z7I-y5Ehj2c69PZE5iOalGT#^-9u6^^bapJDbaH2kZR%0(ybi<~x zH~oXCj(=IeTD`JDXb`+D2Grf$Jxjr9(yNq{8h`w9Zt@!&4pYdCL>9qCKDbYk{e=hPD2db29fSX9J(baURrhIxmHe7L6`9C?P^{vIjT1rEy>Ft z**4@~)6;uCDMnT6s(;sXK;*=Ek-a8rqgKM9oHL)Vm|rZ;5`AFi?M4W(AF!$ZOJAtQwicKlYLDhm`gh^_UjSzSI49qQ3`}8v9CC?^;tSS@cX8A z)(<-A$@y_&Gts>b82okd1|0z6;p)ab2>tPODpR}dT`p(*;kHE!1PzT@Z&(LLTX z2dCvIIIFUpa^J9J;!TycVLAM@l@{N2{2eaU;;HQvuP(GxK{goCgA zP)EI*nVxS)+(Z&YVD8!F*d2KDQRa+e^dJv46*t0Vqr^{gb(igw)LRujyM<@Nn6#2y z$TN5LPQa%hURRjs+?LWiQpbexzH`66U9~icXps_GsD`bx9MKN)g=}r<32Y%rDEOzJ zw2IidZ6dO`#yRxfRmvh_7hQ)(JeX_U)flxH2l&}P1h~;d(u_^ zZ*(f^6&Bjkk5hp=)jkHa=U3gJNb_y$HektS^oR{sd7EDrdfIAF$Ij{#i%}FWk?5~b zkC@7=8wLi36d-dTD{<&kh!pF^@W(BlIDAIyq!r-%1h%># zYp^&rPoSm@GvJUsu=ga9YG^oWRG@)7t@v*h7=x$)bhN&uM|-0--uDxtV)r z8#8sK8h-%v!C#iv|9*q&OwY zj8x!%H;ui?4k|obdJFj~gNhgHbfjLxSJ?2#$kzv^N%I$^laatlGe>8`)2grQH3imE ztH%URB~N`5$t>x|UZs$R^LJU#3Dhc_?Qip5y|HPPJ3Qxw{e_?u{n+Tdl7ryT6&X4+@Q!|C4(!bvlx$Fx zB*YOvj-3M3fdBK>Y8xc^Myp{XI%~-)Qk;iU)RsI(_P)TK-9ML+ESoXas1HNf2LUG! zst4vUu0`NO9x$G*Jh@yT_O;3Q0g`x6D~(b6sVPLhH^EcMh_VydF=3aV1|k*RsI1rf z>X|wQy;s+^^8!W2`)g<GF*mdI9~O7)s{m2)y&C$L*Wf0t_J!jGn|Ft@DR|$d!`i zaUL!4P6L3P)q`>7=k-ly%lHOZSQ(25-NON09KJJ{Edked8!*`iAJCs6|p z&vi+E4yej;cWO4U+*|!**zKY##p^A*e3OZy|T)_P3jkYB7oHf^mUsZ zLEd}C=uT%%`RSpI%daEzg6iX<7A6NDF*z2E3C1oF2R(306oc!~L({sidT-K%CNhgF z>PZHwl=p}WR#DfkOHheI6J>3OCZTkOil9k2kM_e^tf)D1^a&OCE>P=LqUfm=Suk%# zQUu^+$CpNObz}(Vf9X`;ONA+?)Vs)JKd}xSTBIW+@x^bv*GqUc!H+xxESBMYtsU>gGEu<}dAlcNPyZP-J zk}rl7gh4Rhh;Xr-;vxs_`!LxR@w0{ zK7)B0j^H{Nc?KUHD1)i6lW1l}RZOK-7*AQt+}%5X@x)Y!$~v4%`+a#BJ0a{{+3pSg zOtdv#qZ={8G0q+7bZrPEPKos43<@PeML9NVeQeF8vDG)0X_vqyRSob=ZhBSq+D^%S zUe?-e5biX69xOC_uOFND^X7`>jnU=LyYMof0@+C3>^6pt{+Bn+cR}}^%RVhs?J)AP zV~1t+kpJa!o%kRMRo$Awx34fU$*Shki=6n&u7OXH{6SuzboAS z+OL6EM<`{SmsRk*n?WXKZ=I+)xl!;6(Q5El}q%0gpf8F*9f&?E#WtDUmS0u(Zy;jnnr!JQ|)N5Rg^d zx%#+>@!JK7(I~PA8pS97`2AvAcA}6zZ0@_KIW}+o$eX>L=Qs2^q&Z+AFO9ZZOV1jd z-zqC-9C(A8c;aW{Ut4s_<1^E_iOW`|x0Gul^h@gr9*FCentUpY@hU#=Jk(^)jS>>* zpt{9J>VYqmDk9ss_eD45jB8Mw)xJnyKqfrug*|=fyWU_=+~A|(gS95pL73Y3lgcDX z*ASD*uCkh~n+xCeCFKU6_4f4dI7Zz5J&Hi&C{(pLQEs(9^A2a$w!dCzI-!592+g+|R^}7Fm$Ob^i literal 0 HcmV?d00001 diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt3.png b/vendor/github.com/ethereum/go-ethereum/cmd/clef/docs/clef_architecture_pt3.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d695447308c0fe7c0dc3018618f7350f2a806c GIT binary patch literal 101351 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%0Amw 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≺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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/extapi_changelog.md b/vendor/github.com/ethereum/go-ethereum/cmd/clef/extapi_changelog.md index 6c2c3e81..dc7e65c0 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/clef/extapi_changelog.md +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/extapi_changelog.md @@ -1,5 +1,20 @@ ### Changelog for external API +### 6.0.0 + +* `New` was changed to deliver only an address, not the full `Account` data +* `Export` was moved from External API to the UI Server API + +#### 5.0.0 + +* The external `account_EcRecover`-method was reimplemented. +* The external method `account_sign(address, data)` was replaced with `account_signData(contentType, address, data)`. +The addition of `contentType` makes it possible to use the method for different types of objects, such as: + * signing data with an intended validator (not yet implemented) + * signing clique headers, + * signing plain personal messages, +* The external method `account_signTypedData` implements [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md) and makes it possible to sign typed data. + #### 4.0.0 * The external `account_Ecrecover`-method was removed. diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/intapi_changelog.md b/vendor/github.com/ethereum/go-ethereum/cmd/clef/intapi_changelog.md index 92a39a26..b7d4937c 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/clef/intapi_changelog.md +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/intapi_changelog.md @@ -1,5 +1,75 @@ ### Changelog for internal API (ui-api) +### 6.0.0 + +Removed `password` from responses to operations which require them. This is for two reasons, + +- Consistency between how rulesets operate and how manual processing works. A rule can `Approve` but require the actual password to be stored in the clef storage. +With this change, the same stored password can be used even if rulesets are not enabled, but storage is. +- It also removes the usability-shortcut that a UI might otherwise want to implement; remembering passwords. Since we now will not require the +password on every `Approve`, there's no need for the UI to cache it locally. + - In a future update, we'll likely add `clef_storePassword` to the internal API, so the user can store it via his UI (currently only CLI works). + +Affected datatypes: +- `SignTxResponse` +- `SignDataResponse` +- `NewAccountResponse` + +If `clef` requires a password, the `OnInputRequired` will be used to collect it. + + +### 5.0.0 + +Changed the namespace format to adhere to the legacy ethereum format: `name_methodName`. Changes: + +* `ApproveTx` -> `ui_approveTx` +* `ApproveSignData` -> `ui_approveSignData` +* `ApproveExport` -> `removed` +* `ApproveImport` -> `removed` +* `ApproveListing` -> `ui_approveListing` +* `ApproveNewAccount` -> `ui_approveNewAccount` +* `ShowError` -> `ui_showError` +* `ShowInfo` -> `ui_showInfo` +* `OnApprovedTx` -> `ui_onApprovedTx` +* `OnSignerStartup` -> `ui_onSignerStartup` +* `OnInputRequired` -> `ui_onInputRequired` + + +### 4.0.0 + +* Bidirectional communication implemented, so the UI can query `clef` via the stdin/stdout RPC channel. Methods implemented are: + - `clef_listWallets` + - `clef_listAccounts` + - `clef_listWallets` + - `clef_deriveAccount` + - `clef_importRawKey` + - `clef_openWallet` + - `clef_chainId` + - `clef_setChainId` + - `clef_export` + - `clef_import` + +* The type `Account` was modified (the json-field `type` was removed), to consist of + +```golang +type Account struct { + Address common.Address `json:"address"` // Ethereum account address derived from the key + URL URL `json:"url"` // Optional resource locator within a backend +} +``` + + +### 3.2.0 + +* Make `ShowError`, `OnApprovedTx`, `OnSignerStartup` be json-rpc [notifications](https://www.jsonrpc.org/specification#notification): + +> A Notification is a Request object without an "id" member. A Request object that is a Notification signifies the Client's lack of interest in the corresponding Response object, and as such no Response object needs to be returned to the client. The Server MUST NOT reply to a Notification, including those that are within a batch request. +> +> Notifications are not confirmable by definition, since they do not have a Response object to be returned. As such, the Client would not be aware of any errors (like e.g. "Invalid params","Internal error" +### 3.1.0 + +* Add `ContentType` `string` to `SignDataRequest` to accommodate the latest EIP-191 and EIP-712 implementations. + ### 3.0.0 * Make use of `OnInputRequired(info UserInputRequest)` for obtaining master password during startup diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/clef/main.go index 519d63b3..a9003124 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/clef/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/main.go @@ -28,6 +28,7 @@ import ( "fmt" "io" "io/ioutil" + "math/big" "os" "os/signal" "os/user" @@ -35,13 +36,19 @@ import ( "runtime" "strings" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/console" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/signer/core" "github.com/ethereum/go-ethereum/signer/rules" @@ -49,12 +56,6 @@ import ( "gopkg.in/urfave/cli.v1" ) -// ExternalAPIVersion -- see extapi_changelog.md -const ExternalAPIVersion = "4.0.0" - -// InternalAPIVersion -- see intapi_changelog.md -const InternalAPIVersion = "3.0.0" - const legalWarning = ` WARNING! @@ -86,6 +87,11 @@ var ( Value: DefaultConfigDir(), Usage: "Directory for Clef configuration", } + chainIdFlag = cli.Int64Flag{ + Name: "chainid", + Value: params.MainnetChainConfig.ChainID.Int64(), + Usage: "Chain id to use for signing (1=mainnet, 3=ropsten, 4=rinkeby, 5=Goerli)", + } rpcPortFlag = cli.IntFlag{ Name: "rpcport", Usage: "HTTP-RPC server listening port", @@ -113,7 +119,7 @@ var ( ruleFlag = cli.StringFlag{ Name: "rules", Usage: "Enable rule-engine", - Value: "rules.json", + Value: "", } stdiouiFlag = cli.BoolFlag{ Name: "stdio-ui", @@ -168,10 +174,16 @@ Clef that the file is 'safe' to execute.`, signerSecretFlag, }, Description: ` - The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will +The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will remove any stored credential for that address (keyfile) -`, - } +`} + gendocCommand = cli.Command{ + Action: GenDoc, + Name: "gendoc", + Usage: "Generate documentation about json-rpc format", + Description: ` +The gendoc generates example structures of the json-rpc communication types. +`} ) func init() { @@ -181,7 +193,7 @@ func init() { logLevelFlag, keystoreFlag, configdirFlag, - utils.NetworkIdFlag, + chainIdFlag, utils.LightKDFFlag, utils.NoUSBFlag, utils.RPCListenAddrFlag, @@ -200,7 +212,7 @@ func init() { advancedMode, } app.Action = signer - app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand} + app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand, gendocCommand} } func main() { @@ -341,7 +353,7 @@ func signer(c *cli.Context) error { return err } var ( - ui core.SignerUI + ui core.UIClientAPI ) if c.GlobalBool(stdiouiFlag.Name) { log.Info("Using stdin/stdout as UI-channel") @@ -359,17 +371,14 @@ func signer(c *cli.Context) error { log.Info("Loaded 4byte db", "signatures", db.Size(), "file", fourByteDb, "local", fourByteLocal) var ( - api core.ExternalAPI + api core.ExternalAPI + pwStorage storage.Storage = &storage.NoStorage{} ) configDir := c.GlobalString(configdirFlag.Name) if stretchedKey, err := readMasterKey(c, ui); err != nil { log.Info("No master seed provided, rules disabled", "error", err) } else { - - if err != nil { - utils.Fatalf(err.Error()) - } vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) // Generate domain specific keys @@ -378,41 +387,49 @@ func signer(c *cli.Context) error { confkey := crypto.Keccak256([]byte("config"), stretchedKey) // Initialize the encrypted storages - pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) + pwStorage = storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) jsStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "jsstorage.json"), jskey) configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confkey) //Do we have a rule-file? - ruleJS, err := ioutil.ReadFile(c.GlobalString(ruleFlag.Name)) - if err != nil { - log.Info("Could not load rulefile, rules not enabled", "file", "rulefile") - } else { - hasher := sha256.New() - hasher.Write(ruleJS) - shasum := hasher.Sum(nil) - storedShasum := configStorage.Get("ruleset_sha256") - if storedShasum != hex.EncodeToString(shasum) { - log.Info("Could not validate ruleset hash, rules not enabled", "got", hex.EncodeToString(shasum), "expected", storedShasum) + if ruleFile := c.GlobalString(ruleFlag.Name); ruleFile != "" { + ruleJS, err := ioutil.ReadFile(c.GlobalString(ruleFile)) + if err != nil { + log.Info("Could not load rulefile, rules not enabled", "file", "rulefile") } else { - // Initialize rules - ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage, pwStorage) - if err != nil { - utils.Fatalf(err.Error()) + shasum := sha256.Sum256(ruleJS) + foundShaSum := hex.EncodeToString(shasum[:]) + storedShasum := configStorage.Get("ruleset_sha256") + if storedShasum != foundShaSum { + log.Info("Could not validate ruleset hash, rules not enabled", "got", foundShaSum, "expected", storedShasum) + } else { + // Initialize rules + ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage) + if err != nil { + utils.Fatalf(err.Error()) + } + ruleEngine.Init(string(ruleJS)) + ui = ruleEngine + log.Info("Rule engine configured", "file", c.String(ruleFlag.Name)) } - ruleEngine.Init(string(ruleJS)) - ui = ruleEngine - log.Info("Rule engine configured", "file", c.String(ruleFlag.Name)) } } } + var ( + chainId = c.GlobalInt64(chainIdFlag.Name) + ksLoc = c.GlobalString(keystoreFlag.Name) + lightKdf = c.GlobalBool(utils.LightKDFFlag.Name) + advanced = c.GlobalBool(advancedMode.Name) + nousb = c.GlobalBool(utils.NoUSBFlag.Name) + ) + log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc, + "light-kdf", lightKdf, "advanced", advanced) + am := core.StartClefAccountManager(ksLoc, nousb, lightKdf) + apiImpl := core.NewSignerAPI(am, chainId, nousb, ui, db, advanced, pwStorage) - apiImpl := core.NewSignerAPI( - c.GlobalInt64(utils.NetworkIdFlag.Name), - c.GlobalString(keystoreFlag.Name), - c.GlobalBool(utils.NoUSBFlag.Name), - ui, db, - c.GlobalBool(utils.LightKDFFlag.Name), - c.GlobalBool(advancedMode.Name)) + // Establish the bidirectional communication, by creating a new UI backend and registering + // it with the UI. + ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl // Audit logging if logfile := c.GlobalString(auditLogFlag.Name); logfile != "" { @@ -479,8 +496,8 @@ func signer(c *cli.Context) error { } ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ - "extapi_version": ExternalAPIVersion, - "intapi_version": InternalAPIVersion, + "extapi_version": core.ExternalAPIVersion, + "intapi_version": core.InternalAPIVersion, "extapi_http": extapiURL, "extapi_ipc": ipcapiURL, }, @@ -514,7 +531,12 @@ func DefaultConfigDir() string { if runtime.GOOS == "darwin" { return filepath.Join(home, "Library", "Signer") } else if runtime.GOOS == "windows" { - return filepath.Join(home, "AppData", "Roaming", "Signer") + appdata := os.Getenv("APPDATA") + if appdata != "" { + return filepath.Join(appdata, "Signer") + } else { + return filepath.Join(home, "AppData", "Roaming", "Signer") + } } else { return filepath.Join(home, ".clef") } @@ -532,7 +554,7 @@ func homeDir() string { } return "" } -func readMasterKey(ctx *cli.Context, ui core.SignerUI) ([]byte, error) { +func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) { var ( file string configDir = ctx.GlobalString(configdirFlag.Name) @@ -616,42 +638,123 @@ func testExternalUI(api *core.SignerAPI) { ctx := context.WithValue(context.Background(), "remote", "clef binary") ctx = context.WithValue(ctx, "scheme", "in-proc") ctx = context.WithValue(ctx, "local", "main") - errs := make([]string, 0) - api.UI.ShowInfo("Testing 'ShowInfo'") - api.UI.ShowError("Testing 'ShowError'") + a := common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef") - checkErr := func(method string, err error) { - if err != nil && err != core.ErrRequestDenied { - errs = append(errs, fmt.Sprintf("%v: %v", method, err.Error())) + queryUser := func(q string) string { + resp, err := api.UI.OnInputRequired(core.UserInputRequest{ + Title: "Testing", + Prompt: q, + }) + if err != nil { + errs = append(errs, err.Error()) + } + return resp.Text + } + expectResponse := func(testcase, question, expect string) { + if got := queryUser(question); got != expect { + errs = append(errs, fmt.Sprintf("%s: got %v, expected %v", testcase, got, expect)) } } - var err error - - _, err = api.SignTransaction(ctx, core.SendTxArgs{From: common.MixedcaseAddress{}}, nil) - checkErr("SignTransaction", err) - _, err = api.Sign(ctx, common.MixedcaseAddress{}, common.Hex2Bytes("01020304")) - checkErr("Sign", err) - _, err = api.List(ctx) - checkErr("List", err) - _, err = api.New(ctx) - checkErr("New", err) - _, err = api.Export(ctx, common.Address{}) - checkErr("Export", err) - _, err = api.Import(ctx, json.RawMessage{}) - checkErr("Import", err) - - api.UI.ShowInfo("Tests completed") - - if len(errs) > 0 { - log.Error("Got errors") - for _, e := range errs { - log.Error(e) + expectApprove := func(testcase string, err error) { + if err == nil || err == accounts.ErrUnknownAccount { + return } - } else { - log.Info("No errors") + errs = append(errs, fmt.Sprintf("%v: expected no error, got %v", testcase, err.Error())) } + expectDeny := func(testcase string, err error) { + if err == nil || err != core.ErrRequestDenied { + errs = append(errs, fmt.Sprintf("%v: expected ErrRequestDenied, got %v", testcase, err)) + } + } + + // Test display of info and error + { + api.UI.ShowInfo("If you see this message, enter 'yes' to next question") + expectResponse("showinfo", "Did you see the message? [yes/no]", "yes") + api.UI.ShowError("If you see this message, enter 'yes' to the next question") + expectResponse("showerror", "Did you see the message? [yes/no]", "yes") + } + { // Sign data test - clique header + api.UI.ShowInfo("Please approve the next request for signing a clique header") + cliqueHeader := types.Header{ + common.HexToHash("0000H45H"), + common.HexToHash("0000H45H"), + common.HexToAddress("0000H45H"), + common.HexToHash("0000H00H"), + common.HexToHash("0000H45H"), + common.HexToHash("0000H45H"), + types.Bloom{}, + big.NewInt(1337), + big.NewInt(1337), + 1338, + 1338, + big.NewInt(1338), + []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"), + common.HexToHash("0x0000H45H"), + types.BlockNonce{}, + } + cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader) + if err != nil { + utils.Fatalf("Should not error: %v", err) + } + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err = api.SignData(ctx, accounts.MimetypeClique, *addr, hexutil.Encode(cliqueRlp)) + expectApprove("signdata - clique header", err) + } + { // Sign data test - plain text + api.UI.ShowInfo("Please approve the next request for signing text") + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world"))) + expectApprove("signdata - text", err) + } + { // Sign data test - plain text reject + api.UI.ShowInfo("Please deny the next request for signing text") + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world"))) + expectDeny("signdata - text", err) + } + { // Sign transaction + + api.UI.ShowInfo("Please reject next transaction") + data := hexutil.Bytes([]byte{}) + to := common.NewMixedcaseAddress(a) + tx := core.SendTxArgs{ + Data: &data, + Nonce: 0x1, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: &to, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + } + _, err := api.SignTransaction(ctx, tx, nil) + expectDeny("signtransaction [1]", err) + expectResponse("signtransaction [2]", "Did you see any warnings for the last transaction? (yes/no)", "no") + } + { // Listing + api.UI.ShowInfo("Please reject listing-request") + _, err := api.List(ctx) + expectDeny("list", err) + } + { // Import + api.UI.ShowInfo("Please reject new account-request") + _, err := api.New(ctx) + expectDeny("newaccount", err) + } + { // Metadata + api.UI.ShowInfo("Please check if you see the Origin in next listing (approve or deny)") + api.List(context.WithValue(ctx, "Origin", "origin.com")) + expectResponse("metadata - origin", "Did you see origin (origin.com)? [yes/no] ", "yes") + } + + for _, e := range errs { + log.Error(e) + } + result := fmt.Sprintf("Tests completed. %d errors:\n%s\n", len(errs), strings.Join(errs, "\n")) + api.UI.ShowInfo(result) } @@ -708,6 +811,154 @@ func decryptSeed(keyjson []byte, auth string) ([]byte, error) { return seed, err } +// GenDoc outputs examples of all structures used in json-rpc communication +func GenDoc(ctx *cli.Context) { + + var ( + a = common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef") + b = common.HexToAddress("0x1111111122222222222233333333334444444444") + meta = core.Metadata{ + Scheme: "http", + Local: "localhost:8545", + Origin: "www.malicious.ru", + Remote: "localhost:9999", + UserAgent: "Firefox 3.2", + } + output []string + add = func(name, desc string, v interface{}) { + if data, err := json.MarshalIndent(v, "", " "); err == nil { + output = append(output, fmt.Sprintf("### %s\n\n%s\n\nExample:\n```json\n%s\n```", name, desc, data)) + } else { + log.Error("Error generating output", err) + } + } + ) + + { // Sign plain text request + desc := "SignDataRequest contains information about a pending request to sign some data. " + + "The data to be signed can be of various types, defined by content-type. Clef has done most " + + "of the work in canonicalizing and making sense of the data, and it's up to the UI to present" + + "the user with the contents of the `message`" + sighash, msg := accounts.TextAndHash([]byte("hello world")) + message := []*core.NameValueType{{"message", msg, accounts.MimetypeTextPlain}} + + add("SignDataRequest", desc, &core.SignDataRequest{ + Address: common.NewMixedcaseAddress(a), + Meta: meta, + ContentType: accounts.MimetypeTextPlain, + Rawdata: []byte(msg), + Message: message, + Hash: sighash}) + } + { // Sign plain text response + add("SignDataResponse - approve", "Response to SignDataRequest", + &core.SignDataResponse{Approved: true}) + add("SignDataResponse - deny", "Response to SignDataRequest", + &core.SignDataResponse{}) + } + { // Sign transaction request + desc := "SignTxRequest contains information about a pending request to sign a transaction. " + + "Aside from the transaction itself, there is also a `call_info`-struct. That struct contains " + + "messages of various types, that the user should be informed of." + + "\n\n" + + "As in any request, it's important to consider that the `meta` info also contains untrusted data." + + "\n\n" + + "The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, " + + "they must be identical, otherwise an error is generated. " + + "However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)" + + data := hexutil.Bytes([]byte{0x01, 0x02, 0x03, 0x04}) + add("SignTxRequest", desc, &core.SignTxRequest{ + Meta: meta, + Callinfo: []core.ValidationInfo{ + {"Warning", "Something looks odd, show this message as a warning"}, + {"Info", "User should see this aswell"}, + }, + Transaction: core.SendTxArgs{ + Data: &data, + Nonce: 0x1, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: nil, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + }}) + } + { // Sign tx response + data := hexutil.Bytes([]byte{0x04, 0x03, 0x02, 0x01}) + add("SignTxResponse - approve", "Response to request to sign a transaction. This response needs to contain the `transaction`"+ + ", because the UI is free to make modifications to the transaction.", + &core.SignTxResponse{Approved: true, + Transaction: core.SendTxArgs{ + Data: &data, + Nonce: 0x4, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: nil, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + }}) + add("SignTxResponse - deny", "Response to SignTxRequest. When denying a request, there's no need to "+ + "provide the transaction in return", + &core.SignTxResponse{}) + } + { // WHen a signed tx is ready to go out + desc := "SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`" + + "\n\n" + + "This occurs _after_ successful completion of the entire signing procedure, but right before the signed " + + "transaction is passed to the external caller. This method (and data) can be used by the UI to signal " + + "to the user that the transaction was signed, but it is primarily useful for ruleset implementations." + + "\n\n" + + "A ruleset that implements a rate limitation needs to know what transactions are sent out to the external " + + "interface. By hooking into this methods, the ruleset can maintain track of that count." + + "\n\n" + + "**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time" + + " (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. " + + "\n\n" + + "The `OnApproved` method cannot be responded to, it's purely informative" + + rlpdata := common.FromHex("0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed") + var tx types.Transaction + rlp.DecodeBytes(rlpdata, &tx) + add("OnApproved - SignTransactionResult", desc, ðapi.SignTransactionResult{Raw: rlpdata, Tx: &tx}) + + } + { // User input + add("UserInputRequest", "Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)", + &core.UserInputRequest{IsPassword: true, Title: "The title here", Prompt: "The question to ask the user"}) + add("UserInputResponse", "Response to UserInputRequest", + &core.UserInputResponse{Text: "The textual response from user"}) + } + { // List request + add("ListRequest", "Sent when a request has been made to list addresses. The UI is provided with the "+ + "full `account`s, including local directory names. Note: this information is not passed back to the external caller, "+ + "who only sees the `address`es. ", + &core.ListRequest{ + Meta: meta, + Accounts: []accounts.Account{ + {a, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/a"}}, + {b, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/b"}}}, + }) + + add("ListResponse", "Response to list request. The response contains a list of all addresses to show to the caller. "+ + "Note: the UI is free to respond with any address the caller, regardless of whether it exists or not", + &core.ListResponse{ + Accounts: []accounts.Account{ + {common.HexToAddress("0xcowbeef000000cowbeef00000000000000000c0w"), accounts.URL{Path: ".. ignored .."}}, + {common.HexToAddress("0xffffffffffffffffffffffffffffffffffffffff"), accounts.URL{}}, + }}) + } + + fmt.Println(`## UI Client interface + +These data types are defined in the channel between clef and the UI`) + for _, elem := range output { + fmt.Println(elem) + } +} + /** //Create Account diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/clef/tests/testsigner.js b/vendor/github.com/ethereum/go-ethereum/cmd/clef/tests/testsigner.js new file mode 100644 index 00000000..86b2c453 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/cmd/clef/tests/testsigner.js @@ -0,0 +1,73 @@ +// This file is a test-utility for testing clef-functionality +// +// Start clef with +// +// build/bin/clef --4bytedb=./cmd/clef/4byte.json --rpc +// +// Start geth with +// +// build/bin/geth --nodiscover --maxpeers 0 --signer http://localhost:8550 console --preload=cmd/clef/tests/testsigner.js +// +// and in the console simply invoke +// +// > test() +// +// You can reload the file via `reload()` + +function reload(){ + loadScript("./cmd/clef/tests/testsigner.js"); +} + +function init(){ + if (typeof accts == 'undefined' || accts.length == 0){ + accts = eth.accounts + console.log("Got accounts ", accts); + } +} +init() +function testTx(){ + if( accts && accts.length > 0) { + var a = accts[0] + var txdata = eth.signTransaction({from: a, to: a, value: 1, nonce: 1, gas: 1, gasPrice: 1}) + var v = parseInt(txdata.tx.v) + console.log("V value: ", v) + if (v == 37 || v == 38){ + console.log("Mainnet 155-protected chainid was used") + } + if (v == 27 || v == 28){ + throw new Error("Mainnet chainid was used, but without replay protection!") + } + } +} +function testSignText(){ + if( accts && accts.length > 0){ + var a = accts[0] + var r = eth.sign(a, "0x68656c6c6f20776f726c64"); //hello world + console.log("signing response", r) + } +} +function testClique(){ + if( accts && accts.length > 0){ + var a = accts[0] + var r = debug.testSignCliqueBlock(a, 0); // Sign genesis + console.log("signing response", r) + if( a != r){ + throw new Error("Requested signing by "+a+ " but got sealer "+r) + } + } +} + +function test(){ + var tests = [ + testTx, + testSignText, + testClique, + ] + for( i in tests){ + try{ + tests[i]() + }catch(err){ + console.log(err) + } + } + } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/evm/internal/compiler/compiler.go b/vendor/github.com/ethereum/go-ethereum/cmd/evm/internal/compiler/compiler.go index 753ca622..54981b66 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/evm/internal/compiler/compiler.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/evm/internal/compiler/compiler.go @@ -25,7 +25,7 @@ import ( func Compile(fn string, src []byte, debug bool) (string, error) { compiler := asm.NewCompiler(debug) - compiler.Feed(asm.Lex(fn, src, debug)) + compiler.Feed(asm.Lex(src, debug)) bin, compileErrors := compiler.Compile() if len(compileErrors) > 0 { diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/evm/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/evm/main.go index a59cb1fb..ebac2047 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/evm/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/evm/main.go @@ -110,6 +110,11 @@ var ( Name: "nostack", Usage: "disable stack output", } + EVMInterpreterFlag = cli.StringFlag{ + Name: "vm.evm", + Usage: "External EVM configuration (default = built-in interpreter)", + Value: "", + } ) func init() { @@ -133,6 +138,7 @@ func init() { ReceiverFlag, DisableMemoryFlag, DisableStackFlag, + EVMInterpreterFlag, } app.Commands = []cli.Command{ compileCommand, diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/evm/runner.go b/vendor/github.com/ethereum/go-ethereum/cmd/evm/runner.go index 54b67ce1..bc5d00cf 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/evm/runner.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/evm/runner.go @@ -31,10 +31,10 @@ import ( "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm/runtime" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" cli "gopkg.in/urfave/cli.v1" @@ -99,12 +99,12 @@ func runCmd(ctx *cli.Context) error { if ctx.GlobalString(GenesisFlag.Name) != "" { gen := readGenesis(ctx.GlobalString(GenesisFlag.Name)) genesisConfig = gen - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := gen.ToBlock(db) statedb, _ = state.New(genesis.Root(), state.NewDatabase(db)) chainConfig = gen.Config } else { - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) genesisConfig = new(core.Genesis) } if ctx.GlobalString(SenderFlag.Name) != "" { @@ -171,8 +171,9 @@ func runCmd(ctx *cli.Context) error { Coinbase: genesisConfig.Coinbase, BlockNumber: new(big.Int).SetUint64(genesisConfig.Number), EVMConfig: vm.Config{ - Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + Tracer: tracer, + Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + EVMInterpreter: ctx.GlobalString(EVMInterpreterFlag.Name), }, } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/faucet/faucet.go b/vendor/github.com/ethereum/go-ethereum/cmd/faucet/faucet.go index a7c20db7..5e4b77a6 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/faucet/faucet.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/faucet/faucet.go @@ -282,7 +282,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u // close terminates the Ethereum connection and tears down the faucet. func (f *faucet) close() error { - return f.stack.Stop() + return f.stack.Close() } // listenAndServe registers the HTTP handlers for the faucet and boots it up diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/chaincmd.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/chaincmd.go index 562c7e0d..72aace1c 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/chaincmd.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/chaincmd.go @@ -29,14 +29,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/trie" - "github.com/syndtr/goleveldb/leveldb/util" "gopkg.in/urfave/cli.v1" ) @@ -190,8 +188,10 @@ func initGenesis(ctx *cli.Context) error { } // Open an initialise both full and light databases stack := makeFullNode(ctx) + defer stack.Close() + for _, name := range []string{"chaindata", "lightchaindata"} { - chaindb, err := stack.OpenDatabase(name, 0, 0) + chaindb, err := stack.OpenDatabase(name, 0, 0, "") if err != nil { utils.Fatalf("Failed to open database: %v", err) } @@ -199,6 +199,7 @@ func initGenesis(ctx *cli.Context) error { if err != nil { utils.Fatalf("Failed to write genesis block: %v", err) } + chaindb.Close() log.Info("Successfully wrote genesis state", "database", name, "hash", hash) } return nil @@ -209,8 +210,10 @@ func importChain(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - chain, chainDb := utils.MakeChain(ctx, stack) - defer chainDb.Close() + defer stack.Close() + + chain, db := utils.MakeChain(ctx, stack) + defer db.Close() // Start periodically gathering memory profiles var peakMemAlloc, peakMemSys uint64 @@ -245,23 +248,18 @@ func importChain(ctx *cli.Context) error { fmt.Printf("Import done in %v.\n\n", time.Since(start)) // Output pre-compaction stats mostly to see the import trashing - db := chainDb.(*ethdb.LDBDatabase) - - stats, err := db.LDB().GetProperty("leveldb.stats") + stats, err := db.Stat("leveldb.stats") if err != nil { utils.Fatalf("Failed to read database stats: %v", err) } fmt.Println(stats) - ioStats, err := db.LDB().GetProperty("leveldb.iostats") + ioStats, err := db.Stat("leveldb.iostats") if err != nil { utils.Fatalf("Failed to read database iostats: %v", err) } fmt.Println(ioStats) - fmt.Printf("Trie cache misses: %d\n", trie.CacheMisses()) - fmt.Printf("Trie cache unloads: %d\n\n", trie.CacheUnloads()) - // Print the memory statistics used by the importing mem := new(runtime.MemStats) runtime.ReadMemStats(mem) @@ -278,23 +276,22 @@ func importChain(ctx *cli.Context) error { // Compact the entire database to more accurately measure disk io and print the stats start = time.Now() fmt.Println("Compacting entire database...") - if err = db.LDB().CompactRange(util.Range{}); err != nil { + if err = db.Compact(nil, nil); err != nil { utils.Fatalf("Compaction failed: %v", err) } fmt.Printf("Compaction done in %v.\n\n", time.Since(start)) - stats, err = db.LDB().GetProperty("leveldb.stats") + stats, err = db.Stat("leveldb.stats") if err != nil { utils.Fatalf("Failed to read database stats: %v", err) } fmt.Println(stats) - ioStats, err = db.LDB().GetProperty("leveldb.iostats") + ioStats, err = db.Stat("leveldb.iostats") if err != nil { utils.Fatalf("Failed to read database iostats: %v", err) } fmt.Println(ioStats) - return nil } @@ -303,6 +300,8 @@ func exportChain(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) + defer stack.Close() + chain, _ := utils.MakeChain(ctx, stack) start := time.Now() @@ -336,10 +335,12 @@ func importPreimages(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase) + defer stack.Close() + db := utils.MakeChainDatabase(ctx, stack) start := time.Now() - if err := utils.ImportPreimages(diskdb, ctx.Args().First()); err != nil { + + if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil { utils.Fatalf("Import error: %v\n", err) } fmt.Printf("Import done in %v\n", time.Since(start)) @@ -352,10 +353,12 @@ func exportPreimages(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase) + defer stack.Close() + db := utils.MakeChainDatabase(ctx, stack) start := time.Now() - if err := utils.ExportPreimages(diskdb, ctx.Args().First()); err != nil { + + if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil { utils.Fatalf("Export error: %v\n", err) } fmt.Printf("Export done in %v\n", time.Since(start)) @@ -369,13 +372,14 @@ func copyDb(ctx *cli.Context) error { } // Initialize a new chain for the running node to sync into stack := makeFullNode(ctx) - chain, chainDb := utils.MakeChain(ctx, stack) + defer stack.Close() + chain, chainDb := utils.MakeChain(ctx, stack) syncmode := *utils.GlobalTextMarshaler(ctx, utils.SyncModeFlag.Name).(*downloader.SyncMode) dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil) // Create a source peer to satisfy downloader requests from - db, err := ethdb.NewLDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256) + db, err := rawdb.NewLevelDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256, "") if err != nil { return err } @@ -402,11 +406,10 @@ func copyDb(ctx *cli.Context) error { // Compact the entire database to remove any sync overhead start = time.Now() fmt.Println("Compacting entire database...") - if err = chainDb.(*ethdb.LDBDatabase).LDB().CompactRange(util.Range{}); err != nil { + if err = db.Compact(nil, nil); err != nil { utils.Fatalf("Compaction failed: %v", err) } fmt.Printf("Compaction done in %v.\n\n", time.Since(start)) - return nil } @@ -441,6 +444,8 @@ func removeDB(ctx *cli.Context) error { func dump(ctx *cli.Context) error { stack := makeFullNode(ctx) + defer stack.Close() + chain, chainDb := utils.MakeChain(ctx, stack) for _, arg := range ctx.Args() { var block *types.Block diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/config.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/config.go index f1e28119..f316380c 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/config.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/config.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/dashboard" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/graphql" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" @@ -124,6 +125,7 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { } // Apply flags. + utils.SetULC(ctx, &cfg.Eth) utils.SetNodeConfig(ctx, &cfg.Node) stack, err := node.New(&cfg.Node) if err != nil { @@ -176,6 +178,13 @@ func makeFullNode(ctx *cli.Context) *node.Node { utils.RegisterShhService(stack, &cfg.Shh) } + // Configure GraphQL if required + if ctx.GlobalIsSet(utils.GraphQLEnabledFlag.Name) { + if err := graphql.RegisterGraphQLService(stack, cfg.Node.GraphQLEndpoint(), cfg.Node.GraphQLCors, cfg.Node.GraphQLVirtualHosts, cfg.Node.HTTPTimeouts); err != nil { + utils.Fatalf("Failed to register the Ethereum service: %v", err) + } + } + // Add the Ethereum Stats daemon if requested. if cfg.Ethstats.URL != "" { utils.RegisterEthStatsService(stack, cfg.Ethstats.URL) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go index 2500a969..d4443b32 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go @@ -79,7 +79,7 @@ func localConsole(ctx *cli.Context) error { // Create and start the node based on the CLI flags node := makeFullNode(ctx) startNode(ctx, node) - defer node.Stop() + defer node.Close() // Attach to the newly started node and start the JavaScript console client, err := node.Attach() @@ -180,7 +180,7 @@ func ephemeralConsole(ctx *cli.Context) error { // Create and start the node based on the CLI flags node := makeFullNode(ctx) startNode(ctx, node) - defer node.Stop() + defer node.Close() // Attach to the newly started node and start the JavaScript console client, err := node.Attach() diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/dao_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/dao_test.go index 52983ff2..cb06038e 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/dao_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/dao_test.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -121,7 +120,7 @@ func testDAOForkBlockNewChain(t *testing.T, test int, genesis string, expectBloc } // Retrieve the DAO config flag from the database path := filepath.Join(datadir, "geth", "chaindata") - db, err := ethdb.NewLDBDatabase(path, 0, 0) + db, err := rawdb.NewLevelDBDatabase(path, 0, 0, "") if err != nil { t.Fatalf("test %d: failed to open test database: %v", test, err) } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/main.go index e60a27e4..83847fc5 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/main.go @@ -31,8 +31,10 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/internal/debug" "github.com/ethereum/go-ethereum/log" @@ -60,6 +62,7 @@ var ( utils.BootnodesV5Flag, utils.DataDirFlag, utils.KeyStoreDirFlag, + utils.ExternalSignerFlag, utils.NoUSBFlag, utils.DashboardEnabledFlag, utils.DashboardAddrFlag, @@ -82,9 +85,16 @@ var ( utils.TxPoolAccountQueueFlag, utils.TxPoolGlobalQueueFlag, utils.TxPoolLifetimeFlag, + utils.ULCModeConfigFlag, + utils.OnlyAnnounceModeFlag, + utils.ULCTrustedNodesFlag, + utils.ULCMinTrustedFractionFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.LightServFlag, + utils.LightBandwidthInFlag, + utils.LightBandwidthOutFlag, utils.LightPeersFlag, utils.LightKDFFlag, utils.WhitelistFlag, @@ -92,7 +102,6 @@ var ( utils.CacheDatabaseFlag, utils.CacheTrieFlag, utils.CacheGCFlag, - utils.TrieCacheGenFlag, utils.ListenPortFlag, utils.MaxPeersFlag, utils.MaxPendingPeersFlag, @@ -128,7 +137,6 @@ var ( utils.RPCCORSDomainFlag, utils.RPCVirtualHostsFlag, utils.EthStatsURLFlag, - utils.MetricsEnabledFlag, utils.FakePoWFlag, utils.NoCompactionFlag, utils.GpoBlocksFlag, @@ -142,6 +150,11 @@ var ( utils.RPCEnabledFlag, utils.RPCListenAddrFlag, utils.RPCPortFlag, + utils.GraphQLEnabledFlag, + utils.GraphQLListenAddrFlag, + utils.GraphQLPortFlag, + utils.GraphQLCORSDomainFlag, + utils.GraphQLVirtualHostsFlag, utils.RPCApiFlag, utils.WSEnabledFlag, utils.WSListenAddrFlag, @@ -160,6 +173,8 @@ var ( } metricsFlags = []cli.Flag{ + utils.MetricsEnabledFlag, + utils.MetricsEnabledExpensiveFlag, utils.MetricsEnableInfluxDBFlag, utils.MetricsInfluxDBEndpointFlag, utils.MetricsInfluxDBDatabaseFlag, @@ -173,7 +188,7 @@ func init() { // Initialize the CLI app and start Geth app.Action = geth app.HideVersion = true // we have a command to print the version - app.Copyright = "Copyright 2013-2018 The go-ethereum Authors" + app.Copyright = "Copyright 2013-2019 The go-ethereum Authors" app.Commands = []cli.Command{ // See chaincmd.go: initCommand, @@ -266,6 +281,7 @@ func geth(ctx *cli.Context) error { return fmt.Errorf("invalid command: %q", args[0]) } node := makeFullNode(ctx) + defer node.Close() startNode(ctx, node) node.Wait() return nil @@ -281,13 +297,14 @@ func startNode(ctx *cli.Context, stack *node.Node) { utils.StartNode(stack) // Unlock any account specifically requested - ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) - - passwords := utils.MakePasswordList(ctx) - unlocks := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") - for i, account := range unlocks { - if trimmed := strings.TrimSpace(account); trimmed != "" { - unlockAccount(ctx, ks, trimmed, i, passwords) + if keystores := stack.AccountManager().Backends(keystore.KeyStoreType); len(keystores) > 0 { + ks := keystores[0].(*keystore.KeyStore) + passwords := utils.MakePasswordList(ctx) + unlocks := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") + for i, account := range unlocks { + if trimmed := strings.TrimSpace(account); trimmed != "" { + unlockAccount(ctx, ks, trimmed, i, passwords) + } } } // Register wallet event handlers to open and auto-derive wallets @@ -331,6 +348,32 @@ func startNode(ctx *cli.Context, stack *node.Node) { } } }() + + // Spawn a standalone goroutine for status synchronization monitoring, + // close the node when synchronization is complete if user required. + if ctx.GlobalBool(utils.ExitWhenSyncedFlag.Name) { + go func() { + sub := stack.EventMux().Subscribe(downloader.DoneEvent{}) + defer sub.Unsubscribe() + for { + event := <-sub.Chan() + if event == nil { + continue + } + done, ok := event.Data.(downloader.DoneEvent) + if !ok { + continue + } + if timestamp := time.Unix(done.Latest.Time.Int64(), 0); time.Since(timestamp) < 10*time.Minute { + log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(), + "age", common.PrettyAge(timestamp)) + stack.Stop() + } + + } + }() + } + // Start auxiliary services if enabled if ctx.GlobalBool(utils.MiningEnabledFlag.Name) || ctx.GlobalBool(utils.DeveloperFlag.Name) { // Mining only makes sense if a full Ethereum node is running diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/monitorcmd.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/monitorcmd.go index e4ba96a7..34e090e1 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/monitorcmd.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/monitorcmd.go @@ -169,7 +169,7 @@ func retrieveMetrics(client *rpc.Client) (map[string]interface{}, error) { // resolveMetrics takes a list of input metric patterns, and resolves each to one // or more canonical metric names. func resolveMetrics(metrics map[string]interface{}, patterns []string) []string { - res := []string{} + var res []string for _, pattern := range patterns { res = append(res, resolveMetric(metrics, pattern, "")...) } @@ -179,7 +179,7 @@ func resolveMetrics(metrics map[string]interface{}, patterns []string) []string // resolveMetrics takes a single of input metric pattern, and resolves it to one // or more canonical metric names. func resolveMetric(metrics map[string]interface{}, pattern string, path string) []string { - results := []string{} + var results []string // If a nested metric was requested, recurse optionally branching (via comma) parts := strings.SplitN(pattern, "/", 2) @@ -215,7 +215,7 @@ func resolveMetric(metrics map[string]interface{}, pattern string, path string) // expandMetrics expands the entire tree of metrics into a flat list of paths. func expandMetrics(metrics map[string]interface{}, path string) []string { // Iterate over all fields and expand individually - list := []string{} + var list []string for name, metric := range metrics { switch metric := metric.(type) { case float64: diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/geth/usage.go b/vendor/github.com/ethereum/go-ethereum/cmd/geth/usage.go index 6823aa36..8658a3fd 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/geth/usage.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/geth/usage.go @@ -33,7 +33,7 @@ import ( var AppHelpTemplate = `NAME: {{.App.Name}} - {{.App.Usage}} - Copyright 2013-2018 The go-ethereum Authors + Copyright 2013-2019 The go-ethereum Authors USAGE: {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}} @@ -76,10 +76,13 @@ var AppHelpFlagGroups = []flagGroup{ utils.RinkebyFlag, utils.GoerliFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.EthStatsURLFlag, utils.IdentityFlag, utils.LightServFlag, + utils.LightBandwidthInFlag, + utils.LightBandwidthOutFlag, utils.LightPeersFlag, utils.LightKDFFlag, utils.WhitelistFlag, @@ -136,7 +139,6 @@ var AppHelpFlagGroups = []flagGroup{ utils.CacheDatabaseFlag, utils.CacheTrieFlag, utils.CacheGCFlag, - utils.TrieCacheGenFlag, }, }, { @@ -144,6 +146,7 @@ var AppHelpFlagGroups = []flagGroup{ Flags: []cli.Flag{ utils.UnlockedAccountFlag, utils.PasswordFileFlag, + utils.ExternalSignerFlag, }, }, { @@ -222,16 +225,8 @@ var AppHelpFlagGroups = []flagGroup{ }, debug.Flags...), }, { - Name: "METRICS AND STATS", - Flags: []cli.Flag{ - utils.MetricsEnabledFlag, - utils.MetricsEnableInfluxDBFlag, - utils.MetricsInfluxDBEndpointFlag, - utils.MetricsInfluxDBDatabaseFlag, - utils.MetricsInfluxDBUsernameFlag, - utils.MetricsInfluxDBPasswordFlag, - utils.MetricsInfluxDBTagsFlag, - }, + Name: "METRICS AND STATS", + Flags: metricsFlags, }, { Name: "WHISPER (EXPERIMENTAL)", @@ -306,7 +301,7 @@ func init() { categorized[flag.String()] = struct{}{} } } - uncategorized := []cli.Flag{} + var uncategorized []cli.Flag for _, flag := range data.(*cli.App).Flags { if _, ok := categorized[flag.String()]; !ok { if strings.HasPrefix(flag.GetName(), "dashboard") { diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access.go index 072541b6..cc0cc820 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access.go @@ -178,8 +178,8 @@ func accessNewACT(ctx *cli.Context) { accessKey []byte err error ref = args[0] - pkGrantees = []string{} - passGrantees = []string{} + pkGrantees []string + passGrantees []string pkGranteesFilename = ctx.String(SwarmAccessGrantKeysFlag.Name) passGranteesFilename = ctx.String(utils.PasswordFileFlag.Name) privateKey = getPrivKey(ctx) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access_test.go index 967ef274..0898d33b 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/access_test.go @@ -397,7 +397,7 @@ func testACT(t *testing.T, bogusEntries int) { } ref := matches[0] - grantees := []string{} + var grantees []string for i, v := range cluster.Nodes { if i == nodeToSkip { continue @@ -408,7 +408,7 @@ func testACT(t *testing.T, bogusEntries int) { } if bogusEntries > 0 { - bogusGrantees := []string{} + var bogusGrantees []string for i := 0; i < bogusEntries; i++ { prv, err := ecies.GenerateKey(rand.Reader, DefaultCurve, nil) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config.go index 98d4dee7..32cd442a 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config.go @@ -59,31 +59,31 @@ var ( //constants for environment variables const ( - SWARM_ENV_CHEQUEBOOK_ADDR = "SWARM_CHEQUEBOOK_ADDR" - SWARM_ENV_ACCOUNT = "SWARM_ACCOUNT" - SWARM_ENV_LISTEN_ADDR = "SWARM_LISTEN_ADDR" - SWARM_ENV_PORT = "SWARM_PORT" - SWARM_ENV_NETWORK_ID = "SWARM_NETWORK_ID" - SWARM_ENV_SWAP_ENABLE = "SWARM_SWAP_ENABLE" - SWARM_ENV_SWAP_API = "SWARM_SWAP_API" - SWARM_ENV_SYNC_DISABLE = "SWARM_SYNC_DISABLE" - SWARM_ENV_SYNC_UPDATE_DELAY = "SWARM_ENV_SYNC_UPDATE_DELAY" - SWARM_ENV_MAX_STREAM_PEER_SERVERS = "SWARM_ENV_MAX_STREAM_PEER_SERVERS" - SWARM_ENV_LIGHT_NODE_ENABLE = "SWARM_LIGHT_NODE_ENABLE" - SWARM_ENV_DELIVERY_SKIP_CHECK = "SWARM_DELIVERY_SKIP_CHECK" - SWARM_ENV_ENS_API = "SWARM_ENS_API" - SWARM_ENV_ENS_ADDR = "SWARM_ENS_ADDR" - SWARM_ENV_CORS = "SWARM_CORS" - SWARM_ENV_BOOTNODES = "SWARM_BOOTNODES" - SWARM_ENV_PSS_ENABLE = "SWARM_PSS_ENABLE" - SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH" - SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY" - SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY" - SWARM_ENV_BOOTNODE_MODE = "SWARM_BOOTNODE_MODE" - SWARM_ACCESS_PASSWORD = "SWARM_ACCESS_PASSWORD" - SWARM_AUTO_DEFAULTPATH = "SWARM_AUTO_DEFAULTPATH" - SWARM_GLOBALSTORE_API = "SWARM_GLOBALSTORE_API" - GETH_ENV_DATADIR = "GETH_DATADIR" + SwarmEnvChequebookAddr = "SWARM_CHEQUEBOOK_ADDR" + SwarmEnvAccount = "SWARM_ACCOUNT" + SwarmEnvListenAddr = "SWARM_LISTEN_ADDR" + SwarmEnvPort = "SWARM_PORT" + SwarmEnvNetworkID = "SWARM_NETWORK_ID" + SwarmEnvSwapEnable = "SWARM_SWAP_ENABLE" + SwarmEnvSwapAPI = "SWARM_SWAP_API" + SwarmEnvSyncDisable = "SWARM_SYNC_DISABLE" + SwarmEnvSyncUpdateDelay = "SWARM_ENV_SYNC_UPDATE_DELAY" + SwarmEnvMaxStreamPeerServers = "SWARM_ENV_MAX_STREAM_PEER_SERVERS" + SwarmEnvLightNodeEnable = "SWARM_LIGHT_NODE_ENABLE" + SwarmEnvDeliverySkipCheck = "SWARM_DELIVERY_SKIP_CHECK" + SwarmEnvENSAPI = "SWARM_ENS_API" + SwarmEnvENSAddr = "SWARM_ENS_ADDR" + SwarmEnvCORS = "SWARM_CORS" + SwarmEnvBootnodes = "SWARM_BOOTNODES" + SwarmEnvPSSEnable = "SWARM_PSS_ENABLE" + SwarmEnvStorePath = "SWARM_STORE_PATH" + SwarmEnvStoreCapacity = "SWARM_STORE_CAPACITY" + SwarmEnvStoreCacheCapacity = "SWARM_STORE_CACHE_CAPACITY" + SwarmEnvBootnodeMode = "SWARM_BOOTNODE_MODE" + SwarmAccessPassword = "SWARM_ACCESS_PASSWORD" + SwarmAutoDefaultPath = "SWARM_AUTO_DEFAULTPATH" + SwarmGlobalstoreAPI = "SWARM_GLOBALSTORE_API" + GethEnvDataDir = "GETH_DATADIR" ) // These settings ensure that TOML keys use the same names as Go struct fields. @@ -123,18 +123,22 @@ func buildConfig(ctx *cli.Context) (config *bzzapi.Config, err error) { } //finally, after the configuration build phase is finished, initialize -func initSwarmNode(config *bzzapi.Config, stack *node.Node, ctx *cli.Context) { +func initSwarmNode(config *bzzapi.Config, stack *node.Node, ctx *cli.Context, nodeconfig *node.Config) error { //at this point, all vars should be set in the Config //get the account for the provided swarm account prvkey := getAccount(config.BzzAccount, ctx, stack) //set the resolved config path (geth --datadir) config.Path = expandPath(stack.InstanceDir()) //finally, initialize the configuration - config.Init(prvkey) + err := config.Init(prvkey, nodeconfig.NodeKey()) + if err != nil { + return err + } //configuration phase completed here log.Debug("Starting Swarm with the following parameters:") //after having created the config, print it to screen log.Debug(printConfig(config)) + return nil } //configFileOverride overrides the current config with the config file, if a config file has been provided @@ -227,7 +231,7 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con currentConfig.SwapAPI = ctx.GlobalString(SwarmSwapAPIFlag.Name) if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" { - utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API) + utils.Fatalf(SwarmErrSwapSetNoAPI) } if ctx.GlobalIsSet(EnsAPIFlag.Name) { @@ -255,8 +259,8 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con currentConfig.LocalStoreParams.DbCapacity = storeCapacity } - if storeCacheCapacity := ctx.GlobalUint(SwarmStoreCacheCapacity.Name); storeCacheCapacity != 0 { - currentConfig.LocalStoreParams.CacheCapacity = storeCacheCapacity + if ctx.GlobalIsSet(SwarmStoreCacheCapacity.Name) { + currentConfig.LocalStoreParams.CacheCapacity = ctx.GlobalUint(SwarmStoreCacheCapacity.Name) } if ctx.GlobalIsSet(SwarmBootnodeModeFlag.Name) { @@ -274,113 +278,113 @@ func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Con // envVarsOverride overrides the current config with whatver is provided in environment variables // most values are not allowed a zero value (empty string), if not otherwise noted func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) { - if keyid := os.Getenv(SWARM_ENV_ACCOUNT); keyid != "" { + if keyid := os.Getenv(SwarmEnvAccount); keyid != "" { currentConfig.BzzAccount = keyid } - if chbookaddr := os.Getenv(SWARM_ENV_CHEQUEBOOK_ADDR); chbookaddr != "" { + if chbookaddr := os.Getenv(SwarmEnvChequebookAddr); chbookaddr != "" { currentConfig.Contract = common.HexToAddress(chbookaddr) } - if networkid := os.Getenv(SWARM_ENV_NETWORK_ID); networkid != "" { + if networkid := os.Getenv(SwarmEnvNetworkID); networkid != "" { id, err := strconv.ParseUint(networkid, 10, 64) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_NETWORK_ID, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvNetworkID, err) } if id != 0 { currentConfig.NetworkID = id } } - if datadir := os.Getenv(GETH_ENV_DATADIR); datadir != "" { + if datadir := os.Getenv(GethEnvDataDir); datadir != "" { currentConfig.Path = expandPath(datadir) } - bzzport := os.Getenv(SWARM_ENV_PORT) + bzzport := os.Getenv(SwarmEnvPort) if len(bzzport) > 0 { currentConfig.Port = bzzport } - if bzzaddr := os.Getenv(SWARM_ENV_LISTEN_ADDR); bzzaddr != "" { + if bzzaddr := os.Getenv(SwarmEnvListenAddr); bzzaddr != "" { currentConfig.ListenAddr = bzzaddr } - if swapenable := os.Getenv(SWARM_ENV_SWAP_ENABLE); swapenable != "" { + if swapenable := os.Getenv(SwarmEnvSwapEnable); swapenable != "" { swap, err := strconv.ParseBool(swapenable) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SWAP_ENABLE, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSwapEnable, err) } currentConfig.SwapEnabled = swap } - if syncdisable := os.Getenv(SWARM_ENV_SYNC_DISABLE); syncdisable != "" { + if syncdisable := os.Getenv(SwarmEnvSyncDisable); syncdisable != "" { sync, err := strconv.ParseBool(syncdisable) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_DISABLE, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSyncDisable, err) } currentConfig.SyncEnabled = !sync } - if v := os.Getenv(SWARM_ENV_DELIVERY_SKIP_CHECK); v != "" { + if v := os.Getenv(SwarmEnvDeliverySkipCheck); v != "" { skipCheck, err := strconv.ParseBool(v) if err != nil { currentConfig.DeliverySkipCheck = skipCheck } } - if v := os.Getenv(SWARM_ENV_SYNC_UPDATE_DELAY); v != "" { + if v := os.Getenv(SwarmEnvSyncUpdateDelay); v != "" { d, err := time.ParseDuration(v) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_UPDATE_DELAY, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvSyncUpdateDelay, err) } currentConfig.SyncUpdateDelay = d } - if max := os.Getenv(SWARM_ENV_MAX_STREAM_PEER_SERVERS); max != "" { + if max := os.Getenv(SwarmEnvMaxStreamPeerServers); max != "" { m, err := strconv.Atoi(max) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_MAX_STREAM_PEER_SERVERS, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvMaxStreamPeerServers, err) } currentConfig.MaxStreamPeerServers = m } - if lne := os.Getenv(SWARM_ENV_LIGHT_NODE_ENABLE); lne != "" { + if lne := os.Getenv(SwarmEnvLightNodeEnable); lne != "" { lightnode, err := strconv.ParseBool(lne) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_LIGHT_NODE_ENABLE, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvLightNodeEnable, err) } currentConfig.LightNodeEnabled = lightnode } - if swapapi := os.Getenv(SWARM_ENV_SWAP_API); swapapi != "" { + if swapapi := os.Getenv(SwarmEnvSwapAPI); swapapi != "" { currentConfig.SwapAPI = swapapi } if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" { - utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API) + utils.Fatalf(SwarmErrSwapSetNoAPI) } - if ensapi := os.Getenv(SWARM_ENV_ENS_API); ensapi != "" { + if ensapi := os.Getenv(SwarmEnvENSAPI); ensapi != "" { currentConfig.EnsAPIs = strings.Split(ensapi, ",") } - if ensaddr := os.Getenv(SWARM_ENV_ENS_ADDR); ensaddr != "" { + if ensaddr := os.Getenv(SwarmEnvENSAddr); ensaddr != "" { currentConfig.EnsRoot = common.HexToAddress(ensaddr) } - if cors := os.Getenv(SWARM_ENV_CORS); cors != "" { + if cors := os.Getenv(SwarmEnvCORS); cors != "" { currentConfig.Cors = cors } - if bm := os.Getenv(SWARM_ENV_BOOTNODE_MODE); bm != "" { + if bm := os.Getenv(SwarmEnvBootnodeMode); bm != "" { bootnodeMode, err := strconv.ParseBool(bm) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_BOOTNODE_MODE, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmEnvBootnodeMode, err) } currentConfig.BootnodeMode = bootnodeMode } - if api := os.Getenv(SWARM_GLOBALSTORE_API); api != "" { + if api := os.Getenv(SwarmGlobalstoreAPI); api != "" { currentConfig.GlobalStoreAPI = api } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config_test.go index 18be316e..869edd0f 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/config_test.go @@ -52,7 +52,7 @@ func TestConfigFailsSwapEnabledNoSwapApi(t *testing.T) { } swarm := runSwarm(t, flags...) - swarm.Expect("Fatal: " + SWARM_ERR_SWAP_SET_NO_API + "\n") + swarm.Expect("Fatal: " + SwarmErrSwapSetNoAPI + "\n") swarm.ExpectExit() } @@ -63,7 +63,7 @@ func TestConfigFailsNoBzzAccount(t *testing.T) { } swarm := runSwarm(t, flags...) - swarm.Expect("Fatal: " + SWARM_ERR_NO_BZZACCOUNT + "\n") + swarm.Expect("Fatal: " + SwarmErrNoBZZAccount + "\n") swarm.ExpectExit() } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/flags.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/flags.go index b092a774..5e1ada63 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/flags.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/flags.go @@ -23,68 +23,68 @@ var ( ChequebookAddrFlag = cli.StringFlag{ Name: "chequebook", Usage: "chequebook contract address", - EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR, + EnvVar: SwarmEnvChequebookAddr, } SwarmAccountFlag = cli.StringFlag{ Name: "bzzaccount", Usage: "Swarm account key file", - EnvVar: SWARM_ENV_ACCOUNT, + EnvVar: SwarmEnvAccount, } SwarmListenAddrFlag = cli.StringFlag{ Name: "httpaddr", Usage: "Swarm HTTP API listening interface", - EnvVar: SWARM_ENV_LISTEN_ADDR, + EnvVar: SwarmEnvListenAddr, } SwarmPortFlag = cli.StringFlag{ Name: "bzzport", Usage: "Swarm local http api port", - EnvVar: SWARM_ENV_PORT, + EnvVar: SwarmEnvPort, } SwarmNetworkIdFlag = cli.IntFlag{ Name: "bzznetworkid", Usage: "Network identifier (integer, default 3=swarm testnet)", - EnvVar: SWARM_ENV_NETWORK_ID, + EnvVar: SwarmEnvNetworkID, } SwarmSwapEnabledFlag = cli.BoolFlag{ Name: "swap", Usage: "Swarm SWAP enabled (default false)", - EnvVar: SWARM_ENV_SWAP_ENABLE, + EnvVar: SwarmEnvSwapEnable, } SwarmSwapAPIFlag = cli.StringFlag{ Name: "swap-api", Usage: "URL of the Ethereum API provider to use to settle SWAP payments", - EnvVar: SWARM_ENV_SWAP_API, + EnvVar: SwarmEnvSwapAPI, } SwarmSyncDisabledFlag = cli.BoolTFlag{ Name: "nosync", Usage: "Disable swarm syncing", - EnvVar: SWARM_ENV_SYNC_DISABLE, + EnvVar: SwarmEnvSyncDisable, } SwarmSyncUpdateDelay = cli.DurationFlag{ Name: "sync-update-delay", Usage: "Duration for sync subscriptions update after no new peers are added (default 15s)", - EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY, + EnvVar: SwarmEnvSyncUpdateDelay, } SwarmMaxStreamPeerServersFlag = cli.IntFlag{ Name: "max-stream-peer-servers", Usage: "Limit of Stream peer servers, 0 denotes unlimited", - EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS, + EnvVar: SwarmEnvMaxStreamPeerServers, Value: 10000, // A very large default value is possible as stream servers have very small memory footprint } SwarmLightNodeEnabled = cli.BoolFlag{ Name: "lightnode", Usage: "Enable Swarm LightNode (default false)", - EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE, + EnvVar: SwarmEnvLightNodeEnable, } SwarmDeliverySkipCheckFlag = cli.BoolFlag{ Name: "delivery-skip-check", Usage: "Skip chunk delivery check (default false)", - EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK, + EnvVar: SwarmEnvDeliverySkipCheck, } EnsAPIFlag = cli.StringSliceFlag{ Name: "ens-api", Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url", - EnvVar: SWARM_ENV_ENS_API, + EnvVar: SwarmEnvENSAPI, } SwarmApiFlag = cli.StringFlag{ Name: "bzzapi", @@ -126,7 +126,7 @@ var ( SwarmAccessPasswordFlag = cli.StringFlag{ Name: "password", Usage: "Password", - EnvVar: SWARM_ACCESS_PASSWORD, + EnvVar: SwarmAccessPassword, } SwarmDryRunFlag = cli.BoolFlag{ Name: "dry-run", @@ -135,22 +135,23 @@ var ( CorsStringFlag = cli.StringFlag{ Name: "corsdomain", Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')", - EnvVar: SWARM_ENV_CORS, + EnvVar: SwarmEnvCORS, } SwarmStorePath = cli.StringFlag{ Name: "store.path", Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)", - EnvVar: SWARM_ENV_STORE_PATH, + EnvVar: SwarmEnvStorePath, } SwarmStoreCapacity = cli.Uint64Flag{ Name: "store.size", Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)", - EnvVar: SWARM_ENV_STORE_CAPACITY, + EnvVar: SwarmEnvStoreCapacity, } SwarmStoreCacheCapacity = cli.UintFlag{ Name: "store.cache.size", - Usage: "Number of recent chunks cached in memory (default 5000)", - EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY, + Usage: "Number of recent chunks cached in memory", + EnvVar: SwarmEnvStoreCacheCapacity, + Value: 10000, } SwarmCompressedFlag = cli.BoolFlag{ Name: "compressed", @@ -179,6 +180,6 @@ var ( SwarmGlobalStoreAPIFlag = cli.StringFlag{ Name: "globalstore-api", Usage: "URL of the Global Store API provider (only for testing)", - EnvVar: SWARM_GLOBALSTORE_API, + EnvVar: SwarmGlobalstoreAPI, } ) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/fs.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/fs.go index edeeddff..7f156523 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/fs.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/fs.go @@ -123,7 +123,7 @@ func listMounts(cliContext *cli.Context) { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() - mf := []fuse.MountInfo{} + var mf []fuse.MountInfo err = client.CallContext(ctx, &mf, "swarmfs_listmounts") if err != nil { utils.Fatalf("encountered an error calling the RPC endpoint while listing mounts: %v", err) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer.go new file mode 100644 index 00000000..634ff1eb --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer.go @@ -0,0 +1,66 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "context" + "fmt" + "net" + "net/http" + "time" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/storage/mock" + "github.com/ethereum/go-ethereum/swarm/storage/mock/explorer" + cli "gopkg.in/urfave/cli.v1" +) + +// serveChunkExplorer starts an http server in background with chunk explorer handler +// using the provided global store. Server is started if the returned shutdown function +// is not nil. +func serveChunkExplorer(ctx *cli.Context, globalStore mock.GlobalStorer) (shutdown func(), err error) { + if !ctx.IsSet("explorer-address") { + return nil, nil + } + + corsOrigins := ctx.StringSlice("explorer-cors-origin") + server := &http.Server{ + Handler: explorer.NewHandler(globalStore, corsOrigins), + IdleTimeout: 30 * time.Minute, + ReadTimeout: 2 * time.Minute, + WriteTimeout: 2 * time.Minute, + } + listener, err := net.Listen("tcp", ctx.String("explorer-address")) + if err != nil { + return nil, fmt.Errorf("explorer: %v", err) + } + log.Info("chunk explorer http", "address", listener.Addr().String(), "origins", corsOrigins) + + go func() { + if err := server.Serve(listener); err != nil { + log.Error("chunk explorer", "err", err) + } + }() + + return func() { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if err := server.Shutdown(ctx); err != nil { + log.Error("chunk explorer: shutdown", "err", err) + } + }, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer_test.go new file mode 100644 index 00000000..2e4928c8 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/explorer_test.go @@ -0,0 +1,254 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "sort" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/swarm/storage/mock/explorer" + mockRPC "github.com/ethereum/go-ethereum/swarm/storage/mock/rpc" +) + +// TestExplorer validates basic chunk explorer functionality by storing +// a small set of chunk and making http requests on exposed endpoint. +// Full chunk explorer validation is done in mock/explorer package. +func TestExplorer(t *testing.T) { + addr := findFreeTCPAddress(t) + explorerAddr := findFreeTCPAddress(t) + testCmd := runGlobalStore(t, "ws", "--addr", addr, "--explorer-address", explorerAddr) + defer testCmd.Kill() + + client := websocketClient(t, addr) + + store := mockRPC.NewGlobalStore(client) + defer store.Close() + + nodeKeys := map[string][]string{ + "a1": {"b1", "b2", "b3"}, + "a2": {"b3", "b4", "b5"}, + } + + keyNodes := make(map[string][]string) + + for addr, keys := range nodeKeys { + for _, key := range keys { + keyNodes[key] = append(keyNodes[key], addr) + } + } + + invalidAddr := "c1" + invalidKey := "d1" + + for addr, keys := range nodeKeys { + for _, key := range keys { + err := store.Put(common.HexToAddress(addr), common.Hex2Bytes(key), []byte("data")) + if err != nil { + t.Fatal(err) + } + } + } + + endpoint := "http://" + explorerAddr + + t.Run("has key", func(t *testing.T) { + for addr, keys := range nodeKeys { + for _, key := range keys { + testStatusResponse(t, endpoint+"/api/has-key/"+addr+"/"+key, http.StatusOK) + testStatusResponse(t, endpoint+"/api/has-key/"+invalidAddr+"/"+key, http.StatusNotFound) + } + testStatusResponse(t, endpoint+"/api/has-key/"+addr+"/"+invalidKey, http.StatusNotFound) + } + testStatusResponse(t, endpoint+"/api/has-key/"+invalidAddr+"/"+invalidKey, http.StatusNotFound) + }) + + t.Run("keys", func(t *testing.T) { + var keys []string + for key := range keyNodes { + keys = append(keys, key) + } + sort.Strings(keys) + testKeysResponse(t, endpoint+"/api/keys", explorer.KeysResponse{ + Keys: keys, + }) + }) + + t.Run("nodes", func(t *testing.T) { + var nodes []string + for addr := range nodeKeys { + nodes = append(nodes, common.HexToAddress(addr).Hex()) + } + sort.Strings(nodes) + testNodesResponse(t, endpoint+"/api/nodes", explorer.NodesResponse{ + Nodes: nodes, + }) + }) + + t.Run("node keys", func(t *testing.T) { + for addr, keys := range nodeKeys { + testKeysResponse(t, endpoint+"/api/keys?node="+addr, explorer.KeysResponse{ + Keys: keys, + }) + } + testKeysResponse(t, endpoint+"/api/keys?node="+invalidAddr, explorer.KeysResponse{}) + }) + + t.Run("key nodes", func(t *testing.T) { + for key, addrs := range keyNodes { + var nodes []string + for _, addr := range addrs { + nodes = append(nodes, common.HexToAddress(addr).Hex()) + } + sort.Strings(nodes) + testNodesResponse(t, endpoint+"/api/nodes?key="+key, explorer.NodesResponse{ + Nodes: nodes, + }) + } + testNodesResponse(t, endpoint+"/api/nodes?key="+invalidKey, explorer.NodesResponse{}) + }) +} + +// TestExplorer_CORSOrigin validates if chunk explorer returns +// correct CORS origin header in GET and OPTIONS requests. +func TestExplorer_CORSOrigin(t *testing.T) { + origin := "http://localhost/" + addr := findFreeTCPAddress(t) + explorerAddr := findFreeTCPAddress(t) + testCmd := runGlobalStore(t, "ws", + "--addr", addr, + "--explorer-address", explorerAddr, + "--explorer-cors-origin", origin, + ) + defer testCmd.Kill() + + // wait until the server is started + waitHTTPEndpoint(t, explorerAddr) + + url := "http://" + explorerAddr + "/api/keys" + + t.Run("get", func(t *testing.T) { + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Origin", origin) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + header := resp.Header.Get("Access-Control-Allow-Origin") + if header != origin { + t.Errorf("got Access-Control-Allow-Origin header %q, want %q", header, origin) + } + }) + + t.Run("preflight", func(t *testing.T) { + req, err := http.NewRequest(http.MethodOptions, url, nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Origin", origin) + req.Header.Set("Access-Control-Request-Method", "GET") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + header := resp.Header.Get("Access-Control-Allow-Origin") + if header != origin { + t.Errorf("got Access-Control-Allow-Origin header %q, want %q", header, origin) + } + }) +} + +// testStatusResponse makes an http request to provided url +// and validates if response is explorer.StatusResponse for +// the expected status code. +func testStatusResponse(t *testing.T, url string, code int) { + t.Helper() + + resp, err := http.Get(url) + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != code { + t.Errorf("got status code %v, want %v", resp.StatusCode, code) + } + var r explorer.StatusResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if r.Code != code { + t.Errorf("got response code %v, want %v", r.Code, code) + } + if r.Message != http.StatusText(code) { + t.Errorf("got response message %q, want %q", r.Message, http.StatusText(code)) + } +} + +// testKeysResponse makes an http request to provided url +// and validates if response machhes expected explorer.KeysResponse. +func testKeysResponse(t *testing.T, url string, want explorer.KeysResponse) { + t.Helper() + + resp, err := http.Get(url) + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("got status code %v, want %v", resp.StatusCode, http.StatusOK) + } + var r explorer.KeysResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if fmt.Sprint(r.Keys) != fmt.Sprint(want.Keys) { + t.Errorf("got keys %v, want %v", r.Keys, want.Keys) + } + if r.Next != want.Next { + t.Errorf("got next %s, want %s", r.Next, want.Next) + } +} + +// testNodeResponse makes an http request to provided url +// and validates if response machhes expected explorer.NodeResponse. +func testNodesResponse(t *testing.T, url string, want explorer.NodesResponse) { + t.Helper() + + resp, err := http.Get(url) + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("got status code %v, want %v", resp.StatusCode, http.StatusOK) + } + var r explorer.NodesResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if fmt.Sprint(r.Nodes) != fmt.Sprint(want.Nodes) { + t.Errorf("got nodes %v, want %v", r.Nodes, want.Nodes) + } + if r.Next != want.Next { + t.Errorf("got next %s, want %s", r.Next, want.Next) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store.go index a55756e1..f93b464d 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store.go @@ -17,6 +17,7 @@ package main import ( + "io" "net" "net/http" "os" @@ -66,7 +67,7 @@ func startWS(ctx *cli.Context) (err error) { return http.Serve(listener, server.WebsocketHandler(origins)) } -// newServer creates a global store and returns its RPC server. +// newServer creates a global store and starts a chunk explorer server if configured. // Returned cleanup function should be called only if err is nil. func newServer(ctx *cli.Context) (server *rpc.Server, cleanup func(), err error) { log.PrintOrigins(true) @@ -81,7 +82,9 @@ func newServer(ctx *cli.Context) (server *rpc.Server, cleanup func(), err error) return nil, nil, err } cleanup = func() { - dbStore.Close() + if err := dbStore.Close(); err != nil { + log.Error("global store: close", "err", err) + } } globalStore = dbStore log.Info("database global store", "dir", dir) @@ -96,5 +99,22 @@ func newServer(ctx *cli.Context) (server *rpc.Server, cleanup func(), err error) return nil, nil, err } + shutdown, err := serveChunkExplorer(ctx, globalStore) + if err != nil { + cleanup() + return nil, nil, err + } + if shutdown != nil { + cleanup = func() { + shutdown() + + if c, ok := globalStore.(io.Closer); ok { + if err := c.Close(); err != nil { + log.Error("global store: close", "err", err) + } + } + } + } + return server, cleanup, nil } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store_test.go index 85f361ed..c437c9d4 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/global_store_test.go @@ -60,7 +60,7 @@ func TestHTTP_Database(t *testing.T) { func testHTTP(t *testing.T, put bool, args ...string) { addr := findFreeTCPAddress(t) testCmd := runGlobalStore(t, append([]string{"http", "--addr", addr}, args...)...) - defer testCmd.Interrupt() + defer testCmd.Kill() client, err := rpc.DialHTTP("http://" + addr) if err != nil { @@ -69,16 +69,7 @@ func testHTTP(t *testing.T, put bool, args ...string) { // wait until global store process is started as // rpc.DialHTTP is actually not connecting - for i := 0; i < 1000; i++ { - _, err = http.DefaultClient.Get("http://" + addr) - if err == nil { - break - } - time.Sleep(10 * time.Millisecond) - } - if err != nil { - t.Fatal(err) - } + waitHTTPEndpoint(t, addr) store := mockRPC.NewGlobalStore(client) defer store.Close() @@ -135,21 +126,9 @@ func TestWebsocket_Database(t *testing.T) { func testWebsocket(t *testing.T, put bool, args ...string) { addr := findFreeTCPAddress(t) testCmd := runGlobalStore(t, append([]string{"ws", "--addr", addr}, args...)...) - defer testCmd.Interrupt() + defer testCmd.Kill() - var client *rpc.Client - var err error - // wait until global store process is started - for i := 0; i < 1000; i++ { - client, err = rpc.DialWebsocket(context.Background(), "ws://"+addr, "") - if err == nil { - break - } - time.Sleep(10 * time.Millisecond) - } - if err != nil { - t.Fatal(err) - } + client := websocketClient(t, addr) store := mockRPC.NewGlobalStore(client) defer store.Close() @@ -160,7 +139,7 @@ func testWebsocket(t *testing.T, put bool, args ...string) { wantValue := "value" if put { - err = node.Put([]byte(wantKey), []byte(wantValue)) + err := node.Put([]byte(wantKey), []byte(wantValue)) if err != nil { t.Fatal(err) } @@ -189,3 +168,40 @@ func findFreeTCPAddress(t *testing.T) (addr string) { return listener.Addr().String() } + +// websocketClient waits until global store process is started +// and returns rpc client. +func websocketClient(t *testing.T, addr string) (client *rpc.Client) { + t.Helper() + + var err error + for i := 0; i < 1000; i++ { + client, err = rpc.DialWebsocket(context.Background(), "ws://"+addr, "") + if err == nil { + break + } + time.Sleep(10 * time.Millisecond) + } + if err != nil { + t.Fatal(err) + } + return client +} + +// waitHTTPEndpoint retries http requests to a provided +// address until the connection is established. +func waitHTTPEndpoint(t *testing.T, addr string) { + t.Helper() + + var err error + for i := 0; i < 1000; i++ { + _, err = http.Get("http://" + addr) + if err == nil { + break + } + time.Sleep(10 * time.Millisecond) + } + if err != nil { + t.Fatal(err) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/main.go index 51df0099..52fafc8f 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/global-store/main.go @@ -19,12 +19,14 @@ package main import ( "os" - "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/log" cli "gopkg.in/urfave/cli.v1" ) -var gitCommit string // Git SHA1 commit hash of the release (set via linker flags) +var ( + version = "0.1" + gitCommit string // Git SHA1 commit hash of the release (set via linker flags) +) func main() { err := newApp().Run(os.Args) @@ -37,16 +39,30 @@ func main() { // newApp construct a new instance of Swarm Global Store. // Method Run is called on it in the main function and in tests. func newApp() (app *cli.App) { - app = utils.NewApp(gitCommit, "Swarm Global Store") - + app = cli.NewApp() app.Name = "global-store" + app.Version = version + if len(gitCommit) >= 8 { + app.Version += "-" + gitCommit[:8] + } + app.Usage = "Swarm Global Store" // app flags (for all commands) app.Flags = []cli.Flag{ cli.IntFlag{ Name: "verbosity", Value: 3, - Usage: "verbosity level", + Usage: "Verbosity level.", + }, + cli.StringFlag{ + Name: "explorer-address", + Value: "", + Usage: "Chunk explorer HTTP listener address.", + }, + cli.StringSliceFlag{ + Name: "explorer-cors-origin", + Value: nil, + Usage: "Chunk explorer CORS origin (can be specified multiple times).", }, } @@ -54,7 +70,7 @@ func newApp() (app *cli.App) { { Name: "http", Aliases: []string{"h"}, - Usage: "start swarm global store with http server", + Usage: "Start swarm global store with HTTP server.", Action: startHTTP, // Flags only for "start" command. // Allow app flags to be specified after the @@ -63,19 +79,19 @@ func newApp() (app *cli.App) { cli.StringFlag{ Name: "dir", Value: "", - Usage: "data directory", + Usage: "Data directory.", }, cli.StringFlag{ Name: "addr", Value: "0.0.0.0:3033", - Usage: "address to listen for http connection", + Usage: "Address to listen for HTTP connections.", }, ), }, { Name: "websocket", Aliases: []string{"ws"}, - Usage: "start swarm global store with websocket server", + Usage: "Start swarm global store with WebSocket server.", Action: startWS, // Flags only for "start" command. // Allow app flags to be specified after the @@ -84,17 +100,17 @@ func newApp() (app *cli.App) { cli.StringFlag{ Name: "dir", Value: "", - Usage: "data directory", + Usage: "Data directory.", }, cli.StringFlag{ Name: "addr", Value: "0.0.0.0:3033", - Usage: "address to listen for websocket connection", + Usage: "Address to listen for WebSocket connections.", }, cli.StringSliceFlag{ - Name: "origins", - Value: &cli.StringSlice{"*"}, - Usage: "websocket origins", + Name: "origin", + Value: nil, + Usage: "WebSocket CORS origin (can be specified multiple times).", }, ), }, diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/hash.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/hash.go index 471feb53..2df02c0e 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/hash.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/hash.go @@ -19,10 +19,13 @@ package main import ( "context" + "encoding/hex" "fmt" "os" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/ens" "github.com/ethereum/go-ethereum/swarm/storage" "gopkg.in/urfave/cli.v1" ) @@ -34,7 +37,33 @@ var hashCommand = cli.Command{ Usage: "print the swarm hash of a file or directory", ArgsUsage: "", Description: "Prints the swarm hash of file or directory", -} + Subcommands: []cli.Command{ + { + CustomHelpTemplate: helpTemplate, + Name: "ens", + Usage: "converts a swarm hash to an ens EIP1577 compatible CIDv1 hash", + ArgsUsage: "", + Description: "", + Subcommands: []cli.Command{ + { + Action: encodeEipHash, + CustomHelpTemplate: helpTemplate, + Name: "contenthash", + Usage: "converts a swarm hash to an ens EIP1577 compatible CIDv1 hash", + ArgsUsage: "", + Description: "", + }, + { + Action: ensNodeHash, + CustomHelpTemplate: helpTemplate, + Name: "node", + Usage: "converts an ens name to an ENS node hash", + ArgsUsage: "", + Description: "", + }, + }, + }, + }} func hash(ctx *cli.Context) { args := ctx.Args() @@ -56,3 +85,31 @@ func hash(ctx *cli.Context) { fmt.Printf("%v\n", addr) } } +func ensNodeHash(ctx *cli.Context) { + args := ctx.Args() + if len(args) < 1 { + utils.Fatalf("Usage: swarm hash ens node ") + } + ensName := args[0] + + hash := ens.EnsNode(ensName) + + stringHex := hex.EncodeToString(hash[:]) + fmt.Println(stringHex) +} +func encodeEipHash(ctx *cli.Context) { + args := ctx.Args() + if len(args) < 1 { + utils.Fatalf("Usage: swarm hash ens ") + } + swarmHash := args[0] + + hash := common.HexToHash(swarmHash) + ensHash, err := ens.EncodeSwarmHash(hash) + if err != nil { + utils.Fatalf("error converting swarm hash", err) + } + + stringHex := hex.EncodeToString(ensHash) + fmt.Println(stringHex) +} diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/main.go index 3053ea1b..a4041eb3 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/main.go @@ -76,8 +76,8 @@ var gitCommit string //declare a few constant error messages, useful for later error check comparisons in test var ( - SWARM_ERR_NO_BZZACCOUNT = "bzzaccount option is required but not set; check your config file, command line or environment variables" - SWARM_ERR_SWAP_SET_NO_API = "SWAP is enabled but --swap-api is not set" + SwarmErrNoBZZAccount = "bzzaccount option is required but not set; check your config file, command line or environment variables" + SwarmErrSwapSetNoAPI = "SWAP is enabled but --swap-api is not set" ) // this help command gets added to any subcommand that does not define it explicitly @@ -287,17 +287,21 @@ func bzzd(ctx *cli.Context) error { //setup the ethereum node utils.SetNodeConfig(ctx, &cfg) - //always disable discovery from p2p package - swarm discovery is done with the `hive` protocol - cfg.P2P.NoDiscovery = true + //disable dynamic dialing from p2p/discovery + cfg.P2P.NoDial = true stack, err := node.New(&cfg) if err != nil { utils.Fatalf("can't create node: %v", err) } + defer stack.Close() //a few steps need to be done after the config phase is completed, //due to overriding behavior - initSwarmNode(bzzconfig, stack, ctx) + err = initSwarmNode(bzzconfig, stack, ctx, &cfg) + if err != nil { + return err + } //register BZZ as node.Service in the ethereum node registerBzzService(bzzconfig, stack) //start the node @@ -350,7 +354,7 @@ func registerBzzService(bzzconfig *bzzapi.Config, stack *node.Node) { func getAccount(bzzaccount string, ctx *cli.Context, stack *node.Node) *ecdsa.PrivateKey { //an account is mandatory if bzzaccount == "" { - utils.Fatalf(SWARM_ERR_NO_BZZACCOUNT) + utils.Fatalf(SwarmErrNoBZZAccount) } // Try to load the arg as a hex key file. if key, err := crypto.LoadECDSA(bzzaccount); err == nil { @@ -381,6 +385,8 @@ func getPrivKey(ctx *cli.Context) *ecdsa.PrivateKey { if err != nil { utils.Fatalf("can't create node: %v", err) } + defer stack.Close() + return getAccount(bzzconfig.BzzAccount, ctx, stack) } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/run_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/run_test.go index 4a6a56d9..9681c899 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/run_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/run_test.go @@ -82,6 +82,18 @@ func TestMain(m *testing.M) { func runSwarm(t *testing.T, args ...string) *cmdtest.TestCmd { tt := cmdtest.NewTestCmd(t, nil) + found := false + for _, v := range args { + if v == "--bootnodes" { + found = true + break + } + } + + if !found { + args = append([]string{"--bootnodes", ""}, args...) + } + // Boot "swarm". This actually runs the test binary but the TestMain // function will prevent any tests from running. tt.Run("swarm-test", args...) @@ -252,6 +264,7 @@ func existingTestNode(t *testing.T, dir string, bzzaccount string) *testNode { // start the node node.Cmd = runSwarm(t, + "--bootnodes", "", "--port", p2pPort, "--nat", "extip:127.0.0.1", "--datadir", dir, @@ -327,6 +340,7 @@ func newTestNode(t *testing.T, dir string) *testNode { // start the node node.Cmd = runSwarm(t, + "--bootnodes", "", "--port", p2pPort, "--nat", "extip:127.0.0.1", "--datadir", dir, diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/main.go index 43d2c1ff..860fbcc1 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/main.go @@ -40,6 +40,7 @@ var ( allhosts string hosts []string filesize int + inputSeed int syncDelay int httpPort int wsPort int @@ -74,6 +75,12 @@ func main() { Usage: "ws port", Destination: &wsPort, }, + cli.IntFlag{ + Name: "seed", + Value: 0, + Usage: "input seed in case we need deterministic upload", + Destination: &inputSeed, + }, cli.IntFlag{ Name: "filesize", Value: 1024, diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/sliding_window.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/sliding_window.go index d313bbc3..d589124b 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/sliding_window.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/sliding_window.go @@ -42,23 +42,16 @@ func slidingWindowCmd(ctx *cli.Context, tuid string) error { errc <- slidingWindow(ctx, tuid) }() - select { - case err := <-errc: - if err != nil { - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.fail", commandName), nil).Inc(1) - } - return err - case <-time.After(time.Duration(timeout) * time.Second): - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1) - - return fmt.Errorf("timeout after %v sec", timeout) + err := <-errc + if err != nil { + metrics.GetOrRegisterCounter(fmt.Sprintf("%s.fail", commandName), nil).Inc(1) } + return err } func slidingWindow(ctx *cli.Context, tuid string) error { - hashes := []uploadResult{} //swarm hashes of the uploads + var hashes []uploadResult //swarm hashes of the uploads nodes := len(hosts) - const iterationTimeout = 30 * time.Second log.Info("sliding window test started", "tuid", tuid, "nodes", nodes, "filesize(kb)", filesize, "timeout", timeout) uploadedBytes := 0 networkDepth := 0 @@ -66,6 +59,7 @@ func slidingWindow(ctx *cli.Context, tuid string) error { outer: for { + seed = int(time.Now().UTC().UnixNano()) log.Info("uploading to "+httpEndpoint(hosts[0])+" and syncing", "seed", seed) t1 := time.Now() @@ -79,6 +73,7 @@ outer: } metrics.GetOrRegisterResettingTimer("sliding-window.upload-time", nil).UpdateSince(t1) + metrics.GetOrRegisterGauge("sliding-window.upload-depth", nil).Update(int64(len(hashes))) fhash, err := digest(bytes.NewReader(randomBytes)) if err != nil { @@ -90,37 +85,56 @@ outer: hashes = append(hashes, uploadResult{hash: hash, digest: fhash}) time.Sleep(time.Duration(syncDelay) * time.Second) uploadedBytes += filesize * 1000 - + q := make(chan struct{}, 1) + d := make(chan struct{}) + defer close(q) + defer close(d) for i, v := range hashes { - timeout := time.After(time.Duration(timeout) * time.Second) + timeoutC := time.After(time.Duration(timeout) * time.Second) errored = false - inner: + task: for { select { - case <-timeout: + case q <- struct{}{}: + go func() { + var start time.Time + done := false + for !done { + log.Info("trying to retrieve hash", "hash", v.hash) + idx := 1 + rand.Intn(len(hosts)-1) + ruid := uuid.New()[:8] + start = time.Now() + // fetch hangs when swarm dies out, so we have to jump through a bit more hoops to actually + // catch the timeout, but also allow this retry logic + err := fetch(v.hash, httpEndpoint(hosts[idx]), v.digest, ruid, "") + if err != nil { + log.Error("error fetching hash", "err", err) + continue + } + done = true + } + metrics.GetOrRegisterResettingTimer("sliding-window.single.fetch-time", nil).UpdateSince(start) + d <- struct{}{} + }() + case <-d: + <-q + break task + case <-timeoutC: errored = true - log.Error("error retrieving hash. timeout", "hash idx", i, "err", err) + log.Error("error retrieving hash. timeout", "hash idx", i) metrics.GetOrRegisterCounter("sliding-window.single.error", nil).Inc(1) - break inner + break outer default: - idx := 1 + rand.Intn(len(hosts)-1) - ruid := uuid.New()[:8] - start := time.Now() - err := fetch(v.hash, httpEndpoint(hosts[idx]), v.digest, ruid, "") - if err != nil { - continue inner - } - metrics.GetOrRegisterResettingTimer("sliding-window.single.fetch-time", nil).UpdateSince(start) - break inner } } - if errored { - break outer - } networkDepth = i metrics.GetOrRegisterGauge("sliding-window.network-depth", nil).Update(int64(networkDepth)) + log.Info("sliding window test successfully fetched file", "currentDepth", networkDepth) + // this test might take a long time to finish - but we'd like to see metrics while they accumulate and not just when + // the test finishes. therefore emit the metrics on each iteration + emitMetrics(ctx) } } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/upload_and_sync.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/upload_and_sync.go index 90230df2..6c20a4fa 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/upload_and_sync.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-smoke/upload_and_sync.go @@ -23,6 +23,7 @@ import ( "io/ioutil" "math/rand" "os" + "strings" "sync" "time" @@ -38,76 +39,88 @@ import ( ) func uploadAndSyncCmd(ctx *cli.Context, tuid string) error { + // use input seed if it has been set + if inputSeed != 0 { + seed = inputSeed + } + randomBytes := testutil.RandomBytes(seed, filesize*1000) errc := make(chan error) go func() { - errc <- uplaodAndSync(ctx, randomBytes, tuid) + errc <- uploadAndSync(ctx, randomBytes, tuid) }() + var err error select { - case err := <-errc: + case err = <-errc: if err != nil { metrics.GetOrRegisterCounter(fmt.Sprintf("%s.fail", commandName), nil).Inc(1) } - return err case <-time.After(time.Duration(timeout) * time.Second): metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1) - e := fmt.Errorf("timeout after %v sec", timeout) - // trigger debug functionality on randomBytes - err := trackChunks(randomBytes[:]) - if err != nil { - e = fmt.Errorf("%v; triggerChunkDebug failed: %v", e, err) - } - - return e + err = fmt.Errorf("timeout after %v sec", timeout) } + + // trigger debug functionality on randomBytes + e := trackChunks(randomBytes[:]) + if e != nil { + log.Error(e.Error()) + } + + return err } func trackChunks(testData []byte) error { - log.Warn("Test timed out; running chunk debug sequence") - addrs, err := getAllRefs(testData) if err != nil { return err } - log.Trace("All references retrieved") - // has-chunks + for i, ref := range addrs { + log.Trace(fmt.Sprintf("ref %d", i), "ref", ref) + } + for _, host := range hosts { httpHost := fmt.Sprintf("ws://%s:%d", host, 8546) - log.Trace("Calling `Has` on host", "httpHost", httpHost) + + hostChunks := []string{} + rpcClient, err := rpc.Dial(httpHost) if err != nil { - log.Trace("Error dialing host", "err", err) - return err + log.Error("error dialing host", "err", err, "host", httpHost) + continue } - log.Trace("rpc dial ok") + var hasInfo []api.HasInfo err = rpcClient.Call(&hasInfo, "bzz_has", addrs) if err != nil { - log.Trace("Error calling host", "err", err) - return err + log.Error("error calling rpc client", "err", err, "host", httpHost) + continue } - log.Trace("rpc call ok") + count := 0 for _, info := range hasInfo { - if !info.Has { + if info.Has { + hostChunks = append(hostChunks, "1") + } else { + hostChunks = append(hostChunks, "0") count++ - log.Error("Host does not have chunk", "host", httpHost, "chunk", info.Addr) } } + if count == 0 { - log.Info("Host reported to have all chunks", "host", httpHost) + log.Info("host reported to have all chunks", "host", host) } + + log.Trace("chunks", "chunks", strings.Join(hostChunks, ""), "host", host) } return nil } func getAllRefs(testData []byte) (storage.AddressCollection, error) { - log.Trace("Getting all references for given root hash") datadir, err := ioutil.TempDir("", "chunk-debug") if err != nil { return nil, fmt.Errorf("unable to create temp dir: %v", err) @@ -124,7 +137,7 @@ func getAllRefs(testData []byte) (storage.AddressCollection, error) { return fileStore.GetAllReferences(ctx, reader, false) } -func uplaodAndSync(c *cli.Context, randomBytes []byte, tuid string) error { +func uploadAndSync(c *cli.Context, randomBytes []byte, tuid string) error { log.Info("uploading to "+httpEndpoint(hosts[0])+" and syncing", "tuid", tuid, "seed", seed) t1 := time.Now() diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create.go index 127fde8a..434561a4 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create.go @@ -59,13 +59,16 @@ func createSnapshot(filename string, nodes int, services []string) (err error) { log.Debug("create snapshot", "filename", filename, "nodes", nodes, "services", services) sim := simulation.New(map[string]simulation.ServiceFunc{ - "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { + "bzz": func(ctx *adapters.ServiceContext, bucket *sync.Map) (node.Service, func(), error) { addr := network.NewAddr(ctx.Config.Node()) kad := network.NewKademlia(addr.Over(), network.NewKadParams()) hp := network.NewHiveParams() hp.KeepAliveInterval = time.Duration(200) * time.Millisecond hp.Discovery = true // discovery must be enabled when creating a snapshot + // store the kademlia in the bucket, needed later in the WaitTillHealthy function + bucket.Store(simulation.BucketKeyKademlia, kad) + config := &network.BzzConfig{ OverlayAddr: addr.Over(), UnderlayAddr: addr.Under(), @@ -76,17 +79,17 @@ func createSnapshot(filename string, nodes int, services []string) (err error) { }) defer sim.Close() - _, err = sim.AddNodes(nodes) + ids, err := sim.AddNodes(nodes) if err != nil { return fmt.Errorf("add nodes: %v", err) } - err = sim.Net.ConnectNodesRing(nil) + err = sim.Net.ConnectNodesRing(ids) if err != nil { return fmt.Errorf("connect nodes: %v", err) } - ctx, cancelSimRun := context.WithTimeout(context.Background(), 2*time.Minute) + ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) defer cancelSimRun() if _, err := sim.WaitTillHealthy(ctx); err != nil { return fmt.Errorf("wait for healthy kademlia: %v", err) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create_test.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create_test.go index c9445168..b2e30c20 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create_test.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/create_test.go @@ -48,7 +48,7 @@ func TestSnapshotCreate(t *testing.T) { }, { name: "more nodes", - nodes: defaultNodes + 5, + nodes: defaultNodes + 4, }, { name: "services", @@ -81,7 +81,7 @@ func TestSnapshotCreate(t *testing.T) { } testCmd := runSnapshot(t, append(args, file.Name())...) - testCmd.ExpectExit() + testCmd.WaitExit() if code := testCmd.ExitStatus(); code != 0 { t.Fatalf("command exit code %v, expected 0", code) } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/main.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/main.go index 184727e4..136295e5 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/main.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/swarm-snapshot/main.go @@ -27,7 +27,7 @@ import ( var gitCommit string // Git SHA1 commit hash of the release (set via linker flags) // default value for "create" command --nodes flag -const defaultNodes = 10 +const defaultNodes = 8 func main() { err := newApp().Run(os.Args) diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/upload.go b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/upload.go index 992f2d6e..ab079083 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/swarm/upload.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/swarm/upload.go @@ -60,10 +60,10 @@ func upload(ctx *cli.Context) { autoDefaultPath = false file string ) - if autoDefaultPathString := os.Getenv(SWARM_AUTO_DEFAULTPATH); autoDefaultPathString != "" { + if autoDefaultPathString := os.Getenv(SwarmAutoDefaultPath); autoDefaultPathString != "" { b, err := strconv.ParseBool(autoDefaultPathString) if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_AUTO_DEFAULTPATH, err) + utils.Fatalf("invalid environment variable %s: %v", SwarmAutoDefaultPath, err) } autoDefaultPath = b } diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/utils/cmd.go b/vendor/github.com/ethereum/go-ethereum/cmd/utils/cmd.go index f23aa577..74a8c7f3 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/utils/cmd.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/utils/cmd.go @@ -238,7 +238,7 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las } // ImportPreimages imports a batch of exported hash preimages into the database. -func ImportPreimages(db *ethdb.LDBDatabase, fn string) error { +func ImportPreimages(db ethdb.Database, fn string) error { log.Info("Importing preimages", "file", fn) // Open the file handle and potentially unwrap the gzip stream @@ -285,7 +285,7 @@ func ImportPreimages(db *ethdb.LDBDatabase, fn string) error { // ExportPreimages exports all known hash preimages into the specified file, // truncating any data already present in the file. -func ExportPreimages(db *ethdb.LDBDatabase, fn string) error { +func ExportPreimages(db ethdb.Database, fn string) error { log.Info("Exporting preimages", "file", fn) // Open the file handle and potentially wrap with a gzip stream diff --git a/vendor/github.com/ethereum/go-ethereum/cmd/utils/flags.go b/vendor/github.com/ethereum/go-ethereum/cmd/utils/flags.go index 55e84b87..bf433242 100644 --- a/vendor/github.com/ethereum/go-ethereum/cmd/utils/flags.go +++ b/vendor/github.com/ethereum/go-ethereum/cmd/utils/flags.go @@ -19,6 +19,7 @@ package utils import ( "crypto/ecdsa" + "encoding/json" "fmt" "io/ioutil" "math/big" @@ -36,7 +37,6 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/dashboard" @@ -165,6 +165,26 @@ var ( Usage: "Document Root for HTTPClient file scheme", Value: DirectoryString{homeDir()}, } + ExitWhenSyncedFlag = cli.BoolFlag{ + Name: "exitwhensynced", + Usage: "Exists syncing after block synchronisation", + } + ULCModeConfigFlag = cli.StringFlag{ + Name: "ulc.config", + Usage: "Config file to use for ultra light client mode", + } + OnlyAnnounceModeFlag = cli.BoolFlag{ + Name: "ulc.onlyannounce", + Usage: "ULC server sends announcements only", + } + ULCMinTrustedFractionFlag = cli.IntFlag{ + Name: "ulc.fraction", + Usage: "Minimum % of trusted ULC servers required to announce a new head", + } + ULCTrustedNodesFlag = cli.StringFlag{ + Name: "ulc.trusted", + Usage: "List of trusted ULC servers", + } defaultSyncMode = eth.DefaultConfig.SyncMode SyncModeFlag = TextMarshalerFlag{ Name: "syncmode", @@ -178,9 +198,19 @@ var ( } LightServFlag = cli.IntFlag{ Name: "lightserv", - Usage: "Maximum percentage of time allowed for serving LES requests (0-90)", + Usage: "Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100)", Value: 0, } + LightBandwidthInFlag = cli.IntFlag{ + Name: "lightbwin", + Usage: "Incoming bandwidth limit for light server (1000 bytes/sec, 0 = unlimited)", + Value: 1000, + } + LightBandwidthOutFlag = cli.IntFlag{ + Name: "lightbwout", + Usage: "Outgoing bandwidth limit for light server (1000 bytes/sec, 0 = unlimited)", + Value: 5000, + } LightPeersFlag = cli.IntFlag{ Name: "lightpeers", Usage: "Maximum number of LES client peers", @@ -196,7 +226,7 @@ var ( } // Dashboard settings DashboardEnabledFlag = cli.BoolFlag{ - Name: metrics.DashboardEnabledFlag, + Name: "dashboard", Usage: "Enable the dashboard", } DashboardAddrFlag = cli.StringFlag{ @@ -311,19 +341,14 @@ var ( } CacheTrieFlag = cli.IntFlag{ Name: "cache.trie", - Usage: "Percentage of cache memory allowance to use for trie caching", + Usage: "Percentage of cache memory allowance to use for trie caching (default = 25% full mode, 50% archive mode)", Value: 25, } CacheGCFlag = cli.IntFlag{ Name: "cache.gc", - Usage: "Percentage of cache memory allowance to use for trie pruning", + Usage: "Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode)", Value: 25, } - TrieCacheGenFlag = cli.IntFlag{ - Name: "trie-cache-gens", - Usage: "Number of trie node generations to keep in memory", - Value: int(state.MaxTrieCacheGen), - } // Miner settings MiningEnabledFlag = cli.BoolFlag{ Name: "mine", @@ -406,7 +431,11 @@ var ( Usage: "Password file to use for non-interactive password input", Value: "", } - + ExternalSignerFlag = cli.StringFlag{ + Name: "signer", + Usage: "External signer (url or path to ipc file)", + Value: "", + } VMEnableDebugFlag = cli.BoolFlag{ Name: "vmdebug", Usage: "Record information useful for VM and contract debugging", @@ -439,6 +468,30 @@ var ( Usage: "HTTP-RPC server listening port", Value: node.DefaultHTTPPort, } + GraphQLEnabledFlag = cli.BoolFlag{ + Name: "graphql", + Usage: "Enable the GraphQL server", + } + GraphQLListenAddrFlag = cli.StringFlag{ + Name: "graphql.addr", + Usage: "GraphQL server listening interface", + Value: node.DefaultGraphQLHost, + } + GraphQLPortFlag = cli.IntFlag{ + Name: "graphql.port", + Usage: "GraphQL server listening port", + Value: node.DefaultGraphQLPort, + } + GraphQLCORSDomainFlag = cli.StringFlag{ + Name: "graphql.rpccorsdomain", + Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", + Value: "", + } + GraphQLVirtualHostsFlag = cli.StringFlag{ + Name: "graphql.rpcvhosts", + Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", + Value: strings.Join(node.DefaultConfig.HTTPVirtualHosts, ","), + } RPCCORSDomainFlag = cli.StringFlag{ Name: "rpccorsdomain", Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", @@ -591,9 +644,13 @@ var ( // Metrics flags MetricsEnabledFlag = cli.BoolFlag{ - Name: metrics.MetricsEnabledFlag, + Name: "metrics", Usage: "Enable metrics collection and reporting", } + MetricsEnabledExpensiveFlag = cli.BoolFlag{ + Name: "metrics.expensive", + Usage: "Enable expensive metrics collection and reporting", + } MetricsEnableInfluxDBFlag = cli.BoolFlag{ Name: "metrics.influxdb", Usage: "Enable metrics export/push to an external InfluxDB database", @@ -716,11 +773,14 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { cfg.BootstrapNodes = make([]*enode.Node, 0, len(urls)) for _, url := range urls { - node, err := enode.ParseV4(url) - if err != nil { - log.Crit("Bootstrap URL invalid", "enode", url, "err", err) + if url != "" { + node, err := enode.ParseV4(url) + if err != nil { + log.Crit("Bootstrap URL invalid", "enode", url, "err", err) + continue + } + cfg.BootstrapNodes = append(cfg.BootstrapNodes, node) } - cfg.BootstrapNodes = append(cfg.BootstrapNodes, node) } } @@ -745,12 +805,14 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { cfg.BootstrapNodesV5 = make([]*discv5.Node, 0, len(urls)) for _, url := range urls { - node, err := discv5.ParseNode(url) - if err != nil { - log.Error("Bootstrap URL invalid", "enode", url, "err", err) - continue + if url != "" { + node, err := discv5.ParseNode(url) + if err != nil { + log.Error("Bootstrap URL invalid", "enode", url, "err", err) + continue + } + cfg.BootstrapNodesV5 = append(cfg.BootstrapNodesV5, node) } - cfg.BootstrapNodesV5 = append(cfg.BootstrapNodesV5, node) } } @@ -807,6 +869,24 @@ func setHTTP(ctx *cli.Context, cfg *node.Config) { } } +// setGraphQL creates the GraphQL listener interface string from the set +// command line flags, returning empty if the GraphQL endpoint is disabled. +func setGraphQL(ctx *cli.Context, cfg *node.Config) { + if ctx.GlobalBool(GraphQLEnabledFlag.Name) && cfg.GraphQLHost == "" { + cfg.GraphQLHost = "127.0.0.1" + if ctx.GlobalIsSet(GraphQLListenAddrFlag.Name) { + cfg.GraphQLHost = ctx.GlobalString(GraphQLListenAddrFlag.Name) + } + } + cfg.GraphQLPort = ctx.GlobalInt(GraphQLPortFlag.Name) + if ctx.GlobalIsSet(GraphQLCORSDomainFlag.Name) { + cfg.GraphQLCors = splitAndTrim(ctx.GlobalString(GraphQLCORSDomainFlag.Name)) + } + if ctx.GlobalIsSet(GraphQLVirtualHostsFlag.Name) { + cfg.GraphQLVirtualHosts = splitAndTrim(ctx.GlobalString(GraphQLVirtualHostsFlag.Name)) + } +} + // setWS creates the WebSocket RPC listener interface string from the set // command line flags, returning empty if the HTTP endpoint is disabled. func setWS(ctx *cli.Context, cfg *node.Config) { @@ -840,6 +920,40 @@ func setIPC(ctx *cli.Context, cfg *node.Config) { } } +// SetULC setup ULC config from file if given. +func SetULC(ctx *cli.Context, cfg *eth.Config) { + // ULC config isn't loaded from global config and ULC config and ULC trusted nodes are not defined. + if cfg.ULC == nil && !(ctx.GlobalIsSet(ULCModeConfigFlag.Name) || ctx.GlobalIsSet(ULCTrustedNodesFlag.Name)) { + return + } + cfg.ULC = ð.ULCConfig{} + + path := ctx.GlobalString(ULCModeConfigFlag.Name) + if path != "" { + cfgData, err := ioutil.ReadFile(path) + if err != nil { + Fatalf("Failed to unmarshal ULC configuration: %v", err) + } + + err = json.Unmarshal(cfgData, &cfg.ULC) + if err != nil { + Fatalf("Failed to unmarshal ULC configuration: %s", err.Error()) + } + } + + if trustedNodes := ctx.GlobalString(ULCTrustedNodesFlag.Name); trustedNodes != "" { + cfg.ULC.TrustedServers = strings.Split(trustedNodes, ",") + } + + if trustedFraction := ctx.GlobalInt(ULCMinTrustedFractionFlag.Name); trustedFraction > 0 { + cfg.ULC.MinTrustedFraction = trustedFraction + } + if cfg.ULC.MinTrustedFraction <= 0 && cfg.ULC.MinTrustedFraction > 100 { + log.Error("MinTrustedFraction is invalid", "MinTrustedFraction", cfg.ULC.MinTrustedFraction, "Changed to default", eth.DefaultULCMinTrustedFraction) + cfg.ULC.MinTrustedFraction = eth.DefaultULCMinTrustedFraction + } +} + // makeDatabaseHandles raises out the number of allowed file handles per process // for Geth and returns half of the allowance to assign to the database. func makeDatabaseHandles() int { @@ -892,11 +1006,15 @@ func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) { } // Convert the etherbase into an address and configure it if etherbase != "" { - account, err := MakeAddress(ks, etherbase) - if err != nil { - Fatalf("Invalid miner etherbase: %v", err) + if ks != nil { + account, err := MakeAddress(ks, etherbase) + if err != nil { + Fatalf("Invalid miner etherbase: %v", err) + } + cfg.Etherbase = account.Address + } else { + Fatalf("No etherbase configured") } - cfg.Etherbase = account.Address } } @@ -990,10 +1108,15 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { SetP2PConfig(ctx, &cfg.P2P) setIPC(ctx, cfg) setHTTP(ctx, cfg) + setGraphQL(ctx, cfg) setWS(ctx, cfg) setNodeUserIdent(ctx, cfg) setDataDir(ctx, cfg) + if ctx.GlobalIsSet(ExternalSignerFlag.Name) { + cfg.ExternalSigner = ctx.GlobalString(ExternalSignerFlag.Name) + } + if ctx.GlobalIsSet(KeyStoreDirFlag.Name) { cfg.KeyStoreDir = ctx.GlobalString(KeyStoreDirFlag.Name) } @@ -1175,8 +1298,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { // Avoid conflicting network flags checkExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag, GoerliFlag) checkExclusive(ctx, LightServFlag, SyncModeFlag, "light") - - ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) + // Can't use both ephemeral unlocked and external signer + checkExclusive(ctx, DeveloperFlag, ExternalSignerFlag) + var ks *keystore.KeyStore + if keystores := stack.AccountManager().Backends(keystore.KeyStoreType); len(keystores) > 0 { + ks = keystores[0].(*keystore.KeyStore) + } setEtherbase(ctx, ks, cfg) setGPO(ctx, &cfg.GPO) setTxPool(ctx, &cfg.TxPool) @@ -1189,9 +1316,14 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { if ctx.GlobalIsSet(LightServFlag.Name) { cfg.LightServ = ctx.GlobalInt(LightServFlag.Name) } + cfg.LightBandwidthIn = ctx.GlobalInt(LightBandwidthInFlag.Name) + cfg.LightBandwidthOut = ctx.GlobalInt(LightBandwidthOutFlag.Name) if ctx.GlobalIsSet(LightPeersFlag.Name) { cfg.LightPeers = ctx.GlobalInt(LightPeersFlag.Name) } + if ctx.GlobalIsSet(OnlyAnnounceModeFlag.Name) { + cfg.OnlyAnnounce = ctx.GlobalBool(OnlyAnnounceModeFlag.Name) + } if ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name) } @@ -1301,10 +1433,6 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { cfg.MinerGasPrice = big.NewInt(1) } } - // TODO(fjl): move trie cache generations into config - if gen := ctx.GlobalInt(TrieCacheGenFlag.Name); gen > 0 { - state.MaxTrieCacheGen = uint16(gen) - } } // SetDashboardConfig applies dashboard related command line flags to the config. @@ -1417,7 +1545,7 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { if ctx.GlobalString(SyncModeFlag.Name) == "light" { name = "lightchaindata" } - chainDb, err := stack.OpenDatabase(name, cache, handles) + chainDb, err := stack.OpenDatabase(name, cache, handles, "") if err != nil { Fatalf("Could not open database: %v", err) } @@ -1494,7 +1622,7 @@ func MakeConsolePreloads(ctx *cli.Context) []string { return nil } // Otherwise resolve absolute paths and return them - preloads := []string{} + var preloads []string assets := ctx.GlobalString(JSpathFlag.Name) for _, file := range strings.Split(ctx.GlobalString(PreloadJSFlag.Name), ",") { diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/helpers.go b/vendor/github.com/ethereum/go-ethereum/common/compiler/helpers.go new file mode 100644 index 00000000..4de706f6 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/helpers.go @@ -0,0 +1,64 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). +package compiler + +import ( + "bytes" + "io/ioutil" + "regexp" +) + +var versionRegexp = regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) + +// Contract contains information about a compiled contract, alongside its code and runtime code. +type Contract struct { + Code string `json:"code"` + RuntimeCode string `json:"runtime-code"` + Info ContractInfo `json:"info"` +} + +// ContractInfo contains information about a compiled contract, including access +// to the ABI definition, source mapping, user and developer docs, and metadata. +// +// Depending on the source, language version, compiler version, and compiler +// options will provide information about how the contract was compiled. +type ContractInfo struct { + Source string `json:"source"` + Language string `json:"language"` + LanguageVersion string `json:"languageVersion"` + CompilerVersion string `json:"compilerVersion"` + CompilerOptions string `json:"compilerOptions"` + SrcMap interface{} `json:"srcMap"` + SrcMapRuntime string `json:"srcMapRuntime"` + AbiDefinition interface{} `json:"abiDefinition"` + UserDoc interface{} `json:"userDoc"` + DeveloperDoc interface{} `json:"developerDoc"` + Metadata string `json:"metadata"` +} + +func slurpFiles(files []string) (string, error) { + var concat bytes.Buffer + for _, file := range files { + content, err := ioutil.ReadFile(file) + if err != nil { + return "", err + } + concat.Write(content) + } + return concat.String(), nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity.go b/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity.go index b7c8ec56..7ed9c263 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity.go +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package compiler wraps the Solidity compiler executable (solc). +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). package compiler import ( @@ -22,41 +22,11 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os/exec" - "regexp" "strconv" "strings" ) -var versionRegexp = regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) - -// Contract contains information about a compiled contract, alongside its code and runtime code. -type Contract struct { - Code string `json:"code"` - RuntimeCode string `json:"runtime-code"` - Info ContractInfo `json:"info"` -} - -// ContractInfo contains information about a compiled contract, including access -// to the ABI definition, source mapping, user and developer docs, and metadata. -// -// Depending on the source, language version, compiler version, and compiler -// options will provide information about how the contract was compiled. -type ContractInfo struct { - Source string `json:"source"` - Language string `json:"language"` - LanguageVersion string `json:"languageVersion"` - CompilerVersion string `json:"compilerVersion"` - CompilerOptions string `json:"compilerOptions"` - SrcMap string `json:"srcMap"` - SrcMapRuntime string `json:"srcMapRuntime"` - AbiDefinition interface{} `json:"abiDefinition"` - UserDoc interface{} `json:"userDoc"` - DeveloperDoc interface{} `json:"developerDoc"` - Metadata string `json:"metadata"` -} - // Solidity contains information about the solidity compiler. type Solidity struct { Path, Version, FullVersion string @@ -208,15 +178,3 @@ func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion strin } return contracts, nil } - -func slurpFiles(files []string) (string, error) { - var concat bytes.Buffer - for _, file := range files { - content, err := ioutil.ReadFile(file) - if err != nil { - return "", err - } - concat.Write(content) - } - return concat.String(), nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity_test.go b/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity_test.go index 0da3bb33..6be2bda5 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity_test.go +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/solidity_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -23,9 +23,10 @@ import ( const ( testSource = ` +pragma solidity >0.0.0; contract test { /// @notice Will multiply ` + "`a`" + ` by 7. - function multiply(uint a) returns(uint d) { + function multiply(uint a) public returns(uint d) { return a * 7; } } @@ -38,7 +39,7 @@ func skipWithoutSolc(t *testing.T) { } } -func TestCompiler(t *testing.T) { +func TestSolidityCompiler(t *testing.T) { skipWithoutSolc(t) contracts, err := CompileSolidityString("", testSource) @@ -66,7 +67,7 @@ func TestCompiler(t *testing.T) { } } -func TestCompileError(t *testing.T) { +func TestSolidityCompileError(t *testing.T) { skipWithoutSolc(t) contracts, err := CompileSolidityString("", testSource[4:]) diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/test.v.py b/vendor/github.com/ethereum/go-ethereum/common/compiler/test.v.py new file mode 100644 index 00000000..35af56c8 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/test.v.py @@ -0,0 +1,3 @@ +@public +def test(): + hello: int128 diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/test_bad.v.py b/vendor/github.com/ethereum/go-ethereum/common/compiler/test_bad.v.py new file mode 100644 index 00000000..443ef782 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/test_bad.v.py @@ -0,0 +1,3 @@ +lic +def test(): + hello: int128 diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper.go b/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper.go new file mode 100644 index 00000000..a9bca95e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper.go @@ -0,0 +1,144 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). +package compiler + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "os/exec" + "strconv" + "strings" +) + +// Vyper contains information about the vyper compiler. +type Vyper struct { + Path, Version, FullVersion string + Major, Minor, Patch int +} + +func (s *Vyper) makeArgs() []string { + p := []string{ + "-f", "combined_json", + } + return p +} + +// VyperVersion runs vyper and parses its version output. +func VyperVersion(vyper string) (*Vyper, error) { + if vyper == "" { + vyper = "vyper" + } + var out bytes.Buffer + cmd := exec.Command(vyper, "--version") + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + return nil, err + } + matches := versionRegexp.FindStringSubmatch(out.String()) + if len(matches) != 4 { + return nil, fmt.Errorf("can't parse vyper version %q", out.String()) + } + s := &Vyper{Path: cmd.Path, FullVersion: out.String(), Version: matches[0]} + if s.Major, err = strconv.Atoi(matches[1]); err != nil { + return nil, err + } + if s.Minor, err = strconv.Atoi(matches[2]); err != nil { + return nil, err + } + if s.Patch, err = strconv.Atoi(matches[3]); err != nil { + return nil, err + } + return s, nil +} + +// CompileVyper compiles all given Vyper source files. +func CompileVyper(vyper string, sourcefiles ...string) (map[string]*Contract, error) { + if len(sourcefiles) == 0 { + return nil, errors.New("vyper: no source files") + } + source, err := slurpFiles(sourcefiles) + if err != nil { + return nil, err + } + s, err := VyperVersion(vyper) + if err != nil { + return nil, err + } + args := s.makeArgs() + cmd := exec.Command(s.Path, append(args, sourcefiles...)...) + return s.run(cmd, source) +} + +func (s *Vyper) run(cmd *exec.Cmd, source string) (map[string]*Contract, error) { + var stderr, stdout bytes.Buffer + cmd.Stderr = &stderr + cmd.Stdout = &stdout + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("vyper: %v\n%s", err, stderr.Bytes()) + } + + return ParseVyperJSON(stdout.Bytes(), source, s.Version, s.Version, strings.Join(s.makeArgs(), " ")) +} + +// ParseVyperJSON takes the direct output of a vyper --f combined_json run and +// parses it into a map of string contract name to Contract structs. The +// provided source, language and compiler version, and compiler options are all +// passed through into the Contract structs. +// +// The vyper output is expected to contain ABI and source mapping. +// +// Returns an error if the JSON is malformed or missing data, or if the JSON +// embedded within the JSON is malformed. +func ParseVyperJSON(combinedJSON []byte, source string, languageVersion string, compilerVersion string, compilerOptions string) (map[string]*Contract, error) { + var output map[string]interface{} + if err := json.Unmarshal(combinedJSON, &output); err != nil { + return nil, err + } + + // Compilation succeeded, assemble and return the contracts. + contracts := make(map[string]*Contract) + for name, info := range output { + // Parse the individual compilation results. + if name == "version" { + continue + } + c := info.(map[string]interface{}) + + contracts[name] = &Contract{ + Code: c["bytecode"].(string), + RuntimeCode: c["bytecode_runtime"].(string), + Info: ContractInfo{ + Source: source, + Language: "Vyper", + LanguageVersion: languageVersion, + CompilerVersion: compilerVersion, + CompilerOptions: compilerOptions, + SrcMap: c["source_map"], + SrcMapRuntime: "", + AbiDefinition: c["abi"], + UserDoc: "", + DeveloperDoc: "", + Metadata: "", + }, + } + } + return contracts, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper_test.go b/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper_test.go new file mode 100644 index 00000000..7761c92a --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/compiler/vyper_test.go @@ -0,0 +1,71 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package compiler + +import ( + "os/exec" + "testing" +) + +func skipWithoutVyper(t *testing.T) { + if _, err := exec.LookPath("vyper"); err != nil { + t.Skip(err) + } +} + +func TestVyperCompiler(t *testing.T) { + skipWithoutVyper(t) + + testSource := []string{"test.v.py"} + source, err := slurpFiles(testSource) + if err != nil { + t.Error("couldn't read test files") + } + contracts, err := CompileVyper("", testSource...) + if err != nil { + t.Fatalf("error compiling test.v.py. result %v: %v", contracts, err) + } + if len(contracts) != 1 { + t.Errorf("one contract expected, got %d", len(contracts)) + } + c, ok := contracts["test.v.py"] + if !ok { + c, ok = contracts[":test"] + if !ok { + t.Fatal("info for contract 'test.v.py' not present in result") + } + } + if c.Code == "" { + t.Error("empty code") + } + if c.Info.Source != source { + t.Error("wrong source") + } + if c.Info.CompilerVersion == "" { + t.Error("empty version") + } +} + +func TestVyperCompileError(t *testing.T) { + skipWithoutVyper(t) + + contracts, err := CompileVyper("", "test_bad.v.py") + if err == nil { + t.Errorf("error expected compiling test_bad.v.py. got none. result %v", contracts) + } + t.Logf("error: %v", err) +} diff --git a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_darwin.go b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_darwin.go new file mode 100644 index 00000000..88dd0f56 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_darwin.go @@ -0,0 +1,71 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fdlimit + +import "syscall" + +// hardlimit is the number of file descriptors allowed at max by the kernel. +const hardlimit = 10240 + +// Raise tries to maximize the file descriptor allowance of this process +// to the maximum hard-limit allowed by the OS. +// Returns the size it was set to (may differ from the desired 'max') +func Raise(max uint64) (uint64, error) { + // Get the current limit + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Try to update the limit to the max allowance + limit.Cur = limit.Max + if limit.Cur > max { + limit.Cur = max + } + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // MacOS can silently apply further caps, so retrieve the actually set limit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return limit.Cur, nil +} + +// Current retrieves the number of file descriptors allowed to be opened by this +// process. +func Current() (int, error) { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return int(limit.Cur), nil +} + +// Maximum retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func Maximum() (int, error) { + // Retrieve the maximum allowed by dynamic OS limits + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Cap it to OPEN_MAX (10240) because macos is a special snowflake + if limit.Max > hardlimit { + limit.Max = hardlimit + } + return int(limit.Max), nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_freebsd.go b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_freebsd.go index 5da43423..0d872713 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_freebsd.go +++ b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_freebsd.go @@ -43,7 +43,7 @@ func Raise(max uint64) (uint64, error) { if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { return 0, err } - return limit.Cur, nil + return uint64(limit.Cur), nil } // Current retrieves the number of file descriptors allowed to be opened by this diff --git a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_unix.go b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_unix.go index 67011275..e5a575f7 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_unix.go +++ b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_unix.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build linux darwin netbsd openbsd solaris +// +build linux netbsd openbsd solaris package fdlimit diff --git a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_windows.go b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_windows.go index 63a44e0d..f4721536 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_windows.go +++ b/vendor/github.com/ethereum/go-ethereum/common/fdlimit/fdlimit_windows.go @@ -18,6 +18,7 @@ package fdlimit import "fmt" +// hardlimit is the number of file descriptors allowed at max by the kernel. const hardlimit = 16384 // Raise tries to maximize the file descriptor allowance of this process diff --git a/vendor/github.com/ethereum/go-ethereum/common/hexutil/json.go b/vendor/github.com/ethereum/go-ethereum/common/hexutil/json.go index fbc21241..777b08ec 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/hexutil/json.go +++ b/vendor/github.com/ethereum/go-ethereum/common/hexutil/json.go @@ -72,6 +72,25 @@ func (b Bytes) String() string { return Encode(b) } +// ImplementsGraphQLType returns true if Bytes implements the specified GraphQL type. +func (b Bytes) ImplementsGraphQLType(name string) bool { return name == "Bytes" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Bytes) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + data, err := Decode(input) + if err != nil { + return err + } + *b = data + default: + err = fmt.Errorf("Unexpected type for Bytes: %v", input) + } + return err +} + // UnmarshalFixedJSON decodes the input as a string with 0x prefix. The length of out // determines the required input length. This function is commonly used to implement the // UnmarshalJSON method for fixed-size types. @@ -187,6 +206,25 @@ func (b *Big) String() string { return EncodeBig(b.ToInt()) } +// ImplementsGraphQLType returns true if Big implements the provided GraphQL type. +func (b Big) ImplementsGraphQLType(name string) bool { return name == "BigInt" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Big) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + return b.UnmarshalText([]byte(input)) + case int32: + var num big.Int + num.SetInt64(int64(input)) + *b = Big(num) + default: + err = fmt.Errorf("Unexpected type for BigInt: %v", input) + } + return err +} + // Uint64 marshals/unmarshals as a JSON string with 0x prefix. // The zero value marshals as "0x0". type Uint64 uint64 @@ -234,6 +272,23 @@ func (b Uint64) String() string { return EncodeUint64(uint64(b)) } +// ImplementsGraphQLType returns true if Uint64 implements the provided GraphQL type. +func (b Uint64) ImplementsGraphQLType(name string) bool { return name == "Long" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Uint64) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + return b.UnmarshalText([]byte(input)) + case int32: + *b = Uint64(input) + default: + err = fmt.Errorf("Unexpected type for Long: %v", input) + } + return err +} + // Uint marshals/unmarshals as a JSON string with 0x prefix. // The zero value marshals as "0x0". type Uint uint diff --git a/vendor/github.com/ethereum/go-ethereum/common/size.go b/vendor/github.com/ethereum/go-ethereum/common/size.go index bd0fc85c..6381499a 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/size.go +++ b/vendor/github.com/ethereum/go-ethereum/common/size.go @@ -26,10 +26,10 @@ type StorageSize float64 // String implements the stringer interface. func (s StorageSize) String() string { - if s > 1000000 { - return fmt.Sprintf("%.2f mB", s/1000000) - } else if s > 1000 { - return fmt.Sprintf("%.2f kB", s/1000) + if s > 1048576 { + return fmt.Sprintf("%.2f MiB", s/1048576) + } else if s > 1024 { + return fmt.Sprintf("%.2f KiB", s/1024) } else { return fmt.Sprintf("%.2f B", s) } @@ -38,10 +38,10 @@ func (s StorageSize) String() string { // TerminalString implements log.TerminalStringer, formatting a string for console // output during logging. func (s StorageSize) TerminalString() string { - if s > 1000000 { - return fmt.Sprintf("%.2fmB", s/1000000) - } else if s > 1000 { - return fmt.Sprintf("%.2fkB", s/1000) + if s > 1048576 { + return fmt.Sprintf("%.2fMiB", s/1048576) + } else if s > 1024 { + return fmt.Sprintf("%.2fKiB", s/1024) } else { return fmt.Sprintf("%.2fB", s) } diff --git a/vendor/github.com/ethereum/go-ethereum/common/size_test.go b/vendor/github.com/ethereum/go-ethereum/common/size_test.go index f5b6c725..0938d483 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/size_test.go +++ b/vendor/github.com/ethereum/go-ethereum/common/size_test.go @@ -25,8 +25,8 @@ func TestStorageSizeString(t *testing.T) { size StorageSize str string }{ - {2381273, "2.38 mB"}, - {2192, "2.19 kB"}, + {2381273, "2.27 MiB"}, + {2192, "2.14 KiB"}, {12, "12.00 B"}, } diff --git a/vendor/github.com/ethereum/go-ethereum/common/types.go b/vendor/github.com/ethereum/go-ethereum/common/types.go index 0f4892d2..98c83edd 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/types.go +++ b/vendor/github.com/ethereum/go-ethereum/common/types.go @@ -141,6 +141,21 @@ func (h Hash) Value() (driver.Value, error) { return h[:], nil } +// ImplementsGraphQLType returns true if Hash implements the specified GraphQL type. +func (_ Hash) ImplementsGraphQLType(name string) bool { return name == "Bytes32" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (h *Hash) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + *h = HexToHash(input) + default: + err = fmt.Errorf("Unexpected type for Bytes32: %v", input) + } + return err +} + // UnprefixedHash allows marshaling a Hash without 0x prefix. type UnprefixedHash Hash @@ -187,9 +202,6 @@ func IsHexAddress(s string) bool { // Bytes gets the string representation of the underlying address. func (a Address) Bytes() []byte { return a[:] } -// Big converts an address to a big integer. -func (a Address) Big() *big.Int { return new(big.Int).SetBytes(a[:]) } - // Hash converts an address to a hash by left-padding it with zeros. func (a Address) Hash() Hash { return BytesToHash(a[:]) } @@ -268,6 +280,21 @@ func (a Address) Value() (driver.Value, error) { return a[:], nil } +// ImplementsGraphQLType returns true if Hash implements the specified GraphQL type. +func (a Address) ImplementsGraphQLType(name string) bool { return name == "Address" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (a *Address) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + *a = HexToAddress(input) + default: + err = fmt.Errorf("Unexpected type for Address: %v", input) + } + return err +} + // UnprefixedAddress allows marshaling an Address without 0x prefix. type UnprefixedAddress Address diff --git a/vendor/github.com/ethereum/go-ethereum/common/types_test.go b/vendor/github.com/ethereum/go-ethereum/common/types_test.go index 7095ccd0..fffd673c 100644 --- a/vendor/github.com/ethereum/go-ethereum/common/types_test.go +++ b/vendor/github.com/ethereum/go-ethereum/common/types_test.go @@ -114,8 +114,8 @@ func TestAddressUnmarshalJSON(t *testing.T) { if test.ShouldErr { t.Errorf("test #%d: expected error, got none", i) } - if v.Big().Cmp(test.Output) != 0 { - t.Errorf("test #%d: address mismatch: have %v, want %v", i, v.Big(), test.Output) + if got := new(big.Int).SetBytes(v.Bytes()); got.Cmp(test.Output) != 0 { + t.Errorf("test #%d: address mismatch: have %v, want %v", i, got, test.Output) } } } diff --git a/vendor/github.com/ethereum/go-ethereum/consensus/clique/clique.go b/vendor/github.com/ethereum/go-ethereum/consensus/clique/clique.go index c79c30ca..967a843d 100644 --- a/vendor/github.com/ethereum/go-ethereum/consensus/clique/clique.go +++ b/vendor/github.com/ethereum/go-ethereum/consensus/clique/clique.go @@ -20,6 +20,7 @@ package clique import ( "bytes" "errors" + "io" "math/big" "math/rand" "sync" @@ -136,40 +137,9 @@ var ( errRecentlySigned = errors.New("recently signed") ) -// SignerFn is a signer callback function to request a hash to be signed by a +// SignerFn is a signer callback function to request a header to be signed by a // backing account. -type SignerFn func(accounts.Account, []byte) ([]byte, error) - -// sigHash returns the hash which is used as input for the proof-of-authority -// signing. It is the hash of the entire header apart from the 65 byte signature -// contained at the end of the extra data. -// -// Note, the method requires the extra data to be at least 65 bytes, otherwise it -// panics. This is done to avoid accidentally using both forms (signature present -// or not), which could be abused to produce different hashes for the same header. -func sigHash(header *types.Header) (hash common.Hash) { - hasher := sha3.NewLegacyKeccak256() - - rlp.Encode(hasher, []interface{}{ - header.ParentHash, - header.UncleHash, - header.Coinbase, - header.Root, - header.TxHash, - header.ReceiptHash, - header.Bloom, - header.Difficulty, - header.Number, - header.GasLimit, - header.GasUsed, - header.Time, - header.Extra[:len(header.Extra)-65], // Yes, this will panic if extra is too short - header.MixDigest, - header.Nonce, - }) - hasher.Sum(hash[:0]) - return hash -} +type SignerFn func(accounts.Account, string, []byte) ([]byte, error) // ecrecover extracts the Ethereum account address from a signed header. func ecrecover(header *types.Header, sigcache *lru.ARCCache) (common.Address, error) { @@ -185,7 +155,7 @@ func ecrecover(header *types.Header, sigcache *lru.ARCCache) (common.Address, er signature := header.Extra[len(header.Extra)-extraSeal:] // Recover the public key and the Ethereum address - pubkey, err := crypto.Ecrecover(sigHash(header).Bytes(), signature) + pubkey, err := crypto.Ecrecover(SealHash(header).Bytes(), signature) if err != nil { return common.Address{}, err } @@ -646,7 +616,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c log.Trace("Out-of-turn signing requested", "wiggle", common.PrettyDuration(wiggle)) } // Sign all the things! - sighash, err := signFn(accounts.Account{Address: signer}, sigHash(header).Bytes()) + sighash, err := signFn(accounts.Account{Address: signer}, accounts.MimetypeClique, CliqueRLP(header)) if err != nil { return err } @@ -663,7 +633,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c select { case results <- block.WithSeal(header): default: - log.Warn("Sealing result is not read by miner", "sealhash", c.SealHash(header)) + log.Warn("Sealing result is not read by miner", "sealhash", SealHash(header)) } }() @@ -693,7 +663,7 @@ func CalcDifficulty(snap *Snapshot, signer common.Address) *big.Int { // SealHash returns the hash of a block prior to it being sealed. func (c *Clique) SealHash(header *types.Header) common.Hash { - return sigHash(header) + return SealHash(header) } // Close implements consensus.Engine. It's a noop for clique as there are no background threads. @@ -711,3 +681,47 @@ func (c *Clique) APIs(chain consensus.ChainReader) []rpc.API { Public: false, }} } + +// SealHash returns the hash of a block prior to it being sealed. +func SealHash(header *types.Header) (hash common.Hash) { + hasher := sha3.NewLegacyKeccak256() + encodeSigHeader(hasher, header) + hasher.Sum(hash[:0]) + return hash +} + +// CliqueRLP returns the rlp bytes which needs to be signed for the proof-of-authority +// sealing. The RLP to sign consists of the entire header apart from the 65 byte signature +// contained at the end of the extra data. +// +// Note, the method requires the extra data to be at least 65 bytes, otherwise it +// panics. This is done to avoid accidentally using both forms (signature present +// or not), which could be abused to produce different hashes for the same header. +func CliqueRLP(header *types.Header) []byte { + b := new(bytes.Buffer) + encodeSigHeader(b, header) + return b.Bytes() +} + +func encodeSigHeader(w io.Writer, header *types.Header) { + err := rlp.Encode(w, []interface{}{ + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:len(header.Extra)-65], // Yes, this will panic if extra is too short + header.MixDigest, + header.Nonce, + }) + if err != nil { + panic("can't encode: " + err.Error()) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/consensus/clique/snapshot_test.go b/vendor/github.com/ethereum/go-ethereum/consensus/clique/snapshot_test.go index 41dae142..fc08722e 100644 --- a/vendor/github.com/ethereum/go-ethereum/consensus/clique/snapshot_test.go +++ b/vendor/github.com/ethereum/go-ethereum/consensus/clique/snapshot_test.go @@ -24,10 +24,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -80,7 +80,7 @@ func (ap *testerAccountPool) sign(header *types.Header, signer string) { ap.accounts[signer], _ = crypto.GenerateKey() } // Sign the header and embed the signature in extra data - sig, _ := crypto.Sign(sigHash(header).Bytes(), ap.accounts[signer]) + sig, _ := crypto.Sign(SealHash(header).Bytes(), ap.accounts[signer]) copy(header.Extra[len(header.Extra)-extraSeal:], sig) } @@ -246,10 +246,10 @@ func TestClique(t *testing.T) { // Votes from deauthorized signers are discarded immediately (auth votes) signers: []string{"A", "B", "C"}, votes: []testerVote{ - {signer: "C", voted: "B", auth: false}, + {signer: "C", voted: "D", auth: true}, {signer: "A", voted: "C", auth: false}, {signer: "B", voted: "C", auth: false}, - {signer: "A", voted: "B", auth: false}, + {signer: "A", voted: "D", auth: true}, }, results: []string{"A", "B"}, }, { @@ -400,7 +400,7 @@ func TestClique(t *testing.T) { copy(genesis.ExtraData[extraVanity+j*common.AddressLength:], signer[:]) } // Create a pristine blockchain with the genesis injected - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis.Commit(db) // Assemble a chain of headers from the cast votes diff --git a/vendor/github.com/ethereum/go-ethereum/console/bridge.go b/vendor/github.com/ethereum/go-ethereum/console/bridge.go index b0b4d379..33277cf6 100644 --- a/vendor/github.com/ethereum/go-ethereum/console/bridge.go +++ b/vendor/github.com/ethereum/go-ethereum/console/bridge.go @@ -105,9 +105,37 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { return val } // Wallet open failed, report error unless it's a PIN entry - if !strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPINNeeded.Error()) { + if strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPINNeeded.Error()) { + val, err = b.readPinAndReopenWallet(call) + if err == nil { + return val + } + } + // Check if the user needs to input a passphrase + if !strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPassphraseNeeded.Error()) { throwJSException(err.Error()) } + val, err = b.readPassphraseAndReopenWallet(call) + if err != nil { + throwJSException(err.Error()) + } + return val +} + +func (b *bridge) readPassphraseAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { + var passwd otto.Value + wallet := call.Argument(0) + if input, err := b.prompter.PromptPassword("Please enter your passphrase: "); err != nil { + throwJSException(err.Error()) + } else { + passwd, _ = otto.ToValue(input) + } + return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) +} + +func (b *bridge) readPinAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { + var passwd otto.Value + wallet := call.Argument(0) // Trezor PIN matrix input requested, display the matrix to the user and fetch the data fmt.Fprintf(b.printer, "Look at the device for number positions\n\n") fmt.Fprintf(b.printer, "7 | 8 | 9\n") @@ -121,10 +149,7 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { } else { passwd, _ = otto.ToValue(input) } - if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { - throwJSException(err.Error()) - } - return val + return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) } // UnlockAccount is a wrapper around the personal.unlockAccount RPC method that diff --git a/vendor/github.com/ethereum/go-ethereum/console/console.go b/vendor/github.com/ethereum/go-ethereum/console/console.go index 3c397f80..50196d7f 100644 --- a/vendor/github.com/ethereum/go-ethereum/console/console.go +++ b/vendor/github.com/ethereum/go-ethereum/console/console.go @@ -120,10 +120,10 @@ func (c *Console) init(preload []string) error { consoleObj.Object().Set("error", c.consoleOutput) // Load all the internal utility JavaScript libraries - if err := c.jsre.Compile("bignumber.js", jsre.BigNumber_JS); err != nil { + if err := c.jsre.Compile("bignumber.js", jsre.BignumberJs); err != nil { return fmt.Errorf("bignumber.js: %v", err) } - if err := c.jsre.Compile("web3.js", jsre.Web3_JS); err != nil { + if err := c.jsre.Compile("web3.js", jsre.Web3Js); err != nil { return fmt.Errorf("web3.js: %v", err) } if _, err := c.jsre.Run("var Web3 = require('web3');"); err != nil { @@ -236,7 +236,7 @@ func (c *Console) clearHistory() { // consoleOutput is an override for the console.log and console.error methods to // stream the output into the configured output stream instead of stdout. func (c *Console) consoleOutput(call otto.FunctionCall) otto.Value { - output := []string{} + var output []string for _, argument := range call.ArgumentList { output = append(output, fmt.Sprintf("%v", argument)) } diff --git a/vendor/github.com/ethereum/go-ethereum/console/console_test.go b/vendor/github.com/ethereum/go-ethereum/console/console_test.go index 26465ca6..55d79972 100644 --- a/vendor/github.com/ethereum/go-ethereum/console/console_test.go +++ b/vendor/github.com/ethereum/go-ethereum/console/console_test.go @@ -149,8 +149,8 @@ func (env *tester) Close(t *testing.T) { if err := env.console.Stop(false); err != nil { t.Errorf("failed to stop embedded console: %v", err) } - if err := env.stack.Stop(); err != nil { - t.Errorf("failed to stop embedded node: %v", err) + if err := env.stack.Close(); err != nil { + t.Errorf("failed to tear down embedded node: %v", err) } os.RemoveAll(env.workspace) } diff --git a/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-alpine/Dockerfile b/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-alpine/Dockerfile deleted file mode 100644 index 1f3e1112..00000000 --- a/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-alpine/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM alpine:3.7 - -RUN \ - apk add --update go git make gcc musl-dev linux-headers ca-certificates && \ - git clone --depth 1 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apk del go git make gcc musl-dev linux-headers && \ - rm -rf /go-ethereum && rm -rf /var/cache/apk/* - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-ubuntu/Dockerfile b/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-ubuntu/Dockerfile deleted file mode 100644 index 8c4fe9f5..00000000 --- a/vendor/github.com/ethereum/go-ethereum/containers/docker/develop-ubuntu/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM ubuntu:xenial - -ENV PATH=/usr/lib/go-1.9/bin:$PATH - -RUN \ - apt-get update && apt-get upgrade -q -y && \ - apt-get install -y --no-install-recommends golang-1.9 git make gcc libc-dev ca-certificates && \ - git clone --depth 1 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apt-get remove -y golang-1.9 git make gcc libc-dev && apt autoremove -y && apt-get clean && \ - rm -rf /go-ethereum - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/vendor/github.com/ethereum/go-ethereum/containers/docker/master-alpine/Dockerfile b/vendor/github.com/ethereum/go-ethereum/containers/docker/master-alpine/Dockerfile deleted file mode 100644 index 8d4e7fe8..00000000 --- a/vendor/github.com/ethereum/go-ethereum/containers/docker/master-alpine/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM alpine:3.7 - -RUN \ - apk add --update go git make gcc musl-dev linux-headers ca-certificates && \ - git clone --depth 1 --branch release/1.8 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apk del go git make gcc musl-dev linux-headers && \ - rm -rf /go-ethereum && rm -rf /var/cache/apk/* - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/vendor/github.com/ethereum/go-ethereum/containers/docker/master-ubuntu/Dockerfile b/vendor/github.com/ethereum/go-ethereum/containers/docker/master-ubuntu/Dockerfile deleted file mode 100644 index 4cfc4f58..00000000 --- a/vendor/github.com/ethereum/go-ethereum/containers/docker/master-ubuntu/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM ubuntu:xenial - -ENV PATH=/usr/lib/go-1.9/bin:$PATH - -RUN \ - apt-get update && apt-get upgrade -q -y && \ - apt-get install -y --no-install-recommends golang-1.9 git make gcc libc-dev ca-certificates && \ - git clone --depth 1 --branch release/1.8 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apt-get remove -y golang-1.9 git make gcc libc-dev && apt autoremove -y && apt-get clean && \ - rm -rf /go-ethereum - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/chequebook/cheque.go b/vendor/github.com/ethereum/go-ethereum/contracts/chequebook/cheque.go index 53eb093a..32e84067 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/chequebook/cheque.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/chequebook/cheque.go @@ -109,12 +109,12 @@ type Chequebook struct { log log.Logger // contextual logger with the contract address embedded } -func (chbook *Chequebook) String() string { - return fmt.Sprintf("contract: %s, owner: %s, balance: %v, signer: %x", chbook.contractAddr.Hex(), chbook.owner.Hex(), chbook.balance, chbook.prvKey.PublicKey) +func (cb *Chequebook) String() string { + return fmt.Sprintf("contract: %s, owner: %s, balance: %v, signer: %x", cb.contractAddr.Hex(), cb.owner.Hex(), cb.balance, cb.prvKey.PublicKey) } // NewChequebook creates a new Chequebook. -func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.PrivateKey, backend Backend) (self *Chequebook, err error) { +func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.PrivateKey, backend Backend) (*Chequebook, error) { balance := new(big.Int) sent := make(map[common.Address]*big.Int) @@ -128,7 +128,7 @@ func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.Priva TransactOpts: *transactOpts, } - self = &Chequebook{ + cb := &Chequebook{ prvKey: prvKey, balance: balance, contractAddr: contractAddr, @@ -140,42 +140,39 @@ func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.Priva session: session, log: log.New("contract", contractAddr), } - if (contractAddr != common.Address{}) { - self.setBalanceFromBlockChain() - self.log.Trace("New chequebook initialised", "owner", self.owner, "balance", self.balance) + cb.setBalanceFromBlockChain() + cb.log.Trace("New chequebook initialised", "owner", cb.owner, "balance", cb.balance) } - return + return cb, nil } -func (chbook *Chequebook) setBalanceFromBlockChain() { - balance, err := chbook.backend.BalanceAt(context.TODO(), chbook.contractAddr, nil) +func (cb *Chequebook) setBalanceFromBlockChain() { + balance, err := cb.backend.BalanceAt(context.TODO(), cb.contractAddr, nil) if err != nil { log.Error("Failed to retrieve chequebook balance", "err", err) } else { - chbook.balance.Set(balance) + cb.balance.Set(balance) } } // LoadChequebook loads a chequebook from disk (file path). -func LoadChequebook(path string, prvKey *ecdsa.PrivateKey, backend Backend, checkBalance bool) (self *Chequebook, err error) { - var data []byte - data, err = ioutil.ReadFile(path) - if err != nil { - return - } - self, _ = NewChequebook(path, common.Address{}, prvKey, backend) - - err = json.Unmarshal(data, self) +func LoadChequebook(path string, prvKey *ecdsa.PrivateKey, backend Backend, checkBalance bool) (*Chequebook, error) { + data, err := ioutil.ReadFile(path) if err != nil { return nil, err } + cb, _ := NewChequebook(path, common.Address{}, prvKey, backend) + + if err = json.Unmarshal(data, cb); err != nil { + return nil, err + } if checkBalance { - self.setBalanceFromBlockChain() + cb.setBalanceFromBlockChain() } log.Trace("Loaded chequebook from disk", "path", path) - return + return cb, nil } // chequebookFile is the JSON representation of a chequebook. @@ -187,19 +184,19 @@ type chequebookFile struct { } // UnmarshalJSON deserialises a chequebook. -func (chbook *Chequebook) UnmarshalJSON(data []byte) error { +func (cb *Chequebook) UnmarshalJSON(data []byte) error { var file chequebookFile err := json.Unmarshal(data, &file) if err != nil { return err } - _, ok := chbook.balance.SetString(file.Balance, 10) + _, ok := cb.balance.SetString(file.Balance, 10) if !ok { return fmt.Errorf("cumulative amount sent: unable to convert string to big integer: %v", file.Balance) } - chbook.contractAddr = common.HexToAddress(file.Contract) + cb.contractAddr = common.HexToAddress(file.Contract) for addr, sent := range file.Sent { - chbook.sent[common.HexToAddress(addr)], ok = new(big.Int).SetString(sent, 10) + cb.sent[common.HexToAddress(addr)], ok = new(big.Int).SetString(sent, 10) if !ok { return fmt.Errorf("beneficiary %v cumulative amount sent: unable to convert string to big integer: %v", addr, sent) } @@ -208,14 +205,14 @@ func (chbook *Chequebook) UnmarshalJSON(data []byte) error { } // MarshalJSON serialises a chequebook. -func (chbook *Chequebook) MarshalJSON() ([]byte, error) { +func (cb *Chequebook) MarshalJSON() ([]byte, error) { var file = &chequebookFile{ - Balance: chbook.balance.String(), - Contract: chbook.contractAddr.Hex(), - Owner: chbook.owner.Hex(), + Balance: cb.balance.String(), + Contract: cb.contractAddr.Hex(), + Owner: cb.owner.Hex(), Sent: make(map[string]string), } - for addr, sent := range chbook.sent { + for addr, sent := range cb.sent { file.Sent[addr.Hex()] = sent.String() } return json.Marshal(file) @@ -223,76 +220,78 @@ func (chbook *Chequebook) MarshalJSON() ([]byte, error) { // Save persists the chequebook on disk, remembering balance, contract address and // cumulative amount of funds sent for each beneficiary. -func (chbook *Chequebook) Save() (err error) { - data, err := json.MarshalIndent(chbook, "", " ") +func (cb *Chequebook) Save() error { + data, err := json.MarshalIndent(cb, "", " ") if err != nil { return err } - chbook.log.Trace("Saving chequebook to disk", chbook.path) + cb.log.Trace("Saving chequebook to disk", cb.path) - return ioutil.WriteFile(chbook.path, data, os.ModePerm) + return ioutil.WriteFile(cb.path, data, os.ModePerm) } // Stop quits the autodeposit go routine to terminate -func (chbook *Chequebook) Stop() { - defer chbook.lock.Unlock() - chbook.lock.Lock() - if chbook.quit != nil { - close(chbook.quit) - chbook.quit = nil +func (cb *Chequebook) Stop() { + defer cb.lock.Unlock() + cb.lock.Lock() + if cb.quit != nil { + close(cb.quit) + cb.quit = nil } } // Issue creates a cheque signed by the chequebook owner's private key. The // signer commits to a contract (one that they own), a beneficiary and amount. -func (chbook *Chequebook) Issue(beneficiary common.Address, amount *big.Int) (ch *Cheque, err error) { - defer chbook.lock.Unlock() - chbook.lock.Lock() +func (cb *Chequebook) Issue(beneficiary common.Address, amount *big.Int) (*Cheque, error) { + defer cb.lock.Unlock() + cb.lock.Lock() if amount.Sign() <= 0 { return nil, fmt.Errorf("amount must be greater than zero (%v)", amount) } - if chbook.balance.Cmp(amount) < 0 { - err = fmt.Errorf("insufficient funds to issue cheque for amount: %v. balance: %v", amount, chbook.balance) + var ( + ch *Cheque + err error + ) + if cb.balance.Cmp(amount) < 0 { + err = fmt.Errorf("insufficient funds to issue cheque for amount: %v. balance: %v", amount, cb.balance) } else { var sig []byte - sent, found := chbook.sent[beneficiary] + sent, found := cb.sent[beneficiary] if !found { sent = new(big.Int) - chbook.sent[beneficiary] = sent + cb.sent[beneficiary] = sent } sum := new(big.Int).Set(sent) sum.Add(sum, amount) - sig, err = crypto.Sign(sigHash(chbook.contractAddr, beneficiary, sum), chbook.prvKey) + sig, err = crypto.Sign(sigHash(cb.contractAddr, beneficiary, sum), cb.prvKey) if err == nil { ch = &Cheque{ - Contract: chbook.contractAddr, + Contract: cb.contractAddr, Beneficiary: beneficiary, Amount: sum, Sig: sig, } sent.Set(sum) - chbook.balance.Sub(chbook.balance, amount) // subtract amount from balance + cb.balance.Sub(cb.balance, amount) // subtract amount from balance } } - // auto deposit if threshold is set and balance is less then threshold // note this is called even if issuing cheque fails // so we reattempt depositing - if chbook.threshold != nil { - if chbook.balance.Cmp(chbook.threshold) < 0 { - send := new(big.Int).Sub(chbook.buffer, chbook.balance) - chbook.deposit(send) + if cb.threshold != nil { + if cb.balance.Cmp(cb.threshold) < 0 { + send := new(big.Int).Sub(cb.buffer, cb.balance) + cb.deposit(send) } } - - return + return ch, err } // Cash is a convenience method to cash any cheque. -func (chbook *Chequebook) Cash(ch *Cheque) (txhash string, err error) { - return ch.Cash(chbook.session) +func (cb *Chequebook) Cash(ch *Cheque) (string, error) { + return ch.Cash(cb.session) } // data to sign: contract address, beneficiary, cumulative amount of funds ever sent @@ -309,73 +308,73 @@ func sigHash(contract, beneficiary common.Address, sum *big.Int) []byte { } // Balance returns the current balance of the chequebook. -func (chbook *Chequebook) Balance() *big.Int { - defer chbook.lock.Unlock() - chbook.lock.Lock() - return new(big.Int).Set(chbook.balance) +func (cb *Chequebook) Balance() *big.Int { + defer cb.lock.Unlock() + cb.lock.Lock() + return new(big.Int).Set(cb.balance) } // Owner returns the owner account of the chequebook. -func (chbook *Chequebook) Owner() common.Address { - return chbook.owner +func (cb *Chequebook) Owner() common.Address { + return cb.owner } // Address returns the on-chain contract address of the chequebook. -func (chbook *Chequebook) Address() common.Address { - return chbook.contractAddr +func (cb *Chequebook) Address() common.Address { + return cb.contractAddr } // Deposit deposits money to the chequebook account. -func (chbook *Chequebook) Deposit(amount *big.Int) (string, error) { - defer chbook.lock.Unlock() - chbook.lock.Lock() - return chbook.deposit(amount) +func (cb *Chequebook) Deposit(amount *big.Int) (string, error) { + defer cb.lock.Unlock() + cb.lock.Lock() + return cb.deposit(amount) } // deposit deposits amount to the chequebook account. -// The caller must hold self.lock. -func (chbook *Chequebook) deposit(amount *big.Int) (string, error) { +// The caller must hold lock. +func (cb *Chequebook) deposit(amount *big.Int) (string, error) { // since the amount is variable here, we do not use sessions - depositTransactor := bind.NewKeyedTransactor(chbook.prvKey) + depositTransactor := bind.NewKeyedTransactor(cb.prvKey) depositTransactor.Value = amount - chbookRaw := &contract.ChequebookRaw{Contract: chbook.contract} + chbookRaw := &contract.ChequebookRaw{Contract: cb.contract} tx, err := chbookRaw.Transfer(depositTransactor) if err != nil { - chbook.log.Warn("Failed to fund chequebook", "amount", amount, "balance", chbook.balance, "target", chbook.buffer, "err", err) + cb.log.Warn("Failed to fund chequebook", "amount", amount, "balance", cb.balance, "target", cb.buffer, "err", err) return "", err } // assume that transaction is actually successful, we add the amount to balance right away - chbook.balance.Add(chbook.balance, amount) - chbook.log.Trace("Deposited funds to chequebook", "amount", amount, "balance", chbook.balance, "target", chbook.buffer) + cb.balance.Add(cb.balance, amount) + cb.log.Trace("Deposited funds to chequebook", "amount", amount, "balance", cb.balance, "target", cb.buffer) return tx.Hash().Hex(), nil } // AutoDeposit (re)sets interval time and amount which triggers sending funds to the // chequebook. Contract backend needs to be set if threshold is not less than buffer, then // deposit will be triggered on every new cheque issued. -func (chbook *Chequebook) AutoDeposit(interval time.Duration, threshold, buffer *big.Int) { - defer chbook.lock.Unlock() - chbook.lock.Lock() - chbook.threshold = threshold - chbook.buffer = buffer - chbook.autoDeposit(interval) +func (cb *Chequebook) AutoDeposit(interval time.Duration, threshold, buffer *big.Int) { + defer cb.lock.Unlock() + cb.lock.Lock() + cb.threshold = threshold + cb.buffer = buffer + cb.autoDeposit(interval) } // autoDeposit starts a goroutine that periodically sends funds to the chequebook // contract caller holds the lock the go routine terminates if Chequebook.quit is closed. -func (chbook *Chequebook) autoDeposit(interval time.Duration) { - if chbook.quit != nil { - close(chbook.quit) - chbook.quit = nil +func (cb *Chequebook) autoDeposit(interval time.Duration) { + if cb.quit != nil { + close(cb.quit) + cb.quit = nil } // if threshold >= balance autodeposit after every cheque issued - if interval == time.Duration(0) || chbook.threshold != nil && chbook.buffer != nil && chbook.threshold.Cmp(chbook.buffer) >= 0 { + if interval == time.Duration(0) || cb.threshold != nil && cb.buffer != nil && cb.threshold.Cmp(cb.buffer) >= 0 { return } ticker := time.NewTicker(interval) - chbook.quit = make(chan bool) - quit := chbook.quit + cb.quit = make(chan bool) + quit := cb.quit go func() { for { @@ -383,15 +382,15 @@ func (chbook *Chequebook) autoDeposit(interval time.Duration) { case <-quit: return case <-ticker.C: - chbook.lock.Lock() - if chbook.balance.Cmp(chbook.buffer) < 0 { - amount := new(big.Int).Sub(chbook.buffer, chbook.balance) - txhash, err := chbook.deposit(amount) + cb.lock.Lock() + if cb.balance.Cmp(cb.buffer) < 0 { + amount := new(big.Int).Sub(cb.buffer, cb.balance) + txhash, err := cb.deposit(amount) if err == nil { - chbook.txhash = txhash + cb.txhash = txhash } } - chbook.lock.Unlock() + cb.lock.Unlock() } } }() @@ -404,8 +403,8 @@ type Outbox struct { } // NewOutbox creates an outbox. -func NewOutbox(chbook *Chequebook, beneficiary common.Address) *Outbox { - return &Outbox{chbook, beneficiary} +func NewOutbox(cb *Chequebook, beneficiary common.Address) *Outbox { + return &Outbox{cb, beneficiary} } // Issue creates cheque. @@ -445,7 +444,7 @@ type Inbox struct { // NewInbox creates an Inbox. An Inboxes is not persisted, the cumulative sum is updated // from blockchain when first cheque is received. -func NewInbox(prvKey *ecdsa.PrivateKey, contractAddr, beneficiary common.Address, signer *ecdsa.PublicKey, abigen bind.ContractBackend) (self *Inbox, err error) { +func NewInbox(prvKey *ecdsa.PrivateKey, contractAddr, beneficiary common.Address, signer *ecdsa.PublicKey, abigen bind.ContractBackend) (*Inbox, error) { if signer == nil { return nil, fmt.Errorf("signer is null") } @@ -461,7 +460,7 @@ func NewInbox(prvKey *ecdsa.PrivateKey, contractAddr, beneficiary common.Address } sender := transactOpts.From - self = &Inbox{ + inbox := &Inbox{ contract: contractAddr, beneficiary: beneficiary, sender: sender, @@ -470,8 +469,8 @@ func NewInbox(prvKey *ecdsa.PrivateKey, contractAddr, beneficiary common.Address cashed: new(big.Int).Set(common.Big0), log: log.New("contract", contractAddr), } - self.log.Trace("New chequebook inbox initialized", "beneficiary", self.beneficiary, "signer", hexutil.Bytes(crypto.FromECDSAPub(signer))) - return + inbox.log.Trace("New chequebook inbox initialized", "beneficiary", inbox.beneficiary, "signer", hexutil.Bytes(crypto.FromECDSAPub(signer))) + return inbox, nil } func (i *Inbox) String() string { @@ -489,13 +488,15 @@ func (i *Inbox) Stop() { } // Cash attempts to cash the current cheque. -func (i *Inbox) Cash() (txhash string, err error) { - if i.cheque != nil { - txhash, err = i.cheque.Cash(i.session) - i.log.Trace("Cashing in chequebook cheque", "amount", i.cheque.Amount, "beneficiary", i.beneficiary) - i.cashed = i.cheque.Amount +func (i *Inbox) Cash() (string, error) { + if i.cheque == nil { + return "", nil } - return + txhash, err := i.cheque.Cash(i.session) + i.log.Trace("Cashing in chequebook cheque", "amount", i.cheque.Amount, "beneficiary", i.beneficiary) + i.cashed = i.cheque.Amount + + return txhash, err } // AutoCash (re)sets maximum time and amount which triggers cashing of the last uncashed @@ -509,7 +510,7 @@ func (i *Inbox) AutoCash(cashInterval time.Duration, maxUncashed *big.Int) { // autoCash starts a loop that periodically clears the last cheque // if the peer is trusted. Clearing period could be 24h or a week. -// The caller must hold self.lock. +// The caller must hold lock. func (i *Inbox) autoCash(cashInterval time.Duration) { if i.quit != nil { close(i.quit) @@ -632,7 +633,7 @@ func (ch *Cheque) Cash(session *contract.ChequebookSession) (string, error) { // ValidateCode checks that the on-chain code at address matches the expected chequebook // contract code. This is used to detect suicided chequebooks. -func ValidateCode(ctx context.Context, b Backend, address common.Address) (ok bool, err error) { +func ValidateCode(ctx context.Context, b Backend, address common.Address) (bool, error) { code, err := b.CodeAt(ctx, address, nil) if err != nil { return false, err diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/README.md b/vendor/github.com/ethereum/go-ethereum/contracts/ens/README.md index c09b47e3..f2ea1330 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/README.md +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/README.md @@ -18,3 +18,13 @@ The go bindings for ENS contracts are generated using `abigen` via the go genera ```shell go generate ./contracts/ens ``` + +## Fallback contract support + +In order to better support content resolution on different service providers (such as Swarm and IPFS), [EIP-1577](https://eips.ethereum.org/EIPS/eip-1577) +was introduced and with it changes that allow applications to know _where_ content hashes are stored (i.e. if the +requested hash resides on Swarm or IPFS). + +The code under `contracts/ens/contract` reflects the new Public Resolver changes and the code under `fallback_contract` allows +us to support the old contract resolution in cases where the ENS name owner did not update her Resolver contract, until the migration +period ends (date arbitrarily set to June 1st, 2019). diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid.go new file mode 100644 index 00000000..673e8203 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid.go @@ -0,0 +1,121 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ens + +import ( + "encoding/binary" + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/common" +) + +const ( + cidv1 = 0x1 + + nsIpfs = 0xe3 + nsSwarm = 0xe4 + + swarmTypecode = 0xfa // swarm manifest, see https://github.com/multiformats/multicodec/blob/master/table.csv + swarmHashtype = 0x1b // keccak256, see https://github.com/multiformats/multicodec/blob/master/table.csv + + hashLength = 32 +) + +// deocodeEIP1577ContentHash decodes a chain-stored content hash from an ENS record according to EIP-1577 +// a successful decode will result the different parts of the content hash in accordance to the CID spec +// Note: only CIDv1 is supported +func decodeEIP1577ContentHash(buf []byte) (storageNs, contentType, hashType, hashLength uint64, hash []byte, err error) { + if len(buf) < 10 { + return 0, 0, 0, 0, nil, errors.New("buffer too short") + } + + storageNs, n := binary.Uvarint(buf) + + buf = buf[n:] + vers, n := binary.Uvarint(buf) + + if vers != 1 { + return 0, 0, 0, 0, nil, fmt.Errorf("expected cid v1, got: %d", vers) + } + buf = buf[n:] + contentType, n = binary.Uvarint(buf) + + buf = buf[n:] + hashType, n = binary.Uvarint(buf) + + buf = buf[n:] + hashLength, n = binary.Uvarint(buf) + + hash = buf[n:] + + if len(hash) != int(hashLength) { + return 0, 0, 0, 0, nil, errors.New("hash length mismatch") + } + return storageNs, contentType, hashType, hashLength, hash, nil +} + +func extractContentHash(buf []byte) (common.Hash, error) { + storageNs, _ /*contentType*/, _ /* hashType*/, decodedHashLength, hashBytes, err := decodeEIP1577ContentHash(buf) + + if err != nil { + return common.Hash{}, err + } + + if storageNs != nsSwarm { + return common.Hash{}, errors.New("unknown storage system") + } + + //todo: for the time being we implement loose enforcement for the EIP rules until ENS manager is updated + /*if contentType != swarmTypecode { + return common.Hash{}, errors.New("unknown content type") + } + + if hashType != swarmHashtype { + return common.Hash{}, errors.New("unknown multihash type") + }*/ + + if decodedHashLength != hashLength { + return common.Hash{}, errors.New("odd hash length, swarm expects 32 bytes") + } + + if len(hashBytes) != int(hashLength) { + return common.Hash{}, errors.New("hash length mismatch") + } + + return common.BytesToHash(buf), nil +} + +func EncodeSwarmHash(hash common.Hash) ([]byte, error) { + var cidBytes []byte + var headerBytes = []byte{ + nsSwarm, //swarm namespace + cidv1, // CIDv1 + swarmTypecode, // swarm hash + swarmHashtype, // keccak256 hash + hashLength, //hash length. 32 bytes + } + + varintbuf := make([]byte, binary.MaxVarintLen64) + for _, v := range headerBytes { + n := binary.PutUvarint(varintbuf, uint64(v)) + cidBytes = append(cidBytes, varintbuf[:n]...) + } + + cidBytes = append(cidBytes, hash[:]...) + return cidBytes, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid_test.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid_test.go new file mode 100644 index 00000000..7d0e6785 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/cid_test.go @@ -0,0 +1,158 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ens + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "fmt" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +// Tests for the decoding of the example ENS +func TestEIPSpecCidDecode(t *testing.T) { + const ( + eipSpecHash = "e3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f" + eipHash = "29f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f" + dagPb = 0x70 + sha2256 = 0x12 + ) + b, err := hex.DecodeString(eipSpecHash) + if err != nil { + t.Fatal(err) + } + hashBytes, err := hex.DecodeString(eipHash) + + if err != nil { + t.Fatal(err) + } + + storageNs, contentType, hashType, hashLength, decodedHashBytes, err := decodeEIP1577ContentHash(b) + + if err != nil { + t.Fatal(err) + } + if storageNs != nsIpfs { + t.Fatal("wrong ns") + } + if contentType != dagPb { + t.Fatal("should be ipfs typecode") + } + if hashType != sha2256 { + t.Fatal("should be sha2-256") + } + if hashLength != 32 { + t.Fatal("should be 32") + } + if !bytes.Equal(hashBytes, decodedHashBytes) { + t.Fatal("should be equal") + } + +} +func TestManualCidDecode(t *testing.T) { + // call cid encode method with hash. expect byte slice returned, compare according to spec + + for _, v := range []struct { + name string + headerBytes []byte + wantErr bool + }{ + { + name: "values correct, should not fail", + headerBytes: []byte{0xe4, 0x01, 0xfa, 0x1b, 0x20}, + wantErr: false, + }, + { + name: "cid version wrong, should fail", + headerBytes: []byte{0xe4, 0x00, 0xfa, 0x1b, 0x20}, + wantErr: true, + }, + { + name: "hash length wrong, should fail", + headerBytes: []byte{0xe4, 0x01, 0xfa, 0x1b, 0x1f}, + wantErr: true, + }, + { + name: "values correct for ipfs, should fail", + headerBytes: []byte{0xe3, 0x01, 0x70, 0x12, 0x20}, + wantErr: true, + }, + { + name: "loose values for swarm, todo remove, should not fail", + headerBytes: []byte{0xe4, 0x01, 0x70, 0x12, 0x20}, + wantErr: false, + }, + { + name: "loose values for swarm, todo remove, should not fail", + headerBytes: []byte{0xe4, 0x01, 0x99, 0x99, 0x20}, + wantErr: false, + }, + } { + t.Run(v.name, func(t *testing.T) { + const eipHash = "29f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f" + + var bb []byte + buf := make([]byte, binary.MaxVarintLen64) + for _, vv := range v.headerBytes { + n := binary.PutUvarint(buf, uint64(vv)) + bb = append(bb, buf[:n]...) + } + + h := common.HexToHash(eipHash) + bb = append(bb, h[:]...) + str := hex.EncodeToString(bb) + fmt.Println(str) + decodedHash, e := extractContentHash(bb) + switch v.wantErr { + case true: + if e == nil { + t.Fatal("the decode should fail") + } + case false: + if e != nil { + t.Fatalf("the deccode shouldnt fail: %v", e) + } + if !bytes.Equal(decodedHash[:], h[:]) { + t.Fatal("hashes not equal") + } + } + }) + } +} + +func TestManuelCidEncode(t *testing.T) { + // call cid encode method with hash. expect byte slice returned, compare according to spec + const eipHash = "29f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f" + cidBytes, err := EncodeSwarmHash(common.HexToHash(eipHash)) + if err != nil { + t.Fatal(err) + } + + // logic in extractContentHash is unit tested thoroughly + // hence we just check that the returned hash is equal + h, err := extractContentHash(cidBytes) + if err != nil { + t.Fatal(err) + } + + if bytes.Equal(h[:], cidBytes) { + t.Fatal("should be equal") + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/AbstractENS.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/AbstractENS.sol deleted file mode 100644 index b80a1b0e..00000000 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/AbstractENS.sol +++ /dev/null @@ -1,23 +0,0 @@ -pragma solidity ^0.4.0; - -contract AbstractENS { - function owner(bytes32 node) constant returns(address); - function resolver(bytes32 node) constant returns(address); - function ttl(bytes32 node) constant returns(uint64); - function setOwner(bytes32 node, address owner); - function setSubnodeOwner(bytes32 node, bytes32 label, address owner); - function setResolver(bytes32 node, address resolver); - function setTTL(bytes32 node, uint64 ttl); - - // Logged when the owner of a node assigns a new owner to a subnode. - event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); - - // Logged when the owner of a node transfers ownership to a new account. - event Transfer(bytes32 indexed node, address owner); - - // Logged when the resolver for a node changes. - event NewResolver(bytes32 indexed node, address resolver); - - // Logged when the TTL of a node changes - event NewTTL(bytes32 indexed node, uint64 ttl); -} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENS.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENS.sol index 47050c19..5ab8c92b 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENS.sol +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENS.sol @@ -1,94 +1,26 @@ -pragma solidity ^0.4.0; +pragma solidity >=0.4.24; -import './AbstractENS.sol'; +interface ENS { -/** - * The ENS registry contract. - */ -contract ENS is AbstractENS { - struct Record { - address owner; - address resolver; - uint64 ttl; - } + // Logged when the owner of a node assigns a new owner to a subnode. + event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); - mapping(bytes32=>Record) records; + // Logged when the owner of a node transfers ownership to a new account. + event Transfer(bytes32 indexed node, address owner); - // Permits modifications only by the owner of the specified node. - modifier only_owner(bytes32 node) { - if (records[node].owner != msg.sender) throw; - _; - } + // Logged when the resolver for a node changes. + event NewResolver(bytes32 indexed node, address resolver); - /** - * Constructs a new ENS registrar. - */ - function ENS() { - records[0].owner = msg.sender; - } + // Logged when the TTL of a node changes + event NewTTL(bytes32 indexed node, uint64 ttl); - /** - * Returns the address that owns the specified node. - */ - function owner(bytes32 node) constant returns (address) { - return records[node].owner; - } - /** - * Returns the address of the resolver for the specified node. - */ - function resolver(bytes32 node) constant returns (address) { - return records[node].resolver; - } + function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external; + function setResolver(bytes32 node, address resolver) external; + function setOwner(bytes32 node, address owner) external; + function setTTL(bytes32 node, uint64 ttl) external; + function owner(bytes32 node) external view returns (address); + function resolver(bytes32 node) external view returns (address); + function ttl(bytes32 node) external view returns (uint64); - /** - * Returns the TTL of a node, and any records associated with it. - */ - function ttl(bytes32 node) constant returns (uint64) { - return records[node].ttl; - } - - /** - * Transfers ownership of a node to a new address. May only be called by the current - * owner of the node. - * @param node The node to transfer ownership of. - * @param owner The address of the new owner. - */ - function setOwner(bytes32 node, address owner) only_owner(node) { - Transfer(node, owner); - records[node].owner = owner; - } - - /** - * Transfers ownership of a subnode sha3(node, label) to a new address. May only be - * called by the owner of the parent node. - * @param node The parent node. - * @param label The hash of the label specifying the subnode. - * @param owner The address of the new owner. - */ - function setSubnodeOwner(bytes32 node, bytes32 label, address owner) only_owner(node) { - var subnode = sha3(node, label); - NewOwner(node, label, owner); - records[subnode].owner = owner; - } - - /** - * Sets the resolver address for the specified node. - * @param node The node to update. - * @param resolver The address of the resolver. - */ - function setResolver(bytes32 node, address resolver) only_owner(node) { - NewResolver(node, resolver); - records[node].resolver = resolver; - } - - /** - * Sets the TTL for the specified node. - * @param node The node to update. - * @param ttl The TTL in seconds. - */ - function setTTL(bytes32 node, uint64 ttl) only_owner(node) { - NewTTL(node, ttl); - records[node].ttl = ttl; - } -} +} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENSRegistry.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENSRegistry.sol new file mode 100644 index 00000000..fa19131d --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ENSRegistry.sol @@ -0,0 +1,99 @@ +pragma solidity ^0.5.0; + +import "./ENS.sol"; + +/** + * The ENS registry contract. + */ +contract ENSRegistry is ENS { + struct Record { + address owner; + address resolver; + uint64 ttl; + } + + mapping (bytes32 => Record) records; + + // Permits modifications only by the owner of the specified node. + modifier only_owner(bytes32 node) { + require(records[node].owner == msg.sender); + _; + } + + /** + * @dev Constructs a new ENS registrar. + */ + constructor() public { + records[0x0].owner = msg.sender; + } + + /** + * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node. + * @param node The node to transfer ownership of. + * @param owner The address of the new owner. + */ + function setOwner(bytes32 node, address owner) external only_owner(node) { + emit Transfer(node, owner); + records[node].owner = owner; + } + + /** + * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node. + * @param node The parent node. + * @param label The hash of the label specifying the subnode. + * @param owner The address of the new owner. + */ + function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external only_owner(node) { + bytes32 subnode = keccak256(abi.encodePacked(node, label)); + emit NewOwner(node, label, owner); + records[subnode].owner = owner; + } + + /** + * @dev Sets the resolver address for the specified node. + * @param node The node to update. + * @param resolver The address of the resolver. + */ + function setResolver(bytes32 node, address resolver) external only_owner(node) { + emit NewResolver(node, resolver); + records[node].resolver = resolver; + } + + /** + * @dev Sets the TTL for the specified node. + * @param node The node to update. + * @param ttl The TTL in seconds. + */ + function setTTL(bytes32 node, uint64 ttl) external only_owner(node) { + emit NewTTL(node, ttl); + records[node].ttl = ttl; + } + + /** + * @dev Returns the address that owns the specified node. + * @param node The specified node. + * @return address of the owner. + */ + function owner(bytes32 node) external view returns (address) { + return records[node].owner; + } + + /** + * @dev Returns the address of the resolver for the specified node. + * @param node The specified node. + * @return address of the resolver. + */ + function resolver(bytes32 node) external view returns (address) { + return records[node].resolver; + } + + /** + * @dev Returns the TTL of a node, and any records associated with it. + * @param node The specified node. + * @return ttl of the node. + */ + function ttl(bytes32 node) external view returns (uint64) { + return records[node].ttl; + } + +} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/FIFSRegistrar.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/FIFSRegistrar.sol index 51629c2b..19287408 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/FIFSRegistrar.sol +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/FIFSRegistrar.sol @@ -1,20 +1,17 @@ -pragma solidity ^0.4.0; +pragma solidity ^0.5.0; -import './AbstractENS.sol'; +import "./ENS.sol"; /** * A registrar that allocates subdomains to the first person to claim them. */ contract FIFSRegistrar { - AbstractENS ens; + ENS ens; bytes32 rootNode; - modifier only_owner(bytes32 subnode) { - var node = sha3(rootNode, subnode); - var currentOwner = ens.owner(node); - - if (currentOwner != 0 && currentOwner != msg.sender) throw; - + modifier only_owner(bytes32 label) { + address currentOwner = ens.owner(keccak256(abi.encodePacked(rootNode, label))); + require(currentOwner == address(0x0) || currentOwner == msg.sender); _; } @@ -23,17 +20,17 @@ contract FIFSRegistrar { * @param ensAddr The address of the ENS registry. * @param node The node that this registrar administers. */ - function FIFSRegistrar(AbstractENS ensAddr, bytes32 node) { + constructor(ENS ensAddr, bytes32 node) public { ens = ensAddr; rootNode = node; } /** * Register a name, or change the owner of an existing registration. - * @param subnode The hash of the label to register. + * @param label The hash of the label to register. * @param owner The address of the new owner. */ - function register(bytes32 subnode, address owner) only_owner(subnode) { - ens.setSubnodeOwner(rootNode, subnode, owner); + function register(bytes32 label, address owner) public only_owner(label) { + ens.setSubnodeOwner(rootNode, label, owner); } -} +} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/PublicResolver.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/PublicResolver.sol index 9dcc9568..cfcd5dd6 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/PublicResolver.sol +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/PublicResolver.sol @@ -1,26 +1,27 @@ -pragma solidity ^0.4.0; +pragma solidity >=0.4.25; -import './AbstractENS.sol'; +import "./ENS.sol"; /** * A simple resolver anyone can use; only allows the owner of a node to set its * address. */ contract PublicResolver { + bytes4 constant INTERFACE_META_ID = 0x01ffc9a7; bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de; - bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5; bytes4 constant NAME_INTERFACE_ID = 0x691f3431; bytes4 constant ABI_INTERFACE_ID = 0x2203ab56; bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233; bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c; + bytes4 constant CONTENTHASH_INTERFACE_ID = 0xbc1c58d1; event AddrChanged(bytes32 indexed node, address a); - event ContentChanged(bytes32 indexed node, bytes32 hash); event NameChanged(bytes32 indexed node, string name); event ABIChanged(bytes32 indexed node, uint256 indexed contentType); event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); - event TextChanged(bytes32 indexed node, string indexed indexedKey, string key); + event TextChanged(bytes32 indexed node, string indexedKey, string key); + event ContenthashChanged(bytes32 indexed node, bytes hash); struct PublicKey { bytes32 x; @@ -29,18 +30,19 @@ contract PublicResolver { struct Record { address addr; - bytes32 content; string name; PublicKey pubkey; mapping(string=>string) text; mapping(uint256=>bytes) abis; + bytes contenthash; } - AbstractENS ens; - mapping(bytes32=>Record) records; + ENS ens; - modifier only_owner(bytes32 node) { - if (ens.owner(node) != msg.sender) throw; + mapping (bytes32 => Record) records; + + modifier onlyOwner(bytes32 node) { + require(ens.owner(node) == msg.sender); _; } @@ -48,77 +50,30 @@ contract PublicResolver { * Constructor. * @param ensAddr The ENS registrar contract. */ - function PublicResolver(AbstractENS ensAddr) { + constructor(ENS ensAddr) public { ens = ensAddr; } - /** - * Returns true if the resolver implements the interface specified by the provided hash. - * @param interfaceID The ID of the interface to check for. - * @return True if the contract implements the requested interface. - */ - function supportsInterface(bytes4 interfaceID) constant returns (bool) { - return interfaceID == ADDR_INTERFACE_ID || - interfaceID == CONTENT_INTERFACE_ID || - interfaceID == NAME_INTERFACE_ID || - interfaceID == ABI_INTERFACE_ID || - interfaceID == PUBKEY_INTERFACE_ID || - interfaceID == TEXT_INTERFACE_ID || - interfaceID == INTERFACE_META_ID; - } - - /** - * Returns the address associated with an ENS node. - * @param node The ENS node to query. - * @return The associated address. - */ - function addr(bytes32 node) constant returns (address ret) { - ret = records[node].addr; - } - /** * Sets the address associated with an ENS node. * May only be called by the owner of that node in the ENS registry. * @param node The node to update. * @param addr The address to set. */ - function setAddr(bytes32 node, address addr) only_owner(node) { + function setAddr(bytes32 node, address addr) external onlyOwner(node) { records[node].addr = addr; - AddrChanged(node, addr); + emit AddrChanged(node, addr); } /** - * Returns the content hash associated with an ENS node. - * Note that this resource type is not standardized, and will likely change - * in future to a resource type based on multihash. - * @param node The ENS node to query. - * @return The associated content hash. - */ - function content(bytes32 node) constant returns (bytes32 ret) { - ret = records[node].content; - } - - /** - * Sets the content hash associated with an ENS node. + * Sets the contenthash associated with an ENS node. * May only be called by the owner of that node in the ENS registry. - * Note that this resource type is not standardized, and will likely change - * in future to a resource type based on multihash. * @param node The node to update. - * @param hash The content hash to set + * @param hash The contenthash to set */ - function setContent(bytes32 node, bytes32 hash) only_owner(node) { - records[node].content = hash; - ContentChanged(node, hash); - } - - /** - * Returns the name associated with an ENS node, for reverse records. - * Defined in EIP181. - * @param node The ENS node to query. - * @return The associated name. - */ - function name(bytes32 node) constant returns (string ret) { - ret = records[node].name; + function setContenthash(bytes32 node, bytes calldata hash) external onlyOwner(node) { + records[node].contenthash = hash; + emit ContenthashChanged(node, hash); } /** @@ -127,28 +82,9 @@ contract PublicResolver { * @param node The node to update. * @param name The name to set. */ - function setName(bytes32 node, string name) only_owner(node) { + function setName(bytes32 node, string calldata name) external onlyOwner(node) { records[node].name = name; - NameChanged(node, name); - } - - /** - * Returns the ABI associated with an ENS node. - * Defined in EIP205. - * @param node The ENS node to query - * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. - * @return contentType The content type of the return value - * @return data The ABI data - */ - function ABI(bytes32 node, uint256 contentTypes) constant returns (uint256 contentType, bytes data) { - var record = records[node]; - for(contentType = 1; contentType <= contentTypes; contentType <<= 1) { - if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) { - data = record.abis[contentType]; - return; - } - } - contentType = 0; + emit NameChanged(node, name); } /** @@ -159,22 +95,12 @@ contract PublicResolver { * @param contentType The content type of the ABI * @param data The ABI data. */ - function setABI(bytes32 node, uint256 contentType, bytes data) only_owner(node) { + function setABI(bytes32 node, uint256 contentType, bytes calldata data) external onlyOwner(node) { // Content types must be powers of 2 - if (((contentType - 1) & contentType) != 0) throw; + require(((contentType - 1) & contentType) == 0); records[node].abis[contentType] = data; - ABIChanged(node, contentType); - } - - /** - * Returns the SECP256k1 public key associated with an ENS node. - * Defined in EIP 619. - * @param node The ENS node to query - * @return x, y the X and Y coordinates of the curve point for the public key. - */ - function pubkey(bytes32 node) constant returns (bytes32 x, bytes32 y) { - return (records[node].pubkey.x, records[node].pubkey.y); + emit ABIChanged(node, contentType); } /** @@ -183,19 +109,9 @@ contract PublicResolver { * @param x the X coordinate of the curve point for the public key. * @param y the Y coordinate of the curve point for the public key. */ - function setPubkey(bytes32 node, bytes32 x, bytes32 y) only_owner(node) { + function setPubkey(bytes32 node, bytes32 x, bytes32 y) external onlyOwner(node) { records[node].pubkey = PublicKey(x, y); - PubkeyChanged(node, x, y); - } - - /** - * Returns the text data associated with an ENS node and key. - * @param node The ENS node to query. - * @param key The text data key to query. - * @return The associated text data. - */ - function text(bytes32 node, string key) constant returns (string ret) { - ret = records[node].text[key]; + emit PubkeyChanged(node, x, y); } /** @@ -205,8 +121,92 @@ contract PublicResolver { * @param key The key to set. * @param value The text data value to set. */ - function setText(bytes32 node, string key, string value) only_owner(node) { + function setText(bytes32 node, string calldata key, string calldata value) external onlyOwner(node) { records[node].text[key] = value; - TextChanged(node, key, key); + emit TextChanged(node, key, key); + } + + /** + * Returns the text data associated with an ENS node and key. + * @param node The ENS node to query. + * @param key The text data key to query. + * @return The associated text data. + */ + function text(bytes32 node, string calldata key) external view returns (string memory) { + return records[node].text[key]; + } + + /** + * Returns the SECP256k1 public key associated with an ENS node. + * Defined in EIP 619. + * @param node The ENS node to query + * @return x, y the X and Y coordinates of the curve point for the public key. + */ + function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y) { + return (records[node].pubkey.x, records[node].pubkey.y); + } + + /** + * Returns the ABI associated with an ENS node. + * Defined in EIP205. + * @param node The ENS node to query + * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. + * @return contentType The content type of the return value + * @return data The ABI data + */ + function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory) { + Record storage record = records[node]; + + for (uint256 contentType = 1; contentType <= contentTypes; contentType <<= 1) { + if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) { + return (contentType, record.abis[contentType]); + } + } + + bytes memory empty; + return (0, empty); + } + + /** + * Returns the name associated with an ENS node, for reverse records. + * Defined in EIP181. + * @param node The ENS node to query. + * @return The associated name. + */ + function name(bytes32 node) external view returns (string memory) { + return records[node].name; + } + + /** + * Returns the address associated with an ENS node. + * @param node The ENS node to query. + * @return The associated address. + */ + function addr(bytes32 node) external view returns (address) { + return records[node].addr; + } + + /** + * Returns the contenthash associated with an ENS node. + * @param node The ENS node to query. + * @return The associated contenthash. + */ + function contenthash(bytes32 node) external view returns (bytes memory) { + return records[node].contenthash; + } + + /** + * Returns true if the resolver implements the interface specified by the provided hash. + * @param interfaceID The ID of the interface to check for. + * @return True if the contract implements the requested interface. + */ + function supportsInterface(bytes4 interfaceID) external pure returns (bool) { + return interfaceID == ADDR_INTERFACE_ID || + interfaceID == NAME_INTERFACE_ID || + interfaceID == ABI_INTERFACE_ID || + interfaceID == PUBKEY_INTERFACE_ID || + interfaceID == TEXT_INTERFACE_ID || + interfaceID == CONTENTHASH_INTERFACE_ID || + interfaceID == INTERFACE_META_ID; } } diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ens.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ens.go index 8827071a..7c0aed34 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ens.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ens.go @@ -4,6 +4,7 @@ package contract import ( + "math/big" "strings" ethereum "github.com/ethereum/go-ethereum" @@ -14,11 +15,23 @@ import ( "github.com/ethereum/go-ethereum/event" ) +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + // ENSABI is the input ABI used to generate the binding from. -const ENSABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}]" +const ENSABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}]" // ENSBin is the compiled bytecode used for deploying new contracts. -const ENSBin = `0x6060604052341561000f57600080fd5b60008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054600160a060020a033316600160a060020a0319909116179055610503806100626000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630178b8bf811461008757806302571be3146100b957806306ab5923146100cf57806314ab9038146100f657806316a25cbd146101195780631896f70a1461014c5780635b0fc9c31461016e575b600080fd5b341561009257600080fd5b61009d600435610190565b604051600160a060020a03909116815260200160405180910390f35b34156100c457600080fd5b61009d6004356101ae565b34156100da57600080fd5b6100f4600435602435600160a060020a03604435166101c9565b005b341561010157600080fd5b6100f460043567ffffffffffffffff6024351661028b565b341561012457600080fd5b61012f600435610357565b60405167ffffffffffffffff909116815260200160405180910390f35b341561015757600080fd5b6100f4600435600160a060020a036024351661038e565b341561017957600080fd5b6100f4600435600160a060020a0360243516610434565b600090815260208190526040902060010154600160a060020a031690565b600090815260208190526040902054600160a060020a031690565b600083815260208190526040812054849033600160a060020a039081169116146101f257600080fd5b8484604051918252602082015260409081019051908190039020915083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051600160a060020a03909116815260200160405180910390a3506000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600082815260208190526040902054829033600160a060020a039081169116146102b457600080fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa688360405167ffffffffffffffff909116815260200160405180910390a250600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b600082815260208190526040902054829033600160a060020a039081169116146103b757600080fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051600160a060020a03909116815260200160405180910390a250600091825260208290526040909120600101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600082815260208190526040902054829033600160a060020a0390811691161461045d57600080fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051600160a060020a03909116815260200160405180910390a250600091825260208290526040909120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555600a165627a7a72305820f4c798d4c84c9912f389f64631e85e8d16c3e6644f8c2e1579936015c7d5f6660029` +const ENSBin = `0x` // DeployENS deploys a new Ethereum contract, binding an instance of ENS to it. func DeployENS(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ENS, error) { @@ -177,7 +190,7 @@ func (_ENS *ENSTransactorRaw) Transact(opts *bind.TransactOpts, method string, p // Owner is a free data retrieval call binding the contract method 0x02571be3. // -// Solidity: function owner(node bytes32) constant returns(address) +// Solidity: function owner(bytes32 node) constant returns(address) func (_ENS *ENSCaller) Owner(opts *bind.CallOpts, node [32]byte) (common.Address, error) { var ( ret0 = new(common.Address) @@ -189,21 +202,21 @@ func (_ENS *ENSCaller) Owner(opts *bind.CallOpts, node [32]byte) (common.Address // Owner is a free data retrieval call binding the contract method 0x02571be3. // -// Solidity: function owner(node bytes32) constant returns(address) +// Solidity: function owner(bytes32 node) constant returns(address) func (_ENS *ENSSession) Owner(node [32]byte) (common.Address, error) { return _ENS.Contract.Owner(&_ENS.CallOpts, node) } // Owner is a free data retrieval call binding the contract method 0x02571be3. // -// Solidity: function owner(node bytes32) constant returns(address) +// Solidity: function owner(bytes32 node) constant returns(address) func (_ENS *ENSCallerSession) Owner(node [32]byte) (common.Address, error) { return _ENS.Contract.Owner(&_ENS.CallOpts, node) } // Resolver is a free data retrieval call binding the contract method 0x0178b8bf. // -// Solidity: function resolver(node bytes32) constant returns(address) +// Solidity: function resolver(bytes32 node) constant returns(address) func (_ENS *ENSCaller) Resolver(opts *bind.CallOpts, node [32]byte) (common.Address, error) { var ( ret0 = new(common.Address) @@ -215,22 +228,22 @@ func (_ENS *ENSCaller) Resolver(opts *bind.CallOpts, node [32]byte) (common.Addr // Resolver is a free data retrieval call binding the contract method 0x0178b8bf. // -// Solidity: function resolver(node bytes32) constant returns(address) +// Solidity: function resolver(bytes32 node) constant returns(address) func (_ENS *ENSSession) Resolver(node [32]byte) (common.Address, error) { return _ENS.Contract.Resolver(&_ENS.CallOpts, node) } // Resolver is a free data retrieval call binding the contract method 0x0178b8bf. // -// Solidity: function resolver(node bytes32) constant returns(address) +// Solidity: function resolver(bytes32 node) constant returns(address) func (_ENS *ENSCallerSession) Resolver(node [32]byte) (common.Address, error) { return _ENS.Contract.Resolver(&_ENS.CallOpts, node) } -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. // -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSCaller) TTL(opts *bind.CallOpts, node [32]byte) (uint64, error) { +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENS *ENSCaller) Ttl(opts *bind.CallOpts, node [32]byte) (uint64, error) { var ( ret0 = new(uint64) ) @@ -239,100 +252,100 @@ func (_ENS *ENSCaller) TTL(opts *bind.CallOpts, node [32]byte) (uint64, error) { return *ret0, err } -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. // -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSSession) TTL(node [32]byte) (uint64, error) { - return _ENS.Contract.TTL(&_ENS.CallOpts, node) +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENS *ENSSession) Ttl(node [32]byte) (uint64, error) { + return _ENS.Contract.Ttl(&_ENS.CallOpts, node) } -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. // -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSCallerSession) TTL(node [32]byte) (uint64, error) { - return _ENS.Contract.TTL(&_ENS.CallOpts, node) +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENS *ENSCallerSession) Ttl(node [32]byte) (uint64, error) { + return _ENS.Contract.Ttl(&_ENS.CallOpts, node) } // SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. // -// Solidity: function setOwner(node bytes32, owner address) returns() +// Solidity: function setOwner(bytes32 node, address owner) returns() func (_ENS *ENSTransactor) SetOwner(opts *bind.TransactOpts, node [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.contract.Transact(opts, "setOwner", node, owner) } // SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. // -// Solidity: function setOwner(node bytes32, owner address) returns() +// Solidity: function setOwner(bytes32 node, address owner) returns() func (_ENS *ENSSession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.Contract.SetOwner(&_ENS.TransactOpts, node, owner) } // SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. // -// Solidity: function setOwner(node bytes32, owner address) returns() +// Solidity: function setOwner(bytes32 node, address owner) returns() func (_ENS *ENSTransactorSession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.Contract.SetOwner(&_ENS.TransactOpts, node, owner) } // SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. // -// Solidity: function setResolver(node bytes32, resolver address) returns() +// Solidity: function setResolver(bytes32 node, address resolver) returns() func (_ENS *ENSTransactor) SetResolver(opts *bind.TransactOpts, node [32]byte, resolver common.Address) (*types.Transaction, error) { return _ENS.contract.Transact(opts, "setResolver", node, resolver) } // SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. // -// Solidity: function setResolver(node bytes32, resolver address) returns() +// Solidity: function setResolver(bytes32 node, address resolver) returns() func (_ENS *ENSSession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { return _ENS.Contract.SetResolver(&_ENS.TransactOpts, node, resolver) } // SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. // -// Solidity: function setResolver(node bytes32, resolver address) returns() +// Solidity: function setResolver(bytes32 node, address resolver) returns() func (_ENS *ENSTransactorSession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { return _ENS.Contract.SetResolver(&_ENS.TransactOpts, node, resolver) } // SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. // -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() func (_ENS *ENSTransactor) SetSubnodeOwner(opts *bind.TransactOpts, node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.contract.Transact(opts, "setSubnodeOwner", node, label, owner) } // SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. // -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() func (_ENS *ENSSession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.Contract.SetSubnodeOwner(&_ENS.TransactOpts, node, label, owner) } // SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. // -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() func (_ENS *ENSTransactorSession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { return _ENS.Contract.SetSubnodeOwner(&_ENS.TransactOpts, node, label, owner) } // SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. // -// Solidity: function setTTL(node bytes32, ttl uint64) returns() +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() func (_ENS *ENSTransactor) SetTTL(opts *bind.TransactOpts, node [32]byte, ttl uint64) (*types.Transaction, error) { return _ENS.contract.Transact(opts, "setTTL", node, ttl) } // SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. // -// Solidity: function setTTL(node bytes32, ttl uint64) returns() +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() func (_ENS *ENSSession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { return _ENS.Contract.SetTTL(&_ENS.TransactOpts, node, ttl) } // SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. // -// Solidity: function setTTL(node bytes32, ttl uint64) returns() +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() func (_ENS *ENSTransactorSession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { return _ENS.Contract.SetTTL(&_ENS.TransactOpts, node, ttl) } @@ -392,7 +405,7 @@ func (it *ENSNewOwnerIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *ENSNewOwnerIterator) Error() error { return it.fail } @@ -414,7 +427,7 @@ type ENSNewOwner struct { // FilterNewOwner is a free log retrieval operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. // -// Solidity: event NewOwner(node indexed bytes32, label indexed bytes32, owner address) +// Solidity: event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner) func (_ENS *ENSFilterer) FilterNewOwner(opts *bind.FilterOpts, node [][32]byte, label [][32]byte) (*ENSNewOwnerIterator, error) { var nodeRule []interface{} @@ -435,7 +448,7 @@ func (_ENS *ENSFilterer) FilterNewOwner(opts *bind.FilterOpts, node [][32]byte, // WatchNewOwner is a free log subscription operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. // -// Solidity: event NewOwner(node indexed bytes32, label indexed bytes32, owner address) +// Solidity: event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner) func (_ENS *ENSFilterer) WatchNewOwner(opts *bind.WatchOpts, sink chan<- *ENSNewOwner, node [][32]byte, label [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -534,7 +547,7 @@ func (it *ENSNewResolverIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *ENSNewResolverIterator) Error() error { return it.fail } @@ -555,7 +568,7 @@ type ENSNewResolver struct { // FilterNewResolver is a free log retrieval operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. // -// Solidity: event NewResolver(node indexed bytes32, resolver address) +// Solidity: event NewResolver(bytes32 indexed node, address resolver) func (_ENS *ENSFilterer) FilterNewResolver(opts *bind.FilterOpts, node [][32]byte) (*ENSNewResolverIterator, error) { var nodeRule []interface{} @@ -572,7 +585,7 @@ func (_ENS *ENSFilterer) FilterNewResolver(opts *bind.FilterOpts, node [][32]byt // WatchNewResolver is a free log subscription operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. // -// Solidity: event NewResolver(node indexed bytes32, resolver address) +// Solidity: event NewResolver(bytes32 indexed node, address resolver) func (_ENS *ENSFilterer) WatchNewResolver(opts *bind.WatchOpts, sink chan<- *ENSNewResolver, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -667,7 +680,7 @@ func (it *ENSNewTTLIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *ENSNewTTLIterator) Error() error { return it.fail } @@ -682,13 +695,13 @@ func (it *ENSNewTTLIterator) Close() error { // ENSNewTTL represents a NewTTL event raised by the ENS contract. type ENSNewTTL struct { Node [32]byte - TTL uint64 + Ttl uint64 Raw types.Log // Blockchain specific contextual infos } // FilterNewTTL is a free log retrieval operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. // -// Solidity: event NewTTL(node indexed bytes32, ttl uint64) +// Solidity: event NewTTL(bytes32 indexed node, uint64 ttl) func (_ENS *ENSFilterer) FilterNewTTL(opts *bind.FilterOpts, node [][32]byte) (*ENSNewTTLIterator, error) { var nodeRule []interface{} @@ -705,7 +718,7 @@ func (_ENS *ENSFilterer) FilterNewTTL(opts *bind.FilterOpts, node [][32]byte) (* // WatchNewTTL is a free log subscription operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. // -// Solidity: event NewTTL(node indexed bytes32, ttl uint64) +// Solidity: event NewTTL(bytes32 indexed node, uint64 ttl) func (_ENS *ENSFilterer) WatchNewTTL(opts *bind.WatchOpts, sink chan<- *ENSNewTTL, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -800,7 +813,7 @@ func (it *ENSTransferIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *ENSTransferIterator) Error() error { return it.fail } @@ -821,7 +834,7 @@ type ENSTransfer struct { // FilterTransfer is a free log retrieval operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. // -// Solidity: event Transfer(node indexed bytes32, owner address) +// Solidity: event Transfer(bytes32 indexed node, address owner) func (_ENS *ENSFilterer) FilterTransfer(opts *bind.FilterOpts, node [][32]byte) (*ENSTransferIterator, error) { var nodeRule []interface{} @@ -838,7 +851,7 @@ func (_ENS *ENSFilterer) FilterTransfer(opts *bind.FilterOpts, node [][32]byte) // WatchTransfer is a free log subscription operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. // -// Solidity: event Transfer(node indexed bytes32, owner address) +// Solidity: event Transfer(bytes32 indexed node, address owner) func (_ENS *ENSFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ENSTransfer, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ensregistry.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ensregistry.go new file mode 100644 index 00000000..ca89a87b --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/ensregistry.go @@ -0,0 +1,892 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// ENSRegistryABI is the input ABI used to generate the binding from. +const ENSRegistryABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}]" + +// ENSRegistryBin is the compiled bytecode used for deploying new contracts. +const ENSRegistryBin = `0x608060405234801561001057600080fd5b5060008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054600160a060020a0319163317905561059d806100596000396000f3fe6080604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630178b8bf811461008757806302571be3146100cd57806306ab5923146100f757806314ab90381461013857806316a25cbd146101725780631896f70a146101b95780635b0fc9c3146101f2575b600080fd5b34801561009357600080fd5b506100b1600480360360208110156100aa57600080fd5b503561022b565b60408051600160a060020a039092168252519081900360200190f35b3480156100d957600080fd5b506100b1600480360360208110156100f057600080fd5b5035610249565b34801561010357600080fd5b506101366004803603606081101561011a57600080fd5b5080359060208101359060400135600160a060020a0316610264565b005b34801561014457600080fd5b506101366004803603604081101561015b57600080fd5b508035906020013567ffffffffffffffff1661032e565b34801561017e57600080fd5b5061019c6004803603602081101561019557600080fd5b50356103f7565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156101c557600080fd5b50610136600480360360408110156101dc57600080fd5b5080359060200135600160a060020a031661042e565b3480156101fe57600080fd5b506101366004803603604081101561021557600080fd5b5080359060200135600160a060020a03166104d1565b600090815260208190526040902060010154600160a060020a031690565b600090815260208190526040902054600160a060020a031690565b6000838152602081905260409020548390600160a060020a0316331461028957600080fd5b6040805160208082018790528183018690528251808303840181526060830180855281519190920120600160a060020a0386169091529151859187917fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829181900360800190a36000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039390931692909217909155505050565b6000828152602081905260409020548290600160a060020a0316331461035357600080fd5b6040805167ffffffffffffffff84168152905184917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68919081900360200190a250600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b6000828152602081905260409020548290600160a060020a0316331461045357600080fd5b60408051600160a060020a0384168152905184917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0919081900360200190a250600091825260208290526040909120600101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b6000828152602081905260409020548290600160a060020a031633146104f657600080fd5b60408051600160a060020a0384168152905184917fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266919081900360200190a250600091825260208290526040909120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117905556fea165627a7a723058208be97eda88107945616fbd44aa4f2f1ce188b1a930a4bc5f8e1fb7924395d1650029` + +// DeployENSRegistry deploys a new Ethereum contract, binding an instance of ENSRegistry to it. +func DeployENSRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ENSRegistry, error) { + parsed, err := abi.JSON(strings.NewReader(ENSRegistryABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ENSRegistryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ENSRegistry{ENSRegistryCaller: ENSRegistryCaller{contract: contract}, ENSRegistryTransactor: ENSRegistryTransactor{contract: contract}, ENSRegistryFilterer: ENSRegistryFilterer{contract: contract}}, nil +} + +// ENSRegistry is an auto generated Go binding around an Ethereum contract. +type ENSRegistry struct { + ENSRegistryCaller // Read-only binding to the contract + ENSRegistryTransactor // Write-only binding to the contract + ENSRegistryFilterer // Log filterer for contract events +} + +// ENSRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ENSRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ENSRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ENSRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ENSRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ENSRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ENSRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ENSRegistrySession struct { + Contract *ENSRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ENSRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ENSRegistryCallerSession struct { + Contract *ENSRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ENSRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ENSRegistryTransactorSession struct { + Contract *ENSRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ENSRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ENSRegistryRaw struct { + Contract *ENSRegistry // Generic contract binding to access the raw methods on +} + +// ENSRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ENSRegistryCallerRaw struct { + Contract *ENSRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// ENSRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ENSRegistryTransactorRaw struct { + Contract *ENSRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewENSRegistry creates a new instance of ENSRegistry, bound to a specific deployed contract. +func NewENSRegistry(address common.Address, backend bind.ContractBackend) (*ENSRegistry, error) { + contract, err := bindENSRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ENSRegistry{ENSRegistryCaller: ENSRegistryCaller{contract: contract}, ENSRegistryTransactor: ENSRegistryTransactor{contract: contract}, ENSRegistryFilterer: ENSRegistryFilterer{contract: contract}}, nil +} + +// NewENSRegistryCaller creates a new read-only instance of ENSRegistry, bound to a specific deployed contract. +func NewENSRegistryCaller(address common.Address, caller bind.ContractCaller) (*ENSRegistryCaller, error) { + contract, err := bindENSRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ENSRegistryCaller{contract: contract}, nil +} + +// NewENSRegistryTransactor creates a new write-only instance of ENSRegistry, bound to a specific deployed contract. +func NewENSRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ENSRegistryTransactor, error) { + contract, err := bindENSRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ENSRegistryTransactor{contract: contract}, nil +} + +// NewENSRegistryFilterer creates a new log filterer instance of ENSRegistry, bound to a specific deployed contract. +func NewENSRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ENSRegistryFilterer, error) { + contract, err := bindENSRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ENSRegistryFilterer{contract: contract}, nil +} + +// bindENSRegistry binds a generic wrapper to an already deployed contract. +func bindENSRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ENSRegistryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ENSRegistry *ENSRegistryRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _ENSRegistry.Contract.ENSRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ENSRegistry *ENSRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ENSRegistry.Contract.ENSRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ENSRegistry *ENSRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ENSRegistry.Contract.ENSRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ENSRegistry *ENSRegistryCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _ENSRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ENSRegistry *ENSRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ENSRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ENSRegistry *ENSRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ENSRegistry.Contract.contract.Transact(opts, method, params...) +} + +// Owner is a free data retrieval call binding the contract method 0x02571be3. +// +// Solidity: function owner(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistryCaller) Owner(opts *bind.CallOpts, node [32]byte) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _ENSRegistry.contract.Call(opts, out, "owner", node) + return *ret0, err +} + +// Owner is a free data retrieval call binding the contract method 0x02571be3. +// +// Solidity: function owner(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistrySession) Owner(node [32]byte) (common.Address, error) { + return _ENSRegistry.Contract.Owner(&_ENSRegistry.CallOpts, node) +} + +// Owner is a free data retrieval call binding the contract method 0x02571be3. +// +// Solidity: function owner(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistryCallerSession) Owner(node [32]byte) (common.Address, error) { + return _ENSRegistry.Contract.Owner(&_ENSRegistry.CallOpts, node) +} + +// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. +// +// Solidity: function resolver(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistryCaller) Resolver(opts *bind.CallOpts, node [32]byte) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _ENSRegistry.contract.Call(opts, out, "resolver", node) + return *ret0, err +} + +// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. +// +// Solidity: function resolver(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistrySession) Resolver(node [32]byte) (common.Address, error) { + return _ENSRegistry.Contract.Resolver(&_ENSRegistry.CallOpts, node) +} + +// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. +// +// Solidity: function resolver(bytes32 node) constant returns(address) +func (_ENSRegistry *ENSRegistryCallerSession) Resolver(node [32]byte) (common.Address, error) { + return _ENSRegistry.Contract.Resolver(&_ENSRegistry.CallOpts, node) +} + +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. +// +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENSRegistry *ENSRegistryCaller) Ttl(opts *bind.CallOpts, node [32]byte) (uint64, error) { + var ( + ret0 = new(uint64) + ) + out := ret0 + err := _ENSRegistry.contract.Call(opts, out, "ttl", node) + return *ret0, err +} + +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. +// +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENSRegistry *ENSRegistrySession) Ttl(node [32]byte) (uint64, error) { + return _ENSRegistry.Contract.Ttl(&_ENSRegistry.CallOpts, node) +} + +// Ttl is a free data retrieval call binding the contract method 0x16a25cbd. +// +// Solidity: function ttl(bytes32 node) constant returns(uint64) +func (_ENSRegistry *ENSRegistryCallerSession) Ttl(node [32]byte) (uint64, error) { + return _ENSRegistry.Contract.Ttl(&_ENSRegistry.CallOpts, node) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. +// +// Solidity: function setOwner(bytes32 node, address owner) returns() +func (_ENSRegistry *ENSRegistryTransactor) SetOwner(opts *bind.TransactOpts, node [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.contract.Transact(opts, "setOwner", node, owner) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. +// +// Solidity: function setOwner(bytes32 node, address owner) returns() +func (_ENSRegistry *ENSRegistrySession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetOwner(&_ENSRegistry.TransactOpts, node, owner) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. +// +// Solidity: function setOwner(bytes32 node, address owner) returns() +func (_ENSRegistry *ENSRegistryTransactorSession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetOwner(&_ENSRegistry.TransactOpts, node, owner) +} + +// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. +// +// Solidity: function setResolver(bytes32 node, address resolver) returns() +func (_ENSRegistry *ENSRegistryTransactor) SetResolver(opts *bind.TransactOpts, node [32]byte, resolver common.Address) (*types.Transaction, error) { + return _ENSRegistry.contract.Transact(opts, "setResolver", node, resolver) +} + +// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. +// +// Solidity: function setResolver(bytes32 node, address resolver) returns() +func (_ENSRegistry *ENSRegistrySession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetResolver(&_ENSRegistry.TransactOpts, node, resolver) +} + +// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. +// +// Solidity: function setResolver(bytes32 node, address resolver) returns() +func (_ENSRegistry *ENSRegistryTransactorSession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetResolver(&_ENSRegistry.TransactOpts, node, resolver) +} + +// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. +// +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() +func (_ENSRegistry *ENSRegistryTransactor) SetSubnodeOwner(opts *bind.TransactOpts, node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.contract.Transact(opts, "setSubnodeOwner", node, label, owner) +} + +// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. +// +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() +func (_ENSRegistry *ENSRegistrySession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetSubnodeOwner(&_ENSRegistry.TransactOpts, node, label, owner) +} + +// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. +// +// Solidity: function setSubnodeOwner(bytes32 node, bytes32 label, address owner) returns() +func (_ENSRegistry *ENSRegistryTransactorSession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetSubnodeOwner(&_ENSRegistry.TransactOpts, node, label, owner) +} + +// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. +// +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() +func (_ENSRegistry *ENSRegistryTransactor) SetTTL(opts *bind.TransactOpts, node [32]byte, ttl uint64) (*types.Transaction, error) { + return _ENSRegistry.contract.Transact(opts, "setTTL", node, ttl) +} + +// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. +// +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() +func (_ENSRegistry *ENSRegistrySession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetTTL(&_ENSRegistry.TransactOpts, node, ttl) +} + +// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. +// +// Solidity: function setTTL(bytes32 node, uint64 ttl) returns() +func (_ENSRegistry *ENSRegistryTransactorSession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { + return _ENSRegistry.Contract.SetTTL(&_ENSRegistry.TransactOpts, node, ttl) +} + +// ENSRegistryNewOwnerIterator is returned from FilterNewOwner and is used to iterate over the raw logs and unpacked data for NewOwner events raised by the ENSRegistry contract. +type ENSRegistryNewOwnerIterator struct { + Event *ENSRegistryNewOwner // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ENSRegistryNewOwnerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ENSRegistryNewOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ENSRegistryNewOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ENSRegistryNewOwner represents a NewOwner event raised by the ENSRegistry contract. +type ENSRegistryNewOwner struct { + Node [32]byte + Label [32]byte + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewOwner is a free log retrieval operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. +// +// Solidity: event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner) +func (_ENSRegistry *ENSRegistryFilterer) FilterNewOwner(opts *bind.FilterOpts, node [][32]byte, label [][32]byte) (*ENSRegistryNewOwnerIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var labelRule []interface{} + for _, labelItem := range label { + labelRule = append(labelRule, labelItem) + } + + logs, sub, err := _ENSRegistry.contract.FilterLogs(opts, "NewOwner", nodeRule, labelRule) + if err != nil { + return nil, err + } + return &ENSRegistryNewOwnerIterator{contract: _ENSRegistry.contract, event: "NewOwner", logs: logs, sub: sub}, nil +} + +// WatchNewOwner is a free log subscription operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. +// +// Solidity: event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner) +func (_ENSRegistry *ENSRegistryFilterer) WatchNewOwner(opts *bind.WatchOpts, sink chan<- *ENSRegistryNewOwner, node [][32]byte, label [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var labelRule []interface{} + for _, labelItem := range label { + labelRule = append(labelRule, labelItem) + } + + logs, sub, err := _ENSRegistry.contract.WatchLogs(opts, "NewOwner", nodeRule, labelRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ENSRegistryNewOwner) + if err := _ENSRegistry.contract.UnpackLog(event, "NewOwner", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ENSRegistryNewResolverIterator is returned from FilterNewResolver and is used to iterate over the raw logs and unpacked data for NewResolver events raised by the ENSRegistry contract. +type ENSRegistryNewResolverIterator struct { + Event *ENSRegistryNewResolver // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ENSRegistryNewResolverIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewResolver) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewResolver) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ENSRegistryNewResolverIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ENSRegistryNewResolverIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ENSRegistryNewResolver represents a NewResolver event raised by the ENSRegistry contract. +type ENSRegistryNewResolver struct { + Node [32]byte + Resolver common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewResolver is a free log retrieval operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. +// +// Solidity: event NewResolver(bytes32 indexed node, address resolver) +func (_ENSRegistry *ENSRegistryFilterer) FilterNewResolver(opts *bind.FilterOpts, node [][32]byte) (*ENSRegistryNewResolverIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.FilterLogs(opts, "NewResolver", nodeRule) + if err != nil { + return nil, err + } + return &ENSRegistryNewResolverIterator{contract: _ENSRegistry.contract, event: "NewResolver", logs: logs, sub: sub}, nil +} + +// WatchNewResolver is a free log subscription operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. +// +// Solidity: event NewResolver(bytes32 indexed node, address resolver) +func (_ENSRegistry *ENSRegistryFilterer) WatchNewResolver(opts *bind.WatchOpts, sink chan<- *ENSRegistryNewResolver, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.WatchLogs(opts, "NewResolver", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ENSRegistryNewResolver) + if err := _ENSRegistry.contract.UnpackLog(event, "NewResolver", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ENSRegistryNewTTLIterator is returned from FilterNewTTL and is used to iterate over the raw logs and unpacked data for NewTTL events raised by the ENSRegistry contract. +type ENSRegistryNewTTLIterator struct { + Event *ENSRegistryNewTTL // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ENSRegistryNewTTLIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewTTL) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ENSRegistryNewTTL) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ENSRegistryNewTTLIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ENSRegistryNewTTLIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ENSRegistryNewTTL represents a NewTTL event raised by the ENSRegistry contract. +type ENSRegistryNewTTL struct { + Node [32]byte + Ttl uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewTTL is a free log retrieval operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. +// +// Solidity: event NewTTL(bytes32 indexed node, uint64 ttl) +func (_ENSRegistry *ENSRegistryFilterer) FilterNewTTL(opts *bind.FilterOpts, node [][32]byte) (*ENSRegistryNewTTLIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.FilterLogs(opts, "NewTTL", nodeRule) + if err != nil { + return nil, err + } + return &ENSRegistryNewTTLIterator{contract: _ENSRegistry.contract, event: "NewTTL", logs: logs, sub: sub}, nil +} + +// WatchNewTTL is a free log subscription operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. +// +// Solidity: event NewTTL(bytes32 indexed node, uint64 ttl) +func (_ENSRegistry *ENSRegistryFilterer) WatchNewTTL(opts *bind.WatchOpts, sink chan<- *ENSRegistryNewTTL, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.WatchLogs(opts, "NewTTL", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ENSRegistryNewTTL) + if err := _ENSRegistry.contract.UnpackLog(event, "NewTTL", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ENSRegistryTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ENSRegistry contract. +type ENSRegistryTransferIterator struct { + Event *ENSRegistryTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ENSRegistryTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ENSRegistryTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ENSRegistryTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ENSRegistryTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ENSRegistryTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ENSRegistryTransfer represents a Transfer event raised by the ENSRegistry contract. +type ENSRegistryTransfer struct { + Node [32]byte + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. +// +// Solidity: event Transfer(bytes32 indexed node, address owner) +func (_ENSRegistry *ENSRegistryFilterer) FilterTransfer(opts *bind.FilterOpts, node [][32]byte) (*ENSRegistryTransferIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.FilterLogs(opts, "Transfer", nodeRule) + if err != nil { + return nil, err + } + return &ENSRegistryTransferIterator{contract: _ENSRegistry.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. +// +// Solidity: event Transfer(bytes32 indexed node, address owner) +func (_ENSRegistry *ENSRegistryFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ENSRegistryTransfer, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _ENSRegistry.contract.WatchLogs(opts, "Transfer", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ENSRegistryTransfer) + if err := _ENSRegistry.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/fifsregistrar.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/fifsregistrar.go index a08380ad..97263cbe 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/fifsregistrar.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/fifsregistrar.go @@ -4,19 +4,34 @@ package contract import ( + "math/big" "strings" + ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription ) // FIFSRegistrarABI is the input ABI used to generate the binding from. -const FIFSRegistrarABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"subnode\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]" +const FIFSRegistrarABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]" // FIFSRegistrarBin is the compiled bytecode used for deploying new contracts. -const FIFSRegistrarBin = `0x6060604052341561000f57600080fd5b604051604080610224833981016040528080519190602001805160008054600160a060020a03909516600160a060020a03199095169490941790935550506001556101c58061005f6000396000f3006060604052600436106100275763ffffffff60e060020a600035041663d22057a9811461002c575b600080fd5b341561003757600080fd5b61004e600435600160a060020a0360243516610050565b005b816000806001548360405191825260208201526040908101905190819003902060008054919350600160a060020a03909116906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156100c857600080fd5b6102c65a03f115156100d957600080fd5b5050506040518051915050600160a060020a0381161580159061010e575033600160a060020a031681600160a060020a031614155b1561011857600080fd5b600054600154600160a060020a03909116906306ab592390878760405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b151561017e57600080fd5b6102c65a03f1151561018f57600080fd5b50505050505050505600a165627a7a723058206fb963cb168d5e3a51af12cd6bb23e324dbd32dd4954f43653ba27e66b68ea650029` +const FIFSRegistrarBin = `0x608060405234801561001057600080fd5b506040516040806102cc8339810180604052604081101561003057600080fd5b50805160209091015160008054600160a060020a031916600160a060020a0390931692909217825560015561026190819061006b90396000f3fe6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663d22057a98114610045575b600080fd5b34801561005157600080fd5b5061008b6004803603604081101561006857600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661008d565b005b6000805460015460408051602080820193909352808201879052815180820383018152606082018084528151918501919091207f02571be3000000000000000000000000000000000000000000000000000000009091526064820152905186949373ffffffffffffffffffffffffffffffffffffffff16926302571be39260848082019391829003018186803b15801561012657600080fd5b505afa15801561013a573d6000803e3d6000fd5b505050506040513d602081101561015057600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116158061018c575073ffffffffffffffffffffffffffffffffffffffff811633145b151561019757600080fd5b60008054600154604080517f06ab592300000000000000000000000000000000000000000000000000000000815260048101929092526024820188905273ffffffffffffffffffffffffffffffffffffffff878116604484015290519216926306ab59239260648084019382900301818387803b15801561021757600080fd5b505af115801561022b573d6000803e3d6000fd5b505050505050505056fea165627a7a723058200f21424d48c6fc6f2bc79f5b36b3a0e3067a97d4ce084ab0e0f9106303a3ee520029` // DeployFIFSRegistrar deploys a new Ethereum contract, binding an instance of FIFSRegistrar to it. func DeployFIFSRegistrar(auth *bind.TransactOpts, backend bind.ContractBackend, ensAddr common.Address, node [32]byte) (common.Address, *types.Transaction, *FIFSRegistrar, error) { @@ -175,21 +190,21 @@ func (_FIFSRegistrar *FIFSRegistrarTransactorRaw) Transact(opts *bind.TransactOp // Register is a paid mutator transaction binding the contract method 0xd22057a9. // -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarTransactor) Register(opts *bind.TransactOpts, subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.contract.Transact(opts, "register", subnode, owner) +// Solidity: function register(bytes32 label, address owner) returns() +func (_FIFSRegistrar *FIFSRegistrarTransactor) Register(opts *bind.TransactOpts, label [32]byte, owner common.Address) (*types.Transaction, error) { + return _FIFSRegistrar.contract.Transact(opts, "register", label, owner) } // Register is a paid mutator transaction binding the contract method 0xd22057a9. // -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarSession) Register(subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, subnode, owner) +// Solidity: function register(bytes32 label, address owner) returns() +func (_FIFSRegistrar *FIFSRegistrarSession) Register(label [32]byte, owner common.Address) (*types.Transaction, error) { + return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, label, owner) } // Register is a paid mutator transaction binding the contract method 0xd22057a9. // -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarTransactorSession) Register(subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, subnode, owner) +// Solidity: function register(bytes32 label, address owner) returns() +func (_FIFSRegistrar *FIFSRegistrarTransactorSession) Register(label [32]byte, owner common.Address) (*types.Transaction, error) { + return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, label, owner) } diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/publicresolver.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/publicresolver.go index c567d588..01bfce5e 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/publicresolver.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/contract/publicresolver.go @@ -15,11 +15,23 @@ import ( "github.com/ethereum/go-ethereum/event" ) +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + // PublicResolverABI is the input ABI used to generate the binding from. -const PublicResolverABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"content\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"ret\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"setContent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"ContentChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"}]" +const PublicResolverABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contenthash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"}]" // PublicResolverBin is the compiled bytecode used for deploying new contracts. -const PublicResolverBin = `0x6060604052341561000f57600080fd5b6040516020806111b28339810160405280805160008054600160a060020a03909216600160a060020a0319909216919091179055505061115e806100546000396000f3006060604052600436106100ab5763ffffffff60e060020a60003504166301ffc9a781146100b057806310f13a8c146100e45780632203ab561461017e57806329cd62ea146102155780632dff6941146102315780633b3b57de1461025957806359d1d43c1461028b578063623195b014610358578063691f3431146103b457806377372213146103ca578063c3d014d614610420578063c869023314610439578063d5fa2b0014610467575b600080fd5b34156100bb57600080fd5b6100d0600160e060020a031960043516610489565b604051901515815260200160405180910390f35b34156100ef57600080fd5b61017c600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f695505050505050565b005b341561018957600080fd5b610197600435602435610807565b60405182815260406020820181815290820183818151815260200191508051906020019080838360005b838110156101d95780820151838201526020016101c1565b50505050905090810190601f1680156102065780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561022057600080fd5b61017c600435602435604435610931565b341561023c57600080fd5b610247600435610a30565b60405190815260200160405180910390f35b341561026457600080fd5b61026f600435610a46565b604051600160a060020a03909116815260200160405180910390f35b341561029657600080fd5b6102e1600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a6195505050505050565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561031d578082015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036357600080fd5b61017c600480359060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b8095505050505050565b34156103bf57600080fd5b6102e1600435610c7c565b34156103d557600080fd5b61017c600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610d4295505050505050565b341561042b57600080fd5b61017c600435602435610e8c565b341561044457600080fd5b61044f600435610f65565b60405191825260208201526040908101905180910390f35b341561047257600080fd5b61017c600435600160a060020a0360243516610f82565b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104ec5750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806105205750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806105545750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b806105885750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806105bc5750600160e060020a031982167f59d1d43c00000000000000000000000000000000000000000000000000000000145b806105f05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561064f57600080fd5b6102c65a03f1151561066057600080fd5b50505060405180519050600160a060020a031614151561067f57600080fd5b6000848152600160205260409081902083916005909101908590518082805190602001908083835b602083106106c65780518252601f1990920191602091820191016106a7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161070a929160200190611085565b50826040518082805190602001908083835b6020831061073b5780518252601f19909201916020918201910161071c565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051908190039020847fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508560405160208082528190810183818151815260200191508051906020019080838360005b838110156107c75780820151838201526020016107af565b50505050905090810190601f1680156107f45780820380516001836020036101000a031916815260200191505b509250505060405180910390a350505050565b6000610811611103565b60008481526001602081905260409091209092505b838311610924578284161580159061085f5750600083815260068201602052604081205460026000196101006001841615020190911604115b15610919578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b50505050509150610929565b600290920291610826565b600092505b509250929050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561098a57600080fd5b6102c65a03f1151561099b57600080fd5b50505060405180519050600160a060020a03161415156109ba57600080fd5b6040805190810160409081528482526020808301859052600087815260019091522060030181518155602082015160019091015550837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405191825260208201526040908101905180910390a250505050565b6000908152600160208190526040909120015490565b600090815260016020526040902054600160a060020a031690565b610a69611103565b60008381526001602052604090819020600501908390518082805190602001908083835b60208310610aac5780518252601f199092019160209182019101610a8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905092915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bd957600080fd5b6102c65a03f11515610bea57600080fd5b50505060405180519050600160a060020a0316141515610c0957600080fd5b6000198301831615610c1a57600080fd5b60008481526001602090815260408083208684526006019091529020828051610c47929160200190611085565b5082847faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b610c84611103565b6001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d365780601f10610d0b57610100808354040283529160200191610d36565b820191906000526020600020905b815481529060010190602001808311610d1957829003601f168201915b50505050509050919050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d9b57600080fd5b6102c65a03f11515610dac57600080fd5b50505060405180519050600160a060020a0316141515610dcb57600080fd5b6000838152600160205260409020600201828051610ded929160200190611085565b50827fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78360405160208082528190810183818151815260200191508051906020019080838360005b83811015610e4d578082015183820152602001610e35565b50505050905090810190601f168015610e7a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ee557600080fd5b6102c65a03f11515610ef657600080fd5b50505060405180519050600160a060020a0316141515610f1557600080fd5b6000838152600160208190526040918290200183905583907f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc9084905190815260200160405180910390a2505050565b600090815260016020526040902060038101546004909101549091565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610fdb57600080fd5b6102c65a03f11515610fec57600080fd5b50505060405180519050600160a060020a031614151561100b57600080fd5b60008381526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851617905583907f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd290849051600160a060020a03909116815260200160405180910390a2505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110c657805160ff19168380011785556110f3565b828001600101855582156110f3579182015b828111156110f35782518255916020019190600101906110d8565b506110ff929150611115565b5090565b60206040519081016040526000815290565b61112f91905b808211156110ff576000815560010161111b565b905600a165627a7a723058201ecacbc445b9fbcd91b0ab164389f69d7283b856883bc7437eeed1008345a4920029` +const PublicResolverBin = `0x608060405234801561001057600080fd5b506040516020806112ce8339810180604052602081101561003057600080fd5b505160008054600160a060020a03909216600160a060020a031990921691909117905561126c806100626000396000f3fe6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100c957806310f13a8c146101115780632203ab56146101e957806329cd62ea14610298578063304e6ade146102ce5780633b3b57de1461035257806359d1d43c14610398578063623195b014610491578063691f34311461051a5780637737221314610544578063bc1c58d1146105c8578063c8690233146105f2578063d5fa2b0014610635575b600080fd5b3480156100d557600080fd5b506100fd600480360360208110156100ec57600080fd5b5035600160e060020a03191661066e565b604080519115158252519081900360200190f35b34801561011d57600080fd5b506101e76004803603606081101561013457600080fd5b8135919081019060408101602082013564010000000081111561015657600080fd5b82018360208201111561016857600080fd5b8035906020019184600183028401116401000000008311171561018a57600080fd5b9193909290916020810190356401000000008111156101a857600080fd5b8201836020820111156101ba57600080fd5b803590602001918460018302840111640100000000831117156101dc57600080fd5b5090925090506107db565b005b3480156101f557600080fd5b506102196004803603604081101561020c57600080fd5b508035906020013561094d565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561025c578181015183820152602001610244565b50505050905090810190601f1680156102895780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156102a457600080fd5b506101e7600480360360608110156102bb57600080fd5b5080359060208101359060400135610a65565b3480156102da57600080fd5b506101e7600480360360408110156102f157600080fd5b8135919081019060408101602082013564010000000081111561031357600080fd5b82018360208201111561032557600080fd5b8035906020019184600183028401116401000000008311171561034757600080fd5b509092509050610b65565b34801561035e57600080fd5b5061037c6004803603602081101561037557600080fd5b5035610c7b565b60408051600160a060020a039092168252519081900360200190f35b3480156103a457600080fd5b5061041c600480360360408110156103bb57600080fd5b813591908101906040810160208201356401000000008111156103dd57600080fd5b8201836020820111156103ef57600080fd5b8035906020019184600183028401116401000000008311171561041157600080fd5b509092509050610c96565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561045657818101518382015260200161043e565b50505050905090810190601f1680156104835780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049d57600080fd5b506101e7600480360360608110156104b457600080fd5b8135916020810135918101906060810160408201356401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184600183028401116401000000008311171561050f57600080fd5b509092509050610d60565b34801561052657600080fd5b5061041c6004803603602081101561053d57600080fd5b5035610e5f565b34801561055057600080fd5b506101e76004803603604081101561056757600080fd5b8135919081019060408101602082013564010000000081111561058957600080fd5b82018360208201111561059b57600080fd5b803590602001918460018302840111640100000000831117156105bd57600080fd5b509092509050610f01565b3480156105d457600080fd5b5061041c600480360360208110156105eb57600080fd5b5035611018565b3480156105fe57600080fd5b5061061c6004803603602081101561061557600080fd5b5035611084565b6040805192835260208301919091528051918290030190f35b34801561064157600080fd5b506101e76004803603604081101561065857600080fd5b5080359060200135600160a060020a03166110a1565b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806106d15750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806107055750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b806107395750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b8061076d5750600160e060020a031982167f59d1d43c00000000000000000000000000000000000000000000000000000000145b806107a15750600160e060020a031982167fbc1c58d100000000000000000000000000000000000000000000000000000000145b806107d55750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000546040805160e060020a6302571be302815260048101889052905187923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b15801561082e57600080fd5b505afa158015610842573d6000803e3d6000fd5b505050506040513d602081101561085857600080fd5b5051600160a060020a03161461086d57600080fd5b8282600160008981526020019081526020016000206004018787604051808383808284378083019250505092505050908152602001604051809103902091906108b79291906111a5565b50857fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868688886040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a2505050505050565b600082815260016020819052604082206060915b848111610a53578085161580159061099a5750600081815260058301602052604081205460026000196101006001841615020190911604115b15610a4b57600081815260058301602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845284939192839190830182828015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b50505050509050935093505050610a5e565b600202610961565b506000925060609150505b9250929050565b6000546040805160e060020a6302571be302815260048101869052905185923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b158015610ab857600080fd5b505afa158015610acc573d6000803e3d6000fd5b505050506040513d6020811015610ae257600080fd5b5051600160a060020a031614610af757600080fd5b604080518082018252848152602080820185815260008881526001835284902092516002840155516003909201919091558151858152908101849052815186927f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46928290030190a250505050565b6000546040805160e060020a6302571be302815260048101869052905185923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b158015610bb857600080fd5b505afa158015610bcc573d6000803e3d6000fd5b505050506040513d6020811015610be257600080fd5b5051600160a060020a031614610bf757600080fd5b6000848152600160205260409020610c139060060184846111a5565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a250505050565b600090815260016020526040902054600160a060020a031690565b6060600160008581526020019081526020016000206004018383604051808383808284379190910194855250506040805160209481900385018120805460026001821615610100026000190190911604601f81018790048702830187019093528282529094909350909150830182828015610d525780601f10610d2757610100808354040283529160200191610d52565b820191906000526020600020905b815481529060010190602001808311610d3557829003601f168201915b505050505090509392505050565b6000546040805160e060020a6302571be302815260048101879052905186923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b158015610db357600080fd5b505afa158015610dc7573d6000803e3d6000fd5b505050506040513d6020811015610ddd57600080fd5b5051600160a060020a031614610df257600080fd5b6000198401841615610e0357600080fd5b60008581526001602090815260408083208784526005019091529020610e2a9084846111a5565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35050505050565b600081815260016020818152604092839020820180548451600294821615610100026000190190911693909304601f81018390048302840183019094528383526060939091830182828015610ef55780601f10610eca57610100808354040283529160200191610ef5565b820191906000526020600020905b815481529060010190602001808311610ed857829003601f168201915b50505050509050919050565b6000546040805160e060020a6302571be302815260048101869052905185923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b158015610f5457600080fd5b505afa158015610f68573d6000803e3d6000fd5b505050506040513d6020811015610f7e57600080fd5b5051600160a060020a031614610f9357600080fd5b6000848152600160208190526040909120610fb0910184846111a5565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a250505050565b60008181526001602081815260409283902060060180548451600294821615610100026000190190911693909304601f81018390048302840183019094528383526060939091830182828015610ef55780601f10610eca57610100808354040283529160200191610ef5565b600090815260016020526040902060028101546003909101549091565b6000546040805160e060020a6302571be302815260048101859052905184923392600160a060020a03909116916302571be391602480820192602092909190829003018186803b1580156110f457600080fd5b505afa158015611108573d6000803e3d6000fd5b505050506040513d602081101561111e57600080fd5b5051600160a060020a03161461113357600080fd5b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091558251908152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a2505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106111e65782800160ff19823516178555611213565b82800160010185558215611213579182015b828111156112135782358255916020019190600101906111f8565b5061121f929150611223565b5090565b61123d91905b8082111561121f5760008155600101611229565b9056fea165627a7a7230582047f310fc746ab2e282cf63ba794d20abb361f9284c6c5f2a2e26151e5b7fab600029` // DeployPublicResolver deploys a new Ethereum contract, binding an instance of PublicResolver to it. func DeployPublicResolver(auth *bind.TransactOpts, backend bind.ContractBackend, ensAddr common.Address) (common.Address, *types.Transaction, *PublicResolver, error) { @@ -178,43 +190,37 @@ func (_PublicResolver *PublicResolverTransactorRaw) Transact(opts *bind.Transact // ABI is a free data retrieval call binding the contract method 0x2203ab56. // -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverCaller) ABI(opts *bind.CallOpts, node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { - ret := new(struct { - ContentType *big.Int - Data []byte - }) - out := ret +// Solidity: function ABI(bytes32 node, uint256 contentTypes) constant returns(uint256, bytes) +func (_PublicResolver *PublicResolverCaller) ABI(opts *bind.CallOpts, node [32]byte, contentTypes *big.Int) (*big.Int, []byte, error) { + var ( + ret0 = new(*big.Int) + ret1 = new([]byte) + ) + out := &[]interface{}{ + ret0, + ret1, + } err := _PublicResolver.contract.Call(opts, out, "ABI", node, contentTypes) - return *ret, err + return *ret0, *ret1, err } // ABI is a free data retrieval call binding the contract method 0x2203ab56. // -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverSession) ABI(node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { +// Solidity: function ABI(bytes32 node, uint256 contentTypes) constant returns(uint256, bytes) +func (_PublicResolver *PublicResolverSession) ABI(node [32]byte, contentTypes *big.Int) (*big.Int, []byte, error) { return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) } // ABI is a free data retrieval call binding the contract method 0x2203ab56. // -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverCallerSession) ABI(node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { +// Solidity: function ABI(bytes32 node, uint256 contentTypes) constant returns(uint256, bytes) +func (_PublicResolver *PublicResolverCallerSession) ABI(node [32]byte, contentTypes *big.Int) (*big.Int, []byte, error) { return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) } // Addr is a free data retrieval call binding the contract method 0x3b3b57de. // -// Solidity: function addr(node bytes32) constant returns(ret address) +// Solidity: function addr(bytes32 node) constant returns(address) func (_PublicResolver *PublicResolverCaller) Addr(opts *bind.CallOpts, node [32]byte) (common.Address, error) { var ( ret0 = new(common.Address) @@ -226,47 +232,47 @@ func (_PublicResolver *PublicResolverCaller) Addr(opts *bind.CallOpts, node [32] // Addr is a free data retrieval call binding the contract method 0x3b3b57de. // -// Solidity: function addr(node bytes32) constant returns(ret address) +// Solidity: function addr(bytes32 node) constant returns(address) func (_PublicResolver *PublicResolverSession) Addr(node [32]byte) (common.Address, error) { return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) } // Addr is a free data retrieval call binding the contract method 0x3b3b57de. // -// Solidity: function addr(node bytes32) constant returns(ret address) +// Solidity: function addr(bytes32 node) constant returns(address) func (_PublicResolver *PublicResolverCallerSession) Addr(node [32]byte) (common.Address, error) { return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) } -// Content is a free data retrieval call binding the contract method 0x2dff6941. +// Contenthash is a free data retrieval call binding the contract method 0xbc1c58d1. // -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverCaller) Content(opts *bind.CallOpts, node [32]byte) ([32]byte, error) { +// Solidity: function contenthash(bytes32 node) constant returns(bytes) +func (_PublicResolver *PublicResolverCaller) Contenthash(opts *bind.CallOpts, node [32]byte) ([]byte, error) { var ( - ret0 = new([32]byte) + ret0 = new([]byte) ) out := ret0 - err := _PublicResolver.contract.Call(opts, out, "content", node) + err := _PublicResolver.contract.Call(opts, out, "contenthash", node) return *ret0, err } -// Content is a free data retrieval call binding the contract method 0x2dff6941. +// Contenthash is a free data retrieval call binding the contract method 0xbc1c58d1. // -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverSession) Content(node [32]byte) ([32]byte, error) { - return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) +// Solidity: function contenthash(bytes32 node) constant returns(bytes) +func (_PublicResolver *PublicResolverSession) Contenthash(node [32]byte) ([]byte, error) { + return _PublicResolver.Contract.Contenthash(&_PublicResolver.CallOpts, node) } -// Content is a free data retrieval call binding the contract method 0x2dff6941. +// Contenthash is a free data retrieval call binding the contract method 0xbc1c58d1. // -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverCallerSession) Content(node [32]byte) ([32]byte, error) { - return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) +// Solidity: function contenthash(bytes32 node) constant returns(bytes) +func (_PublicResolver *PublicResolverCallerSession) Contenthash(node [32]byte) ([]byte, error) { + return _PublicResolver.Contract.Contenthash(&_PublicResolver.CallOpts, node) } // Name is a free data retrieval call binding the contract method 0x691f3431. // -// Solidity: function name(node bytes32) constant returns(ret string) +// Solidity: function name(bytes32 node) constant returns(string) func (_PublicResolver *PublicResolverCaller) Name(opts *bind.CallOpts, node [32]byte) (string, error) { var ( ret0 = new(string) @@ -278,21 +284,21 @@ func (_PublicResolver *PublicResolverCaller) Name(opts *bind.CallOpts, node [32] // Name is a free data retrieval call binding the contract method 0x691f3431. // -// Solidity: function name(node bytes32) constant returns(ret string) +// Solidity: function name(bytes32 node) constant returns(string) func (_PublicResolver *PublicResolverSession) Name(node [32]byte) (string, error) { return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) } // Name is a free data retrieval call binding the contract method 0x691f3431. // -// Solidity: function name(node bytes32) constant returns(ret string) +// Solidity: function name(bytes32 node) constant returns(string) func (_PublicResolver *PublicResolverCallerSession) Name(node [32]byte) (string, error) { return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) } // Pubkey is a free data retrieval call binding the contract method 0xc8690233. // -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +// Solidity: function pubkey(bytes32 node) constant returns(bytes32 x, bytes32 y) func (_PublicResolver *PublicResolverCaller) Pubkey(opts *bind.CallOpts, node [32]byte) (struct { X [32]byte Y [32]byte @@ -308,7 +314,7 @@ func (_PublicResolver *PublicResolverCaller) Pubkey(opts *bind.CallOpts, node [3 // Pubkey is a free data retrieval call binding the contract method 0xc8690233. // -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +// Solidity: function pubkey(bytes32 node) constant returns(bytes32 x, bytes32 y) func (_PublicResolver *PublicResolverSession) Pubkey(node [32]byte) (struct { X [32]byte Y [32]byte @@ -318,7 +324,7 @@ func (_PublicResolver *PublicResolverSession) Pubkey(node [32]byte) (struct { // Pubkey is a free data retrieval call binding the contract method 0xc8690233. // -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +// Solidity: function pubkey(bytes32 node) constant returns(bytes32 x, bytes32 y) func (_PublicResolver *PublicResolverCallerSession) Pubkey(node [32]byte) (struct { X [32]byte Y [32]byte @@ -328,7 +334,7 @@ func (_PublicResolver *PublicResolverCallerSession) Pubkey(node [32]byte) (struc // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +// Solidity: function supportsInterface(bytes4 interfaceID) constant returns(bool) func (_PublicResolver *PublicResolverCaller) SupportsInterface(opts *bind.CallOpts, interfaceID [4]byte) (bool, error) { var ( ret0 = new(bool) @@ -340,21 +346,21 @@ func (_PublicResolver *PublicResolverCaller) SupportsInterface(opts *bind.CallOp // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +// Solidity: function supportsInterface(bytes4 interfaceID) constant returns(bool) func (_PublicResolver *PublicResolverSession) SupportsInterface(interfaceID [4]byte) (bool, error) { return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) } // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +// Solidity: function supportsInterface(bytes4 interfaceID) constant returns(bool) func (_PublicResolver *PublicResolverCallerSession) SupportsInterface(interfaceID [4]byte) (bool, error) { return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) } // Text is a free data retrieval call binding the contract method 0x59d1d43c. // -// Solidity: function text(node bytes32, key string) constant returns(ret string) +// Solidity: function text(bytes32 node, string key) constant returns(string) func (_PublicResolver *PublicResolverCaller) Text(opts *bind.CallOpts, node [32]byte, key string) (string, error) { var ( ret0 = new(string) @@ -366,140 +372,140 @@ func (_PublicResolver *PublicResolverCaller) Text(opts *bind.CallOpts, node [32] // Text is a free data retrieval call binding the contract method 0x59d1d43c. // -// Solidity: function text(node bytes32, key string) constant returns(ret string) +// Solidity: function text(bytes32 node, string key) constant returns(string) func (_PublicResolver *PublicResolverSession) Text(node [32]byte, key string) (string, error) { return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) } // Text is a free data retrieval call binding the contract method 0x59d1d43c. // -// Solidity: function text(node bytes32, key string) constant returns(ret string) +// Solidity: function text(bytes32 node, string key) constant returns(string) func (_PublicResolver *PublicResolverCallerSession) Text(node [32]byte, key string) (string, error) { return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) } // SetABI is a paid mutator transaction binding the contract method 0x623195b0. // -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +// Solidity: function setABI(bytes32 node, uint256 contentType, bytes data) returns() func (_PublicResolver *PublicResolverTransactor) SetABI(opts *bind.TransactOpts, node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { return _PublicResolver.contract.Transact(opts, "setABI", node, contentType, data) } // SetABI is a paid mutator transaction binding the contract method 0x623195b0. // -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +// Solidity: function setABI(bytes32 node, uint256 contentType, bytes data) returns() func (_PublicResolver *PublicResolverSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) } // SetABI is a paid mutator transaction binding the contract method 0x623195b0. // -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +// Solidity: function setABI(bytes32 node, uint256 contentType, bytes data) returns() func (_PublicResolver *PublicResolverTransactorSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) } // SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. // -// Solidity: function setAddr(node bytes32, addr address) returns() +// Solidity: function setAddr(bytes32 node, address addr) returns() func (_PublicResolver *PublicResolverTransactor) SetAddr(opts *bind.TransactOpts, node [32]byte, addr common.Address) (*types.Transaction, error) { return _PublicResolver.contract.Transact(opts, "setAddr", node, addr) } // SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. // -// Solidity: function setAddr(node bytes32, addr address) returns() +// Solidity: function setAddr(bytes32 node, address addr) returns() func (_PublicResolver *PublicResolverSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) } // SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. // -// Solidity: function setAddr(node bytes32, addr address) returns() +// Solidity: function setAddr(bytes32 node, address addr) returns() func (_PublicResolver *PublicResolverTransactorSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) } -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// SetContenthash is a paid mutator transaction binding the contract method 0x304e6ade. // -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverTransactor) SetContent(opts *bind.TransactOpts, node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setContent", node, hash) +// Solidity: function setContenthash(bytes32 node, bytes hash) returns() +func (_PublicResolver *PublicResolverTransactor) SetContenthash(opts *bind.TransactOpts, node [32]byte, hash []byte) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setContenthash", node, hash) } -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// SetContenthash is a paid mutator transaction binding the contract method 0x304e6ade. // -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) +// Solidity: function setContenthash(bytes32 node, bytes hash) returns() +func (_PublicResolver *PublicResolverSession) SetContenthash(node [32]byte, hash []byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetContenthash(&_PublicResolver.TransactOpts, node, hash) } -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// SetContenthash is a paid mutator transaction binding the contract method 0x304e6ade. // -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) +// Solidity: function setContenthash(bytes32 node, bytes hash) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetContenthash(node [32]byte, hash []byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetContenthash(&_PublicResolver.TransactOpts, node, hash) } // SetName is a paid mutator transaction binding the contract method 0x77372213. // -// Solidity: function setName(node bytes32, name string) returns() +// Solidity: function setName(bytes32 node, string name) returns() func (_PublicResolver *PublicResolverTransactor) SetName(opts *bind.TransactOpts, node [32]byte, name string) (*types.Transaction, error) { return _PublicResolver.contract.Transact(opts, "setName", node, name) } // SetName is a paid mutator transaction binding the contract method 0x77372213. // -// Solidity: function setName(node bytes32, name string) returns() +// Solidity: function setName(bytes32 node, string name) returns() func (_PublicResolver *PublicResolverSession) SetName(node [32]byte, name string) (*types.Transaction, error) { return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) } // SetName is a paid mutator transaction binding the contract method 0x77372213. // -// Solidity: function setName(node bytes32, name string) returns() +// Solidity: function setName(bytes32 node, string name) returns() func (_PublicResolver *PublicResolverTransactorSession) SetName(node [32]byte, name string) (*types.Transaction, error) { return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) } // SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. // -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +// Solidity: function setPubkey(bytes32 node, bytes32 x, bytes32 y) returns() func (_PublicResolver *PublicResolverTransactor) SetPubkey(opts *bind.TransactOpts, node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { return _PublicResolver.contract.Transact(opts, "setPubkey", node, x, y) } // SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. // -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +// Solidity: function setPubkey(bytes32 node, bytes32 x, bytes32 y) returns() func (_PublicResolver *PublicResolverSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) } // SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. // -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +// Solidity: function setPubkey(bytes32 node, bytes32 x, bytes32 y) returns() func (_PublicResolver *PublicResolverTransactorSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) } // SetText is a paid mutator transaction binding the contract method 0x10f13a8c. // -// Solidity: function setText(node bytes32, key string, value string) returns() +// Solidity: function setText(bytes32 node, string key, string value) returns() func (_PublicResolver *PublicResolverTransactor) SetText(opts *bind.TransactOpts, node [32]byte, key string, value string) (*types.Transaction, error) { return _PublicResolver.contract.Transact(opts, "setText", node, key, value) } // SetText is a paid mutator transaction binding the contract method 0x10f13a8c. // -// Solidity: function setText(node bytes32, key string, value string) returns() +// Solidity: function setText(bytes32 node, string key, string value) returns() func (_PublicResolver *PublicResolverSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) } // SetText is a paid mutator transaction binding the contract method 0x10f13a8c. // -// Solidity: function setText(node bytes32, key string, value string) returns() +// Solidity: function setText(bytes32 node, string key, string value) returns() func (_PublicResolver *PublicResolverTransactorSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) } @@ -559,7 +565,7 @@ func (it *PublicResolverABIChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *PublicResolverABIChangedIterator) Error() error { return it.fail } @@ -580,7 +586,7 @@ type PublicResolverABIChanged struct { // FilterABIChanged is a free log retrieval operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. // -// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) +// Solidity: event ABIChanged(bytes32 indexed node, uint256 indexed contentType) func (_PublicResolver *PublicResolverFilterer) FilterABIChanged(opts *bind.FilterOpts, node [][32]byte, contentType []*big.Int) (*PublicResolverABIChangedIterator, error) { var nodeRule []interface{} @@ -601,7 +607,7 @@ func (_PublicResolver *PublicResolverFilterer) FilterABIChanged(opts *bind.Filte // WatchABIChanged is a free log subscription operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. // -// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) +// Solidity: event ABIChanged(bytes32 indexed node, uint256 indexed contentType) func (_PublicResolver *PublicResolverFilterer) WatchABIChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverABIChanged, node [][32]byte, contentType []*big.Int) (event.Subscription, error) { var nodeRule []interface{} @@ -700,7 +706,7 @@ func (it *PublicResolverAddrChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *PublicResolverAddrChangedIterator) Error() error { return it.fail } @@ -721,7 +727,7 @@ type PublicResolverAddrChanged struct { // FilterAddrChanged is a free log retrieval operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. // -// Solidity: event AddrChanged(node indexed bytes32, a address) +// Solidity: event AddrChanged(bytes32 indexed node, address a) func (_PublicResolver *PublicResolverFilterer) FilterAddrChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverAddrChangedIterator, error) { var nodeRule []interface{} @@ -738,7 +744,7 @@ func (_PublicResolver *PublicResolverFilterer) FilterAddrChanged(opts *bind.Filt // WatchAddrChanged is a free log subscription operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. // -// Solidity: event AddrChanged(node indexed bytes32, a address) +// Solidity: event AddrChanged(bytes32 indexed node, address a) func (_PublicResolver *PublicResolverFilterer) WatchAddrChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverAddrChanged, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -778,9 +784,9 @@ func (_PublicResolver *PublicResolverFilterer) WatchAddrChanged(opts *bind.Watch }), nil } -// PublicResolverContentChangedIterator is returned from FilterContentChanged and is used to iterate over the raw logs and unpacked data for ContentChanged events raised by the PublicResolver contract. -type PublicResolverContentChangedIterator struct { - Event *PublicResolverContentChanged // Event containing the contract specifics and raw log +// PublicResolverContenthashChangedIterator is returned from FilterContenthashChanged and is used to iterate over the raw logs and unpacked data for ContenthashChanged events raised by the PublicResolver contract. +type PublicResolverContenthashChangedIterator struct { + Event *PublicResolverContenthashChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -794,7 +800,7 @@ type PublicResolverContentChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *PublicResolverContentChangedIterator) Next() bool { +func (it *PublicResolverContenthashChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -803,7 +809,7 @@ func (it *PublicResolverContentChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PublicResolverContentChanged) + it.Event = new(PublicResolverContenthashChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -818,7 +824,7 @@ func (it *PublicResolverContentChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PublicResolverContentChanged) + it.Event = new(PublicResolverContenthashChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -833,53 +839,53 @@ func (it *PublicResolverContentChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverContentChangedIterator) Error() error { +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PublicResolverContenthashChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PublicResolverContentChangedIterator) Close() error { +func (it *PublicResolverContenthashChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// PublicResolverContentChanged represents a ContentChanged event raised by the PublicResolver contract. -type PublicResolverContentChanged struct { +// PublicResolverContenthashChanged represents a ContenthashChanged event raised by the PublicResolver contract. +type PublicResolverContenthashChanged struct { Node [32]byte - Hash [32]byte + Hash []byte Raw types.Log // Blockchain specific contextual infos } -// FilterContentChanged is a free log retrieval operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. +// FilterContenthashChanged is a free log retrieval operation binding the contract event 0xe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578. // -// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) -func (_PublicResolver *PublicResolverFilterer) FilterContentChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverContentChangedIterator, error) { +// Solidity: event ContenthashChanged(bytes32 indexed node, bytes hash) +func (_PublicResolver *PublicResolverFilterer) FilterContenthashChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverContenthashChangedIterator, error) { var nodeRule []interface{} for _, nodeItem := range node { nodeRule = append(nodeRule, nodeItem) } - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ContentChanged", nodeRule) + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ContenthashChanged", nodeRule) if err != nil { return nil, err } - return &PublicResolverContentChangedIterator{contract: _PublicResolver.contract, event: "ContentChanged", logs: logs, sub: sub}, nil + return &PublicResolverContenthashChangedIterator{contract: _PublicResolver.contract, event: "ContenthashChanged", logs: logs, sub: sub}, nil } -// WatchContentChanged is a free log subscription operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. +// WatchContenthashChanged is a free log subscription operation binding the contract event 0xe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578. // -// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) -func (_PublicResolver *PublicResolverFilterer) WatchContentChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverContentChanged, node [][32]byte) (event.Subscription, error) { +// Solidity: event ContenthashChanged(bytes32 indexed node, bytes hash) +func (_PublicResolver *PublicResolverFilterer) WatchContenthashChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverContenthashChanged, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} for _, nodeItem := range node { nodeRule = append(nodeRule, nodeItem) } - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ContentChanged", nodeRule) + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ContenthashChanged", nodeRule) if err != nil { return nil, err } @@ -889,8 +895,8 @@ func (_PublicResolver *PublicResolverFilterer) WatchContentChanged(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PublicResolverContentChanged) - if err := _PublicResolver.contract.UnpackLog(event, "ContentChanged", log); err != nil { + event := new(PublicResolverContenthashChanged) + if err := _PublicResolver.contract.UnpackLog(event, "ContenthashChanged", log); err != nil { return err } event.Raw = log @@ -966,7 +972,7 @@ func (it *PublicResolverNameChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *PublicResolverNameChangedIterator) Error() error { return it.fail } @@ -987,7 +993,7 @@ type PublicResolverNameChanged struct { // FilterNameChanged is a free log retrieval operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. // -// Solidity: event NameChanged(node indexed bytes32, name string) +// Solidity: event NameChanged(bytes32 indexed node, string name) func (_PublicResolver *PublicResolverFilterer) FilterNameChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverNameChangedIterator, error) { var nodeRule []interface{} @@ -1004,7 +1010,7 @@ func (_PublicResolver *PublicResolverFilterer) FilterNameChanged(opts *bind.Filt // WatchNameChanged is a free log subscription operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. // -// Solidity: event NameChanged(node indexed bytes32, name string) +// Solidity: event NameChanged(bytes32 indexed node, string name) func (_PublicResolver *PublicResolverFilterer) WatchNameChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverNameChanged, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -1099,7 +1105,7 @@ func (it *PublicResolverPubkeyChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *PublicResolverPubkeyChangedIterator) Error() error { return it.fail } @@ -1121,7 +1127,7 @@ type PublicResolverPubkeyChanged struct { // FilterPubkeyChanged is a free log retrieval operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. // -// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) +// Solidity: event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y) func (_PublicResolver *PublicResolverFilterer) FilterPubkeyChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverPubkeyChangedIterator, error) { var nodeRule []interface{} @@ -1138,7 +1144,7 @@ func (_PublicResolver *PublicResolverFilterer) FilterPubkeyChanged(opts *bind.Fi // WatchPubkeyChanged is a free log subscription operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. // -// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) +// Solidity: event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y) func (_PublicResolver *PublicResolverFilterer) WatchPubkeyChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverPubkeyChanged, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} @@ -1233,7 +1239,7 @@ func (it *PublicResolverTextChangedIterator) Next() bool { } } -// Error retruned any retrieval or parsing error occurred during filtering. +// Error returns any retrieval or parsing error occurred during filtering. func (it *PublicResolverTextChangedIterator) Error() error { return it.fail } @@ -1248,26 +1254,22 @@ func (it *PublicResolverTextChangedIterator) Close() error { // PublicResolverTextChanged represents a TextChanged event raised by the PublicResolver contract. type PublicResolverTextChanged struct { Node [32]byte - IndexedKey common.Hash + IndexedKey string Key string Raw types.Log // Blockchain specific contextual infos } // FilterTextChanged is a free log retrieval operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. // -// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) -func (_PublicResolver *PublicResolverFilterer) FilterTextChanged(opts *bind.FilterOpts, node [][32]byte, indexedKey []string) (*PublicResolverTextChangedIterator, error) { +// Solidity: event TextChanged(bytes32 indexed node, string indexedKey, string key) +func (_PublicResolver *PublicResolverFilterer) FilterTextChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverTextChangedIterator, error) { var nodeRule []interface{} for _, nodeItem := range node { nodeRule = append(nodeRule, nodeItem) } - var indexedKeyRule []interface{} - for _, indexedKeyItem := range indexedKey { - indexedKeyRule = append(indexedKeyRule, indexedKeyItem) - } - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "TextChanged", nodeRule, indexedKeyRule) + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "TextChanged", nodeRule) if err != nil { return nil, err } @@ -1276,19 +1278,15 @@ func (_PublicResolver *PublicResolverFilterer) FilterTextChanged(opts *bind.Filt // WatchTextChanged is a free log subscription operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. // -// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) -func (_PublicResolver *PublicResolverFilterer) WatchTextChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverTextChanged, node [][32]byte, indexedKey []string) (event.Subscription, error) { +// Solidity: event TextChanged(bytes32 indexed node, string indexedKey, string key) +func (_PublicResolver *PublicResolverFilterer) WatchTextChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverTextChanged, node [][32]byte) (event.Subscription, error) { var nodeRule []interface{} for _, nodeItem := range node { nodeRule = append(nodeRule, nodeItem) } - var indexedKeyRule []interface{} - for _, indexedKeyItem := range indexedKey { - indexedKeyRule = append(indexedKeyRule, indexedKeyItem) - } - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "TextChanged", nodeRule, indexedKeyRule) + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "TextChanged", nodeRule) if err != nil { return nil, err } diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens.go index b1841ab1..6fed172d 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens.go @@ -16,25 +16,35 @@ package ens -//go:generate abigen --sol contract/ENS.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/ens.go -//go:generate abigen --sol contract/FIFSRegistrar.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/fifsregistrar.go -//go:generate abigen --sol contract/PublicResolver.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/publicresolver.go +//go:generate abigen --sol contract/ENS.sol --pkg contract --out contract/ens.go +//go:generate abigen --sol contract/ENSRegistry.sol --exc contract/ENS.sol:ENS --pkg contract --out contract/ensregistry.go +//go:generate abigen --sol contract/FIFSRegistrar.sol --exc contract/ENS.sol:ENS --pkg contract --out contract/fifsregistrar.go +//go:generate abigen --sol contract/PublicResolver.sol --exc contract/ENS.sol:ENS --pkg contract --out contract/publicresolver.go import ( + "encoding/binary" "strings" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/contracts/ens/contract" + "github.com/ethereum/go-ethereum/contracts/ens/fallback_contract" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" ) var ( - MainNetAddress = common.HexToAddress("0x314159265dD8dbb310642f98f50C066173C1259b") - TestNetAddress = common.HexToAddress("0x112234455c3a32fd11230c42e7bccd4a84e02010") + MainNetAddress = common.HexToAddress("0x314159265dD8dbb310642f98f50C066173C1259b") + TestNetAddress = common.HexToAddress("0x112234455c3a32fd11230c42e7bccd4a84e02010") + contentHash_Interface_Id [4]byte ) +const contentHash_Interface_Id_Spec = 0xbc1c58d1 + +func init() { + binary.BigEndian.PutUint32(contentHash_Interface_Id[:], contentHash_Interface_Id_Spec) +} + // ENS is the swarm domain name registry and resolver type ENS struct { *contract.ENSSession @@ -60,7 +70,7 @@ func NewENS(transactOpts *bind.TransactOpts, contractAddr common.Address, contra // DeployENS deploys an instance of the ENS nameservice, with a 'first-in, first-served' root registrar. func DeployENS(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend) (common.Address, *ENS, error) { // Deploy the ENS registry - ensAddr, _, _, err := contract.DeployENS(transactOpts, contractBackend) + ensAddr, _, _, err := contract.DeployENSRegistry(transactOpts, contractBackend) if err != nil { return ensAddr, nil, err } @@ -110,6 +120,21 @@ func (ens *ENS) getResolver(node [32]byte) (*contract.PublicResolverSession, err }, nil } +func (ens *ENS) getFallbackResolver(node [32]byte) (*fallback_contract.PublicResolverSession, error) { + resolverAddr, err := ens.Resolver(node) + if err != nil { + return nil, err + } + resolver, err := fallback_contract.NewPublicResolver(resolverAddr, ens.contractBackend) + if err != nil { + return nil, err + } + return &fallback_contract.PublicResolverSession{ + Contract: resolver, + TransactOpts: ens.TransactOpts, + }, nil +} + func (ens *ENS) getRegistrar(node [32]byte) (*contract.FIFSRegistrarSession, error) { registrarAddr, err := ens.Owner(node) if err != nil { @@ -133,11 +158,33 @@ func (ens *ENS) Resolve(name string) (common.Hash, error) { if err != nil { return common.Hash{}, err } - ret, err := resolver.Content(node) + + // IMPORTANT: The old contract is deprecated. This code should be removed latest on June 1st 2019 + supported, err := resolver.SupportsInterface(contentHash_Interface_Id) if err != nil { return common.Hash{}, err } - return common.BytesToHash(ret[:]), nil + + if !supported { + resolver, err := ens.getFallbackResolver(node) + if err != nil { + return common.Hash{}, err + } + ret, err := resolver.Content(node) + if err != nil { + return common.Hash{}, err + } + return common.BytesToHash(ret[:]), nil + } + + // END DEPRECATED CODE + + contentHash, err := resolver.Contenthash(node) + if err != nil { + return common.Hash{}, err + } + + return extractContentHash(contentHash) } // Addr is a non-transactional call that returns the address associated with a name. @@ -181,15 +228,36 @@ func (ens *ENS) Register(name string) (*types.Transaction, error) { } // SetContentHash sets the content hash associated with a name. Only works if the caller -// owns the name, and the associated resolver implements a `setContent` function. -func (ens *ENS) SetContentHash(name string, hash common.Hash) (*types.Transaction, error) { +// owns the name, and the associated resolver implements a `setContenthash` function. +func (ens *ENS) SetContentHash(name string, hash []byte) (*types.Transaction, error) { node := EnsNode(name) resolver, err := ens.getResolver(node) if err != nil { return nil, err } + opts := ens.TransactOpts opts.GasLimit = 200000 - return resolver.Contract.SetContent(&opts, node, hash) + + // IMPORTANT: The old contract is deprecated. This code should be removed latest on June 1st 2019 + supported, err := resolver.SupportsInterface(contentHash_Interface_Id) + if err != nil { + return nil, err + } + + if !supported { + resolver, err := ens.getFallbackResolver(node) + if err != nil { + return nil, err + } + opts := ens.TransactOpts + opts.GasLimit = 200000 + var b [32]byte + copy(b[:], hash) + return resolver.Contract.SetContent(&opts, node, b) + } + + // END DEPRECATED CODE + return resolver.Contract.SetContenthash(&opts, node, hash) } diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens_test.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens_test.go index cd64fbf1..c65df836 100644 --- a/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens_test.go +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/ens_test.go @@ -24,16 +24,18 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/contracts/ens/contract" + "github.com/ethereum/go-ethereum/contracts/ens/fallback_contract" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" ) var ( - key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - name = "my name on ENS" - hash = crypto.Keccak256Hash([]byte("my content")) - addr = crypto.PubkeyToAddress(key.PublicKey) - testAddr = common.HexToAddress("0x1234123412341234123412341234123412341234") + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + name = "my name on ENS" + hash = crypto.Keccak256Hash([]byte("my content")) + fallbackHash = crypto.Keccak256Hash([]byte("my content hash")) + addr = crypto.PubkeyToAddress(key.PublicKey) + testAddr = common.HexToAddress("0x1234123412341234123412341234123412341234") ) func TestENS(t *testing.T) { @@ -57,24 +59,29 @@ func TestENS(t *testing.T) { if err != nil { t.Fatalf("can't deploy resolver: %v", err) } + if _, err := ens.SetResolver(EnsNode(name), resolverAddr); err != nil { t.Fatalf("can't set resolver: %v", err) } contractBackend.Commit() // Set the content hash for the name. - if _, err = ens.SetContentHash(name, hash); err != nil { + cid, err := EncodeSwarmHash(hash) + if err != nil { + t.Fatal(err) + } + if _, err = ens.SetContentHash(name, cid); err != nil { t.Fatalf("can't set content hash: %v", err) } contractBackend.Commit() // Try to resolve the name. - vhost, err := ens.Resolve(name) + resolvedHash, err := ens.Resolve(name) if err != nil { t.Fatalf("expected no error, got %v", err) } - if vhost != hash { - t.Fatalf("resolve error, expected %v, got %v", hash.Hex(), vhost.Hex()) + if resolvedHash.Hex() != hash.Hex() { + t.Fatalf("resolve error, expected %v, got %v", hash.Hex(), resolvedHash.Hex()) } // set the address for the name @@ -88,7 +95,32 @@ func TestENS(t *testing.T) { if err != nil { t.Fatalf("expected no error, got %v", err) } - if vhost != hash { + if testAddr.Hex() != recoveredAddr.Hex() { t.Fatalf("resolve error, expected %v, got %v", testAddr.Hex(), recoveredAddr.Hex()) } + + // deploy the fallback contract and see that the fallback mechanism works + fallbackResolverAddr, _, _, err := fallback_contract.DeployPublicResolver(transactOpts, contractBackend, ensAddr) + if err != nil { + t.Fatalf("can't deploy resolver: %v", err) + } + if _, err := ens.SetResolver(EnsNode(name), fallbackResolverAddr); err != nil { + t.Fatalf("can't set resolver: %v", err) + } + contractBackend.Commit() + + // Set the content hash for the name. + if _, err = ens.SetContentHash(name, fallbackHash.Bytes()); err != nil { + t.Fatalf("can't set content hash: %v", err) + } + contractBackend.Commit() + + // Try to resolve the name. + fallbackResolvedHash, err := ens.Resolve(name) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if fallbackResolvedHash.Hex() != fallbackHash.Hex() { + t.Fatalf("resolve error, expected %v, got %v", hash.Hex(), resolvedHash.Hex()) + } } diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/PublicResolver.sol b/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/PublicResolver.sol new file mode 100644 index 00000000..9dcc9568 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/PublicResolver.sol @@ -0,0 +1,212 @@ +pragma solidity ^0.4.0; + +import './AbstractENS.sol'; + +/** + * A simple resolver anyone can use; only allows the owner of a node to set its + * address. + */ +contract PublicResolver { + bytes4 constant INTERFACE_META_ID = 0x01ffc9a7; + bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de; + bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5; + bytes4 constant NAME_INTERFACE_ID = 0x691f3431; + bytes4 constant ABI_INTERFACE_ID = 0x2203ab56; + bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233; + bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c; + + event AddrChanged(bytes32 indexed node, address a); + event ContentChanged(bytes32 indexed node, bytes32 hash); + event NameChanged(bytes32 indexed node, string name); + event ABIChanged(bytes32 indexed node, uint256 indexed contentType); + event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); + event TextChanged(bytes32 indexed node, string indexed indexedKey, string key); + + struct PublicKey { + bytes32 x; + bytes32 y; + } + + struct Record { + address addr; + bytes32 content; + string name; + PublicKey pubkey; + mapping(string=>string) text; + mapping(uint256=>bytes) abis; + } + + AbstractENS ens; + mapping(bytes32=>Record) records; + + modifier only_owner(bytes32 node) { + if (ens.owner(node) != msg.sender) throw; + _; + } + + /** + * Constructor. + * @param ensAddr The ENS registrar contract. + */ + function PublicResolver(AbstractENS ensAddr) { + ens = ensAddr; + } + + /** + * Returns true if the resolver implements the interface specified by the provided hash. + * @param interfaceID The ID of the interface to check for. + * @return True if the contract implements the requested interface. + */ + function supportsInterface(bytes4 interfaceID) constant returns (bool) { + return interfaceID == ADDR_INTERFACE_ID || + interfaceID == CONTENT_INTERFACE_ID || + interfaceID == NAME_INTERFACE_ID || + interfaceID == ABI_INTERFACE_ID || + interfaceID == PUBKEY_INTERFACE_ID || + interfaceID == TEXT_INTERFACE_ID || + interfaceID == INTERFACE_META_ID; + } + + /** + * Returns the address associated with an ENS node. + * @param node The ENS node to query. + * @return The associated address. + */ + function addr(bytes32 node) constant returns (address ret) { + ret = records[node].addr; + } + + /** + * Sets the address associated with an ENS node. + * May only be called by the owner of that node in the ENS registry. + * @param node The node to update. + * @param addr The address to set. + */ + function setAddr(bytes32 node, address addr) only_owner(node) { + records[node].addr = addr; + AddrChanged(node, addr); + } + + /** + * Returns the content hash associated with an ENS node. + * Note that this resource type is not standardized, and will likely change + * in future to a resource type based on multihash. + * @param node The ENS node to query. + * @return The associated content hash. + */ + function content(bytes32 node) constant returns (bytes32 ret) { + ret = records[node].content; + } + + /** + * Sets the content hash associated with an ENS node. + * May only be called by the owner of that node in the ENS registry. + * Note that this resource type is not standardized, and will likely change + * in future to a resource type based on multihash. + * @param node The node to update. + * @param hash The content hash to set + */ + function setContent(bytes32 node, bytes32 hash) only_owner(node) { + records[node].content = hash; + ContentChanged(node, hash); + } + + /** + * Returns the name associated with an ENS node, for reverse records. + * Defined in EIP181. + * @param node The ENS node to query. + * @return The associated name. + */ + function name(bytes32 node) constant returns (string ret) { + ret = records[node].name; + } + + /** + * Sets the name associated with an ENS node, for reverse records. + * May only be called by the owner of that node in the ENS registry. + * @param node The node to update. + * @param name The name to set. + */ + function setName(bytes32 node, string name) only_owner(node) { + records[node].name = name; + NameChanged(node, name); + } + + /** + * Returns the ABI associated with an ENS node. + * Defined in EIP205. + * @param node The ENS node to query + * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. + * @return contentType The content type of the return value + * @return data The ABI data + */ + function ABI(bytes32 node, uint256 contentTypes) constant returns (uint256 contentType, bytes data) { + var record = records[node]; + for(contentType = 1; contentType <= contentTypes; contentType <<= 1) { + if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) { + data = record.abis[contentType]; + return; + } + } + contentType = 0; + } + + /** + * Sets the ABI associated with an ENS node. + * Nodes may have one ABI of each content type. To remove an ABI, set it to + * the empty string. + * @param node The node to update. + * @param contentType The content type of the ABI + * @param data The ABI data. + */ + function setABI(bytes32 node, uint256 contentType, bytes data) only_owner(node) { + // Content types must be powers of 2 + if (((contentType - 1) & contentType) != 0) throw; + + records[node].abis[contentType] = data; + ABIChanged(node, contentType); + } + + /** + * Returns the SECP256k1 public key associated with an ENS node. + * Defined in EIP 619. + * @param node The ENS node to query + * @return x, y the X and Y coordinates of the curve point for the public key. + */ + function pubkey(bytes32 node) constant returns (bytes32 x, bytes32 y) { + return (records[node].pubkey.x, records[node].pubkey.y); + } + + /** + * Sets the SECP256k1 public key associated with an ENS node. + * @param node The ENS node to query + * @param x the X coordinate of the curve point for the public key. + * @param y the Y coordinate of the curve point for the public key. + */ + function setPubkey(bytes32 node, bytes32 x, bytes32 y) only_owner(node) { + records[node].pubkey = PublicKey(x, y); + PubkeyChanged(node, x, y); + } + + /** + * Returns the text data associated with an ENS node and key. + * @param node The ENS node to query. + * @param key The text data key to query. + * @return The associated text data. + */ + function text(bytes32 node, string key) constant returns (string ret) { + ret = records[node].text[key]; + } + + /** + * Sets the text data associated with an ENS node and key. + * May only be called by the owner of that node in the ENS registry. + * @param node The node to update. + * @param key The key to set. + * @param value The text data value to set. + */ + function setText(bytes32 node, string key, string value) only_owner(node) { + records[node].text[key] = value; + TextChanged(node, key, key); + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/publicresolver.go b/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/publicresolver.go new file mode 100644 index 00000000..a2a4be1c --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/contracts/ens/fallback_contract/publicresolver.go @@ -0,0 +1,1321 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package fallback_contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// PublicResolverABI is the input ABI used to generate the binding from. +const PublicResolverABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"content\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"ret\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"setContent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"ContentChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"}]" + +// PublicResolverBin is the compiled bytecode used for deploying new contracts. +const PublicResolverBin = `0x6060604052341561000f57600080fd5b6040516020806111b28339810160405280805160008054600160a060020a03909216600160a060020a0319909216919091179055505061115e806100546000396000f3006060604052600436106100ab5763ffffffff60e060020a60003504166301ffc9a781146100b057806310f13a8c146100e45780632203ab561461017e57806329cd62ea146102155780632dff6941146102315780633b3b57de1461025957806359d1d43c1461028b578063623195b014610358578063691f3431146103b457806377372213146103ca578063c3d014d614610420578063c869023314610439578063d5fa2b0014610467575b600080fd5b34156100bb57600080fd5b6100d0600160e060020a031960043516610489565b604051901515815260200160405180910390f35b34156100ef57600080fd5b61017c600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f695505050505050565b005b341561018957600080fd5b610197600435602435610807565b60405182815260406020820181815290820183818151815260200191508051906020019080838360005b838110156101d95780820151838201526020016101c1565b50505050905090810190601f1680156102065780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561022057600080fd5b61017c600435602435604435610931565b341561023c57600080fd5b610247600435610a30565b60405190815260200160405180910390f35b341561026457600080fd5b61026f600435610a46565b604051600160a060020a03909116815260200160405180910390f35b341561029657600080fd5b6102e1600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a6195505050505050565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561031d578082015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036357600080fd5b61017c600480359060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b8095505050505050565b34156103bf57600080fd5b6102e1600435610c7c565b34156103d557600080fd5b61017c600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610d4295505050505050565b341561042b57600080fd5b61017c600435602435610e8c565b341561044457600080fd5b61044f600435610f65565b60405191825260208201526040908101905180910390f35b341561047257600080fd5b61017c600435600160a060020a0360243516610f82565b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104ec5750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806105205750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806105545750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b806105885750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806105bc5750600160e060020a031982167f59d1d43c00000000000000000000000000000000000000000000000000000000145b806105f05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561064f57600080fd5b6102c65a03f1151561066057600080fd5b50505060405180519050600160a060020a031614151561067f57600080fd5b6000848152600160205260409081902083916005909101908590518082805190602001908083835b602083106106c65780518252601f1990920191602091820191016106a7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161070a929160200190611085565b50826040518082805190602001908083835b6020831061073b5780518252601f19909201916020918201910161071c565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051908190039020847fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508560405160208082528190810183818151815260200191508051906020019080838360005b838110156107c75780820151838201526020016107af565b50505050905090810190601f1680156107f45780820380516001836020036101000a031916815260200191505b509250505060405180910390a350505050565b6000610811611103565b60008481526001602081905260409091209092505b838311610924578284161580159061085f5750600083815260068201602052604081205460026000196101006001841615020190911604115b15610919578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b50505050509150610929565b600290920291610826565b600092505b509250929050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561098a57600080fd5b6102c65a03f1151561099b57600080fd5b50505060405180519050600160a060020a03161415156109ba57600080fd5b6040805190810160409081528482526020808301859052600087815260019091522060030181518155602082015160019091015550837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405191825260208201526040908101905180910390a250505050565b6000908152600160208190526040909120015490565b600090815260016020526040902054600160a060020a031690565b610a69611103565b60008381526001602052604090819020600501908390518082805190602001908083835b60208310610aac5780518252601f199092019160209182019101610a8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905092915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bd957600080fd5b6102c65a03f11515610bea57600080fd5b50505060405180519050600160a060020a0316141515610c0957600080fd5b6000198301831615610c1a57600080fd5b60008481526001602090815260408083208684526006019091529020828051610c47929160200190611085565b5082847faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b610c84611103565b6001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d365780601f10610d0b57610100808354040283529160200191610d36565b820191906000526020600020905b815481529060010190602001808311610d1957829003601f168201915b50505050509050919050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d9b57600080fd5b6102c65a03f11515610dac57600080fd5b50505060405180519050600160a060020a0316141515610dcb57600080fd5b6000838152600160205260409020600201828051610ded929160200190611085565b50827fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78360405160208082528190810183818151815260200191508051906020019080838360005b83811015610e4d578082015183820152602001610e35565b50505050905090810190601f168015610e7a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ee557600080fd5b6102c65a03f11515610ef657600080fd5b50505060405180519050600160a060020a0316141515610f1557600080fd5b6000838152600160208190526040918290200183905583907f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc9084905190815260200160405180910390a2505050565b600090815260016020526040902060038101546004909101549091565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610fdb57600080fd5b6102c65a03f11515610fec57600080fd5b50505060405180519050600160a060020a031614151561100b57600080fd5b60008381526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851617905583907f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd290849051600160a060020a03909116815260200160405180910390a2505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110c657805160ff19168380011785556110f3565b828001600101855582156110f3579182015b828111156110f35782518255916020019190600101906110d8565b506110ff929150611115565b5090565b60206040519081016040526000815290565b61112f91905b808211156110ff576000815560010161111b565b905600a165627a7a723058201ecacbc445b9fbcd91b0ab164389f69d7283b856883bc7437eeed1008345a4920029` + +// DeployPublicResolver deploys a new Ethereum contract, binding an instance of PublicResolver to it. +func DeployPublicResolver(auth *bind.TransactOpts, backend bind.ContractBackend, ensAddr common.Address) (common.Address, *types.Transaction, *PublicResolver, error) { + parsed, err := abi.JSON(strings.NewReader(PublicResolverABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(PublicResolverBin), backend, ensAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PublicResolver{PublicResolverCaller: PublicResolverCaller{contract: contract}, PublicResolverTransactor: PublicResolverTransactor{contract: contract}, PublicResolverFilterer: PublicResolverFilterer{contract: contract}}, nil +} + +// PublicResolver is an auto generated Go binding around an Ethereum contract. +type PublicResolver struct { + PublicResolverCaller // Read-only binding to the contract + PublicResolverTransactor // Write-only binding to the contract + PublicResolverFilterer // Log filterer for contract events +} + +// PublicResolverCaller is an auto generated read-only Go binding around an Ethereum contract. +type PublicResolverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicResolverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PublicResolverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicResolverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PublicResolverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PublicResolverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PublicResolverSession struct { + Contract *PublicResolver // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicResolverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PublicResolverCallerSession struct { + Contract *PublicResolverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PublicResolverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PublicResolverTransactorSession struct { + Contract *PublicResolverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PublicResolverRaw is an auto generated low-level Go binding around an Ethereum contract. +type PublicResolverRaw struct { + Contract *PublicResolver // Generic contract binding to access the raw methods on +} + +// PublicResolverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PublicResolverCallerRaw struct { + Contract *PublicResolverCaller // Generic read-only contract binding to access the raw methods on +} + +// PublicResolverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PublicResolverTransactorRaw struct { + Contract *PublicResolverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPublicResolver creates a new instance of PublicResolver, bound to a specific deployed contract. +func NewPublicResolver(address common.Address, backend bind.ContractBackend) (*PublicResolver, error) { + contract, err := bindPublicResolver(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PublicResolver{PublicResolverCaller: PublicResolverCaller{contract: contract}, PublicResolverTransactor: PublicResolverTransactor{contract: contract}, PublicResolverFilterer: PublicResolverFilterer{contract: contract}}, nil +} + +// NewPublicResolverCaller creates a new read-only instance of PublicResolver, bound to a specific deployed contract. +func NewPublicResolverCaller(address common.Address, caller bind.ContractCaller) (*PublicResolverCaller, error) { + contract, err := bindPublicResolver(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PublicResolverCaller{contract: contract}, nil +} + +// NewPublicResolverTransactor creates a new write-only instance of PublicResolver, bound to a specific deployed contract. +func NewPublicResolverTransactor(address common.Address, transactor bind.ContractTransactor) (*PublicResolverTransactor, error) { + contract, err := bindPublicResolver(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PublicResolverTransactor{contract: contract}, nil +} + +// NewPublicResolverFilterer creates a new log filterer instance of PublicResolver, bound to a specific deployed contract. +func NewPublicResolverFilterer(address common.Address, filterer bind.ContractFilterer) (*PublicResolverFilterer, error) { + contract, err := bindPublicResolver(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PublicResolverFilterer{contract: contract}, nil +} + +// bindPublicResolver binds a generic wrapper to an already deployed contract. +func bindPublicResolver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(PublicResolverABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicResolver *PublicResolverRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _PublicResolver.Contract.PublicResolverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicResolver *PublicResolverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicResolver.Contract.PublicResolverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicResolver *PublicResolverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicResolver.Contract.PublicResolverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PublicResolver *PublicResolverCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _PublicResolver.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PublicResolver *PublicResolverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PublicResolver.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PublicResolver *PublicResolverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PublicResolver.Contract.contract.Transact(opts, method, params...) +} + +// ABI is a free data retrieval call binding the contract method 0x2203ab56. +// +// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) +func (_PublicResolver *PublicResolverCaller) ABI(opts *bind.CallOpts, node [32]byte, contentTypes *big.Int) (struct { + ContentType *big.Int + Data []byte +}, error) { + ret := new(struct { + ContentType *big.Int + Data []byte + }) + out := ret + err := _PublicResolver.contract.Call(opts, out, "ABI", node, contentTypes) + return *ret, err +} + +// ABI is a free data retrieval call binding the contract method 0x2203ab56. +// +// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) +func (_PublicResolver *PublicResolverSession) ABI(node [32]byte, contentTypes *big.Int) (struct { + ContentType *big.Int + Data []byte +}, error) { + return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) +} + +// ABI is a free data retrieval call binding the contract method 0x2203ab56. +// +// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) +func (_PublicResolver *PublicResolverCallerSession) ABI(node [32]byte, contentTypes *big.Int) (struct { + ContentType *big.Int + Data []byte +}, error) { + return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) +} + +// Addr is a free data retrieval call binding the contract method 0x3b3b57de. +// +// Solidity: function addr(node bytes32) constant returns(ret address) +func (_PublicResolver *PublicResolverCaller) Addr(opts *bind.CallOpts, node [32]byte) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := ret0 + err := _PublicResolver.contract.Call(opts, out, "addr", node) + return *ret0, err +} + +// Addr is a free data retrieval call binding the contract method 0x3b3b57de. +// +// Solidity: function addr(node bytes32) constant returns(ret address) +func (_PublicResolver *PublicResolverSession) Addr(node [32]byte) (common.Address, error) { + return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) +} + +// Addr is a free data retrieval call binding the contract method 0x3b3b57de. +// +// Solidity: function addr(node bytes32) constant returns(ret address) +func (_PublicResolver *PublicResolverCallerSession) Addr(node [32]byte) (common.Address, error) { + return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) +} + +// Content is a free data retrieval call binding the contract method 0x2dff6941. +// +// Solidity: function content(node bytes32) constant returns(ret bytes32) +func (_PublicResolver *PublicResolverCaller) Content(opts *bind.CallOpts, node [32]byte) ([32]byte, error) { + var ( + ret0 = new([32]byte) + ) + out := ret0 + err := _PublicResolver.contract.Call(opts, out, "content", node) + return *ret0, err +} + +// Content is a free data retrieval call binding the contract method 0x2dff6941. +// +// Solidity: function content(node bytes32) constant returns(ret bytes32) +func (_PublicResolver *PublicResolverSession) Content(node [32]byte) ([32]byte, error) { + return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) +} + +// Content is a free data retrieval call binding the contract method 0x2dff6941. +// +// Solidity: function content(node bytes32) constant returns(ret bytes32) +func (_PublicResolver *PublicResolverCallerSession) Content(node [32]byte) ([32]byte, error) { + return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) +} + +// Name is a free data retrieval call binding the contract method 0x691f3431. +// +// Solidity: function name(node bytes32) constant returns(ret string) +func (_PublicResolver *PublicResolverCaller) Name(opts *bind.CallOpts, node [32]byte) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _PublicResolver.contract.Call(opts, out, "name", node) + return *ret0, err +} + +// Name is a free data retrieval call binding the contract method 0x691f3431. +// +// Solidity: function name(node bytes32) constant returns(ret string) +func (_PublicResolver *PublicResolverSession) Name(node [32]byte) (string, error) { + return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) +} + +// Name is a free data retrieval call binding the contract method 0x691f3431. +// +// Solidity: function name(node bytes32) constant returns(ret string) +func (_PublicResolver *PublicResolverCallerSession) Name(node [32]byte) (string, error) { + return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) +} + +// Pubkey is a free data retrieval call binding the contract method 0xc8690233. +// +// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +func (_PublicResolver *PublicResolverCaller) Pubkey(opts *bind.CallOpts, node [32]byte) (struct { + X [32]byte + Y [32]byte +}, error) { + ret := new(struct { + X [32]byte + Y [32]byte + }) + out := ret + err := _PublicResolver.contract.Call(opts, out, "pubkey", node) + return *ret, err +} + +// Pubkey is a free data retrieval call binding the contract method 0xc8690233. +// +// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +func (_PublicResolver *PublicResolverSession) Pubkey(node [32]byte) (struct { + X [32]byte + Y [32]byte +}, error) { + return _PublicResolver.Contract.Pubkey(&_PublicResolver.CallOpts, node) +} + +// Pubkey is a free data retrieval call binding the contract method 0xc8690233. +// +// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) +func (_PublicResolver *PublicResolverCallerSession) Pubkey(node [32]byte) (struct { + X [32]byte + Y [32]byte +}, error) { + return _PublicResolver.Contract.Pubkey(&_PublicResolver.CallOpts, node) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +func (_PublicResolver *PublicResolverCaller) SupportsInterface(opts *bind.CallOpts, interfaceID [4]byte) (bool, error) { + var ( + ret0 = new(bool) + ) + out := ret0 + err := _PublicResolver.contract.Call(opts, out, "supportsInterface", interfaceID) + return *ret0, err +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +func (_PublicResolver *PublicResolverSession) SupportsInterface(interfaceID [4]byte) (bool, error) { + return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) +func (_PublicResolver *PublicResolverCallerSession) SupportsInterface(interfaceID [4]byte) (bool, error) { + return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) +} + +// Text is a free data retrieval call binding the contract method 0x59d1d43c. +// +// Solidity: function text(node bytes32, key string) constant returns(ret string) +func (_PublicResolver *PublicResolverCaller) Text(opts *bind.CallOpts, node [32]byte, key string) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _PublicResolver.contract.Call(opts, out, "text", node, key) + return *ret0, err +} + +// Text is a free data retrieval call binding the contract method 0x59d1d43c. +// +// Solidity: function text(node bytes32, key string) constant returns(ret string) +func (_PublicResolver *PublicResolverSession) Text(node [32]byte, key string) (string, error) { + return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) +} + +// Text is a free data retrieval call binding the contract method 0x59d1d43c. +// +// Solidity: function text(node bytes32, key string) constant returns(ret string) +func (_PublicResolver *PublicResolverCallerSession) Text(node [32]byte, key string) (string, error) { + return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) +} + +// SetABI is a paid mutator transaction binding the contract method 0x623195b0. +// +// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +func (_PublicResolver *PublicResolverTransactor) SetABI(opts *bind.TransactOpts, node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setABI", node, contentType, data) +} + +// SetABI is a paid mutator transaction binding the contract method 0x623195b0. +// +// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +func (_PublicResolver *PublicResolverSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) +} + +// SetABI is a paid mutator transaction binding the contract method 0x623195b0. +// +// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) +} + +// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. +// +// Solidity: function setAddr(node bytes32, addr address) returns() +func (_PublicResolver *PublicResolverTransactor) SetAddr(opts *bind.TransactOpts, node [32]byte, addr common.Address) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setAddr", node, addr) +} + +// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. +// +// Solidity: function setAddr(node bytes32, addr address) returns() +func (_PublicResolver *PublicResolverSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { + return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) +} + +// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. +// +// Solidity: function setAddr(node bytes32, addr address) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { + return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) +} + +// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// +// Solidity: function setContent(node bytes32, hash bytes32) returns() +func (_PublicResolver *PublicResolverTransactor) SetContent(opts *bind.TransactOpts, node [32]byte, hash [32]byte) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setContent", node, hash) +} + +// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// +// Solidity: function setContent(node bytes32, hash bytes32) returns() +func (_PublicResolver *PublicResolverSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) +} + +// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. +// +// Solidity: function setContent(node bytes32, hash bytes32) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) +} + +// SetName is a paid mutator transaction binding the contract method 0x77372213. +// +// Solidity: function setName(node bytes32, name string) returns() +func (_PublicResolver *PublicResolverTransactor) SetName(opts *bind.TransactOpts, node [32]byte, name string) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setName", node, name) +} + +// SetName is a paid mutator transaction binding the contract method 0x77372213. +// +// Solidity: function setName(node bytes32, name string) returns() +func (_PublicResolver *PublicResolverSession) SetName(node [32]byte, name string) (*types.Transaction, error) { + return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) +} + +// SetName is a paid mutator transaction binding the contract method 0x77372213. +// +// Solidity: function setName(node bytes32, name string) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetName(node [32]byte, name string) (*types.Transaction, error) { + return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) +} + +// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. +// +// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +func (_PublicResolver *PublicResolverTransactor) SetPubkey(opts *bind.TransactOpts, node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setPubkey", node, x, y) +} + +// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. +// +// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +func (_PublicResolver *PublicResolverSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) +} + +// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. +// +// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { + return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) +} + +// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. +// +// Solidity: function setText(node bytes32, key string, value string) returns() +func (_PublicResolver *PublicResolverTransactor) SetText(opts *bind.TransactOpts, node [32]byte, key string, value string) (*types.Transaction, error) { + return _PublicResolver.contract.Transact(opts, "setText", node, key, value) +} + +// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. +// +// Solidity: function setText(node bytes32, key string, value string) returns() +func (_PublicResolver *PublicResolverSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { + return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) +} + +// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. +// +// Solidity: function setText(node bytes32, key string, value string) returns() +func (_PublicResolver *PublicResolverTransactorSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { + return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) +} + +// PublicResolverABIChangedIterator is returned from FilterABIChanged and is used to iterate over the raw logs and unpacked data for ABIChanged events raised by the PublicResolver contract. +type PublicResolverABIChangedIterator struct { + Event *PublicResolverABIChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverABIChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverABIChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverABIChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverABIChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverABIChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverABIChanged represents a ABIChanged event raised by the PublicResolver contract. +type PublicResolverABIChanged struct { + Node [32]byte + ContentType *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterABIChanged is a free log retrieval operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. +// +// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) +func (_PublicResolver *PublicResolverFilterer) FilterABIChanged(opts *bind.FilterOpts, node [][32]byte, contentType []*big.Int) (*PublicResolverABIChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var contentTypeRule []interface{} + for _, contentTypeItem := range contentType { + contentTypeRule = append(contentTypeRule, contentTypeItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ABIChanged", nodeRule, contentTypeRule) + if err != nil { + return nil, err + } + return &PublicResolverABIChangedIterator{contract: _PublicResolver.contract, event: "ABIChanged", logs: logs, sub: sub}, nil +} + +// WatchABIChanged is a free log subscription operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. +// +// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) +func (_PublicResolver *PublicResolverFilterer) WatchABIChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverABIChanged, node [][32]byte, contentType []*big.Int) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var contentTypeRule []interface{} + for _, contentTypeItem := range contentType { + contentTypeRule = append(contentTypeRule, contentTypeItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ABIChanged", nodeRule, contentTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverABIChanged) + if err := _PublicResolver.contract.UnpackLog(event, "ABIChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// PublicResolverAddrChangedIterator is returned from FilterAddrChanged and is used to iterate over the raw logs and unpacked data for AddrChanged events raised by the PublicResolver contract. +type PublicResolverAddrChangedIterator struct { + Event *PublicResolverAddrChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverAddrChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverAddrChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverAddrChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverAddrChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverAddrChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverAddrChanged represents a AddrChanged event raised by the PublicResolver contract. +type PublicResolverAddrChanged struct { + Node [32]byte + A common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAddrChanged is a free log retrieval operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. +// +// Solidity: event AddrChanged(node indexed bytes32, a address) +func (_PublicResolver *PublicResolverFilterer) FilterAddrChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverAddrChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "AddrChanged", nodeRule) + if err != nil { + return nil, err + } + return &PublicResolverAddrChangedIterator{contract: _PublicResolver.contract, event: "AddrChanged", logs: logs, sub: sub}, nil +} + +// WatchAddrChanged is a free log subscription operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. +// +// Solidity: event AddrChanged(node indexed bytes32, a address) +func (_PublicResolver *PublicResolverFilterer) WatchAddrChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverAddrChanged, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "AddrChanged", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverAddrChanged) + if err := _PublicResolver.contract.UnpackLog(event, "AddrChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// PublicResolverContentChangedIterator is returned from FilterContentChanged and is used to iterate over the raw logs and unpacked data for ContentChanged events raised by the PublicResolver contract. +type PublicResolverContentChangedIterator struct { + Event *PublicResolverContentChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverContentChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverContentChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverContentChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverContentChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverContentChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverContentChanged represents a ContentChanged event raised by the PublicResolver contract. +type PublicResolverContentChanged struct { + Node [32]byte + Hash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterContentChanged is a free log retrieval operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. +// +// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) +func (_PublicResolver *PublicResolverFilterer) FilterContentChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverContentChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ContentChanged", nodeRule) + if err != nil { + return nil, err + } + return &PublicResolverContentChangedIterator{contract: _PublicResolver.contract, event: "ContentChanged", logs: logs, sub: sub}, nil +} + +// WatchContentChanged is a free log subscription operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. +// +// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) +func (_PublicResolver *PublicResolverFilterer) WatchContentChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverContentChanged, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ContentChanged", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverContentChanged) + if err := _PublicResolver.contract.UnpackLog(event, "ContentChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// PublicResolverNameChangedIterator is returned from FilterNameChanged and is used to iterate over the raw logs and unpacked data for NameChanged events raised by the PublicResolver contract. +type PublicResolverNameChangedIterator struct { + Event *PublicResolverNameChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverNameChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverNameChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverNameChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverNameChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverNameChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverNameChanged represents a NameChanged event raised by the PublicResolver contract. +type PublicResolverNameChanged struct { + Node [32]byte + Name string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNameChanged is a free log retrieval operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. +// +// Solidity: event NameChanged(node indexed bytes32, name string) +func (_PublicResolver *PublicResolverFilterer) FilterNameChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverNameChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "NameChanged", nodeRule) + if err != nil { + return nil, err + } + return &PublicResolverNameChangedIterator{contract: _PublicResolver.contract, event: "NameChanged", logs: logs, sub: sub}, nil +} + +// WatchNameChanged is a free log subscription operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. +// +// Solidity: event NameChanged(node indexed bytes32, name string) +func (_PublicResolver *PublicResolverFilterer) WatchNameChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverNameChanged, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "NameChanged", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverNameChanged) + if err := _PublicResolver.contract.UnpackLog(event, "NameChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// PublicResolverPubkeyChangedIterator is returned from FilterPubkeyChanged and is used to iterate over the raw logs and unpacked data for PubkeyChanged events raised by the PublicResolver contract. +type PublicResolverPubkeyChangedIterator struct { + Event *PublicResolverPubkeyChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverPubkeyChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverPubkeyChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverPubkeyChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverPubkeyChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverPubkeyChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverPubkeyChanged represents a PubkeyChanged event raised by the PublicResolver contract. +type PublicResolverPubkeyChanged struct { + Node [32]byte + X [32]byte + Y [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPubkeyChanged is a free log retrieval operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. +// +// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) +func (_PublicResolver *PublicResolverFilterer) FilterPubkeyChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverPubkeyChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "PubkeyChanged", nodeRule) + if err != nil { + return nil, err + } + return &PublicResolverPubkeyChangedIterator{contract: _PublicResolver.contract, event: "PubkeyChanged", logs: logs, sub: sub}, nil +} + +// WatchPubkeyChanged is a free log subscription operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. +// +// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) +func (_PublicResolver *PublicResolverFilterer) WatchPubkeyChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverPubkeyChanged, node [][32]byte) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "PubkeyChanged", nodeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverPubkeyChanged) + if err := _PublicResolver.contract.UnpackLog(event, "PubkeyChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// PublicResolverTextChangedIterator is returned from FilterTextChanged and is used to iterate over the raw logs and unpacked data for TextChanged events raised by the PublicResolver contract. +type PublicResolverTextChangedIterator struct { + Event *PublicResolverTextChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PublicResolverTextChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PublicResolverTextChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PublicResolverTextChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error retruned any retrieval or parsing error occurred during filtering. +func (it *PublicResolverTextChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PublicResolverTextChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PublicResolverTextChanged represents a TextChanged event raised by the PublicResolver contract. +type PublicResolverTextChanged struct { + Node [32]byte + IndexedKey common.Hash + Key string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTextChanged is a free log retrieval operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. +// +// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) +func (_PublicResolver *PublicResolverFilterer) FilterTextChanged(opts *bind.FilterOpts, node [][32]byte, indexedKey []string) (*PublicResolverTextChangedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var indexedKeyRule []interface{} + for _, indexedKeyItem := range indexedKey { + indexedKeyRule = append(indexedKeyRule, indexedKeyItem) + } + + logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "TextChanged", nodeRule, indexedKeyRule) + if err != nil { + return nil, err + } + return &PublicResolverTextChangedIterator{contract: _PublicResolver.contract, event: "TextChanged", logs: logs, sub: sub}, nil +} + +// WatchTextChanged is a free log subscription operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. +// +// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) +func (_PublicResolver *PublicResolverFilterer) WatchTextChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverTextChanged, node [][32]byte, indexedKey []string) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + var indexedKeyRule []interface{} + for _, indexedKeyItem := range indexedKey { + indexedKeyRule = append(indexedKeyRule, indexedKeyItem) + } + + logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "TextChanged", nodeRule, indexedKeyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PublicResolverTextChanged) + if err := _PublicResolver.contract.UnpackLog(event, "TextChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/core/asm/lex_test.go b/vendor/github.com/ethereum/go-ethereum/core/asm/lex_test.go index e6901d4e..16e0ad45 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/asm/lex_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/asm/lex_test.go @@ -22,7 +22,7 @@ import ( ) func lexAll(src string) []token { - ch := Lex("test.asm", []byte(src), false) + ch := Lex([]byte(src), false) var tokens []token for i := range ch { diff --git a/vendor/github.com/ethereum/go-ethereum/core/asm/lexer.go b/vendor/github.com/ethereum/go-ethereum/core/asm/lexer.go index 91caeb27..00526242 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/asm/lexer.go +++ b/vendor/github.com/ethereum/go-ethereum/core/asm/lexer.go @@ -95,7 +95,7 @@ type lexer struct { // lex lexes the program by name with the given source. It returns a // channel on which the tokens are delivered. -func Lex(name string, source []byte, debug bool) <-chan token { +func Lex(source []byte, debug bool) <-chan token { ch := make(chan token) l := &lexer{ input: string(source), diff --git a/vendor/github.com/ethereum/go-ethereum/core/bench_test.go b/vendor/github.com/ethereum/go-ethereum/core/bench_test.go index 53cba051..e0ccef78 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/bench_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/bench_test.go @@ -150,14 +150,14 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { // Create the database in memory or in a temporary directory. var db ethdb.Database if !disk { - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() } else { dir, err := ioutil.TempDir("", "eth-core-bench") if err != nil { b.Fatalf("cannot create temporary directory: %v", err) } defer os.RemoveAll(dir) - db, err = ethdb.NewLDBDatabase(dir, 128, 128) + db, err = rawdb.NewLevelDBDatabase(dir, 128, 128, "") if err != nil { b.Fatalf("cannot create temporary database: %v", err) } @@ -255,7 +255,7 @@ func benchWriteChain(b *testing.B, full bool, count uint64) { if err != nil { b.Fatalf("cannot create temporary directory: %v", err) } - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } @@ -272,7 +272,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { } defer os.RemoveAll(dir) - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } @@ -283,7 +283,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { b.ResetTimer() for i := 0; i < b.N; i++ { - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } diff --git a/vendor/github.com/ethereum/go-ethereum/core/block_validator.go b/vendor/github.com/ethereum/go-ethereum/core/block_validator.go index 3b9496fe..b36ca56d 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/block_validator.go +++ b/vendor/github.com/ethereum/go-ethereum/core/block_validator.go @@ -77,7 +77,7 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error { // transition, such as amount of used gas, the receipt roots and the state root // itself. ValidateState returns a database batch if the validation was a success // otherwise nil and an error is returned. -func (v *BlockValidator) ValidateState(block, parent *types.Block, statedb *state.StateDB, receipts types.Receipts, usedGas uint64) error { +func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateDB, receipts types.Receipts, usedGas uint64) error { header := block.Header() if block.GasUsed() != usedGas { return fmt.Errorf("invalid gas used (remote: %d local: %d)", block.GasUsed(), usedGas) diff --git a/vendor/github.com/ethereum/go-ethereum/core/block_validator_test.go b/vendor/github.com/ethereum/go-ethereum/core/block_validator_test.go index 9319a783..06e2ba1a 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/block_validator_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/block_validator_test.go @@ -22,9 +22,9 @@ import ( "time" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -32,7 +32,7 @@ import ( func TestHeaderVerification(t *testing.T) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil) @@ -84,7 +84,7 @@ func TestHeaderConcurrentVerification32(t *testing.T) { testHeaderConcurrentVeri func testHeaderConcurrentVerification(t *testing.T, threads int) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil) @@ -156,7 +156,7 @@ func TestHeaderConcurrentAbortion32(t *testing.T) { testHeaderConcurrentAbortion func testHeaderConcurrentAbortion(t *testing.T, threads int) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 1024, nil) diff --git a/vendor/github.com/ethereum/go-ethereum/core/blockchain.go b/vendor/github.com/ethereum/go-ethereum/core/blockchain.go index 0d2d71b4..745f67d8 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/blockchain.go +++ b/vendor/github.com/ethereum/go-ethereum/core/blockchain.go @@ -43,10 +43,20 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" - "github.com/hashicorp/golang-lru" + lru "github.com/hashicorp/golang-lru" ) var ( + accountReadTimer = metrics.NewRegisteredTimer("chain/account/reads", nil) + accountHashTimer = metrics.NewRegisteredTimer("chain/account/hashes", nil) + accountUpdateTimer = metrics.NewRegisteredTimer("chain/account/updates", nil) + accountCommitTimer = metrics.NewRegisteredTimer("chain/account/commits", nil) + + storageReadTimer = metrics.NewRegisteredTimer("chain/storage/reads", nil) + storageHashTimer = metrics.NewRegisteredTimer("chain/storage/hashes", nil) + storageUpdateTimer = metrics.NewRegisteredTimer("chain/storage/updates", nil) + storageCommitTimer = metrics.NewRegisteredTimer("chain/storage/commits", nil) + blockInsertTimer = metrics.NewRegisteredTimer("chain/inserts", nil) blockValidationTimer = metrics.NewRegisteredTimer("chain/validation", nil) blockExecutionTimer = metrics.NewRegisteredTimer("chain/execution", nil) @@ -65,7 +75,13 @@ const ( triesInMemory = 128 // BlockChainVersion ensures that an incompatible database forces a resync from scratch. - BlockChainVersion uint64 = 3 + // + // During the process of upgrading the database version from 3 to 4, + // the following incompatible database changes were added. + // * the `BlockNumber`, `TxHash`, `TxIndex`, `BlockHash` and `Index` fields of log are deleted + // * the `Bloom` field of receipt is deleted + // * the `BlockIndex` and `TxIndex` fields of txlookup are deleted + BlockChainVersion uint64 = 4 ) // CacheConfig contains the configuration values for the trie caching/pruning @@ -105,10 +121,10 @@ type BlockChain struct { chainSideFeed event.Feed chainHeadFeed event.Feed logsFeed event.Feed + blockProcFeed event.Feed scope event.SubscriptionScope genesisBlock *types.Block - mu sync.RWMutex // global mutex for locking chain operations chainmu sync.RWMutex // blockchain insertion lock procmu sync.RWMutex // block processor lock @@ -281,11 +297,11 @@ func (bc *BlockChain) loadLastState() error { func (bc *BlockChain) SetHead(head uint64) error { log.Warn("Rewinding blockchain", "target", head) - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() // Rewind the header chain, deleting all block bodies until then - delFn := func(db rawdb.DatabaseDeleter, hash common.Hash, num uint64) { + delFn := func(db ethdb.Writer, hash common.Hash, num uint64) { rawdb.DeleteBody(db, hash, num) } bc.hc.SetHead(head, delFn) @@ -336,13 +352,13 @@ func (bc *BlockChain) FastSyncCommitHead(hash common.Hash) error { if block == nil { return fmt.Errorf("non existent block [%x…]", hash[:4]) } - if _, err := trie.NewSecure(block.Root(), bc.stateCache.TrieDB(), 0); err != nil { + if _, err := trie.NewSecure(block.Root(), bc.stateCache.TrieDB()); err != nil { return err } // If all checks out, manually set the head block - bc.mu.Lock() + bc.chainmu.Lock() bc.currentBlock.Store(block) - bc.mu.Unlock() + bc.chainmu.Unlock() log.Info("Committed new head block", "number", block.Number(), "hash", hash) return nil @@ -420,8 +436,8 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error { if err := bc.SetHead(0); err != nil { return err } - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() // Prepare the genesis block and reinitialise the chain if err := bc.hc.WriteTd(genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()); err != nil { @@ -457,7 +473,7 @@ func (bc *BlockChain) repair(head **types.Block) error { if block == nil { return fmt.Errorf("missing block %d [%x]", (*head).NumberU64()-1, (*head).ParentHash()) } - (*head) = block + *head = block } } @@ -468,8 +484,8 @@ func (bc *BlockChain) Export(w io.Writer) error { // ExportN writes a subset of the active chain to the given writer. func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { - bc.mu.RLock() - defer bc.mu.RUnlock() + bc.chainmu.RLock() + defer bc.chainmu.RUnlock() if first > last { return fmt.Errorf("export failed: first (%d) is greater than last (%d)", first, last) @@ -490,7 +506,6 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { reported = time.Now() } } - return nil } @@ -646,6 +661,9 @@ func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { return nil } receipts := rawdb.ReadReceipts(bc.db, hash, *number) + if receipts == nil { + return nil + } bc.receiptsCache.Add(hash, receipts) return receipts } @@ -756,8 +774,8 @@ const ( // Rollback is designed to remove a chain of links from the database that aren't // certain enough to be valid. func (bc *BlockChain) Rollback(chain []common.Hash) { - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() for i := len(chain) - 1; i >= 0; i-- { hash := chain[i] @@ -792,6 +810,11 @@ func SetReceiptsData(config *params.ChainConfig, block *types.Block, receipts ty // The transaction hash can be retrieved from the transaction itself receipts[j].TxHash = transactions[j].Hash() + // block location fields + receipts[j].BlockHash = block.Hash() + receipts[j].BlockNumber = block.Number() + receipts[j].TransactionIndex = uint(j) + // The contract address can be derived from the transaction itself if transactions[j].To() == nil { // Deriving the signer is expensive, only do if it's actually needed @@ -881,7 +904,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ } // Update the head fast sync block if better - bc.mu.Lock() + bc.chainmu.Lock() head := blockChain[len(blockChain)-1] if td := bc.GetTd(head.Hash(), head.NumberU64()); td != nil { // Rewind may have occurred, skip in that case currentFastBlock := bc.CurrentFastBlock() @@ -890,7 +913,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ bc.currentFastBlock.Store(head) } } - bc.mu.Unlock() + bc.chainmu.Unlock() context := []interface{}{ "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)), @@ -924,6 +947,15 @@ func (bc *BlockChain) WriteBlockWithoutState(block *types.Block, td *big.Int) (e // WriteBlockWithState writes the block and all associated state to the database. func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types.Receipt, state *state.StateDB) (status WriteStatus, err error) { + bc.chainmu.Lock() + defer bc.chainmu.Unlock() + + return bc.writeBlockWithState(block, receipts, state) +} + +// writeBlockWithState writes the block and all associated state to the database, +// but is expects the chain mutex to be held. +func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.Receipt, state *state.StateDB) (status WriteStatus, err error) { bc.wg.Add(1) defer bc.wg.Done() @@ -933,9 +965,6 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. return NonStatTy, consensus.ErrUnknownAncestor } // Make sure no inconsistent state is leaked during insertion - bc.mu.Lock() - defer bc.mu.Unlock() - currentBlock := bc.CurrentBlock() localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) externTd := new(big.Int).Add(block.Difficulty(), ptd) @@ -1077,15 +1106,25 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { if len(chain) == 0 { return 0, nil } + + bc.blockProcFeed.Send(true) + defer bc.blockProcFeed.Send(false) + + // Remove already known canon-blocks + var ( + block, prev *types.Block + ) // Do a sanity check that the provided chain is actually ordered and linked for i := 1; i < len(chain); i++ { - if chain[i].NumberU64() != chain[i-1].NumberU64()+1 || chain[i].ParentHash() != chain[i-1].Hash() { + block = chain[i] + prev = chain[i-1] + if block.NumberU64() != prev.NumberU64()+1 || block.ParentHash() != prev.Hash() { // Chain broke ancestry, log a message (programming error) and skip insertion - log.Error("Non contiguous block insert", "number", chain[i].Number(), "hash", chain[i].Hash(), - "parent", chain[i].ParentHash(), "prevnumber", chain[i-1].Number(), "prevhash", chain[i-1].Hash()) + log.Error("Non contiguous block insert", "number", block.Number(), "hash", block.Hash(), + "parent", block.ParentHash(), "prevnumber", prev.Number(), "prevhash", prev.Hash()) - return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, chain[i-1].NumberU64(), - chain[i-1].Hash().Bytes()[:4], i, chain[i].NumberU64(), chain[i].Hash().Bytes()[:4], chain[i].ParentHash().Bytes()[:4]) + return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, prev.NumberU64(), + prev.Hash().Bytes()[:4], i, block.NumberU64(), block.Hash().Bytes()[:4], block.ParentHash().Bytes()[:4]) } } // Pre-checks passed, start the full block imports @@ -1139,6 +1178,22 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] it := newInsertIterator(chain, results, bc.Validator()) block, err := it.next() + + // Left-trim all the known blocks + if err == ErrKnownBlock { + // First block (and state) is known + // 1. We did a roll-back, and should now do a re-import + // 2. The block is stored as a sidechain, and is lying about it's stateroot, and passes a stateroot + // from the canonical chain, which has not been verified. + // Skip all known blocks that are behind us + current := bc.CurrentBlock().NumberU64() + for block != nil && err == ErrKnownBlock && current >= block.NumberU64() { + stats.ignored++ + block, err = it.next() + } + // Falls through to the block import + } + switch { // First block is pruned, insert as sidechain and reorg only if TD grows enough case err == consensus.ErrPrunedAncestor: @@ -1158,20 +1213,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // If there are any still remaining, mark as ignored return it.index, events, coalescedLogs, err - // First block (and state) is known - // 1. We did a roll-back, and should now do a re-import - // 2. The block is stored as a sidechain, and is lying about it's stateroot, and passes a stateroot - // from the canonical chain, which has not been verified. - case err == ErrKnownBlock: - // Skip all known blocks that behind us - current := bc.CurrentBlock().NumberU64() - - for block != nil && err == ErrKnownBlock && current >= block.NumberU64() { - stats.ignored++ - block, err = it.next() - } - // Falls through to the block import - // Some other error occurred, abort case err != nil: stats.ignored += len(it.chain) @@ -1195,38 +1236,58 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] parent := it.previous() if parent == nil { - parent = bc.GetBlock(block.ParentHash(), block.NumberU64()-1) + parent = bc.GetHeader(block.ParentHash(), block.NumberU64()-1) } - state, err := state.New(parent.Root(), bc.stateCache) + state, err := state.New(parent.Root, bc.stateCache) if err != nil { return it.index, events, coalescedLogs, err } // Process block using the parent state as reference point. - t0 := time.Now() + substart := time.Now() receipts, logs, usedGas, err := bc.processor.Process(block, state, bc.vmConfig) - t1 := time.Now() if err != nil { bc.reportBlock(block, receipts, err) return it.index, events, coalescedLogs, err } + // Update the metrics touched during block processing + accountReadTimer.Update(state.AccountReads) // Account reads are complete, we can mark them + storageReadTimer.Update(state.StorageReads) // Storage reads are complete, we can mark them + accountUpdateTimer.Update(state.AccountUpdates) // Account updates are complete, we can mark them + storageUpdateTimer.Update(state.StorageUpdates) // Storage updates are complete, we can mark them + + triehash := state.AccountHashes + state.StorageHashes // Save to not double count in validation + trieproc := state.AccountReads + state.AccountUpdates + trieproc += state.StorageReads + state.StorageUpdates + + blockExecutionTimer.Update(time.Since(substart) - trieproc - triehash) + // Validate the state using the default validator - if err := bc.Validator().ValidateState(block, parent, state, receipts, usedGas); err != nil { + substart = time.Now() + if err := bc.Validator().ValidateState(block, state, receipts, usedGas); err != nil { bc.reportBlock(block, receipts, err) return it.index, events, coalescedLogs, err } - t2 := time.Now() proctime := time.Since(start) + // Update the metrics touched during block validation + accountHashTimer.Update(state.AccountHashes) // Account hashes are complete, we can mark them + storageHashTimer.Update(state.StorageHashes) // Storage hashes are complete, we can mark them + + blockValidationTimer.Update(time.Since(substart) - (state.AccountHashes + state.StorageHashes - triehash)) + // Write the block to the chain and get the status. - status, err := bc.WriteBlockWithState(block, receipts, state) - t3 := time.Now() + substart = time.Now() + status, err := bc.writeBlockWithState(block, receipts, state) if err != nil { return it.index, events, coalescedLogs, err } + // Update the metrics touched during block commit + accountCommitTimer.Update(state.AccountCommits) // Account commits are complete, we can mark them + storageCommitTimer.Update(state.StorageCommits) // Storage commits are complete, we can mark them + + blockWriteTimer.Update(time.Since(substart) - state.AccountCommits - state.StorageCommits) blockInsertTimer.UpdateSince(start) - blockExecutionTimer.Update(t1.Sub(t0)) - blockValidationTimer.Update(t2.Sub(t1)) - blockWriteTimer.Update(t3.Sub(t2)) + switch status { case CanonStatTy: log.Debug("Inserted new block", "number", block.Number(), "hash", block.Hash(), @@ -1248,12 +1309,11 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "root", block.Root()) events = append(events, ChainSideEvent{block}) } - blockInsertTimer.UpdateSince(start) stats.processed++ stats.usedGas += usedGas - cache, _ := bc.stateCache.TrieDB().Size() - stats.report(chain, it.index, cache) + dirty, _ := bc.stateCache.TrieDB().Size() + stats.report(chain, it.index, dirty) } // Any blocks remaining here? The only ones we care about are the future ones if block != nil && err == consensus.ErrFutureBlock { @@ -1287,7 +1347,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (int, []interface{}, []*types.Log, error) { var ( externTd *big.Int - current = bc.CurrentBlock().NumberU64() + current = bc.CurrentBlock() ) // The first sidechain block error is already verified to be ErrPrunedAncestor. // Since we don't import them here, we expect ErrUnknownAncestor for the remaining @@ -1296,8 +1356,13 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i err := consensus.ErrPrunedAncestor for ; block != nil && (err == consensus.ErrPrunedAncestor); block, err = it.next() { // Check the canonical state root for that number - if number := block.NumberU64(); current >= number { - if canonical := bc.GetBlockByNumber(number); canonical != nil && canonical.Root() == block.Root() { + if number := block.NumberU64(); current.NumberU64() >= number { + canonical := bc.GetBlockByNumber(number) + if canonical != nil && canonical.Hash() == block.Hash() { + // Not a sidechain block, this is a re-import of a canon block which has it's state pruned + continue + } + if canonical != nil && canonical.Root() == block.Root() { // This is most likely a shadow-state attack. When a fork is imported into the // database, and it eventually reaches a block height which is not pruned, we // just found that the state already exist! This means that the sidechain block @@ -1335,9 +1400,9 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i // // If the externTd was larger than our local TD, we now need to reimport the previous // blocks to regenerate the required state - localTd := bc.GetTd(bc.CurrentBlock().Hash(), current) + localTd := bc.GetTd(current.Hash(), current.NumberU64()) if localTd.Cmp(externTd) > 0 { - log.Info("Sidechain written to disk", "start", it.first().NumberU64(), "end", it.previous().NumberU64(), "sidetd", externTd, "localtd", localTd) + log.Info("Sidechain written to disk", "start", it.first().NumberU64(), "end", it.previous().Number, "sidetd", externTd, "localtd", localTd) return it.index, nil, nil, err } // Gather all the sidechain hashes (full blocks may be memory heavy) @@ -1345,7 +1410,7 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i hashes []common.Hash numbers []uint64 ) - parent := bc.GetHeader(it.previous().Hash(), it.previous().NumberU64()) + parent := it.previous() for parent != nil && !bc.HasState(parent.Root) { hashes = append(hashes, parent.Hash()) numbers = append(numbers, parent.Number.Uint64()) @@ -1603,36 +1668,12 @@ func (bc *BlockChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (i defer bc.wg.Done() whFunc := func(header *types.Header) error { - bc.mu.Lock() - defer bc.mu.Unlock() - _, err := bc.hc.WriteHeader(header) return err } - return bc.hc.InsertHeaderChain(chain, whFunc, start) } -// writeHeader writes a header into the local chain, given that its parent is -// already known. If the total difficulty of the newly inserted header becomes -// greater than the current known TD, the canonical chain is re-routed. -// -// Note: This method is not concurrent-safe with inserting blocks simultaneously -// into the chain, as side effects caused by reorganisations cannot be emulated -// without the real blocks. Hence, writing headers directly should only be done -// in two scenarios: pure-header mode of operation (light clients), or properly -// separated header/block phases (non-archive clients). -func (bc *BlockChain) writeHeader(header *types.Header) error { - bc.wg.Add(1) - defer bc.wg.Done() - - bc.mu.Lock() - defer bc.mu.Unlock() - - _, err := bc.hc.WriteHeader(header) - return err -} - // CurrentHeader retrieves the current head header of the canonical chain. The // header is retrieved from the HeaderChain's internal cache. func (bc *BlockChain) CurrentHeader() *types.Header { @@ -1681,8 +1722,8 @@ func (bc *BlockChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []com // // Note: ancestor == 0 returns the same block, 1 returns its parent and so on. func (bc *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - bc.chainmu.Lock() - defer bc.chainmu.Unlock() + bc.chainmu.RLock() + defer bc.chainmu.RUnlock() return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) } @@ -1723,3 +1764,9 @@ func (bc *BlockChain) SubscribeChainSideEvent(ch chan<- ChainSideEvent) event.Su func (bc *BlockChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { return bc.scope.Track(bc.logsFeed.Subscribe(ch)) } + +// SubscribeBlockProcessingEvent registers a subscription of bool where true means +// block processing has started while false means it has stopped. +func (bc *BlockChain) SubscribeBlockProcessingEvent(ch chan<- bool) event.Subscription { + return bc.scope.Track(bc.blockProcFeed.Subscribe(ch)) +} diff --git a/vendor/github.com/ethereum/go-ethereum/core/blockchain_insert.go b/vendor/github.com/ethereum/go-ethereum/core/blockchain_insert.go index cfa32c5a..e2a38516 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/blockchain_insert.go +++ b/vendor/github.com/ethereum/go-ethereum/core/blockchain_insert.go @@ -39,7 +39,7 @@ const statsReportLimit = 8 * time.Second // report prints statistics if some number of blocks have been processed // or more than a few seconds have passed since the last message. -func (st *insertStats) report(chain []*types.Block, index int, cache common.StorageSize) { +func (st *insertStats) report(chain []*types.Block, index int, dirty common.StorageSize) { // Fetch the timings for the batch var ( now = mclock.Now() @@ -63,7 +63,7 @@ func (st *insertStats) report(chain []*types.Block, index int, cache common.Stor if timestamp := time.Unix(end.Time().Int64(), 0); time.Since(timestamp) > time.Minute { context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) } - context = append(context, []interface{}{"cache", cache}...) + context = append(context, []interface{}{"dirty", dirty}...) if st.queued > 0 { context = append(context, []interface{}{"queued", st.queued}...) @@ -111,12 +111,12 @@ func (it *insertIterator) next() (*types.Block, error) { return it.chain[it.index], it.validator.ValidateBody(it.chain[it.index]) } -// previous returns the previous block was being processed, or nil -func (it *insertIterator) previous() *types.Block { +// previous returns the previous header that was being processed, or nil. +func (it *insertIterator) previous() *types.Header { if it.index < 1 { return nil } - return it.chain[it.index-1] + return it.chain[it.index-1].Header() } // first returns the first block in the it. diff --git a/vendor/github.com/ethereum/go-ethereum/core/blockchain_test.go b/vendor/github.com/ethereum/go-ethereum/core/blockchain_test.go index 504ad0ea..d1681ce3 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/blockchain_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/blockchain_test.go @@ -17,7 +17,6 @@ package core import ( - "fmt" "math/big" "math/rand" "sync" @@ -47,7 +46,7 @@ var ( // header only chain. func newCanonical(engine consensus.Engine, n int, full bool) (ethdb.Database, *BlockChain, error) { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() genesis = new(Genesis).MustCommit(db) ) @@ -126,13 +125,6 @@ func testFork(t *testing.T, blockchain *BlockChain, i, n int, full bool, compara comparator(tdPre, tdPost) } -func printChain(bc *BlockChain) { - for i := bc.CurrentBlock().Number().Uint64(); i > 0; i-- { - b := bc.GetBlockByNumber(uint64(i)) - fmt.Printf("\t%x %v\n", b.Hash(), b.Difficulty()) - } -} - // testBlockChainImport tries to process a chain of blocks, writing them into // the database if successful. func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { @@ -157,16 +149,16 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { blockchain.reportBlock(block, receipts, err) return err } - err = blockchain.validator.ValidateState(block, blockchain.GetBlockByHash(block.ParentHash()), statedb, receipts, usedGas) + err = blockchain.validator.ValidateState(block, statedb, receipts, usedGas) if err != nil { blockchain.reportBlock(block, receipts, err) return err } - blockchain.mu.Lock() + blockchain.chainmu.Lock() rawdb.WriteTd(blockchain.db, block.Hash(), block.NumberU64(), new(big.Int).Add(block.Difficulty(), blockchain.GetTdByHash(block.ParentHash()))) rawdb.WriteBlock(blockchain.db, block) statedb.Commit(false) - blockchain.mu.Unlock() + blockchain.chainmu.Unlock() } return nil } @@ -180,23 +172,14 @@ func testHeaderChainImport(chain []*types.Header, blockchain *BlockChain) error return err } // Manually insert the header into the database, but don't reorganise (allows subsequent testing) - blockchain.mu.Lock() + blockchain.chainmu.Lock() rawdb.WriteTd(blockchain.db, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, blockchain.GetTdByHash(header.ParentHash))) rawdb.WriteHeader(blockchain.db, header) - blockchain.mu.Unlock() + blockchain.chainmu.Unlock() } return nil } -func insertChain(done chan bool, blockchain *BlockChain, chain types.Blocks, t *testing.T) { - _, err := blockchain.InsertChain(chain) - if err != nil { - fmt.Println(err) - t.FailNow() - } - done <- true -} - func TestLastBlock(t *testing.T) { _, blockchain, err := newCanonical(ethash.NewFaker(), 0, true) if err != nil { @@ -603,7 +586,7 @@ func testInsertNonceError(t *testing.T, full bool) { func TestFastVsFullChains(t *testing.T) { // Configure and generate a sample block chain var ( - gendb = ethdb.NewMemDatabase() + gendb = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -633,7 +616,7 @@ func TestFastVsFullChains(t *testing.T) { } }) // Import the chain as an archive node for the comparison baseline - archiveDb := ethdb.NewMemDatabase() + archiveDb := rawdb.NewMemoryDatabase() gspec.MustCommit(archiveDb) archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer archive.Stop() @@ -642,7 +625,7 @@ func TestFastVsFullChains(t *testing.T) { t.Fatalf("failed to process block %d: %v", n, err) } // Fast import the chain as a non-archive node to test - fastDb := ethdb.NewMemDatabase() + fastDb := rawdb.NewMemoryDatabase() gspec.MustCommit(fastDb) fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer fast.Stop() @@ -691,7 +674,7 @@ func TestFastVsFullChains(t *testing.T) { func TestLightVsFastVsFullChainHeads(t *testing.T) { // Configure and generate a sample block chain var ( - gendb = ethdb.NewMemDatabase() + gendb = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -719,7 +702,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { } } // Import the chain as an archive node and ensure all pointers are updated - archiveDb := ethdb.NewMemDatabase() + archiveDb := rawdb.NewMemoryDatabase() gspec.MustCommit(archiveDb) archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) @@ -733,7 +716,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { assert(t, "archive", archive, height/2, height/2, height/2) // Import the chain as a non-archive node and ensure all pointers are updated - fastDb := ethdb.NewMemDatabase() + fastDb := rawdb.NewMemoryDatabase() gspec.MustCommit(fastDb) fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer fast.Stop() @@ -753,7 +736,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { assert(t, "fast", fast, height/2, height/2, 0) // Import the chain as a light node and ensure all pointers are updated - lightDb := ethdb.NewMemDatabase() + lightDb := rawdb.NewMemoryDatabase() gspec.MustCommit(lightDb) light, _ := NewBlockChain(lightDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) @@ -776,7 +759,7 @@ func TestChainTxReorgs(t *testing.T) { addr1 = crypto.PubkeyToAddress(key1.PublicKey) addr2 = crypto.PubkeyToAddress(key2.PublicKey) addr3 = crypto.PubkeyToAddress(key3.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = &Genesis{ Config: params.TestChainConfig, GasLimit: 3141592, @@ -888,7 +871,7 @@ func TestLogReorgs(t *testing.T) { var ( key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") addr1 = crypto.PubkeyToAddress(key1.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() // this code generates a log code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} @@ -932,7 +915,7 @@ func TestLogReorgs(t *testing.T) { func TestReorgSideEvent(t *testing.T) { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") addr1 = crypto.PubkeyToAddress(key1.PublicKey) gspec = &Genesis{ @@ -1060,7 +1043,7 @@ func TestCanonicalBlockRetrieval(t *testing.T) { func TestEIP155Transition(t *testing.T) { // Configure and generate a sample block chain var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -1163,7 +1146,7 @@ func TestEIP155Transition(t *testing.T) { func TestEIP161AccountRemoval(t *testing.T) { // Configure and generate a sample block chain var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -1235,7 +1218,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) @@ -1251,7 +1234,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { } // Import the canonical and fork chain side by side, verifying the current block // and current header consistency - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1280,7 +1263,7 @@ func TestTrieForkGC(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*triesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) @@ -1295,7 +1278,7 @@ func TestTrieForkGC(t *testing.T) { forks[i] = fork[0] } // Import the canonical and fork chain side by side, forcing the trie cache to cache both - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1326,7 +1309,7 @@ func TestLargeReorgTrieGC(t *testing.T) { // Generate the original common chain segment and the two competing forks engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) shared, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) @@ -1334,7 +1317,7 @@ func TestLargeReorgTrieGC(t *testing.T) { competitor, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*triesInMemory+1, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{3}) }) // Import the shared chain and the original canonical one - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1394,7 +1377,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in ) // Generate the original common chain segment and the two competing forks engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := gspec.MustCommit(db) blockGenerator := func(i int, block *BlockGen) { @@ -1416,7 +1399,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in b.ResetTimer() for i := 0; i < b.N; i++ { // Import the shared chain and the original canonical one - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() gspec.MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1429,7 +1412,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in } b.StopTimer() if got := chain.CurrentBlock().Transactions().Len(); got != numTxs*numBlocks { - b.Fatalf("Transactions were not included, expected %d, got %d", (numTxs * numBlocks), got) + b.Fatalf("Transactions were not included, expected %d, got %d", numTxs*numBlocks, got) } } @@ -1494,7 +1477,7 @@ func BenchmarkBlockChain_1x1000Executions(b *testing.B) { func TestLowDiffLongChain(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) // We must use a pretty long chain to ensure that the fork doesn't overtake us @@ -1505,7 +1488,7 @@ func TestLowDiffLongChain(t *testing.T) { }) // Import the canonical chain - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1538,3 +1521,85 @@ func TestLowDiffLongChain(t *testing.T) { header = chain.GetHeader(header.ParentHash, number-1) } } + +// Tests that importing a sidechain (S), where +// - S is sidechain, containing blocks [Sn...Sm] +// - C is canon chain, containing blocks [G..Cn..Cm] +// - A common ancestor is placed at prune-point + blocksBetweenCommonAncestorAndPruneblock +// - The sidechain S is prepended with numCanonBlocksInSidechain blocks from the canon chain +func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommonAncestorAndPruneblock int) { + + // Generate a canonical chain to act as the main dataset + engine := ethash.NewFaker() + db := rawdb.NewMemoryDatabase() + genesis := new(Genesis).MustCommit(db) + + // Generate and import the canonical chain + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*triesInMemory, nil) + diskdb := rawdb.NewMemoryDatabase() + new(Genesis).MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + if n, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + + lastPrunedIndex := len(blocks) - triesInMemory - 1 + lastPrunedBlock := blocks[lastPrunedIndex] + firstNonPrunedBlock := blocks[len(blocks)-triesInMemory] + + // Verify pruning of lastPrunedBlock + if chain.HasBlockAndState(lastPrunedBlock.Hash(), lastPrunedBlock.NumberU64()) { + t.Errorf("Block %d not pruned", lastPrunedBlock.NumberU64()) + } + // Verify firstNonPrunedBlock is not pruned + if !chain.HasBlockAndState(firstNonPrunedBlock.Hash(), firstNonPrunedBlock.NumberU64()) { + t.Errorf("Block %d pruned", firstNonPrunedBlock.NumberU64()) + } + // Generate the sidechain + // First block should be a known block, block after should be a pruned block. So + // canon(pruned), side, side... + + // Generate fork chain, make it longer than canon + parentIndex := lastPrunedIndex + blocksBetweenCommonAncestorAndPruneblock + parent := blocks[parentIndex] + fork, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 2*triesInMemory, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{2}) + }) + // Prepend the parent(s) + var sidechain []*types.Block + for i := numCanonBlocksInSidechain; i > 0; i-- { + sidechain = append(sidechain, blocks[parentIndex+1-i]) + } + sidechain = append(sidechain, fork...) + _, err = chain.InsertChain(sidechain) + if err != nil { + t.Errorf("Got error, %v", err) + } + head := chain.CurrentBlock() + if got := fork[len(fork)-1].Hash(); got != head.Hash() { + t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + } +} + +// Tests that importing a sidechain (S), where +// - S is sidechain, containing blocks [Sn...Sm] +// - C is canon chain, containing blocks [G..Cn..Cm] +// - The common ancestor Cc is pruned +// - The first block in S: Sn, is == Cn +// That is: the sidechain for import contains some blocks already present in canon chain. +// So the blocks are +// [ Cn, Cn+1, Cc, Sn+3 ... Sm] +// ^ ^ ^ pruned +func TestPrunedImportSide(t *testing.T) { + //glogger := log.NewGlogHandler(log.StreamHandler(os.Stdout, log.TerminalFormat(false))) + //glogger.Verbosity(3) + //log.Root().SetHandler(log.Handler(glogger)) + testSideImport(t, 3, 3) + testSideImport(t, 3, -3) + testSideImport(t, 10, 0) + testSideImport(t, 1, 10) + testSideImport(t, 1, -10) +} diff --git a/vendor/github.com/ethereum/go-ethereum/core/chain_indexer.go b/vendor/github.com/ethereum/go-ethereum/core/chain_indexer.go index 1adde1fc..26538260 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/chain_indexer.go +++ b/vendor/github.com/ethereum/go-ethereum/core/chain_indexer.go @@ -97,7 +97,7 @@ type ChainIndexer struct { // NewChainIndexer creates a new chain indexer to do background processing on // chain segments of a given size after certain number of confirmations passed. // The throttling parameter might be used to prevent database thrashing. -func NewChainIndexer(chainDb, indexDb ethdb.Database, backend ChainIndexerBackend, section, confirm uint64, throttling time.Duration, kind string) *ChainIndexer { +func NewChainIndexer(chainDb ethdb.Database, indexDb ethdb.Database, backend ChainIndexerBackend, section, confirm uint64, throttling time.Duration, kind string) *ChainIndexer { c := &ChainIndexer{ chainDb: chainDb, indexDb: indexDb, diff --git a/vendor/github.com/ethereum/go-ethereum/core/chain_indexer_test.go b/vendor/github.com/ethereum/go-ethereum/core/chain_indexer_test.go index a029dec6..abf5b3cc 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/chain_indexer_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/chain_indexer_test.go @@ -27,7 +27,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" ) // Runs multiple tests with randomized parameters. @@ -49,7 +48,7 @@ func TestChainIndexerWithChildren(t *testing.T) { // multiple backends. The section size and required confirmation count parameters // are randomized. func testChainIndexer(t *testing.T, count int) { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() defer db.Close() // Create a chain of indexers and ensure they all report empty @@ -60,7 +59,7 @@ func testChainIndexer(t *testing.T, count int) { confirmsReq = uint64(rand.Intn(10)) ) backends[i] = &testChainIndexBackend{t: t, processCh: make(chan uint64)} - backends[i].indexer = NewChainIndexer(db, ethdb.NewTable(db, string([]byte{byte(i)})), backends[i], sectionSize, confirmsReq, 0, fmt.Sprintf("indexer-%d", i)) + backends[i].indexer = NewChainIndexer(db, rawdb.NewTable(db, string([]byte{byte(i)})), backends[i], sectionSize, confirmsReq, 0, fmt.Sprintf("indexer-%d", i)) if sections, _, _ := backends[i].indexer.Sections(); sections != 0 { t.Fatalf("Canonical section count mismatch: have %v, want %v", sections, 0) diff --git a/vendor/github.com/ethereum/go-ethereum/core/chain_makers_test.go b/vendor/github.com/ethereum/go-ethereum/core/chain_makers_test.go index 64b64fd6..32e3888d 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/chain_makers_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/chain_makers_test.go @@ -21,10 +21,10 @@ import ( "math/big" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -36,7 +36,7 @@ func ExampleGenerateChain() { addr1 = crypto.PubkeyToAddress(key1.PublicKey) addr2 = crypto.PubkeyToAddress(key2.PublicKey) addr3 = crypto.PubkeyToAddress(key3.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() ) // Ensure that key1 has some funds in the genesis block. diff --git a/vendor/github.com/ethereum/go-ethereum/core/dao_test.go b/vendor/github.com/ethereum/go-ethereum/core/dao_test.go index 966139bc..4e8dba9e 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/dao_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/dao_test.go @@ -21,8 +21,8 @@ import ( "testing" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -32,13 +32,13 @@ func TestDAOForkRangeExtradata(t *testing.T) { forkBlock := big.NewInt(32) // Generate a common prefix for both pro-forkers and non-forkers - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := new(Genesis) genesis := gspec.MustCommit(db) prefix, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) // Create the concurrent, conflicting two nodes - proDb := ethdb.NewMemDatabase() + proDb := rawdb.NewMemoryDatabase() gspec.MustCommit(proDb) proConf := *params.TestChainConfig @@ -48,7 +48,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { proBc, _ := NewBlockChain(proDb, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer proBc.Stop() - conDb := ethdb.NewMemDatabase() + conDb := rawdb.NewMemoryDatabase() gspec.MustCommit(conDb) conConf := *params.TestChainConfig @@ -67,7 +67,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { // Try to expand both pro-fork and non-fork chains iteratively with other camp's blocks for i := int64(0); i < params.DAOForkExtraRange.Int64(); i++ { // Create a pro-fork block, and try to feed into the no-fork chain - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -92,7 +92,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { t.Fatalf("contra-fork chain didn't accepted no-fork block: %v", err) } // Create a no-fork block, and try to feed into the pro-fork chain - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -118,7 +118,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { } } // Verify that contra-forkers accept pro-fork extra-datas after forking finishes - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -138,7 +138,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { t.Fatalf("contra-fork chain didn't accept pro-fork block post-fork: %v", err) } // Verify that pro-forkers accept contra-fork extra-datas after forking finishes - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() diff --git a/vendor/github.com/ethereum/go-ethereum/core/genesis.go b/vendor/github.com/ethereum/go-ethereum/core/genesis.go index cbb6eecd..4aa12996 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/genesis.go +++ b/vendor/github.com/ethereum/go-ethereum/core/genesis.go @@ -134,7 +134,7 @@ type GenesisMismatchError struct { } func (e *GenesisMismatchError) Error() string { - return fmt.Sprintf("database already contains an incompatible genesis block (have %x, new %x)", e.Stored[:8], e.New[:8]) + return fmt.Sprintf("database contains incompatible genesis (have %x, new %x)", e.Stored, e.New) } // SetupGenesisBlock writes or updates the genesis block in db. @@ -228,7 +228,7 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { // to the given database (or discards it if nil). func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { if db == nil { - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() } statedb, _ := state.New(common.Hash{}, state.NewDatabase(db)) for addr, account := range g.Alloc { diff --git a/vendor/github.com/ethereum/go-ethereum/core/genesis_test.go b/vendor/github.com/ethereum/go-ethereum/core/genesis_test.go index c7d54f20..c6bcd0aa 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/genesis_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/genesis_test.go @@ -141,7 +141,7 @@ func TestSetupGenesis(t *testing.T) { } for _, test := range tests { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() config, hash, err := test.fn(db) // Check the return values. if !reflect.DeepEqual(err, test.wantErr) { diff --git a/vendor/github.com/ethereum/go-ethereum/core/headerchain.go b/vendor/github.com/ethereum/go-ethereum/core/headerchain.go index d2093113..f005b832 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/headerchain.go +++ b/vendor/github.com/ethereum/go-ethereum/core/headerchain.go @@ -33,7 +33,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/hashicorp/golang-lru" + lru "github.com/hashicorp/golang-lru" ) const ( @@ -219,14 +219,18 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) // Generate the list of seal verification requests, and start the parallel verifier seals := make([]bool, len(chain)) - for i := 0; i < len(seals)/checkFreq; i++ { - index := i*checkFreq + hc.rand.Intn(checkFreq) - if index >= len(seals) { - index = len(seals) - 1 + if checkFreq != 0 { + // In case of checkFreq == 0 all seals are left false. + for i := 0; i < len(seals)/checkFreq; i++ { + index := i*checkFreq + hc.rand.Intn(checkFreq) + if index >= len(seals) { + index = len(seals) - 1 + } + seals[index] = true } - seals[index] = true + // Last should always be verified to avoid junk. + seals[len(seals)-1] = true } - seals[len(seals)-1] = true // Last should always be verified to avoid junk abort, results := hc.engine.VerifyHeaders(hc, chain, seals) defer close(abort) @@ -451,7 +455,7 @@ func (hc *HeaderChain) SetCurrentHeader(head *types.Header) { // DeleteCallback is a callback function that is called by SetHead before // each header is deleted. -type DeleteCallback func(rawdb.DatabaseDeleter, common.Hash, uint64) +type DeleteCallback func(ethdb.Writer, common.Hash, uint64) // SetHead rewinds the local chain to a new head. Everything above the new head // will be deleted and the new one set. diff --git a/vendor/github.com/ethereum/go-ethereum/core/helper_test.go b/vendor/github.com/ethereum/go-ethereum/core/helper_test.go index 051384d8..e61c92dc 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/helper_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/helper_test.go @@ -19,6 +19,7 @@ package core import ( "container/list" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -78,7 +79,7 @@ func (tm *TestManager) Db() ethdb.Database { func NewTestManager() *TestManager { testManager := &TestManager{} testManager.eventMux = new(event.TypeMux) - testManager.db = ethdb.NewMemDatabase() + testManager.db = rawdb.NewMemoryDatabase() // testManager.txPool = NewTxPool(testManager) // testManager.blockChain = NewBlockChain(testManager) // testManager.stateManager = NewStateManager(testManager) diff --git a/vendor/github.com/ethereum/go-ethereum/core/mkalloc.go b/vendor/github.com/ethereum/go-ethereum/core/mkalloc.go index 565e8c58..5118a4fc 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/mkalloc.go +++ b/vendor/github.com/ethereum/go-ethereum/core/mkalloc.go @@ -52,7 +52,8 @@ func makelist(g *core.Genesis) allocList { if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 { panic(fmt.Sprintf("can't encode account %x", addr)) } - a = append(a, allocItem{addr.Big(), account.Balance}) + bigAddr := new(big.Int).SetBytes(addr.Bytes()) + a = append(a, allocItem{bigAddr, account.Balance}) } sort.Sort(a) return a diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go index 491a125c..64783999 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain.go @@ -23,12 +23,13 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) // ReadCanonicalHash retrieves the hash assigned to a canonical block number. -func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash { +func ReadCanonicalHash(db ethdb.Reader, number uint64) common.Hash { data, _ := db.Get(headerHashKey(number)) if len(data) == 0 { return common.Hash{} @@ -37,21 +38,21 @@ func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash { } // WriteCanonicalHash stores the hash assigned to a canonical block number. -func WriteCanonicalHash(db DatabaseWriter, hash common.Hash, number uint64) { +func WriteCanonicalHash(db ethdb.Writer, hash common.Hash, number uint64) { if err := db.Put(headerHashKey(number), hash.Bytes()); err != nil { log.Crit("Failed to store number to hash mapping", "err", err) } } // DeleteCanonicalHash removes the number to hash canonical mapping. -func DeleteCanonicalHash(db DatabaseDeleter, number uint64) { +func DeleteCanonicalHash(db ethdb.Writer, number uint64) { if err := db.Delete(headerHashKey(number)); err != nil { log.Crit("Failed to delete number to hash mapping", "err", err) } } // ReadHeaderNumber returns the header number assigned to a hash. -func ReadHeaderNumber(db DatabaseReader, hash common.Hash) *uint64 { +func ReadHeaderNumber(db ethdb.Reader, hash common.Hash) *uint64 { data, _ := db.Get(headerNumberKey(hash)) if len(data) != 8 { return nil @@ -61,7 +62,7 @@ func ReadHeaderNumber(db DatabaseReader, hash common.Hash) *uint64 { } // ReadHeadHeaderHash retrieves the hash of the current canonical head header. -func ReadHeadHeaderHash(db DatabaseReader) common.Hash { +func ReadHeadHeaderHash(db ethdb.Reader) common.Hash { data, _ := db.Get(headHeaderKey) if len(data) == 0 { return common.Hash{} @@ -70,14 +71,14 @@ func ReadHeadHeaderHash(db DatabaseReader) common.Hash { } // WriteHeadHeaderHash stores the hash of the current canonical head header. -func WriteHeadHeaderHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadHeaderHash(db ethdb.Writer, hash common.Hash) { if err := db.Put(headHeaderKey, hash.Bytes()); err != nil { log.Crit("Failed to store last header's hash", "err", err) } } // ReadHeadBlockHash retrieves the hash of the current canonical head block. -func ReadHeadBlockHash(db DatabaseReader) common.Hash { +func ReadHeadBlockHash(db ethdb.Reader) common.Hash { data, _ := db.Get(headBlockKey) if len(data) == 0 { return common.Hash{} @@ -86,14 +87,14 @@ func ReadHeadBlockHash(db DatabaseReader) common.Hash { } // WriteHeadBlockHash stores the head block's hash. -func WriteHeadBlockHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadBlockHash(db ethdb.Writer, hash common.Hash) { if err := db.Put(headBlockKey, hash.Bytes()); err != nil { log.Crit("Failed to store last block's hash", "err", err) } } // ReadHeadFastBlockHash retrieves the hash of the current fast-sync head block. -func ReadHeadFastBlockHash(db DatabaseReader) common.Hash { +func ReadHeadFastBlockHash(db ethdb.Reader) common.Hash { data, _ := db.Get(headFastBlockKey) if len(data) == 0 { return common.Hash{} @@ -102,7 +103,7 @@ func ReadHeadFastBlockHash(db DatabaseReader) common.Hash { } // WriteHeadFastBlockHash stores the hash of the current fast-sync head block. -func WriteHeadFastBlockHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadFastBlockHash(db ethdb.Writer, hash common.Hash) { if err := db.Put(headFastBlockKey, hash.Bytes()); err != nil { log.Crit("Failed to store last fast block's hash", "err", err) } @@ -110,7 +111,7 @@ func WriteHeadFastBlockHash(db DatabaseWriter, hash common.Hash) { // ReadFastTrieProgress retrieves the number of tries nodes fast synced to allow // reporting correct numbers across restarts. -func ReadFastTrieProgress(db DatabaseReader) uint64 { +func ReadFastTrieProgress(db ethdb.Reader) uint64 { data, _ := db.Get(fastTrieProgressKey) if len(data) == 0 { return 0 @@ -120,20 +121,20 @@ func ReadFastTrieProgress(db DatabaseReader) uint64 { // WriteFastTrieProgress stores the fast sync trie process counter to support // retrieving it across restarts. -func WriteFastTrieProgress(db DatabaseWriter, count uint64) { +func WriteFastTrieProgress(db ethdb.Writer, count uint64) { if err := db.Put(fastTrieProgressKey, new(big.Int).SetUint64(count).Bytes()); err != nil { log.Crit("Failed to store fast sync trie progress", "err", err) } } // ReadHeaderRLP retrieves a block header in its raw RLP database encoding. -func ReadHeaderRLP(db DatabaseReader, hash common.Hash, number uint64) rlp.RawValue { +func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { data, _ := db.Get(headerKey(number, hash)) return data } // HasHeader verifies the existence of a block header corresponding to the hash. -func HasHeader(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasHeader(db ethdb.Reader, hash common.Hash, number uint64) bool { if has, err := db.Has(headerKey(number, hash)); !has || err != nil { return false } @@ -141,7 +142,7 @@ func HasHeader(db DatabaseReader, hash common.Hash, number uint64) bool { } // ReadHeader retrieves the block header corresponding to the hash. -func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Header { +func ReadHeader(db ethdb.Reader, hash common.Hash, number uint64) *types.Header { data := ReadHeaderRLP(db, hash, number) if len(data) == 0 { return nil @@ -156,7 +157,7 @@ func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Heade // WriteHeader stores a block header into the database and also stores the hash- // to-number mapping. -func WriteHeader(db DatabaseWriter, header *types.Header) { +func WriteHeader(db ethdb.Writer, header *types.Header) { // Write the hash -> number mapping var ( hash = header.Hash() @@ -179,30 +180,36 @@ func WriteHeader(db DatabaseWriter, header *types.Header) { } // DeleteHeader removes all block header data associated with a hash. -func DeleteHeader(db DatabaseDeleter, hash common.Hash, number uint64) { - if err := db.Delete(headerKey(number, hash)); err != nil { - log.Crit("Failed to delete header", "err", err) - } +func DeleteHeader(db ethdb.Writer, hash common.Hash, number uint64) { + deleteHeaderWithoutNumber(db, hash, number) if err := db.Delete(headerNumberKey(hash)); err != nil { log.Crit("Failed to delete hash to number mapping", "err", err) } } +// deleteHeaderWithoutNumber removes only the block header but does not remove +// the hash to number mapping. +func deleteHeaderWithoutNumber(db ethdb.Writer, hash common.Hash, number uint64) { + if err := db.Delete(headerKey(number, hash)); err != nil { + log.Crit("Failed to delete header", "err", err) + } +} + // ReadBodyRLP retrieves the block body (transactions and uncles) in RLP encoding. -func ReadBodyRLP(db DatabaseReader, hash common.Hash, number uint64) rlp.RawValue { +func ReadBodyRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { data, _ := db.Get(blockBodyKey(number, hash)) return data } // WriteBodyRLP stores an RLP encoded block body into the database. -func WriteBodyRLP(db DatabaseWriter, hash common.Hash, number uint64, rlp rlp.RawValue) { +func WriteBodyRLP(db ethdb.Writer, hash common.Hash, number uint64, rlp rlp.RawValue) { if err := db.Put(blockBodyKey(number, hash), rlp); err != nil { log.Crit("Failed to store block body", "err", err) } } // HasBody verifies the existence of a block body corresponding to the hash. -func HasBody(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasBody(db ethdb.Reader, hash common.Hash, number uint64) bool { if has, err := db.Has(blockBodyKey(number, hash)); !has || err != nil { return false } @@ -210,7 +217,7 @@ func HasBody(db DatabaseReader, hash common.Hash, number uint64) bool { } // ReadBody retrieves the block body corresponding to the hash. -func ReadBody(db DatabaseReader, hash common.Hash, number uint64) *types.Body { +func ReadBody(db ethdb.Reader, hash common.Hash, number uint64) *types.Body { data := ReadBodyRLP(db, hash, number) if len(data) == 0 { return nil @@ -224,7 +231,7 @@ func ReadBody(db DatabaseReader, hash common.Hash, number uint64) *types.Body { } // WriteBody storea a block body into the database. -func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.Body) { +func WriteBody(db ethdb.Writer, hash common.Hash, number uint64, body *types.Body) { data, err := rlp.EncodeToBytes(body) if err != nil { log.Crit("Failed to RLP encode body", "err", err) @@ -233,15 +240,21 @@ func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.B } // DeleteBody removes all block body data associated with a hash. -func DeleteBody(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteBody(db ethdb.Writer, hash common.Hash, number uint64) { if err := db.Delete(blockBodyKey(number, hash)); err != nil { log.Crit("Failed to delete block body", "err", err) } } -// ReadTd retrieves a block's total difficulty corresponding to the hash. -func ReadTd(db DatabaseReader, hash common.Hash, number uint64) *big.Int { +// ReadTdRLP retrieves a block's total difficulty corresponding to the hash in RLP encoding. +func ReadTdRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { data, _ := db.Get(headerTDKey(number, hash)) + return data +} + +// ReadTd retrieves a block's total difficulty corresponding to the hash. +func ReadTd(db ethdb.Reader, hash common.Hash, number uint64) *big.Int { + data := ReadTdRLP(db, hash, number) if len(data) == 0 { return nil } @@ -254,7 +267,7 @@ func ReadTd(db DatabaseReader, hash common.Hash, number uint64) *big.Int { } // WriteTd stores the total difficulty of a block into the database. -func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) { +func WriteTd(db ethdb.Writer, hash common.Hash, number uint64, td *big.Int) { data, err := rlp.EncodeToBytes(td) if err != nil { log.Crit("Failed to RLP encode block total difficulty", "err", err) @@ -265,7 +278,7 @@ func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) { } // DeleteTd removes all block total difficulty data associated with a hash. -func DeleteTd(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteTd(db ethdb.Writer, hash common.Hash, number uint64) { if err := db.Delete(headerTDKey(number, hash)); err != nil { log.Crit("Failed to delete block total difficulty", "err", err) } @@ -273,17 +286,23 @@ func DeleteTd(db DatabaseDeleter, hash common.Hash, number uint64) { // HasReceipts verifies the existence of all the transaction receipts belonging // to a block. -func HasReceipts(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { if has, err := db.Has(blockReceiptsKey(number, hash)); !has || err != nil { return false } return true } -// ReadReceipts retrieves all the transaction receipts belonging to a block. -func ReadReceipts(db DatabaseReader, hash common.Hash, number uint64) types.Receipts { - // Retrieve the flattened receipt slice +// ReadReceiptsRLP retrieves all the transaction receipts belonging to a block in RLP encoding. +func ReadReceiptsRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { data, _ := db.Get(blockReceiptsKey(number, hash)) + return data +} + +// ReadReceipts retrieves all the transaction receipts belonging to a block. +func ReadReceipts(db ethdb.Reader, hash common.Hash, number uint64) types.Receipts { + // Retrieve the flattened receipt slice + data := ReadReceiptsRLP(db, hash, number) if len(data) == 0 { return nil } @@ -294,14 +313,27 @@ func ReadReceipts(db DatabaseReader, hash common.Hash, number uint64) types.Rece return nil } receipts := make(types.Receipts, len(storageReceipts)) + logIndex := uint(0) for i, receipt := range storageReceipts { + // Assemble deriving fields for log. + for _, log := range receipt.Logs { + log.TxHash = receipt.TxHash + log.BlockHash = hash + log.BlockNumber = number + log.TxIndex = uint(i) + log.Index = logIndex + logIndex += 1 + } receipts[i] = (*types.Receipt)(receipt) + receipts[i].BlockHash = hash + receipts[i].BlockNumber = big.NewInt(0).SetUint64(number) + receipts[i].TransactionIndex = uint(i) } return receipts } // WriteReceipts stores all the transaction receipts belonging to a block. -func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts types.Receipts) { +func WriteReceipts(db ethdb.Writer, hash common.Hash, number uint64, receipts types.Receipts) { // Convert the receipts into their storage form and serialize them storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) for i, receipt := range receipts { @@ -318,7 +350,7 @@ func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts } // DeleteReceipts removes all receipt data associated with a block hash. -func DeleteReceipts(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteReceipts(db ethdb.Writer, hash common.Hash, number uint64) { if err := db.Delete(blockReceiptsKey(number, hash)); err != nil { log.Crit("Failed to delete block receipts", "err", err) } @@ -330,7 +362,7 @@ func DeleteReceipts(db DatabaseDeleter, hash common.Hash, number uint64) { // // Note, due to concurrent download of header and block body the header and thus // canonical hash can be stored in the database but the body data not (yet). -func ReadBlock(db DatabaseReader, hash common.Hash, number uint64) *types.Block { +func ReadBlock(db ethdb.Reader, hash common.Hash, number uint64) *types.Block { header := ReadHeader(db, hash, number) if header == nil { return nil @@ -343,21 +375,30 @@ func ReadBlock(db DatabaseReader, hash common.Hash, number uint64) *types.Block } // WriteBlock serializes a block into the database, header and body separately. -func WriteBlock(db DatabaseWriter, block *types.Block) { +func WriteBlock(db ethdb.Writer, block *types.Block) { WriteBody(db, block.Hash(), block.NumberU64(), block.Body()) WriteHeader(db, block.Header()) } // DeleteBlock removes all block data associated with a hash. -func DeleteBlock(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteBlock(db ethdb.Writer, hash common.Hash, number uint64) { DeleteReceipts(db, hash, number) DeleteHeader(db, hash, number) DeleteBody(db, hash, number) DeleteTd(db, hash, number) } +// deleteBlockWithoutNumber removes all block data associated with a hash, except +// the hash to number mapping. +func deleteBlockWithoutNumber(db ethdb.Writer, hash common.Hash, number uint64) { + DeleteReceipts(db, hash, number) + deleteHeaderWithoutNumber(db, hash, number) + DeleteBody(db, hash, number) + DeleteTd(db, hash, number) +} + // FindCommonAncestor returns the last common ancestor of two block headers -func FindCommonAncestor(db DatabaseReader, a, b *types.Header) *types.Header { +func FindCommonAncestor(db ethdb.Reader, a, b *types.Header) *types.Header { for bn := b.Number.Uint64(); a.Number.Uint64() > bn; { a = ReadHeader(db, a.ParentHash, a.Number.Uint64()-1) if a == nil { diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain_test.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain_test.go index fcc36dc2..9f6e9cdb 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_chain_test.go @@ -23,14 +23,13 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) // Tests block header storage and retrieval operations. func TestHeaderStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test header to move around the database and make sure it's really new header := &types.Header{Number: big.NewInt(42), Extra: []byte("test header")} @@ -63,7 +62,7 @@ func TestHeaderStorage(t *testing.T) { // Tests block body storage and retrieval operations. func TestBodyStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test body to move around the database and make sure it's really new body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}} @@ -101,7 +100,7 @@ func TestBodyStorage(t *testing.T) { // Tests block storage and retrieval operations. func TestBlockStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test block to move around the database and make sure it's really new block := types.NewBlockWithHeader(&types.Header{ @@ -151,7 +150,7 @@ func TestBlockStorage(t *testing.T) { // Tests that partial block contents don't get reassembled into full blocks. func TestPartialBlockStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() block := types.NewBlockWithHeader(&types.Header{ Extra: []byte("test block"), UncleHash: types.EmptyUncleHash, @@ -185,7 +184,7 @@ func TestPartialBlockStorage(t *testing.T) { // Tests block total difficulty storage and retrieval operations. func TestTdStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test TD to move around the database and make sure it's really new hash, td := common.Hash{}, big.NewInt(314) @@ -208,7 +207,7 @@ func TestTdStorage(t *testing.T) { // Tests that canonical numbers can be mapped to hashes and retrieved. func TestCanonicalMappingStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test canonical number and assinged hash to move around hash, number := common.Hash{0: 0xff}, uint64(314) @@ -231,7 +230,7 @@ func TestCanonicalMappingStorage(t *testing.T) { // Tests that head headers and head blocks can be assigned, individually. func TestHeadStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() blockHead := types.NewBlockWithHeader(&types.Header{Extra: []byte("test block header")}) blockFull := types.NewBlockWithHeader(&types.Header{Extra: []byte("test block full")}) @@ -266,7 +265,7 @@ func TestHeadStorage(t *testing.T) { // Tests that receipts associated with a single block can be stored and retrieved. func TestBlockReceiptStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() receipt1 := &types.Receipt{ Status: types.ReceiptStatusFailed, @@ -279,6 +278,7 @@ func TestBlockReceiptStorage(t *testing.T) { ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), GasUsed: 111111, } + receipt1.Bloom = types.CreateBloom(types.Receipts{receipt1}) receipt2 := &types.Receipt{ PostState: common.Hash{2}.Bytes(), CumulativeGasUsed: 2, @@ -290,6 +290,7 @@ func TestBlockReceiptStorage(t *testing.T) { ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}), GasUsed: 222222, } + receipt2.Bloom = types.CreateBloom(types.Receipts{receipt2}) receipts := []*types.Receipt{receipt1, receipt2} // Check that no receipt entries are in a pristine database diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes.go index 4ff7e5bd..5c7ad693 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes.go @@ -19,88 +19,100 @@ package rawdb import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) // ReadTxLookupEntry retrieves the positional metadata associated with a transaction // hash to allow retrieving the transaction or receipt by hash. -func ReadTxLookupEntry(db DatabaseReader, hash common.Hash) (common.Hash, uint64, uint64) { +func ReadTxLookupEntry(db ethdb.Reader, hash common.Hash) common.Hash { data, _ := db.Get(txLookupKey(hash)) if len(data) == 0 { - return common.Hash{}, 0, 0 + return common.Hash{} } - var entry TxLookupEntry + if len(data) == common.HashLength { + return common.BytesToHash(data) + } + // Probably it's legacy txlookup entry data, try to decode it. + var entry LegacyTxLookupEntry if err := rlp.DecodeBytes(data, &entry); err != nil { - log.Error("Invalid transaction lookup entry RLP", "hash", hash, "err", err) - return common.Hash{}, 0, 0 + log.Error("Invalid transaction lookup entry RLP", "hash", hash, "blob", data, "err", err) + return common.Hash{} } - return entry.BlockHash, entry.BlockIndex, entry.Index + return entry.BlockHash } // WriteTxLookupEntries stores a positional metadata for every transaction from // a block, enabling hash based transaction and receipt lookups. -func WriteTxLookupEntries(db DatabaseWriter, block *types.Block) { - for i, tx := range block.Transactions() { - entry := TxLookupEntry{ - BlockHash: block.Hash(), - BlockIndex: block.NumberU64(), - Index: uint64(i), - } - data, err := rlp.EncodeToBytes(entry) - if err != nil { - log.Crit("Failed to encode transaction lookup entry", "err", err) - } - if err := db.Put(txLookupKey(tx.Hash()), data); err != nil { +func WriteTxLookupEntries(db ethdb.Writer, block *types.Block) { + for _, tx := range block.Transactions() { + if err := db.Put(txLookupKey(tx.Hash()), block.Hash().Bytes()); err != nil { log.Crit("Failed to store transaction lookup entry", "err", err) } } } // DeleteTxLookupEntry removes all transaction data associated with a hash. -func DeleteTxLookupEntry(db DatabaseDeleter, hash common.Hash) { +func DeleteTxLookupEntry(db ethdb.Writer, hash common.Hash) { db.Delete(txLookupKey(hash)) } // ReadTransaction retrieves a specific transaction from the database, along with // its added positional metadata. -func ReadTransaction(db DatabaseReader, hash common.Hash) (*types.Transaction, common.Hash, uint64, uint64) { - blockHash, blockNumber, txIndex := ReadTxLookupEntry(db, hash) +func ReadTransaction(db ethdb.Reader, hash common.Hash) (*types.Transaction, common.Hash, uint64, uint64) { + blockHash := ReadTxLookupEntry(db, hash) if blockHash == (common.Hash{}) { return nil, common.Hash{}, 0, 0 } - body := ReadBody(db, blockHash, blockNumber) - if body == nil || len(body.Transactions) <= int(txIndex) { - log.Error("Transaction referenced missing", "number", blockNumber, "hash", blockHash, "index", txIndex) + blockNumber := ReadHeaderNumber(db, blockHash) + if blockNumber == nil { return nil, common.Hash{}, 0, 0 } - return body.Transactions[txIndex], blockHash, blockNumber, txIndex + body := ReadBody(db, blockHash, *blockNumber) + if body == nil { + log.Error("Transaction referenced missing", "number", blockNumber, "hash", blockHash) + return nil, common.Hash{}, 0, 0 + } + for txIndex, tx := range body.Transactions { + if tx.Hash() == hash { + return tx, blockHash, *blockNumber, uint64(txIndex) + } + } + log.Error("Transaction not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + return nil, common.Hash{}, 0, 0 } // ReadReceipt retrieves a specific transaction receipt from the database, along with // its added positional metadata. -func ReadReceipt(db DatabaseReader, hash common.Hash) (*types.Receipt, common.Hash, uint64, uint64) { - blockHash, blockNumber, receiptIndex := ReadTxLookupEntry(db, hash) +func ReadReceipt(db ethdb.Reader, hash common.Hash) (*types.Receipt, common.Hash, uint64, uint64) { + blockHash := ReadTxLookupEntry(db, hash) if blockHash == (common.Hash{}) { return nil, common.Hash{}, 0, 0 } - receipts := ReadReceipts(db, blockHash, blockNumber) - if len(receipts) <= int(receiptIndex) { - log.Error("Receipt refereced missing", "number", blockNumber, "hash", blockHash, "index", receiptIndex) + blockNumber := ReadHeaderNumber(db, blockHash) + if blockNumber == nil { return nil, common.Hash{}, 0, 0 } - return receipts[receiptIndex], blockHash, blockNumber, receiptIndex + receipts := ReadReceipts(db, blockHash, *blockNumber) + for receiptIndex, receipt := range receipts { + if receipt.TxHash == hash { + return receipt, blockHash, *blockNumber, uint64(receiptIndex) + } + } + log.Error("Receipt not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + return nil, common.Hash{}, 0, 0 } // ReadBloomBits retrieves the compressed bloom bit vector belonging to the given // section and bit index from the. -func ReadBloomBits(db DatabaseReader, bit uint, section uint64, head common.Hash) ([]byte, error) { +func ReadBloomBits(db ethdb.Reader, bit uint, section uint64, head common.Hash) ([]byte, error) { return db.Get(bloomBitsKey(bit, section, head)) } // WriteBloomBits stores the compressed bloom bits vector belonging to the given // section and bit index. -func WriteBloomBits(db DatabaseWriter, bit uint, section uint64, head common.Hash, bits []byte) { +func WriteBloomBits(db ethdb.Writer, bit uint, section uint64, head common.Hash, bits []byte) { if err := db.Put(bloomBitsKey(bit, section, head), bits); err != nil { log.Crit("Failed to store bloom bits", "err", err) } diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes_test.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes_test.go index d9c10e14..ca74ba6a 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_indexes_test.go @@ -22,12 +22,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" ) // Tests that positional lookup metadata can be stored and retrieved. func TestLookupStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22}) @@ -65,4 +65,26 @@ func TestLookupStorage(t *testing.T) { t.Fatalf("tx #%d [%x]: deleted transaction returned: %v", i, tx.Hash(), txn) } } + // Insert legacy txlookup and verify the data retrieval + for index, tx := range block.Transactions() { + entry := LegacyTxLookupEntry{ + BlockHash: block.Hash(), + BlockIndex: block.NumberU64(), + Index: uint64(index), + } + data, _ := rlp.EncodeToBytes(entry) + db.Put(txLookupKey(tx.Hash()), data) + } + for i, tx := range txs { + if txn, hash, number, index := ReadTransaction(db, tx.Hash()); txn == nil { + t.Fatalf("tx #%d [%x]: transaction not found", i, tx.Hash()) + } else { + if hash != block.Hash() || number != block.NumberU64() || index != uint64(i) { + t.Fatalf("tx #%d [%x]: positional metadata mismatch: have %x/%d/%d, want %x/%v/%v", i, tx.Hash(), hash, number, index, block.Hash(), block.NumberU64(), i) + } + if tx.Hash() != txn.Hash() { + t.Fatalf("tx #%d [%x]: transaction mismatch: have %v, want %v", i, tx.Hash(), txn, tx) + } + } + } } diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_metadata.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_metadata.go index 82e4bf04..1361b0d7 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_metadata.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/accessors_metadata.go @@ -20,13 +20,14 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) // ReadDatabaseVersion retrieves the version number of the database. -func ReadDatabaseVersion(db DatabaseReader) *uint64 { +func ReadDatabaseVersion(db ethdb.Reader) *uint64 { var version uint64 enc, _ := db.Get(databaseVerisionKey) @@ -41,7 +42,7 @@ func ReadDatabaseVersion(db DatabaseReader) *uint64 { } // WriteDatabaseVersion stores the version number of the database -func WriteDatabaseVersion(db DatabaseWriter, version uint64) { +func WriteDatabaseVersion(db ethdb.Writer, version uint64) { enc, err := rlp.EncodeToBytes(version) if err != nil { log.Crit("Failed to encode database version", "err", err) @@ -52,7 +53,7 @@ func WriteDatabaseVersion(db DatabaseWriter, version uint64) { } // ReadChainConfig retrieves the consensus settings based on the given genesis hash. -func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { +func ReadChainConfig(db ethdb.Reader, hash common.Hash) *params.ChainConfig { data, _ := db.Get(configKey(hash)) if len(data) == 0 { return nil @@ -66,7 +67,7 @@ func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { } // WriteChainConfig writes the chain config settings to the database. -func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConfig) { +func WriteChainConfig(db ethdb.Writer, hash common.Hash, cfg *params.ChainConfig) { if cfg == nil { return } @@ -80,13 +81,13 @@ func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConf } // ReadPreimage retrieves a single preimage of the provided hash. -func ReadPreimage(db DatabaseReader, hash common.Hash) []byte { +func ReadPreimage(db ethdb.Reader, hash common.Hash) []byte { data, _ := db.Get(preimageKey(hash)) return data } // WritePreimages writes the provided set of preimages to the database. -func WritePreimages(db DatabaseWriter, preimages map[common.Hash][]byte) { +func WritePreimages(db ethdb.Writer, preimages map[common.Hash][]byte) { for hash, preimage := range preimages { if err := db.Put(preimageKey(hash), preimage); err != nil { log.Crit("Failed to store trie preimage", "err", err) diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/database.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/database.go new file mode 100644 index 00000000..b4c5dea7 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/database.go @@ -0,0 +1,52 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/leveldb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" +) + +// NewDatabase creates a high level database on top of a given key-value data +// store without a freezer moving immutable chain segments into cold storage. +func NewDatabase(db ethdb.KeyValueStore) ethdb.Database { + return db +} + +// NewMemoryDatabase creates an ephemeral in-memory key-value database without a +// freezer moving immutable chain segments into cold storage. +func NewMemoryDatabase() ethdb.Database { + return NewDatabase(memorydb.New()) +} + +// NewMemoryDatabaseWithCap creates an ephemeral in-memory key-value database with +// an initial starting capacity, but without a freezer moving immutable chain +// segments into cold storage. +func NewMemoryDatabaseWithCap(size int) ethdb.Database { + return NewDatabase(memorydb.NewWithCap(size)) +} + +// NewLevelDBDatabase creates a persistent key-value database without a freezer +// moving immutable chain segments into cold storage. +func NewLevelDBDatabase(file string, cache int, handles int, namespace string) (ethdb.Database, error) { + db, err := leveldb.New(file, cache, handles, namespace) + if err != nil { + return nil, err + } + return NewDatabase(db), nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/schema.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/schema.go index 8a9921ef..87dbf94f 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/schema.go +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/schema.go @@ -63,9 +63,9 @@ var ( preimageHitCounter = metrics.NewRegisteredCounter("db/preimage/hits", nil) ) -// TxLookupEntry is a positional metadata to help looking up the data content of -// a transaction or receipt given only its hash. -type TxLookupEntry struct { +// LegacyTxLookupEntry is the legacy TxLookupEntry definition with some unnecessary +// fields. +type LegacyTxLookupEntry struct { BlockHash common.Hash BlockIndex uint64 Index uint64 @@ -78,6 +78,11 @@ func encodeBlockNumber(number uint64) []byte { return enc } +// headerKeyPrefix = headerPrefix + num (uint64 big endian) +func headerKeyPrefix(number uint64) []byte { + return append(headerPrefix, encodeBlockNumber(number)...) +} + // headerKey = headerPrefix + num (uint64 big endian) + hash func headerKey(number uint64, hash common.Hash) []byte { return append(append(headerPrefix, encodeBlockNumber(number)...), hash.Bytes()...) diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/table.go b/vendor/github.com/ethereum/go-ethereum/core/rawdb/table.go new file mode 100644 index 00000000..e19649dd --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/core/rawdb/table.go @@ -0,0 +1,155 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "github.com/ethereum/go-ethereum/ethdb" +) + +// table is a wrapper around a database that prefixes each key access with a pre- +// configured string. +type table struct { + db ethdb.Database + prefix string +} + +// NewTable returns a database object that prefixes all keys with a given string. +func NewTable(db ethdb.Database, prefix string) ethdb.Database { + return &table{ + db: db, + prefix: prefix, + } +} + +// Close is a noop to implement the Database interface. +func (t *table) Close() error { + return nil +} + +// Has retrieves if a prefixed version of a key is present in the database. +func (t *table) Has(key []byte) (bool, error) { + return t.db.Has(append([]byte(t.prefix), key...)) +} + +// Get retrieves the given prefixed key if it's present in the database. +func (t *table) Get(key []byte) ([]byte, error) { + return t.db.Get(append([]byte(t.prefix), key...)) +} + +// Put inserts the given value into the database at a prefixed version of the +// provided key. +func (t *table) Put(key []byte, value []byte) error { + return t.db.Put(append([]byte(t.prefix), key...), value) +} + +// Delete removes the given prefixed key from the database. +func (t *table) Delete(key []byte) error { + return t.db.Delete(append([]byte(t.prefix), key...)) +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the database. +func (t *table) NewIterator() ethdb.Iterator { + return t.NewIteratorWithPrefix(nil) +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (t *table) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + return t.db.NewIteratorWithPrefix(append([]byte(t.prefix), prefix...)) +} + +// Stat returns a particular internal stat of the database. +func (t *table) Stat(property string) (string, error) { + return t.db.Stat(property) +} + +// Compact flattens the underlying data store for the given key range. In essence, +// deleted and overwritten versions are discarded, and the data is rearranged to +// reduce the cost of operations needed to access them. +// +// A nil start is treated as a key before all keys in the data store; a nil limit +// is treated as a key after all keys in the data store. If both is nil then it +// will compact entire data store. +func (t *table) Compact(start []byte, limit []byte) error { + // If no start was specified, use the table prefix as the first value + if start == nil { + start = []byte(t.prefix) + } + // If no limit was specified, use the first element not matching the prefix + // as the limit + if limit == nil { + limit = []byte(t.prefix) + for i := len(limit) - 1; i >= 0; i-- { + // Bump the current character, stopping if it doesn't overflow + limit[i]++ + if limit[i] > 0 { + break + } + // Character overflown, proceed to the next or nil if the last + if i == 0 { + limit = nil + } + } + } + // Range correctly calculated based on table prefix, delegate down + return t.db.Compact(start, limit) +} + +// NewBatch creates a write-only database that buffers changes to its host db +// until a final write is called, each operation prefixing all keys with the +// pre-configured string. +func (t *table) NewBatch() ethdb.Batch { + return &tableBatch{t.db.NewBatch(), t.prefix} +} + +// tableBatch is a wrapper around a database batch that prefixes each key access +// with a pre-configured string. +type tableBatch struct { + batch ethdb.Batch + prefix string +} + +// Put inserts the given value into the batch for later committing. +func (b *tableBatch) Put(key, value []byte) error { + return b.batch.Put(append([]byte(b.prefix), key...), value) +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *tableBatch) Delete(key []byte) error { + return b.batch.Delete(append([]byte(b.prefix), key...)) +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *tableBatch) ValueSize() int { + return b.batch.ValueSize() +} + +// Write flushes any accumulated data to disk. +func (b *tableBatch) Write() error { + return b.batch.Write() +} + +// Reset resets the batch for reuse. +func (b *tableBatch) Reset() { + b.batch.Reset() +} + +// Replay replays the batch contents. +func (b *tableBatch) Replay(w ethdb.Writer) error { + return b.batch.Replay(w) +} diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/database.go b/vendor/github.com/ethereum/go-ethereum/core/state/database.go index f6ea144b..8798b738 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/database.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/database.go @@ -18,7 +18,6 @@ package state import ( "fmt" - "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" @@ -26,14 +25,7 @@ import ( lru "github.com/hashicorp/golang-lru" ) -// Trie cache generation limit after which to evict trie nodes from memory. -var MaxTrieCacheGen = uint16(120) - const ( - // Number of past tries to keep. This value is chosen such that - // reasonable chain reorg depths will hit an existing trie. - maxPastTries = 12 - // Number of codehash->size associations to keep. codeSizeCacheSize = 100000 ) @@ -59,28 +51,61 @@ type Database interface { TrieDB() *trie.Database } -// Trie is a Ethereum Merkle Trie. +// Trie is a Ethereum Merkle Patricia trie. type Trie interface { + // GetKey returns the sha3 preimage of a hashed key that was previously used + // to store a value. + // + // TODO(fjl): remove this when SecureTrie is removed + GetKey([]byte) []byte + + // TryGet returns the value for key stored in the trie. The value bytes must + // not be modified by the caller. If a node was not found in the database, a + // trie.MissingNodeError is returned. TryGet(key []byte) ([]byte, error) + + // TryUpdate associates key with value in the trie. If value has length zero, any + // existing value is deleted from the trie. The value bytes must not be modified + // by the caller while they are stored in the trie. If a node was not found in the + // database, a trie.MissingNodeError is returned. TryUpdate(key, value []byte) error + + // TryDelete removes any existing value for key from the trie. If a node was not + // found in the database, a trie.MissingNodeError is returned. TryDelete(key []byte) error - Commit(onleaf trie.LeafCallback) (common.Hash, error) + + // Hash returns the root hash of the trie. It does not write to the database and + // can be used even if the trie doesn't have one. Hash() common.Hash + + // Commit writes all nodes to the trie's memory database, tracking the internal + // and external (for account tries) references. + Commit(onleaf trie.LeafCallback) (common.Hash, error) + + // NodeIterator returns an iterator that returns nodes of the trie. Iteration + // starts at the key after the given start key. NodeIterator(startKey []byte) trie.NodeIterator - GetKey([]byte) []byte // TODO(fjl): remove this when SecureTrie is removed - Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error + + // Prove constructs a Merkle proof for key. The result contains all encoded nodes + // on the path to the value at key. The value itself is also included in the last + // node and can be retrieved by verifying the proof. + // + // If the trie does not contain a value for key, the returned proof contains all + // nodes of the longest existing prefix of the key (at least the root), ending + // with the node that proves the absence of the key. + Prove(key []byte, fromLevel uint, proofDb ethdb.Writer) error } // NewDatabase creates a backing store for state. The returned database is safe for -// concurrent use and retains a few recent expanded trie nodes in memory. To keep -// more historical state in memory, use the NewDatabaseWithCache constructor. +// concurrent use, but does not retain any recent trie nodes in memory. To keep some +// historical state in memory, use the NewDatabaseWithCache constructor. func NewDatabase(db ethdb.Database) Database { return NewDatabaseWithCache(db, 0) } -// NewDatabase creates a backing store for state. The returned database is safe for -// concurrent use and retains both a few recent expanded trie nodes in memory, as -// well as a lot of collapsed RLP trie nodes in a large memory cache. +// NewDatabaseWithCache creates a backing store for state. The returned database +// is safe for concurrent use and retains a lot of collapsed RLP trie nodes in a +// large memory cache. func NewDatabaseWithCache(db ethdb.Database, cache int) Database { csc, _ := lru.New(codeSizeCacheSize) return &cachingDB{ @@ -91,50 +116,22 @@ func NewDatabaseWithCache(db ethdb.Database, cache int) Database { type cachingDB struct { db *trie.Database - mu sync.Mutex - pastTries []*trie.SecureTrie codeSizeCache *lru.Cache } -// OpenTrie opens the main account trie. +// OpenTrie opens the main account trie at a specific root hash. func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { - db.mu.Lock() - defer db.mu.Unlock() - - for i := len(db.pastTries) - 1; i >= 0; i-- { - if db.pastTries[i].Hash() == root { - return cachedTrie{db.pastTries[i].Copy(), db}, nil - } - } - tr, err := trie.NewSecure(root, db.db, MaxTrieCacheGen) - if err != nil { - return nil, err - } - return cachedTrie{tr, db}, nil -} - -func (db *cachingDB) pushTrie(t *trie.SecureTrie) { - db.mu.Lock() - defer db.mu.Unlock() - - if len(db.pastTries) >= maxPastTries { - copy(db.pastTries, db.pastTries[1:]) - db.pastTries[len(db.pastTries)-1] = t - } else { - db.pastTries = append(db.pastTries, t) - } + return trie.NewSecure(root, db.db) } // OpenStorageTrie opens the storage trie of an account. func (db *cachingDB) OpenStorageTrie(addrHash, root common.Hash) (Trie, error) { - return trie.NewSecure(root, db.db, 0) + return trie.NewSecure(root, db.db) } // CopyTrie returns an independent copy of the given trie. func (db *cachingDB) CopyTrie(t Trie) Trie { switch t := t.(type) { - case cachedTrie: - return cachedTrie{t.SecureTrie.Copy(), db} case *trie.SecureTrie: return t.Copy() default: @@ -164,21 +161,3 @@ func (db *cachingDB) ContractCodeSize(addrHash, codeHash common.Hash) (int, erro func (db *cachingDB) TrieDB() *trie.Database { return db.db } - -// cachedTrie inserts its trie into a cachingDB on commit. -type cachedTrie struct { - *trie.SecureTrie - db *cachingDB -} - -func (m cachedTrie) Commit(onleaf trie.LeafCallback) (common.Hash, error) { - root, err := m.SecureTrie.Commit(onleaf) - if err == nil { - m.db.pushTrie(m.SecureTrie) - } - return root, err -} - -func (m cachedTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { - return m.SecureTrie.Prove(key, fromLevel, proofDb) -} diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/iterator_test.go b/vendor/github.com/ethereum/go-ethereum/core/state/iterator_test.go index 9e46c851..69f51c4c 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/iterator_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/iterator_test.go @@ -51,7 +51,9 @@ func TestNodeIteratorCoverage(t *testing.T) { t.Errorf("state entry not reported %x", hash) } } - for _, key := range db.TrieDB().DiskDB().(*ethdb.MemDatabase).Keys() { + it := db.TrieDB().DiskDB().(ethdb.Database).NewIterator() + for it.Next() { + key := it.Key() if bytes.HasPrefix(key, []byte("secure-key-")) { continue } @@ -59,4 +61,5 @@ func TestNodeIteratorCoverage(t *testing.T) { t.Errorf("state entry not reported %x", key) } } + it.Release() } diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/managed_state_test.go b/vendor/github.com/ethereum/go-ethereum/core/state/managed_state_test.go index 3d9c4e86..fdfde96a 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/managed_state_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/managed_state_test.go @@ -20,13 +20,13 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/core/rawdb" ) var addr = common.BytesToAddress([]byte("test")) func create() (*ManagedState, *account) { - statedb, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) ms := ManageState(statedb) ms.StateDB.SetNonce(addr, 100) ms.accounts[addr] = newAccount(ms.StateDB.getStateObject(addr)) diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/state_object.go b/vendor/github.com/ethereum/go-ethereum/core/state/state_object.go index f41ab040..7fbb45b3 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/state_object.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/state_object.go @@ -21,9 +21,11 @@ import ( "fmt" "io" "math/big" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" ) @@ -177,6 +179,10 @@ func (self *stateObject) GetCommittedState(db Database, key common.Hash) common. if cached { return value } + // Track the amount of time wasted on reading the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { self.db.StorageReads += time.Since(start) }(time.Now()) + } // Otherwise load the value from the database enc, err := self.getTrie(db).TryGet(key[:]) if err != nil { @@ -216,6 +222,11 @@ func (self *stateObject) setState(key, value common.Hash) { // updateTrie writes cached storage modifications into the object's storage trie. func (self *stateObject) updateTrie(db Database) Trie { + // Track the amount of time wasted on updating the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { self.db.StorageUpdates += time.Since(start) }(time.Now()) + } + // Update all the dirty slots in the trie tr := self.getTrie(db) for key, value := range self.dirtyStorage { delete(self.dirtyStorage, key) @@ -240,6 +251,11 @@ func (self *stateObject) updateTrie(db Database) Trie { // UpdateRoot sets the trie root to the current root hash of func (self *stateObject) updateRoot(db Database) { self.updateTrie(db) + + // Track the amount of time wasted on hashing the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { self.db.StorageHashes += time.Since(start) }(time.Now()) + } self.data.Root = self.trie.Hash() } @@ -250,6 +266,10 @@ func (self *stateObject) CommitTrie(db Database) error { if self.dbErr != nil { return self.dbErr } + // Track the amount of time wasted on committing the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { self.db.StorageCommits += time.Since(start) }(time.Now()) + } root, err := self.trie.Commit(nil) if err == nil { self.data.Root = root diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/state_test.go b/vendor/github.com/ethereum/go-ethereum/core/state/state_test.go index a09273f3..606f2a6f 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/state_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/state_test.go @@ -22,13 +22,14 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" checker "gopkg.in/check.v1" ) type StateSuite struct { - db *ethdb.MemDatabase + db ethdb.Database state *StateDB } @@ -87,7 +88,7 @@ func (s *StateSuite) TestDump(c *checker.C) { } func (s *StateSuite) SetUpTest(c *checker.C) { - s.db = ethdb.NewMemDatabase() + s.db = rawdb.NewMemoryDatabase() s.state, _ = New(common.Hash{}, NewDatabase(s.db)) } @@ -141,7 +142,7 @@ func (s *StateSuite) TestSnapshotEmpty(c *checker.C) { // use testing instead of checker because checker does not support // printing/logging in tests (-check.vv does not work) func TestSnapshot2(t *testing.T) { - state, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) stateobjaddr0 := toAddr([]byte("so0")) stateobjaddr1 := toAddr([]byte("so1")) diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/statedb.go b/vendor/github.com/ethereum/go-ethereum/core/state/statedb.go index 2230b10e..db2e0d5e 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/statedb.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/statedb.go @@ -22,11 +22,13 @@ import ( "fmt" "math/big" "sort" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) @@ -37,8 +39,8 @@ type revision struct { } var ( - // emptyState is the known hash of an empty state trie entry. - emptyState = crypto.Keccak256Hash(nil) + // emptyRoot is the known root hash of an empty trie. + emptyRoot = common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") // emptyCode is the known hash of the empty EVM bytecode. emptyCode = crypto.Keccak256Hash(nil) @@ -51,6 +53,10 @@ func (n *proofList) Put(key []byte, value []byte) error { return nil } +func (n *proofList) Delete(key []byte) error { + panic("not supported") +} + // StateDBs within the ethereum protocol are used to store anything // within the merkle trie. StateDBs take care of caching and storing // nested states. It's the general query interface to retrieve: @@ -86,6 +92,16 @@ type StateDB struct { journal *journal validRevisions []revision nextRevisionId int + + // Measurements gathered during execution for debugging purposes + AccountReads time.Duration + AccountHashes time.Duration + AccountUpdates time.Duration + AccountCommits time.Duration + StorageReads time.Duration + StorageHashes time.Duration + StorageUpdates time.Duration + StorageCommits time.Duration } // Create a new state from a given trie. @@ -221,6 +237,16 @@ func (self *StateDB) GetNonce(addr common.Address) uint64 { return 0 } +// TxIndex returns the current transaction index set by Prepare. +func (self *StateDB) TxIndex() int { + return self.txIndex +} + +// BlockHash returns the current block hash set by Prepare. +func (self *StateDB) BlockHash() common.Hash { + return self.bhash +} + func (self *StateDB) GetCode(addr common.Address) []byte { stateObject := self.getStateObject(addr) if stateObject != nil { @@ -386,36 +412,51 @@ func (self *StateDB) Suicide(addr common.Address) bool { // // updateStateObject writes the given object to the trie. -func (self *StateDB) updateStateObject(stateObject *stateObject) { +func (s *StateDB) updateStateObject(stateObject *stateObject) { + // Track the amount of time wasted on updating the account from the trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) + } + // Encode the account and update the account trie addr := stateObject.Address() + data, err := rlp.EncodeToBytes(stateObject) if err != nil { panic(fmt.Errorf("can't encode object at %x: %v", addr[:], err)) } - self.setError(self.trie.TryUpdate(addr[:], data)) + s.setError(s.trie.TryUpdate(addr[:], data)) } // deleteStateObject removes the given object from the state trie. -func (self *StateDB) deleteStateObject(stateObject *stateObject) { +func (s *StateDB) deleteStateObject(stateObject *stateObject) { + // Track the amount of time wasted on deleting the account from the trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) + } + // Delete the account from the trie stateObject.deleted = true + addr := stateObject.Address() - self.setError(self.trie.TryDelete(addr[:])) + s.setError(s.trie.TryDelete(addr[:])) } // Retrieve a state object given by the address. Returns nil if not found. -func (self *StateDB) getStateObject(addr common.Address) (stateObject *stateObject) { - // Prefer 'live' objects. - if obj := self.stateObjects[addr]; obj != nil { +func (s *StateDB) getStateObject(addr common.Address) (stateObject *stateObject) { + // Prefer live objects + if obj := s.stateObjects[addr]; obj != nil { if obj.deleted { return nil } return obj } - - // Load the object from the database. - enc, err := self.trie.TryGet(addr[:]) + // Track the amount of time wasted on loading the object from the database + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountReads += time.Since(start) }(time.Now()) + } + // Load the object from the database + enc, err := s.trie.TryGet(addr[:]) if len(enc) == 0 { - self.setError(err) + s.setError(err) return nil } var data Account @@ -423,9 +464,9 @@ func (self *StateDB) getStateObject(addr common.Address) (stateObject *stateObje log.Error("Failed to decode state object", "addr", addr, "err", err) return nil } - // Insert into the live set. - obj := newObject(self, addr, data) - self.setStateObject(obj) + // Insert into the live set + obj := newObject(s, addr, data) + s.setStateObject(obj) return obj } @@ -502,7 +543,7 @@ func (self *StateDB) Copy() *StateDB { refund: self.refund, logs: make(map[common.Hash][]*types.Log, len(self.logs)), logSize: self.logSize, - preimages: make(map[common.Hash][]byte), + preimages: make(map[common.Hash][]byte, len(self.preimages)), journal: newJournal(), } // Copy the dirty states, logs, and preimages @@ -600,6 +641,11 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) { // goes into transaction receipts. func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { s.Finalise(deleteEmptyObjects) + + // Track the amount of time wasted on hashing the account trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountHashes += time.Since(start) }(time.Now()) + } return s.trie.Hash() } @@ -624,7 +670,7 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error) for addr := range s.journal.dirties { s.stateObjectsDirty[addr] = struct{}{} } - // Commit objects to the trie. + // Commit objects to the trie, measuring the elapsed time for addr, stateObject := range s.stateObjects { _, isDirty := s.stateObjectsDirty[addr] switch { @@ -647,13 +693,16 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error) } delete(s.stateObjectsDirty, addr) } - // Write trie changes. + // Write the account trie changes, measuing the amount of wasted time + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountCommits += time.Since(start) }(time.Now()) + } root, err = s.trie.Commit(func(leaf []byte, parent common.Hash) error { var account Account if err := rlp.DecodeBytes(leaf, &account); err != nil { return nil } - if account.Root != emptyState { + if account.Root != emptyRoot { s.db.TrieDB().Reference(account.Root, parent) } code := common.BytesToHash(account.CodeHash) @@ -662,6 +711,5 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error) } return nil }) - log.Debug("Trie cache stats after commit", "misses", trie.CacheMisses(), "unloads", trie.CacheUnloads()) return root, err } diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/statedb_test.go b/vendor/github.com/ethereum/go-ethereum/core/state/statedb_test.go index cbd5bc75..c2d2b2f6 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/statedb_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/statedb_test.go @@ -31,15 +31,15 @@ import ( check "gopkg.in/check.v1" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" ) // Tests that updating a state trie does not leak any database writes prior to // actually committing the state. func TestUpdateLeaks(t *testing.T) { // Create an empty state database - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() state, _ := New(common.Hash{}, NewDatabase(db)) // Update it with some accounts @@ -56,18 +56,19 @@ func TestUpdateLeaks(t *testing.T) { state.IntermediateRoot(false) } // Ensure that no data was leaked into the database - for _, key := range db.Keys() { - value, _ := db.Get(key) - t.Errorf("State leaked into database: %x -> %x", key, value) + it := db.NewIterator() + for it.Next() { + t.Errorf("State leaked into database: %x -> %x", it.Key(), it.Value()) } + it.Release() } // Tests that no intermediate state of an object is stored into the database, // only the one right before the commit. func TestIntermediateLeaks(t *testing.T) { // Create two state databases, one transitioning to the final state, the other final from the beginning - transDb := ethdb.NewMemDatabase() - finalDb := ethdb.NewMemDatabase() + transDb := rawdb.NewMemoryDatabase() + finalDb := rawdb.NewMemoryDatabase() transState, _ := New(common.Hash{}, NewDatabase(transDb)) finalState, _ := New(common.Hash{}, NewDatabase(finalDb)) @@ -103,16 +104,20 @@ func TestIntermediateLeaks(t *testing.T) { if _, err := finalState.Commit(false); err != nil { t.Fatalf("failed to commit final state: %v", err) } - for _, key := range finalDb.Keys() { + it := finalDb.NewIterator() + for it.Next() { + key := it.Key() if _, err := transDb.Get(key); err != nil { - val, _ := finalDb.Get(key) - t.Errorf("entry missing from the transition database: %x -> %x", key, val) + t.Errorf("entry missing from the transition database: %x -> %x", key, it.Value()) } } - for _, key := range transDb.Keys() { + it.Release() + + it = transDb.NewIterator() + for it.Next() { + key := it.Key() if _, err := finalDb.Get(key); err != nil { - val, _ := transDb.Get(key) - t.Errorf("extra entry in the transition database: %x -> %x", key, val) + t.Errorf("extra entry in the transition database: %x -> %x", key, it.Value()) } } } @@ -122,7 +127,7 @@ func TestIntermediateLeaks(t *testing.T) { // https://github.com/ethereum/go-ethereum/pull/15549. func TestCopy(t *testing.T) { // Create a random state test to copy and modify "independently" - orig, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + orig, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) for i := byte(0); i < 255; i++ { obj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i})) @@ -276,6 +281,15 @@ func newTestAction(addr common.Address, r *rand.Rand) testAction { }, args: make([]int64, 1), }, + { + name: "AddPreimage", + fn: func(a testAction, s *StateDB) { + preimage := []byte{1} + hash := common.BytesToHash(preimage) + s.AddPreimage(hash, preimage) + }, + args: make([]int64, 1), + }, } action := actions[r.Intn(len(actions))] var nameargs []string @@ -333,7 +347,7 @@ func (test *snapshotTest) String() string { func (test *snapshotTest) run() bool { // Run all actions and create snapshots. var ( - state, _ = New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + state, _ = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) snapshotRevs = make([]int, len(test.snapshots)) sindex = 0 ) @@ -424,7 +438,7 @@ func (s *StateSuite) TestTouchDelete(c *check.C) { // TestCopyOfCopy tests that modified objects are carried over to the copy, and the copy of the copy. // See https://github.com/ethereum/go-ethereum/pull/15225#issuecomment-380191512 func TestCopyOfCopy(t *testing.T) { - sdb, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + sdb, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) addr := common.HexToAddress("aaaa") sdb.SetBalance(addr, big.NewInt(42)) diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/sync.go b/vendor/github.com/ethereum/go-ethereum/core/state/sync.go index c566e790..5290411a 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/sync.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/sync.go @@ -20,12 +20,13 @@ import ( "bytes" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) // NewStateSync create a new state trie download scheduler. -func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.Sync { +func NewStateSync(root common.Hash, database ethdb.Reader) *trie.Sync { var syncer *trie.Sync callback := func(leaf []byte, parent common.Hash) error { var obj Account diff --git a/vendor/github.com/ethereum/go-ethereum/core/state/sync_test.go b/vendor/github.com/ethereum/go-ethereum/core/state/sync_test.go index 31774016..ab4718b0 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state/sync_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state/sync_test.go @@ -22,6 +22,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/trie" @@ -38,7 +39,7 @@ type testAccount struct { // makeTestState create a sample test state to test node-wise reconstruction. func makeTestState() (Database, common.Hash, []*testAccount) { // Create an empty state - db := NewDatabase(ethdb.NewMemDatabase()) + db := NewDatabase(rawdb.NewMemoryDatabase()) state, _ := New(common.Hash{}, db) // Fill it with some arbitrary data @@ -124,7 +125,7 @@ func checkStateConsistency(db ethdb.Database, root common.Hash) error { // Tests that an empty state is not scheduled for syncing. func TestEmptyStateSync(t *testing.T) { empty := common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") - if req := NewStateSync(empty, ethdb.NewMemDatabase()).Missing(1); len(req) != 0 { + if req := NewStateSync(empty, rawdb.NewMemoryDatabase()).Missing(1); len(req) != 0 { t.Errorf("content requested for empty state: %v", req) } } @@ -139,7 +140,7 @@ func testIterativeStateSync(t *testing.T, batch int) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() + dstDb := rawdb.NewMemoryDatabase() sched := NewStateSync(srcRoot, dstDb) queue := append([]common.Hash{}, sched.Missing(batch)...) @@ -171,7 +172,7 @@ func TestIterativeDelayedStateSync(t *testing.T) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() + dstDb := rawdb.NewMemoryDatabase() sched := NewStateSync(srcRoot, dstDb) queue := append([]common.Hash{}, sched.Missing(0)...) @@ -208,7 +209,7 @@ func testIterativeRandomStateSync(t *testing.T, batch int) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() + dstDb := rawdb.NewMemoryDatabase() sched := NewStateSync(srcRoot, dstDb) queue := make(map[common.Hash]struct{}) @@ -248,7 +249,7 @@ func TestIterativeRandomDelayedStateSync(t *testing.T) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() + dstDb := rawdb.NewMemoryDatabase() sched := NewStateSync(srcRoot, dstDb) queue := make(map[common.Hash]struct{}) @@ -295,7 +296,7 @@ func TestIncompleteStateSync(t *testing.T) { checkTrieConsistency(srcDb.TrieDB().DiskDB().(ethdb.Database), srcRoot) // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() + dstDb := rawdb.NewMemoryDatabase() sched := NewStateSync(srcRoot, dstDb) added := []common.Hash{} diff --git a/vendor/github.com/ethereum/go-ethereum/core/state_processor.go b/vendor/github.com/ethereum/go-ethereum/core/state_processor.go index 503a35d1..6f2a4512 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/state_processor.go +++ b/vendor/github.com/ethereum/go-ethereum/core/state_processor.go @@ -121,6 +121,9 @@ func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *commo // Set the receipt logs and create a bloom for filtering receipt.Logs = statedb.GetLogs(tx.Hash()) receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + receipt.BlockHash = statedb.BlockHash() + receipt.BlockNumber = header.Number + receipt.TransactionIndex = uint(statedb.TxIndex()) return receipt, gas, err } diff --git a/vendor/github.com/ethereum/go-ethereum/core/tx_pool.go b/vendor/github.com/ethereum/go-ethereum/core/tx_pool.go index 552d3692..411143ae 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/tx_pool.go +++ b/vendor/github.com/ethereum/go-ethereum/core/tx_pool.go @@ -387,11 +387,26 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) { } else { // Reorg seems shallow enough to pull in all transactions into memory var discarded, included types.Transactions - var ( rem = pool.chain.GetBlock(oldHead.Hash(), oldHead.Number.Uint64()) add = pool.chain.GetBlock(newHead.Hash(), newHead.Number.Uint64()) ) + if rem == nil { + // This can happen if a setHead is performed, where we simply discard the old + // head from the chain. + // If that is the case, we don't have the lost transactions any more, and + // there's nothing to add + if newNum < oldNum { + // If the reorg ended up on a lower number, it's indicative of setHead being the cause + log.Debug("Skipping transaction reset caused by setHead", + "old", oldHead.Hash(), "oldnum", oldNum, "new", newHead.Hash(), "newnum", newNum) + } else { + // If we reorged to a same or higher number, then it's not a case of setHead + log.Warn("Transaction pool reset with missing oldhead", + "old", oldHead.Hash(), "oldnum", oldNum, "new", newHead.Hash(), "newnum", newNum) + } + return + } for rem.NumberU64() > add.NumberU64() { discarded = append(discarded, rem.Transactions()...) if rem = pool.chain.GetBlock(rem.ParentHash(), rem.NumberU64()-1); rem == nil { @@ -818,6 +833,9 @@ func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error { // addTx enqueues a single transaction into the pool if it is valid. func (pool *TxPool) addTx(tx *types.Transaction, local bool) error { + // Cache sender in transaction before obtaining lock (pool.signer is immutable) + types.Sender(pool.signer, tx) + pool.mu.Lock() defer pool.mu.Unlock() @@ -836,6 +854,10 @@ func (pool *TxPool) addTx(tx *types.Transaction, local bool) error { // addTxs attempts to queue a batch of transactions if they are valid. func (pool *TxPool) addTxs(txs []*types.Transaction, local bool) []error { + // Cache senders in transactions before obtaining lock (pool.signer is immutable) + for _, tx := range txs { + types.Sender(pool.signer, tx) + } pool.mu.Lock() defer pool.mu.Unlock() diff --git a/vendor/github.com/ethereum/go-ethereum/core/tx_pool_test.go b/vendor/github.com/ethereum/go-ethereum/core/tx_pool_test.go index 6d3bd7a5..50c73cf5 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/tx_pool_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/tx_pool_test.go @@ -27,10 +27,10 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/params" ) @@ -78,7 +78,7 @@ func pricedTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ec } func setupTxPool() (*TxPool, *ecdsa.PrivateKey) { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} key, _ := crypto.GenerateKey() @@ -126,7 +126,7 @@ func validateEvents(events chan NewTxsEvent, count int) error { case ev := <-events: received = append(received, ev.Txs...) case <-time.After(time.Second): - return fmt.Errorf("event #%d not fired", received) + return fmt.Errorf("event #%d not fired", len(received)) } } if len(received) > count { @@ -163,7 +163,7 @@ func (c *testChain) State() (*state.StateDB, error) { // a state change between those fetches. stdb := c.statedb if *c.trigger { - c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) // simulate that the new head block included tx0 and tx1 c.statedb.SetNonce(c.address, 2) c.statedb.SetBalance(c.address, new(big.Int).SetUint64(params.Ether)) @@ -181,7 +181,7 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { var ( key, _ = crypto.GenerateKey() address = crypto.PubkeyToAddress(key.PublicKey) - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) trigger = false ) @@ -335,7 +335,7 @@ func TestTransactionChainFork(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) statedb.AddBalance(addr, big.NewInt(100000000000000)) pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} @@ -364,7 +364,7 @@ func TestTransactionDoubleNonce(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) statedb.AddBalance(addr, big.NewInt(100000000000000)) pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} @@ -554,7 +554,7 @@ func TestTransactionPostponing(t *testing.T) { t.Parallel() // Create the pool to test the postponing with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -769,7 +769,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -857,7 +857,7 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { evictionInterval = time.Second // Create the pool to test the non-expiration enforcement - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1011,7 +1011,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1057,7 +1057,7 @@ func TestTransactionCapClearsFromAll(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1091,7 +1091,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1139,7 +1139,7 @@ func TestTransactionPoolRepricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1260,7 +1260,7 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1274,14 +1274,14 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) { } // Create transaction (both pending and queued) with a linearly growing gasprice for i := uint64(0); i < 500; i++ { - // Add pending - p_tx := pricedTransaction(i, 100000, big.NewInt(int64(i)), keys[2]) - if err := pool.AddLocal(p_tx); err != nil { + // Add pending transaction. + pendingTx := pricedTransaction(i, 100000, big.NewInt(int64(i)), keys[2]) + if err := pool.AddLocal(pendingTx); err != nil { t.Fatal(err) } - // Add queued - q_tx := pricedTransaction(i+501, 100000, big.NewInt(int64(i)), keys[2]) - if err := pool.AddLocal(q_tx); err != nil { + // Add queued transaction. + queuedTx := pricedTransaction(i+501, 100000, big.NewInt(int64(i)), keys[2]) + if err := pool.AddLocal(queuedTx); err != nil { t.Fatal(err) } } @@ -1322,7 +1322,7 @@ func TestTransactionPoolUnderpricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1428,7 +1428,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1494,7 +1494,7 @@ func TestTransactionReplacement(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1588,7 +1588,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { os.Remove(journal) // Create the original pool to inject transaction into the journal - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1686,7 +1686,7 @@ func TestTransactionStatusCheck(t *testing.T) { t.Parallel() // Create the pool to test the status retrievals with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) diff --git a/vendor/github.com/ethereum/go-ethereum/core/types.go b/vendor/github.com/ethereum/go-ethereum/core/types.go index d0bbaf0a..5c963e66 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types.go @@ -32,7 +32,7 @@ type Validator interface { // ValidateState validates the given statedb and optionally the receipts and // gas used. - ValidateState(block, parent *types.Block, state *state.StateDB, receipts types.Receipts, usedGas uint64) error + ValidateState(block *types.Block, state *state.StateDB, receipts types.Receipts, usedGas uint64) error } // Processor is an interface for processing blocks using a given initial state. diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/block.go b/vendor/github.com/ethereum/go-ethereum/core/types/block.go index 57905d8c..b84e13c6 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/block.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/block.go @@ -21,10 +21,10 @@ import ( "encoding/binary" "io" "math/big" + "reflect" "sort" "sync/atomic" "time" - "unsafe" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -102,10 +102,12 @@ func (h *Header) Hash() common.Hash { return rlpHash(h) } +var headerSize = common.StorageSize(reflect.TypeOf(Header{}).Size()) + // Size returns the approximate memory used by all internal contents. It is used // to approximate and limit the memory consumption of various caches. func (h *Header) Size() common.StorageSize { - return common.StorageSize(unsafe.Sizeof(*h)) + common.StorageSize(len(h.Extra)+(h.Difficulty.BitLen()+h.Number.BitLen()+h.Time.BitLen())/8) + return headerSize + common.StorageSize(len(h.Extra)+(h.Difficulty.BitLen()+h.Number.BitLen()+h.Time.BitLen())/8) } func rlpHash(x interface{}) (h common.Hash) { diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/gen_log_json.go b/vendor/github.com/ethereum/go-ethereum/core/types/gen_log_json.go index 1b5ae3c6..6e943394 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/gen_log_json.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/gen_log_json.go @@ -12,6 +12,7 @@ import ( var _ = (*logMarshaling)(nil) +// MarshalJSON marshals as JSON. func (l Log) MarshalJSON() ([]byte, error) { type Log struct { Address common.Address `json:"address" gencodec:"required"` @@ -37,6 +38,7 @@ func (l Log) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (l *Log) UnmarshalJSON(input []byte) error { type Log struct { Address *common.Address `json:"address" gencodec:"required"` diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/gen_receipt_json.go b/vendor/github.com/ethereum/go-ethereum/core/types/gen_receipt_json.go index 5c807a4c..790ed65b 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/gen_receipt_json.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/gen_receipt_json.go @@ -5,6 +5,7 @@ package types import ( "encoding/json" "errors" + "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -23,6 +24,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress common.Address `json:"contractAddress"` GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + BlockHash common.Hash `json:"blockHash,omitempty"` + BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` + TransactionIndex hexutil.Uint `json:"transactionIndex"` } var enc Receipt enc.PostState = r.PostState @@ -33,6 +37,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { enc.TxHash = r.TxHash enc.ContractAddress = r.ContractAddress enc.GasUsed = hexutil.Uint64(r.GasUsed) + enc.BlockHash = r.BlockHash + enc.BlockNumber = (*hexutil.Big)(r.BlockNumber) + enc.TransactionIndex = hexutil.Uint(r.TransactionIndex) return json.Marshal(&enc) } @@ -47,6 +54,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { TxHash *common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress *common.Address `json:"contractAddress"` GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + BlockHash *common.Hash `json:"blockHash,omitempty"` + BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` + TransactionIndex *hexutil.Uint `json:"transactionIndex"` } var dec Receipt if err := json.Unmarshal(input, &dec); err != nil { @@ -81,5 +91,14 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'gasUsed' for Receipt") } r.GasUsed = uint64(*dec.GasUsed) + if dec.BlockHash != nil { + r.BlockHash = *dec.BlockHash + } + if dec.BlockNumber != nil { + r.BlockNumber = (*big.Int)(dec.BlockNumber) + } + if dec.TransactionIndex != nil { + r.TransactionIndex = uint(*dec.TransactionIndex) + } return nil } diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/gen_tx_json.go b/vendor/github.com/ethereum/go-ethereum/core/types/gen_tx_json.go index c27da670..e676058e 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/gen_tx_json.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/gen_tx_json.go @@ -13,6 +13,7 @@ import ( var _ = (*txdataMarshaling)(nil) +// MarshalJSON marshals as JSON. func (t txdata) MarshalJSON() ([]byte, error) { type txdata struct { AccountNonce hexutil.Uint64 `json:"nonce" gencodec:"required"` @@ -40,6 +41,7 @@ func (t txdata) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (t *txdata) UnmarshalJSON(input []byte) error { type txdata struct { AccountNonce *hexutil.Uint64 `json:"nonce" gencodec:"required"` diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/log.go b/vendor/github.com/ethereum/go-ethereum/core/types/log.go index 717cd2e5..864af5ef 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/log.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/log.go @@ -68,7 +68,11 @@ type rlpLog struct { Data []byte } -type rlpStorageLog struct { +// rlpStorageLog is the storage encoding of a log. +type rlpStorageLog rlpLog + +// LegacyRlpStorageLog is the previous storage encoding of a log including some redundant fields. +type LegacyRlpStorageLog struct { Address common.Address Topics []common.Hash Data []byte @@ -101,31 +105,38 @@ type LogForStorage Log // EncodeRLP implements rlp.Encoder. func (l *LogForStorage) EncodeRLP(w io.Writer) error { return rlp.Encode(w, rlpStorageLog{ - Address: l.Address, - Topics: l.Topics, - Data: l.Data, - BlockNumber: l.BlockNumber, - TxHash: l.TxHash, - TxIndex: l.TxIndex, - BlockHash: l.BlockHash, - Index: l.Index, + Address: l.Address, + Topics: l.Topics, + Data: l.Data, }) } // DecodeRLP implements rlp.Decoder. +// +// Note some redundant fields(e.g. block number, tx hash etc) will be assembled later. func (l *LogForStorage) DecodeRLP(s *rlp.Stream) error { + blob, err := s.Raw() + if err != nil { + return err + } var dec rlpStorageLog - err := s.Decode(&dec) + err = rlp.DecodeBytes(blob, &dec) if err == nil { *l = LogForStorage{ - Address: dec.Address, - Topics: dec.Topics, - Data: dec.Data, - BlockNumber: dec.BlockNumber, - TxHash: dec.TxHash, - TxIndex: dec.TxIndex, - BlockHash: dec.BlockHash, - Index: dec.Index, + Address: dec.Address, + Topics: dec.Topics, + Data: dec.Data, + } + } else { + // Try to decode log with previous definition. + var dec LegacyRlpStorageLog + err = rlp.DecodeBytes(blob, &dec) + if err == nil { + *l = LogForStorage{ + Address: dec.Address, + Topics: dec.Topics, + Data: dec.Data, + } } } return err diff --git a/vendor/github.com/ethereum/go-ethereum/core/types/receipt.go b/vendor/github.com/ethereum/go-ethereum/core/types/receipt.go index 3d1fc95a..72d85a1e 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/types/receipt.go +++ b/vendor/github.com/ethereum/go-ethereum/core/types/receipt.go @@ -20,6 +20,7 @@ import ( "bytes" "fmt" "io" + "math/big" "unsafe" "github.com/ethereum/go-ethereum/common" @@ -44,17 +45,24 @@ const ( // Receipt represents the results of a transaction. type Receipt struct { - // Consensus fields + // Consensus fields: These fields are defined by the Yellow Paper PostState []byte `json:"root"` Status uint64 `json:"status"` CumulativeGasUsed uint64 `json:"cumulativeGasUsed" gencodec:"required"` Bloom Bloom `json:"logsBloom" gencodec:"required"` Logs []*Log `json:"logs" gencodec:"required"` - // Implementation fields (don't reorder!) + // Implementation fields: These fields are added by geth when processing a transaction. + // They are stored in the chain database. TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress common.Address `json:"contractAddress"` GasUsed uint64 `json:"gasUsed" gencodec:"required"` + + // Inclusion information: These fields provide information about the inclusion of the + // transaction corresponding to this receipt. + BlockHash common.Hash `json:"blockHash,omitempty"` + BlockNumber *big.Int `json:"blockNumber,omitempty"` + TransactionIndex uint `json:"transactionIndex"` } type receiptMarshaling struct { @@ -62,6 +70,8 @@ type receiptMarshaling struct { Status hexutil.Uint64 CumulativeGasUsed hexutil.Uint64 GasUsed hexutil.Uint64 + BlockNumber *hexutil.Big + TransactionIndex hexutil.Uint } // receiptRLP is the consensus encoding of a receipt. @@ -72,7 +82,18 @@ type receiptRLP struct { Logs []*Log } +// receiptStorageRLP is the storage encoding of a receipt. type receiptStorageRLP struct { + PostStateOrStatus []byte + CumulativeGasUsed uint64 + TxHash common.Hash + ContractAddress common.Address + Logs []*LogForStorage + GasUsed uint64 +} + +// LegacyReceiptStorageRLP is the previous storage encoding of a receipt including some unnecessary fields. +type LegacyReceiptStorageRLP struct { PostStateOrStatus []byte CumulativeGasUsed uint64 Bloom Bloom @@ -159,7 +180,6 @@ func (r *ReceiptForStorage) EncodeRLP(w io.Writer) error { enc := &receiptStorageRLP{ PostStateOrStatus: (*Receipt)(r).statusEncoding(), CumulativeGasUsed: r.CumulativeGasUsed, - Bloom: r.Bloom, TxHash: r.TxHash, ContractAddress: r.ContractAddress, Logs: make([]*LogForStorage, len(r.Logs)), @@ -174,19 +194,34 @@ func (r *ReceiptForStorage) EncodeRLP(w io.Writer) error { // DecodeRLP implements rlp.Decoder, and loads both consensus and implementation // fields of a receipt from an RLP stream. func (r *ReceiptForStorage) DecodeRLP(s *rlp.Stream) error { - var dec receiptStorageRLP - if err := s.Decode(&dec); err != nil { + blob, err := s.Raw() + if err != nil { return err } + var dec receiptStorageRLP + if err := rlp.DecodeBytes(blob, &dec); err != nil { + var sdec LegacyReceiptStorageRLP + if err := rlp.DecodeBytes(blob, &sdec); err != nil { + return err + } + dec.PostStateOrStatus = common.CopyBytes(sdec.PostStateOrStatus) + dec.CumulativeGasUsed = sdec.CumulativeGasUsed + dec.TxHash = sdec.TxHash + dec.ContractAddress = sdec.ContractAddress + dec.Logs = sdec.Logs + dec.GasUsed = sdec.GasUsed + } if err := (*Receipt)(r).setStatus(dec.PostStateOrStatus); err != nil { return err } // Assign the consensus fields - r.CumulativeGasUsed, r.Bloom = dec.CumulativeGasUsed, dec.Bloom + r.CumulativeGasUsed = dec.CumulativeGasUsed r.Logs = make([]*Log, len(dec.Logs)) for i, log := range dec.Logs { r.Logs[i] = (*Log)(log) } + + r.Bloom = CreateBloom(Receipts{(*Receipt)(r)}) // Assign the implementation fields r.TxHash, r.ContractAddress, r.GasUsed = dec.TxHash, dec.ContractAddress, dec.GasUsed return nil diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/common.go b/vendor/github.com/ethereum/go-ethereum/core/vm/common.go index 17de38de..d592a941 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/common.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/common.go @@ -23,13 +23,31 @@ import ( "github.com/ethereum/go-ethereum/common/math" ) -// calculates the memory size required for a step -func calcMemSize(off, l *big.Int) *big.Int { - if l.Sign() == 0 { - return common.Big0 +// calcMemSize64 calculates the required memory size, and returns +// the size and whether the result overflowed uint64 +func calcMemSize64(off, l *big.Int) (uint64, bool) { + if !l.IsUint64() { + return 0, true } + return calcMemSize64WithUint(off, l.Uint64()) +} - return new(big.Int).Add(off, l) +// calcMemSize64WithUint calculates the required memory size, and returns +// the size and whether the result overflowed uint64 +// Identical to calcMemSize64, but length is a uint64 +func calcMemSize64WithUint(off *big.Int, length64 uint64) (uint64, bool) { + // if length is zero, memsize is always zero, regardless of offset + if length64 == 0 { + return 0, false + } + // Check that offset doesn't overflow + if !off.IsUint64() { + return 0, true + } + offset64 := off.Uint64() + val := offset64 + length64 + // if value < either of it's parts, then it overflowed + return val, val < offset64 } // getData returns a slice from the data based on the start and size and pads @@ -59,7 +77,7 @@ func getDataBig(data []byte, start *big.Int, size *big.Int) []byte { // bigUint64 returns the integer casted to a uint64 and returns whether it // overflowed in the process. func bigUint64(v *big.Int) (uint64, bool) { - return v.Uint64(), v.BitLen() > 64 + return v.Uint64(), !v.IsUint64() } // toWordSize returns the ceiled word size required for memory expansion. diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/evm.go b/vendor/github.com/ethereum/go-ethereum/core/vm/evm.go index ba4d1e9e..70e1cd1b 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/evm.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/evm.go @@ -267,9 +267,8 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, snapshot = evm.StateDB.Snapshot() to = AccountRef(caller.Address()) ) - // initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, to, value, gas) contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) @@ -333,9 +332,8 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte to = AccountRef(addr) snapshot = evm.StateDB.Snapshot() ) - // Initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, to, new(big.Int), gas) contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) @@ -396,9 +394,8 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, } evm.Transfer(evm.StateDB, caller.Address(), address, value) - // initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, AccountRef(address), value, gas) contract.SetCodeOptionalHash(&address, codeAndHash) diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/gas.go b/vendor/github.com/ethereum/go-ethereum/core/vm/gas.go index bba7058c..022a84f2 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/gas.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/gas.go @@ -30,10 +30,6 @@ const ( GasMidStep uint64 = 8 GasSlowStep uint64 = 10 GasExtStep uint64 = 20 - - GasReturn uint64 = 0 - GasStop uint64 = 0 - GasContractByte uint64 = 200 ) // calcGas returns the actual gas cost of the call. @@ -47,11 +43,11 @@ func callGas(gasTable params.GasTable, availableGas, base uint64, callCost *big. // If the bit length exceeds 64 bit we know that the newly calculated "gas" for EIP150 // is smaller than the requested amount. Therefor we return the new gas instead // of returning an error. - if callCost.BitLen() > 64 || gas < callCost.Uint64() { + if !callCost.IsUint64() || gas < callCost.Uint64() { return gas, nil } } - if callCost.BitLen() > 64 { + if !callCost.IsUint64() { return 0, errGasUintOverflow } diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/gas_table.go b/vendor/github.com/ethereum/go-ethereum/core/vm/gas_table.go index 9203e10a..6400c132 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/gas_table.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/gas_table.go @@ -22,7 +22,7 @@ import ( "github.com/ethereum/go-ethereum/params" ) -// memoryGasCosts calculates the quadratic gas for memory expansion. It does so +// memoryGasCost calculates the quadratic gas for memory expansion. It does so // only for the memory region that is expanded, not the total memory. func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { @@ -57,12 +57,6 @@ func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { return 0, nil } -func constGasFunc(gas uint64) gasFunc { - return func(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gas, nil - } -} - func gasCallDataCopy(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { @@ -382,7 +376,7 @@ func gasExp(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem gas = expByteLen * gt.ExpByte // no overflow check required. Max is 256 * ExpByte gas overflow bool ) - if gas, overflow = math.SafeAdd(gas, GasSlowStep); overflow { + if gas, overflow = math.SafeAdd(gas, params.ExpGas); overflow { return 0, errGasUintOverflow } return gas, nil @@ -521,15 +515,3 @@ func gasStaticCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stac } return gas, nil } - -func gasPush(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil -} - -func gasSwap(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil -} - -func gasDup(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/instructions.go b/vendor/github.com/ethereum/go-ethereum/core/vm/instructions.go index 5195e716..2a062d7e 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/instructions.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/instructions.go @@ -18,7 +18,6 @@ package vm import ( "errors" - "fmt" "math/big" "github.com/ethereum/go-ethereum/common" @@ -35,6 +34,7 @@ var ( errReturnDataOutOfBounds = errors.New("evm: return data out of bounds") errExecutionReverted = errors.New("evm: execution reverted") errMaxCodeSizeExceeded = errors.New("evm: max code size exceeded") + errInvalidJump = errors.New("evm: invalid jump destination") ) func opAdd(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { @@ -405,7 +405,7 @@ func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory } func opAddress(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(contract.Address().Big()) + stack.push(interpreter.intPool.get().SetBytes(contract.Address().Bytes())) return nil, nil } @@ -416,12 +416,12 @@ func opBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memo } func opOrigin(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.evm.Origin.Big()) + stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Origin.Bytes())) return nil, nil } func opCaller(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(contract.Caller().Big()) + stack.push(interpreter.intPool.get().SetBytes(contract.Caller().Bytes())) return nil, nil } @@ -467,7 +467,7 @@ func opReturnDataCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contrac ) defer interpreter.intPool.put(memOffset, dataOffset, length, end) - if end.BitLen() > 64 || uint64(len(interpreter.returnData)) < end.Uint64() { + if !end.IsUint64() || uint64(len(interpreter.returnData)) < end.Uint64() { return nil, errReturnDataOutOfBounds } memory.Set(memOffset.Uint64(), length.Uint64(), interpreter.returnData[dataOffset.Uint64():end.Uint64()]) @@ -572,7 +572,7 @@ func opBlockhash(pc *uint64, interpreter *EVMInterpreter, contract *Contract, me } func opCoinbase(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.evm.Coinbase.Big()) + stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Coinbase.Bytes())) return nil, nil } @@ -645,8 +645,7 @@ func opSstore(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor func opJump(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { pos := stack.pop() if !contract.validJumpdest(pos) { - nop := contract.GetOp(pos.Uint64()) - return nil, fmt.Errorf("invalid jump destination (%v) %v", nop, pos) + return nil, errInvalidJump } *pc = pos.Uint64() @@ -658,8 +657,7 @@ func opJumpi(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory pos, cond := stack.pop(), stack.pop() if cond.Sign() != 0 { if !contract.validJumpdest(pos) { - nop := contract.GetOp(pos.Uint64()) - return nil, fmt.Errorf("invalid jump destination (%v) %v", nop, pos) + return nil, errInvalidJump } *pc = pos.Uint64() } else { @@ -711,7 +709,7 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor } else if suberr != nil && suberr != ErrCodeStoreOutOfGas { stack.push(interpreter.intPool.getZero()) } else { - stack.push(addr.Big()) + stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) } contract.Gas += returnGas interpreter.intPool.put(value, offset, size) @@ -739,7 +737,7 @@ func opCreate2(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memo if suberr != nil { stack.push(interpreter.intPool.getZero()) } else { - stack.push(addr.Big()) + stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) } contract.Gas += returnGas interpreter.intPool.put(endowment, offset, size, salt) @@ -912,6 +910,21 @@ func makeLog(size int) executionFunc { } } +// opPush1 is a specialized version of pushN +func opPush1(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { + var ( + codeLen = uint64(len(contract.Code)) + integer = interpreter.intPool.get() + ) + *pc += 1 + if *pc < codeLen { + stack.push(integer.SetUint64(uint64(contract.Code[*pc]))) + } else { + stack.push(integer.SetUint64(0)) + } + return nil, nil +} + // make push instruction function func makePush(size uint64, pushByteSize int) executionFunc { return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/interpreter.go b/vendor/github.com/ethereum/go-ethereum/core/vm/interpreter.go index 952d96dd..41766537 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/interpreter.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/interpreter.go @@ -118,22 +118,6 @@ func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter { } } -func (in *EVMInterpreter) enforceRestrictions(op OpCode, operation operation, stack *Stack) error { - if in.evm.chainRules.IsByzantium { - if in.readOnly { - // If the interpreter is operating in readonly mode, make sure no - // state-modifying operation is performed. The 3rd stack item - // for a call operation is the value. Transferring value from one - // account to the others means the state is modified and should also - // return with an error. - if operation.writes || (op == CALL && stack.Back(2).BitLen() > 0) { - return errWriteProtection - } - } - } - return nil -} - // Run loops and evaluates the contract's code with the given input data and returns // the return byte-slice and an error if one occurred. // @@ -182,6 +166,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( pcCopy uint64 // needed for the deferred Tracer gasCopy uint64 // for Tracer to log gas remaining before execution logged bool // deferred Tracer should ignore already logged steps + res []byte // result of the opcode execution function ) contract.Input = input @@ -216,19 +201,35 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( if !operation.valid { return nil, fmt.Errorf("invalid opcode 0x%x", int(op)) } - if err := operation.validateStack(stack); err != nil { - return nil, err + // Validate stack + if sLen := stack.len(); sLen < operation.minStack { + return nil, fmt.Errorf("stack underflow (%d <=> %d)", sLen, operation.minStack) + } else if sLen > operation.maxStack { + return nil, fmt.Errorf("stack limit reached %d (%d)", sLen, operation.maxStack) } // If the operation is valid, enforce and write restrictions - if err := in.enforceRestrictions(op, operation, stack); err != nil { - return nil, err + if in.readOnly && in.evm.chainRules.IsByzantium { + // If the interpreter is operating in readonly mode, make sure no + // state-modifying operation is performed. The 3rd stack item + // for a call operation is the value. Transferring value from one + // account to the others means the state is modified and should also + // return with an error. + if operation.writes || (op == CALL && stack.Back(2).Sign() != 0) { + return nil, errWriteProtection + } + } + // Static portion of gas + if !contract.UseGas(operation.constantGas) { + return nil, ErrOutOfGas } var memorySize uint64 // calculate the new memory size and expand the memory to fit // the operation + // Memory check needs to be done prior to evaluating the dynamic gas portion, + // to detect calculation overflows if operation.memorySize != nil { - memSize, overflow := bigUint64(operation.memorySize(stack)) + memSize, overflow := operation.memorySize(stack) if overflow { return nil, errGasUintOverflow } @@ -238,11 +239,14 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( return nil, errGasUintOverflow } } + // Dynamic portion of gas // consume the gas and return an error if not enough gas is available. // cost is explicitly set so that the capture state defer method can get the proper cost - cost, err = operation.gasCost(in.gasTable, in.evm, contract, stack, mem, memorySize) - if err != nil || !contract.UseGas(cost) { - return nil, ErrOutOfGas + if operation.dynamicGas != nil { + cost, err = operation.dynamicGas(in.gasTable, in.evm, contract, stack, mem, memorySize) + if err != nil || !contract.UseGas(cost) { + return nil, ErrOutOfGas + } } if memorySize > 0 { mem.Resize(memorySize) @@ -254,7 +258,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( } // execute the operation - res, err := operation.execute(&pc, in, contract, mem, stack) + res, err = operation.execute(&pc, in, contract, mem, stack) // verifyPool is a build flag. Pool verification makes sure the integrity // of the integer pool by comparing values to a default value. if verifyPool { diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/jump_table.go b/vendor/github.com/ethereum/go-ethereum/core/vm/jump_table.go index deedf70c..425436f9 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/jump_table.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/jump_table.go @@ -18,27 +18,30 @@ package vm import ( "errors" - "math/big" "github.com/ethereum/go-ethereum/params" ) type ( - executionFunc func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) - gasFunc func(params.GasTable, *EVM, *Contract, *Stack, *Memory, uint64) (uint64, error) // last parameter is the requested memory size as a uint64 - stackValidationFunc func(*Stack) error - memorySizeFunc func(*Stack) *big.Int + executionFunc func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) + gasFunc func(params.GasTable, *EVM, *Contract, *Stack, *Memory, uint64) (uint64, error) // last parameter is the requested memory size as a uint64 + // memorySizeFunc returns the required size, and whether the operation overflowed a uint64 + memorySizeFunc func(*Stack) (size uint64, overflow bool) ) var errGasUintOverflow = errors.New("gas uint64 overflow") type operation struct { // execute is the operation function - execute executionFunc - // gasCost is the gas function and returns the gas required for execution - gasCost gasFunc - // validateStack validates the stack (size) for the operation - validateStack stackValidationFunc + execute executionFunc + constantGas uint64 + dynamicGas gasFunc + // minStack tells how many stack items are required + minStack int + // maxStack specifies the max length the stack can have for this operation + // to not overflow the stack. + maxStack int + // memorySize returns the memory size required for the operation memorySize memorySizeFunc @@ -63,37 +66,42 @@ func newConstantinopleInstructionSet() [256]operation { // instructions that can be executed during the byzantium phase. instructionSet := newByzantiumInstructionSet() instructionSet[SHL] = operation{ - execute: opSHL, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSHL, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[SHR] = operation{ - execute: opSHR, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSHR, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[SAR] = operation{ - execute: opSAR, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSAR, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[EXTCODEHASH] = operation{ - execute: opExtCodeHash, - gasCost: gasExtCodeHash, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opExtCodeHash, + dynamicGas: gasExtCodeHash, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, } instructionSet[CREATE2] = operation{ - execute: opCreate2, - gasCost: gasCreate2, - validateStack: makeStackFunc(4, 1), - memorySize: memoryCreate2, - valid: true, - writes: true, - returns: true, + execute: opCreate2, + dynamicGas: gasCreate2, + minStack: minStack(4, 1), + maxStack: maxStack(4, 1), + memorySize: memoryCreate2, + valid: true, + writes: true, + returns: true, } return instructionSet } @@ -104,34 +112,38 @@ func newByzantiumInstructionSet() [256]operation { // instructions that can be executed during the homestead phase. instructionSet := newHomesteadInstructionSet() instructionSet[STATICCALL] = operation{ - execute: opStaticCall, - gasCost: gasStaticCall, - validateStack: makeStackFunc(6, 1), - memorySize: memoryStaticCall, - valid: true, - returns: true, + execute: opStaticCall, + dynamicGas: gasStaticCall, + minStack: minStack(6, 1), + maxStack: maxStack(6, 1), + memorySize: memoryStaticCall, + valid: true, + returns: true, } instructionSet[RETURNDATASIZE] = operation{ - execute: opReturnDataSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opReturnDataSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, } instructionSet[RETURNDATACOPY] = operation{ - execute: opReturnDataCopy, - gasCost: gasReturnDataCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryReturnDataCopy, - valid: true, + execute: opReturnDataCopy, + dynamicGas: gasReturnDataCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryReturnDataCopy, + valid: true, } instructionSet[REVERT] = operation{ - execute: opRevert, - gasCost: gasRevert, - validateStack: makeStackFunc(2, 0), - memorySize: memoryRevert, - valid: true, - reverts: true, - returns: true, + execute: opRevert, + dynamicGas: gasRevert, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryRevert, + valid: true, + reverts: true, + returns: true, } return instructionSet } @@ -141,12 +153,13 @@ func newByzantiumInstructionSet() [256]operation { func newHomesteadInstructionSet() [256]operation { instructionSet := newFrontierInstructionSet() instructionSet[DELEGATECALL] = operation{ - execute: opDelegateCall, - gasCost: gasDelegateCall, - validateStack: makeStackFunc(6, 1), - memorySize: memoryDelegateCall, - valid: true, - returns: true, + execute: opDelegateCall, + dynamicGas: gasDelegateCall, + minStack: minStack(6, 1), + maxStack: maxStack(6, 1), + memorySize: memoryDelegateCall, + valid: true, + returns: true, } return instructionSet } @@ -156,811 +169,940 @@ func newHomesteadInstructionSet() [256]operation { func newFrontierInstructionSet() [256]operation { return [256]operation{ STOP: { - execute: opStop, - gasCost: constGasFunc(0), - validateStack: makeStackFunc(0, 0), - halts: true, - valid: true, + execute: opStop, + constantGas: 0, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + halts: true, + valid: true, }, ADD: { - execute: opAdd, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opAdd, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, MUL: { - execute: opMul, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opMul, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SUB: { - execute: opSub, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSub, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, DIV: { - execute: opDiv, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opDiv, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SDIV: { - execute: opSdiv, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSdiv, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, MOD: { - execute: opMod, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opMod, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SMOD: { - execute: opSmod, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSmod, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, ADDMOD: { - execute: opAddmod, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(3, 1), - valid: true, + execute: opAddmod, + constantGas: GasMidStep, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + valid: true, }, MULMOD: { - execute: opMulmod, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(3, 1), - valid: true, + execute: opMulmod, + constantGas: GasMidStep, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + valid: true, }, EXP: { - execute: opExp, - gasCost: gasExp, - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opExp, + dynamicGas: gasExp, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SIGNEXTEND: { - execute: opSignExtend, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSignExtend, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, LT: { - execute: opLt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opLt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, GT: { - execute: opGt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opGt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SLT: { - execute: opSlt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSlt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SGT: { - execute: opSgt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSgt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, EQ: { - execute: opEq, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opEq, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, ISZERO: { - execute: opIszero, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opIszero, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, AND: { - execute: opAnd, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opAnd, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, XOR: { - execute: opXor, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opXor, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, OR: { - execute: opOr, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opOr, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, NOT: { - execute: opNot, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opNot, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, BYTE: { - execute: opByte, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opByte, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SHA3: { - execute: opSha3, - gasCost: gasSha3, - validateStack: makeStackFunc(2, 1), - memorySize: memorySha3, - valid: true, + execute: opSha3, + dynamicGas: gasSha3, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + memorySize: memorySha3, + valid: true, }, ADDRESS: { - execute: opAddress, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opAddress, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, BALANCE: { - execute: opBalance, - gasCost: gasBalance, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opBalance, + dynamicGas: gasBalance, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, ORIGIN: { - execute: opOrigin, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opOrigin, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLER: { - execute: opCaller, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCaller, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLVALUE: { - execute: opCallValue, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCallValue, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLDATALOAD: { - execute: opCallDataLoad, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opCallDataLoad, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, CALLDATASIZE: { - execute: opCallDataSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCallDataSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLDATACOPY: { - execute: opCallDataCopy, - gasCost: gasCallDataCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryCallDataCopy, - valid: true, + execute: opCallDataCopy, + dynamicGas: gasCallDataCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryCallDataCopy, + valid: true, }, CODESIZE: { - execute: opCodeSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCodeSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CODECOPY: { - execute: opCodeCopy, - gasCost: gasCodeCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryCodeCopy, - valid: true, + execute: opCodeCopy, + dynamicGas: gasCodeCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryCodeCopy, + valid: true, }, GASPRICE: { - execute: opGasprice, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGasprice, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, EXTCODESIZE: { - execute: opExtCodeSize, - gasCost: gasExtCodeSize, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opExtCodeSize, + dynamicGas: gasExtCodeSize, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, EXTCODECOPY: { - execute: opExtCodeCopy, - gasCost: gasExtCodeCopy, - validateStack: makeStackFunc(4, 0), - memorySize: memoryExtCodeCopy, - valid: true, + execute: opExtCodeCopy, + dynamicGas: gasExtCodeCopy, + minStack: minStack(4, 0), + maxStack: maxStack(4, 0), + memorySize: memoryExtCodeCopy, + valid: true, }, BLOCKHASH: { - execute: opBlockhash, - gasCost: constGasFunc(GasExtStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opBlockhash, + constantGas: GasExtStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, COINBASE: { - execute: opCoinbase, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCoinbase, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, TIMESTAMP: { - execute: opTimestamp, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opTimestamp, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, NUMBER: { - execute: opNumber, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opNumber, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, DIFFICULTY: { - execute: opDifficulty, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opDifficulty, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, GASLIMIT: { - execute: opGasLimit, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGasLimit, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, POP: { - execute: opPop, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(1, 0), - valid: true, + execute: opPop, + constantGas: GasQuickStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + valid: true, }, MLOAD: { - execute: opMload, - gasCost: gasMLoad, - validateStack: makeStackFunc(1, 1), - memorySize: memoryMLoad, - valid: true, + execute: opMload, + dynamicGas: gasMLoad, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + memorySize: memoryMLoad, + valid: true, }, MSTORE: { - execute: opMstore, - gasCost: gasMStore, - validateStack: makeStackFunc(2, 0), - memorySize: memoryMStore, - valid: true, + execute: opMstore, + dynamicGas: gasMStore, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryMStore, + valid: true, }, MSTORE8: { - execute: opMstore8, - gasCost: gasMStore8, - memorySize: memoryMStore8, - validateStack: makeStackFunc(2, 0), + execute: opMstore8, + dynamicGas: gasMStore8, + memorySize: memoryMStore8, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), valid: true, }, SLOAD: { - execute: opSload, - gasCost: gasSLoad, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opSload, + dynamicGas: gasSLoad, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, SSTORE: { - execute: opSstore, - gasCost: gasSStore, - validateStack: makeStackFunc(2, 0), - valid: true, - writes: true, + execute: opSstore, + dynamicGas: gasSStore, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + valid: true, + writes: true, }, JUMP: { - execute: opJump, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(1, 0), - jumps: true, - valid: true, + execute: opJump, + constantGas: GasMidStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + jumps: true, + valid: true, }, JUMPI: { - execute: opJumpi, - gasCost: constGasFunc(GasSlowStep), - validateStack: makeStackFunc(2, 0), - jumps: true, - valid: true, + execute: opJumpi, + constantGas: GasSlowStep, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + jumps: true, + valid: true, }, PC: { - execute: opPc, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opPc, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, MSIZE: { - execute: opMsize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opMsize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, GAS: { - execute: opGas, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGas, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, JUMPDEST: { - execute: opJumpdest, - gasCost: constGasFunc(params.JumpdestGas), - validateStack: makeStackFunc(0, 0), - valid: true, + execute: opJumpdest, + constantGas: params.JumpdestGas, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + valid: true, }, PUSH1: { - execute: makePush(1, 1), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opPush1, + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH2: { - execute: makePush(2, 2), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(2, 2), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH3: { - execute: makePush(3, 3), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(3, 3), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH4: { - execute: makePush(4, 4), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(4, 4), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH5: { - execute: makePush(5, 5), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(5, 5), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH6: { - execute: makePush(6, 6), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(6, 6), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH7: { - execute: makePush(7, 7), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(7, 7), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH8: { - execute: makePush(8, 8), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(8, 8), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH9: { - execute: makePush(9, 9), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(9, 9), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH10: { - execute: makePush(10, 10), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(10, 10), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH11: { - execute: makePush(11, 11), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(11, 11), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH12: { - execute: makePush(12, 12), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(12, 12), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH13: { - execute: makePush(13, 13), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(13, 13), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH14: { - execute: makePush(14, 14), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(14, 14), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH15: { - execute: makePush(15, 15), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(15, 15), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH16: { - execute: makePush(16, 16), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(16, 16), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH17: { - execute: makePush(17, 17), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(17, 17), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH18: { - execute: makePush(18, 18), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(18, 18), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH19: { - execute: makePush(19, 19), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(19, 19), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH20: { - execute: makePush(20, 20), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(20, 20), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH21: { - execute: makePush(21, 21), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(21, 21), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH22: { - execute: makePush(22, 22), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(22, 22), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH23: { - execute: makePush(23, 23), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(23, 23), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH24: { - execute: makePush(24, 24), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(24, 24), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH25: { - execute: makePush(25, 25), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(25, 25), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH26: { - execute: makePush(26, 26), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(26, 26), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH27: { - execute: makePush(27, 27), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(27, 27), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH28: { - execute: makePush(28, 28), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(28, 28), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH29: { - execute: makePush(29, 29), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(29, 29), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH30: { - execute: makePush(30, 30), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(30, 30), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH31: { - execute: makePush(31, 31), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(31, 31), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH32: { - execute: makePush(32, 32), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(32, 32), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, DUP1: { - execute: makeDup(1), - gasCost: gasDup, - validateStack: makeDupStackFunc(1), - valid: true, + execute: makeDup(1), + constantGas: GasFastestStep, + minStack: minDupStack(1), + maxStack: maxDupStack(1), + valid: true, }, DUP2: { - execute: makeDup(2), - gasCost: gasDup, - validateStack: makeDupStackFunc(2), - valid: true, + execute: makeDup(2), + constantGas: GasFastestStep, + minStack: minDupStack(2), + maxStack: maxDupStack(2), + valid: true, }, DUP3: { - execute: makeDup(3), - gasCost: gasDup, - validateStack: makeDupStackFunc(3), - valid: true, + execute: makeDup(3), + constantGas: GasFastestStep, + minStack: minDupStack(3), + maxStack: maxDupStack(3), + valid: true, }, DUP4: { - execute: makeDup(4), - gasCost: gasDup, - validateStack: makeDupStackFunc(4), - valid: true, + execute: makeDup(4), + constantGas: GasFastestStep, + minStack: minDupStack(4), + maxStack: maxDupStack(4), + valid: true, }, DUP5: { - execute: makeDup(5), - gasCost: gasDup, - validateStack: makeDupStackFunc(5), - valid: true, + execute: makeDup(5), + constantGas: GasFastestStep, + minStack: minDupStack(5), + maxStack: maxDupStack(5), + valid: true, }, DUP6: { - execute: makeDup(6), - gasCost: gasDup, - validateStack: makeDupStackFunc(6), - valid: true, + execute: makeDup(6), + constantGas: GasFastestStep, + minStack: minDupStack(6), + maxStack: maxDupStack(6), + valid: true, }, DUP7: { - execute: makeDup(7), - gasCost: gasDup, - validateStack: makeDupStackFunc(7), - valid: true, + execute: makeDup(7), + constantGas: GasFastestStep, + minStack: minDupStack(7), + maxStack: maxDupStack(7), + valid: true, }, DUP8: { - execute: makeDup(8), - gasCost: gasDup, - validateStack: makeDupStackFunc(8), - valid: true, + execute: makeDup(8), + constantGas: GasFastestStep, + minStack: minDupStack(8), + maxStack: maxDupStack(8), + valid: true, }, DUP9: { - execute: makeDup(9), - gasCost: gasDup, - validateStack: makeDupStackFunc(9), - valid: true, + execute: makeDup(9), + constantGas: GasFastestStep, + minStack: minDupStack(9), + maxStack: maxDupStack(9), + valid: true, }, DUP10: { - execute: makeDup(10), - gasCost: gasDup, - validateStack: makeDupStackFunc(10), - valid: true, + execute: makeDup(10), + constantGas: GasFastestStep, + minStack: minDupStack(10), + maxStack: maxDupStack(10), + valid: true, }, DUP11: { - execute: makeDup(11), - gasCost: gasDup, - validateStack: makeDupStackFunc(11), - valid: true, + execute: makeDup(11), + constantGas: GasFastestStep, + minStack: minDupStack(11), + maxStack: maxDupStack(11), + valid: true, }, DUP12: { - execute: makeDup(12), - gasCost: gasDup, - validateStack: makeDupStackFunc(12), - valid: true, + execute: makeDup(12), + constantGas: GasFastestStep, + minStack: minDupStack(12), + maxStack: maxDupStack(12), + valid: true, }, DUP13: { - execute: makeDup(13), - gasCost: gasDup, - validateStack: makeDupStackFunc(13), - valid: true, + execute: makeDup(13), + constantGas: GasFastestStep, + minStack: minDupStack(13), + maxStack: maxDupStack(13), + valid: true, }, DUP14: { - execute: makeDup(14), - gasCost: gasDup, - validateStack: makeDupStackFunc(14), - valid: true, + execute: makeDup(14), + constantGas: GasFastestStep, + minStack: minDupStack(14), + maxStack: maxDupStack(14), + valid: true, }, DUP15: { - execute: makeDup(15), - gasCost: gasDup, - validateStack: makeDupStackFunc(15), - valid: true, + execute: makeDup(15), + constantGas: GasFastestStep, + minStack: minDupStack(15), + maxStack: maxDupStack(15), + valid: true, }, DUP16: { - execute: makeDup(16), - gasCost: gasDup, - validateStack: makeDupStackFunc(16), - valid: true, + execute: makeDup(16), + constantGas: GasFastestStep, + minStack: minDupStack(16), + maxStack: maxDupStack(16), + valid: true, }, SWAP1: { - execute: makeSwap(1), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(2), - valid: true, + execute: makeSwap(1), + constantGas: GasFastestStep, + minStack: minSwapStack(2), + maxStack: maxSwapStack(2), + valid: true, }, SWAP2: { - execute: makeSwap(2), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(3), - valid: true, + execute: makeSwap(2), + constantGas: GasFastestStep, + minStack: minSwapStack(3), + maxStack: maxSwapStack(3), + valid: true, }, SWAP3: { - execute: makeSwap(3), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(4), - valid: true, + execute: makeSwap(3), + constantGas: GasFastestStep, + minStack: minSwapStack(4), + maxStack: maxSwapStack(4), + valid: true, }, SWAP4: { - execute: makeSwap(4), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(5), - valid: true, + execute: makeSwap(4), + constantGas: GasFastestStep, + minStack: minSwapStack(5), + maxStack: maxSwapStack(5), + valid: true, }, SWAP5: { - execute: makeSwap(5), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(6), - valid: true, + execute: makeSwap(5), + constantGas: GasFastestStep, + minStack: minSwapStack(6), + maxStack: maxSwapStack(6), + valid: true, }, SWAP6: { - execute: makeSwap(6), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(7), - valid: true, + execute: makeSwap(6), + constantGas: GasFastestStep, + minStack: minSwapStack(7), + maxStack: maxSwapStack(7), + valid: true, }, SWAP7: { - execute: makeSwap(7), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(8), - valid: true, + execute: makeSwap(7), + constantGas: GasFastestStep, + minStack: minSwapStack(8), + maxStack: maxSwapStack(8), + valid: true, }, SWAP8: { - execute: makeSwap(8), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(9), - valid: true, + execute: makeSwap(8), + constantGas: GasFastestStep, + minStack: minSwapStack(9), + maxStack: maxSwapStack(9), + valid: true, }, SWAP9: { - execute: makeSwap(9), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(10), - valid: true, + execute: makeSwap(9), + constantGas: GasFastestStep, + minStack: minSwapStack(10), + maxStack: maxSwapStack(10), + valid: true, }, SWAP10: { - execute: makeSwap(10), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(11), - valid: true, + execute: makeSwap(10), + constantGas: GasFastestStep, + minStack: minSwapStack(11), + maxStack: maxSwapStack(11), + valid: true, }, SWAP11: { - execute: makeSwap(11), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(12), - valid: true, + execute: makeSwap(11), + constantGas: GasFastestStep, + minStack: minSwapStack(12), + maxStack: maxSwapStack(12), + valid: true, }, SWAP12: { - execute: makeSwap(12), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(13), - valid: true, + execute: makeSwap(12), + constantGas: GasFastestStep, + minStack: minSwapStack(13), + maxStack: maxSwapStack(13), + valid: true, }, SWAP13: { - execute: makeSwap(13), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(14), - valid: true, + execute: makeSwap(13), + constantGas: GasFastestStep, + minStack: minSwapStack(14), + maxStack: maxSwapStack(14), + valid: true, }, SWAP14: { - execute: makeSwap(14), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(15), - valid: true, + execute: makeSwap(14), + constantGas: GasFastestStep, + minStack: minSwapStack(15), + maxStack: maxSwapStack(15), + valid: true, }, SWAP15: { - execute: makeSwap(15), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(16), - valid: true, + execute: makeSwap(15), + constantGas: GasFastestStep, + minStack: minSwapStack(16), + maxStack: maxSwapStack(16), + valid: true, }, SWAP16: { - execute: makeSwap(16), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(17), - valid: true, + execute: makeSwap(16), + constantGas: GasFastestStep, + minStack: minSwapStack(17), + maxStack: maxSwapStack(17), + valid: true, }, LOG0: { - execute: makeLog(0), - gasCost: makeGasLog(0), - validateStack: makeStackFunc(2, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(0), + dynamicGas: makeGasLog(0), + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG1: { - execute: makeLog(1), - gasCost: makeGasLog(1), - validateStack: makeStackFunc(3, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(1), + dynamicGas: makeGasLog(1), + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG2: { - execute: makeLog(2), - gasCost: makeGasLog(2), - validateStack: makeStackFunc(4, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(2), + dynamicGas: makeGasLog(2), + minStack: minStack(4, 0), + maxStack: maxStack(4, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG3: { - execute: makeLog(3), - gasCost: makeGasLog(3), - validateStack: makeStackFunc(5, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(3), + dynamicGas: makeGasLog(3), + minStack: minStack(5, 0), + maxStack: maxStack(5, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG4: { - execute: makeLog(4), - gasCost: makeGasLog(4), - validateStack: makeStackFunc(6, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(4), + dynamicGas: makeGasLog(4), + minStack: minStack(6, 0), + maxStack: maxStack(6, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, CREATE: { - execute: opCreate, - gasCost: gasCreate, - validateStack: makeStackFunc(3, 1), - memorySize: memoryCreate, - valid: true, - writes: true, - returns: true, + execute: opCreate, + dynamicGas: gasCreate, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + memorySize: memoryCreate, + valid: true, + writes: true, + returns: true, }, CALL: { - execute: opCall, - gasCost: gasCall, - validateStack: makeStackFunc(7, 1), - memorySize: memoryCall, - valid: true, - returns: true, + execute: opCall, + dynamicGas: gasCall, + minStack: minStack(7, 1), + maxStack: maxStack(7, 1), + memorySize: memoryCall, + valid: true, + returns: true, }, CALLCODE: { - execute: opCallCode, - gasCost: gasCallCode, - validateStack: makeStackFunc(7, 1), - memorySize: memoryCall, - valid: true, - returns: true, + execute: opCallCode, + dynamicGas: gasCallCode, + minStack: minStack(7, 1), + maxStack: maxStack(7, 1), + memorySize: memoryCall, + valid: true, + returns: true, }, RETURN: { - execute: opReturn, - gasCost: gasReturn, - validateStack: makeStackFunc(2, 0), - memorySize: memoryReturn, - halts: true, - valid: true, + execute: opReturn, + dynamicGas: gasReturn, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryReturn, + halts: true, + valid: true, }, SELFDESTRUCT: { - execute: opSuicide, - gasCost: gasSuicide, - validateStack: makeStackFunc(1, 0), - halts: true, - valid: true, - writes: true, + execute: opSuicide, + dynamicGas: gasSuicide, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + halts: true, + valid: true, + writes: true, }, } } diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/memory_table.go b/vendor/github.com/ethereum/go-ethereum/core/vm/memory_table.go index 8fa6c90c..4fcb4144 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/memory_table.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/memory_table.go @@ -16,82 +16,98 @@ package vm -import ( - "math/big" - - "github.com/ethereum/go-ethereum/common/math" -) - -func memorySha3(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) +func memorySha3(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryCallDataCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryCallDataCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryReturnDataCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryReturnDataCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryCodeCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryCodeCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryExtCodeCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(3)) +func memoryExtCodeCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(3)) } -func memoryMLoad(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(32)) +func memoryMLoad(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 32) } -func memoryMStore8(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(1)) +func memoryMStore8(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 1) } -func memoryMStore(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(32)) +func memoryMStore(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 32) } -func memoryCreate(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(2)) +func memoryCreate(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(2)) } -func memoryCreate2(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(2)) +func memoryCreate2(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(2)) } -func memoryCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(5), stack.Back(6)) - y := calcMemSize(stack.Back(3), stack.Back(4)) - - return math.BigMax(x, y) +func memoryCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(5), stack.Back(6)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(3), stack.Back(4)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false +} +func memoryDelegateCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(4), stack.Back(5)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(2), stack.Back(3)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false } -func memoryDelegateCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(4), stack.Back(5)) - y := calcMemSize(stack.Back(2), stack.Back(3)) - - return math.BigMax(x, y) +func memoryStaticCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(4), stack.Back(5)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(2), stack.Back(3)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false } -func memoryStaticCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(4), stack.Back(5)) - y := calcMemSize(stack.Back(2), stack.Back(3)) - - return math.BigMax(x, y) +func memoryReturn(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryReturn(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) +func memoryRevert(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryRevert(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) -} - -func memoryLog(stack *Stack) *big.Int { - mSize, mStart := stack.Back(1), stack.Back(0) - return calcMemSize(mStart, mSize) +func memoryLog(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime.go b/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime.go index cda49a34..db1f6f38 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime.go @@ -22,10 +22,10 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -99,7 +99,7 @@ func Execute(code, input []byte, cfg *Config) ([]byte, *state.StateDB, error) { setDefaults(cfg) if cfg.State == nil { - cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) } var ( address = common.BytesToAddress([]byte("contract")) @@ -129,7 +129,7 @@ func Create(input []byte, cfg *Config) ([]byte, common.Address, uint64, error) { setDefaults(cfg) if cfg.State == nil { - cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) } var ( vmenv = NewEnv(cfg) diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime_test.go b/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime_test.go index bac06e52..15f545dd 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime_test.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/runtime/runtime_test.go @@ -23,9 +23,9 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -95,7 +95,7 @@ func TestExecute(t *testing.T) { } func TestCall(t *testing.T) { - state, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + state, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) address := common.HexToAddress("0x0a") state.SetCode(address, []byte{ byte(vm.PUSH1), 10, @@ -151,7 +151,7 @@ func BenchmarkCall(b *testing.B) { } func benchmarkEVM_Create(bench *testing.B, code string) { var ( - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) sender = common.BytesToAddress([]byte("sender")) receiver = common.BytesToAddress([]byte("receiver")) ) diff --git a/vendor/github.com/ethereum/go-ethereum/core/vm/stack_table.go b/vendor/github.com/ethereum/go-ethereum/core/vm/stack_table.go index a4b1cfcd..10c12901 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/vm/stack_table.go +++ b/vendor/github.com/ethereum/go-ethereum/core/vm/stack_table.go @@ -17,28 +17,26 @@ package vm import ( - "fmt" - "github.com/ethereum/go-ethereum/params" ) -func makeStackFunc(pop, push int) stackValidationFunc { - return func(stack *Stack) error { - if err := stack.require(pop); err != nil { - return err - } - - if stack.len()+push-pop > int(params.StackLimit) { - return fmt.Errorf("stack limit reached %d (%d)", stack.len(), params.StackLimit) - } - return nil - } +func minSwapStack(n int) int { + return minStack(n, n) +} +func maxSwapStack(n int) int { + return maxStack(n, n) } -func makeDupStackFunc(n int) stackValidationFunc { - return makeStackFunc(n, n+1) +func minDupStack(n int) int { + return minStack(n, n+1) +} +func maxDupStack(n int) int { + return maxStack(n, n+1) } -func makeSwapStackFunc(n int) stackValidationFunc { - return makeStackFunc(n, n) +func maxStack(pop, push int) int { + return int(params.StackLimit) + pop - push +} +func minStack(pops, push int) int { + return pops } diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/main_test.go b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/main_test.go index 0230f1b1..c0c85457 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/main_test.go +++ b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/mul_arm64.h b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/mul_arm64.h index 75d52217..d405eb8f 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/mul_arm64.h +++ b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/cloudflare/mul_arm64.h @@ -12,7 +12,7 @@ UMULH R1, R8, c4 \ ADCS ZR, c4 \ \ - MUL R2, R5, R25 \ + MUL R2, R5, R1 \ UMULH R2, R5, R26 \ MUL R2, R6, R0 \ ADDS R0, R26 \ @@ -24,13 +24,13 @@ ADCS R0, R29 \ UMULH R2, R8, c5 \ ADCS ZR, c5 \ - ADDS R25, c1 \ + ADDS R1, c1 \ ADCS R26, c2 \ ADCS R27, c3 \ ADCS R29, c4 \ ADCS ZR, c5 \ \ - MUL R3, R5, R25 \ + MUL R3, R5, R1 \ UMULH R3, R5, R26 \ MUL R3, R6, R0 \ ADDS R0, R26 \ @@ -42,13 +42,13 @@ ADCS R0, R29 \ UMULH R3, R8, c6 \ ADCS ZR, c6 \ - ADDS R25, c2 \ + ADDS R1, c2 \ ADCS R26, c3 \ ADCS R27, c4 \ ADCS R29, c5 \ ADCS ZR, c6 \ \ - MUL R4, R5, R25 \ + MUL R4, R5, R1 \ UMULH R4, R5, R26 \ MUL R4, R6, R0 \ ADDS R0, R26 \ @@ -60,7 +60,7 @@ ADCS R0, R29 \ UMULH R4, R8, c7 \ ADCS ZR, c7 \ - ADDS R25, c3 \ + ADDS R1, c3 \ ADCS R26, c4 \ ADCS R27, c5 \ ADCS R29, c6 \ @@ -69,15 +69,15 @@ #define gfpReduce() \ \ // m = (T * N') mod R, store m in R1:R2:R3:R4 MOVD ·np+0(SB), R17 \ - MOVD ·np+8(SB), R18 \ + MOVD ·np+8(SB), R25 \ MOVD ·np+16(SB), R19 \ MOVD ·np+24(SB), R20 \ \ MUL R9, R17, R1 \ UMULH R9, R17, R2 \ - MUL R9, R18, R0 \ + MUL R9, R25, R0 \ ADDS R0, R2 \ - UMULH R9, R18, R3 \ + UMULH R9, R25, R3 \ MUL R9, R19, R0 \ ADCS R0, R3 \ UMULH R9, R19, R4 \ @@ -86,9 +86,9 @@ \ MUL R10, R17, R21 \ UMULH R10, R17, R22 \ - MUL R10, R18, R0 \ + MUL R10, R25, R0 \ ADDS R0, R22 \ - UMULH R10, R18, R23 \ + UMULH R10, R25, R23 \ MUL R10, R19, R0 \ ADCS R0, R23 \ ADDS R21, R2 \ @@ -97,7 +97,7 @@ \ MUL R11, R17, R21 \ UMULH R11, R17, R22 \ - MUL R11, R18, R0 \ + MUL R11, R25, R0 \ ADDS R0, R22 \ ADDS R21, R3 \ ADCS R22, R4 \ @@ -107,19 +107,19 @@ \ \ // m * N loadModulus(R5,R6,R7,R8) \ - mul(R17,R18,R19,R20,R21,R22,R23,R24) \ + mul(R17,R25,R19,R20,R21,R22,R23,R24) \ \ \ // Add the 512-bit intermediate to m*N - MOVD ZR, R25 \ + MOVD ZR, R0 \ ADDS R9, R17 \ - ADCS R10, R18 \ + ADCS R10, R25 \ ADCS R11, R19 \ ADCS R12, R20 \ ADCS R13, R21 \ ADCS R14, R22 \ ADCS R15, R23 \ ADCS R16, R24 \ - ADCS ZR, R25 \ + ADCS ZR, R0 \ \ \ // Our output is R21:R22:R23:R24. Reduce mod p if necessary. SUBS R5, R21, R10 \ diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/google/main_test.go b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/google/main_test.go index 0230f1b1..c0c85457 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/bn256/google/main_test.go +++ b/vendor/github.com/ethereum/go-ethereum/crypto/bn256/google/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/ecies/ecies_test.go b/vendor/github.com/ethereum/go-ethereum/crypto/ecies/ecies_test.go index f33f204d..6bd57145 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/ecies/ecies_test.go +++ b/vendor/github.com/ethereum/go-ethereum/crypto/ecies/ecies_test.go @@ -93,19 +93,6 @@ func cmpPublic(pub1, pub2 PublicKey) bool { return bytes.Equal(pub1Out, pub2Out) } -// cmpPrivate returns true if the two private keys are the same. -func cmpPrivate(prv1, prv2 *PrivateKey) bool { - if prv1 == nil || prv1.D == nil { - return false - } else if prv2 == nil || prv2.D == nil { - return false - } else if prv1.D.Cmp(prv2.D) != 0 { - return false - } else { - return cmpPublic(prv1.PublicKey, prv2.PublicKey) - } -} - // Validate the ECDH component. func TestSharedKey(t *testing.T) { prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/signature_cgo.go b/vendor/github.com/ethereum/go-ethereum/crypto/signature_cgo.go index 340bfc22..aadf028d 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/signature_cgo.go +++ b/vendor/github.com/ethereum/go-ethereum/crypto/signature_cgo.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !nacl,!js,!nocgo +// +build !nacl,!js,cgo package crypto diff --git a/vendor/github.com/ethereum/go-ethereum/crypto/signature_nocgo.go b/vendor/github.com/ethereum/go-ethereum/crypto/signature_nocgo.go index e8fa18ed..90d072cd 100644 --- a/vendor/github.com/ethereum/go-ethereum/crypto/signature_nocgo.go +++ b/vendor/github.com/ethereum/go-ethereum/crypto/signature_nocgo.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build nacl js nocgo +// +build nacl js !cgo package crypto diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets.go b/vendor/github.com/ethereum/go-ethereum/dashboard/assets.go index f3e7cf98..1ce18b28 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets.go @@ -2,6 +2,7 @@ // sources: // assets/index.html // assets/bundle.js +// assets/bundle.js.map package dashboard @@ -71,7 +72,7 @@ var _indexHtml = []byte(`

- + `) @@ -87,29936 +88,3379 @@ func indexHtml() (*asset, error) { } info := bindataFileInfo{name: "index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x22, 0xc8, 0x3d, 0x86, 0x2f, 0xb4, 0x6a, 0x1f, 0xda, 0xd, 0x54, 0x14, 0xa3, 0x6e, 0x80, 0x56, 0x28, 0xea, 0x44, 0xcf, 0xf5, 0xf2, 0xe, 0xad, 0x19, 0xf5, 0x93, 0xd6, 0x8d, 0x6d, 0x2f, 0x35}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0xe4, 0x19, 0xb4, 0xf4, 0x89, 0xd3, 0x51, 0xa8, 0xde, 0x87, 0x57, 0x96, 0x17, 0x3f, 0x43, 0xa6, 0xa0, 0x7a, 0x6f, 0xba, 0xeb, 0x27, 0xcf, 0x41, 0x28, 0x6e, 0x85, 0x91, 0xa6, 0x48, 0xcf}} return a, nil } //nolint:misspell -var _bundleJs = []byte((((((((((`!function(modules) { - function __webpack_require__(moduleId) { - if (installedModules[moduleId]) return installedModules[moduleId].exports; - var module = installedModules[moduleId] = { - i: moduleId, +var _bundleJs = []byte((((`!function(e) { + var t = {}; + function n(r) { + if (t[r]) return t[r].exports; + var o = t[r] = { + i: r, l: !1, exports: {} }; - return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), - module.l = !0, module.exports; + return e[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports; } - var installedModules = {}; - __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) { - __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, { - configurable: !1, + n.m = e, n.c = t, n.d = function(e, t, r) { + n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, - get: getter + get: r }); - }, __webpack_require__.n = function(module) { - var getter = module && module.__esModule ? function() { - return module.default; + }, n.r = function(e) { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { + value: "Module" + }), Object.defineProperty(e, "__esModule", { + value: !0 + }); + }, n.t = function(e, t) { + if (1 & t && (e = n(e)), 8 & t) return e; + if (4 & t && "object" == typeof e && e && e.__esModule) return e; + var r = Object.create(null); + if (n.r(r), Object.defineProperty(r, "default", { + enumerable: !0, + value: e + }), 2 & t && "string" != typeof e) for (var o in e) n.d(r, o, function(t) { + return e[t]; + }.bind(null, o)); + return r; + }, n.n = function(e) { + var t = e && e.__esModule ? function() { + return e.default; } : function() { - return module; + return e; }; - return __webpack_require__.d(getter, "a", getter), getter; - }, __webpack_require__.o = function(object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 375); -}([ function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - "production" === process.env.NODE_ENV ? module.exports = __webpack_require__(376) : module.exports = __webpack_require__(377); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - (function(process) { - if ("production" !== process.env.NODE_ENV) { - var REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, isValidElement = function(object) { - return "object" == typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; - }; - module.exports = __webpack_require__(418)(isValidElement, !0); - } else module.exports = __webpack_require__(419)(); - }).call(exports, __webpack_require__(2)); -}, function(module, exports) { - function defaultSetTimout() { - throw new Error("setTimeout has not been defined"); - } - function defaultClearTimeout() { - throw new Error("clearTimeout has not been defined"); - } - function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) return setTimeout(fun, 0); - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) return cachedSetTimeout = setTimeout, - setTimeout(fun, 0); - try { - return cachedSetTimeout(fun, 0); - } catch (e) { - try { - return cachedSetTimeout.call(null, fun, 0); - } catch (e) { - return cachedSetTimeout.call(this, fun, 0); - } - } - } - function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) return clearTimeout(marker); - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) return cachedClearTimeout = clearTimeout, - clearTimeout(marker); - try { - return cachedClearTimeout(marker); - } catch (e) { - try { - return cachedClearTimeout.call(null, marker); - } catch (e) { - return cachedClearTimeout.call(this, marker); - } - } - } - function cleanUpNextTick() { - draining && currentQueue && (draining = !1, currentQueue.length ? queue = currentQueue.concat(queue) : queueIndex = -1, - queue.length && drainQueue()); - } - function drainQueue() { - if (!draining) { - var timeout = runTimeout(cleanUpNextTick); - draining = !0; - for (var len = queue.length; len; ) { - for (currentQueue = queue, queue = []; ++queueIndex < len; ) currentQueue && currentQueue[queueIndex].run(); - queueIndex = -1, len = queue.length; - } - currentQueue = null, draining = !1, runClearTimeout(timeout); - } - } - function Item(fun, array) { - this.fun = fun, this.array = array; - } - function noop() {} - var cachedSetTimeout, cachedClearTimeout, process = module.exports = {}; - !function() { - try { - cachedSetTimeout = "function" == typeof setTimeout ? setTimeout : defaultSetTimout; - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - cachedClearTimeout = "function" == typeof clearTimeout ? clearTimeout : defaultClearTimeout; - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } - }(); - var currentQueue, queue = [], draining = !1, queueIndex = -1; - process.nextTick = function(fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; - queue.push(new Item(fun, args)), 1 !== queue.length || draining || runTimeout(drainQueue); - }, Item.prototype.run = function() { - this.fun.apply(null, this.array); - }, process.title = "browser", process.browser = !0, process.env = {}, process.argv = [], - process.version = "", process.versions = {}, process.on = noop, process.addListener = noop, - process.once = noop, process.off = noop, process.removeListener = noop, process.removeAllListeners = noop, - process.emit = noop, process.prependListener = noop, process.prependOnceListener = noop, - process.listeners = function(name) { - return []; - }, process.binding = function(name) { - throw new Error("process.binding is not supported"); - }, process.cwd = function() { - return "/"; - }, process.chdir = function(dir) { - throw new Error("process.chdir is not supported"); - }, process.umask = function() { - return 0; - }; -}, function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; - !function() { + return n.d(t, "a", t), t; + }, n.o = function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t); + }, n.p = "", n(n.s = "./index.jsx"); +}({ + "./common.jsx": function(e, t, n) { "use strict"; - function classNames() { - for (var classes = [], i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (arg) { - var argType = typeof arg; - if ("string" === argType || "number" === argType) classes.push(arg); else if (Array.isArray(arg)) classes.push(classNames.apply(null, arg)); else if ("object" === argType) for (var key in arg) hasOwn.call(arg, key) && arg[key] && classes.push(key); + (function(e) { + n.d(t, "b", function() { + return d; + }), n.d(t, "a", function() { + return f; + }), n.d(t, "c", function() { + return p; + }), n.d(t, "g", function() { + return h; + }), n.d(t, "f", function() { + return m; + }), n.d(t, "e", function() { + return y; + }), n.d(t, "d", function() { + return b; + }); + var r, o = n("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"), a = n("./node_modules/@fortawesome/free-regular-svg-icons/index.es.js"); + function i(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter(function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable; + }))), r.forEach(function(t) { + s(e, t, n[t]); + }); + } + return e; + } + function s(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + (r = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).enterModule) && r(e); + var l, u, c = [ { + id: "home", + menu: { + title: "Home", + icon: o.d + } + }, { + id: "chain", + menu: { + title: "Chain", + icon: o.e + } + }, { + id: "txpool", + menu: { + title: "TxPool", + icon: a.b + } + }, { + id: "network", + menu: { + title: "Network", + icon: o.c + } + }, { + id: "system", + menu: { + title: "System", + icon: o.g + } + }, { + id: "logs", + menu: { + title: "Logs", + icon: o.f + } + } ], d = new Map(c.map(function(e) { + var t = e.id; + return [ t, i({ + id: t + }, e.menu) ]; + })), f = 200, p = .2, h = { + light: { + color: "rgba(255, 255, 255, 0.54)" + } + }, _ = [ "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi" ], m = function(e) { + for (var t = 0; e > 1024 && t < 8; t++) e /= 1024; + return e.toFixed(2).toString().concat(" ", _[t], "B"); + }, y = [ "#00FF00", "#FFFF00", "#FF7F00", "#FF0000" ], b = [ 0, 2048, 102400, 2097152 ]; + (l = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).default) && (l.register(c, "menuSkeletons", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(d, "MENU", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(f, "DURATION", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(p, "chartStrokeWidth", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(h, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(_, "unit", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(m, "simplifyBytes", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(y, "hues", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(b, "hueScale", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx")), + (u = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).leaveModule) && u(e); + }).call(this, n("./node_modules/webpack/buildin/harmony-module.js")(e)); + }, + "./components/Body.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _SideBar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./components/SideBar.jsx"), _Main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./components/Main.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } } - return classes.join(" "); - } - var hasOwn = {}.hasOwnProperty; - void 0 !== module && module.exports ? module.exports = classNames : (__WEBPACK_AMD_DEFINE_ARRAY__ = [], - void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return classNames; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - __webpack_require__.d(__webpack_exports__, "c", function() { - return PRESENTATION_ATTRIBUTES; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return EVENT_ATTRIBUTES; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return SCALE_TYPES; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return LEGEND_TYPES; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return getDisplayName; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return findAllByType; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return findChildByType; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return getPresentationAttributes; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return filterEventAttributes; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return filterEventsOfChild; - }), __webpack_require__.d(__webpack_exports__, "q", function() { - return validateWidthHeight; - }), __webpack_require__.d(__webpack_exports__, "n", function() { - return isSsr; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return filterSvgElements; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return isChildrenEqual; - }), __webpack_require__.d(__webpack_exports__, "p", function() { - return renderByOrder; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return getReactEventByType; - }), __webpack_require__.d(__webpack_exports__, "o", function() { - return parseChildIndex; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isString__), __WEBPACK_IMPORTED_MODULE_2_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_8__PureRender__ = __webpack_require__(5), PRESENTATION_ATTRIBUTES = { - alignmentBaseline: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - angle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - baselineShift: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clip: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clipPath: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clipRule: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - color: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorInterpolation: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorInterpolationFilters: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorProfile: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - cursor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - direction: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "ltr", "rtl", "inherit" ]), - display: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - dominantBaseline: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - enableBackground: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fill: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fillOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - fillRule: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "nonzero", "evenodd", "inherit" ]), - filter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - floodColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - floodOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - font: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fontFamily: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fontSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - fontSizeAdjust: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - fontStretch: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", "inherit" ]), - fontStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "italic", "oblique", "inherit" ]), - fontVariant: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "small-caps", "inherit" ]), - fontWeight: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "bold", "bolder", "lighter", 100, 200, 300, 400, 500, 600, 700, 800, 900, "inherit" ]), - glyphOrientationHorizontal: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - glyphOrientationVertical: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - imageRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "optimizeQuality", "inherit" ]), - kerning: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - letterSpacing: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - lightingColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerEnd: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerMid: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerStart: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - mask: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - opacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - overflow: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visible", "hidden", "scroll", "auto", "inherit" ]), - pointerEvents: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visiblePainted", "visibleFill", "visibleStroke", "visible", "painted", "fill", "stroke", "all", "none", "inherit" ]), - shapeRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "crispEdges", "geometricPrecision", "inherit" ]), - stopColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - stopOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - stroke: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeDasharray: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - strokeDashoffset: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeLinecap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "butt", "round", "square", "inherit" ]), - strokeLinejoin: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "miter", "round", "bevel", "inherit" ]), - strokeMiterlimit: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeWidth: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - textAnchor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "start", "middle", "end", "inherit" ]), - textDecoration: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "none", "underline", "overline", "line-through", "blink", "inherit" ]), - textRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision", "inherit" ]), - unicodeBidi: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "embed", "bidi-override", "inherit" ]), - visibility: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visible", "hidden", "collapse", "inherit" ]), - wordSpacing: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - writingMode: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "lr-tb", "rl-tb", "tb-rl", "lr", "rl", "tb", "inherit" ]), - transform: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, - width: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - dx: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - dy: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - x: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - r: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - radius: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.array ]) - }, EVENT_ATTRIBUTES = { - onClick: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseDown: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseUp: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseOver: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseOut: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseEnter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseLeave: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchEnd: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchStart: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchCancel: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func - }, REACT_BROWSER_EVENT_MAP = { - click: "onClick", - mousedown: "onMouseDown", - mouseup: "onMouseUp", - mouseover: "onMouseOver", - mousemove: "onMouseMove", - mouseout: "onMouseOut", - mouseenter: "onMouseEnter", - mouseleave: "onMouseLeave", - touchcancel: "onTouchCancel", - touchend: "onTouchEnd", - touchmove: "onTouchMove", - touchstart: "onTouchStart" - }, SCALE_TYPES = [ "auto", "linear", "pow", "sqrt", "log", "identity", "time", "band", "point", "ordinal", "quantile", "quantize", "utcTime", "sequential", "threshold" ], LEGEND_TYPES = [ "plainline", "line", "square", "rect", "circle", "cross", "diamond", "star", "triangle", "wye", "none" ], getDisplayName = function(Comp) { - return Comp ? "string" == typeof Comp ? Comp : Comp.displayName || Comp.name || "Component" : ""; - }, findAllByType = function(children, type) { - var result = [], types = []; - return types = __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(type) ? type.map(function(t) { - return getDisplayName(t); - }) : [ getDisplayName(type) ], __WEBPACK_IMPORTED_MODULE_5_react___default.a.Children.forEach(children, function(child) { - var childType = child && child.type && (child.type.displayName || child.type.name); - -1 !== types.indexOf(childType) && result.push(child); - }), result; - }, findChildByType = function(children, type) { - var result = findAllByType(children, type); - return result && result[0]; - }, getPresentationAttributes = function(el) { - if (!el || __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(el)) return null; - var props = __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(el) ? el.props : el; - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && PRESENTATION_ATTRIBUTES[i] && (out || (out = {}), - out[i] = props[i]); - return out; - }, getEventHandlerOfElement = function(originalHandler, props) { - return function(e) { - return originalHandler(props, e), null; - }; - }, filterEventAttributes = function(el, newHandler) { - var wrapCallback = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; - if (!el || __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(el)) return null; - var props = __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(el) ? el.props : el; - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && (out || (out = {}), - out[i] = newHandler || (wrapCallback ? getEventHandlerOfElement(props[i], props) : props[i])); - return out; - }, getEventHandlerOfChild = function(originalHandler, data, index) { - return function(e) { - return originalHandler(data, index, e), null; - }; - }, filterEventsOfChild = function(props, data, index) { - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(props[i]) && (out || (out = {}), - out[i] = getEventHandlerOfChild(props[i], data, index)); - return out; - }, validateWidthHeight = function(el) { - if (!el || !el.props) return !1; - var _el$props = el.props, width = _el$props.width, height = _el$props.height; - return !(!Object(__WEBPACK_IMPORTED_MODULE_7__DataUtils__.h)(width) || width <= 0 || !Object(__WEBPACK_IMPORTED_MODULE_7__DataUtils__.h)(height) || height <= 0); - }, isSsr = function() { - return !("undefined" != typeof window && window.document && window.document.createElement && window.setTimeout); - }, SVG_TAGS = [ "a", "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor", "animateMotion", "animateTransform", "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "ellipse", "feBlend", "feColormatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face", "font-face-format", "font-face-name", "font-face-url", "foreignObject", "g", "glyph", "glyphRef", "hkern", "image", "line", "lineGradient", "marker", "mask", "metadata", "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "script", "set", "stop", "style", "svg", "switch", "symbol", "text", "textPath", "title", "tref", "tspan", "use", "view", "vkern" ], isSvgElement = function(child) { - return child && child.type && __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default()(child.type) && SVG_TAGS.indexOf(child.type) >= 0; - }, filterSvgElements = function(children) { - var svgElements = []; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.Children.forEach(children, function(entry) { - entry && entry.type && __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default()(entry.type) && SVG_TAGS.indexOf(entry.type) >= 0 && svgElements.push(entry); - }), svgElements; - }, isSingleChildEqual = function(nextChild, prevChild) { - if (__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(nextChild) && __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(prevChild)) return !0; - if (!__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(nextChild) && !__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(prevChild)) { - var _ref = nextChild.props || {}, nextChildren = _ref.children, nextProps = _objectWithoutProperties(_ref, [ "children" ]), _ref2 = prevChild.props || {}, prevChildren = _ref2.children, prevProps = _objectWithoutProperties(_ref2, [ "children" ]); - return nextChildren && prevChildren ? Object(__WEBPACK_IMPORTED_MODULE_8__PureRender__.b)(nextProps, prevProps) && isChildrenEqual(nextChildren, prevChildren) : !nextChildren && !prevChildren && Object(__WEBPACK_IMPORTED_MODULE_8__PureRender__.b)(nextProps, prevProps); - } - return !1; - }, isChildrenEqual = function isChildrenEqual(nextChildren, prevChildren) { - if (nextChildren === prevChildren) return !0; - if (__WEBPACK_IMPORTED_MODULE_5_react__.Children.count(nextChildren) !== __WEBPACK_IMPORTED_MODULE_5_react__.Children.count(prevChildren)) return !1; - var count = __WEBPACK_IMPORTED_MODULE_5_react__.Children.count(nextChildren); - if (0 === count) return !0; - if (1 === count) return isSingleChildEqual(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(nextChildren) ? nextChildren[0] : nextChildren, __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(prevChildren) ? prevChildren[0] : prevChildren); - for (var i = 0; i < count; i++) { - var nextChild = nextChildren[i], prevChild = prevChildren[i]; - if (__WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(nextChild) || __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(prevChild)) { - if (!isChildrenEqual(nextChild, prevChild)) return !1; - } else if (!isSingleChildEqual(nextChild, prevChild)) return !1; - } - return !0; - }, renderByOrder = function(children, renderMap) { - var elements = [], record = {}; - return __WEBPACK_IMPORTED_MODULE_5_react__.Children.forEach(children, function(child, index) { - if (child && isSvgElement(child)) elements.push(child); else if (child && renderMap[getDisplayName(child.type)]) { - var displayName = getDisplayName(child.type), _renderMap$displayNam = renderMap[displayName], handler = _renderMap$displayNam.handler, once = _renderMap$displayNam.once; - if (once && !record[displayName] || !once) { - var results = handler(child, displayName, index); - __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(results) ? elements = [ elements ].concat(_toConsumableArray(results)) : elements.push(results), - record[displayName] = !0; + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + body: { + display: "flex", + width: "100%", + height: "92%" + } + }, Body = function(_Component) { + function Body() { + return _classCallCheck(this, Body), _possibleConstructorReturn(this, _getPrototypeOf(Body).apply(this, arguments)); + } + return _inherits(Body, _Component), _createClass(Body, [ { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.body + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_SideBar__WEBPACK_IMPORTED_MODULE_1__.a, { + opened: this.props.opened, + changeContent: this.props.changeContent + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Main__WEBPACK_IMPORTED_MODULE_2__.a, { + active: this.props.active, + content: this.props.content, + shouldUpdate: this.props.shouldUpdate, + send: this.props.send + })); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Body; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = Body, reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx"), + reactHotLoader.register(Body, "Body", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/ChartRow.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/Grid/index.js"), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1__), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } } - }), elements; - }, getReactEventByType = function(e) { - var type = e && e.type; - return type && REACT_BROWSER_EVENT_MAP[type] ? REACT_BROWSER_EVENT_MAP[type] : null; - }, parseChildIndex = function(child, children) { - var result = -1; - return __WEBPACK_IMPORTED_MODULE_5_react__.Children.forEach(children, function(entry, index) { - entry === child && (result = index); - }), result; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function shallowEqual(a, b) { - for (var key in a) if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) return !1; - for (var _key in b) if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) return !1; - return !0; - } - function shouldComponentUpdate(props, state) { - return !shallowEqual(props, this.props) || !shallowEqual(state, this.state); - } - function pureRenderDecorator(component) { - component.prototype.shouldComponentUpdate = shouldComponentUpdate; - } - __webpack_exports__.b = shallowEqual, __webpack_exports__.a = pureRenderDecorator; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _assign = __webpack_require__(222), _assign2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_assign); - exports.default = _assign2.default || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0, exports.default = function(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - }; -}, function(module, exports, __webpack_require__) { - function isFunction(value) { - if (!isObject(value)) return !1; - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - var baseGetTag = __webpack_require__(41), isObject = __webpack_require__(32), asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; - module.exports = isFunction; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "j", function() { - return mathSign; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return isPercent; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return isNumber; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return isNumOrStr; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return uniqueId; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return getPercentValue; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return getAnyElementOfObject; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return hasDuplicate; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return interpolateNumber; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return findEntryInArray; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return getLinearRegression; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(174), __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__), __WEBPACK_IMPORTED_MODULE_1_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_1_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__ = __webpack_require__(120), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__), __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber__ = __webpack_require__(272), __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isNumber__), __WEBPACK_IMPORTED_MODULE_4_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isString__), mathSign = function(value) { - return 0 === value ? 0 : value > 0 ? 1 : -1; - }, isPercent = function(value) { - return __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(value) && value.indexOf("%") === value.length - 1; - }, isNumber = function(value) { - return __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber___default()(value) && !__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(value); - }, isNumOrStr = function(value) { - return isNumber(value) || __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(value); - }, idCounter = 0, uniqueId = function(prefix) { - var id = ++idCounter; - return "" + (prefix || "") + id; - }, getPercentValue = function(percent, totalValue) { - var defaultValue = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, validate = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; - if (!isNumber(percent) && !__WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(percent)) return defaultValue; - var value = void 0; - if (isPercent(percent)) { - var index = percent.indexOf("%"); - value = totalValue * parseFloat(percent.slice(0, index)) / 100; - } else value = +percent; - return __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(value) && (value = defaultValue), - validate && value > totalValue && (value = totalValue), value; - }, getAnyElementOfObject = function(obj) { - if (!obj) return null; - var keys = Object.keys(obj); - return keys && keys.length ? obj[keys[0]] : null; - }, hasDuplicate = function(ary) { - if (!__WEBPACK_IMPORTED_MODULE_1_lodash_isArray___default()(ary)) return !1; - for (var len = ary.length, cache = {}, i = 0; i < len; i++) { - if (cache[ary[i]]) return !0; - cache[ary[i]] = !0; - } - return !1; - }, interpolateNumber = function(numberA, numberB) { - return isNumber(numberA) && isNumber(numberB) ? function(t) { - return numberA + t * (numberB - numberA); - } : function() { - return numberB; - }; - }, findEntryInArray = function(ary, specifiedKey, specifiedValue) { - return ary && ary.length ? ary.find(function(entry) { - return entry && __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(entry, specifiedKey) === specifiedValue; - }) : null; - }, getLinearRegression = function(data) { - if (!data || !data.length) return null; - for (var len = data.length, xsum = 0, ysum = 0, xysum = 0, xxsum = 0, xmin = 1 / 0, xmax = -1 / 0, i = 0; i < len; i++) xsum += data[i].cx, - ysum += data[i].cy, xysum += data[i].cx * data[i].cy, xxsum += data[i].cx * data[i].cx, - xmin = Math.min(xmin, data[i].cx), xmax = Math.max(xmax, data[i].cx); - var a = len * xxsum != xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0; - return { - xmin: xmin, - xmax: xmax, - a: a, - b: (ysum - a * xsum) / len - }; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function getDefaultTheme() { - return defaultTheme || (defaultTheme = (0, _createMuiTheme2.default)()); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }), exports.sheetsManager = void 0; - var _keys = __webpack_require__(55), _keys2 = _interopRequireDefault(_keys), _extends2 = __webpack_require__(6), _extends3 = _interopRequireDefault(_extends2), _getPrototypeOf = __webpack_require__(26), _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf), _classCallCheck2 = __webpack_require__(27), _classCallCheck3 = _interopRequireDefault(_classCallCheck2), _createClass2 = __webpack_require__(28), _createClass3 = _interopRequireDefault(_createClass2), _possibleConstructorReturn2 = __webpack_require__(29), _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2), _inherits2 = __webpack_require__(30), _inherits3 = _interopRequireDefault(_inherits2), _objectWithoutProperties2 = __webpack_require__(7), _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2), _map = __webpack_require__(440), _map2 = _interopRequireDefault(_map), _minSafeInteger = __webpack_require__(456), _minSafeInteger2 = _interopRequireDefault(_minSafeInteger), _react = __webpack_require__(0), _react2 = _interopRequireDefault(_react), _propTypes = __webpack_require__(1), _propTypes2 = _interopRequireDefault(_propTypes), _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning), _hoistNonReactStatics = __webpack_require__(162), _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics), _getDisplayName = __webpack_require__(244), _getDisplayName2 = _interopRequireDefault(_getDisplayName), _wrapDisplayName = __webpack_require__(79), _wrapDisplayName2 = _interopRequireDefault(_wrapDisplayName), _contextTypes = __webpack_require__(459), _contextTypes2 = _interopRequireDefault(_contextTypes), _jss = __webpack_require__(246), _ns = __webpack_require__(245), ns = function(obj) { - if (obj && obj.__esModule) return obj; - var newObj = {}; - if (null != obj) for (var key in obj) Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]); - return newObj.default = obj, newObj; - }(_ns), _jssPreset = __webpack_require__(481), _jssPreset2 = _interopRequireDefault(_jssPreset), _createMuiTheme = __webpack_require__(161), _createMuiTheme2 = _interopRequireDefault(_createMuiTheme), _themeListener = __webpack_require__(160), _themeListener2 = _interopRequireDefault(_themeListener), _createGenerateClassName = __webpack_require__(494), _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName), _getStylesCreator = __webpack_require__(495), _getStylesCreator2 = _interopRequireDefault(_getStylesCreator), jss = (0, - _jss.create)((0, _jssPreset2.default)()), generateClassName = (0, _createGenerateClassName2.default)(), indexCounter = _minSafeInteger2.default, sheetsManager = exports.sheetsManager = new _map2.default(), noopTheme = {}, defaultTheme = void 0, withStyles = function(stylesOrCreator) { - var options = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; - return function(Component) { - var _options$withTheme = options.withTheme, withTheme = void 0 !== _options$withTheme && _options$withTheme, _options$flip = options.flip, flip = void 0 === _options$flip ? null : _options$flip, name = options.name, styleSheetOptions = (0, - _objectWithoutProperties3.default)(options, [ "withTheme", "flip", "name" ]), stylesCreator = (0, - _getStylesCreator2.default)(stylesOrCreator), listenToTheme = stylesCreator.themingEnabled || withTheme || "string" == typeof name; - indexCounter += 1, stylesCreator.options.index = indexCounter, "production" !== process.env.NODE_ENV && (0, - _warning2.default)(indexCounter < 0, [ "Material-UI: you might have a memory leak.", "The indexCounter is not supposed to grow that much." ].join(" ")); - var WithStyles = function(_React$Component) { - function WithStyles(props, context) { - (0, _classCallCheck3.default)(this, WithStyles); - var _this = (0, _possibleConstructorReturn3.default)(this, (WithStyles.__proto__ || (0, - _getPrototypeOf2.default)(WithStyles)).call(this, props, context)); - _this.state = {}, _this.disableStylesGeneration = !1, _this.jss = null, _this.sheetOptions = null, - _this.sheetsManager = sheetsManager, _this.stylesCreatorSaved = null, _this.theme = null, - _this.unsubscribeId = null, _this.jss = _this.context[ns.jss] || jss; - var muiThemeProviderOptions = _this.context.muiThemeProviderOptions; - return muiThemeProviderOptions && (muiThemeProviderOptions.sheetsManager && (_this.sheetsManager = muiThemeProviderOptions.sheetsManager), - _this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration), - _this.stylesCreatorSaved = stylesCreator, _this.sheetOptions = (0, _extends3.default)({ - generateClassName: generateClassName - }, _this.context[ns.sheetOptions]), _this.theme = listenToTheme ? _themeListener2.default.initial(context) || getDefaultTheme() : noopTheme, - _this; - } - return (0, _inherits3.default)(WithStyles, _React$Component), (0, _createClass3.default)(WithStyles, [ { - key: "componentWillMount", - value: function() { - this.attach(this.theme); - } - }, { - key: "componentDidMount", - value: function() { - var _this2 = this; - listenToTheme && (this.unsubscribeId = _themeListener2.default.subscribe(this.context, function(theme) { - var oldTheme = _this2.theme; - _this2.theme = theme, _this2.attach(_this2.theme), _this2.setState({}, function() { - _this2.detach(oldTheme); - }); - })); - } - }, { - key: "componentWillReceiveProps", - value: function() { - this.stylesCreatorSaved !== stylesCreator && "production" !== process.env.NODE_ENV && (this.detach(this.theme), - this.stylesCreatorSaved = stylesCreator, this.attach(this.theme)); - } - }, { - key: "componentWillUnmount", - value: function() { - this.detach(this.theme), null !== this.unsubscribeId && _themeListener2.default.unsubscribe(this.context, this.unsubscribeId); - } - }, { - key: "attach", - value: function(theme) { - if (!this.disableStylesGeneration) { - var stylesCreatorSaved = this.stylesCreatorSaved, sheetManager = this.sheetsManager.get(stylesCreatorSaved); - sheetManager || (sheetManager = new _map2.default(), this.sheetsManager.set(stylesCreatorSaved, sheetManager)); - var sheetManagerTheme = sheetManager.get(theme); - if (sheetManagerTheme || (sheetManagerTheme = { - refs: 0, - sheet: null - }, sheetManager.set(theme, sheetManagerTheme)), 0 === sheetManagerTheme.refs) { - var styles = stylesCreatorSaved.create(theme, name), meta = name; - "production" === process.env.NODE_ENV || meta || (meta = (0, _getDisplayName2.default)(Component)); - var sheet = this.jss.createStyleSheet(styles, (0, _extends3.default)({ - meta: meta, - classNamePrefix: meta, - flip: "boolean" == typeof flip ? flip : "rtl" === theme.direction, - link: !1 - }, this.sheetOptions, stylesCreatorSaved.options, { - name: name - }, styleSheetOptions)); - sheetManagerTheme.sheet = sheet, sheet.attach(); - var sheetsRegistry = this.context[ns.sheetsRegistry]; - sheetsRegistry && sheetsRegistry.add(sheet); - } - sheetManagerTheme.refs += 1; - } - } - }, { - key: "detach", - value: function(theme) { - if (!this.disableStylesGeneration) { - var stylesCreatorSaved = this.stylesCreatorSaved, sheetManager = this.sheetsManager.get(stylesCreatorSaved), sheetManagerTheme = sheetManager.get(theme); - if (sheetManagerTheme.refs -= 1, 0 === sheetManagerTheme.refs) { - sheetManager.delete(theme), this.jss.removeStyleSheet(sheetManagerTheme.sheet); - var sheetsRegistry = this.context[ns.sheetsRegistry]; - sheetsRegistry && sheetsRegistry.remove(sheetManagerTheme.sheet); - } - } - } - }, { - key: "render", - value: function() { - var _this3 = this, _props = this.props, classesProp = _props.classes, innerRef = _props.innerRef, other = (0, - _objectWithoutProperties3.default)(_props, [ "classes", "innerRef" ]), classes = void 0, renderedClasses = {}; - if (!this.disableStylesGeneration) { - var sheetManager = this.sheetsManager.get(this.stylesCreatorSaved), sheetsManagerTheme = sheetManager.get(this.theme); - renderedClasses = sheetsManagerTheme.sheet.classes; - } - classes = classesProp ? (0, _extends3.default)({}, renderedClasses, (0, _keys2.default)(classesProp).reduce(function(accumulator, key) { - return "production" !== process.env.NODE_ENV && (0, _warning2.default)(renderedClasses[key] || _this3.disableStylesGeneration, [ "Material-UI: the key ` + ("`" + `" + key + "`)) + ("`" + (` provided to the classes property is not implemented in " + (0, - _getDisplayName2.default)(Component) + ".", "You can only override one of the following: " + (0, - _keys2.default)(renderedClasses).join(",") ].join("\n")), "production" !== process.env.NODE_ENV && (0, - _warning2.default)(!classesProp[key] || "string" == typeof classesProp[key], [ "Material-UI: the key ` + "`"))) + ((`" + key + "` + ("`" + ` provided to the classes property is not valid for " + (0, - _getDisplayName2.default)(Component) + ".", "You need to provide a non empty string instead of: " + classesProp[key] + "." ].join("\n")), - classesProp[key] && (accumulator[key] = renderedClasses[key] + " " + classesProp[key]), - accumulator; - }, {})) : renderedClasses; - var more = {}; - return withTheme && (more.theme = this.theme), _react2.default.createElement(Component, (0, - _extends3.default)({ - classes: classes - }, more, other, { - ref: innerRef - })); - } - } ]), WithStyles; - }(_react2.default.Component); - return WithStyles.propTypes = "production" !== process.env.NODE_ENV ? { - classes: _propTypes2.default.object, - innerRef: _propTypes2.default.func - } : {}, WithStyles.contextTypes = (0, _extends3.default)({ - muiThemeProviderOptions: _propTypes2.default.object - }, _contextTypes2.default, listenToTheme ? _themeListener2.default.contextTypes : {}), - "production" !== process.env.NODE_ENV && (WithStyles.displayName = (0, _wrapDisplayName2.default)(Component, "WithStyles")), - (0, _hoistNonReactStatics2.default)(WithStyles, Component), "production" !== process.env.NODE_ENV && (WithStyles.Naked = Component, - WithStyles.options = options), WithStyles; - }; - }; - exports.default = withStyles; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var warning = function() {}; - "production" !== process.env.NODE_ENV && (warning = function(condition, format, args) { - var len = arguments.length; - args = new Array(len > 2 ? len - 2 : 0); - for (var key = 2; key < len; key++) args[key - 2] = arguments[key]; - if (void 0 === format) throw new Error("`)) + ("`" + (`warning(condition, format, ...args)` + "`")))) + (((` requires a warning message argument"); - if (format.length < 10 || /^[s\W]*$/.test(format)) throw new Error("The warning format should be able to uniquely identify this warning. Please, use a more descriptive format than: " + format); - if (!condition) { - var argIndex = 0, message = "Warning: " + format.replace(/%s/g, function() { - return args[argIndex++]; - }); - "undefined" != typeof console && console.error(message); - try { - throw new Error(message); - } catch (x) {} + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; } - }), module.exports = warning; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _defineProperty = __webpack_require__(154), _defineProperty2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_defineProperty); - exports.default = function(obj, key, value) { - return key in obj ? (0, _defineProperty2.default)(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - }; -}, function(module, exports) { - var isArray = Array.isArray; - module.exports = isArray; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function Layer(props) { - var children = props.children, className = props.className, others = _objectWithoutProperties(props, [ "children", "className" ]), layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-layer", className); - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("g", _extends({ - className: layerClass - }, others), children); - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node ]) - }; - Layer.propTypes = propTypes, __webpack_exports__.a = Layer; -}, function(module, exports, __webpack_require__) { - var global = __webpack_require__(167), core = __webpack_require__(168), hide = __webpack_require__(266), redefine = __webpack_require__(581), ctx = __webpack_require__(584), $export = function(type, name, source) { - var key, own, out, exp, IS_FORCED = type & $export.F, IS_GLOBAL = type & $export.G, IS_STATIC = type & $export.S, IS_PROTO = type & $export.P, IS_BIND = type & $export.B, target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {}).prototype, exports = IS_GLOBAL ? core : core[name] || (core[name] = {}), expProto = exports.prototype || (exports.prototype = {}); - IS_GLOBAL && (source = name); - for (key in source) own = !IS_FORCED && target && void 0 !== target[key], out = (own ? target : source)[key], - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && "function" == typeof out ? ctx(Function.call, out) : out, - target && redefine(target, key, out, type & $export.U), exports[key] != out && hide(exports, key, exp), - IS_PROTO && expProto[key] != out && (expProto[key] = out); - }; - global.core = core, $export.F = 1, $export.G = 2, $export.S = 4, $export.P = 8, - $export.B = 16, $export.W = 32, $export.U = 64, $export.R = 128, module.exports = $export; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - __webpack_require__.d(__webpack_exports__, "w", function() { - return getValueByDataKey; - }), __webpack_require__.d(__webpack_exports__, "n", function() { - return getDomainOfDataByKey; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return calculateActiveTickIndex; - }), __webpack_require__.d(__webpack_exports__, "r", function() { - return getMainColorOfGraphicItem; - }), __webpack_require__.d(__webpack_exports__, "q", function() { - return getLegendProps; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return getBarSizeList; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return getBarPosition; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return appendOffsetOfLegend; - }), __webpack_require__.d(__webpack_exports__, "z", function() { - return parseErrorBarsOfAxis; - }), __webpack_require__.d(__webpack_exports__, "o", function() { - return getDomainOfItemsWithSameAxis; - }), __webpack_require__.d(__webpack_exports__, "x", function() { - return isCategorialAxis; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return getCoordinatesOfGrid; - }), __webpack_require__.d(__webpack_exports__, "u", function() { - return getTicksOfAxis; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return combineEventHandlers; - }), __webpack_require__.d(__webpack_exports__, "A", function() { - return parseScale; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return checkDomainOfScale; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return findPositionOfBar; - }), __webpack_require__.d(__webpack_exports__, "C", function() { - return truncateByDomain; - }), __webpack_require__.d(__webpack_exports__, "s", function() { - return getStackGroupsByAxisId; - }), __webpack_require__.d(__webpack_exports__, "v", function() { - return getTicksOfScale; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return getCateCoordinateOfLine; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return getCateCoordinateOfBar; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return getBaseValueOfBar; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return detectReferenceElementsDomain; - }), __webpack_require__.d(__webpack_exports__, "t", function() { - return getStackedDataOfItem; - }), __webpack_require__.d(__webpack_exports__, "p", function() { - return getDomainOfStackGroups; - }), __webpack_require__.d(__webpack_exports__, "B", function() { - return parseSpecifiedDomain; - }), __webpack_require__.d(__webpack_exports__, "D", function() { - return validateCoordinateInRange; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return getBandSizeOfAxis; - }), __webpack_require__.d(__webpack_exports__, "y", function() { - return parseDomainOfCategoryAxis; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual__ = __webpack_require__(45), __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isEqual__), __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy__ = __webpack_require__(321), __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_sortBy__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__ = __webpack_require__(120), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__), __WEBPACK_IMPORTED_MODULE_3_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_3_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isString__), __WEBPACK_IMPORTED_MODULE_4_lodash_max__ = __webpack_require__(841), __WEBPACK_IMPORTED_MODULE_4_lodash_max___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_max__), __WEBPACK_IMPORTED_MODULE_5_lodash_min__ = __webpack_require__(328), __WEBPACK_IMPORTED_MODULE_5_lodash_min___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_lodash_min__), __WEBPACK_IMPORTED_MODULE_6_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap__ = __webpack_require__(842), __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_lodash_flatMap__), __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_9_lodash_get__ = __webpack_require__(174), __WEBPACK_IMPORTED_MODULE_9_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_lodash_get__), __WEBPACK_IMPORTED_MODULE_10_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_11_recharts_scale__ = __webpack_require__(844), __WEBPACK_IMPORTED_MODULE_12_d3_scale__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__), - __webpack_require__(331)), __WEBPACK_IMPORTED_MODULE_13_d3_shape__ = __webpack_require__(182), __WEBPACK_IMPORTED_MODULE_14__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_15__cartesian_ReferenceDot__ = __webpack_require__(364), __WEBPACK_IMPORTED_MODULE_16__cartesian_ReferenceLine__ = __webpack_require__(365), __WEBPACK_IMPORTED_MODULE_17__cartesian_ReferenceArea__ = __webpack_require__(366), __WEBPACK_IMPORTED_MODULE_18__cartesian_ErrorBar__ = __webpack_require__(95), __WEBPACK_IMPORTED_MODULE_19__component_Legend__ = __webpack_require__(180), __WEBPACK_IMPORTED_MODULE_20__ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, getValueByDataKey = function(obj, dataKey, defaultValue) { - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(obj) || __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(dataKey) ? defaultValue : Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(dataKey) ? __WEBPACK_IMPORTED_MODULE_9_lodash_get___default()(obj, dataKey, defaultValue) : __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(dataKey) ? dataKey(obj) : defaultValue; - }, getDomainOfDataByKey = function(data, key, type, filterNil) { - var flattenData = __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap___default()(data, function(entry) { - return getValueByDataKey(entry, key); - }); - if ("number" === type) { - var domain = flattenData.filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h); - return [ Math.min.apply(null, domain), Math.max.apply(null, domain) ]; - } - return (filterNil ? flattenData.filter(function(entry) { - return !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry); - }) : flattenData).map(function(entry) { - return Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(entry) ? entry : ""; - }); - }, calculateActiveTickIndex = function(coordinate, ticks, unsortedTicks, axis) { - var index = -1, len = ticks.length; - if (len > 1) { - if (axis && "angleAxis" === axis.axisType && Math.abs(Math.abs(axis.range[1] - axis.range[0]) - 360) <= 1e-6) for (var range = axis.range, i = 0; i < len; i++) { - var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate, cur = unsortedTicks[i].coordinate, after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate, sameDirectionCoord = void 0; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(cur - before) !== Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(after - cur)) { - var diffInterval = []; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(after - cur) === Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(range[1] - range[0])) { - sameDirectionCoord = after; - var curInRange = cur + range[1] - range[0]; - diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2), diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2); - } else { - sameDirectionCoord = before; - var afterInRange = after + range[1] - range[0]; - diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2), diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2); - } - var sameInterval = [ Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2) ]; - if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) { - index = unsortedTicks[i].index; - break; - } - } else { - var min = Math.min(before, after), max = Math.max(before, after); - if (coordinate > (min + cur) / 2 && coordinate <= (max + cur) / 2) { - index = unsortedTicks[i].index; - break; + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + container: { + flexWrap: "nowrap", + height: "100%", + maxWidth: "100%", + margin: 0 + }, + item: { + flex: 1, + padding: 0 } - } else for (var _i = 0; _i < len; _i++) if (0 === _i && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) { - index = ticks[_i].index; - break; + }, ChartRow = function(_Component) { + function ChartRow() { + return _classCallCheck(this, ChartRow), _possibleConstructorReturn(this, _getPrototypeOf(ChartRow).apply(this, arguments)); + } + return _inherits(ChartRow, _Component), _createClass(ChartRow, [ { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default.a, { + container: !0, + direction: "row", + style: styles.container, + justify: "space-between" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(this.props.children, function(e) { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default.a, { + item: !0, + xs: !0, + style: styles.item + }, e); + })); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), ChartRow; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = ChartRow, reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx"), + reactHotLoader.register(ChartRow, "ChartRow", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/CustomTooltip.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + __webpack_require__.d(__webpack_exports__, "d", function() { + return multiplier; + }), __webpack_require__.d(__webpack_exports__, "e", function() { + return percentPlotter; + }), __webpack_require__.d(__webpack_exports__, "b", function() { + return bytePlotter; + }), __webpack_require__.d(__webpack_exports__, "a", function() { + return bytePerSecPlotter; + }); + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/Typography/index.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1__), _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); } - } else index = 0; - return index; - }, getMainColorOfGraphicItem = function(item) { - var displayName = item.type.displayName, result = void 0; - switch (displayName) { - case "Line": - case "Area": - case "Radar": - result = item.props.stroke; - break; - - default: - result = item.props.fill; - } - return result; - }, getLegendProps = function(_ref) { - var children = _ref.children, formatedGraphicalItems = _ref.formatedGraphicalItems, legendWidth = _ref.legendWidth, legendContent = _ref.legendContent, legendItem = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__component_Legend__.a); - if (!legendItem) return null; - var legendData = void 0; - return legendData = legendItem.props && legendItem.props.payload ? legendItem.props && legendItem.props.payload : "children" === legendContent ? (formatedGraphicalItems || []).reduce(function(result, _ref2) { - var item = _ref2.item, props = _ref2.props, data = props.sectors || props.data || []; - return result.concat(data.map(function(entry) { + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var multiplier = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1; + return function(t) { + return t * e; + }; + }, percentPlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), " ", r.toFixed(2), " %"); + }; + }, bytePlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), " ", Object(_common__WEBPACK_IMPORTED_MODULE_2__.f)(r)); + }; + }, bytePerSecPlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), Object(_common__WEBPACK_IMPORTED_MODULE_2__.f)(r), "/s"); + }; + }, CustomTooltip = function(_Component) { + function CustomTooltip() { + return _classCallCheck(this, CustomTooltip), _possibleConstructorReturn(this, _getPrototypeOf(CustomTooltip).apply(this, arguments)); + } + return _inherits(CustomTooltip, _Component), _createClass(CustomTooltip, [ { + key: "render", + value: function() { + var e = this.props, t = e.active, n = e.payload, r = e.tooltip; + return !t || "function" != typeof r || !Array.isArray(n) || n.length < 1 ? null : r(n[0].value); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), CustomTooltip; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = CustomTooltip, reactHotLoader, leaveModule; + __webpack_exports__.c = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(multiplier, "multiplier", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(percentPlotter, "percentPlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(bytePlotter, "bytePlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(bytePerSecPlotter, "bytePerSecPlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(CustomTooltip, "CustomTooltip", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Dashboard.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), react_hot_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/react-hot-loader/index.js"), react_hot_loader__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(react_hot_loader__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2__), Header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./components/Header.jsx"), Body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./components/Body.jsx"), Logs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./components/Logs.jsx"), Network__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./components/Network.jsx"), _common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _nonIterableSpread(); + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + function _iterableToArray(e) { + if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); + } + function _arrayWithoutHoles(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t]; + return n; + } + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var deepUpdate = function e(t, n, r) { + if (void 0 === n) return r; + if ("function" == typeof t) return t(n, r); + var o = {}; + return Object.keys(r).forEach(function(a) { + o[a] = e(t[a], n[a], r[a]); + }), o; + }, shouldUpdate = function e(t, n) { + var r = {}; + return Object.keys(n).forEach(function(o) { + r[o] = "function" == typeof t[o] || e(t[o], n[o]); + }), r; + }, replacer = function(e) { + return e; + }, appender = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : replacer; + return function(n, r) { + return [].concat(_toConsumableArray(r), _toConsumableArray(n.map(function(e) { + return t(e); + }))).slice(-e); + }; + }, defaultContent = function() { return { - type: legendItem.props.iconType || item.props.legendType, - value: entry.name, - color: entry.fill, - payload: entry + general: { + version: null, + commit: null + }, + home: {}, + chain: {}, + txpool: {}, + network: { + peers: { + bundles: {} + }, + diff: [] + }, + system: { + activeMemory: [], + virtualMemory: [], + networkIngress: [], + networkEgress: [], + processCPU: [], + systemCPU: [], + diskRead: [], + diskWrite: [] + }, + logs: { + chunks: [], + endTop: !1, + endBottom: !0, + topChanged: Logs__WEBPACK_IMPORTED_MODULE_5__.a, + bottomChanged: Logs__WEBPACK_IMPORTED_MODULE_5__.a + } }; - })); - }, []) : (formatedGraphicalItems || []).map(function(_ref3) { - var item = _ref3.item, _item$props = item.props, dataKey = _item$props.dataKey, name = _item$props.name, legendType = _item$props.legendType; - return { - inactive: _item$props.hide, - dataKey: dataKey, - type: legendItem.props.iconType || legendType || "square", - color: getMainColorOfGraphicItem(item), - value: name || dataKey, - payload: item.props - }; - }), _extends({}, legendItem.props, __WEBPACK_IMPORTED_MODULE_19__component_Legend__.a.getWithHeight(legendItem, legendWidth), { - payload: legendData, - item: legendItem - }); - }, getBarSizeList = function(_ref4) { - var globalSize = _ref4.barSize, _ref4$stackGroups = _ref4.stackGroups, stackGroups = void 0 === _ref4$stackGroups ? {} : _ref4$stackGroups; - if (!stackGroups) return {}; - for (var result = {}, numericAxisIds = Object.keys(stackGroups), i = 0, len = numericAxisIds.length; i < len; i++) for (var sgs = stackGroups[numericAxisIds[i]].stackGroups, stackIds = Object.keys(sgs), j = 0, sLen = stackIds.length; j < sLen; j++) { - var _sgs$stackIds$j = sgs[stackIds[j]], items = _sgs$stackIds$j.items, cateAxisId = _sgs$stackIds$j.cateAxisId, barItems = items.filter(function(item) { - return Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.j)(item.type).indexOf("Bar") >= 0; - }); - if (barItems && barItems.length) { - var selfSize = barItems[0].props.barSize, cateId = barItems[0].props[cateAxisId]; - result[cateId] || (result[cateId] = []), result[cateId].push({ - item: barItems[0], - stackList: barItems.slice(1), - barSize: __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(selfSize) ? globalSize : selfSize - }); - } - } - return result; - }, getBarPosition = function(_ref5) { - var barGap = _ref5.barGap, barCategoryGap = _ref5.barCategoryGap, bandSize = _ref5.bandSize, _ref5$sizeList = _ref5.sizeList, sizeList = void 0 === _ref5$sizeList ? [] : _ref5$sizeList, maxBarSize = _ref5.maxBarSize, len = sizeList.length; - if (len < 1) return null; - var realBarGap = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.d)(barGap, bandSize, 0, !0), result = void 0; - if (sizeList[0].barSize === +sizeList[0].barSize) { - var useFull = !1, fullBarSize = bandSize / len, sum = sizeList.reduce(function(res, entry) { - return res + entry.barSize || 0; - }, 0); - sum += (len - 1) * realBarGap, sum >= bandSize && (sum -= (len - 1) * realBarGap, - realBarGap = 0), sum >= bandSize && fullBarSize > 0 && (useFull = !0, fullBarSize *= .9, - sum = len * fullBarSize); - var offset = (bandSize - sum) / 2 >> 0, prev = { - offset: offset - realBarGap, - size: 0 - }; - result = sizeList.reduce(function(res, entry) { - var newRes = [].concat(_toConsumableArray(res), [ { - item: entry.item, - position: { - offset: prev.offset + prev.size + realBarGap, - size: useFull ? fullBarSize : entry.barSize + }, updaters = { + general: { + version: replacer, + commit: replacer + }, + home: null, + chain: null, + txpool: null, + network: Object(Network__WEBPACK_IMPORTED_MODULE_6__.b)(200), + system: { + activeMemory: appender(200), + virtualMemory: appender(200), + networkIngress: appender(200), + networkEgress: appender(200), + processCPU: appender(200), + systemCPU: appender(200), + diskRead: appender(200), + diskWrite: appender(200) + }, + logs: Object(Logs__WEBPACK_IMPORTED_MODULE_5__.c)(5) + }, styles = { + dashboard: { + display: "flex", + flexFlow: "column", + width: "100%", + height: "100%", + zIndex: 1, + overflow: "hidden" + } + }, themeStyles = function(e) { + return { + dashboard: { + background: e.palette.background.default } - } ]); - return prev = newRes[newRes.length - 1].position, entry.stackList && entry.stackList.length && entry.stackList.forEach(function(item) { - newRes.push({ - item: item, - position: prev - }); - }), newRes; - }, []); - } else { - var _offset = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.d)(barCategoryGap, bandSize, 0, !0); - bandSize - 2 * _offset - (len - 1) * realBarGap <= 0 && (realBarGap = 0); - var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len; - originalSize > 1 && (originalSize >>= 0); - var size = maxBarSize === +maxBarSize ? Math.min(originalSize, maxBarSize) : originalSize; - result = sizeList.reduce(function(res, entry, i) { - var newRes = [].concat(_toConsumableArray(res), [ { - item: entry.item, - position: { - offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2, - size: size - } - } ]); - return entry.stackList && entry.stackList.length && entry.stackList.forEach(function(item) { - newRes.push({ - item: item, - position: newRes[newRes.length - 1].position - }); - }), newRes; - }, []); - } - return result; - }, appendOffsetOfLegend = function(offset, items, props, legendBox) { - var children = props.children, width = props.width, height = props.height, margin = props.margin, legendWidth = width - (margin.left || 0) - (margin.right || 0), legendHeight = height - (margin.top || 0) - (margin.bottom || 0), legendProps = getLegendProps({ - children: children, - items: items, - legendWidth: legendWidth, - legendHeight: legendHeight - }), newOffset = offset; - if (legendProps) { - var box = legendBox || {}, align = legendProps.align, verticalAlign = legendProps.verticalAlign, layout = legendProps.layout; - ("vertical" === layout || "horizontal" === layout && "center" === verticalAlign) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(offset[align]) && (newOffset = _extends({}, offset, _defineProperty({}, align, newOffset[align] + (box.width || 0)))), - ("horizontal" === layout || "vertical" === layout && "center" === align) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(offset[verticalAlign]) && (newOffset = _extends({}, offset, _defineProperty({}, verticalAlign, newOffset[verticalAlign] + (box.height || 0)))); - } - return newOffset; - }, getDomainOfErrorBars = function(data, item, dataKey, axisType) { - var children = item.props.children, errorBars = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_18__cartesian_ErrorBar__.a).filter(function(errorBarChild) { - var direction = errorBarChild.props.direction; - return !(!__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(direction) && !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(axisType)) || axisType.indexOf(direction) >= 0; - }); - if (errorBars && errorBars.length) { - var keys = errorBars.map(function(errorBarChild) { - return errorBarChild.props.dataKey; - }); - return data.reduce(function(result, entry) { - var entryValue = getValueByDataKey(entry, dataKey, 0), mainValue = __WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(entryValue) ? [ __WEBPACK_IMPORTED_MODULE_5_lodash_min___default()(entryValue), __WEBPACK_IMPORTED_MODULE_4_lodash_max___default()(entryValue) ] : [ entryValue, entryValue ], errorDomain = keys.reduce(function(prevErrorArr, k) { - var errorValue = getValueByDataKey(entry, k, 0), lowerValue = mainValue[0] - Math.abs(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(errorValue) ? errorValue[0] : errorValue), upperValue = mainValue[1] + Math.abs(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(errorValue) ? errorValue[1] : errorValue); - return [ Math.min(lowerValue, prevErrorArr[0]), Math.max(upperValue, prevErrorArr[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - return [ Math.min(errorDomain[0], result[0]), Math.max(errorDomain[1], result[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - } - return null; - }, parseErrorBarsOfAxis = function(data, items, dataKey, axisType) { - var domains = items.map(function(item) { - return getDomainOfErrorBars(data, item, dataKey, axisType); - }).filter(function(entry) { - return !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry); - }); - return domains && domains.length ? domains.reduce(function(result, entry) { - return [ Math.min(result[0], entry[0]), Math.max(result[1], entry[1]) ]; - }, [ 1 / 0, -1 / 0 ]) : null; - }, getDomainOfItemsWithSameAxis = function(data, items, type, filterNil) { - var domains = items.map(function(item) { - var dataKey = item.props.dataKey; - return "number" === type && dataKey ? getDomainOfErrorBars(data, item, dataKey) || getDomainOfDataByKey(data, dataKey, type, filterNil) : getDomainOfDataByKey(data, dataKey, type, filterNil); - }); - if ("number" === type) return domains.reduce(function(result, entry) { - return [ Math.min(result[0], entry[0]), Math.max(result[1], entry[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - var tag = {}; - return domains.reduce(function(result, entry) { - for (var i = 0, len = entry.length; i < len; i++) tag[entry[i]] || (tag[entry[i]] = !0, - result.push(entry[i])); - return result; - }, []); - }, isCategorialAxis = function(layout, axisType) { - return "horizontal" === layout && "xAxis" === axisType || "vertical" === layout && "yAxis" === axisType || "centric" === layout && "angleAxis" === axisType || "radial" === layout && "radiusAxis" === axisType; - }, getCoordinatesOfGrid = function(ticks, min, max) { - var hasMin = void 0, hasMax = void 0, values = ticks.map(function(entry) { - return entry.coordinate === min && (hasMin = !0), entry.coordinate === max && (hasMax = !0), - entry.coordinate; - }); - return hasMin || values.push(min), hasMax || values.push(max), values; - }, getTicksOfAxis = function(axis, isGrid, isAll) { - if (!axis) return null; - var scale = axis.scale, duplicateDomain = axis.duplicateDomain, type = axis.type, range = axis.range, offset = (isGrid || isAll) && "category" === type && scale.bandwidth ? scale.bandwidth() / 2 : 0; - return offset = "angleAxis" === axis.axisType ? 2 * Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(range[0] - range[1]) * offset : offset, - isGrid && (axis.ticks || axis.niceTicks) ? (axis.ticks || axis.niceTicks).map(function(entry) { - var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry; - return { - coordinate: scale(scaleContent) + offset, - value: entry, - offset: offset - }; - }) : axis.isCategorial && axis.categoricalDomain ? axis.categoricalDomain.map(function(entry, index) { - return { - coordinate: scale(entry), - value: entry, - index: index, - offset: offset - }; - }) : scale.ticks && !isAll ? scale.ticks(axis.tickCount).map(function(entry) { - return { - coordinate: scale(entry) + offset, - value: entry, - offset: offset - }; - }) : scale.domain().map(function(entry, index) { - return { - coordinate: scale(entry) + offset, - value: duplicateDomain ? duplicateDomain[entry] : entry, - index: index, - offset: offset - }; - }); - }, combineEventHandlers = function(defaultHandler, parentHandler, childHandler) { - var customizedHandler = void 0; - return __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(childHandler) ? customizedHandler = childHandler : __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(parentHandler) && (customizedHandler = parentHandler), - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(defaultHandler) || customizedHandler ? function(arg1, arg2, arg3, arg4) { - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(defaultHandler) && defaultHandler(arg1, arg2, arg3, arg4), - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(customizedHandler) && customizedHandler(arg1, arg2, arg3, arg4); - } : null; - }, parseScale = function(axis, chartType) { - var scale = axis.scale, type = axis.type, layout = axis.layout, axisType = axis.axisType; - if ("auto" === scale) return "radial" === layout && "radiusAxis" === axisType ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleBand(), - realScaleType: "band" - } : "radial" === layout && "angleAxis" === axisType ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleLinear(), - realScaleType: "linear" - } : "category" === type && chartType && (chartType.indexOf("LineChart") >= 0 || chartType.indexOf("AreaChart") >= 0) ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint(), - realScaleType: "point" - } : "category" === type ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleBand(), - realScaleType: "band" - } : { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleLinear(), - realScaleType: "linear" - }; - if (__WEBPACK_IMPORTED_MODULE_3_lodash_isString___default()(scale)) { - var name = "scale" + scale.slice(0, 1).toUpperCase() + scale.slice(1); - return { - scale: (__WEBPACK_IMPORTED_MODULE_12_d3_scale__[name] || __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint)(), - realScaleType: __WEBPACK_IMPORTED_MODULE_12_d3_scale__[name] ? name : "point" - }; - } - return __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(scale) ? { - scale: scale - } : { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint(), - realScaleType: "point" - }; - }, checkDomainOfScale = function(scale) { - var domain = scale.domain(); - if (domain && !(domain.length <= 2)) { - var len = domain.length, range = scale.range(), min = Math.min(range[0], range[1]) - 1e-4, max = Math.max(range[0], range[1]) + 1e-4, first = scale(domain[0]), last = scale(domain[len - 1]); - (first < min || first > max || last < min || last > max) && scale.domain([ domain[0], domain[len - 1] ]); - } - }, findPositionOfBar = function(barPosition, child) { - if (!barPosition) return null; - for (var i = 0, len = barPosition.length; i < len; i++) if (barPosition[i].item === child) return barPosition[i].position; - return null; - }, truncateByDomain = function(value, domain) { - if (!domain || 2 !== domain.length || !Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(domain[0]) || !Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(domain[1])) return value; - var min = Math.min(domain[0], domain[1]), max = Math.max(domain[0], domain[1]), result = [ value[0], value[1] ]; - return (!Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(value[0]) || value[0] < min) && (result[0] = min), - (!Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(value[1]) || value[1] > max) && (result[1] = max), - result[0] > max && (result[0] = max), result[1] < min && (result[1] = min), result; - }, offsetSign = function(series) { - var n = series.length; - if (!(n <= 0)) for (var j = 0, m = series[0].length; j < m; ++j) for (var positive = 0, negative = 0, i = 0; i < n; ++i) { - var value = __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(series[i][j][1]) ? series[i][j][0] : series[i][j][1]; - value >= 0 ? (series[i][j][0] = positive, series[i][j][1] = positive + value, positive = series[i][j][1]) : (series[i][j][0] = negative, - series[i][j][1] = negative + value, negative = series[i][j][1]); - } - }, STACK_OFFSET_MAP = { - sign: offsetSign, - expand: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.o, - none: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.p, - silhouette: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.q, - wiggle: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.r - }, getStackedData = function(data, stackItems, offsetType) { - var dataKeys = stackItems.map(function(item) { - return item.props.dataKey; - }); - return Object(__WEBPACK_IMPORTED_MODULE_13_d3_shape__.n)().keys(dataKeys).value(function(d, key) { - return +getValueByDataKey(d, key, 0); - }).order(__WEBPACK_IMPORTED_MODULE_13_d3_shape__.s).offset(STACK_OFFSET_MAP[offsetType])(data); - }, getStackGroupsByAxisId = function(data, _items, numericAxisId, cateAxisId, offsetType, reverseStackOrder) { - if (!data) return null; - var items = reverseStackOrder ? _items.reverse() : _items, stackGroups = items.reduce(function(result, item) { - var _item$props2 = item.props, stackId = _item$props2.stackId; - if (_item$props2.hide) return result; - var axisId = item.props[numericAxisId], parentGroup = result[axisId] || { - hasStack: !1, - stackGroups: {} - }; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(stackId)) { - var childGroup = parentGroup.stackGroups[stackId] || { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: [] }; - childGroup.items.push(item), parentGroup.hasStack = !0, parentGroup.stackGroups[stackId] = childGroup; - } else parentGroup.stackGroups[Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.k)("_stackId_")] = { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: [ item ] - }; - return _extends({}, result, _defineProperty({}, axisId, parentGroup)); - }, {}); - return Object.keys(stackGroups).reduce(function(result, axisId) { - var group = stackGroups[axisId]; - return group.hasStack && (group.stackGroups = Object.keys(group.stackGroups).reduce(function(res, stackId) { - var g = group.stackGroups[stackId]; - return _extends({}, res, _defineProperty({}, stackId, { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: g.items, - stackedData: getStackedData(data, g.items, offsetType) - })); - }, {})), _extends({}, result, _defineProperty({}, axisId, group)); - }, {}); - }, calculateDomainOfTicks = function(ticks, type) { - return "number" === type ? [ Math.min.apply(null, ticks), Math.max.apply(null, ticks) ] : ticks; - }, getTicksOfScale = function(scale, opts) { - var realScaleType = opts.realScaleType, type = opts.type, tickCount = opts.tickCount, originalDomain = opts.originalDomain, allowDecimals = opts.allowDecimals, scaleType = realScaleType || opts.scale; - if ("auto" !== scaleType && "linear" !== scaleType) return null; - if (tickCount && "number" === type && originalDomain && ("auto" === originalDomain[0] || "auto" === originalDomain[1])) { - var domain = scale.domain(), tickValues = Object(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__.getNiceTickValues)(domain, tickCount, allowDecimals); - return scale.domain(calculateDomainOfTicks(tickValues, type)), { - niceTicks: tickValues - }; - } - if (tickCount && "number" === type) { - var _domain = scale.domain(); - return { - niceTicks: Object(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__.getTickValuesFixedDomain)(_domain, tickCount, allowDecimals) - }; - } - return null; - }, getCateCoordinateOfLine = function(_ref6) { - var axis = _ref6.axis, ticks = _ref6.ticks, bandSize = _ref6.bandSize, entry = _ref6.entry, index = _ref6.index; - if ("category" === axis.type) { - if (!axis.allowDuplicatedCategory && axis.dataKey && !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry[axis.dataKey])) { - var matchedTick = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.a)(ticks, "value", entry[axis.dataKey]); - if (matchedTick) return matchedTick.coordinate + bandSize / 2; - } - return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null; - } - var value = getValueByDataKey(entry, axis.dataKey); - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(value) ? null : axis.scale(value); - }, getCateCoordinateOfBar = function(_ref7) { - var axis = _ref7.axis, ticks = _ref7.ticks, offset = _ref7.offset, bandSize = _ref7.bandSize, entry = _ref7.entry, index = _ref7.index; - if ("category" === axis.type) return ticks[index] ? ticks[index].coordinate + offset : null; - var value = getValueByDataKey(entry, axis.dataKey, axis.domain[index]); - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(value) ? null : axis.scale(value) - bandSize / 2 + offset; - }, getBaseValueOfBar = function(_ref8) { - var numericAxis = _ref8.numericAxis, domain = numericAxis.scale.domain(); - if ("number" === numericAxis.type) { - var min = Math.min(domain[0], domain[1]), max = Math.max(domain[0], domain[1]); - return min <= 0 && max >= 0 ? 0 : max < 0 ? max : min; - } - return domain[0]; - }, detectReferenceElementsDomain = function(children, domain, axisId, axisType, specifiedTicks) { - var lines = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_16__cartesian_ReferenceLine__.a), dots = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_15__cartesian_ReferenceDot__.a), elements = lines.concat(dots), areas = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_17__cartesian_ReferenceArea__.a), idKey = axisType + "Id", valueKey = axisType[0], finalDomain = domain; - if (elements.length && (finalDomain = elements.reduce(function(result, el) { - if (el.props[idKey] === axisId && el.props.alwaysShow && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[valueKey])) { - var value = el.props[valueKey]; - return [ Math.min(result[0], value), Math.max(result[1], value) ]; - } - return result; - }, finalDomain)), areas.length) { - var key1 = valueKey + "1", key2 = valueKey + "2"; - finalDomain = areas.reduce(function(result, el) { - if (el.props[idKey] === axisId && el.props.alwaysShow && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[key1]) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[key2])) { - var value1 = el.props[key1], value2 = el.props[key2]; - return [ Math.min(result[0], value1, value2), Math.max(result[1], value1, value2) ]; - } - return result; - }, finalDomain); - } - return specifiedTicks && specifiedTicks.length && (finalDomain = specifiedTicks.reduce(function(result, tick) { - return Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(tick) ? [ Math.min(result[0], tick), Math.max(result[1], tick) ] : result; - }, finalDomain)), finalDomain; - }, getStackedDataOfItem = function(item, stackGroups) { - var stackId = item.props.stackId; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(stackId)) { - var group = stackGroups[stackId]; - if (group && group.items.length) { - for (var itemIndex = -1, i = 0, len = group.items.length; i < len; i++) if (group.items[i] === item) { - itemIndex = i; - break; - } - return itemIndex >= 0 ? group.stackedData[itemIndex] : null; - } - } - return null; - }, getDomainOfSingle = function(data) { - return data.reduce(function(result, entry) { - return [ Math.min.apply(null, entry.concat([ result[0] ]).filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)), Math.max.apply(null, entry.concat([ result[1] ]).filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)) ]; - }, [ 1 / 0, -1 / 0 ]); - }, getDomainOfStackGroups = function(stackGroups, startIndex, endIndex) { - return Object.keys(stackGroups).reduce(function(result, stackId) { - var group = stackGroups[stackId], stackedData = group.stackedData, domain = stackedData.reduce(function(res, entry) { - var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1)); - return [ Math.min(res[0], s[0]), Math.max(res[1], s[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - return [ Math.min(domain[0], result[0]), Math.max(domain[1], result[1]) ]; - }, [ 1 / 0, -1 / 0 ]).map(function(result) { - return result === 1 / 0 || result === -1 / 0 ? 0 : result; - }); - }, MIN_VALUE_REG = /^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/, MAX_VALUE_REG = /^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/, parseSpecifiedDomain = function(specifiedDomain, dataDomain, allowDataOverflow) { - if (!__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(specifiedDomain)) return dataDomain; - var domain = []; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(specifiedDomain[0])) domain[0] = allowDataOverflow ? specifiedDomain[0] : Math.min(specifiedDomain[0], dataDomain[0]); else if (MIN_VALUE_REG.test(specifiedDomain[0])) { - var value = +MIN_VALUE_REG.exec(specifiedDomain[0])[1]; - domain[0] = dataDomain[0] - value; - } else __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(specifiedDomain[0]) ? domain[0] = specifiedDomain[0](dataDomain[0]) : domain[0] = dataDomain[0]; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(specifiedDomain[1])) domain[1] = allowDataOverflow ? specifiedDomain[1] : Math.max(specifiedDomain[1], dataDomain[1]); else if (MAX_VALUE_REG.test(specifiedDomain[1])) { - var _value = +MAX_VALUE_REG.exec(specifiedDomain[1])[1]; - domain[1] = dataDomain[1] + _value; - } else __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(specifiedDomain[1]) ? domain[1] = specifiedDomain[1](dataDomain[1]) : domain[1] = dataDomain[1]; - return domain; - }, validateCoordinateInRange = function(coordinate, scale) { - if (!scale) return !1; - var range = scale.range(), first = range[0], last = range[range.length - 1]; - return first <= last ? coordinate >= first && coordinate <= last : coordinate >= last && coordinate <= first; - }, getBandSizeOfAxis = function(axis, ticks) { - if (axis && axis.scale && axis.scale.bandwidth) return axis.scale.bandwidth(); - if (axis && ticks && ticks.length >= 2) { - for (var orderedTicks = __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy___default()(ticks, function(o) { - return o.coordinate; - }), bandSize = 1 / 0, i = 1, len = orderedTicks.length; i < len; i++) { - var cur = orderedTicks[i], prev = orderedTicks[i - 1]; - bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize); - } - return bandSize === 1 / 0 ? 0 : bandSize; - } - return 0; - }, parseDomainOfCategoryAxis = function(specifiedDomain, calculatedDomain, axisChild) { - return specifiedDomain && specifiedDomain.length ? __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual___default()(specifiedDomain, __WEBPACK_IMPORTED_MODULE_9_lodash_get___default()(axisChild, "type.defaultProps.domain")) ? calculatedDomain : specifiedDomain : calculatedDomain; - }; -}, function(module, exports) { - var core = module.exports = { - version: "2.5.7" - }; - "number" == typeof __e && (__e = core); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function newInterval(floori, offseti, count, field) { - function interval(date) { - return floori(date = new Date(+date)), date; - } - return interval.floor = interval, interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }, interval.round = function(date) { - var d0 = interval(date), d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }, interval.offset = function(date, step) { - return offseti(date = new Date(+date), null == step ? 1 : Math.floor(step)), date; - }, interval.range = function(start, stop, step) { - var previous, range = []; - if (start = interval.ceil(start), step = null == step ? 1 : Math.floor(step), !(start < stop && step > 0)) return range; - do { - range.push(previous = new Date(+start)), offseti(start, step), floori(start); - } while (previous < start && start < stop); - return range; - }, interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) for (;floori(date), !test(date); ) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) if (step < 0) for (;++step <= 0; ) for (;offseti(date, -1), !test(date); ) ; else for (;--step >= 0; ) for (;offseti(date, 1), - !test(date); ) ; - }); - }, count && (interval.count = function(start, end) { - return t0.setTime(+start), t1.setTime(+end), floori(t0), floori(t1), Math.floor(count(t0, t1)); - }, interval.every = function(step) { - return step = Math.floor(step), isFinite(step) && step > 0 ? step > 1 ? interval.filter(field ? function(d) { - return field(d) % step == 0; - } : function(d) { - return interval.count(0, d) % step == 0; - }) : interval : null; - }), interval; - } - __webpack_exports__.a = newInterval; - var t0 = new Date(), t1 = new Date(); -}, function(module, exports, __webpack_require__) { - var global = __webpack_require__(24), core = __webpack_require__(17), ctx = __webpack_require__(51), hide = __webpack_require__(39), has = __webpack_require__(54), $export = function(type, name, source) { - var key, own, out, IS_FORCED = type & $export.F, IS_GLOBAL = type & $export.G, IS_STATIC = type & $export.S, IS_PROTO = type & $export.P, IS_BIND = type & $export.B, IS_WRAP = type & $export.W, exports = IS_GLOBAL ? core : core[name] || (core[name] = {}), expProto = exports.prototype, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {}).prototype; - IS_GLOBAL && (source = name); - for (key in source) (own = !IS_FORCED && target && void 0 !== target[key]) && has(exports, key) || (out = own ? target[key] : source[key], - exports[key] = IS_GLOBAL && "function" != typeof target[key] ? source[key] : IS_BIND && own ? ctx(out, global) : IS_WRAP && target[key] == out ? function(C) { - var F = function(a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: - return new C(); - - case 1: - return new C(a); - - case 2: - return new C(a, b); - } - return new C(a, b, c); - } - return C.apply(this, arguments); - }; - return F.prototype = C.prototype, F; - }(out) : IS_PROTO && "function" == typeof out ? ctx(Function.call, out) : out, IS_PROTO && ((exports.virtual || (exports.virtual = {}))[key] = out, - type & $export.R && expProto && !expProto[key] && hide(expProto, key, out))); - }; - $export.F = 1, $export.G = 2, $export.S = 4, $export.P = 8, $export.B = 16, $export.W = 32, - $export.U = 64, $export.R = 128, module.exports = $export; -}, function(module, exports) { - function isNil(value) { - return null == value; - } - module.exports = isNil; -}, function(module, exports, __webpack_require__) { - var store = __webpack_require__(151)("wks"), uid = __webpack_require__(103), Symbol = __webpack_require__(24).Symbol, USE_SYMBOL = "function" == typeof Symbol; - (module.exports = function(name) { - return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)("Symbol." + name)); - }).store = store; -}, function(module, exports, __webpack_require__) { - var anObject = __webpack_require__(52), IE8_DOM_DEFINE = __webpack_require__(224), toPrimitive = __webpack_require__(145), dP = Object.defineProperty; - exports.f = __webpack_require__(25) ? Object.defineProperty : function(O, P, Attributes) { - if (anObject(O), P = toPrimitive(P, !0), anObject(Attributes), IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) {} - if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!"); - return "value" in Attributes && (O[P] = Attributes.value), O; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return RADIAN; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return polarToCartesian; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return getMaxRadius; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return formatAxisMap; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return inRangeOfSector; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_2__ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, RADIAN = Math.PI / 180, radianToDegree = function(angleInRadian) { - return 180 * angleInRadian / Math.PI; - }, polarToCartesian = function(cx, cy, radius, angle) { - return { - x: cx + Math.cos(-RADIAN * angle) * radius, - y: cy + Math.sin(-RADIAN * angle) * radius - }; - }, getMaxRadius = function(width, height) { - var offset = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { - top: 0, - right: 0, - bottom: 0, - left: 0 - }; - return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2; - }, formatAxisMap = function(props, axisMap, offset, axisType, chartName) { - var width = props.width, height = props.height, startAngle = props.startAngle, endAngle = props.endAngle, cx = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.cx, width, width / 2), cy = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.cy, height, height / 2), maxRadius = getMaxRadius(width, height, offset), innerRadius = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.innerRadius, maxRadius, 0), outerRadius = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.outerRadius, maxRadius, .8 * maxRadius); - return Object.keys(axisMap).reduce(function(result, id) { - var axis = axisMap[id], domain = axis.domain, reversed = axis.reversed, range = void 0; - __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(axis.range) ? ("angleAxis" === axisType ? range = [ startAngle, endAngle ] : "radiusAxis" === axisType && (range = [ innerRadius, outerRadius ]), - reversed && (range = [ range[1], range[0] ])) : (range = axis.range, startAngle = range[0], - endAngle = range[1]); - var _parseScale = Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.A)(axis, chartName), realScaleType = _parseScale.realScaleType, scale = _parseScale.scale; - scale.domain(domain).range(range), Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.c)(scale); - var ticks = Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.v)(scale, _extends({}, axis, { - realScaleType: realScaleType - })), finalAxis = _extends({}, axis, ticks, { - range: range, - radius: outerRadius, - realScaleType: realScaleType, - scale: scale, - cx: cx, - cy: cy, - innerRadius: innerRadius, - outerRadius: outerRadius, - startAngle: startAngle, - endAngle: endAngle - }); - return _extends({}, result, _defineProperty({}, id, finalAxis)); - }, {}); - }, distanceBetweenPoints = function(point, anotherPoint) { - var x1 = point.x, y1 = point.y, x2 = anotherPoint.x, y2 = anotherPoint.y; - return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); - }, getAngleOfPoint = function(_ref, _ref2) { - var x = _ref.x, y = _ref.y, cx = _ref2.cx, cy = _ref2.cy, radius = distanceBetweenPoints({ - x: x, - y: y - }, { - x: cx, - y: cy - }); - if (radius <= 0) return { - radius: radius - }; - var cos = (x - cx) / radius, angleInRadian = Math.acos(cos); - return y > cy && (angleInRadian = 2 * Math.PI - angleInRadian), { - radius: radius, - angle: radianToDegree(angleInRadian), - angleInRadian: angleInRadian - }; - }, formatAngleOfSector = function(_ref3) { - var startAngle = _ref3.startAngle, endAngle = _ref3.endAngle, startCnt = Math.floor(startAngle / 360), endCnt = Math.floor(endAngle / 360), min = Math.min(startCnt, endCnt); - return { - startAngle: startAngle - 360 * min, - endAngle: endAngle - 360 * min - }; - }, reverseFormatAngleOfSetor = function(angle, _ref4) { - var startAngle = _ref4.startAngle, endAngle = _ref4.endAngle, startCnt = Math.floor(startAngle / 360), endCnt = Math.floor(endAngle / 360); - return angle + 360 * Math.min(startCnt, endCnt); - }, inRangeOfSector = function(_ref5, sector) { - var x = _ref5.x, y = _ref5.y, _getAngleOfPoint = getAngleOfPoint({ - x: x, - y: y - }, sector), radius = _getAngleOfPoint.radius, angle = _getAngleOfPoint.angle, innerRadius = sector.innerRadius, outerRadius = sector.outerRadius; - if (radius < innerRadius || radius > outerRadius) return !1; - if (0 === radius) return !0; - var _formatAngleOfSector = formatAngleOfSector(sector), startAngle = _formatAngleOfSector.startAngle, endAngle = _formatAngleOfSector.endAngle, formatAngle = angle, inRange = void 0; - if (startAngle <= endAngle) { - for (;formatAngle > endAngle; ) formatAngle -= 360; - for (;formatAngle < startAngle; ) formatAngle += 360; - inRange = formatAngle >= startAngle && formatAngle <= endAngle; - } else { - for (;formatAngle > startAngle; ) formatAngle -= 360; - for (;formatAngle < endAngle; ) formatAngle += 360; - inRange = formatAngle >= endAngle && formatAngle <= startAngle; - } - return inRange ? _extends({}, sector, { - radius: radius, - angle: reverseFormatAngleOfSetor(formatAngle, sector) - }) : null; - }; -}, function(module, exports) { - var global = module.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); - "number" == typeof __g && (__g = global); -}, function(module, exports, __webpack_require__) { - module.exports = !__webpack_require__(53)(function() { - return 7 != Object.defineProperty({}, "a", { - get: function() { - return 7; - } - }).a; - }); -}, function(module, exports, __webpack_require__) { - module.exports = { - default: __webpack_require__(394), - __esModule: !0 - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0, exports.default = function(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _defineProperty = __webpack_require__(154), _defineProperty2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_defineProperty); - exports.default = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), (0, _defineProperty2.default)(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(); -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _typeof2 = __webpack_require__(105), _typeof3 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_typeof2); - exports.default = function(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" !== (void 0 === call ? "undefined" : (0, _typeof3.default)(call)) && "function" != typeof call ? self : call; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - exports.__esModule = !0; - var _setPrototypeOf = __webpack_require__(411), _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf), _create = __webpack_require__(415), _create2 = _interopRequireDefault(_create), _typeof2 = __webpack_require__(105), _typeof3 = _interopRequireDefault(_typeof2); - exports.default = function(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + (void 0 === superClass ? "undefined" : (0, - _typeof3.default)(superClass))); - subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (_setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass); - }; -}, function(module, exports, __webpack_require__) { - var freeGlobal = __webpack_require__(268), freeSelf = "object" == typeof self && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function("return this")(); - module.exports = root; -}, function(module, exports) { - function isObject(value) { - var type = typeof value; - return null != value && ("object" == type || "function" == type); - } - module.exports = isObject; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }), exports.translateStyle = exports.AnimateGroup = exports.configBezier = exports.configSpring = void 0; - var _Animate = __webpack_require__(287), _Animate2 = _interopRequireDefault(_Animate), _easing = __webpack_require__(305), _util = __webpack_require__(132), _AnimateGroup = __webpack_require__(762), _AnimateGroup2 = _interopRequireDefault(_AnimateGroup); - exports.configSpring = _easing.configSpring, exports.configBezier = _easing.configBezier, - exports.AnimateGroup = _AnimateGroup2.default, exports.translateStyle = _util.translateStyle, - exports.default = _Animate2.default; -}, function(module, exports) { - var isArray = Array.isArray; - module.exports = isArray; -}, function(module, exports) { - module.exports = function(it) { - return "object" == typeof it ? null !== it : "function" == typeof it; - }; -}, function(module, exports, __webpack_require__) { - var freeGlobal = __webpack_require__(292), freeSelf = "object" == typeof self && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function("return this")(); - module.exports = root; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_bisect__ = __webpack_require__(332); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_bisect__.a; - }); - var __WEBPACK_IMPORTED_MODULE_1__src_ascending__ = __webpack_require__(69); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_ascending__.a; - }); - var __WEBPACK_IMPORTED_MODULE_2__src_bisector__ = __webpack_require__(333); - __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_2__src_bisector__.a; - }); - var __WEBPACK_IMPORTED_MODULE_18__src_quantile__ = (__webpack_require__(848), __webpack_require__(849), - __webpack_require__(335), __webpack_require__(337), __webpack_require__(850), __webpack_require__(853), - __webpack_require__(854), __webpack_require__(341), __webpack_require__(855), __webpack_require__(856), - __webpack_require__(857), __webpack_require__(858), __webpack_require__(342), __webpack_require__(334), - __webpack_require__(859), __webpack_require__(204)); - __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_18__src_quantile__.a; - }); - var __WEBPACK_IMPORTED_MODULE_19__src_range__ = __webpack_require__(339); - __webpack_require__.d(__webpack_exports__, "e", function() { - return __WEBPACK_IMPORTED_MODULE_19__src_range__.a; - }); - var __WEBPACK_IMPORTED_MODULE_23__src_ticks__ = (__webpack_require__(860), __webpack_require__(861), - __webpack_require__(862), __webpack_require__(340)); - __webpack_require__.d(__webpack_exports__, "h", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.a; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.b; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.c; - }); - __webpack_require__(343), __webpack_require__(336), __webpack_require__(863); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "d", function() { - return durationSecond; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return durationMinute; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return durationHour; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return durationDay; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return durationWeek; - }); - var durationSecond = 1e3, durationMinute = 6e4, durationHour = 36e5, durationDay = 864e5, durationWeek = 6048e5; -}, function(module, exports, __webpack_require__) { - var dP = __webpack_require__(22), createDesc = __webpack_require__(75); - module.exports = __webpack_require__(25) ? function(object, key, value) { - return dP.f(object, key, createDesc(1, value)); - } : function(object, key, value) { - return object[key] = value, object; - }; -}, function(module, exports) { - var g; - g = function() { - return this; - }(); - try { - g = g || Function("return this")() || (0, eval)("this"); - } catch (e) { - "object" == typeof window && (g = window); - } - module.exports = g; -}, function(module, exports, __webpack_require__) { - function baseGetTag(value) { - return null == value ? void 0 === value ? undefinedTag : nullTag : symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - var Symbol = __webpack_require__(83), getRawTag = __webpack_require__(603), objectToString = __webpack_require__(604), nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag = Symbol ? Symbol.toStringTag : void 0; - module.exports = baseGetTag; -}, function(module, exports) { - function isObjectLike(value) { - return null != value && "object" == typeof value; - } - module.exports = isObjectLike; -}, function(module, exports) { - function isObjectLike(value) { - return null != value && "object" == typeof value; - } - module.exports = isObjectLike; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function Label(props) { - var viewBox = props.viewBox, position = props.position, value = props.value, children = props.children, content = props.content, _props$className = props.className, className = void 0 === _props$className ? "" : _props$className; - if (!viewBox || __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(value) && __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(children) && !Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(content) && !__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(content)) return null; - if (Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(content)) return Object(__WEBPACK_IMPORTED_MODULE_3_react__.cloneElement)(content, props); - var label = void 0; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(content)) { - if (label = content(props), Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(label)) return label; - } else label = getLabel(props); - var isPolarLabel = isPolar(viewBox), attrs = Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.k)(props); - if (isPolarLabel && ("insideStart" === position || "insideEnd" === position || "end" === position)) return renderRadialLabel(props, label, attrs); - var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(props) : getAttrsOfCartesianLabel(props); - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__Text__.a, _extends({ - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-label", className) - }, attrs, positionAttrs), label); - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__), __WEBPACK_IMPORTED_MODULE_4_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_4_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_prop_types__), __WEBPACK_IMPORTED_MODULE_5_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_5_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_classnames__), __WEBPACK_IMPORTED_MODULE_6__Text__ = __webpack_require__(61), __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_8__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__ = __webpack_require__(23), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, cartesianViewBoxShape = __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.shape({ - x: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number - }), polarViewBoxShape = __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.shape({ - cx: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - cy: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - innerRadius: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - outerRadius: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - startAngle: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - endAngle: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number - }), propTypes = { - viewBox: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ cartesianViewBoxShape, polarViewBoxShape ]), - formatter: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.func, - value: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.string ]), - offset: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - position: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOf([ "top", "left", "right", "bottom", "inside", "outside", "insideLeft", "insideRight", "insideTop", "insideBottom", "insideTopLeft", "insideBottomLeft", "insideTopRight", "insideBottomRight", "insideStart", "insideEnd", "end", "center" ]), - children: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.node ]), - className: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.string, - content: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.element, __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.func ]) - }, defaultProps = { - offset: 5 - }, getLabel = function(props) { - var value = props.value, formatter = props.formatter, label = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(props.children) ? value : props.children; - return __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(formatter) ? formatter(label) : label; - }, getDeltaAngle = function(startAngle, endAngle) { - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.j)(endAngle - startAngle) * Math.min(Math.abs(endAngle - startAngle), 360); - }, renderRadialLabel = function(labelProps, label, attrs) { - var position = labelProps.position, viewBox = labelProps.viewBox, offset = labelProps.offset, className = labelProps.className, cx = viewBox.cx, cy = viewBox.cy, innerRadius = viewBox.innerRadius, outerRadius = viewBox.outerRadius, startAngle = viewBox.startAngle, endAngle = viewBox.endAngle, clockWise = viewBox.clockWise, radius = (innerRadius + outerRadius) / 2, deltaAngle = getDeltaAngle(startAngle, endAngle), sign = deltaAngle >= 0 ? 1 : -1, labelAngle = void 0, direction = void 0; - "insideStart" === position ? (labelAngle = startAngle + sign * offset, direction = clockWise) : "insideEnd" === position ? (labelAngle = endAngle - sign * offset, - direction = !clockWise) : "end" === position && (labelAngle = endAngle + sign * offset, - direction = clockWise), direction = deltaAngle <= 0 ? direction : !direction; - var startPoint = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, radius, labelAngle), endPoint = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, radius, labelAngle + 359 * (direction ? 1 : -1)), path = "M" + startPoint.x + "," + startPoint.y + "\n A" + radius + "," + radius + ",0,1," + (direction ? 0 : 1) + ",\n " + endPoint.x + "," + endPoint.y, id = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(labelProps.id) ? Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.k)("recharts-radial-line-") : labelProps.id; - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("text", _extends({}, attrs, { - dominantBaseline: "central", - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-radial-bar-label", className) - }), __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("defs", null, __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("path", { - id: id, - d: path - })), __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("textPath", { - xlinkHref: "#" + id - }, label)); - }, getAttrsOfPolarLabel = function(props) { - var viewBox = props.viewBox, offset = props.offset, position = props.position, cx = viewBox.cx, cy = viewBox.cy, innerRadius = viewBox.innerRadius, outerRadius = viewBox.outerRadius, startAngle = viewBox.startAngle, endAngle = viewBox.endAngle, midAngle = (startAngle + endAngle) / 2; - if ("outside" === position) { - var _polarToCartesian = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, outerRadius + offset, midAngle), _x = _polarToCartesian.x; - return { - x: _x, - y: _polarToCartesian.y, - textAnchor: _x >= cx ? "start" : "end", - verticalAnchor: "middle" - }; - } - if ("center" === position) return { - x: cx, - y: cy, - textAnchor: "middle", - verticalAnchor: "middle" - }; - var r = (innerRadius + outerRadius) / 2, _polarToCartesian2 = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, r, midAngle); - return { - x: _polarToCartesian2.x, - y: _polarToCartesian2.y, - textAnchor: "middle", - verticalAnchor: "middle" - }; - }, getAttrsOfCartesianLabel = function(props) { - var viewBox = props.viewBox, offset = props.offset, position = props.position, x = viewBox.x, y = viewBox.y, width = viewBox.width, height = viewBox.height, sign = height >= 0 ? 1 : -1; - return "top" === position ? { - x: x + width / 2, - y: y - sign * offset, - textAnchor: "middle", - verticalAnchor: "end" - } : "bottom" === position ? { - x: x + width / 2, - y: y + height + sign * offset, - textAnchor: "middle", - verticalAnchor: "start" - } : "left" === position ? { - x: x - offset, - y: y + height / 2, - textAnchor: "end", - verticalAnchor: "middle" - } : "right" === position ? { - x: x + width + offset, - y: y + height / 2, - textAnchor: "start", - verticalAnchor: "middle" - } : "insideLeft" === position ? { - x: x + offset, - y: y + height / 2, - textAnchor: "start", - verticalAnchor: "middle" - } : "insideRight" === position ? { - x: x + width - offset, - y: y + height / 2, - textAnchor: "end", - verticalAnchor: "middle" - } : "insideTop" === position ? { - x: x + width / 2, - y: y + sign * offset, - textAnchor: "middle", - verticalAnchor: "start" - } : "insideBottom" === position ? { - x: x + width / 2, - y: y + height - sign * offset, - textAnchor: "middle", - verticalAnchor: "end" - } : "insideTopLeft" === position ? { - x: x + offset, - y: y + sign * offset, - textAnchor: "start", - verticalAnchor: "start" - } : "insideTopRight" === position ? { - x: x + width - offset, - y: y + sign * offset, - textAnchor: "end", - verticalAnchor: "start" - } : "insideBottomLeft" === position ? { - x: x + offset, - y: y + height - sign * offset, - textAnchor: "start", - verticalAnchor: "end" - } : "insideBottomRight" === position ? { - x: x + width - offset, - y: y + height - sign * offset, - textAnchor: "end", - verticalAnchor: "end" - } : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(position) && (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(position.x) || Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.i)(position.x)) && (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(position.y) || Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.i)(position.y)) ? { - x: x + Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.d)(position.x, width), - y: y + Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.d)(position.y, height), - textAnchor: "end", - verticalAnchor: "end" - } : { - x: x + width / 2, - y: y + height / 2, - textAnchor: "middle", - verticalAnchor: "middle" - }; - }, isPolar = function(viewBox) { - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(viewBox.cx); - }; - Label.displayName = "Label", Label.defaultProps = defaultProps, Label.propTypes = propTypes; - var parseViewBox = function(props) { - var cx = props.cx, cy = props.cy, angle = props.angle, startAngle = props.startAngle, endAngle = props.endAngle, r = props.r, radius = props.radius, innerRadius = props.innerRadius, outerRadius = props.outerRadius, x = props.x, y = props.y, top = props.top, left = props.left, width = props.width, height = props.height, clockWise = props.clockWise; - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(width) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(height)) { - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(x) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(y)) return { - x: x, - y: y, - width: width, - height: height - }; - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(top) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(left)) return { - x: top, - y: left, - width: width, - height: height - }; - } - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(x) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(y) ? { - x: x, - y: y, - width: 0, - height: 0 - } : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(cx) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(cy) ? { - cx: cx, - cy: cy, - startAngle: startAngle || angle || 0, - endAngle: endAngle || angle || 0, - innerRadius: innerRadius || 0, - outerRadius: outerRadius || radius || r || 0, - clockWise: clockWise - } : props.viewBox ? props.viewBox : {}; - }, parseLabel = function(label, viewBox) { - return label ? !0 === label ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - viewBox: viewBox - }) : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.g)(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - viewBox: viewBox, - value: label - }) : Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(label) || __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - content: label, - viewBox: viewBox - }) : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, _extends({ - viewBox: viewBox - }, label, { - key: "label-implicit" - })) : null : null; - }, renderCallByParent = function(parentProps, viewBox) { - var ckeckPropsLabel = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; - if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) return null; - var children = parentProps.children, parentViewBox = parseViewBox(parentProps), explicitChilren = Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.h)(children, Label).map(function(child, index) { - return Object(__WEBPACK_IMPORTED_MODULE_3_react__.cloneElement)(child, { - viewBox: viewBox || parentViewBox, - key: "label-" + index - }); - }); - return ckeckPropsLabel ? [ parseLabel(parentProps.label, viewBox || parentViewBox) ].concat(_toConsumableArray(explicitChilren)) : explicitChilren; - }; - Label.parseViewBox = parseViewBox, Label.renderCallByParent = renderCallByParent, - __webpack_exports__.a = Label; -}, function(module, exports, __webpack_require__) { - function isEqual(value, other) { - return baseIsEqual(value, other); - } - var baseIsEqual = __webpack_require__(199); - module.exports = isEqual; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_color__ = __webpack_require__(207); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.e; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.g; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.f; - }); - var __WEBPACK_IMPORTED_MODULE_1__src_lab__ = __webpack_require__(871); - __webpack_require__.d(__webpack_exports__, "e", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_lab__.a; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_lab__.b; - }); - var __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__ = __webpack_require__(872); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__.a; - }); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function LabelList(props) { - var data = props.data, valueAccessor = props.valueAccessor, dataKey = props.dataKey, clockWise = props.clockWise, id = props.id, others = _objectWithoutProperties(props, [ "data", "valueAccessor", "dataKey", "clockWise", "id" ]); - return data && data.length ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Layer__.a, { - className: "recharts-label-list" - }, data.map(function(entry, index) { - var value = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(dataKey) ? valueAccessor(entry, index) : Object(__WEBPACK_IMPORTED_MODULE_10__util_ChartUtils__.w)(entry && entry.payload, dataKey), idProps = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(id) ? {} : { - id: id + "-" + index - }; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__Label__.a, _extends({}, Object(__WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__.k)(entry), others, idProps, { - index: index, - value: value, - viewBox: __WEBPACK_IMPORTED_MODULE_7__Label__.a.parseViewBox(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(clockWise) ? entry : _extends({}, entry, { - clockWise: clockWise - })), - key: "label-" + index - })); - })) : null; - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_3_lodash_last__ = __webpack_require__(922), __WEBPACK_IMPORTED_MODULE_3_lodash_last___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_last__), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7__Label__ = __webpack_require__(44), __WEBPACK_IMPORTED_MODULE_8__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_10__util_ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - id: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - data: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object), - valueAccessor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - clockWise: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - dataKey: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func ]) - }, defaultProps = { - valueAccessor: function(entry) { - return __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(entry.value) ? __WEBPACK_IMPORTED_MODULE_3_lodash_last___default()(entry.value) : entry.value; - } - }; - LabelList.propTypes = propTypes, LabelList.displayName = "LabelList"; - var parseLabelList = function(label, data) { - return label ? !0 === label ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, { - key: "labelList-implicit", - data: data - }) : __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(label) || __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(label) ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, { - key: "labelList-implicit", - data: data, - content: label - }) : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(label) ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, _extends({ - data: data - }, label, { - key: "labelList-implicit" - })) : null : null; - }, renderCallByParent = function(parentProps, data) { - var ckeckPropsLabel = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; - if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) return null; - var children = parentProps.children, explicitChilren = Object(__WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__.h)(children, LabelList).map(function(child, index) { - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(child, { - data: data, - key: "labelList-" + index - }); - }); - return ckeckPropsLabel ? [ parseLabelList(parentProps.label, data) ].concat(_toConsumableArray(explicitChilren)) : explicitChilren; - }; - LabelList.renderCallByParent = renderCallByParent, LabelList.defaultProps = defaultProps, - __webpack_exports__.a = LabelList; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy__ = __webpack_require__(321), __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_sortBy__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_range__ = __webpack_require__(373), __WEBPACK_IMPORTED_MODULE_2_lodash_range___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_range__), __WEBPACK_IMPORTED_MODULE_3_lodash_throttle__ = __webpack_require__(933), __WEBPACK_IMPORTED_MODULE_3_lodash_throttle___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_throttle__), __WEBPACK_IMPORTED_MODULE_4_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_7_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_classnames__), __WEBPACK_IMPORTED_MODULE_8__container_Surface__ = __webpack_require__(82), __WEBPACK_IMPORTED_MODULE_9__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__ = __webpack_require__(125), __WEBPACK_IMPORTED_MODULE_11__component_Legend__ = __webpack_require__(180), __WEBPACK_IMPORTED_MODULE_12__shape_Curve__ = __webpack_require__(71), __WEBPACK_IMPORTED_MODULE_13__shape_Cross__ = __webpack_require__(367), __WEBPACK_IMPORTED_MODULE_14__shape_Sector__ = __webpack_require__(139), __WEBPACK_IMPORTED_MODULE_15__shape_Dot__ = __webpack_require__(63), __WEBPACK_IMPORTED_MODULE_16__shape_Rectangle__ = __webpack_require__(70), __WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__ = __webpack_require__(374), __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__ = __webpack_require__(372), __WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__ = __webpack_require__(198), __WEBPACK_IMPORTED_MODULE_21__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__ = __webpack_require__(16), __WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__ = __webpack_require__(23), __WEBPACK_IMPORTED_MODULE_24__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_25__util_Events__ = __webpack_require__(934), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), ORIENT_MAP = { - xAxis: [ "bottom", "top" ], - yAxis: [ "left", "right" ] - }, originCoordinate = { - x: 0, - y: 0 - }, generateCategoricalChart = function(_ref) { - var _class, _temp, _initialiseProps, chartName = _ref.chartName, GraphicalChild = _ref.GraphicalChild, _ref$eventType = _ref.eventType, eventType = void 0 === _ref$eventType ? "axis" : _ref$eventType, axisComponents = _ref.axisComponents, legendContent = _ref.legendContent, formatAxisMap = _ref.formatAxisMap, defaultProps = _ref.defaultProps, propTypes = _ref.propTypes; - return _temp = _class = function(_Component) { - function CategoricalChartWrapper(props) { - _classCallCheck(this, CategoricalChartWrapper); - var _this = _possibleConstructorReturn(this, (CategoricalChartWrapper.__proto__ || Object.getPrototypeOf(CategoricalChartWrapper)).call(this, props)); - _initialiseProps.call(_this); - var defaultState = _this.constructor.createDefaultState(props); - return _this.state = _extends({}, defaultState, { - updateId: 0 - }, _this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: props - }, defaultState, { - updateId: 0 - }))), _this.uniqueChartId = __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(props.id) ? Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.k)("recharts") : props.id, - props.throttleDelay && (_this.triggeredAfterMouseMove = __WEBPACK_IMPORTED_MODULE_3_lodash_throttle___default()(_this.triggeredAfterMouseMove, props.throttleDelay)), - _this; - } - return _inherits(CategoricalChartWrapper, _Component), _createClass(CategoricalChartWrapper, [ { - key: "componentDidMount", - value: function() { - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) || this.addListener(); - } - }, { - key: "componentWillReceiveProps", - value: function(nextProps) { - var _props = this.props, data = _props.data, children = _props.children, width = _props.width, height = _props.height, layout = _props.layout, stackOffset = _props.stackOffset, margin = _props.margin, updateId = this.state.updateId; - if (nextProps.data === data && nextProps.width === width && nextProps.height === height && nextProps.layout === layout && nextProps.stackOffset === stackOffset && Object(__WEBPACK_IMPORTED_MODULE_24__util_PureRender__.b)(nextProps.margin, margin)) { - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.m)(nextProps.children, children)) { - var hasGlobalData = !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.data), newUpdateId = hasGlobalData ? updateId : updateId + 1, _state = this.state, dataStartIndex = _state.dataStartIndex, dataEndIndex = _state.dataEndIndex, _defaultState = _extends({}, this.constructor.createDefaultState(nextProps), { - dataEndIndex: dataEndIndex, - dataStartIndex: dataStartIndex + }, Dashboard = function(_Component) { + function Dashboard(e) { + var t; + return _classCallCheck(this, Dashboard), _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, _getPrototypeOf(Dashboard).call(this, e))), "reconnect", function() { + var e = window.location.host, n = new WebSocket("".concat("https:" === window.location.protocol ? "wss://" : "ws://").concat(e, "/api")); + n.onopen = function() { + t.setState({ + content: defaultContent(), + shouldUpdate: {}, + server: n }); - this.setState(_extends({}, _defaultState, { - updateId: newUpdateId - }, this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: nextProps - }, _defaultState, { - updateId: newUpdateId - })))); - } - } else { - var defaultState = this.constructor.createDefaultState(nextProps); - this.setState(_extends({}, defaultState, { - updateId: updateId + 1 - }, this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: nextProps - }, defaultState, { - updateId: updateId + 1 - })))); - } - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) && !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.syncId) && this.addListener(), - !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) && __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.syncId) && this.removeListener(); - } - }, { - key: "componentWillUnmount", - value: function() { - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) || this.removeListener(), - "function" == typeof this.triggeredAfterMouseMove.cancel && this.triggeredAfterMouseMove.cancel(); - } - }, { - key: "getAxisMap", - value: function(props, _ref2) { - var _ref2$axisType = _ref2.axisType, axisType = void 0 === _ref2$axisType ? "xAxis" : _ref2$axisType, AxisComp = _ref2.AxisComp, graphicalItems = _ref2.graphicalItems, stackGroups = _ref2.stackGroups, dataStartIndex = _ref2.dataStartIndex, dataEndIndex = _ref2.dataEndIndex, children = props.children, axisIdKey = axisType + "Id", axes = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.h)(children, AxisComp), axisMap = {}; - return axes && axes.length ? axisMap = this.getAxisMapByAxes(props, { - axes: axes, - graphicalItems: graphicalItems, - axisType: axisType, - axisIdKey: axisIdKey, - stackGroups: stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }) : graphicalItems && graphicalItems.length && (axisMap = this.getAxisMapByItems(props, { - Axis: AxisComp, - graphicalItems: graphicalItems, - axisType: axisType, - axisIdKey: axisIdKey, - stackGroups: stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - })), axisMap; - } - }, { - key: "getAxisMapByAxes", - value: function(props, _ref3) { - var _this2 = this, axes = _ref3.axes, graphicalItems = _ref3.graphicalItems, axisType = _ref3.axisType, axisIdKey = _ref3.axisIdKey, stackGroups = _ref3.stackGroups, dataStartIndex = _ref3.dataStartIndex, dataEndIndex = _ref3.dataEndIndex, layout = props.layout, children = props.children, stackOffset = props.stackOffset, isCategorial = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.x)(layout, axisType); - return axes.reduce(function(result, child) { - var _child$props = child.props, type = _child$props.type, dataKey = _child$props.dataKey, allowDataOverflow = _child$props.allowDataOverflow, allowDuplicatedCategory = _child$props.allowDuplicatedCategory, scale = _child$props.scale, ticks = _child$props.ticks, axisId = child.props[axisIdKey], displayedData = _this2.constructor.getDisplayedData(props, { - graphicalItems: graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId; - }), - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }), len = displayedData.length; - if (!result[axisId]) { - var domain = void 0, duplicateDomain = void 0, categoricalDomain = void 0; - if (dataKey) { - if (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.n)(displayedData, dataKey, type), - "category" === type && isCategorial) { - var duplicate = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.e)(domain); - allowDuplicatedCategory && duplicate ? (duplicateDomain = domain, domain = __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len)) : allowDuplicatedCategory || (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.y)(child.props.domain, domain, child).reduce(function(finalDomain, entry) { - return finalDomain.indexOf(entry) >= 0 ? finalDomain : [].concat(_toConsumableArray(finalDomain), [ entry ]); - }, [])); - } else if ("category" === type) domain = allowDuplicatedCategory ? domain.filter(function(entry) { - return "" !== entry && !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(entry); - }) : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.y)(child.props.domain, domain, child).reduce(function(finalDomain, entry) { - return finalDomain.indexOf(entry) >= 0 || "" === entry || __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(entry) ? finalDomain : [].concat(_toConsumableArray(finalDomain), [ entry ]); - }, []); else if ("number" === type) { - var errorBarsDomain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.z)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), dataKey, axisType); - errorBarsDomain && (domain = errorBarsDomain); - } - !isCategorial || "number" !== type && "auto" === scale || (categoricalDomain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.n)(displayedData, dataKey, "category")); - } else domain = isCategorial ? __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len) : stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack && "number" === type ? "expand" === stackOffset ? [ 0, 1 ] : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.p)(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex) : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.o)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), type, !0); - return "number" === type && (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType, ticks), - child.props.domain && (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.B)(child.props.domain, domain, allowDataOverflow))), - _extends({}, result, _defineProperty({}, axisId, _extends({}, child.props, { - axisType: axisType, - domain: domain, - categoricalDomain: categoricalDomain, - duplicateDomain: duplicateDomain, - originalDomain: child.props.domain, - isCategorial: isCategorial, - layout: layout - }))); - } - return result; - }, {}); - } - }, { - key: "getAxisMapByItems", - value: function(props, _ref4) { - var graphicalItems = _ref4.graphicalItems, Axis = _ref4.Axis, axisType = _ref4.axisType, axisIdKey = _ref4.axisIdKey, stackGroups = _ref4.stackGroups, dataStartIndex = _ref4.dataStartIndex, dataEndIndex = _ref4.dataEndIndex, layout = props.layout, children = props.children, displayedData = this.constructor.getDisplayedData(props, { - graphicalItems: graphicalItems, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }), len = displayedData.length, isCategorial = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.x)(layout, axisType), index = -1; - return graphicalItems.reduce(function(result, child) { - var axisId = child.props[axisIdKey]; - if (!result[axisId]) { - index++; - var domain = void 0; - return isCategorial ? domain = __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len) : stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack ? (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.p)(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex), - domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType)) : (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.B)(Axis.defaultProps.domain, Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.o)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), "number"), Axis.defaultProps.allowDataOverflow), domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType)), - _extends({}, result, _defineProperty({}, axisId, _extends({ - axisType: axisType - }, Axis.defaultProps, { - hide: !0, - orientation: ORIENT_MAP[axisType] && ORIENT_MAP[axisType][index % 2], - domain: domain, - originalDomain: Axis.defaultProps.domain, - isCategorial: isCategorial, - layout: layout - }))); - } - return result; - }, {}); - } - }, { - key: "getActiveCoordinate", - value: function(tooltipTicks, activeIndex, rangeObj) { - var layout = this.props.layout, entry = tooltipTicks.find(function(tick) { - return tick && tick.index === activeIndex; - }); - if (entry) { - if ("horizontal" === layout) return { - x: entry.coordinate, - y: rangeObj.y + }, n.onmessage = function(e) { + var n = JSON.parse(e.data); + n ? t.update(n) : console.error("Incoming message is ".concat(n)); + }, n.onclose = function() { + t.setState({ + server: null + }), setTimeout(t.reconnect, 3e3); }; - if ("vertical" === layout) return { - x: rangeObj.x, - y: entry.coordinate - }; - if ("centric" === layout) { - var _angle = entry.coordinate, _radius = rangeObj.radius; - return _extends({}, rangeObj, Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(rangeObj.cx, rangeObj.cy, _radius, _angle), { - angle: _angle, - radius: _radius - }); - } - var radius = entry.coordinate, angle = rangeObj.angle; - return _extends({}, rangeObj, Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(rangeObj.cx, rangeObj.cy, radius, angle), { - angle: angle, - radius: radius - }); - } - return originCoordinate; - } - }, { - key: "getMouseInfo", - value: function(event) { - if (!this.container) return null; - var containerOffset = Object(__WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__.b)(this.container), e = Object(__WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__.a)(event, containerOffset), rangeObj = this.inRange(e.chartX, e.chartY); - if (!rangeObj) return null; - var _state2 = this.state, xAxisMap = _state2.xAxisMap, yAxisMap = _state2.yAxisMap; - if ("axis" !== eventType && xAxisMap && yAxisMap) { - var xScale = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(xAxisMap).scale, yScale = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(yAxisMap).scale, xValue = xScale && xScale.invert ? xScale.invert(e.chartX) : null, yValue = yScale && yScale.invert ? yScale.invert(e.chartY) : null; - return _extends({}, e, { - xValue: xValue, - yValue: yValue - }); - } - var _state3 = this.state, ticks = _state3.orderedTooltipTicks, axis = _state3.tooltipAxis, tooltipTicks = _state3.tooltipTicks, pos = this.calculateTooltipPos(rangeObj), activeIndex = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.b)(pos, ticks, tooltipTicks, axis); - if (activeIndex >= 0 && tooltipTicks) { - var activeLabel = tooltipTicks[activeIndex] && tooltipTicks[activeIndex].value, activePayload = this.getTooltipContent(activeIndex, activeLabel), activeCoordinate = this.getActiveCoordinate(ticks, activeIndex, rangeObj); - return _extends({}, e, { - activeTooltipIndex: activeIndex, - activeLabel: activeLabel, - activePayload: activePayload, - activeCoordinate: activeCoordinate - }); - } - return null; - } - }, { - key: "getTooltipContent", - value: function(activeIndex, activeLabel) { - var _state4 = this.state, graphicalItems = _state4.graphicalItems, tooltipAxis = _state4.tooltipAxis, displayedData = this.constructor.getDisplayedData(this.props, this.state); - return activeIndex < 0 || !graphicalItems || !graphicalItems.length || activeIndex >= displayedData.length ? null : graphicalItems.reduce(function(result, child) { - if (child.props.hide) return result; - var _child$props2 = child.props, dataKey = _child$props2.dataKey, name = _child$props2.name, unit = _child$props2.unit, formatter = _child$props2.formatter, data = _child$props2.data, payload = void 0; - return payload = tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory ? Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(data || displayedData, tooltipAxis.dataKey, activeLabel) : displayedData[activeIndex], - payload ? [].concat(_toConsumableArray(result), [ _extends({}, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(child), { - dataKey: dataKey, - unit: unit, - formatter: formatter, - name: name || dataKey, - color: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.r)(child), - value: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.w)(payload, dataKey), - payload: payload - }) ]) : result; - }, []); - } - }, { - key: "getFormatItems", - value: function(props, currentState) { - var _this3 = this, graphicalItems = currentState.graphicalItems, stackGroups = currentState.stackGroups, offset = currentState.offset, updateId = currentState.updateId, dataStartIndex = currentState.dataStartIndex, dataEndIndex = currentState.dataEndIndex, barSize = props.barSize, layout = props.layout, barGap = props.barGap, barCategoryGap = props.barCategoryGap, globalMaxBarSize = props.maxBarSize, _getAxisNameByLayout = this.getAxisNameByLayout(layout), numericAxisName = _getAxisNameByLayout.numericAxisName, cateAxisName = _getAxisNameByLayout.cateAxisName, hasBar = this.constructor.hasBar(graphicalItems), sizeList = hasBar && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.i)({ - barSize: barSize, - stackGroups: stackGroups - }), formatedItems = []; - return graphicalItems.forEach(function(item, index) { - var displayedData = _this3.constructor.getDisplayedData(props, { - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }, item), _item$props = item.props, dataKey = _item$props.dataKey, childMaxBarSize = _item$props.maxBarSize, numericAxisId = item.props[numericAxisName + "Id"], cateAxisId = item.props[cateAxisName + "Id"], axisObj = axisComponents.reduce(function(result, entry) { - var _extends4, axisMap = currentState[entry.axisType + "Map"], id = item.props[entry.axisType + "Id"], axis = axisMap && axisMap[id]; - return _extends({}, result, (_extends4 = {}, _defineProperty(_extends4, entry.axisType, axis), - _defineProperty(_extends4, entry.axisType + "Ticks", Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis)), - _extends4)); - }, {}), cateAxis = axisObj[cateAxisName], cateTicks = axisObj[cateAxisName + "Ticks"], stackedData = stackGroups && stackGroups[numericAxisId] && stackGroups[numericAxisId].hasStack && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.t)(item, stackGroups[numericAxisId].stackGroups), bandSize = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.g)(cateAxis, cateTicks), maxBarSize = __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize, barPosition = hasBar && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.h)({ - barGap: barGap, - barCategoryGap: barCategoryGap, - bandSize: bandSize, - sizeList: sizeList[cateAxisId], - maxBarSize: maxBarSize - }), componsedFn = item && item.type && item.type.getComposedData; - if (componsedFn) { - var _extends5; - formatedItems.push({ - props: _extends({}, componsedFn(_extends({}, axisObj, { - displayedData: displayedData, - props: props, - dataKey: dataKey, - item: item, - bandSize: bandSize, - barPosition: barPosition, - offset: offset, - stackedData: stackedData, - layout: layout, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - onItemMouseLeave: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this3.handleItemMouseLeave, null, item.props.onMouseLeave), - onItemMouseEnter: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this3.handleItemMouseEnter, null, item.props.onMouseEnter) - })), (_extends5 = { - key: item.key || "item-" + index - }, _defineProperty(_extends5, numericAxisName, axisObj[numericAxisName]), _defineProperty(_extends5, cateAxisName, axisObj[cateAxisName]), - _defineProperty(_extends5, "animationId", updateId), _extends5)), - childIndex: Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.o)(item, props.children), - item: item - }); - } - }), formatedItems; - } - }, { - key: "getCursorRectangle", - value: function() { - var layout = this.props.layout, _state5 = this.state, activeCoordinate = _state5.activeCoordinate, offset = _state5.offset, tooltipAxisBandSize = _state5.tooltipAxisBandSize, halfSize = tooltipAxisBandSize / 2; - return { - stroke: "none", - fill: "#ccc", - x: "horizontal" === layout ? activeCoordinate.x - halfSize : offset.left + .5, - y: "horizontal" === layout ? offset.top + .5 : activeCoordinate.y - halfSize, - width: "horizontal" === layout ? tooltipAxisBandSize : offset.width - 1, - height: "horizontal" === layout ? offset.height - 1 : tooltipAxisBandSize - }; - } - }, { - key: "getCursorPoints", - value: function() { - var layout = this.props.layout, _state6 = this.state, activeCoordinate = _state6.activeCoordinate, offset = _state6.offset, x1 = void 0, y1 = void 0, x2 = void 0, y2 = void 0; - if ("horizontal" === layout) x1 = activeCoordinate.x, x2 = x1, y1 = offset.top, - y2 = offset.top + offset.height; else if ("vertical" === layout) y1 = activeCoordinate.y, - y2 = y1, x1 = offset.left, x2 = offset.left + offset.width; else if (!__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activeCoordinate.cx) || !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activeCoordinate.cy)) { - if ("centric" !== layout) { - var _cx = activeCoordinate.cx, _cy = activeCoordinate.cy, radius = activeCoordinate.radius, startAngle = activeCoordinate.startAngle, endAngle = activeCoordinate.endAngle, startPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(_cx, _cy, radius, startAngle), endPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(_cx, _cy, radius, endAngle); + }), _defineProperty(_assertThisInitialized(t), "send", function(e) { + null != t.state.server && t.state.server.send(e); + }), _defineProperty(_assertThisInitialized(t), "update", function(e) { + t.setState(function(t) { return { - points: [ startPoint, endPoint ], - cx: _cx, - cy: _cy, - radius: radius, - startAngle: startAngle, - endAngle: endAngle + content: deepUpdate(updaters, e, t.content), + shouldUpdate: shouldUpdate(updaters, e) }; - } - var cx = activeCoordinate.cx, cy = activeCoordinate.cy, innerRadius = activeCoordinate.innerRadius, outerRadius = activeCoordinate.outerRadius, angle = activeCoordinate.angle, innerPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(cx, cy, innerRadius, angle), outerPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(cx, cy, outerRadius, angle); - x1 = innerPoint.x, y1 = innerPoint.y, x2 = outerPoint.x, y2 = outerPoint.y; - } - return [ { - x: x1, - y: y1 - }, { - x: x2, - y: y2 - } ]; - } - }, { - key: "getAxisNameByLayout", - value: function(layout) { - return "horizontal" === layout ? { - numericAxisName: "yAxis", - cateAxisName: "xAxis" - } : "vertical" === layout ? { - numericAxisName: "xAxis", - cateAxisName: "yAxis" - } : "centric" === layout ? { - numericAxisName: "radiusAxis", - cateAxisName: "angleAxis" - } : { - numericAxisName: "angleAxis", - cateAxisName: "radiusAxis" - }; - } - }, { - key: "calculateTooltipPos", - value: function(rangeObj) { - var layout = this.props.layout; - return "horizontal" === layout ? rangeObj.x : "vertical" === layout ? rangeObj.y : "centric" === layout ? rangeObj.angle : rangeObj.radius; - } - }, { - key: "inRange", - value: function(x, y) { - var layout = this.props.layout; - if ("horizontal" === layout || "vertical" === layout) { - var offset = this.state.offset; - return x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height ? { - x: x, - y: y - } : null; - } - var _state7 = this.state, angleAxisMap = _state7.angleAxisMap, radiusAxisMap = _state7.radiusAxisMap; - if (angleAxisMap && radiusAxisMap) { - var angleAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(angleAxisMap); - return Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.d)({ - x: x, - y: y - }, angleAxis); - } - return null; - } - }, { - key: "parseEventsOfWrapper", - value: function() { - var children = this.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a), tooltipEvents = tooltipItem && "axis" === eventType ? { - onMouseEnter: this.handleMouseEnter, - onMouseMove: this.handleMouseMove, - onMouseLeave: this.handleMouseLeave, - onTouchMove: this.handleTouchMove - } : {}, outerEvents = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.e)(this.props, this.handleOuterEvent); - return _extends({}, outerEvents, tooltipEvents); - } - }, { - key: "updateStateOfAxisMapsOffsetAndStackGroups", - value: function(_ref5) { - var _this4 = this, props = _ref5.props, dataStartIndex = _ref5.dataStartIndex, dataEndIndex = _ref5.dataEndIndex, updateId = _ref5.updateId; - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.q)({ - props: props - })) return null; - var children = props.children, layout = props.layout, stackOffset = props.stackOffset, data = props.data, reverseStackOrder = props.reverseStackOrder, _getAxisNameByLayout2 = this.getAxisNameByLayout(layout), numericAxisName = _getAxisNameByLayout2.numericAxisName, cateAxisName = _getAxisNameByLayout2.cateAxisName, graphicalItems = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.h)(children, GraphicalChild), stackGroups = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.s)(data, graphicalItems, numericAxisName + "Id", cateAxisName + "Id", stackOffset, reverseStackOrder), axisObj = axisComponents.reduce(function(result, entry) { - var name = entry.axisType + "Map"; - return _extends({}, result, _defineProperty({}, name, _this4.getAxisMap(props, _extends({}, entry, { - graphicalItems: graphicalItems, - stackGroups: entry.axisType === numericAxisName && stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - })))); - }, {}), offset = this.calculateOffset(_extends({}, axisObj, { - props: props, - graphicalItems: graphicalItems - })); - Object.keys(axisObj).forEach(function(key) { - axisObj[key] = formatAxisMap(props, axisObj[key], offset, key.replace("Map", ""), chartName); - }); - var cateAxisMap = axisObj[cateAxisName + "Map"], ticksObj = this.tooltipTicksGenerator(cateAxisMap), formatedGraphicalItems = this.getFormatItems(props, _extends({}, axisObj, { - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId, - graphicalItems: graphicalItems, - stackGroups: stackGroups, - offset: offset - })); - return _extends({ - formatedGraphicalItems: formatedGraphicalItems, - graphicalItems: graphicalItems, - offset: offset, - stackGroups: stackGroups - }, ticksObj, axisObj); - } - }, { - key: "addListener", - value: function() { - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.on(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, this.handleReceiveSyncEvent), - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners(__WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners + 1); - } - }, { - key: "removeListener", - value: function() { - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.removeListener(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, this.handleReceiveSyncEvent), - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners(__WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners - 1); - } - }, { - key: "calculateOffset", - value: function(_ref6) { - var props = _ref6.props, graphicalItems = _ref6.graphicalItems, _ref6$xAxisMap = _ref6.xAxisMap, xAxisMap = void 0 === _ref6$xAxisMap ? {} : _ref6$xAxisMap, _ref6$yAxisMap = _ref6.yAxisMap, yAxisMap = void 0 === _ref6$yAxisMap ? {} : _ref6$yAxisMap, width = props.width, height = props.height, children = props.children, margin = props.margin || {}, brushItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a), legendItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_11__component_Legend__.a), offsetH = Object.keys(yAxisMap).reduce(function(result, id) { - var entry = yAxisMap[id], orientation = entry.orientation; - return entry.mirror || entry.hide ? result : _extends({}, result, _defineProperty({}, orientation, result[orientation] + entry.width)); - }, { - left: margin.left || 0, - right: margin.right || 0 - }), offsetV = Object.keys(xAxisMap).reduce(function(result, id) { - var entry = xAxisMap[id], orientation = entry.orientation; - return entry.mirror || entry.hide ? result : _extends({}, result, _defineProperty({}, orientation, result[orientation] + entry.height)); - }, { - top: margin.top || 0, - bottom: margin.bottom || 0 - }), offset = _extends({}, offsetV, offsetH), brushBottom = offset.bottom; - if (brushItem && (offset.bottom += brushItem.props.height || __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a.defaultProps.height), - legendItem && this.legendInstance) { - var legendBox = this.legendInstance.getBBox(); - offset = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.a)(offset, graphicalItems, props, legendBox); - } - return _extends({ - brushBottom: brushBottom - }, offset, { - width: width - offset.left - offset.right, - height: height - offset.top - offset.bottom - }); - } - }, { - key: "triggerSyncEvent", - value: function(data) { - var syncId = this.props.syncId; - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(syncId) || __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.emit(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, syncId, this.uniqueChartId, data); - } - }, { - key: "filterFormatItem", - value: function(item, displayName, childIndex) { - for (var formatedGraphicalItems = this.state.formatedGraphicalItems, i = 0, len = formatedGraphicalItems.length; i < len; i++) { - var entry = formatedGraphicalItems[i]; - if (entry.item === item || entry.props.key === item.key || displayName === Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.j)(entry.item.type) && childIndex === entry.childIndex) return entry; - } - return null; - } - }, { - key: "renderAxis", - value: function(axisOptions, element, displayName, index) { - var _props2 = this.props, width = _props2.width, height = _props2.height; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a, _extends({}, axisOptions, { - className: "recharts-" + axisOptions.axisType + " " + axisOptions.axisType, - key: element.key || displayName + "-" + index, - viewBox: { - x: 0, - y: 0, - width: width, - height: height - }, - ticksGenerator: this.axesTicksGenerator - })); - } - }, { - key: "renderLegend", - value: function() { - var _this5 = this, formatedGraphicalItems = this.state.formatedGraphicalItems, _props3 = this.props, children = _props3.children, width = _props3.width, height = _props3.height, margin = this.props.margin || {}, legendWidth = width - (margin.left || 0) - (margin.right || 0), legendHeight = height - (margin.top || 0) - (margin.bottom || 0), props = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.q)({ - children: children, - formatedGraphicalItems: formatedGraphicalItems, - legendWidth: legendWidth, - legendHeight: legendHeight, - legendContent: legendContent - }); - if (!props) return null; - var item = props.item, otherProps = _objectWithoutProperties(props, [ "item" ]); - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(item, _extends({}, otherProps, { - chartWidth: width, - chartHeight: height, - margin: margin, - ref: function(legend) { - _this5.legendInstance = legend; - }, - onBBoxUpdate: this.handleLegendBBoxUpdate - })); - } - }, { - key: "renderTooltip", - value: function() { - var children = this.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a); - if (!tooltipItem) return null; - var _state8 = this.state, isTooltipActive = _state8.isTooltipActive, activeCoordinate = _state8.activeCoordinate, activePayload = _state8.activePayload, activeLabel = _state8.activeLabel, offset = _state8.offset; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(tooltipItem, { - viewBox: _extends({}, offset, { - x: offset.left, - y: offset.top - }), - active: isTooltipActive, - label: activeLabel, - payload: isTooltipActive ? activePayload : [], - coordinate: activeCoordinate - }); - } - }, { - key: "renderActiveDot", - value: function(option, props) { - var dot = void 0; - return dot = Object(__WEBPACK_IMPORTED_MODULE_5_react__.isValidElement)(option) ? Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(option, props) : __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(option) ? option(props) : __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_15__shape_Dot__.a, props), - __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_9__container_Layer__.a, { - className: "recharts-active-dot", - key: props.key - }, dot); - } - }, { - key: "renderActivePoints", - value: function(_ref7) { - var item = _ref7.item, activePoint = _ref7.activePoint, basePoint = _ref7.basePoint, childIndex = _ref7.childIndex, isRange = _ref7.isRange, result = [], key = item.props.key, _item$item$props = item.item.props, activeDot = _item$item$props.activeDot, dataKey = _item$item$props.dataKey, dotProps = _extends({ - index: childIndex, - dataKey: dataKey, - cx: activePoint.x, - cy: activePoint.y, - r: 4, - fill: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.r)(item.item), - strokeWidth: 2, - stroke: "#fff", - payload: activePoint.payload, - value: activePoint.value, - key: key + "-activePoint-" + childIndex - }, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(activeDot), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.e)(activeDot)); - return result.push(this.renderActiveDot(activeDot, dotProps, childIndex)), basePoint ? result.push(this.renderActiveDot(activeDot, _extends({}, dotProps, { - cx: basePoint.x, - cy: basePoint.y, - key: key + "-basePoint-" + childIndex - }), childIndex)) : isRange && result.push(null), result; - } - }, { - key: "render", - value: function() { - var _this6 = this; - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.q)(this)) return null; - var _props4 = this.props, children = _props4.children, className = _props4.className, width = _props4.width, height = _props4.height, style = _props4.style, compact = _props4.compact, others = _objectWithoutProperties(_props4, [ "children", "className", "width", "height", "style", "compact" ]), attrs = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(others), map = { - CartesianGrid: { - handler: this.renderGrid, - once: !0 - }, - ReferenceArea: { - handler: this.renderReferenceElement - }, - ReferenceLine: { - handler: this.renderReferenceElement - }, - ReferenceDot: { - handler: this.renderReferenceElement - }, - XAxis: { - handler: this.renderXAxis - }, - YAxis: { - handler: this.renderYAxis - }, - Brush: { - handler: this.renderBrush, - once: !0 - }, - Bar: { - handler: this.renderGraphicChild - }, - Line: { - handler: this.renderGraphicChild - }, - Area: { - handler: this.renderGraphicChild - }, - Radar: { - handler: this.renderGraphicChild - }, - RadialBar: { - handler: this.renderGraphicChild - }, - Scatter: { - handler: this.renderGraphicChild - }, - Pie: { - handler: this.renderGraphicChild - }, - Tooltip: { - handler: this.renderCursor, - once: !0 - }, - PolarGrid: { - handler: this.renderPolarGrid, - once: !0 - }, - PolarAngleAxis: { - handler: this.renderPolarAxis - }, - PolarRadiusAxis: { - handler: this.renderPolarAxis - } - }; - if (compact) return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Surface__.a, _extends({}, attrs, { - width: width, - height: height - }), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.p)(children, map)); - var events = this.parseEventsOfWrapper(); - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement("div", _extends({ - className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()("recharts-wrapper", className), - style: _extends({}, style, { - position: "relative", - cursor: "default", - width: width, - height: height - }) - }, events, { - ref: function(node) { - _this6.container = node; - } - }), __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Surface__.a, _extends({}, attrs, { - width: width, - height: height - }), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.p)(children, map)), this.renderLegend(), this.renderTooltip()); - } - } ]), CategoricalChartWrapper; - }(__WEBPACK_IMPORTED_MODULE_5_react__.Component), _class.displayName = chartName, - _class.propTypes = _extends({ - syncId: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - compact: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - width: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - data: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object), - layout: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "horizontal", "vertical" ]), - stackOffset: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "sign", "expand", "none", "wiggle", "silhouette" ]), - throttleDelay: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - margin: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.shape({ - top: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - right: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - bottom: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - left: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number - }), - barCategoryGap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - barGap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - barSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - maxBarSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, - className: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - children: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.node ]), - onClick: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseLeave: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseEnter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseDown: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseUp: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - reverseStackOrder: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - id: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string - }, propTypes), _class.defaultProps = _extends({ - layout: "horizontal", - stackOffset: "none", - barCategoryGap: "10%", - barGap: 4, - margin: { - top: 5, - right: 5, - bottom: 5, - left: 5 - }, - reverseStackOrder: !1 - }, defaultProps), _class.createDefaultState = function(props) { - var children = props.children, brushItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a); - return { - chartX: 0, - chartY: 0, - dataStartIndex: brushItem && brushItem.props && brushItem.props.startIndex || 0, - dataEndIndex: brushItem && brushItem.props && brushItem.props.endIndex || props.data && props.data.length - 1 || 0, - activeTooltipIndex: -1, - isTooltipActive: !1 - }; - }, _class.hasBar = function(graphicalItems) { - return !(!graphicalItems || !graphicalItems.length) && graphicalItems.some(function(item) { - var name = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.j)(item && item.type); - return name && name.indexOf("Bar") >= 0; - }); - }, _class.getDisplayedData = function(props, _ref8, item) { - var graphicalItems = _ref8.graphicalItems, dataStartIndex = _ref8.dataStartIndex, dataEndIndex = _ref8.dataEndIndex, itemsData = (graphicalItems || []).reduce(function(result, child) { - var itemData = child.props.data; - return itemData && itemData.length ? [].concat(_toConsumableArray(result), _toConsumableArray(itemData)) : result; - }, []); - if (itemsData && itemsData.length > 0) return itemsData; - if (item && item.props && item.props.data && item.props.data.length > 0) return item.props.data; - var data = props.data; - return data && data.length && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(dataStartIndex) && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(dataEndIndex) ? data.slice(dataStartIndex, dataEndIndex + 1) : []; - }, _initialiseProps = function() { - var _this7 = this; - this.handleLegendBBoxUpdate = function(box) { - if (box && _this7.legendInstance) { - var _state9 = _this7.state, dataStartIndex = _state9.dataStartIndex, dataEndIndex = _state9.dataEndIndex, updateId = _state9.updateId; - _this7.setState(_this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId - })); - } - }, this.handleReceiveSyncEvent = function(cId, chartId, data) { - var _props5 = _this7.props, syncId = _props5.syncId, layout = _props5.layout, updateId = _this7.state.updateId; - if (syncId === cId && chartId !== _this7.uniqueChartId) { - var dataStartIndex = data.dataStartIndex, dataEndIndex = data.dataEndIndex; - if (__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.dataStartIndex) && __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.dataEndIndex)) if (__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.activeTooltipIndex)) _this7.setState(data); else { - var chartX = data.chartX, chartY = data.chartY, activeTooltipIndex = data.activeTooltipIndex, _state10 = _this7.state, offset = _state10.offset, tooltipTicks = _state10.tooltipTicks; - if (!offset) return; - var viewBox = _extends({}, offset, { - x: offset.left, - y: offset.top - }), validateChartX = Math.min(chartX, viewBox.x + viewBox.width), validateChartY = Math.min(chartY, viewBox.y + viewBox.height), activeLabel = tooltipTicks[activeTooltipIndex] && tooltipTicks[activeTooltipIndex].value, activePayload = _this7.getTooltipContent(activeTooltipIndex), activeCoordinate = tooltipTicks[activeTooltipIndex] ? { - x: "horizontal" === layout ? tooltipTicks[activeTooltipIndex].coordinate : validateChartX, - y: "horizontal" === layout ? validateChartY : tooltipTicks[activeTooltipIndex].coordinate - } : originCoordinate; - _this7.setState(_extends({}, data, { - activeLabel: activeLabel, - activeCoordinate: activeCoordinate, - activePayload: activePayload - })); - } else _this7.setState(_extends({ - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }, _this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId - }))); - } - }, this.handleBrushChange = function(_ref9) { - var startIndex = _ref9.startIndex, endIndex = _ref9.endIndex; - if (startIndex !== _this7.state.dataStartIndex || endIndex !== _this7.state.dataEndIndex) { - var updateId = _this7.state.updateId; - _this7.setState(function() { - return _extends({ - dataStartIndex: startIndex, - dataEndIndex: endIndex - }, _this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: startIndex, - dataEndIndex: endIndex, - updateId: updateId - })); - }), _this7.triggerSyncEvent({ - dataStartIndex: startIndex, - dataEndIndex: endIndex - }); - } - }, this.handleMouseEnter = function(e) { - var onMouseEnter = _this7.props.onMouseEnter, mouse = _this7.getMouseInfo(e); - if (mouse) { - var nextState = _extends({}, mouse, { - isTooltipActive: !0 - }); - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseEnter) && onMouseEnter(nextState, e); - } - }, this.triggeredAfterMouseMove = function(e) { - var onMouseMove = _this7.props.onMouseMove, mouse = _this7.getMouseInfo(e), nextState = mouse ? _extends({}, mouse, { - isTooltipActive: !0 - }) : { - isTooltipActive: !1 - }; - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseMove) && onMouseMove(nextState, e); - }, this.handleItemMouseEnter = function(el) { - _this7.setState(function() { - return { - isTooltipActive: !0, - activeItem: el, - activePayload: el.tooltipPayload, - activeCoordinate: el.tooltipPosition || { - x: el.cx, - y: el.cy - } - }; - }); - }, this.handleItemMouseLeave = function() { - _this7.setState(function() { - return { - isTooltipActive: !1 - }; - }); - }, this.handleMouseMove = function(e) { - e && __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(e.persist) && e.persist(), - _this7.triggeredAfterMouseMove(e); - }, this.handleMouseLeave = function(e) { - var onMouseLeave = _this7.props.onMouseLeave, nextState = { - isTooltipActive: !1 - }; - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseLeave) && onMouseLeave(nextState, e); - }, this.handleOuterEvent = function(e) { - var eventName = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.l)(e); - if (eventName && __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(_this7.props[eventName])) { - var mouse = _this7.getMouseInfo(e); - (0, _this7.props[eventName])(mouse, e); - } - }, this.handleClick = function(e) { - var onClick = _this7.props.onClick; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onClick)) { - onClick(_this7.getMouseInfo(e), e); - } - }, this.handleMouseDown = function(e) { - var onMouseDown = _this7.props.onMouseDown; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseDown)) { - onMouseDown(_this7.getMouseInfo(e), e); - } - }, this.handleMouseUp = function(e) { - var onMouseUp = _this7.props.onMouseUp; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseUp)) { - onMouseUp(_this7.getMouseInfo(e), e); - } - }, this.handleTouchMove = function(e) { - null != e.changedTouches && e.changedTouches.length > 0 && _this7.handleMouseMove(e.changedTouches[0]); - }, this.verticalCoordinatesGenerator = function(_ref10) { - var xAxis = _ref10.xAxis, width = _ref10.width, height = _ref10.height, offset = _ref10.offset; - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.m)(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.getTicks(_extends({}, __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.defaultProps, xAxis, { - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(xAxis, !0), - viewBox: { - x: 0, - y: 0, - width: width, - height: height - } - })), offset.left, offset.left + offset.width); - }, this.horizontalCoordinatesGenerator = function(_ref11) { - var yAxis = _ref11.yAxis, width = _ref11.width, height = _ref11.height, offset = _ref11.offset; - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.m)(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.getTicks(_extends({}, __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.defaultProps, yAxis, { - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(yAxis, !0), - viewBox: { - x: 0, - y: 0, - width: width, - height: height - } - })), offset.top, offset.top + offset.height); - }, this.axesTicksGenerator = function(axis) { - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis, !0); - }, this.tooltipTicksGenerator = function(axisMap) { - var axis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(axisMap), tooltipTicks = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis, !1, !0); - return { - tooltipTicks: tooltipTicks, - orderedTooltipTicks: __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy___default()(tooltipTicks, function(o) { - return o.coordinate; - }), - tooltipAxis: axis, - tooltipAxisBandSize: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.g)(axis) - }; - }, this.renderCursor = function(element) { - var _state11 = _this7.state, isTooltipActive = _state11.isTooltipActive, activeCoordinate = _state11.activeCoordinate, activePayload = _state11.activePayload, offset = _state11.offset; - if (!(element && element.props.cursor && isTooltipActive && activeCoordinate)) return null; - var layout = _this7.props.layout, restProps = void 0, cursorComp = __WEBPACK_IMPORTED_MODULE_12__shape_Curve__.a; - if ("ScatterChart" === chartName) restProps = activeCoordinate, cursorComp = __WEBPACK_IMPORTED_MODULE_13__shape_Cross__.a; else if ("BarChart" === chartName) restProps = _this7.getCursorRectangle(), - cursorComp = __WEBPACK_IMPORTED_MODULE_16__shape_Rectangle__.a; else if ("radial" === layout) { - var _getCursorPoints = _this7.getCursorPoints(), cx = _getCursorPoints.cx, cy = _getCursorPoints.cy, radius = _getCursorPoints.radius, startAngle = _getCursorPoints.startAngle, endAngle = _getCursorPoints.endAngle; - restProps = { - cx: cx, - cy: cy, - startAngle: startAngle, - endAngle: endAngle, - innerRadius: radius, - outerRadius: radius - }, cursorComp = __WEBPACK_IMPORTED_MODULE_14__shape_Sector__.a; - } else restProps = { - points: _this7.getCursorPoints() - }, cursorComp = __WEBPACK_IMPORTED_MODULE_12__shape_Curve__.a; - var key = element.key || "_recharts-cursor", cursorProps = _extends({ - stroke: "#ccc" - }, offset, restProps, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(element.props.cursor), { - payload: activePayload, - key: key, - className: "recharts-tooltip-cursor" - }); - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.isValidElement)(element.props.cursor) ? Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element.props.cursor, cursorProps) : Object(__WEBPACK_IMPORTED_MODULE_5_react__.createElement)(cursorComp, cursorProps); - }, this.renderPolarAxis = function(element, displayName, index) { - var axisType = element.type.axisType, axisMap = _this7.state[axisType + "Map"], axisOption = axisMap[element.props[axisType + "Id"]]; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, _extends({}, axisOption, { - className: axisType, - key: element.key || displayName + "-" + index, - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axisOption, !0) - })); - }, this.renderXAxis = function(element, displayName, index) { - var xAxisMap = _this7.state.xAxisMap, axisObj = xAxisMap[element.props.xAxisId]; - return _this7.renderAxis(axisObj, element, displayName, index); - }, this.renderYAxis = function(element, displayName, index) { - var yAxisMap = _this7.state.yAxisMap, axisObj = yAxisMap[element.props.yAxisId]; - return _this7.renderAxis(axisObj, element, displayName, index); - }, this.renderGrid = function(element) { - var _state12 = _this7.state, xAxisMap = _state12.xAxisMap, yAxisMap = _state12.yAxisMap, offset = _state12.offset, _props6 = _this7.props, width = _props6.width, height = _props6.height, xAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(xAxisMap), yAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(yAxisMap), props = element.props || {}; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || "grid", - x: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.x) ? props.x : offset.left, - y: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.y) ? props.y : offset.top, - width: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.width) ? props.width : offset.width, - height: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.height) ? props.height : offset.height, - xAxis: xAxis, - yAxis: yAxis, - offset: offset, - chartWidth: width, - chartHeight: height, - verticalCoordinatesGenerator: _this7.verticalCoordinatesGenerator, - horizontalCoordinatesGenerator: _this7.horizontalCoordinatesGenerator - }); - }, this.renderPolarGrid = function(element) { - var _state13 = _this7.state, radiusAxisMap = _state13.radiusAxisMap, angleAxisMap = _state13.angleAxisMap, radiusAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(radiusAxisMap), angleAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(angleAxisMap), cx = angleAxis.cx, cy = angleAxis.cy, innerRadius = angleAxis.innerRadius, outerRadius = angleAxis.outerRadius; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - polarAngles: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(angleAxis, !0).map(function(entry) { - return entry.coordinate; - }), - polarRadius: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(radiusAxis, !0).map(function(entry) { - return entry.coordinate; - }), - cx: cx, - cy: cy, - innerRadius: innerRadius, - outerRadius: outerRadius, - key: element.key || "polar-grid" - }); - }, this.renderBrush = function(element) { - var _props7 = _this7.props, margin = _props7.margin, data = _props7.data, _state14 = _this7.state, offset = _state14.offset, dataStartIndex = _state14.dataStartIndex, dataEndIndex = _state14.dataEndIndex, updateId = _state14.updateId; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || "_recharts-brush", - onChange: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this7.handleBrushChange, null, element.props.onChange), - data: data, - x: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.x) ? element.props.x : offset.left, - y: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.y) ? element.props.y : offset.top + offset.height + offset.brushBottom - (margin.bottom || 0), - width: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.width) ? element.props.width : offset.width, - startIndex: dataStartIndex, - endIndex: dataEndIndex, - updateId: "brush-" + updateId - }); - }, this.renderReferenceElement = function(element, displayName, index) { - if (!element) return null; - var _state15 = _this7.state, xAxisMap = _state15.xAxisMap, yAxisMap = _state15.yAxisMap, offset = _state15.offset, _element$props = element.props, xAxisId = _element$props.xAxisId, yAxisId = _element$props.yAxisId; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || displayName + "-" + index, - xAxis: xAxisMap[xAxisId], - yAxis: yAxisMap[yAxisId], - viewBox: { - x: offset.left, - y: offset.top, - width: offset.width, - height: offset.height - } - }); - }, this.renderGraphicChild = function(element, displayName, index) { - var item = _this7.filterFormatItem(element, displayName, index); - if (!item) return null; - var graphicalItem = Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, item.props), _state16 = _this7.state, isTooltipActive = _state16.isTooltipActive, tooltipAxis = _state16.tooltipAxis, activeTooltipIndex = _state16.activeTooltipIndex, activeLabel = _state16.activeLabel, children = _this7.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a), _item$props2 = item.props, points = _item$props2.points, isRange = _item$props2.isRange, baseLine = _item$props2.baseLine, _item$item$props2 = item.item.props, activeDot = _item$item$props2.activeDot; - if (!_item$item$props2.hide && isTooltipActive && tooltipItem && activeDot && activeTooltipIndex >= 0) { - var activePoint = void 0, basePoint = void 0; - if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory ? (activePoint = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(points, "payload." + tooltipAxis.dataKey, activeLabel), - basePoint = isRange && baseLine && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(baseLine, "payload." + tooltipAxis.dataKey, activeLabel)) : (activePoint = points[activeTooltipIndex], - basePoint = isRange && baseLine && baseLine[activeTooltipIndex]), !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activePoint)) return [ graphicalItem ].concat(_toConsumableArray(_this7.renderActivePoints({ - item: item, - activePoint: activePoint, - basePoint: basePoint, - childIndex: activeTooltipIndex, - isRange: isRange - }))); - } - return isRange ? [ graphicalItem, null, null ] : [ graphicalItem, null ]; - }; - }, _temp; - }; - __webpack_exports__.a = generateCategoricalChart; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function invariant(condition, format, a, b, c, d, e, f) { - if (validateFormat(format), !condition) { - var error; - if (void 0 === format) error = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else { - var args = [ a, b, c, d, e, f ], argIndex = 0; - error = new Error(format.replace(/%s/g, function() { - return args[argIndex++]; - })), error.name = "Invariant Violation"; - } - throw error.framesToPop = 1, error; - } - } - var validateFormat = function(format) {}; - "production" !== process.env.NODE_ENV && (validateFormat = function(format) { - if (void 0 === format) throw new Error("invariant requires an error message argument"); - }), module.exports = invariant; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - function makeEmptyFunction(arg) { - return function() { - return arg; - }; - } - var emptyFunction = function() {}; - emptyFunction.thatReturns = makeEmptyFunction, emptyFunction.thatReturnsFalse = makeEmptyFunction(!1), - emptyFunction.thatReturnsTrue = makeEmptyFunction(!0), emptyFunction.thatReturnsNull = makeEmptyFunction(null), - emptyFunction.thatReturnsThis = function() { - return this; - }, emptyFunction.thatReturnsArgument = function(arg) { - return arg; - }, module.exports = emptyFunction; -}, function(module, exports, __webpack_require__) { - var aFunction = __webpack_require__(223); - module.exports = function(fn, that, length) { - if (aFunction(fn), void 0 === that) return fn; - switch (length) { - case 1: - return function(a) { - return fn.call(that, a); - }; - - case 2: - return function(a, b) { - return fn.call(that, a, b); - }; - - case 3: - return function(a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function() { - return fn.apply(that, arguments); - }; - }; -}, function(module, exports, __webpack_require__) { - var isObject = __webpack_require__(35); - module.exports = function(it) { - if (!isObject(it)) throw TypeError(it + " is not an object!"); - return it; - }; -}, function(module, exports) { - module.exports = function(exec) { - try { - return !!exec(); - } catch (e) { - return !0; - } - }; -}, function(module, exports) { - var hasOwnProperty = {}.hasOwnProperty; - module.exports = function(it, key) { - return hasOwnProperty.call(it, key); - }; -}, function(module, exports, __webpack_require__) { - module.exports = { - default: __webpack_require__(421), - __esModule: !0 - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function capitalize(string) { - if ("production" !== process.env.NODE_ENV && "string" != typeof string) throw new Error("Material-UI: capitalize(string) expects a string argument."); - return string.charAt(0).toUpperCase() + string.slice(1); - } - function contains(obj, pred) { - return (0, _keys2.default)(pred).every(function(key) { - return obj.hasOwnProperty(key) && obj[key] === pred[key]; - }); - } - function findIndex(arr, pred) { - for (var predType = void 0 === pred ? "undefined" : (0, _typeof3.default)(pred), i = 0; i < arr.length; i += 1) { - if ("function" === predType && !0 == !!pred(arr[i], i, arr)) return i; - if ("object" === predType && contains(arr[i], pred)) return i; - if (-1 !== [ "string", "number", "boolean" ].indexOf(predType)) return arr.indexOf(pred); - } - return -1; - } - function find(arr, pred) { - var index = findIndex(arr, pred); - return index > -1 ? arr[index] : void 0; - } - function createChainedFunction() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) funcs[_key] = arguments[_key]; - return funcs.filter(function(func) { - return null != func; - }).reduce(function(acc, func) { - return "production" !== process.env.NODE_ENV && (0, _warning2.default)("function" == typeof func, "Material-UI: invalid Argument Type, must only provide functions, undefined, or null."), - function() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2]; - acc.apply(this, args), func.apply(this, args); - }; - }, function() {}); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _typeof2 = __webpack_require__(105), _typeof3 = _interopRequireDefault(_typeof2), _keys = __webpack_require__(55), _keys2 = _interopRequireDefault(_keys); - exports.capitalize = capitalize, exports.contains = contains, exports.findIndex = findIndex, - exports.find = find, exports.createChainedFunction = createChainedFunction; - var _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; - } - var baseIsNative = __webpack_require__(611), getValue = __webpack_require__(614); - module.exports = getNative; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(x) { - return function() { - return x; - }; - }; -}, function(module, exports, __webpack_require__) { - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; - } - var baseIsNative = __webpack_require__(668), getValue = __webpack_require__(673); - module.exports = getNative; -}, function(module, exports, __webpack_require__) { - function baseGetTag(value) { - return null == value ? void 0 === value ? undefinedTag : nullTag : symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - var Symbol = __webpack_require__(128), getRawTag = __webpack_require__(669), objectToString = __webpack_require__(670), nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag = Symbol ? Symbol.toStringTag : void 0; - module.exports = baseGetTag; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _temp2, __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__), __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__), __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc__ = __webpack_require__(771), __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_reduce_css_calc__), __WEBPACK_IMPORTED_MODULE_4_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_4_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_classnames__), __WEBPACK_IMPORTED_MODULE_5__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__ = __webpack_require__(198), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/, calculateWordWidths = function(props) { - try { - return { - wordsWithComputedWidth: (__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(props.children) ? [] : props.children.toString().split(BREAKING_SPACES)).map(function(word) { - return { - word: word, - width: Object(__WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__.c)(word, props.style).width - }; - }), - spaceWidth: Object(__WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__.c)(" ", props.style).width - }; - } catch (e) { - return null; - } - }, Text = (_temp2 = _class = function(_Component) { - function Text() { - var _ref, _temp, _this, _ret; - _classCallCheck(this, Text); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; - return _temp = _this = _possibleConstructorReturn(this, (_ref = Text.__proto__ || Object.getPrototypeOf(Text)).call.apply(_ref, [ this ].concat(args))), - _this.state = { - wordsByLines: [] - }, _ret = _temp, _possibleConstructorReturn(_this, _ret); - } - return _inherits(Text, _Component), _createClass(Text, [ { - key: "componentWillMount", - value: function() { - this.updateWordsByLines(this.props, !0); - } - }, { - key: "componentWillReceiveProps", - value: function(nextProps) { - var needCalculate = this.props.children !== nextProps.children || this.props.style !== nextProps.style; - this.updateWordsByLines(nextProps, needCalculate); - } - }, { - key: "updateWordsByLines", - value: function(props, needCalculate) { - if (!props.width && !props.scaleToFit || Object(__WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.n)()) this.updateWordsWithoutCalculate(props); else { - if (needCalculate) { - var wordWidths = calculateWordWidths(props); - if (!wordWidths) return void this.updateWordsWithoutCalculate(props); - var wordsWithComputedWidth = wordWidths.wordsWithComputedWidth, spaceWidth = wordWidths.spaceWidth; - this.wordsWithComputedWidth = wordsWithComputedWidth, this.spaceWidth = spaceWidth; - } - var wordsByLines = this.calculateWordsByLines(this.wordsWithComputedWidth, this.spaceWidth, props.width); - this.setState({ - wordsByLines: wordsByLines - }); - } - } - }, { - key: "updateWordsWithoutCalculate", - value: function(props) { - var words = __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(props.children) ? [] : props.children.toString().split(BREAKING_SPACES); - this.setState({ - wordsByLines: [ { - words: words - } ] - }); - } - }, { - key: "calculateWordsByLines", - value: function(wordsWithComputedWidth, spaceWidth, lineWidth) { - var scaleToFit = this.props.scaleToFit; - return wordsWithComputedWidth.reduce(function(result, _ref2) { - var word = _ref2.word, width = _ref2.width, currentLine = result[result.length - 1]; - if (currentLine && (null == lineWidth || scaleToFit || currentLine.width + width + spaceWidth < lineWidth)) currentLine.words.push(word), - currentLine.width += width + spaceWidth; else { - var newLine = { - words: [ word ], - width: width - }; - result.push(newLine); - } - return result; - }, []); - } - }, { - key: "render", - value: function() { - var _props = this.props, dx = _props.dx, dy = _props.dy, textAnchor = _props.textAnchor, verticalAnchor = _props.verticalAnchor, scaleToFit = _props.scaleToFit, angle = _props.angle, lineHeight = _props.lineHeight, capHeight = _props.capHeight, className = _props.className, textProps = _objectWithoutProperties(_props, [ "dx", "dy", "textAnchor", "verticalAnchor", "scaleToFit", "angle", "lineHeight", "capHeight", "className" ]), wordsByLines = this.state.wordsByLines; - if (!Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.g)(textProps.x) || !Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.g)(textProps.y)) return null; - var x = textProps.x + (Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.h)(dx) ? dx : 0), y = textProps.y + (Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.h)(dy) ? dy : 0), startDy = void 0; - switch (verticalAnchor) { - case "start": - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + capHeight + ")"); - break; - - case "middle": - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + (wordsByLines.length - 1) / 2 + " * -" + lineHeight + " + (" + capHeight + " / 2))"); - break; - - default: - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + (wordsByLines.length - 1) + " * -" + lineHeight + ")"); - } - var transforms = []; - if (scaleToFit) { - var lineWidth = wordsByLines[0].width; - transforms.push("scale(" + this.props.width / lineWidth + ")"); - } - return angle && transforms.push("rotate(" + angle + ", " + x + ", " + y + ")"), - transforms.length && (textProps.transform = transforms.join(" ")), __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement("text", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.k)(textProps), { - x: x, - y: y, - className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()("recharts-text", className), - textAnchor: textAnchor - }), wordsByLines.map(function(line, index) { - return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement("tspan", { - x: x, - dy: 0 === index ? startDy : lineHeight, - key: index - }, line.words.join(" ")); - })); - } - } ]), Text; - }(__WEBPACK_IMPORTED_MODULE_1_react__.Component), _class.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.c, { - scaleToFit: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.bool, - angle: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.number, - textAnchor: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.oneOf([ "start", "middle", "end", "inherit" ]), - verticalAnchor: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.oneOf([ "start", "middle", "end" ]), - style: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.object - }), _class.defaultProps = { - x: 0, - y: 0, - lineHeight: "1em", - capHeight: "0.71em", - scaleToFit: !1, - textAnchor: "start", - verticalAnchor: "end" - }, _temp2); - __webpack_exports__.a = Text; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "a", function() { - return map; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return slice; - }); - var array = Array.prototype, map = array.map, slice = array.slice; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), Dot = Object(__WEBPACK_IMPORTED_MODULE_3__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function Dot() { - return _classCallCheck(this, Dot), _possibleConstructorReturn(this, (Dot.__proto__ || Object.getPrototypeOf(Dot)).apply(this, arguments)); - } - return _inherits(Dot, _Component), _createClass(Dot, [ { - key: "render", - value: function() { - var _props = this.props, cx = _props.cx, cy = _props.cy, r = _props.r, className = _props.className, layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-dot", className); - return cx === +cx && cy === +cy && r === +r ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("circle", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__.e)(this.props, null, !0), { - className: layerClass, - cx: cx, - cy: cy, - r: r - })) : null; - } - } ]), Dot; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "Dot", _class2.propTypes = { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - cx: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - cy: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - r: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }, _class = _temp)) || _class; - __webpack_exports__.a = Dot; -}, function(module, exports, __webpack_require__) { - var IObject = __webpack_require__(146), defined = __webpack_require__(148); - module.exports = function(it) { - return IObject(defined(it)); - }; -}, function(module, exports, __webpack_require__) { - var defined = __webpack_require__(148); - module.exports = function(it) { - return Object(defined(it)); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning), _toCss = __webpack_require__(163), _toCss2 = _interopRequireDefault(_toCss), _toCssValue = __webpack_require__(110), _toCssValue2 = _interopRequireDefault(_toCssValue), StyleRule = function() { - function StyleRule(key, style, options) { - _classCallCheck(this, StyleRule), this.type = "style", this.isProcessed = !1; - var sheet = options.sheet, Renderer = options.Renderer, selector = options.selector; - this.key = key, this.options = options, this.style = style, selector && (this.selectorText = selector), - this.renderer = sheet ? sheet.renderer : new Renderer(); - } - return _createClass(StyleRule, [ { - key: "prop", - value: function(name, value) { - if (void 0 === value) return this.style[name]; - if (this.style[name] === value) return this; - value = this.options.jss.plugins.onChangeValue(value, name, this); - var isEmpty = null == value || !1 === value, isDefined = name in this.style; - if (isEmpty && !isDefined) return this; - var remove = isEmpty && isDefined; - if (remove ? delete this.style[name] : this.style[name] = value, this.renderable) return remove ? this.renderer.removeProperty(this.renderable, name) : this.renderer.setProperty(this.renderable, name, value), - this; - var sheet = this.options.sheet; - return sheet && sheet.attached && (0, _warning2.default)(!1, 'Rule is not linked. Missing sheet option "link: true".'), - this; - } - }, { - key: "applyTo", - value: function(renderable) { - var json = this.toJSON(); - for (var prop in json) this.renderer.setProperty(renderable, prop, json[prop]); - return this; - } - }, { - key: "toJSON", - value: function() { - var json = {}; - for (var prop in this.style) { - var value = this.style[prop]; - "object" !== (void 0 === value ? "undefined" : _typeof(value)) ? json[prop] = value : Array.isArray(value) && (json[prop] = (0, - _toCssValue2.default)(value)); - } - return json; - } - }, { - key: "toString", - value: function(options) { - var sheet = this.options.sheet, link = !!sheet && sheet.options.link, opts = link ? _extends({}, options, { - allowEmpty: !0 - }) : options; - return (0, _toCss2.default)(this.selector, this.style, opts); - } - }, { - key: "selector", - set: function(selector) { - if (selector !== this.selectorText && (this.selectorText = selector, this.renderable)) { - if (!this.renderer.setSelector(this.renderable, selector) && this.renderable) { - var renderable = this.renderer.replaceRule(this.renderable, this); - renderable && (this.renderable = renderable); - } - } - }, - get: function() { - return this.selectorText; - } - } ]), StyleRule; - }(); - exports.default = StyleRule; -}, function(module, exports, __webpack_require__) { - function isSymbol(value) { - return "symbol" == typeof value || isObjectLike(value) && baseGetTag(value) == symbolTag; - } - var baseGetTag = __webpack_require__(41), isObjectLike = __webpack_require__(42), symbolTag = "[object Symbol]"; - module.exports = isSymbol; -}, function(module, exports) { - function identity(value) { - return value; - } - module.exports = identity; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp2, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3_react_smooth__ = __webpack_require__(33), __WEBPACK_IMPORTED_MODULE_3_react_smooth___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react_smooth__), __WEBPACK_IMPORTED_MODULE_4__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), getRectangePath = function(x, y, width, height, radius) { - var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2), sign = height >= 0 ? 1 : -1, clockWise = height >= 0 ? 1 : 0, path = void 0; - if (maxRadius > 0 && radius instanceof Array) { - for (var newRadius = [], i = 0; i < 4; i++) newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i]; - path = "M" + x + "," + (y + sign * newRadius[0]), newRadius[0] > 0 && (path += "A " + newRadius[0] + "," + newRadius[0] + ",0,0," + clockWise + "," + (x + newRadius[0]) + "," + y), - path += "L " + (x + width - newRadius[1]) + "," + y, newRadius[1] > 0 && (path += "A " + newRadius[1] + "," + newRadius[1] + ",0,0," + clockWise + ",\n " + (x + width) + "," + (y + sign * newRadius[1])), - path += "L " + (x + width) + "," + (y + height - sign * newRadius[2]), newRadius[2] > 0 && (path += "A " + newRadius[2] + "," + newRadius[2] + ",0,0," + clockWise + ",\n " + (x + width - newRadius[2]) + "," + (y + height)), - path += "L " + (x + newRadius[3]) + "," + (y + height), newRadius[3] > 0 && (path += "A " + newRadius[3] + "," + newRadius[3] + ",0,0," + clockWise + ",\n " + x + "," + (y + height - sign * newRadius[3])), - path += "Z"; - } else if (maxRadius > 0 && radius === +radius && radius > 0) { - var _newRadius = Math.min(maxRadius, radius); - path = "M " + x + "," + (y + sign * _newRadius) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + _newRadius) + "," + y + "\n L " + (x + width - _newRadius) + "," + y + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + width) + "," + (y + sign * _newRadius) + "\n L " + (x + width) + "," + (y + height - sign * _newRadius) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + width - _newRadius) + "," + (y + height) + "\n L " + (x + _newRadius) + "," + (y + height) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + x + "," + (y + height - sign * _newRadius) + " Z"; - } else path = "M " + x + "," + y + " h " + width + " v " + height + " h " + -width + " Z"; - return path; - }, Rectangle = Object(__WEBPACK_IMPORTED_MODULE_4__util_PureRender__.a)((_temp2 = _class2 = function(_Component) { - function Rectangle() { - var _ref, _temp, _this, _ret; - _classCallCheck(this, Rectangle); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; - return _temp = _this = _possibleConstructorReturn(this, (_ref = Rectangle.__proto__ || Object.getPrototypeOf(Rectangle)).call.apply(_ref, [ this ].concat(args))), - _this.state = { - totalLength: -1 - }, _ret = _temp, _possibleConstructorReturn(_this, _ret); - } - return _inherits(Rectangle, _Component), _createClass(Rectangle, [ { - key: "componentDidMount", - value: function() { - if (this.node && this.node.getTotalLength) try { - var totalLength = this.node.getTotalLength(); - totalLength && this.setState({ - totalLength: totalLength - }); - } catch (err) {} - } - }, { - key: "render", - value: function() { - var _this2 = this, _props = this.props, x = _props.x, y = _props.y, width = _props.width, height = _props.height, radius = _props.radius, className = _props.className, totalLength = this.state.totalLength, _props2 = this.props, animationEasing = _props2.animationEasing, animationDuration = _props2.animationDuration, animationBegin = _props2.animationBegin, isAnimationActive = _props2.isAnimationActive, isUpdateAnimationActive = _props2.isUpdateAnimationActive; - if (x !== +x || y !== +y || width !== +width || height !== +height || 0 === width || 0 === height) return null; - var layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-rectangle", className); - return isUpdateAnimationActive ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_smooth___default.a, { - canBegin: totalLength > 0, - from: { - width: width, - height: height, - x: x, - y: y - }, - to: { - width: width, - height: height, - x: x, - y: y - }, - duration: animationDuration, - animationEasing: animationEasing, - isActive: isUpdateAnimationActive - }, function(_ref2) { - var currWidth = _ref2.width, currHeight = _ref2.height, currX = _ref2.x, currY = _ref2.y; - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_smooth___default.a, { - canBegin: totalLength > 0, - from: "0px " + (-1 === totalLength ? 1 : totalLength) + "px", - to: totalLength + "px 0px", - attributeName: "strokeDasharray", - begin: animationBegin, - duration: animationDuration, - isActive: isAnimationActive, - easing: animationEasing - }, __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.k)(_this2.props), Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.e)(_this2.props), { - className: layerClass, - d: getRectangePath(currX, currY, currWidth, currHeight, radius), - ref: function(node) { - _this2.node = node; - } - }))); - }) : __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.e)(this.props), { - className: layerClass, - d: getRectangePath(x, y, width, height, radius) - })); - } - } ]), Rectangle; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "Rectangle", - _class2.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.c, __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.a, { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - x: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - radius: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array ]), - isAnimationActive: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - isUpdateAnimationActive: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - animationBegin: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - animationDuration: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - animationEasing: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "ease", "ease-in", "ease-out", "ease-in-out", "linear" ]) - }), _class2.defaultProps = { - x: 0, - y: 0, - width: 0, - height: 0, - radius: 0, - isAnimationActive: !1, - isUpdateAnimationActive: !1, - animationBegin: 0, - animationDuration: 1500, - animationEasing: "ease" - }, _class = _temp2)) || _class; - __webpack_exports__.a = Rectangle; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_0_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__), __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__), __WEBPACK_IMPORTED_MODULE_4_d3_shape__ = __webpack_require__(182), __WEBPACK_IMPORTED_MODULE_5_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_5_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_classnames__), __WEBPACK_IMPORTED_MODULE_6__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_8__util_DataUtils__ = __webpack_require__(9), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), CURVE_FACTORIES = { - curveBasisClosed: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.c, - curveBasisOpen: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.d, - curveBasis: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.b, - curveLinearClosed: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.f, - curveLinear: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.e, - curveMonotoneX: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.g, - curveMonotoneY: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.h, - curveNatural: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.i, - curveStep: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.j, - curveStepAfter: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.k, - curveStepBefore: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.l - }, defined = function(p) { - return p.x === +p.x && p.y === +p.y; - }, getX = function(p) { - return p.x; - }, getY = function(p) { - return p.y; - }, getCurveFactory = function(type, layout) { - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(type)) return type; - var name = "curve" + type.slice(0, 1).toUpperCase() + type.slice(1); - return "curveMonotone" === name && layout ? CURVE_FACTORIES[name + ("vertical" === layout ? "Y" : "X")] : CURVE_FACTORIES[name] || __WEBPACK_IMPORTED_MODULE_4_d3_shape__.e; - }, Curve = Object(__WEBPACK_IMPORTED_MODULE_6__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function Curve() { - return _classCallCheck(this, Curve), _possibleConstructorReturn(this, (Curve.__proto__ || Object.getPrototypeOf(Curve)).apply(this, arguments)); - } - return _inherits(Curve, _Component), _createClass(Curve, [ { - key: "getPath", - value: function() { - var _props = this.props, type = _props.type, points = _props.points, baseLine = _props.baseLine, layout = _props.layout, connectNulls = _props.connectNulls, curveFactory = getCurveFactory(type, layout), formatPoints = connectNulls ? points.filter(function(entry) { - return defined(entry); - }) : points, lineFunction = void 0; - if (__WEBPACK_IMPORTED_MODULE_0_lodash_isArray___default()(baseLine)) { - var areaPoints = formatPoints.map(function(entry, index) { - return _extends({}, entry, { - base: baseLine[index] }); - }); - return lineFunction = "vertical" === layout ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().y(getY).x1(getX).x0(function(d) { - return d.base.x; - }) : Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().x(getX).y1(getY).y0(function(d) { - return d.base.y; - }), lineFunction.defined(defined).curve(curveFactory), lineFunction(areaPoints); + }), _defineProperty(_assertThisInitialized(t), "changeContent", function(e) { + t.setState(function(t) { + return t.active !== e ? { + active: e + } : {}; + }); + }), _defineProperty(_assertThisInitialized(t), "switchSideBar", function() { + t.setState(function(e) { + return { + sideBar: !e.sideBar + }; + }); + }), t.state = { + active: _common__WEBPACK_IMPORTED_MODULE_7__.b.get("home").id, + sideBar: !0, + content: defaultContent(), + shouldUpdate: {}, + server: null + }, t; } - return lineFunction = "vertical" === layout && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(baseLine) ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().y(getY).x1(getX).x0(baseLine) : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(baseLine) ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().x(getX).y1(getY).y0(baseLine) : Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.m)().x(getX).y(getY), - lineFunction.defined(defined).curve(curveFactory), lineFunction(formatPoints); - } - }, { - key: "render", - value: function() { - var _props2 = this.props, className = _props2.className, points = _props2.points, path = _props2.path, pathRef = _props2.pathRef; - if (!(points && points.length || path)) return null; - var realPath = points && points.length ? this.getPath() : path; - return __WEBPACK_IMPORTED_MODULE_2_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.e)(this.props, null, !0), { - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-curve", className), - d: realPath, - ref: pathRef - })); - } - } ]), Curve; - }(__WEBPACK_IMPORTED_MODULE_2_react__.Component), _class2.displayName = "Curve", - _class2.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.c, { - className: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string, - type: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOf([ "basis", "basisClosed", "basisOpen", "linear", "linearClosed", "natural", "monotoneX", "monotoneY", "monotone", "step", "stepBefore", "stepAfter" ]), __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func ]), - layout: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOf([ "horizontal", "vertical" ]), - baseLine: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.array ]), - points: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object), - connectNulls: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.bool, - path: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string, - pathRef: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func - }), _class2.defaultProps = { - type: "linear", - points: [], - connectNulls: !1 - }, _class = _temp)) || _class; - __webpack_exports__.a = Curve; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(1)), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), XAxis = Object(__WEBPACK_IMPORTED_MODULE_2__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function XAxis() { - return _classCallCheck(this, XAxis), _possibleConstructorReturn(this, (XAxis.__proto__ || Object.getPrototypeOf(XAxis)).apply(this, arguments)); - } - return _inherits(XAxis, _Component), _createClass(XAxis, [ { - key: "render", - value: function() { - return null; - } - } ]), XAxis; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "XAxis", - _class2.propTypes = { - allowDecimals: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - allowDuplicatedCategory: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - hide: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - name: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - unit: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - xAxisId: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - domain: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "dataMin", "dataMax" ]) ])), - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - mirror: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - orientation: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "top", "bottom" ]), - type: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "number", "category" ]), - ticks: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - tickCount: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - padding: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - left: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - right: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - allowDataOverflow: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - scale: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.d), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - tick: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.element ]), - axisLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - tickLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - minTickGap: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickSize: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - interval: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "preserveStart", "preserveEnd", "preserveStartEnd" ]) ]), - reversed: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool - }, _class2.defaultProps = { - allowDecimals: !0, - hide: !1, - orientation: "bottom", - width: 0, - height: 30, - mirror: !1, - xAxisId: 0, - tickCount: 5, - type: "category", - domain: [ 0, "auto" ], - padding: { - left: 0, - right: 0 - }, - allowDataOverflow: !1, - scale: "auto", - reversed: !1, - allowDuplicatedCategory: !0 - }, _class = _temp)) || _class; - __webpack_exports__.a = XAxis; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(1)), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__util_PureRender__ = __webpack_require__(5), _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), YAxis = Object(__WEBPACK_IMPORTED_MODULE_2__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function YAxis() { - return _classCallCheck(this, YAxis), _possibleConstructorReturn(this, (YAxis.__proto__ || Object.getPrototypeOf(YAxis)).apply(this, arguments)); - } - return _inherits(YAxis, _Component), _createClass(YAxis, [ { - key: "render", - value: function() { - return null; - } - } ]), YAxis; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "YAxis", - _class2.propTypes = { - allowDecimals: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - allowDuplicatedCategory: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - hide: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - name: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - unit: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - yAxisId: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - domain: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "dataMin", "dataMax" ]) ])), - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - ticks: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - tickCount: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - mirror: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - orientation: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "left", "right" ]), - type: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "number", "category" ]), - padding: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - top: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - bottom: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - allowDataOverflow: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - scale: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "linear", "pow", "sqrt", "log", "identity", "time", "band", "point", "ordinal", "quantile", "quantize", "utcTime", "sequential", "threshold" ]), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - tick: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.element ]), - axisLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - tickLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - minTickGap: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickSize: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - interval: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "preserveStart", "preserveEnd", "preserveStartEnd" ]) ]), - reversed: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool - }, _class2.defaultProps = { - allowDuplicatedCategory: !0, - allowDecimals: !0, - hide: !1, - orientation: "left", - width: 60, - height: 0, - mirror: !1, - yAxisId: 0, - tickCount: 5, - type: "number", - domain: [ 0, "auto" ], - padding: { - top: 0, - bottom: 0 - }, - allowDataOverflow: !1, - scale: "auto", - reversed: !1 - }, _class = _temp)) || _class; - __webpack_exports__.a = YAxis; -}, function(module, exports, __webpack_require__) { - "use strict"; - function toObject(val) { - if (null === val || void 0 === val) throw new TypeError("Object.assign cannot be called with null or undefined"); - return Object(val); - } - var getOwnPropertySymbols = Object.getOwnPropertySymbols, hasOwnProperty = Object.prototype.hasOwnProperty, propIsEnumerable = Object.prototype.propertyIsEnumerable; - module.exports = function() { - try { - if (!Object.assign) return !1; - var test1 = new String("abc"); - if (test1[5] = "de", "5" === Object.getOwnPropertyNames(test1)[0]) return !1; - for (var test2 = {}, i = 0; i < 10; i++) test2["_" + String.fromCharCode(i)] = i; - if ("0123456789" !== Object.getOwnPropertyNames(test2).map(function(n) { - return test2[n]; - }).join("")) return !1; - var test3 = {}; - return "abcdefghijklmnopqrst".split("").forEach(function(letter) { - test3[letter] = letter; - }), "abcdefghijklmnopqrst" === Object.keys(Object.assign({}, test3)).join(""); - } catch (err) { - return !1; - } - }() ? Object.assign : function(target, source) { - for (var from, symbols, to = toObject(target), s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - for (var key in from) hasOwnProperty.call(from, key) && (to[key] = from[key]); - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) propIsEnumerable.call(from, symbols[i]) && (to[symbols[i]] = from[symbols[i]]); - } - } - return to; - }; -}, function(module, exports) { - module.exports = function(bitmap, value) { - return { - enumerable: !(1 & bitmap), - configurable: !(2 & bitmap), - writable: !(4 & bitmap), - value: value - }; - }; -}, function(module, exports, __webpack_require__) { - var $keys = __webpack_require__(226), enumBugKeys = __webpack_require__(152); - module.exports = Object.keys || function(O) { - return $keys(O, enumBugKeys); - }; -}, function(module, exports) { - module.exports = {}; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function createBreakpoints(breakpoints) { - function up(key) { - return "@media (min-width:" + ("number" == typeof values[key] ? values[key] : key) + unit + ")"; - } - function down(key) { - var endIndex = keys.indexOf(key) + 1, upperbound = values[keys[endIndex]]; - return endIndex === keys.length ? up("xs") : "@media (max-width:" + (("number" == typeof upperbound && endIndex > 0 ? upperbound : key) - step / 100) + unit + ")"; - } - function between(start, end) { - var endIndex = keys.indexOf(end) + 1; - return endIndex === keys.length ? up(start) : "@media (min-width:" + values[start] + unit + ") and (max-width:" + (values[keys[endIndex]] - step / 100) + unit + ")"; - } - function only(key) { - return between(key, key); - } - function width(key) { - return values[key]; - } - var _breakpoints$values = breakpoints.values, values = void 0 === _breakpoints$values ? { - xs: 0, - sm: 600, - md: 960, - lg: 1280, - xl: 1920 - } : _breakpoints$values, _breakpoints$unit = breakpoints.unit, unit = void 0 === _breakpoints$unit ? "px" : _breakpoints$unit, _breakpoints$step = breakpoints.step, step = void 0 === _breakpoints$step ? 5 : _breakpoints$step, other = (0, - _objectWithoutProperties3.default)(breakpoints, [ "values", "unit", "step" ]); - return (0, _extends3.default)({ - keys: keys, - values: values, - up: up, - down: down, - between: between, - only: only, - width: width - }, other); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }), exports.keys = void 0; - var _extends2 = __webpack_require__(6), _extends3 = _interopRequireDefault(_extends2), _objectWithoutProperties2 = __webpack_require__(7), _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); - exports.default = createBreakpoints; - var keys = exports.keys = [ "xs", "sm", "md", "lg", "xl" ]; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _getDisplayName = __webpack_require__(244), _getDisplayName2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_getDisplayName), wrapDisplayName = function(BaseComponent, hocName) { - return hocName + "(" + (0, _getDisplayName2.default)(BaseComponent) + ")"; - }; - exports.default = wrapDisplayName; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), _createRule = __webpack_require__(111), _createRule2 = _interopRequireDefault(_createRule), _linkRule = __webpack_require__(249), _linkRule2 = _interopRequireDefault(_linkRule), _StyleRule = __webpack_require__(66), _StyleRule2 = _interopRequireDefault(_StyleRule), _escape = __webpack_require__(467), _escape2 = _interopRequireDefault(_escape), RuleList = function() { - function RuleList(options) { - _classCallCheck(this, RuleList), this.map = {}, this.raw = {}, this.index = [], - this.options = options, this.classes = options.classes; - } - return _createClass(RuleList, [ { - key: "add", - value: function(name, decl, options) { - var _options = this.options, parent = _options.parent, sheet = _options.sheet, jss = _options.jss, Renderer = _options.Renderer, generateClassName = _options.generateClassName; - options = _extends({ - classes: this.classes, - parent: parent, - sheet: sheet, - jss: jss, - Renderer: Renderer, - generateClassName: generateClassName - }, options), !options.selector && this.classes[name] && (options.selector = "." + (0, - _escape2.default)(this.classes[name])), this.raw[name] = decl; - var rule = (0, _createRule2.default)(name, decl, options), className = void 0; - !options.selector && rule instanceof _StyleRule2.default && (className = generateClassName(rule, sheet), - rule.selector = "." + (0, _escape2.default)(className)), this.register(rule, className); - var index = void 0 === options.index ? this.index.length : options.index; - return this.index.splice(index, 0, rule), rule; - } - }, { - key: "get", - value: function(name) { - return this.map[name]; - } - }, { - key: "remove", - value: function(rule) { - this.unregister(rule), this.index.splice(this.indexOf(rule), 1); - } - }, { - key: "indexOf", - value: function(rule) { - return this.index.indexOf(rule); - } - }, { - key: "process", - value: function() { - var plugins = this.options.jss.plugins; - this.index.slice(0).forEach(plugins.onProcessRule, plugins); - } - }, { - key: "register", - value: function(rule, className) { - this.map[rule.key] = rule, rule instanceof _StyleRule2.default && (this.map[rule.selector] = rule, - className && (this.classes[rule.key] = className)); - } - }, { - key: "unregister", - value: function(rule) { - delete this.map[rule.key], rule instanceof _StyleRule2.default && (delete this.map[rule.selector], - delete this.classes[rule.key]); - } - }, { - key: "update", - value: function(name, data) { - var _options2 = this.options, plugins = _options2.jss.plugins, sheet = _options2.sheet; - if ("string" == typeof name) return void plugins.onUpdate(data, this.get(name), sheet); - for (var index = 0; index < this.index.length; index++) plugins.onUpdate(name, this.index[index], sheet); - } - }, { - key: "link", - value: function(cssRules) { - for (var map = this.options.sheet.renderer.getUnescapedKeysMap(this.index), i = 0; i < cssRules.length; i++) { - var cssRule = cssRules[i], _key = this.options.sheet.renderer.getKey(cssRule); - map[_key] && (_key = map[_key]); - var rule = this.map[_key]; - rule && (0, _linkRule2.default)(rule, cssRule); - } - } - }, { - key: "toString", - value: function(options) { - for (var str = "", sheet = this.options.sheet, link = !!sheet && sheet.options.link, index = 0; index < this.index.length; index++) { - var rule = this.index[index], css = rule.toString(options); - (css || link) && (str && (str += "\n"), str += css); - } - return str; - } - } ]), RuleList; - }(); - exports.default = RuleList; -}, function(module, exports, __webpack_require__) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, menuSkeletons = [ { - id: "home", - menu: { - title: "Home", - icon: "home" - } - }, { - id: "chain", - menu: { - title: "Chain", - icon: "link" - } - }, { - id: "txpool", - menu: { - title: "TxPool", - icon: "credit-card" - } - }, { - id: "network", - menu: { - title: "Network", - icon: "globe" - } - }, { - id: "system", - menu: { - title: "System", - icon: "tachometer" - } - }, { - id: "logs", - menu: { - title: "Logs", - icon: "list" - } - } ]; - exports.MENU = new Map(menuSkeletons.map(function(_ref) { - var id = _ref.id, menu = _ref.menu; - return [ id, _extends({ - id: id - }, menu) ]; - })), exports.DURATION = 200, exports.styles = { - light: { - color: "rgba(255, 255, 255, 0.54)" - } - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function Surface(props) { - var children = props.children, width = props.width, height = props.height, viewBox = props.viewBox, className = props.className, style = props.style, others = _objectWithoutProperties(props, [ "children", "width", "height", "viewBox", "className", "style" ]), svgView = viewBox || { - width: width, - height: height, - x: 0, - y: 0 - }, layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-surface", className), attrs = Object(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.k)(others); - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("svg", _extends({}, attrs, { - className: layerClass, - width: width, - height: height, - style: style, - viewBox: svgView.x + " " + svgView.y + " " + svgView.width + " " + svgView.height, - version: "1.1" - }), children); - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number.isRequired, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number.isRequired, - viewBox: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - x: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - style: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node ]) - }; - Surface.propTypes = propTypes, __webpack_exports__.a = Surface; -}, function(module, exports, __webpack_require__) { - var root = __webpack_require__(31), Symbol = root.Symbol; - module.exports = Symbol; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_path__ = __webpack_require__(633); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_path__.a; - }); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); - } - function asin(x) { - return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return abs; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return atan2; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return cos; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return max; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return min; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return sin; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return sqrt; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return epsilon; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return pi; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return halfPi; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return tau; - }), __webpack_exports__.b = acos, __webpack_exports__.c = asin; - var abs = Math.abs, atan2 = Math.atan2, cos = Math.cos, max = Math.max, min = Math.min, sin = Math.sin, sqrt = Math.sqrt, epsilon = 1e-12, pi = Math.PI, halfPi = pi / 2, tau = 2 * pi; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(series, order) { - if ((n = series.length) > 1) for (var j, s0, n, i = 1, s1 = series[order[0]], m = s1.length; i < n; ++i) for (s0 = s1, - s1 = series[order[i]], j = 0; j < m; ++j) s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(series) { - for (var n = series.length, o = new Array(n); --n >= 0; ) o[n] = n; - return o; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function Cell() { - return null; - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1__util_ReactUtils__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(4)), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }; - Cell.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_1__util_ReactUtils__.c), - Cell.displayName = "Cell", __webpack_exports__.a = Cell; -}, function(module, exports, __webpack_require__) { - function baseIteratee(value) { - return "function" == typeof value ? value : null == value ? identity : "object" == typeof value ? isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value) : property(value); - } - var baseMatches = __webpack_require__(815), baseMatchesProperty = __webpack_require__(818), identity = __webpack_require__(68), isArray = __webpack_require__(13), property = __webpack_require__(822); - module.exports = baseIteratee; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(x) { - return null === x ? NaN : +x; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function linearish(scale) { - var domain = scale.domain; - return scale.ticks = function(count) { - var d = domain(); - return Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.h)(d[0], d[d.length - 1], null == count ? 10 : count); - }, scale.tickFormat = function(count, specifier) { - return Object(__WEBPACK_IMPORTED_MODULE_3__tickFormat__.a)(domain(), count, specifier); - }, scale.nice = function(count) { - null == count && (count = 10); - var step, d = domain(), i0 = 0, i1 = d.length - 1, start = d[i0], stop = d[i1]; - return stop < start && (step = start, start = stop, stop = step, step = i0, i0 = i1, - i1 = step), step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count), - step > 0 ? (start = Math.floor(start / step) * step, stop = Math.ceil(stop / step) * step, - step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count)) : step < 0 && (start = Math.ceil(start * step) / step, - stop = Math.floor(stop * step) / step, step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count)), - step > 0 ? (d[i0] = Math.floor(start / step) * step, d[i1] = Math.ceil(stop / step) * step, - domain(d)) : step < 0 && (d[i0] = Math.ceil(start * step) / step, d[i1] = Math.floor(stop * step) / step, - domain(d)), scale; - }, scale; - } - function linear() { - var scale = Object(__WEBPACK_IMPORTED_MODULE_2__continuous__.b)(__WEBPACK_IMPORTED_MODULE_2__continuous__.c, __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__.c); - return scale.copy = function() { - return Object(__WEBPACK_IMPORTED_MODULE_2__continuous__.a)(scale, linear()); - }, linearish(scale); - } - __webpack_exports__.b = linearish, __webpack_exports__.a = linear; - var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(37), __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(92), __WEBPACK_IMPORTED_MODULE_2__continuous__ = __webpack_require__(137), __WEBPACK_IMPORTED_MODULE_3__tickFormat__ = __webpack_require__(883); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_value__ = __webpack_require__(206); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_value__.a; - }); - var __WEBPACK_IMPORTED_MODULE_5__src_number__ = (__webpack_require__(349), __webpack_require__(209), - __webpack_require__(347), __webpack_require__(350), __webpack_require__(136)); - __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_5__src_number__.a; - }); - var __WEBPACK_IMPORTED_MODULE_7__src_round__ = (__webpack_require__(351), __webpack_require__(873)); - __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_7__src_round__.a; - }); - var __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__ = (__webpack_require__(352), __webpack_require__(874), - __webpack_require__(877), __webpack_require__(346), __webpack_require__(878), __webpack_require__(879), - __webpack_require__(880), __webpack_require__(881)); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__.a; - }); - __webpack_require__(882); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function linear(a, d) { - return function(t) { - return a + t * d; - }; - } - function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; - } - function hue(a, b) { - var d = b - a; - return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - } - function gamma(y) { - return 1 == (y = +y) ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - }; - } - function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - } - __webpack_exports__.c = hue, __webpack_exports__.b = gamma, __webpack_exports__.a = nogamma; - var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(348); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(s) { - return s.match(/.{6}/g).map(function(x) { - return "#" + x; - }); - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), ErrorBar = (_temp = _class = function(_Component) { - function ErrorBar() { - return _classCallCheck(this, ErrorBar), _possibleConstructorReturn(this, (ErrorBar.__proto__ || Object.getPrototypeOf(ErrorBar)).apply(this, arguments)); - } - return _inherits(ErrorBar, _Component), _createClass(ErrorBar, [ { - key: "renderErrorBars", - value: function() { - var _props = this.props, offset = _props.offset, layout = _props.layout, width = _props.width, dataKey = _props.dataKey, data = _props.data, dataPointFormatter = _props.dataPointFormatter, xAxis = _props.xAxis, yAxis = _props.yAxis, others = _objectWithoutProperties(_props, [ "offset", "layout", "width", "dataKey", "data", "dataPointFormatter", "xAxis", "yAxis" ]), props = Object(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.k)(others); - return data.map(function(entry, i) { - var _dataPointFormatter = dataPointFormatter(entry, dataKey), x = _dataPointFormatter.x, y = _dataPointFormatter.y, value = _dataPointFormatter.value, errorVal = _dataPointFormatter.errorVal; - if (!errorVal) return null; - var xMid = void 0, yMid = void 0, xMin = void 0, yMin = void 0, xMax = void 0, yMax = void 0, scale = void 0, coordsTop = void 0, coordsMid = void 0, coordsBot = void 0, lowBound = void 0, highBound = void 0; - return Array.isArray(errorVal) ? (lowBound = errorVal[0], highBound = errorVal[1]) : (lowBound = errorVal, - highBound = errorVal), "vertical" === layout ? (scale = xAxis.scale, xMid = value, - yMid = y + offset, xMin = scale(xMid - lowBound), yMin = yMid + width, xMax = scale(xMid + highBound), - yMax = yMid - width, coordsTop = { - x1: xMax, - y1: yMin, - x2: xMax, - y2: yMax - }, coordsMid = { - x1: xMin, - y1: yMid, - x2: xMax, - y2: yMid - }, coordsBot = { - x1: xMin, - y1: yMin, - x2: xMin, - y2: yMax - }) : "horizontal" === layout && (scale = yAxis.scale, xMid = x + offset, yMid = value, - xMin = xMid - width, xMax = xMid + width, yMin = scale(yMid - lowBound), yMax = scale(yMid + highBound), - coordsTop = { - x1: xMin, - y1: yMax, - x2: xMax, - y2: yMax - }, coordsMid = { - x1: xMid, - y1: yMin, - x2: xMid, - y2: yMax - }, coordsBot = { - x1: xMin, - y1: yMin, - x2: xMax, - y2: yMin - }), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__container_Layer__.a, _extends({ - className: "recharts-errorBar", - key: i - }, props), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsTop), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsMid), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsBot)); - }); - } - }, { - key: "render", - value: function() { - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__container_Layer__.a, { - className: "recharts-errorBars" - }, this.renderErrorBars()); - } - } ]), ErrorBar; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class.propTypes = { - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]).isRequired, - data: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - xAxis: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - yAxis: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - layout: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - dataPointFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - stroke: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - strokeWidth: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - offset: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }, _class.defaultProps = { - stroke: "black", - strokeWidth: 1.5, - width: 5, - offset: 0, - layout: "horizontal" - }, _temp); - __webpack_exports__.a = ErrorBar; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return formatAxisMap; - }); - var __WEBPACK_IMPORTED_MODULE_0__ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, formatAxisMap = function(props, axisMap, offset, axisType, chartName) { - var width = props.width, height = props.height, layout = props.layout, ids = Object.keys(axisMap), steps = { - left: offset.left, - leftMirror: offset.left, - right: width - offset.right, - rightMirror: width - offset.right, - top: offset.top, - topMirror: offset.top, - bottom: height - offset.bottom, - bottomMirror: height - offset.bottom - }; - return ids.reduce(function(result, id) { - var axis = axisMap[id], orientation = axis.orientation, domain = axis.domain, _axis$padding = axis.padding, padding = void 0 === _axis$padding ? {} : _axis$padding, mirror = axis.mirror, reversed = axis.reversed, offsetKey = orientation + (mirror ? "Mirror" : ""), range = void 0, x = void 0, y = void 0, needSpace = void 0; - range = "xAxis" === axisType ? [ offset.left + (padding.left || 0), offset.left + offset.width - (padding.right || 0) ] : "yAxis" === axisType ? "horizontal" === layout ? [ offset.top + offset.height - (padding.bottom || 0), offset.top + (padding.top || 0) ] : [ offset.top + (padding.top || 0), offset.top + offset.height - (padding.bottom || 0) ] : axis.range, - reversed && (range = [ range[1], range[0] ]); - var _parseScale = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.A)(axis, chartName), scale = _parseScale.scale, realScaleType = _parseScale.realScaleType; - scale.domain(domain).range(range), Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.c)(scale); - var ticks = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.v)(scale, _extends({}, axis, { - realScaleType: realScaleType - })); - "xAxis" === axisType ? (needSpace = "top" === orientation && !mirror || "bottom" === orientation && mirror, - x = offset.left, y = steps[offsetKey] - needSpace * axis.height) : "yAxis" === axisType && (needSpace = "left" === orientation && !mirror || "right" === orientation && mirror, - x = steps[offsetKey] - needSpace * axis.width, y = offset.top); - var finalAxis = _extends({}, axis, ticks, { - realScaleType: realScaleType, - x: x, - y: y, - scale: scale, - width: "xAxis" === axisType ? offset.width : axis.width, - height: "yAxis" === axisType ? offset.height : axis.height - }); - return finalAxis.bandSize = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.g)(finalAxis, ticks), - axis.hide || "xAxis" !== axisType ? axis.hide || (steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.width) : steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.height, - _extends({}, result, _defineProperty({}, id, finalAxis)); - }, {}); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var emptyObject = {}; - "production" !== process.env.NODE_ENV && Object.freeze(emptyObject), module.exports = emptyObject; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var emptyFunction = __webpack_require__(50), warning = emptyFunction; - if ("production" !== process.env.NODE_ENV) { - var printWarning = function(format) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key]; - var argIndex = 0, message = "Warning: " + format.replace(/%s/g, function() { - return args[argIndex++]; - }); - "undefined" != typeof console && console.error(message); - try { - throw new Error(message); - } catch (x) {} - }; - warning = function(condition, format) { - if (void 0 === format) throw new Error("` + ("`" + `warning(condition, format, ...args)`)) + ("`" + (` requires a warning message argument"); - if (0 !== format.indexOf("Failed Composite propType: ") && !condition) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) args[_key2 - 2] = arguments[_key2]; - printWarning.apply(void 0, [ format ].concat(args)); - } - }; - } - module.exports = warning; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function checkDCE() { - if ("undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) { - if ("production" !== process.env.NODE_ENV) throw new Error("^_^"); - try { - __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); - } catch (err) { - console.error(err); - } - } - } - "production" === process.env.NODE_ENV ? (checkDCE(), module.exports = __webpack_require__(378)) : module.exports = __webpack_require__(381); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - function is(x, y) { - return x === y ? 0 !== x || 0 !== y || 1 / x == 1 / y : x !== x && y !== y; - } - function shallowEqual(objA, objB) { - if (is(objA, objB)) return !0; - if ("object" != typeof objA || null === objA || "object" != typeof objB || null === objB) return !1; - var keysA = Object.keys(objA), keysB = Object.keys(objB); - if (keysA.length !== keysB.length) return !1; - for (var i = 0; i < keysA.length; i++) if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) return !1; - return !0; - } - var hasOwnProperty = Object.prototype.hasOwnProperty; - module.exports = shallowEqual; -}, function(module, exports, __webpack_require__) { - var toInteger = __webpack_require__(149), min = Math.min; - module.exports = function(it) { - return it > 0 ? min(toInteger(it), 9007199254740991) : 0; - }; -}, function(module, exports) { - module.exports = !0; -}, function(module, exports) { - var id = 0, px = Math.random(); - module.exports = function(key) { - return "Symbol(".concat(void 0 === key ? "" : key, ")_", (++id + px).toString(36)); - }; -}, function(module, exports) { - exports.f = {}.propertyIsEnumerable; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - exports.__esModule = !0; - var _iterator = __webpack_require__(396), _iterator2 = _interopRequireDefault(_iterator), _symbol = __webpack_require__(404), _symbol2 = _interopRequireDefault(_symbol), _typeof = "function" == typeof _symbol2.default && "symbol" == typeof _iterator2.default ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && "function" == typeof _symbol2.default && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; - }; - exports.default = "function" == typeof _symbol2.default && "symbol" === _typeof(_iterator2.default) ? function(obj) { - return void 0 === obj ? "undefined" : _typeof(obj); - } : function(obj) { - return obj && "function" == typeof _symbol2.default && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : void 0 === obj ? "undefined" : _typeof(obj); - }; -}, function(module, exports, __webpack_require__) { - var anObject = __webpack_require__(52), dPs = __webpack_require__(400), enumBugKeys = __webpack_require__(152), IE_PROTO = __webpack_require__(150)("IE_PROTO"), Empty = function() {}, createDict = function() { - var iframeDocument, iframe = __webpack_require__(225)("iframe"), i = enumBugKeys.length; - for (iframe.style.display = "none", __webpack_require__(401).appendChild(iframe), - iframe.src = "javascript:", iframeDocument = iframe.contentWindow.document, iframeDocument.open(), - iframeDocument.write("\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\n\nvar _default = {\n familyPrefix: DEFAULT_FAMILY_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n};\n\nvar _config = _objectSpread({}, _default, initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\n\nvar config = _objectSpread({}, _config);\n\nWINDOW.FontAwesomeConfig = config;\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nvar PENDING = 'pending';\nvar SETTLED = 'settled';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\n\nvar NOOP = function NOOP() {};\n\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush() {\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++) {\n asyncQueue[i][0](asyncQueue[i][1]);\n } // reset async asyncQueue\n\n\n asyncQueue = [];\n asyncTimer = false;\n}\n\nfunction asyncCall(callback, arg) {\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer) {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n}\n\nfunction invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch (e) {\n rejectPromise(e);\n }\n}\n\nfunction invokeCallback(subscriber) {\n var owner = subscriber.owner;\n var settled = owner._state;\n var value = owner._data;\n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function') {\n settled = FULFILLED;\n\n try {\n value = callback(value);\n } catch (e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value)) {\n if (settled === FULFILLED) {\n resolve(promise, value);\n }\n\n if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n}\n\nfunction handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value) {\n throw new TypeError('A promises callback cannot return that same promise.');\n }\n\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n // then should be retrieved only once\n var then = value.then;\n\n if (typeof then === 'function') {\n then.call(value, function (val) {\n if (!resolved) {\n resolved = true;\n\n if (value === val) {\n fulfill(promise, val);\n } else {\n resolve(promise, val);\n }\n }\n }, function (reason) {\n if (!resolved) {\n resolved = true;\n reject(promise, reason);\n }\n });\n return true;\n }\n }\n } catch (e) {\n if (!resolved) {\n reject(promise, e);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction resolve(promise, value) {\n if (promise === value || !handleThenable(promise, value)) {\n fulfill(promise, value);\n }\n}\n\nfunction fulfill(promise, value) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = value;\n asyncCall(publishFulfillment, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = reason;\n asyncCall(publishRejection, promise);\n }\n}\n\nfunction publish(promise) {\n promise._then = promise._then.forEach(invokeCallback);\n}\n\nfunction publishFulfillment(promise) {\n promise._state = FULFILLED;\n publish(promise);\n}\n\nfunction publishRejection(promise) {\n promise._state = REJECTED;\n publish(promise);\n\n if (!promise._handled && isNode) {\n global.process.emit('unhandledRejection', promise._data, promise);\n }\n}\n\nfunction notifyRejectionHandled(promise) {\n global.process.emit('rejectionHandled', promise);\n}\n/**\n * @class\n */\n\n\nfunction P(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n }\n\n if (this instanceof P === false) {\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n }\n\n this._then = [];\n invokeResolver(resolver, this);\n}\n\nP.prototype = {\n constructor: P,\n _state: PENDING,\n _then: null,\n _data: undefined,\n _handled: false,\n then: function then(onFulfillment, onRejection) {\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if ((onRejection || onFulfillment) && !this._handled) {\n this._handled = true;\n\n if (this._state === REJECTED && isNode) {\n asyncCall(notifyRejectionHandled, this);\n }\n }\n\n if (this._state === FULFILLED || this._state === REJECTED) {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n } else {\n // subscribe\n this._then.push(subscriber);\n }\n\n return subscriber.then;\n },\n catch: function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nP.all = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.all().');\n }\n\n return new P(function (resolve, reject) {\n var results = [];\n var remaining = 0;\n\n function resolver(index) {\n remaining++;\n return function (value) {\n results[index] = value;\n\n if (! --remaining) {\n resolve(results);\n }\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolver(i), reject);\n } else {\n results[i] = promise;\n }\n }\n\n if (!remaining) {\n resolve(results);\n }\n });\n};\n\nP.race = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.race().');\n }\n\n return new P(function (resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n });\n};\n\nP.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === P) {\n return value;\n }\n\n return new P(function (resolve) {\n resolve(value);\n });\n};\n\nP.reject = function (reason) {\n return new P(function (resolve, reject) {\n reject(reason);\n });\n};\n\nvar picked = typeof Promise === 'function' ? Promise : P;\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\n\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n}\nfunction toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n}\nfunction getIconName(familyPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n}\nfunction transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\nfunction makeIconMasking (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread({}, ALL_SPACE, {\n fill: 'white'\n })\n };\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: 'path',\n attributes: _objectSpread({}, mainPath.attributes, trans.path, {\n fill: 'black'\n })\n }]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(nextUniqueId());\n var clipId = \"clip-\".concat(nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread({}, ALL_SPACE, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: [maskPath]\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction makeIconStandard (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n transform = _ref.transform,\n styles = _ref.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n if (transformIsMeaningful(transform)) {\n var trans = transformForSvg({\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n children.push({\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\n }]\n }]\n });\n } else {\n children.push(main.icon);\n }\n\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n}\n\nfunction asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread({}, attributes, {\n id: id\n }),\n children: children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var widthClass = \"fa-w-\".concat(Math.ceil(width / height * 16));\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread({}, extra.attributes, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(nextUniqueId())\n },\n children: [title]\n });\n\n var args = _objectSpread({}, content, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n transform: transform,\n symbol: symbol,\n styles: extra.styles\n });\n\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nvar preamble = \"FA \\\"5.7.2\\\"\";\n\nvar begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n};\n\nvar end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n begin: begin,\n end: end\n};\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object ` + ("`" + `.reduce()`)) + ("`" + (` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n};\n\nfunction defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalized);\n } else {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n }\n /**\n * Font Awesome 4 used the prefix of ` + "`"))))) + ((((`fa` + "`") + (` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix ` + ("`" + `fa`))) + (("`" + (` is now an alias\n * for ` + "`")) + (`fas` + ("`" + ` so we'll easy the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nvar styles = namespace.styles,\n shims = namespace.shims;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n var ligatures = icon[2];\n acc[iconName] = iconName;\n ligatures.forEach(function (ligature) {\n acc[ligature] = iconName;\n });\n return acc;\n });\n var hasRegular = 'far' in styles;\n _byOldName = reduce(shims, function (acc, shim) {\n var oldName = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n acc[oldName] = {\n prefix: prefix,\n iconName: iconName\n };\n return acc;\n }, {});\n};\nbuild();\nfunction byUnicode(prefix, unicode) {\n return _byUnicode[prefix][unicode];\n}\nfunction byLigature(prefix, ligature) {\n return _byLigature[prefix][ligature];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\n\nvar styles$1 = namespace.styles;\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getCanonicalIcon(values) {\n return values.reduce(function (acc, cls) {\n var iconName = getIconName(config.familyPrefix, cls);\n\n if (styles$1[cls]) {\n acc.prefix = cls;\n } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fab', 'fa'].indexOf(cls) > -1) {\n acc.prefix = cls;\n } else if (iconName) {\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n acc.iconName = shim.iconName || iconName;\n acc.prefix = shim.prefix || acc.prefix;\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n acc.rest.push(cls);\n }\n\n return acc;\n }, emptyCanonicalIcon());\n}\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\nfunction toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n}\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\n\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\n\nvar mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n var abstract = mutation[1];\n var newOuterHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n if (node.parentNode && node.outerHTML) {\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"\") : '');\n } else if (node.parentNode) {\n var newNode = document.createElement('span');\n node.parentNode.replaceChild(newNode, node);\n newNode.outerHTML = newOuterHTML;\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n delete abstract[0].attributes.style;\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n var newInnerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.setAttribute('class', splitClasses.toNode.join(' '));\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\nfunction perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = WINDOW.requestAnimationFrame || function (op) {\n return op();\n };\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nvar disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var treeCallback = options.treeCallback,\n nodeCallback = options.nodeCallback,\n pseudoElementsCallback = options.pseudoElementsCallback,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class') {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n } else {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n}\n\nfunction toHex(unicode) {\n var result = '';\n\n for (var i = 0; i < unicode.length; i++) {\n var hex = unicode.charCodeAt(i).toString(16);\n result += ('000' + hex).slice(-4);\n }\n\n return result;\n}\n\nfunction classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.prefix && innerText.length > 1) {\n val.iconName = byLigature(val.prefix, node.innerText);\n } else if (val.prefix && innerText.length === 1) {\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n }\n\n return val;\n}\n\nvar parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n\n if (!transformString) {\n return transform;\n } else {\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n }\n};\nfunction transformParser (node) {\n return parseTransformString(node.getAttribute('data-fa-transform'));\n}\n\nfunction symbolParser (node) {\n var symbol = node.getAttribute('data-fa-symbol');\n return symbol === null ? false : symbol === '' ? true : symbol;\n}\n\nfunction attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n}\n\nfunction maskParser (node) {\n var mask = node.getAttribute('data-fa-mask');\n\n if (!mask) {\n return emptyCanonicalIcon();\n } else {\n return getCanonicalIcon(mask.split(' ').map(function (i) {\n return i.trim();\n }));\n }\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraStyles = styleParser(node);\n var transform = transformParser(node);\n var symbol = symbolParser(node);\n var extraAttributes = attributesParser(node);\n var mask = maskParser(node);\n return {\n iconName: iconName,\n title: node.getAttribute('title'),\n prefix: prefix,\n transform: transform,\n symbol: symbol,\n mask: mask,\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n };\n}\n\nfunction MissingIcon(error) {\n this.name = 'MissingIcon';\n this.message = error || 'Icon unavailable';\n this.stack = new Error().stack;\n}\nMissingIcon.prototype = Object.create(Error.prototype);\nMissingIcon.prototype.constructor = MissingIcon;\n\nvar FILL = {\n fill: 'currentColor'\n};\nvar ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n};\nvar RING = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n};\n\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'opacity'\n});\n\nvar DOT = {\n tag: 'circle',\n attributes: _objectSpread({}, FILL, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;1;1;0;1;'\n })\n }]\n};\nvar QUESTION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;0;0;0;1;'\n })\n }]\n};\nvar EXCLAMATION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '0;0;1;1;0;0;'\n })\n }]\n};\nvar missing = {\n tag: 'g',\n children: [RING, DOT, QUESTION, EXCLAMATION]\n};\n\nvar styles$2 = namespace.styles;\nfunction findIcon(iconName, prefix) {\n return new picked(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: missing\n };\n\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n var icon = styles$2[prefix][iconName];\n var width = icon[0];\n var height = icon[1];\n var vectorData = icon.slice(4);\n val = {\n found: true,\n width: width,\n height: height,\n icon: {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData[0]\n }\n }\n };\n return resolve(val);\n }\n\n if (iconName && prefix && !config.showMissingIcons) {\n reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n } else {\n resolve(val);\n }\n });\n}\n\nvar styles$3 = namespace.styles;\n\nfunction generateSvgReplacementMutation(node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n extra = nodeMeta.extra;\n return new picked(function (resolve, reject) {\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n mask: mask,\n title: title,\n extra: extra,\n watchable: true\n })]);\n });\n });\n}\n\nfunction generateLayersText(node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return picked.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n}\n\nfunction generateMutation(node) {\n var nodeMeta = parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return generateLayersText(node, nodeMeta);\n } else {\n return generateSvgReplacementMutation(node, nodeMeta);\n }\n}\n\nfunction onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return;\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return;\n }\n\n var candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return;\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e instanceof MissingIcon) {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new picked(function (resolve, reject) {\n picked.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function () {\n mark();\n reject();\n });\n });\n}\nfunction onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\n\nfunction replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new picked(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily) {\n var content = styles.getPropertyValue('content');\n var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n var iconName = byUnicode(prefix, toHex(content.length === 3 ? content.substr(1, 1) : content)); // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n if (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconName) {\n node.setAttribute(pendingAttribute, iconName);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconName,\n extra: extra,\n watchable: true\n }));\n var element = DOCUMENT.createElement('svg');\n\n if (position === ':before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\n\nfunction replace(node) {\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n}\n\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements (root) {\n if (!IS_DOM) return;\n return new picked(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n picked.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n}\n\nvar baseStyles = \"svg:not(:root).svg-inline--fa {\\n overflow: visible;\\n}\\n\\n.svg-inline--fa {\\n display: inline-block;\\n font-size: inherit;\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.225em;\\n}\\n.svg-inline--fa.fa-w-1 {\\n width: 0.0625em;\\n}\\n.svg-inline--fa.fa-w-2 {\\n width: 0.125em;\\n}\\n.svg-inline--fa.fa-w-3 {\\n width: 0.1875em;\\n}\\n.svg-inline--fa.fa-w-4 {\\n width: 0.25em;\\n}\\n.svg-inline--fa.fa-w-5 {\\n width: 0.3125em;\\n}\\n.svg-inline--fa.fa-w-6 {\\n width: 0.375em;\\n}\\n.svg-inline--fa.fa-w-7 {\\n width: 0.4375em;\\n}\\n.svg-inline--fa.fa-w-8 {\\n width: 0.5em;\\n}\\n.svg-inline--fa.fa-w-9 {\\n width: 0.5625em;\\n}\\n.svg-inline--fa.fa-w-10 {\\n width: 0.625em;\\n}\\n.svg-inline--fa.fa-w-11 {\\n width: 0.6875em;\\n}\\n.svg-inline--fa.fa-w-12 {\\n width: 0.75em;\\n}\\n.svg-inline--fa.fa-w-13 {\\n width: 0.8125em;\\n}\\n.svg-inline--fa.fa-w-14 {\\n width: 0.875em;\\n}\\n.svg-inline--fa.fa-w-15 {\\n width: 0.9375em;\\n}\\n.svg-inline--fa.fa-w-16 {\\n width: 1em;\\n}\\n.svg-inline--fa.fa-w-17 {\\n width: 1.0625em;\\n}\\n.svg-inline--fa.fa-w-18 {\\n width: 1.125em;\\n}\\n.svg-inline--fa.fa-w-19 {\\n width: 1.1875em;\\n}\\n.svg-inline--fa.fa-w-20 {\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-border {\\n height: 1.5em;\\n}\\n.svg-inline--fa.fa-li {\\n width: 2em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: 1.25em;\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: #ff253a;\\n border-radius: 1em;\\n -webkit-box-sizing: border-box;\\n box-sizing: border-box;\\n color: #fff;\\n height: 1.5em;\\n line-height: 1;\\n max-width: 5em;\\n min-width: 1.5em;\\n overflow: hidden;\\n padding: 0.25em;\\n right: 0;\\n text-overflow: ellipsis;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: 0;\\n right: 0;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom right;\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: 0;\\n left: 0;\\n right: auto;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom left;\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n right: 0;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: 0;\\n right: auto;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top left;\\n transform-origin: top left;\\n}\\n\\n.fa-lg {\\n font-size: 1.3333333333em;\\n line-height: 0.75em;\\n vertical-align: -0.0667em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: 2.5em;\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: -2em;\\n position: absolute;\\n text-align: center;\\n width: 2em;\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border: solid 0.08em #eee;\\n border-radius: 0.1em;\\n padding: 0.2em 0.25em 0.15em;\\n}\\n\\n.fa-pull-left {\\n float: left;\\n}\\n\\n.fa-pull-right {\\n float: right;\\n}\\n\\n.fa.fa-pull-left,\\n.fas.fa-pull-left,\\n.far.fa-pull-left,\\n.fal.fa-pull-left,\\n.fab.fa-pull-left {\\n margin-right: 0.3em;\\n}\\n.fa.fa-pull-right,\\n.fas.fa-pull-right,\\n.far.fa-pull-right,\\n.fal.fa-pull-right,\\n.fab.fa-pull-right {\\n margin-left: 0.3em;\\n}\\n\\n.fa-spin {\\n -webkit-animation: fa-spin 2s infinite linear;\\n animation: fa-spin 2s infinite linear;\\n}\\n\\n.fa-pulse {\\n -webkit-animation: fa-spin 1s infinite steps(8);\\n animation: fa-spin 1s infinite steps(8);\\n}\\n\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\";\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\";\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\";\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\";\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1);\\n}\\n\\n:root .fa-rotate-90,\\n:root .fa-rotate-180,\\n:root .fa-rotate-270,\\n:root .fa-flip-horizontal,\\n:root .fa-flip-vertical,\\n:root .fa-flip-both {\\n -webkit-filter: none;\\n filter: none;\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: #fff;\\n}\\n\\n.sr-only {\\n border: 0;\\n clip: rect(0, 0, 0, 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n}\\n\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\n clip: auto;\\n height: auto;\\n margin: 0;\\n overflow: visible;\\n position: static;\\n width: auto;\\n}\";\n\nfunction css () {\n var dfp = DEFAULT_FAMILY_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.familyPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dfp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n}\n\nvar Library =\n/*#__PURE__*/\nfunction () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n defineIcons(key, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n if (!additions[prefix]) additions[prefix] = {};\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n}();\n\nfunction prepIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n var vectorData = icon.slice(4);\n return {\n found: true,\n width: width,\n height: height,\n icon: {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData[0]\n }\n }\n };\n}\n\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n}\n\nfunction apiObject(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction findIconDefinition(iconLookup) {\n var _iconLookup$prefix = iconLookup.prefix,\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n iconName = iconLookup.iconName;\n if (!iconName) return;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\n\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread({}, params, {\n mask: mask\n }));\n };\n}\n\nvar library = new Library();\nvar noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n disconnect();\n};\nvar _cssInserted = false;\nvar dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n ensureCss();\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n\n return onTree(node, callback);\n } else {\n return picked.reject('Operation requires a DOM of some kind.');\n }\n },\n css: css,\n insertCss: function insertCss$$1() {\n if (!_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n observeMutationsRoot = params.observeMutationsRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements,\n observeMutationsRoot: observeMutationsRoot\n });\n });\n }\n};\nvar parse = {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n};\nvar icon = resolveIcons(function (iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return apiObject(_objectSpread({\n type: 'icon'\n }, iconDefinition), function () {\n ensureCss();\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: prepIcon(icon),\n mask: mask ? prepIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread({}, meaninglessTransform, transform),\n symbol: symbol,\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n});\nvar text = function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform2 = params.transform,\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n _params$title2 = params.title,\n title = _params$title2 === void 0 ? null : _params$title2,\n _params$classes2 = params.classes,\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\n _params$attributes2 = params.attributes,\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n _params$styles2 = params.styles,\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\n return apiObject({\n type: 'text',\n content: content\n }, function () {\n ensureCss();\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread({}, meaninglessTransform, transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar counter = function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title3 = params.title,\n title = _params$title3 === void 0 ? null : _params$title3,\n _params$classes3 = params.classes,\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\n _params$attributes3 = params.attributes,\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n _params$styles3 = params.styles,\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\n return apiObject({\n type: 'counter',\n content: content\n }, function () {\n ensureCss();\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar layer = function layer(assembler) {\n return apiObject({\n type: 'layer'\n }, function () {\n ensureCss();\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-layers\")\n },\n children: children\n }];\n });\n};\nvar api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n library: library,\n parse: parse,\n findIconDefinition: findIconDefinition,\n icon: icon,\n text: text,\n counter: counter,\n layer: layer,\n toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nexport { icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition };\n", + "var prefix = \"far\";\nvar faAddressBook = {\n prefix: 'far',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'far',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z\"]\n};\nvar faAngry = {\n prefix: 'far',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z\"]\n};\nvar faBell = {\n prefix: 'far',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBellSlash = {\n prefix: 'far',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBookmark = {\n prefix: 'far',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z\"]\n};\nvar faBuilding = {\n prefix: 'far',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z\"]\n};\nvar faCalendar = {\n prefix: 'far',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z\"]\n};\nvar faCalendarAlt = {\n prefix: 'far',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarCheck = {\n prefix: 'far',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z\"]\n};\nvar faCalendarMinus = {\n prefix: 'far',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarPlus = {\n prefix: 'far',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarTimes = {\n prefix: 'far',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'far',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'far',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'far',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'far',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faChartBar = {\n prefix: 'far',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\"]\n};\nvar faCheckCircle = {\n prefix: 'far',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"]\n};\nvar faCheckSquare = {\n prefix: 'far',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z\"]\n};\nvar faCircle = {\n prefix: 'far',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z\"]\n};\nvar faClipboard = {\n prefix: 'far',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z\"]\n};\nvar faClock = {\n prefix: 'far',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n prefix: 'far',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'far',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z\"]\n};\nvar faComment = {\n prefix: 'far',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faCommentAlt = {\n prefix: 'far',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z\"]\n};\nvar faCommentDots = {\n prefix: 'far',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faComments = {\n prefix: 'far',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z\"]\n};\nvar faCompass = {\n prefix: 'far',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faCopy = {\n prefix: 'far',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"]\n};\nvar faCopyright = {\n prefix: 'far',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z\"]\n};\nvar faCreditCard = {\n prefix: 'far',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z\"]\n};\nvar faDizzy = {\n prefix: 'far',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z\"]\n};\nvar faDotCircle = {\n prefix: 'far',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\"]\n};\nvar faEdit = {\n prefix: 'far',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z\"]\n};\nvar faEnvelope = {\n prefix: 'far',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'far',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z\"]\n};\nvar faEye = {\n prefix: 'far',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z\"]\n};\nvar faEyeSlash = {\n prefix: 'far',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z\"]\n};\nvar faFile = {\n prefix: 'far',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"]\n};\nvar faFileAlt = {\n prefix: 'far',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z\"]\n};\nvar faFileArchive = {\n prefix: 'far',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z\"]\n};\nvar faFileAudio = {\n prefix: 'far',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z\"]\n};\nvar faFileCode = {\n prefix: 'far',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z\"]\n};\nvar faFileExcel = {\n prefix: 'far',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z\"]\n};\nvar faFileImage = {\n prefix: 'far',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z\"]\n};\nvar faFilePdf = {\n prefix: 'far',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'far',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z\"]\n};\nvar faFileVideo = {\n prefix: 'far',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z\"]\n};\nvar faFileWord = {\n prefix: 'far',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z\"]\n};\nvar faFlag = {\n prefix: 'far',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z\"]\n};\nvar faFlushed = {\n prefix: 'far',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faFolder = {\n prefix: 'far',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z\"]\n};\nvar faFolderOpen = {\n prefix: 'far',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'far',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFrown = {\n prefix: 'far',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z\"]\n};\nvar faFrownOpen = {\n prefix: 'far',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z\"]\n};\nvar faFutbol = {\n prefix: 'far',\n iconName: 'futbol',\n icon: [496, 512, [], \"f1e3\", \"M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z\"]\n};\nvar faGem = {\n prefix: 'far',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z\"]\n};\nvar faGrimace = {\n prefix: 'far',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z\"]\n};\nvar faGrin = {\n prefix: 'far',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faGrinAlt = {\n prefix: 'far',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'far',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'far',\n iconName: 'grin-beam-sweat',\n icon: [496, 512, [], \"f583\", \"M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinHearts = {\n prefix: 'far',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z\"]\n};\nvar faGrinSquint = {\n prefix: 'far',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'far',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z\"]\n};\nvar faGrinStars = {\n prefix: 'far',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z\"]\n};\nvar faGrinTears = {\n prefix: 'far',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinTongue = {\n prefix: 'far',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'far',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'far',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z\"]\n};\nvar faGrinWink = {\n prefix: 'far',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faHandLizard = {\n prefix: 'far',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z\"]\n};\nvar faHandPaper = {\n prefix: 'far',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z\"]\n};\nvar faHandPeace = {\n prefix: 'far',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z\"]\n};\nvar faHandPointDown = {\n prefix: 'far',\n iconName: 'hand-point-down',\n icon: [448, 512, [], \"f0a7\", \"M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z\"]\n};\nvar faHandPointLeft = {\n prefix: 'far',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointRight = {\n prefix: 'far',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faHandPointUp = {\n prefix: 'far',\n iconName: 'hand-point-up',\n icon: [448, 512, [], \"f0a6\", \"M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointer = {\n prefix: 'far',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z\"]\n};\nvar faHandRock = {\n prefix: 'far',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z\"]\n};\nvar faHandScissors = {\n prefix: 'far',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z\"]\n};\nvar faHandSpock = {\n prefix: 'far',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z\"]\n};\nvar faHandshake = {\n prefix: 'far',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z\"]\n};\nvar faHdd = {\n prefix: 'far',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z\"]\n};\nvar faHeart = {\n prefix: 'far',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z\"]\n};\nvar faHospital = {\n prefix: 'far',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z\"]\n};\nvar faHourglass = {\n prefix: 'far',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z\"]\n};\nvar faIdBadge = {\n prefix: 'far',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faIdCard = {\n prefix: 'far',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faImage = {\n prefix: 'far',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z\"]\n};\nvar faImages = {\n prefix: 'far',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z\"]\n};\nvar faKeyboard = {\n prefix: 'far',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z\"]\n};\nvar faKiss = {\n prefix: 'far',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faKissBeam = {\n prefix: 'far',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'far',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z\"]\n};\nvar faLaugh = {\n prefix: 'far',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughBeam = {\n prefix: 'far',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughSquint = {\n prefix: 'far',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughWink = {\n prefix: 'far',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLemon = {\n prefix: 'far',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z\"]\n};\nvar faLifeRing = {\n prefix: 'far',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z\"]\n};\nvar faLightbulb = {\n prefix: 'far',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z\"]\n};\nvar faListAlt = {\n prefix: 'far',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z\"]\n};\nvar faMap = {\n prefix: 'far',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z\"]\n};\nvar faMeh = {\n prefix: 'far',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMehBlank = {\n prefix: 'far',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'far',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMinusSquare = {\n prefix: 'far',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'far',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z\"]\n};\nvar faMoon = {\n prefix: 'far',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z\"]\n};\nvar faNewspaper = {\n prefix: 'far',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z\"]\n};\nvar faObjectGroup = {\n prefix: 'far',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z\"]\n};\nvar faObjectUngroup = {\n prefix: 'far',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z\"]\n};\nvar faPaperPlane = {\n prefix: 'far',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z\"]\n};\nvar faPauseCircle = {\n prefix: 'far',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z\"]\n};\nvar faPlayCircle = {\n prefix: 'far',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"]\n};\nvar faPlusSquare = {\n prefix: 'far',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faQuestionCircle = {\n prefix: 'far',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"]\n};\nvar faRegistered = {\n prefix: 'far',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z\"]\n};\nvar faSadCry = {\n prefix: 'far',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z\"]\n};\nvar faSadTear = {\n prefix: 'far',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z\"]\n};\nvar faSave = {\n prefix: 'far',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z\"]\n};\nvar faShareSquare = {\n prefix: 'far',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z\"]\n};\nvar faSmile = {\n prefix: 'far',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z\"]\n};\nvar faSmileBeam = {\n prefix: 'far',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z\"]\n};\nvar faSmileWink = {\n prefix: 'far',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z\"]\n};\nvar faSnowflake = {\n prefix: 'far',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z\"]\n};\nvar faSquare = {\n prefix: 'far',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"]\n};\nvar faStar = {\n prefix: 'far',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z\"]\n};\nvar faStarHalf = {\n prefix: 'far',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z\"]\n};\nvar faStickyNote = {\n prefix: 'far',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z\"]\n};\nvar faStopCircle = {\n prefix: 'far',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z\"]\n};\nvar faSun = {\n prefix: 'far',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z\"]\n};\nvar faSurprise = {\n prefix: 'far',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faThumbsDown = {\n prefix: 'far',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z\"]\n};\nvar faThumbsUp = {\n prefix: 'far',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faTimesCircle = {\n prefix: 'far',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z\"]\n};\nvar faTired = {\n prefix: 'far',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z\"]\n};\nvar faTrashAlt = {\n prefix: 'far',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"]\n};\nvar faUser = {\n prefix: 'far',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z\"]\n};\nvar faUserCircle = {\n prefix: 'far',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z\"]\n};\nvar faWindowClose = {\n prefix: 'far',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z\"]\n};\nvar faWindowMaximize = {\n prefix: 'far',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z\"]\n};\nvar faWindowMinimize = {\n prefix: 'far',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nvar faWindowRestore = {\n prefix: 'far',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z\"]\n};\nvar _iconsCache = {\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAngry: faAngry,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBookmark: faBookmark,\n faBuilding: faBuilding,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faChartBar: faChartBar,\n faCheckCircle: faCheckCircle,\n faCheckSquare: faCheckSquare,\n faCircle: faCircle,\n faClipboard: faClipboard,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDots: faCommentDots,\n faComments: faComments,\n faCompass: faCompass,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCreditCard: faCreditCard,\n faDizzy: faDizzy,\n faDotCircle: faDotCircle,\n faEdit: faEdit,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEye: faEye,\n faEyeSlash: faEyeSlash,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileExcel: faFileExcel,\n faFileImage: faFileImage,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFlag: faFlag,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderOpen: faFolderOpen,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFutbol: faFutbol,\n faGem: faGem,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faHandLizard: faHandLizard,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSpock: faHandSpock,\n faHandshake: faHandshake,\n faHdd: faHdd,\n faHeart: faHeart,\n faHospital: faHospital,\n faHourglass: faHourglass,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faImage: faImage,\n faImages: faImages,\n faKeyboard: faKeyboard,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLemon: faLemon,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faListAlt: faListAlt,\n faMap: faMap,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMinusSquare: faMinusSquare,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoon: faMoon,\n faNewspaper: faNewspaper,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faPaperPlane: faPaperPlane,\n faPauseCircle: faPauseCircle,\n faPlayCircle: faPlayCircle,\n faPlusSquare: faPlusSquare,\n faQuestionCircle: faQuestionCircle,\n faRegistered: faRegistered,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSave: faSave,\n faShareSquare: faShareSquare,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSnowflake: faSnowflake,\n faSquare: faSquare,\n faStar: faStar,\n faStarHalf: faStarHalf,\n faStickyNote: faStickyNote,\n faStopCircle: faStopCircle,\n faSun: faSun,\n faSurprise: faSurprise,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faTimesCircle: faTimesCircle,\n faTired: faTired,\n faTrashAlt: faTrashAlt,\n faUser: faUser,\n faUserCircle: faUserCircle,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore\n};\n\nexport { _iconsCache as far, prefix, faAddressBook, faAddressCard, faAngry, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faBell, faBellSlash, faBookmark, faBuilding, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faChartBar, faCheckCircle, faCheckSquare, faCircle, faClipboard, faClock, faClone, faClosedCaptioning, faComment, faCommentAlt, faCommentDots, faComments, faCompass, faCopy, faCopyright, faCreditCard, faDizzy, faDotCircle, faEdit, faEnvelope, faEnvelopeOpen, faEye, faEyeSlash, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileExcel, faFileImage, faFilePdf, faFilePowerpoint, faFileVideo, faFileWord, faFlag, faFlushed, faFolder, faFolderOpen, faFontAwesomeLogoFull, faFrown, faFrownOpen, faFutbol, faGem, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faHandLizard, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHandshake, faHdd, faHeart, faHospital, faHourglass, faIdBadge, faIdCard, faImage, faImages, faKeyboard, faKiss, faKissBeam, faKissWinkHeart, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLemon, faLifeRing, faLightbulb, faListAlt, faMap, faMeh, faMehBlank, faMehRollingEyes, faMinusSquare, faMoneyBillAlt, faMoon, faNewspaper, faObjectGroup, faObjectUngroup, faPaperPlane, faPauseCircle, faPlayCircle, faPlusSquare, faQuestionCircle, faRegistered, faSadCry, faSadTear, faSave, faShareSquare, faSmile, faSmileBeam, faSmileWink, faSnowflake, faSquare, faStar, faStarHalf, faStickyNote, faStopCircle, faSun, faSurprise, faThumbsDown, faThumbsUp, faTimesCircle, faTired, faTrashAlt, faUser, faUserCircle, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore };\n", + "var prefix = \"fas\";\nvar faAd = {\n prefix: 'fas',\n iconName: 'ad',\n icon: [512, 512, [], \"f641\", \"M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z\"]\n};\nvar faAddressBook = {\n prefix: 'fas',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'fas',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faAdjust = {\n prefix: 'fas',\n iconName: 'adjust',\n icon: [512, 512, [], \"f042\", \"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"]\n};\nvar faAirFreshener = {\n prefix: 'fas',\n iconName: 'air-freshener',\n icon: [384, 512, [], \"f5d0\", \"M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z\"]\n};\nvar faAlignCenter = {\n prefix: 'fas',\n iconName: 'align-center',\n icon: [448, 512, [], \"f037\", \"M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"]\n};\nvar faAlignJustify = {\n prefix: 'fas',\n iconName: 'align-justify',\n icon: [448, 512, [], \"f039\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faAlignLeft = {\n prefix: 'fas',\n iconName: 'align-left',\n icon: [448, 512, [], \"f036\", \"M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"]\n};\nvar faAlignRight = {\n prefix: 'fas',\n iconName: 'align-right',\n icon: [448, 512, [], \"f038\", \"M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faAllergies = {\n prefix: 'fas',\n iconName: 'allergies',\n icon: [448, 512, [], \"f461\", \"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faAmbulance = {\n prefix: 'fas',\n iconName: 'ambulance',\n icon: [640, 512, [], \"f0f9\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faAmericanSignLanguageInterpreting = {\n prefix: 'fas',\n iconName: 'american-sign-language-interpreting',\n icon: [640, 512, [], \"f2a3\", \"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"]\n};\nvar faAnchor = {\n prefix: 'fas',\n iconName: 'anchor',\n icon: [576, 512, [], \"f13d\", \"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"]\n};\nvar faAngleDoubleDown = {\n prefix: 'fas',\n iconName: 'angle-double-down',\n icon: [320, 512, [], \"f103\", \"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"]\n};\nvar faAngleDoubleLeft = {\n prefix: 'fas',\n iconName: 'angle-double-left',\n icon: [448, 512, [], \"f100\", \"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"]\n};\nvar faAngleDoubleRight = {\n prefix: 'fas',\n iconName: 'angle-double-right',\n icon: [448, 512, [], \"f101\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"]\n};\nvar faAngleDoubleUp = {\n prefix: 'fas',\n iconName: 'angle-double-up',\n icon: [320, 512, [], \"f102\", \"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"]\n};\nvar faAngleDown = {\n prefix: 'fas',\n iconName: 'angle-down',\n icon: [320, 512, [], \"f107\", \"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"]\n};\nvar faAngleLeft = {\n prefix: 'fas',\n iconName: 'angle-left',\n icon: [256, 512, [], \"f104\", \"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"]\n};\nvar faAngleRight = {\n prefix: 'fas',\n iconName: 'angle-right',\n icon: [256, 512, [], \"f105\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"]\n};\nvar faAngleUp = {\n prefix: 'fas',\n iconName: 'angle-up',\n icon: [320, 512, [], \"f106\", \"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"]\n};\nvar faAngry = {\n prefix: 'fas',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"]\n};\nvar faAnkh = {\n prefix: 'fas',\n iconName: 'ankh',\n icon: [320, 512, [], \"f644\", \"M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z\"]\n};\nvar faAppleAlt = {\n prefix: 'fas',\n iconName: 'apple-alt',\n icon: [448, 512, [], \"f5d1\", \"M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z\"]\n};\nvar faArchive = {\n prefix: 'fas',\n iconName: 'archive',\n icon: [512, 512, [], \"f187\", \"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"]\n};\nvar faArchway = {\n prefix: 'fas',\n iconName: 'archway',\n icon: [576, 512, [], \"f557\", \"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"]\n};\nvar faArrowCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-circle-down',\n icon: [512, 512, [], \"f0ab\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"]\n};\nvar faArrowCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-circle-left',\n icon: [512, 512, [], \"f0a8\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"]\n};\nvar faArrowCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-circle-right',\n icon: [512, 512, [], \"f0a9\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"]\n};\nvar faArrowCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-circle-up',\n icon: [512, 512, [], \"f0aa\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"]\n};\nvar faArrowDown = {\n prefix: 'fas',\n iconName: 'arrow-down',\n icon: [448, 512, [], \"f063\", \"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"]\n};\nvar faArrowLeft = {\n prefix: 'fas',\n iconName: 'arrow-left',\n icon: [448, 512, [], \"f060\", \"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"]\n};\nvar faArrowRight = {\n prefix: 'fas',\n iconName: 'arrow-right',\n icon: [448, 512, [], \"f061\", \"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"]\n};\nvar faArrowUp = {\n prefix: 'fas',\n iconName: 'arrow-up',\n icon: [448, 512, [], \"f062\", \"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"]\n};\nvar faArrowsAlt = {\n prefix: 'fas',\n iconName: 'arrows-alt',\n icon: [512, 512, [], \"f0b2\", \"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"]\n};\nvar faArrowsAltH = {\n prefix: 'fas',\n iconName: 'arrows-alt-h',\n icon: [512, 512, [], \"f337\", \"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"]\n};\nvar faArrowsAltV = {\n prefix: 'fas',\n iconName: 'arrows-alt-v',\n icon: [256, 512, [], \"f338\", \"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"]\n};\nvar faAssistiveListeningSystems = {\n prefix: 'fas',\n iconName: 'assistive-listening-systems',\n icon: [512, 512, [], \"f2a2\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"]\n};\nvar faAsterisk = {\n prefix: 'fas',\n iconName: 'asterisk',\n icon: [512, 512, [], \"f069\", \"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"]\n};\nvar faAt = {\n prefix: 'fas',\n iconName: 'at',\n icon: [512, 512, [], \"f1fa\", \"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"]\n};\nvar faAtlas = {\n prefix: 'fas',\n iconName: 'atlas',\n icon: [448, 512, [], \"f558\", \"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"]\n};\nvar faAtom = {\n prefix: 'fas',\n iconName: 'atom',\n icon: [448, 512, [], \"f5d2\", \"M413.03 256c40.13-54.89 41.51-98.62 25.14-128-10.91-19.52-40.54-50.73-116.33-41.88C300.36 34.89 267.64 0 224 0s-76.36 34.89-97.84 86.12C50.43 77.34 20.73 108.48 9.83 128c-16.38 29.4-15 73.09 25.14 128-40.13 54.89-41.51 98.62-25.14 128 29.21 52.34 101.68 43.58 116.33 41.88C147.63 477.1 180.36 512 224 512s76.37-34.9 97.84-86.12c14.64 1.7 87.11 10.46 116.33-41.88 16.38-29.4 15-73.09-25.14-128zM63.38 352c-4.03-7.21-.19-24.8 14.95-48.29 6.96 6.53 14.2 12.89 21.87 19.18 1.71 13.71 4 27.08 6.76 40.08-24.56.89-39.89-4.37-43.58-10.97zm36.82-162.88c-7.66 6.29-14.9 12.65-21.87 19.18-15.13-23.5-18.97-41.09-14.95-48.3 3.41-6.14 16.39-11.47 37.92-11.47 1.71 0 3.87.3 5.69.37a472.191 472.191 0 0 0-6.79 40.22zM224 64c9.47 0 22.2 13.52 33.86 37.26-11.19 3.7-22.44 8-33.86 12.86-11.42-4.86-22.67-9.16-33.86-12.86C201.8 77.52 214.53 64 224 64zm0 384c-9.47 0-22.2-13.52-33.86-37.26 11.19-3.7 22.44-8 33.86-12.86 11.42 4.86 22.67 9.16 33.86 12.86C246.2 434.48 233.47 448 224 448zm62.5-157.33c-26.7 19.08-46.14 29.33-62.5 37.48-16.35-8.14-35.8-18.41-62.5-37.48-1.99-27.79-1.99-41.54 0-69.33 26.67-19.05 46.13-29.32 62.5-37.48 16.39 8.17 35.86 18.44 62.5 37.48 1.98 27.78 1.99 41.53 0 69.33zM384.62 352c-3.67 6.62-19 11.82-43.58 10.95 2.76-13 5.05-26.37 6.76-40.06 7.66-6.29 14.9-12.65 21.87-19.18 15.13 23.49 18.97 41.08 14.95 48.29zm-14.95-143.71c-6.96-6.53-14.2-12.89-21.87-19.18a473.535 473.535 0 0 0-6.79-40.22c1.82-.07 3.97-.37 5.69-.37 21.52 0 34.51 5.34 37.92 11.47 4.02 7.22.18 24.81-14.95 48.3zM224 224c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faAudioDescription = {\n prefix: 'fas',\n iconName: 'audio-description',\n icon: [512, 512, [], \"f29e\", \"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"]\n};\nvar faAward = {\n prefix: 'fas',\n iconName: 'award',\n icon: [384, 512, [], \"f559\", \"M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"]\n};\nvar faBaby = {\n prefix: 'fas',\n iconName: 'baby',\n icon: [384, 512, [], \"f77c\", \"M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z\"]\n};\nvar faBabyCarriage = {\n prefix: 'fas',\n iconName: 'baby-carriage',\n icon: [512, 512, [], \"f77d\", \"M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z\"]\n};\nvar faBackspace = {\n prefix: 'fas',\n iconName: 'backspace',\n icon: [640, 512, [], \"f55a\", \"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"]\n};\nvar faBackward = {\n prefix: 'fas',\n iconName: 'backward',\n icon: [512, 512, [], \"f04a\", \"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"]\n};\nvar faBacon = {\n prefix: 'fas',\n iconName: 'bacon',\n icon: [576, 512, [], \"f7e5\", \"M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z\"]\n};\nvar faBalanceScale = {\n prefix: 'fas',\n iconName: 'balance-scale',\n icon: [640, 512, [], \"f24e\", \"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faBan = {\n prefix: 'fas',\n iconName: 'ban',\n icon: [512, 512, [], \"f05e\", \"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"]\n};\nvar faBandAid = {\n prefix: 'fas',\n iconName: 'band-aid',\n icon: [640, 512, [], \"f462\", \"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faBarcode = {\n prefix: 'fas',\n iconName: 'barcode',\n icon: [512, 512, [], \"f02a\", \"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"]\n};\nvar faBars = {\n prefix: 'fas',\n iconName: 'bars',\n icon: [448, 512, [], \"f0c9\", \"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faBaseballBall = {\n prefix: 'fas',\n iconName: 'baseball-ball',\n icon: [496, 512, [], \"f433\", \"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"]\n};\nvar faBasketballBall = {\n prefix: 'fas',\n iconName: 'basketball-ball',\n icon: [496, 512, [], \"f434\", \"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"]\n};\nvar faBath = {\n prefix: 'fas',\n iconName: 'bath',\n icon: [512, 512, [], \"f2cd\", \"M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faBatteryEmpty = {\n prefix: 'fas',\n iconName: 'battery-empty',\n icon: [640, 512, [], \"f244\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"]\n};\nvar faBatteryFull = {\n prefix: 'fas',\n iconName: 'battery-full',\n icon: [640, 512, [], \"f240\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"]\n};\nvar faBatteryHalf = {\n prefix: 'fas',\n iconName: 'battery-half',\n icon: [640, 512, [], \"f242\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"]\n};\nvar faBatteryQuarter = {\n prefix: 'fas',\n iconName: 'battery-quarter',\n icon: [640, 512, [], \"f243\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"]\n};\nvar faBatteryThreeQuarters = {\n prefix: 'fas',\n iconName: 'battery-three-quarters',\n icon: [640, 512, [], \"f241\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"]\n};\nvar faBed = {\n prefix: 'fas',\n iconName: 'bed',\n icon: [640, 512, [], \"f236\", \"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"]\n};\nvar faBeer = {\n prefix: 'fas',\n iconName: 'beer',\n icon: [448, 512, [], \"f0fc\", \"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"]\n};\nvar faBell = {\n prefix: 'fas',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z\"]\n};\nvar faBellSlash = {\n prefix: 'fas',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBezierCurve = {\n prefix: 'fas',\n iconName: 'bezier-curve',\n icon: [640, 512, [], \"f55b\", \"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faBible = {\n prefix: 'fas',\n iconName: 'bible',\n icon: [448, 512, [], \"f647\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faBicycle = {\n prefix: 'fas',\n iconName: 'bicycle',\n icon: [640, 512, [], \"f206\", \"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"]\n};\nvar faBinoculars = {\n prefix: 'fas',\n iconName: 'binoculars',\n icon: [512, 512, [], \"f1e5\", \"M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z\"]\n};\nvar faBiohazard = {\n prefix: 'fas',\n iconName: 'biohazard',\n icon: [576, 512, [], \"f780\", \"M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faBirthdayCake = {\n prefix: 'fas',\n iconName: 'birthday-cake',\n icon: [448, 512, [], \"f1fd\", \"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"]\n};\nvar faBlender = {\n prefix: 'fas',\n iconName: 'blender',\n icon: [512, 512, [], \"f517\", \"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"]\n};\nvar faBlenderPhone = {\n prefix: 'fas',\n iconName: 'blender-phone',\n icon: [576, 512, [], \"f6b6\", \"M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBlind = {\n prefix: 'fas',\n iconName: 'blind',\n icon: [384, 512, [], \"f29d\", \"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"]\n};\nvar faBlog = {\n prefix: 'fas',\n iconName: 'blog',\n icon: [512, 512, [], \"f781\", \"M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faBold = {\n prefix: 'fas',\n iconName: 'bold',\n icon: [384, 512, [], \"f032\", \"M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z\"]\n};\nvar faBolt = {\n prefix: 'fas',\n iconName: 'bolt',\n icon: [320, 512, [], \"f0e7\", \"M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z\"]\n};\nvar faBomb = {\n prefix: 'fas',\n iconName: 'bomb',\n icon: [512, 512, [], \"f1e2\", \"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nvar faBone = {\n prefix: 'fas',\n iconName: 'bone',\n icon: [640, 512, [], \"f5d7\", \"M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z\"]\n};\nvar faBong = {\n prefix: 'fas',\n iconName: 'bong',\n icon: [448, 512, [], \"f55c\", \"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"]\n};\nvar faBook = {\n prefix: 'fas',\n iconName: 'book',\n icon: [448, 512, [], \"f02d\", \"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"]\n};\nvar faBookDead = {\n prefix: 'fas',\n iconName: 'book-dead',\n icon: [448, 512, [], \"f6b7\", \"M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z\"]\n};\nvar faBookMedical = {\n prefix: 'fas',\n iconName: 'book-medical',\n icon: [448, 512, [], \"f7e6\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z\"]\n};\nvar faBookOpen = {\n prefix: 'fas',\n iconName: 'book-open',\n icon: [576, 512, [], \"f518\", \"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"]\n};\nvar faBookReader = {\n prefix: 'fas',\n iconName: 'book-reader',\n icon: [512, 512, [], \"f5da\", \"M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z\"]\n};\nvar faBookmark = {\n prefix: 'fas',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"]\n};\nvar faBowlingBall = {\n prefix: 'fas',\n iconName: 'bowling-ball',\n icon: [496, 512, [], \"f436\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faBox = {\n prefix: 'fas',\n iconName: 'box',\n icon: [512, 512, [], \"f466\", \"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"]\n};\nvar faBoxOpen = {\n prefix: 'fas',\n iconName: 'box-open',\n icon: [640, 512, [], \"f49e\", \"M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z\"]\n};\nvar faBoxes = {\n prefix: 'fas',\n iconName: 'boxes',\n icon: [576, 512, [], \"f468\", \"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"]\n};\nvar faBraille = {\n prefix: 'fas',\n iconName: 'braille',\n icon: [640, 512, [], \"f2a1\", \"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faBrain = {\n prefix: 'fas',\n iconName: 'brain',\n icon: [576, 512, [], \"f5dc\", \"M208 0c-29.87 0-54.74 20.55-61.8 48.22-.75-.02-1.45-.22-2.2-.22-35.34 0-64 28.65-64 64 0 4.84.64 9.51 1.66 14.04C52.54 138 32 166.57 32 200c0 12.58 3.16 24.32 8.34 34.91C16.34 248.72 0 274.33 0 304c0 33.34 20.42 61.88 49.42 73.89-.9 4.57-1.42 9.28-1.42 14.11 0 39.76 32.23 72 72 72 4.12 0 8.1-.55 12.03-1.21C141.61 491.31 168.25 512 200 512c39.77 0 72-32.24 72-72V205.45c-10.91 8.98-23.98 15.45-38.36 18.39-4.97 1.02-9.64-2.82-9.64-7.89v-16.18c0-3.57 2.35-6.78 5.8-7.66 24.2-6.16 42.2-27.95 42.2-54.04V64c0-35.35-28.66-64-64-64zm368 304c0-29.67-16.34-55.28-40.34-69.09 5.17-10.59 8.34-22.33 8.34-34.91 0-33.43-20.54-62-49.66-73.96 1.02-4.53 1.66-9.2 1.66-14.04 0-35.35-28.66-64-64-64-.75 0-1.45.2-2.2.22C422.74 20.55 397.87 0 368 0c-35.34 0-64 28.65-64 64v74.07c0 26.09 17.99 47.88 42.2 54.04 3.46.88 5.8 4.09 5.8 7.66v16.18c0 5.07-4.68 8.91-9.64 7.89-14.38-2.94-27.44-9.41-38.36-18.39V440c0 39.76 32.23 72 72 72 31.75 0 58.39-20.69 67.97-49.21 3.93.67 7.91 1.21 12.03 1.21 39.77 0 72-32.24 72-72 0-4.83-.52-9.54-1.42-14.11 29-12.01 49.42-40.55 49.42-73.89z\"]\n};\nvar faBreadSlice = {\n prefix: 'fas',\n iconName: 'bread-slice',\n icon: [576, 512, [], \"f7ec\", \"M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z\"]\n};\nvar faBriefcase = {\n prefix: 'fas',\n iconName: 'briefcase',\n icon: [512, 512, [], \"f0b1\", \"M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z\"]\n};\nvar faBriefcaseMedical = {\n prefix: 'fas',\n iconName: 'briefcase-medical',\n icon: [512, 512, [], \"f469\", \"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"]\n};\nvar faBroadcastTower = {\n prefix: 'fas',\n iconName: 'broadcast-tower',\n icon: [640, 512, [], \"f519\", \"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"]\n};\nvar faBroom = {\n prefix: 'fas',\n iconName: 'broom',\n icon: [640, 512, [], \"f51a\", \"M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z\"]\n};\nvar faBrush = {\n prefix: 'fas',\n iconName: 'brush',\n icon: [384, 512, [], \"f55d\", \"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"]\n};\nvar faBug = {\n prefix: 'fas',\n iconName: 'bug',\n icon: [512, 512, [], \"f188\", \"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"]\n};\nvar faBuilding = {\n prefix: 'fas',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"]\n};\nvar faBullhorn = {\n prefix: 'fas',\n iconName: 'bullhorn',\n icon: [576, 512, [], \"f0a1\", \"M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z\"]\n};\nvar faBullseye = {\n prefix: 'fas',\n iconName: 'bullseye',\n icon: [496, 512, [], \"f140\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"]\n};\nvar faBurn = {\n prefix: 'fas',\n iconName: 'burn',\n icon: [384, 512, [], \"f46a\", \"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"]\n};\nvar faBus = {\n prefix: 'fas',\n iconName: 'bus',\n icon: [512, 512, [], \"f207\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusAlt = {\n prefix: 'fas',\n iconName: 'bus-alt',\n icon: [512, 512, [], \"f55e\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusinessTime = {\n prefix: 'fas',\n iconName: 'business-time',\n icon: [640, 512, [], \"f64a\", \"M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z\"]\n};\nvar faCalculator = {\n prefix: 'fas',\n iconName: 'calculator',\n icon: [448, 512, [], \"f1ec\", \"M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z\"]\n};\nvar faCalendar = {\n prefix: 'fas',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"]\n};\nvar faCalendarAlt = {\n prefix: 'fas',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarCheck = {\n prefix: 'fas',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"]\n};\nvar faCalendarDay = {\n prefix: 'fas',\n iconName: 'calendar-day',\n icon: [448, 512, [], \"f783\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarMinus = {\n prefix: 'fas',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"]\n};\nvar faCalendarPlus = {\n prefix: 'fas',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"]\n};\nvar faCalendarTimes = {\n prefix: 'fas',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"]\n};\nvar faCalendarWeek = {\n prefix: 'fas',\n iconName: 'calendar-week',\n icon: [448, 512, [], \"f784\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCamera = {\n prefix: 'fas',\n iconName: 'camera',\n icon: [512, 512, [], \"f030\", \"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"]\n};\nvar faCameraRetro = {\n prefix: 'fas',\n iconName: 'camera-retro',\n icon: [512, 512, [], \"f083\", \"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"]\n};\nvar faCampground = {\n prefix: 'fas',\n iconName: 'campground',\n icon: [640, 512, [], \"f6bb\", \"M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z\"]\n};\nvar faCandyCane = {\n prefix: 'fas',\n iconName: 'candy-cane',\n icon: [512, 512, [], \"f786\", \"M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z\"]\n};\nvar faCannabis = {\n prefix: 'fas',\n iconName: 'cannabis',\n icon: [512, 512, [], \"f55f\", \"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"]\n};\nvar faCapsules = {\n prefix: 'fas',\n iconName: 'capsules',\n icon: [576, 512, [], \"f46b\", \"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"]\n};\nvar faCar = {\n prefix: 'fas',\n iconName: 'car',\n icon: [512, 512, [], \"f1b9\", \"M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarAlt = {\n prefix: 'fas',\n iconName: 'car-alt',\n icon: [480, 512, [], \"f5de\", \"M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarBattery = {\n prefix: 'fas',\n iconName: 'car-battery',\n icon: [512, 512, [], \"f5df\", \"M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faCarCrash = {\n prefix: 'fas',\n iconName: 'car-crash',\n icon: [640, 512, [], \"f5e1\", \"M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z\"]\n};\nvar faCarSide = {\n prefix: 'fas',\n iconName: 'car-side',\n icon: [640, 512, [], \"f5e4\", \"M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faCaretDown = {\n prefix: 'fas',\n iconName: 'caret-down',\n icon: [320, 512, [], \"f0d7\", \"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"]\n};\nvar faCaretLeft = {\n prefix: 'fas',\n iconName: 'caret-left',\n icon: [192, 512, [], \"f0d9\", \"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"]\n};\nvar faCaretRight = {\n prefix: 'fas',\n iconName: 'caret-right',\n icon: [192, 512, [], \"f0da\", \"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'fas',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'fas',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'fas',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'fas',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"]\n};\nvar faCaretUp = {\n prefix: 'fas',\n iconName: 'caret-up',\n icon: [320, 512, [], \"f0d8\", \"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"]\n};\nvar faCarrot = {\n prefix: 'fas',\n iconName: 'carrot',\n icon: [512, 512, [], \"f787\", \"M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z\"]\n};\nvar faCartArrowDown = {\n prefix: 'fas',\n iconName: 'cart-arrow-down',\n icon: [576, 512, [], \"f218\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"]\n};\nvar faCartPlus = {\n prefix: 'fas',\n iconName: 'cart-plus',\n icon: [576, 512, [], \"f217\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"]\n};\nvar faCashRegister = {\n prefix: 'fas',\n iconName: 'cash-register',\n icon: [512, 512, [], \"f788\", \"M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z\"]\n};\nvar faCat = {\n prefix: 'fas',\n iconName: 'cat',\n icon: [512, 512, [], \"f6be\", \"M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faCertificate = {\n prefix: 'fas',\n iconName: 'certificate',\n icon: [512, 512, [], \"f0a3\", \"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"]\n};\nvar faChair = {\n prefix: 'fas',\n iconName: 'chair',\n icon: [448, 512, [], \"f6c0\", \"M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z\"]\n};\nvar faChalkboard = {\n prefix: 'fas',\n iconName: 'chalkboard',\n icon: [640, 512, [], \"f51b\", \"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChalkboardTeacher = {\n prefix: 'fas',\n iconName: 'chalkboard-teacher',\n icon: [640, 512, [], \"f51c\", \"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"]\n};\nvar faChargingStation = {\n prefix: 'fas',\n iconName: 'charging-station',\n icon: [576, 512, [], \"f5e7\", \"M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z\"]\n};\nvar faChartArea = {\n prefix: 'fas',\n iconName: 'chart-area',\n icon: [512, 512, [], \"f1fe\", \"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"]\n};\nvar faChartBar = {\n prefix: 'fas',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChartLine = {\n prefix: 'fas',\n iconName: 'chart-line',\n icon: [512, 512, [], \"f201\", \"M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z\"]\n};\nvar faChartPie = {\n prefix: 'fas',\n iconName: 'chart-pie',\n icon: [544, 512, [], \"f200\", \"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"]\n};\nvar faCheck = {\n prefix: 'fas',\n iconName: 'check',\n icon: [512, 512, [], \"f00c\", \"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"]\n};\nvar faCheckCircle = {\n prefix: 'fas',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"]\n};\nvar faCheckDouble = {\n prefix: 'fas',\n iconName: 'check-double',\n icon: [512, 512, [], \"f560\", \"M504.5 171.95l-36.2-36.41c-10-10.05-26.21-10.05-36.2 0L192 377.02 79.9 264.28c-10-10.06-26.21-10.06-36.2 0L7.5 300.69c-10 10.05-10 26.36 0 36.41l166.4 167.36c10 10.06 26.21 10.06 36.2 0l294.4-296.09c10-10.06 10-26.36 0-36.42zM166.57 282.71c6.84 7.02 18.18 7.02 25.21.18L403.85 72.62c7.02-6.84 7.02-18.18.18-25.21L362.08 5.29c-6.84-7.02-18.18-7.02-25.21-.18L179.71 161.19l-68.23-68.77c-6.84-7.02-18.18-7.02-25.2-.18l-42.13 41.77c-7.02 6.84-7.02 18.18-.18 25.2l122.6 123.5z\"]\n};\nvar faCheckSquare = {\n prefix: 'fas',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"]\n};\nvar faCheese = {\n prefix: 'fas',\n iconName: 'cheese',\n icon: [512, 512, [], \"f7ef\", \"M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z\"]\n};\nvar faChess = {\n prefix: 'fas',\n iconName: 'chess',\n icon: [512, 512, [], \"f439\", \"M76.1 210.2h103.7l34.6-95.1c2.8-7.8-3-16.1-11.3-16.1H152V68.8h21.6c3.3 0 6-2.7 6-6V40.4c0-3.3-2.7-6-6-6h-28.4V6c0-3.3-2.7-6-6-6h-22.4c-3.3 0-6 2.7-6 6v28.4H82.4c-3.3 0-6 2.7-6 6v22.4c0 3.3 2.7 6 6 6H104V99H52.8c-8.3 0-14.1 8.3-11.3 16.1zm237.2 90.7l24.9 17c.1 18.1-.2 63.9-11.9 114.5h147.5c-11.7-50.5-12-96.3-11.9-114.5l24.9-16.9c1.1-.7 1.7-1.9 1.7-3.2v-69.9c0-2.1-1.7-3.9-3.9-3.9h-27.7c-2.1 0-3.9 1.7-3.9 3.9v31.5h-22.7v-31.5c0-2.1-1.7-3.9-3.9-3.9h-52.9c-2.1 0-3.9 1.7-3.9 3.9v31.5h-22.7v-31.5c0-2.1-1.7-3.9-3.9-3.9h-27.7c-2.1 0-3.9 1.7-3.9 3.9v69.9c.2 1.2.8 2.4 1.9 3.1zm71.5 52c0-8.4 6.8-15.2 15.2-15.2s15.2 6.8 15.2 15.2v30.3h-30.3v-30.3zm119.8 117.2L491 459.4v-15.6c0-2.1-1.7-3.9-3.9-3.9H312.9c-2.1 0-3.9 1.7-3.9 3.9v15.6L295.3 470c-.9.7-1.5 1.9-1.5 3v35c0 2.1 1.7 3.9 3.9 3.9h204.5c2.1 0 3.9-1.7 3.9-3.9v-35c0-1.1-.5-2.2-1.5-2.9zm-259.8-10.8l-22.1-14.2V417c0-3.3-2.7-6-6-6H39.3c-3.3 0-6 2.7-6 6v28.1l-22.1 14.2c-1.7 1.1-2.8 3-2.8 5.1V506c0 3.3 2.7 6 6 6h227.2c3.3 0 6-2.7 6-6v-41.6c0-2.1-1-4-2.8-5.1zm-45-208.9c3.3 0 6-2.7 6-6v-20.8c0-3.3-2.7-6-6-6H56.2c-3.3 0-6 2.7-6 6v20.8c0 3.3 2.7 6 6 6H82c0 28.8 2.5 95.1-17.4 153.2h126.8c-19.6-57-17.4-121.5-17.4-153.2z\"]\n};\nvar faChessBishop = {\n prefix: 'fas',\n iconName: 'chess-bishop',\n icon: [320, 512, [], \"f43a\", \"M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z\"]\n};\nvar faChessBoard = {\n prefix: 'fas',\n iconName: 'chess-board',\n icon: [512, 512, [], \"f43c\", \"M192 256v64h64v-64zm320 64v-64h-64v64zM0 192v64h64v-64zm512 0v-64h-64v64zm0 256v-64h-64v64zM256 256h64v-64h-64zM0 512h64v-64H0zm128 0h64v-64h-64zM384 0h-64v64h64zM128 0H64v64h64zm128 512h64v-64h-64zM0 64v64h64V64zm0 256v64h64v-64zM256 0h-64v64h64zm128 512h64v-64h-64zM64 384v64h64v-64zm256 0v64h64v-64zm-64-192v-64h-64v64zm128 192h64v-64h-64zM128 256H64v64h64zm256 0h64v-64h-64zM512 0h-64v64h64zM128 128H64v64h64zm256-64v64h64V64zM192 384v64h64v-64zm-64-64v64h64v-64zm128 0v64h64v-64zm-64-128h-64v64h64zm128-64V64h-64v64zm-128 0V64h-64v64zm128 64h64v-64h-64zm0 128h64v-64h-64z\"]\n};\nvar faChessKing = {\n prefix: 'fas',\n iconName: 'chess-king',\n icon: [448, 512, [], \"f43f\", \"M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z\"]\n};\nvar faChessKnight = {\n prefix: 'fas',\n iconName: 'chess-knight',\n icon: [384, 512, [], \"f441\", \"M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faChessPawn = {\n prefix: 'fas',\n iconName: 'chess-pawn',\n icon: [320, 512, [], \"f443\", \"M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z\"]\n};\nvar faChessQueen = {\n prefix: 'fas',\n iconName: 'chess-queen',\n icon: [512, 512, [], \"f445\", \"M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z\"]\n};\nvar faChessRook = {\n prefix: 'fas',\n iconName: 'chess-rook',\n icon: [384, 512, [], \"f447\", \"M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z\"]\n};\nvar faChevronCircleDown = {\n prefix: 'fas',\n iconName: 'chevron-circle-down',\n icon: [512, 512, [], \"f13a\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"]\n};\nvar faChevronCircleLeft = {\n prefix: 'fas',\n iconName: 'chevron-circle-left',\n icon: [512, 512, [], \"f137\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"]\n};\nvar faChevronCircleRight = {\n prefix: 'fas',\n iconName: 'chevron-circle-right',\n icon: [512, 512, [], \"f138\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"]\n};\nvar faChevronCircleUp = {\n prefix: 'fas',\n iconName: 'chevron-circle-up',\n icon: [512, 512, [], \"f139\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"]\n};\nvar faChevronDown = {\n prefix: 'fas',\n iconName: 'chevron-down',\n icon: [448, 512, [], \"f078\", \"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"]\n};\nvar faChevronLeft = {\n prefix: 'fas',\n iconName: 'chevron-left',\n icon: [320, 512, [], \"f053\", \"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"]\n};\nvar faChevronRight = {\n prefix: 'fas',\n iconName: 'chevron-right',\n icon: [320, 512, [], \"f054\", \"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"]\n};\nvar faChevronUp = {\n prefix: 'fas',\n iconName: 'chevron-up',\n icon: [448, 512, [], \"f077\", \"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"]\n};\nvar faChild = {\n prefix: 'fas',\n iconName: 'child',\n icon: [384, 512, [], \"f1ae\", \"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"]\n};\nvar faChurch = {\n prefix: 'fas',\n iconName: 'church',\n icon: [640, 512, [], \"f51d\", \"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"]\n};\nvar faCircle = {\n prefix: 'fas',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"]\n};\nvar faCircleNotch = {\n prefix: 'fas',\n iconName: 'circle-notch',\n icon: [512, 512, [], \"f1ce\", \"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"]\n};\nvar faCity = {\n prefix: 'fas',\n iconName: 'city',\n icon: [640, 512, [], \"f64f\", \"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"]\n};\nvar faClinicMedical = {\n prefix: 'fas',\n iconName: 'clinic-medical',\n icon: [576, 512, [], \"f7f2\", \"M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z\"]\n};\nvar faClipboard = {\n prefix: 'fas',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"]\n};\nvar faClipboardCheck = {\n prefix: 'fas',\n iconName: 'clipboard-check',\n icon: [384, 512, [], \"f46c\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"]\n};\nvar faClipboardList = {\n prefix: 'fas',\n iconName: 'clipboard-list',\n icon: [384, 512, [], \"f46d\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faClock = {\n prefix: 'fas',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n prefix: 'fas',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'fas',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"]\n};\nvar faCloud = {\n prefix: 'fas',\n iconName: 'cloud',\n icon: [640, 512, [], \"f0c2\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"]\n};\nvar faCloudDownloadAlt = {\n prefix: 'fas',\n iconName: 'cloud-download-alt',\n icon: [640, 512, [], \"f381\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"]\n};\nvar faCloudMeatball = {\n prefix: 'fas',\n iconName: 'cloud-meatball',\n icon: [512, 512, [], \"f73b\", \"M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z\"]\n};\nvar faCloudMoon = {\n prefix: 'fas',\n iconName: 'cloud-moon',\n icon: [576, 512, [], \"f6c3\", \"M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z\"]\n};\nvar faCloudMoonRain = {\n prefix: 'fas',\n iconName: 'cloud-moon-rain',\n icon: [576, 512, [], \"f73c\", \"M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudRain = {\n prefix: 'fas',\n iconName: 'cloud-rain',\n icon: [512, 512, [], \"f73d\", \"M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z\"]\n};\nvar faCloudShowersHeavy = {\n prefix: 'fas',\n iconName: 'cloud-showers-heavy',\n icon: [512, 512, [], \"f740\", \"M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z\"]\n};\nvar faCloudSun = {\n prefix: 'fas',\n iconName: 'cloud-sun',\n icon: [640, 512, [], \"f6c4\", \"M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z\"]\n};\nvar faCloudSunRain = {\n prefix: 'fas',\n iconName: 'cloud-sun-rain',\n icon: [576, 512, [], \"f743\", \"M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudUploadAlt = {\n prefix: 'fas',\n iconName: 'cloud-upload-alt',\n icon: [640, 512, [], \"f382\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"]\n};\nvar faCocktail = {\n prefix: 'fas',\n iconName: 'cocktail',\n icon: [576, 512, [], \"f561\", \"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"]\n};\nvar faCode = {\n prefix: 'fas',\n iconName: 'code',\n icon: [640, 512, [], \"f121\", \"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"]\n};\nvar faCodeBranch = {\n prefix: 'fas',\n iconName: 'code-branch',\n icon: [384, 512, [], \"f126\", \"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"]\n};\nvar faCoffee = {\n prefix: 'fas',\n iconName: 'coffee',\n icon: [640, 512, [], \"f0f4\", \"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"]\n};\nvar faCog = {\n prefix: 'fas',\n iconName: 'cog',\n icon: [512, 512, [], \"f013\", \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faCogs = {\n prefix: 'fas',\n iconName: 'cogs',\n icon: [640, 512, [], \"f085\", \"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"]\n};\nvar faCoins = {\n prefix: 'fas',\n iconName: 'coins',\n icon: [512, 512, [], \"f51e\", \"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"]\n};\nvar faColumns = {\n prefix: 'fas',\n iconName: 'columns',\n icon: [512, 512, [], \"f0db\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"]\n};\nvar faComment = {\n prefix: 'fas',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"]\n};\nvar faCommentAlt = {\n prefix: 'fas',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"]\n};\nvar faCommentDollar = {\n prefix: 'fas',\n iconName: 'comment-dollar',\n icon: [512, 512, [], \"f651\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z\"]\n};\nvar faCommentDots = {\n prefix: 'fas',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faCommentMedical = {\n prefix: 'fas',\n iconName: 'comment-medical',\n icon: [512, 512, [], \"f7f5\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z\"]\n};\nvar faCommentSlash = {\n prefix: 'fas',\n iconName: 'comment-slash',\n icon: [640, 512, [], \"f4b3\", \"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faComments = {\n prefix: 'fas',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"]\n};\nvar faCommentsDollar = {\n prefix: 'fas',\n iconName: 'comments-dollar',\n icon: [576, 512, [], \"f653\", \"M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z\"]\n};\nvar faCompactDisc = {\n prefix: 'fas',\n iconName: 'compact-disc',\n icon: [496, 512, [], \"f51f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faCompass = {\n prefix: 'fas',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z\"]\n};\nvar faCompress = {\n prefix: 'fas',\n iconName: 'compress',\n icon: [448, 512, [], \"f066\", \"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faCompressArrowsAlt = {\n prefix: 'fas',\n iconName: 'compress-arrows-alt',\n icon: [512, 512, [], \"f78c\", \"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"]\n};\nvar faConciergeBell = {\n prefix: 'fas',\n iconName: 'concierge-bell',\n icon: [512, 512, [], \"f562\", \"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faCookie = {\n prefix: 'fas',\n iconName: 'cookie',\n icon: [512, 512, [], \"f563\", \"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCookieBite = {\n prefix: 'fas',\n iconName: 'cookie-bite',\n icon: [512, 512, [], \"f564\", \"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCopy = {\n prefix: 'fas',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"]\n};\nvar faCopyright = {\n prefix: 'fas',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"]\n};\nvar faCouch = {\n prefix: 'fas',\n iconName: 'couch',\n icon: [640, 512, [], \"f4b8\", \"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"]\n};\nvar faCreditCard = {\n prefix: 'fas',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"]\n};\nvar faCrop = {\n prefix: 'fas',\n iconName: 'crop',\n icon: [512, 512, [], \"f125\", \"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faCropAlt = {\n prefix: 'fas',\n iconName: 'crop-alt',\n icon: [512, 512, [], \"f565\", \"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"]\n};\nvar faCross = {\n prefix: 'fas',\n iconName: 'cross',\n icon: [384, 512, [], \"f654\", \"M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faCrosshairs = {\n prefix: 'fas',\n iconName: 'crosshairs',\n icon: [512, 512, [], \"f05b\", \"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"]\n};\nvar faCrow = {\n prefix: 'fas',\n iconName: 'crow',\n icon: [640, 512, [], \"f520\", \"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faCrown = {\n prefix: 'fas',\n iconName: 'crown',\n icon: [640, 512, [], \"f521\", \"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faCrutch = {\n prefix: 'fas',\n iconName: 'crutch',\n icon: [512, 512, [], \"f7f7\", \"M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z\"]\n};\nvar faCube = {\n prefix: 'fas',\n iconName: 'cube',\n icon: [512, 512, [], \"f1b2\", \"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"]\n};\nvar faCubes = {\n prefix: 'fas',\n iconName: 'cubes',\n icon: [512, 512, [], \"f1b3\", \"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"]\n};\nvar faCut = {\n prefix: 'fas',\n iconName: 'cut',\n icon: [448, 512, [], \"f0c4\", \"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faDatabase = {\n prefix: 'fas',\n iconName: 'database',\n icon: [448, 512, [], \"f1c0\", \"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"]\n};\nvar faDeaf = {\n prefix: 'fas',\n iconName: 'deaf',\n icon: [512, 512, [], \"f2a4\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"]\n};\nvar faDemocrat = {\n prefix: 'fas',\n iconName: 'democrat',\n icon: [640, 512, [], \"f747\", \"M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z\"]\n};\nvar faDesktop = {\n prefix: 'fas',\n iconName: 'desktop',\n icon: [576, 512, [], \"f108\", \"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"]\n};\nvar faDharmachakra = {\n prefix: 'fas',\n iconName: 'dharmachakra',\n icon: [512, 512, [], \"f655\", \"M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z\"]\n};\nvar faDiagnoses = {\n prefix: 'fas',\n iconName: 'diagnoses',\n icon: [640, 512, [], \"f470\", \"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDice = {\n prefix: 'fas',\n iconName: 'dice',\n icon: [640, 512, [], \"f522\", \"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faDiceD20 = {\n prefix: 'fas',\n iconName: 'dice-d20',\n icon: [480, 512, [], \"f6cf\", \"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"]\n};\nvar faDiceD6 = {\n prefix: 'fas',\n iconName: 'dice-d6',\n icon: [448, 512, [], \"f6d1\", \"M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z\"]\n};\nvar faDiceFive = {\n prefix: 'fas',\n iconName: 'dice-five',\n icon: [448, 512, [], \"f523\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceFour = {\n prefix: 'fas',\n iconName: 'dice-four',\n icon: [448, 512, [], \"f524\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceOne = {\n prefix: 'fas',\n iconName: 'dice-one',\n icon: [448, 512, [], \"f525\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceSix = {\n prefix: 'fas',\n iconName: 'dice-six',\n icon: [448, 512, [], \"f526\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceThree = {\n prefix: 'fas',\n iconName: 'dice-three',\n icon: [448, 512, [], \"f527\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceTwo = {\n prefix: 'fas',\n iconName: 'dice-two',\n icon: [448, 512, [], \"f528\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDigitalTachograph = {\n prefix: 'fas',\n iconName: 'digital-tachograph',\n icon: [640, 512, [], \"f566\", \"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"]\n};\nvar faDirections = {\n prefix: 'fas',\n iconName: 'directions',\n icon: [512, 512, [], \"f5eb\", \"M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z\"]\n};\nvar faDivide = {\n prefix: 'fas',\n iconName: 'divide',\n icon: [448, 512, [], \"f529\", \"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faDizzy = {\n prefix: 'fas',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"]\n};\nvar faDna = {\n prefix: 'fas',\n iconName: 'dna',\n icon: [448, 512, [], \"f471\", \"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"]\n};\nvar faDog = {\n prefix: 'fas',\n iconName: 'dog',\n icon: [512, 512, [], \"f6d3\", \"M496 96h-64l-7.16-14.31A32 32 0 0 0 396.22 64H342.6l-27.28-27.28C305.23 26.64 288 33.78 288 48.03v149.84l128 45.71V208h32c35.35 0 64-28.65 64-64v-32c0-8.84-7.16-16-16-16zm-112 48c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM96 224c-17.64 0-32-14.36-32-32 0-17.67-14.33-32-32-32S0 174.33 0 192c0 41.66 26.83 76.85 64 90.1V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V384h160v112c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V277.55L266.05 224H96z\"]\n};\nvar faDollarSign = {\n prefix: 'fas',\n iconName: 'dollar-sign',\n icon: [288, 512, [], \"f155\", \"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"]\n};\nvar faDolly = {\n prefix: 'fas',\n iconName: 'dolly',\n icon: [576, 512, [], \"f472\", \"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faDollyFlatbed = {\n prefix: 'fas',\n iconName: 'dolly-flatbed',\n icon: [640, 512, [], \"f474\", \"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDonate = {\n prefix: 'fas',\n iconName: 'donate',\n icon: [512, 512, [], \"f4b9\", \"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faDoorClosed = {\n prefix: 'fas',\n iconName: 'door-closed',\n icon: [640, 512, [], \"f52a\", \"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"]\n};\nvar faDoorOpen = {\n prefix: 'fas',\n iconName: 'door-open',\n icon: [640, 512, [], \"f52b\", \"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"]\n};\nvar faDotCircle = {\n prefix: 'fas',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"]\n};\nvar faDove = {\n prefix: 'fas',\n iconName: 'dove',\n icon: [512, 512, [], \"f4ba\", \"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faDownload = {\n prefix: 'fas',\n iconName: 'download',\n icon: [512, 512, [], \"f019\", \"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faDraftingCompass = {\n prefix: 'fas',\n iconName: 'drafting-compass',\n icon: [512, 512, [], \"f568\", \"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"]\n};\nvar faDragon = {\n prefix: 'fas',\n iconName: 'dragon',\n icon: [640, 512, [], \"f6d5\", \"M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z\"]\n};\nvar faDrawPolygon = {\n prefix: 'fas',\n iconName: 'draw-polygon',\n icon: [448, 512, [], \"f5ee\", \"M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z\"]\n};\nvar faDrum = {\n prefix: 'fas',\n iconName: 'drum',\n icon: [576, 512, [], \"f569\", \"M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z\"]\n};\nvar faDrumSteelpan = {\n prefix: 'fas',\n iconName: 'drum-steelpan',\n icon: [576, 512, [], \"f56a\", \"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"]\n};\nvar faDrumstickBite = {\n prefix: 'fas',\n iconName: 'drumstick-bite',\n icon: [512, 512, [], \"f6d7\", \"M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z\"]\n};\nvar faDumbbell = {\n prefix: 'fas',\n iconName: 'dumbbell',\n icon: [640, 512, [], \"f44b\", \"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"]\n};\nvar faDumpster = {\n prefix: 'fas',\n iconName: 'dumpster',\n icon: [576, 512, [], \"f793\", \"M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDumpsterFire = {\n prefix: 'fas',\n iconName: 'dumpster-fire',\n icon: [640, 512, [], \"f794\", \"M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z\"]\n};\nvar faDungeon = {\n prefix: 'fas',\n iconName: 'dungeon',\n icon: [512, 512, [], \"f6d9\", \"M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z\"]\n};\nvar faEdit = {\n prefix: 'fas',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"]\n};\nvar faEgg = {\n prefix: 'fas',\n iconName: 'egg',\n icon: [384, 512, [], \"f7fb\", \"M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z\"]\n};\nvar faEject = {\n prefix: 'fas',\n iconName: 'eject',\n icon: [448, 512, [], \"f052\", \"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"]\n};\nvar faEllipsisH = {\n prefix: 'fas',\n iconName: 'ellipsis-h',\n icon: [512, 512, [], \"f141\", \"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"]\n};\nvar faEllipsisV = {\n prefix: 'fas',\n iconName: 'ellipsis-v',\n icon: [192, 512, [], \"f142\", \"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"]\n};\nvar faEnvelope = {\n prefix: 'fas',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'fas',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"]\n};\nvar faEnvelopeOpenText = {\n prefix: 'fas',\n iconName: 'envelope-open-text',\n icon: [512, 512, [], \"f658\", \"M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z\"]\n};\nvar faEnvelopeSquare = {\n prefix: 'fas',\n iconName: 'envelope-square',\n icon: [448, 512, [], \"f199\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"]\n};\nvar faEquals = {\n prefix: 'fas',\n iconName: 'equals',\n icon: [448, 512, [], \"f52c\", \"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faEraser = {\n prefix: 'fas',\n iconName: 'eraser',\n icon: [512, 512, [], \"f12d\", \"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"]\n};\nvar faEthernet = {\n prefix: 'fas',\n iconName: 'ethernet',\n icon: [512, 512, [], \"f796\", \"M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"]\n};\nvar faEuroSign = {\n prefix: 'fas',\n iconName: 'euro-sign',\n icon: [320, 512, [], \"f153\", \"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"]\n};\nvar faExchangeAlt = {\n prefix: 'fas',\n iconName: 'exchange-alt',\n icon: [512, 512, [], \"f362\", \"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faExclamation = {\n prefix: 'fas',\n iconName: 'exclamation',\n icon: [192, 512, [], \"f12a\", \"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"]\n};\nvar faExclamationCircle = {\n prefix: 'fas',\n iconName: 'exclamation-circle',\n icon: [512, 512, [], \"f06a\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExclamationTriangle = {\n prefix: 'fas',\n iconName: 'exclamation-triangle',\n icon: [576, 512, [], \"f071\", \"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExpand = {\n prefix: 'fas',\n iconName: 'expand',\n icon: [448, 512, [], \"f065\", \"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"]\n};\nvar faExpandArrowsAlt = {\n prefix: 'fas',\n iconName: 'expand-arrows-alt',\n icon: [448, 512, [], \"f31e\", \"M448.1 344v112c0 13.3-10.7 24-24 24h-112c-21.4 0-32.1-25.9-17-41l36.2-36.2L224 295.6 116.8 402.9 153 439c15.1 15.1 4.4 41-17 41H24c-13.3 0-24-10.7-24-24V344c0-21.4 25.9-32.1 41-17l36.2 36.2L184.5 256 77.2 148.7 41 185c-15.1 15.1-41 4.4-41-17V56c0-13.3 10.7-24 24-24h112c21.4 0 32.1 25.9 17 41l-36.2 36.2L224 216.4l107.3-107.3L295.1 73c-15.1-15.1-4.4-41 17-41h112c13.3 0 24 10.7 24 24v112c0 21.4-25.9 32.1-41 17l-36.2-36.2L263.6 256l107.3 107.3 36.2-36.2c15.1-15.2 41-4.5 41 16.9z\"]\n};\nvar faExternalLinkAlt = {\n prefix: 'fas',\n iconName: 'external-link-alt',\n icon: [576, 512, [], \"f35d\", \"M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z\"]\n};\nvar faExternalLinkSquareAlt = {\n prefix: 'fas',\n iconName: 'external-link-square-alt',\n icon: [448, 512, [], \"f360\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"]\n};\nvar faEye = {\n prefix: 'fas',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z\"]\n};\nvar faEyeDropper = {\n prefix: 'fas',\n iconName: 'eye-dropper',\n icon: [512, 512, [], \"f1fb\", \"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"]\n};\nvar faEyeSlash = {\n prefix: 'fas',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z\"]\n};\nvar faFastBackward = {\n prefix: 'fas',\n iconName: 'fast-backward',\n icon: [512, 512, [], \"f049\", \"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"]\n};\nvar faFastForward = {\n prefix: 'fas',\n iconName: 'fast-forward',\n icon: [512, 512, [], \"f050\", \"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"]\n};\nvar faFax = {\n prefix: 'fas',\n iconName: 'fax',\n icon: [512, 512, [], \"f1ac\", \"M64 128H32c-17.67 0-32 14.33-32 32v320c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zm416 32V77.25c0-8.49-3.37-16.62-9.37-22.63L425.37 9.37c-6-6-14.14-9.37-22.63-9.37H160c-17.67 0-32 14.33-32 32v448c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zM288 432c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm128 128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm16-112H176V48h208v32c0 8.84 7.16 16 16 16h32v96z\"]\n};\nvar faFeather = {\n prefix: 'fas',\n iconName: 'feather',\n icon: [512, 512, [], \"f52d\", \"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"]\n};\nvar faFeatherAlt = {\n prefix: 'fas',\n iconName: 'feather-alt',\n icon: [512, 512, [], \"f56b\", \"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"]\n};\nvar faFemale = {\n prefix: 'fas',\n iconName: 'female',\n icon: [256, 512, [], \"f182\", \"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"]\n};\nvar faFighterJet = {\n prefix: 'fas',\n iconName: 'fighter-jet',\n icon: [640, 512, [], \"f0fb\", \"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"]\n};\nvar faFile = {\n prefix: 'fas',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileAlt = {\n prefix: 'fas',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileArchive = {\n prefix: 'fas',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z\"]\n};\nvar faFileAudio = {\n prefix: 'fas',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileCode = {\n prefix: 'fas',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"]\n};\nvar faFileContract = {\n prefix: 'fas',\n iconName: 'file-contract',\n icon: [384, 512, [], \"f56c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileCsv = {\n prefix: 'fas',\n iconName: 'file-csv',\n icon: [384, 512, [], \"f6dd\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileDownload = {\n prefix: 'fas',\n iconName: 'file-download',\n icon: [384, 512, [], \"f56d\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileExcel = {\n prefix: 'fas',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileExport = {\n prefix: 'fas',\n iconName: 'file-export',\n icon: [576, 512, [], \"f56e\", \"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z\"]\n};\nvar faFileImage = {\n prefix: 'fas',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"]\n};\nvar faFileImport = {\n prefix: 'fas',\n iconName: 'file-import',\n icon: [512, 512, [], \"f56f\", \"M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z\"]\n};\nvar faFileInvoice = {\n prefix: 'fas',\n iconName: 'file-invoice',\n icon: [384, 512, [], \"f570\", \"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"]\n};\nvar faFileInvoiceDollar = {\n prefix: 'fas',\n iconName: 'file-invoice-dollar',\n icon: [384, 512, [], \"f571\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"]\n};\nvar faFileMedical = {\n prefix: 'fas',\n iconName: 'file-medical',\n icon: [384, 512, [], \"f477\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"]\n};\nvar faFileMedicalAlt = {\n prefix: 'fas',\n iconName: 'file-medical-alt',\n icon: [448, 512, [], \"f478\", \"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFilePdf = {\n prefix: 'fas',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'fas',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"]\n};\nvar faFilePrescription = {\n prefix: 'fas',\n iconName: 'file-prescription',\n icon: [384, 512, [], \"f572\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileSignature = {\n prefix: 'fas',\n iconName: 'file-signature',\n icon: [576, 512, [], \"f573\", \"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"]\n};\nvar faFileUpload = {\n prefix: 'fas',\n iconName: 'file-upload',\n icon: [384, 512, [], \"f574\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileVideo = {\n prefix: 'fas',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"]\n};\nvar faFileWord = {\n prefix: 'fas',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFill = {\n prefix: 'fas',\n iconName: 'fill',\n icon: [512, 512, [], \"f575\", \"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"]\n};\nvar faFillDrip = {\n prefix: 'fas',\n iconName: 'fill-drip',\n icon: [576, 512, [], \"f576\", \"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"]\n};\nvar faFilm = {\n prefix: 'fas',\n iconName: 'film',\n icon: [512, 512, [], \"f008\", \"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faFilter = {\n prefix: 'fas',\n iconName: 'filter',\n icon: [512, 512, [], \"f0b0\", \"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"]\n};\nvar faFingerprint = {\n prefix: 'fas',\n iconName: 'fingerprint',\n icon: [512, 512, [], \"f577\", \"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"]\n};\nvar faFire = {\n prefix: 'fas',\n iconName: 'fire',\n icon: [384, 512, [], \"f06d\", \"M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z\"]\n};\nvar faFireAlt = {\n prefix: 'fas',\n iconName: 'fire-alt',\n icon: [448, 512, [], \"f7e4\", \"M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z\"]\n};\nvar faFireExtinguisher = {\n prefix: 'fas',\n iconName: 'fire-extinguisher',\n icon: [448, 512, [], \"f134\", \"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"]\n};\nvar faFirstAid = {\n prefix: 'fas',\n iconName: 'first-aid',\n icon: [576, 512, [], \"f479\", \"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faFish = {\n prefix: 'fas',\n iconName: 'fish',\n icon: [576, 512, [], \"f578\", \"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFistRaised = {\n prefix: 'fas',\n iconName: 'fist-raised',\n icon: [384, 512, [], \"f6de\", \"M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z\"]\n};\nvar faFlag = {\n prefix: 'fas',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"]\n};\nvar faFlagCheckered = {\n prefix: 'fas',\n iconName: 'flag-checkered',\n icon: [512, 512, [], \"f11e\", \"M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z\"]\n};\nvar faFlagUsa = {\n prefix: 'fas',\n iconName: 'flag-usa',\n icon: [512, 512, [], \"f74d\", \"M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z\"]\n};\nvar faFlask = {\n prefix: 'fas',\n iconName: 'flask',\n icon: [448, 512, [], \"f0c3\", \"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"]\n};\nvar faFlushed = {\n prefix: 'fas',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"]\n};\nvar faFolder = {\n prefix: 'fas',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"]\n};\nvar faFolderMinus = {\n prefix: 'fas',\n iconName: 'folder-minus',\n icon: [512, 512, [], \"f65d\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFolderOpen = {\n prefix: 'fas',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"]\n};\nvar faFolderPlus = {\n prefix: 'fas',\n iconName: 'folder-plus',\n icon: [512, 512, [], \"f65e\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16h-72v72c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-72h-72c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h72v-72c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v72h72c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFont = {\n prefix: 'fas',\n iconName: 'font',\n icon: [448, 512, [], \"f031\", \"M432 416h-26.7L275.5 42.7c-2.2-6.4-8.3-10.7-15.1-10.7h-72.8c-6.8 0-12.9 4.3-15.1 10.7L42.7 416H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h136c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-24l26.6-80.8h138.2l26.6 80.8H296c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h136c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM174.4 268.3l42-124.1c4.3-15.2 6.6-28.2 7.6-34.6.8 6.5 2.9 19.5 7.7 34.7l41.3 124z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'fas',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFootballBall = {\n prefix: 'fas',\n iconName: 'football-ball',\n icon: [496, 512, [], \"f44e\", \"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"]\n};\nvar faForward = {\n prefix: 'fas',\n iconName: 'forward',\n icon: [512, 512, [], \"f04e\", \"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"]\n};\nvar faFrog = {\n prefix: 'fas',\n iconName: 'frog',\n icon: [576, 512, [], \"f52e\", \"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFrown = {\n prefix: 'fas',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"]\n};\nvar faFrownOpen = {\n prefix: 'fas',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faFunnelDollar = {\n prefix: 'fas',\n iconName: 'funnel-dollar',\n icon: [640, 512, [], \"f662\", \"M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z\"]\n};\nvar faFutbol = {\n prefix: 'fas',\n iconName: 'futbol',\n icon: [512, 512, [], \"f1e3\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"]\n};\nvar faGamepad = {\n prefix: 'fas',\n iconName: 'gamepad',\n icon: [640, 512, [], \"f11b\", \"M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faGasPump = {\n prefix: 'fas',\n iconName: 'gas-pump',\n icon: [512, 512, [], \"f52f\", \"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"]\n};\nvar faGavel = {\n prefix: 'fas',\n iconName: 'gavel',\n icon: [512, 512, [], \"f0e3\", \"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"]\n};\nvar faGem = {\n prefix: 'fas',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"]\n};\nvar faGenderless = {\n prefix: 'fas',\n iconName: 'genderless',\n icon: [288, 512, [], \"f22d\", \"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"]\n};\nvar faGhost = {\n prefix: 'fas',\n iconName: 'ghost',\n icon: [384, 512, [], \"f6e2\", \"M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faGift = {\n prefix: 'fas',\n iconName: 'gift',\n icon: [512, 512, [], \"f06b\", \"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z\"]\n};\nvar faGifts = {\n prefix: 'fas',\n iconName: 'gifts',\n icon: [640, 512, [], \"f79c\", \"M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z\"]\n};\nvar faGlassCheers = {\n prefix: 'fas',\n iconName: 'glass-cheers',\n icon: [640, 512, [], \"f79f\", \"M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z\"]\n};\nvar faGlassMartini = {\n prefix: 'fas',\n iconName: 'glass-martini',\n icon: [512, 512, [], \"f000\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"]\n};\nvar faGlassMartiniAlt = {\n prefix: 'fas',\n iconName: 'glass-martini-alt',\n icon: [512, 512, [], \"f57b\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"]\n};\nvar faGlassWhiskey = {\n prefix: 'fas',\n iconName: 'glass-whiskey',\n icon: [512, 512, [], \"f7a0\", \"M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z\"]\n};\nvar faGlasses = {\n prefix: 'fas',\n iconName: 'glasses',\n icon: [576, 512, [], \"f530\", \"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"]\n};\nvar faGlobe = {\n prefix: 'fas',\n iconName: 'globe',\n icon: [496, 512, [], \"f0ac\", \"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"]\n};\nvar faGlobeAfrica = {\n prefix: 'fas',\n iconName: 'globe-africa',\n icon: [496, 512, [], \"f57c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"]\n};\nvar faGlobeAmericas = {\n prefix: 'fas',\n iconName: 'globe-americas',\n icon: [496, 512, [], \"f57d\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"]\n};\nvar faGlobeAsia = {\n prefix: 'fas',\n iconName: 'globe-asia',\n icon: [496, 512, [], \"f57e\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"]\n};\nvar faGlobeEurope = {\n prefix: 'fas',\n iconName: 'globe-europe',\n icon: [496, 512, [], \"f7a2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z\"]\n};\nvar faGolfBall = {\n prefix: 'fas',\n iconName: 'golf-ball',\n icon: [416, 512, [], \"f450\", \"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"]\n};\nvar faGopuram = {\n prefix: 'fas',\n iconName: 'gopuram',\n icon: [512, 512, [], \"f664\", \"M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"]\n};\nvar faGraduationCap = {\n prefix: 'fas',\n iconName: 'graduation-cap',\n icon: [640, 512, [], \"f19d\", \"M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z\"]\n};\nvar faGreaterThan = {\n prefix: 'fas',\n iconName: 'greater-than',\n icon: [384, 512, [], \"f531\", \"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"]\n};\nvar faGreaterThanEqual = {\n prefix: 'fas',\n iconName: 'greater-than-equal',\n icon: [448, 512, [], \"f532\", \"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faGrimace = {\n prefix: 'fas',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"]\n};\nvar faGrin = {\n prefix: 'fas',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinAlt = {\n prefix: 'fas',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'fas',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'fas',\n iconName: 'grin-beam-sweat',\n icon: [504, 512, [], \"f583\", \"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinHearts = {\n prefix: 'fas',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"]\n};\nvar faGrinSquint = {\n prefix: 'fas',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'fas',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"]\n};\nvar faGrinStars = {\n prefix: 'fas',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"]\n};\nvar faGrinTears = {\n prefix: 'fas',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinTongue = {\n prefix: 'fas',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'fas',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'fas',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinWink = {\n prefix: 'fas',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"]\n};\nvar faGripHorizontal = {\n prefix: 'fas',\n iconName: 'grip-horizontal',\n icon: [448, 512, [], \"f58d\", \"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGripLines = {\n prefix: 'fas',\n iconName: 'grip-lines',\n icon: [512, 512, [], \"f7a4\", \"M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faGripLinesVertical = {\n prefix: 'fas',\n iconName: 'grip-lines-vertical',\n icon: [256, 512, [], \"f7a5\", \"M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z\"]\n};\nvar faGripVertical = {\n prefix: 'fas',\n iconName: 'grip-vertical',\n icon: [320, 512, [], \"f58e\", \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGuitar = {\n prefix: 'fas',\n iconName: 'guitar',\n icon: [512, 512, [], \"f7a6\", \"M502.6 54.6L457.4 9.4c-12.5-12.5-32.8-12.5-45.3 0l-67.9 67.9c-12.5 12.5-12.5 32.8 0 45.3L290 176.7c-45.4-29-100.4-28.9-133.5 4.2-9.7 9.7-16.4 21.2-20.5 33.9-6.1 18.8-23.5 33.1-42.7 34.9-24 2.3-46.3 11.6-63.4 28.8C-16.3 324.6-8 407.6 48.2 463.8c56.2 56.2 139.2 64.4 185.3 18.3 17.2-17.1 26.5-39.4 28.8-63.5 1.8-19.1 16.1-36.6 34.9-42.7 12.7-4.1 24.2-10.8 33.9-20.5 33.1-33.1 33.1-88.1 4.2-133.5l54.2-54.2c12.5 12.5 32.8 12.5 45.3 0l67.9-67.9c12.4-12.4 12.4-32.7-.1-45.2zM208 352c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faHSquare = {\n prefix: 'fas',\n iconName: 'h-square',\n icon: [448, 512, [], \"f0fd\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"]\n};\nvar faHamburger = {\n prefix: 'fas',\n iconName: 'hamburger',\n icon: [512, 512, [], \"f805\", \"M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z\"]\n};\nvar faHammer = {\n prefix: 'fas',\n iconName: 'hammer',\n icon: [576, 512, [], \"f6e3\", \"M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z\"]\n};\nvar faHamsa = {\n prefix: 'fas',\n iconName: 'hamsa',\n icon: [512, 512, [], \"f665\", \"M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faHandHolding = {\n prefix: 'fas',\n iconName: 'hand-holding',\n icon: [576, 512, [], \"f4bd\", \"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingHeart = {\n prefix: 'fas',\n iconName: 'hand-holding-heart',\n icon: [576, 512, [], \"f4be\", \"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingUsd = {\n prefix: 'fas',\n iconName: 'hand-holding-usd',\n icon: [544, 512, [], \"f4c0\", \"M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-17.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z\"]\n};\nvar faHandLizard = {\n prefix: 'fas',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"]\n};\nvar faHandMiddleFinger = {\n prefix: 'fas',\n iconName: 'hand-middle-finger',\n icon: [512, 512, [], \"f806\", \"M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z\"]\n};\nvar faHandPaper = {\n prefix: 'fas',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"]\n};\nvar faHandPeace = {\n prefix: 'fas',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"]\n};\nvar faHandPointDown = {\n prefix: 'fas',\n iconName: 'hand-point-down',\n icon: [384, 512, [], \"f0a7\", \"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointLeft = {\n prefix: 'fas',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"]\n};\nvar faHandPointRight = {\n prefix: 'fas',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointUp = {\n prefix: 'fas',\n iconName: 'hand-point-up',\n icon: [384, 512, [], \"f0a6\", \"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faHandPointer = {\n prefix: 'fas',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"]\n};\nvar faHandRock = {\n prefix: 'fas',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z\"]\n};\nvar faHandScissors = {\n prefix: 'fas',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"]\n};\nvar faHandSpock = {\n prefix: 'fas',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M481.3 97.1c-21.5-5.1-43.1 8.2-48.2 29.6L402.3 256h-11.1l43.6-174.3c5.4-21.4-7.7-43.1-29.1-48.5s-43.1 7.7-48.5 29.1L308.8 256h-15.1L242 31.1c-5-21.6-26.4-35-48-30.1-21.5 4.9-35 26.4-30 47.9l47.6 207h-9.8L167 103.1c-4.9-21.5-26.3-35-47.9-30.1-21.5 4.9-35 26.3-30.1 47.9l39 171.6v79.4l-60.6-57c-16.1-15.1-41.4-14.4-56.5 1.7s-14.4 41.4 1.7 56.5L146.3 499c8.9 8.4 20.7 13 32.9 13h216.7c21.3 0 40-14 46-34.4l26.2-88.3c2.6-8.9 4-18 4-27.3v-42c0-7.5.9-15 2.6-22.2L511 145.3c5-21.5-8.3-43.1-29.7-48.2z\"]\n};\nvar faHands = {\n prefix: 'fas',\n iconName: 'hands',\n icon: [640, 512, [], \"f4c2\", \"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"]\n};\nvar faHandsHelping = {\n prefix: 'fas',\n iconName: 'hands-helping',\n icon: [640, 512, [], \"f4c4\", \"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"]\n};\nvar faHandshake = {\n prefix: 'fas',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"]\n};\nvar faHanukiah = {\n prefix: 'fas',\n iconName: 'hanukiah',\n icon: [640, 512, [], \"f6e6\", \"M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z\"]\n};\nvar faHardHat = {\n prefix: 'fas',\n iconName: 'hard-hat',\n icon: [512, 512, [], \"f807\", \"M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faHashtag = {\n prefix: 'fas',\n iconName: 'hashtag',\n icon: [448, 512, [], \"f292\", \"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"]\n};\nvar faHatWizard = {\n prefix: 'fas',\n iconName: 'hat-wizard',\n icon: [512, 512, [], \"f6e8\", \"M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z\"]\n};\nvar faHaykal = {\n prefix: 'fas',\n iconName: 'haykal',\n icon: [512, 512, [], \"f666\", \"M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z\"]\n};\nvar faHdd = {\n prefix: 'fas',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faHeading = {\n prefix: 'fas',\n iconName: 'heading',\n icon: [512, 512, [], \"f1dc\", \"M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z\"]\n};\nvar faHeadphones = {\n prefix: 'fas',\n iconName: 'headphones',\n icon: [512, 512, [], \"f025\", \"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"]\n};\nvar faHeadphonesAlt = {\n prefix: 'fas',\n iconName: 'headphones-alt',\n icon: [512, 512, [], \"f58f\", \"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"]\n};\nvar faHeadset = {\n prefix: 'fas',\n iconName: 'headset',\n icon: [512, 512, [], \"f590\", \"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"]\n};\nvar faHeart = {\n prefix: 'fas',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"]\n};\nvar faHeartBroken = {\n prefix: 'fas',\n iconName: 'heart-broken',\n icon: [512, 512, [], \"f7a9\", \"M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHeartbeat = {\n prefix: 'fas',\n iconName: 'heartbeat',\n icon: [512, 512, [], \"f21e\", \"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHelicopter = {\n prefix: 'fas',\n iconName: 'helicopter',\n icon: [640, 512, [], \"f533\", \"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"]\n};\nvar faHighlighter = {\n prefix: 'fas',\n iconName: 'highlighter',\n icon: [544, 512, [], \"f591\", \"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"]\n};\nvar faHiking = {\n prefix: 'fas',\n iconName: 'hiking',\n icon: [384, 512, [], \"f6ec\", \"M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z\"]\n};\nvar faHippo = {\n prefix: 'fas',\n iconName: 'hippo',\n icon: [640, 512, [], \"f6ed\", \"M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHistory = {\n prefix: 'fas',\n iconName: 'history',\n icon: [512, 512, [], \"f1da\", \"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"]\n};\nvar faHockeyPuck = {\n prefix: 'fas',\n iconName: 'hockey-puck',\n icon: [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"]\n};\nvar faHollyBerry = {\n prefix: 'fas',\n iconName: 'holly-berry',\n icon: [448, 512, [], \"f7aa\", \"M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z\"]\n};\nvar faHome = {\n prefix: 'fas',\n iconName: 'home',\n icon: [576, 512, [], \"f015\", \"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"]\n};\nvar faHorse = {\n prefix: 'fas',\n iconName: 'horse',\n icon: [576, 512, [], \"f6f0\", \"M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHorseHead = {\n prefix: 'fas',\n iconName: 'horse-head',\n icon: [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z\"]\n};\nvar faHospital = {\n prefix: 'fas',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"]\n};\nvar faHospitalAlt = {\n prefix: 'fas',\n iconName: 'hospital-alt',\n icon: [576, 512, [], \"f47d\", \"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faHospitalSymbol = {\n prefix: 'fas',\n iconName: 'hospital-symbol',\n icon: [512, 512, [], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"]\n};\nvar faHotTub = {\n prefix: 'fas',\n iconName: 'hot-tub',\n icon: [512, 512, [], \"f593\", \"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"]\n};\nvar faHotdog = {\n prefix: 'fas',\n iconName: 'hotdog',\n icon: [512, 512, [], \"f80f\", \"M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z\"]\n};\nvar faHotel = {\n prefix: 'fas',\n iconName: 'hotel',\n icon: [576, 512, [], \"f594\", \"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faHourglass = {\n prefix: 'fas',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"]\n};\nvar faHourglassEnd = {\n prefix: 'fas',\n iconName: 'hourglass-end',\n icon: [384, 512, [], \"f253\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"]\n};\nvar faHourglassHalf = {\n prefix: 'fas',\n iconName: 'hourglass-half',\n icon: [384, 512, [], \"f252\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"]\n};\nvar faHourglassStart = {\n prefix: 'fas',\n iconName: 'hourglass-start',\n icon: [384, 512, [], \"f251\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"]\n};\nvar faHouseDamage = {\n prefix: 'fas',\n iconName: 'house-damage',\n icon: [576, 512, [], \"f6f1\", \"M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z\"]\n};\nvar faHryvnia = {\n prefix: 'fas',\n iconName: 'hryvnia',\n icon: [384, 512, [], \"f6f2\", \"M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z\"]\n};\nvar faICursor = {\n prefix: 'fas',\n iconName: 'i-cursor',\n icon: [256, 512, [], \"f246\", \"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"]\n};\nvar faIceCream = {\n prefix: 'fas',\n iconName: 'ice-cream',\n icon: [448, 512, [], \"f810\", \"M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z\"]\n};\nvar faIcicles = {\n prefix: 'fas',\n iconName: 'icicles',\n icon: [512, 512, [], \"f7ad\", \"M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z\"]\n};\nvar faIdBadge = {\n prefix: 'fas',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faIdCard = {\n prefix: 'fas',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"]\n};\nvar faIdCardAlt = {\n prefix: 'fas',\n iconName: 'id-card-alt',\n icon: [576, 512, [], \"f47f\", \"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"]\n};\nvar faIgloo = {\n prefix: 'fas',\n iconName: 'igloo',\n icon: [576, 512, [], \"f7ae\", \"M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z\"]\n};\nvar faImage = {\n prefix: 'fas',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"]\n};\nvar faImages = {\n prefix: 'fas',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"]\n};\nvar faInbox = {\n prefix: 'fas',\n iconName: 'inbox',\n icon: [576, 512, [], \"f01c\", \"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"]\n};\nvar faIndent = {\n prefix: 'fas',\n iconName: 'indent',\n icon: [448, 512, [], \"f03c\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z\"]\n};\nvar faIndustry = {\n prefix: 'fas',\n iconName: 'industry',\n icon: [512, 512, [], \"f275\", \"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"]\n};\nvar faInfinity = {\n prefix: 'fas',\n iconName: 'infinity',\n icon: [640, 512, [], \"f534\", \"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"]\n};\nvar faInfo = {\n prefix: 'fas',\n iconName: 'info',\n icon: [192, 512, [], \"f129\", \"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"]\n};\nvar faInfoCircle = {\n prefix: 'fas',\n iconName: 'info-circle',\n icon: [512, 512, [], \"f05a\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"]\n};\nvar faItalic = {\n prefix: 'fas',\n iconName: 'italic',\n icon: [320, 512, [], \"f033\", \"M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z\"]\n};\nvar faJedi = {\n prefix: 'fas',\n iconName: 'jedi',\n icon: [544, 512, [], \"f669\", \"M479.99 352l58.88-58.87c3.29-16.8 5.13-34.12 5.13-51.86 0-5.81-.68-11.51-1.05-17.27H496l41.25-41.24c-14.5-64.79-52.43-123.05-107.91-162.27-2.77-1.96-5.97-2.99-9.25-2.99-5.37 0-10.41 2.71-13.49 7.24-3.05 4.49-3.64 9.99-1.61 15.09 6.55 16.46 9.86 33.73 9.86 51.31 0 45.12-21.03 86.57-57.69 113.73-4.02 2.98-6.46 7.5-6.7 12.4-.24 4.92 1.76 9.66 5.49 13.03 32.93 29.75 47.35 73.51 38.57 117.07-9.74 48.35-48.84 87.1-97.31 96.5l-2.5-65.34L321.88 397c2.98 2.06 7.39 1.69 10.02-.8a8.002 8.002 0 0 0 1.34-9.92l-20.11-33.73 42.07-8.72c3.7-.75 6.38-4.05 6.38-7.83 0-3.77-2.69-7.06-6.38-7.83l-42.07-8.73 20.13-33.77c1.92-3.23 1.34-7.31-1.38-9.91-2.7-2.55-6.97-2.89-10-.8l-30.39 20.67L279.96 7.7a7.964 7.964 0 0 0-8-7.7c-4.33 0-7.84 3.38-8 7.67l-11.52 287.97-30.39-20.66c-3.14-2.12-7.27-1.83-10 .78-2.72 2.59-3.3 6.67-1.36 9.94l20.11 33.73-42.07 8.73c-3.7.75-6.38 4.05-6.38 7.83s2.67 7.08 6.38 7.83l42.07 8.72-20.13 33.77c-1.92 3.23-1.34 7.33 1.39 9.94 2.59 2.45 7.03 2.75 10 .75l27.16-18.48-2.5 65.26c-56.94-11.64-99.89-61.89-99.89-121.92 0-35.08 14.62-67.6 41.17-91.58 3.72-3.36 5.72-8.11 5.48-13.01-.24-4.9-2.68-9.41-6.69-12.38-36.67-27.16-57.71-68.62-57.71-113.74 0-17.56 3.31-34.81 9.84-51.26 2.02-5.09 1.43-10.59-1.62-15.09-3.08-4.54-8.13-7.25-13.51-7.25-3.3 0-6.5 1.04-9.27 3-55.87 39.52-93.6 97.37-107.97 162.07L47.93 224H.72c-.63 9.92-.97 19.91-.5 29.99.62 13.43 2.54 26.53 5.11 39.41l58.6 58.6H24.02c41.25 90.23 131.13 154.94 235.1 159.71 4.3.2 8.59.29 12.85.29 110.34 0 205.35-65.83 247.98-160h-39.96z\"]\n};\nvar faJoint = {\n prefix: 'fas',\n iconName: 'joint',\n icon: [640, 512, [], \"f595\", \"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"]\n};\nvar faJournalWhills = {\n prefix: 'fas',\n iconName: 'journal-whills',\n icon: [448, 512, [], \"f66a\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM133.08 144.39l21.26 21.26c1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34c3.12-3.12 3.12-8.19 0-11.31l-26.42-26.42c10-20.9 26.24-37.97 46.37-49.26C179.62 88.4 176 99.74 176 112c0 19.96 9.33 37.57 23.66 49.31C190.01 171.37 184 184.96 184 200c0 26.94 19.04 49.4 44.38 54.76l1.36-32.71-10.37 7.04c-.69.45-1.47.69-2.25.69-1 0-1.98-.38-2.75-1.09a4.006 4.006 0 0 1-.69-4.95l8.54-14.31-17.91-3.72c-1.86-.39-3.19-2.03-3.19-3.92s1.33-3.53 3.19-3.92l17.91-3.72-8.54-14.31c-.95-1.61-.67-3.67.69-4.95 1.36-1.3 3.44-1.44 5-.41l12.01 8.16L236 71.83c.09-2.14 1.86-3.83 4-3.83s3.91 1.69 4 3.83l4.68 112.29 14.2-9.65a4.067 4.067 0 0 1 5 .41 4.006 4.006 0 0 1 .69 4.95l-8.54 14.31 17.91 3.72c1.86.39 3.19 2.03 3.19 3.92s-1.33 3.53-3.19 3.92l-17.91 3.72 8.54 14.31c.95 1.61.67 3.67-.69 4.95-.77.72-1.77 1.09-2.75 1.09-.78 0-1.56-.23-2.25-.69l-12.68-8.62 1.43 34.28C276.96 249.4 296 226.94 296 200c0-15.04-6.01-28.63-15.66-38.69C294.67 149.57 304 131.96 304 112c0-12.26-3.62-23.6-9.6-33.33 20.13 11.28 36.37 28.36 46.37 49.26l-26.42 26.42c-3.12 3.12-3.12 8.19 0 11.31 1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34l21.26-21.26c2.97 10.08 5.07 20.55 5.07 31.6 0 .52-.14.99-.15 1.51l-37.11 32.47a7.975 7.975 0 0 0-.75 11.28 7.97 7.97 0 0 0 6.02 2.73c1.88 0 3.75-.66 5.27-1.98l23.59-20.64C337.32 250.96 293.09 288 240 288s-97.32-37.04-108.86-86.62l23.59 20.64A7.957 7.957 0 0 0 160 224c2.22 0 4.44-.92 6.02-2.73 2.92-3.33 2.58-8.38-.75-11.28l-37.11-32.47c-.01-.52-.15-.99-.15-1.51-.01-11.06 2.09-21.53 5.07-31.62zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faKaaba = {\n prefix: 'fas',\n iconName: 'kaaba',\n icon: [576, 512, [], \"f66b\", \"M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z\"]\n};\nvar faKey = {\n prefix: 'fas',\n iconName: 'key',\n icon: [512, 512, [], \"f084\", \"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"]\n};\nvar faKeyboard = {\n prefix: 'fas',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faKhanda = {\n prefix: 'fas',\n iconName: 'khanda',\n icon: [512, 512, [], \"f66d\", \"M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z\"]\n};\nvar faKiss = {\n prefix: 'fas',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faKissBeam = {\n prefix: 'fas',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'fas',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"]\n};\nvar faKiwiBird = {\n prefix: 'fas',\n iconName: 'kiwi-bird',\n icon: [576, 512, [], \"f535\", \"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"]\n};\nvar faLandmark = {\n prefix: 'fas',\n iconName: 'landmark',\n icon: [512, 512, [], \"f66f\", \"M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faLanguage = {\n prefix: 'fas',\n iconName: 'language',\n icon: [640, 512, [], \"f1ab\", \"M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z\"]\n};\nvar faLaptop = {\n prefix: 'fas',\n iconName: 'laptop',\n icon: [640, 512, [], \"f109\", \"M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopCode = {\n prefix: 'fas',\n iconName: 'laptop-code',\n icon: [640, 512, [], \"f5fc\", \"M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopMedical = {\n prefix: 'fas',\n iconName: 'laptop-medical',\n icon: [640, 512, [], \"f812\", \"M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z\"]\n};\nvar faLaugh = {\n prefix: 'fas',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"]\n};\nvar faLaughBeam = {\n prefix: 'fas',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughSquint = {\n prefix: 'fas',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughWink = {\n prefix: 'fas',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLayerGroup = {\n prefix: 'fas',\n iconName: 'layer-group',\n icon: [512, 512, [], \"f5fd\", \"M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z\"]\n};\nvar faLeaf = {\n prefix: 'fas',\n iconName: 'leaf',\n icon: [576, 512, [], \"f06c\", \"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"]\n};\nvar faLemon = {\n prefix: 'fas',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"]\n};\nvar faLessThan = {\n prefix: 'fas',\n iconName: 'less-than',\n icon: [384, 512, [], \"f536\", \"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"]\n};\nvar faLessThanEqual = {\n prefix: 'fas',\n iconName: 'less-than-equal',\n icon: [448, 512, [], \"f537\", \"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faLevelDownAlt = {\n prefix: 'fas',\n iconName: 'level-down-alt',\n icon: [320, 512, [], \"f3be\", \"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"]\n};\nvar faLevelUpAlt = {\n prefix: 'fas',\n iconName: 'level-up-alt',\n icon: [320, 512, [], \"f3bf\", \"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"]\n};\nvar faLifeRing = {\n prefix: 'fas',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"]\n};\nvar faLightbulb = {\n prefix: 'fas',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faLink = {\n prefix: 'fas',\n iconName: 'link',\n icon: [512, 512, [], \"f0c1\", \"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"]\n};\nvar faLiraSign = {\n prefix: 'fas',\n iconName: 'lira-sign',\n icon: [384, 512, [], \"f195\", \"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"]\n};\nvar faList = {\n prefix: 'fas',\n iconName: 'list',\n icon: [512, 512, [], \"f03a\", \"M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z\"]\n};\nvar faListAlt = {\n prefix: 'fas',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"]\n};\nvar faListOl = {\n prefix: 'fas',\n iconName: 'list-ol',\n icon: [512, 512, [], \"f0cb\", \"M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faListUl = {\n prefix: 'fas',\n iconName: 'list-ul',\n icon: [512, 512, [], \"f0ca\", \"M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faLocationArrow = {\n prefix: 'fas',\n iconName: 'location-arrow',\n icon: [512, 512, [], \"f124\", \"M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z\"]\n};\nvar faLock = {\n prefix: 'fas',\n iconName: 'lock',\n icon: [448, 512, [], \"f023\", \"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"]\n};\nvar faLockOpen = {\n prefix: 'fas',\n iconName: 'lock-open',\n icon: [576, 512, [], \"f3c1\", \"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"]\n};\nvar faLongArrowAltDown = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-down',\n icon: [256, 512, [], \"f309\", \"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"]\n};\nvar faLongArrowAltLeft = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-left',\n icon: [448, 512, [], \"f30a\", \"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"]\n};\nvar faLongArrowAltRight = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-right',\n icon: [448, 512, [], \"f30b\", \"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"]\n};\nvar faLongArrowAltUp = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-up',\n icon: [256, 512, [], \"f30c\", \"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"]\n};\nvar faLowVision = {\n prefix: 'fas',\n iconName: 'low-vision',\n icon: [576, 512, [], \"f2a8\", \"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"]\n};\nvar faLuggageCart = {\n prefix: 'fas',\n iconName: 'luggage-cart',\n icon: [640, 512, [], \"f59d\", \"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"]\n};\nvar faMagic = {\n prefix: 'fas',\n iconName: 'magic',\n icon: [512, 512, [], \"f0d0\", \"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"]\n};\nvar faMagnet = {\n prefix: 'fas',\n iconName: 'magnet',\n icon: [512, 512, [], \"f076\", \"M164.1 160H12c-6.6 0-12-5.4-12-12V68c0-19.9 16.1-36 36-36h104c19.9 0 36 16.1 36 36v80c.1 6.6-5.3 12-11.9 12zm348-12V67.9c0-19.9-16.1-36-36-36h-104c-19.9 0-36 16.1-36 36v80c0 6.6 5.4 12 12 12h152c6.6.1 12-5.3 12-11.9zm-164 44c-6.6 0-12 5.4-12 12v52c0 128.1-160 127.9-160 0v-52c0-6.6-5.4-12-12-12h-152c-6.7 0-12 5.4-12 12.1.1 21.4.6 40.3 0 53.3C.1 408 136.3 504 256.9 504 377.5 504 512 408 512 257.3c-.6-12.8-.2-33 0-53.2 0-6.7-5.3-12.1-12-12.1H348.1z\"]\n};\nvar faMailBulk = {\n prefix: 'fas',\n iconName: 'mail-bulk',\n icon: [576, 512, [], \"f674\", \"M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z\"]\n};\nvar faMale = {\n prefix: 'fas',\n iconName: 'male',\n icon: [192, 512, [], \"f183\", \"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"]\n};\nvar faMap = {\n prefix: 'fas',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarked = {\n prefix: 'fas',\n iconName: 'map-marked',\n icon: [576, 512, [], \"f59f\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarkedAlt = {\n prefix: 'fas',\n iconName: 'map-marked-alt',\n icon: [576, 512, [], \"f5a0\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarker = {\n prefix: 'fas',\n iconName: 'map-marker',\n icon: [384, 512, [], \"f041\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"]\n};\nvar faMapMarkerAlt = {\n prefix: 'fas',\n iconName: 'map-marker-alt',\n icon: [384, 512, [], \"f3c5\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"]\n};\nvar faMapPin = {\n prefix: 'fas',\n iconName: 'map-pin',\n icon: [288, 512, [], \"f276\", \"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"]\n};\nvar faMapSigns = {\n prefix: 'fas',\n iconName: 'map-signs',\n icon: [512, 512, [], \"f277\", \"M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z\"]\n};\nvar faMarker = {\n prefix: 'fas',\n iconName: 'marker',\n icon: [512, 512, [], \"f5a1\", \"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"]\n};\nvar faMars = {\n prefix: 'fas',\n iconName: 'mars',\n icon: [384, 512, [], \"f222\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsDouble = {\n prefix: 'fas',\n iconName: 'mars-double',\n icon: [512, 512, [], \"f227\", \"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"]\n};\nvar faMarsStroke = {\n prefix: 'fas',\n iconName: 'mars-stroke',\n icon: [384, 512, [], \"f229\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsStrokeH = {\n prefix: 'fas',\n iconName: 'mars-stroke-h',\n icon: [480, 512, [], \"f22b\", \"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMarsStrokeV = {\n prefix: 'fas',\n iconName: 'mars-stroke-v',\n icon: [288, 512, [], \"f22a\", \"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMask = {\n prefix: 'fas',\n iconName: 'mask',\n icon: [640, 512, [], \"f6fa\", \"M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z\"]\n};\nvar faMedal = {\n prefix: 'fas',\n iconName: 'medal',\n icon: [512, 512, [], \"f5a2\", \"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"]\n};\nvar faMedkit = {\n prefix: 'fas',\n iconName: 'medkit',\n icon: [512, 512, [], \"f0fa\", \"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"]\n};\nvar faMeh = {\n prefix: 'fas',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehBlank = {\n prefix: 'fas',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'fas',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"]\n};\nvar faMemory = {\n prefix: 'fas',\n iconName: 'memory',\n icon: [640, 512, [], \"f538\", \"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"]\n};\nvar faMenorah = {\n prefix: 'fas',\n iconName: 'menorah',\n icon: [640, 512, [], \"f676\", \"M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z\"]\n};\nvar faMercury = {\n prefix: 'fas',\n iconName: 'mercury',\n icon: [288, 512, [], \"f223\", \"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faMeteor = {\n prefix: 'fas',\n iconName: 'meteor',\n icon: [512, 512, [], \"f753\", \"M491.2.7C452.5 12.3 379.4 35 303.5 62c-2.1-7-4-13.5-5.6-18.6-3-9.7-13.9-14.2-22.9-9.5C232.6 56 122.2 116.5 60.6 176.4c-1.1 1-2.5 2-3.5 3C19 217.4 0 267.3 0 317.2 0 367 19 416.9 57 455c38 38 87.9 57.1 137.8 57 49.9 0 99.8-19 137.9-57.1 1-1 2-2.4 3-3.5 59.8-61.6 120.4-172.1 142.5-214.4 4.7-9 .2-19.9-9.5-22.9-5.2-1.6-11.6-3.5-18.6-5.6 27-76 49.7-149 61.3-187.7C515 8.4 503.6-3 491.2.7zM192 448c-70.7 0-128-57.3-128-128s57.3-128 128-128 128 57.3 128 128-57.3 128-128 128zm-32-192c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm48 96c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16z\"]\n};\nvar faMicrochip = {\n prefix: 'fas',\n iconName: 'microchip',\n icon: [512, 512, [], \"f2db\", \"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"]\n};\nvar faMicrophone = {\n prefix: 'fas',\n iconName: 'microphone',\n icon: [352, 512, [], \"f130\", \"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneAlt = {\n prefix: 'fas',\n iconName: 'microphone-alt',\n icon: [352, 512, [], \"f3c9\", \"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"]\n};\nvar faMicrophoneAltSlash = {\n prefix: 'fas',\n iconName: 'microphone-alt-slash',\n icon: [640, 512, [], \"f539\", \"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneSlash = {\n prefix: 'fas',\n iconName: 'microphone-slash',\n icon: [640, 512, [], \"f131\", \"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicroscope = {\n prefix: 'fas',\n iconName: 'microscope',\n icon: [512, 512, [], \"f610\", \"M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z\"]\n};\nvar faMinus = {\n prefix: 'fas',\n iconName: 'minus',\n icon: [448, 512, [], \"f068\", \"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faMinusCircle = {\n prefix: 'fas',\n iconName: 'minus-circle',\n icon: [512, 512, [], \"f056\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"]\n};\nvar faMinusSquare = {\n prefix: 'fas',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"]\n};\nvar faMitten = {\n prefix: 'fas',\n iconName: 'mitten',\n icon: [448, 512, [], \"f7b5\", \"M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z\"]\n};\nvar faMobile = {\n prefix: 'fas',\n iconName: 'mobile',\n icon: [320, 512, [], \"f10b\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMobileAlt = {\n prefix: 'fas',\n iconName: 'mobile-alt',\n icon: [320, 512, [], \"f3cd\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faMoneyBill = {\n prefix: 'fas',\n iconName: 'money-bill',\n icon: [640, 512, [], \"f0d6\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'fas',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillWave = {\n prefix: 'fas',\n iconName: 'money-bill-wave',\n icon: [640, 512, [], \"f53a\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"]\n};\nvar faMoneyBillWaveAlt = {\n prefix: 'fas',\n iconName: 'money-bill-wave-alt',\n icon: [640, 512, [], \"f53b\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"]\n};\nvar faMoneyCheck = {\n prefix: 'fas',\n iconName: 'money-check',\n icon: [640, 512, [], \"f53c\", \"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMoneyCheckAlt = {\n prefix: 'fas',\n iconName: 'money-check-alt',\n icon: [640, 512, [], \"f53d\", \"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faMonument = {\n prefix: 'fas',\n iconName: 'monument',\n icon: [384, 512, [], \"f5a6\", \"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faMoon = {\n prefix: 'fas',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"]\n};\nvar faMortarPestle = {\n prefix: 'fas',\n iconName: 'mortar-pestle',\n icon: [512, 512, [], \"f5a7\", \"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faMosque = {\n prefix: 'fas',\n iconName: 'mosque',\n icon: [640, 512, [], \"f678\", \"M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z\"]\n};\nvar faMotorcycle = {\n prefix: 'fas',\n iconName: 'motorcycle',\n icon: [640, 512, [], \"f21c\", \"M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z\"]\n};\nvar faMountain = {\n prefix: 'fas',\n iconName: 'mountain',\n icon: [640, 512, [], \"f6fc\", \"M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z\"]\n};\nvar faMousePointer = {\n prefix: 'fas',\n iconName: 'mouse-pointer',\n icon: [320, 512, [], \"f245\", \"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"]\n};\nvar faMugHot = {\n prefix: 'fas',\n iconName: 'mug-hot',\n icon: [512, 512, [], \"f7b6\", \"M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faMusic = {\n prefix: 'fas',\n iconName: 'music',\n icon: [512, 512, [], \"f001\", \"M511.99 32.01c0-21.71-21.1-37.01-41.6-30.51L150.4 96c-13.3 4.2-22.4 16.5-22.4 30.5v261.42c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64V214.31l256-75.02v184.63c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64l-.01-351.99z\"]\n};\nvar faNetworkWired = {\n prefix: 'fas',\n iconName: 'network-wired',\n icon: [640, 512, [], \"f6ff\", \"M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z\"]\n};\nvar faNeuter = {\n prefix: 'fas',\n iconName: 'neuter',\n icon: [288, 512, [], \"f22c\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faNewspaper = {\n prefix: 'fas',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"]\n};\nvar faNotEqual = {\n prefix: 'fas',\n iconName: 'not-equal',\n icon: [448, 512, [], \"f53e\", \"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"]\n};\nvar faNotesMedical = {\n prefix: 'fas',\n iconName: 'notes-medical',\n icon: [384, 512, [], \"f481\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faObjectGroup = {\n prefix: 'fas',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"]\n};\nvar faObjectUngroup = {\n prefix: 'fas',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"]\n};\nvar faOilCan = {\n prefix: 'fas',\n iconName: 'oil-can',\n icon: [640, 512, [], \"f613\", \"M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z\"]\n};\nvar faOm = {\n prefix: 'fas',\n iconName: 'om',\n icon: [512, 512, [], \"f679\", \"M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z\"]\n};\nvar faOtter = {\n prefix: 'fas',\n iconName: 'otter',\n icon: [640, 512, [], \"f700\", \"M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z\"]\n};\nvar faOutdent = {\n prefix: 'fas',\n iconName: 'outdent',\n icon: [448, 512, [], \"f03b\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z\"]\n};\nvar faPager = {\n prefix: 'fas',\n iconName: 'pager',\n icon: [512, 512, [], \"f815\", \"M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z\"]\n};\nvar faPaintBrush = {\n prefix: 'fas',\n iconName: 'paint-brush',\n icon: [512, 512, [], \"f1fc\", \"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"]\n};\nvar faPaintRoller = {\n prefix: 'fas',\n iconName: 'paint-roller',\n icon: [512, 512, [], \"f5aa\", \"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"]\n};\nvar faPalette = {\n prefix: 'fas',\n iconName: 'palette',\n icon: [512, 512, [], \"f53f\", \"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPallet = {\n prefix: 'fas',\n iconName: 'pallet',\n icon: [640, 512, [], \"f482\", \"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"]\n};\nvar faPaperPlane = {\n prefix: 'fas',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"]\n};\nvar faPaperclip = {\n prefix: 'fas',\n iconName: 'paperclip',\n icon: [448, 512, [], \"f0c6\", \"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"]\n};\nvar faParachuteBox = {\n prefix: 'fas',\n iconName: 'parachute-box',\n icon: [512, 512, [], \"f4cd\", \"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"]\n};\nvar faParagraph = {\n prefix: 'fas',\n iconName: 'paragraph',\n icon: [448, 512, [], \"f1dd\", \"M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z\"]\n};\nvar faParking = {\n prefix: 'fas',\n iconName: 'parking',\n icon: [448, 512, [], \"f540\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"]\n};\nvar faPassport = {\n prefix: 'fas',\n iconName: 'passport',\n icon: [448, 512, [], \"f5ab\", \"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"]\n};\nvar faPastafarianism = {\n prefix: 'fas',\n iconName: 'pastafarianism',\n icon: [640, 512, [], \"f67b\", \"M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z\"]\n};\nvar faPaste = {\n prefix: 'fas',\n iconName: 'paste',\n icon: [448, 512, [], \"f0ea\", \"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"]\n};\nvar faPause = {\n prefix: 'fas',\n iconName: 'pause',\n icon: [448, 512, [], \"f04c\", \"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"]\n};\nvar faPauseCircle = {\n prefix: 'fas',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faPaw = {\n prefix: 'fas',\n iconName: 'paw',\n icon: [512, 512, [], \"f1b0\", \"M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z\"]\n};\nvar faPeace = {\n prefix: 'fas',\n iconName: 'peace',\n icon: [496, 512, [], \"f67c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z\"]\n};\nvar faPen = {\n prefix: 'fas',\n iconName: 'pen',\n icon: [512, 512, [], \"f304\", \"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"]\n};\nvar faPenAlt = {\n prefix: 'fas',\n iconName: 'pen-alt',\n icon: [512, 512, [], \"f305\", \"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"]\n};\nvar faPenFancy = {\n prefix: 'fas',\n iconName: 'pen-fancy',\n icon: [512, 512, [], \"f5ac\", \"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"]\n};\nvar faPenNib = {\n prefix: 'fas',\n iconName: 'pen-nib',\n icon: [512, 512, [], \"f5ad\", \"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"]\n};\nvar faPenSquare = {\n prefix: 'fas',\n iconName: 'pen-square',\n icon: [448, 512, [], \"f14b\", \"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"]\n};\nvar faPencilAlt = {\n prefix: 'fas',\n iconName: 'pencil-alt',\n icon: [512, 512, [], \"f303\", \"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"]\n};\nvar faPencilRuler = {\n prefix: 'fas',\n iconName: 'pencil-ruler',\n icon: [512, 512, [], \"f5ae\", \"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"]\n};\nvar faPeopleCarry = {\n prefix: 'fas',\n iconName: 'people-carry',\n icon: [640, 512, [], \"f4ce\", \"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"]\n};\nvar faPepperHot = {\n prefix: 'fas',\n iconName: 'pepper-hot',\n icon: [512, 512, [], \"f816\", \"M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z\"]\n};\nvar faPercent = {\n prefix: 'fas',\n iconName: 'percent',\n icon: [448, 512, [], \"f295\", \"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"]\n};\nvar faPercentage = {\n prefix: 'fas',\n iconName: 'percentage',\n icon: [384, 512, [], \"f541\", \"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"]\n};\nvar faPersonBooth = {\n prefix: 'fas',\n iconName: 'person-booth',\n icon: [576, 512, [], \"f756\", \"M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z\"]\n};\nvar faPhone = {\n prefix: 'fas',\n iconName: 'phone',\n icon: [512, 512, [], \"f095\", \"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"]\n};\nvar faPhoneSlash = {\n prefix: 'fas',\n iconName: 'phone-slash',\n icon: [640, 512, [], \"f3dd\", \"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faPhoneSquare = {\n prefix: 'fas',\n iconName: 'phone-square',\n icon: [448, 512, [], \"f098\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"]\n};\nvar faPhoneVolume = {\n prefix: 'fas',\n iconName: 'phone-volume',\n icon: [384, 512, [], \"f2a0\", \"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"]\n};\nvar faPiggyBank = {\n prefix: 'fas',\n iconName: 'piggy-bank',\n icon: [576, 512, [], \"f4d3\", \"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"]\n};\nvar faPills = {\n prefix: 'fas',\n iconName: 'pills',\n icon: [576, 512, [], \"f484\", \"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"]\n};\nvar faPizzaSlice = {\n prefix: 'fas',\n iconName: 'pizza-slice',\n icon: [512, 512, [], \"f818\", \"M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faPlaceOfWorship = {\n prefix: 'fas',\n iconName: 'place-of-worship',\n icon: [640, 512, [], \"f67f\", \"M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z\"]\n};\nvar faPlane = {\n prefix: 'fas',\n iconName: 'plane',\n icon: [576, 512, [], \"f072\", \"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"]\n};\nvar faPlaneArrival = {\n prefix: 'fas',\n iconName: 'plane-arrival',\n icon: [640, 512, [], \"f5af\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"]\n};\nvar faPlaneDeparture = {\n prefix: 'fas',\n iconName: 'plane-departure',\n icon: [640, 512, [], \"f5b0\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"]\n};\nvar faPlay = {\n prefix: 'fas',\n iconName: 'play',\n icon: [448, 512, [], \"f04b\", \"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"]\n};\nvar faPlayCircle = {\n prefix: 'fas',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"]\n};\nvar faPlug = {\n prefix: 'fas',\n iconName: 'plug',\n icon: [384, 512, [], \"f1e6\", \"M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z\"]\n};\nvar faPlus = {\n prefix: 'fas',\n iconName: 'plus',\n icon: [448, 512, [], \"f067\", \"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPlusCircle = {\n prefix: 'fas',\n iconName: 'plus-circle',\n icon: [512, 512, [], \"f055\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPlusSquare = {\n prefix: 'fas',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPodcast = {\n prefix: 'fas',\n iconName: 'podcast',\n icon: [448, 512, [], \"f2ce\", \"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"]\n};\nvar faPoll = {\n prefix: 'fas',\n iconName: 'poll',\n icon: [448, 512, [], \"f681\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"]\n};\nvar faPollH = {\n prefix: 'fas',\n iconName: 'poll-h',\n icon: [448, 512, [], \"f682\", \"M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z\"]\n};\nvar faPoo = {\n prefix: 'fas',\n iconName: 'poo',\n icon: [512, 512, [], \"f2fe\", \"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPooStorm = {\n prefix: 'fas',\n iconName: 'poo-storm',\n icon: [448, 512, [], \"f75a\", \"M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z\"]\n};\nvar faPoop = {\n prefix: 'fas',\n iconName: 'poop',\n icon: [512, 512, [], \"f619\", \"M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z\"]\n};\nvar faPortrait = {\n prefix: 'fas',\n iconName: 'portrait',\n icon: [384, 512, [], \"f3e0\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faPoundSign = {\n prefix: 'fas',\n iconName: 'pound-sign',\n icon: [320, 512, [], \"f154\", \"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"]\n};\nvar faPowerOff = {\n prefix: 'fas',\n iconName: 'power-off',\n icon: [512, 512, [], \"f011\", \"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"]\n};\nvar faPray = {\n prefix: 'fas',\n iconName: 'pray',\n icon: [384, 512, [], \"f683\", \"M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z\"]\n};\nvar faPrayingHands = {\n prefix: 'fas',\n iconName: 'praying-hands',\n icon: [640, 512, [], \"f684\", \"M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z\"]\n};\nvar faPrescription = {\n prefix: 'fas',\n iconName: 'prescription',\n icon: [384, 512, [], \"f5b1\", \"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"]\n};\nvar faPrescriptionBottle = {\n prefix: 'fas',\n iconName: 'prescription-bottle',\n icon: [384, 512, [], \"f485\", \"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"]\n};\nvar faPrescriptionBottleAlt = {\n prefix: 'fas',\n iconName: 'prescription-bottle-alt',\n icon: [384, 512, [], \"f486\", \"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"]\n};\nvar faPrint = {\n prefix: 'fas',\n iconName: 'print',\n icon: [512, 512, [], \"f02f\", \"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faProcedures = {\n prefix: 'fas',\n iconName: 'procedures',\n icon: [640, 512, [], \"f487\", \"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faProjectDiagram = {\n prefix: 'fas',\n iconName: 'project-diagram',\n icon: [640, 512, [], \"f542\", \"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPuzzlePiece = {\n prefix: 'fas',\n iconName: 'puzzle-piece',\n icon: [576, 512, [], \"f12e\", \"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"]\n};\nvar faQrcode = {\n prefix: 'fas',\n iconName: 'qrcode',\n icon: [448, 512, [], \"f029\", \"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"]\n};\nvar faQuestion = {\n prefix: 'fas',\n iconName: 'question',\n icon: [384, 512, [], \"f128\", \"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"]\n};\nvar faQuestionCircle = {\n prefix: 'fas',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"]\n};\nvar faQuidditch = {\n prefix: 'fas',\n iconName: 'quidditch',\n icon: [640, 512, [], \"f458\", \"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"]\n};\nvar faQuoteLeft = {\n prefix: 'fas',\n iconName: 'quote-left',\n icon: [512, 512, [], \"f10d\", \"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuoteRight = {\n prefix: 'fas',\n iconName: 'quote-right',\n icon: [512, 512, [], \"f10e\", \"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuran = {\n prefix: 'fas',\n iconName: 'quran',\n icon: [448, 512, [], \"f687\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faRadiation = {\n prefix: 'fas',\n iconName: 'radiation',\n icon: [496, 512, [], \"f7b9\", \"M167.8 256.2H16.2C7.1 256.2-.6 263.9 0 273c5.1 75.8 44.4 142.2 102.5 184.2 7.4 5.3 17.9 2.9 22.7-4.8L205.6 324c-22.6-14.3-37.8-39.2-37.8-67.8zm37.8-67.7c12.3-7.7 26.8-12.4 42.4-12.4s30 4.7 42.4 12.4L370.8 60c4.8-7.7 2.4-18.1-5.6-22.4C330.3 18.8 290.4 8 248 8s-82.3 10.8-117.2 29.6c-8 4.3-10.4 14.8-5.6 22.4l80.4 128.5zm42.4 19.7c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm231.8 48H328.2c0 28.6-15.2 53.5-37.8 67.7l80.4 128.4c4.8 7.7 15.3 10.2 22.7 4.8 58.1-42 97.4-108.4 102.5-184.2.6-9-7.1-16.7-16.2-16.7z\"]\n};\nvar faRadiationAlt = {\n prefix: 'fas',\n iconName: 'radiation-alt',\n icon: [496, 512, [], \"f7ba\", \"M184 256h-79.1c-9.2 0-16.9 7.7-16 16.8 4.6 43.6 27 81.8 59.5 107.8 7.6 6.1 18.8 4.5 24-3.8l41.7-66.8c-18-11.2-30.1-31.2-30.1-54zm97.8-54.1l41.8-66.9c4.9-7.8 2.4-18.4-5.8-22.5C296.7 102.1 273.1 96 248 96s-48.7 6.1-69.9 16.5c-8.2 4.1-10.6 14.7-5.8 22.5l41.8 66.9c9.8-6.2 21.4-9.9 33.8-9.9s24.1 3.7 33.9 9.9zM391.1 256H312c0 22.8-12.1 42.8-30.2 54.1l41.7 66.8c5.2 8.3 16.4 9.9 24 3.8 32.6-26 54.9-64.2 59.5-107.8 1.1-9.2-6.7-16.9-15.9-16.9zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 432c-101.5 0-184-82.5-184-184S146.5 72 248 72s184 82.5 184 184-82.5 184-184 184zm0-216c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faRainbow = {\n prefix: 'fas',\n iconName: 'rainbow',\n icon: [576, 512, [], \"f75b\", \"M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z\"]\n};\nvar faRandom = {\n prefix: 'fas',\n iconName: 'random',\n icon: [512, 512, [], \"f074\", \"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"]\n};\nvar faReceipt = {\n prefix: 'fas',\n iconName: 'receipt',\n icon: [384, 512, [], \"f543\", \"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faRecycle = {\n prefix: 'fas',\n iconName: 'recycle',\n icon: [512, 512, [], \"f1b8\", \"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"]\n};\nvar faRedo = {\n prefix: 'fas',\n iconName: 'redo',\n icon: [512, 512, [], \"f01e\", \"M500.333 0h-47.411c-6.853 0-12.314 5.729-11.986 12.574l3.966 82.759C399.416 41.899 331.672 8 256.001 8 119.34 8 7.899 119.526 8 256.187 8.101 393.068 119.096 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-33.971-33.971c-4.466-4.466-11.64-4.717-16.38-.543C341.308 415.448 300.606 432 256 432c-97.267 0-176-78.716-176-176 0-97.267 78.716-176 176-176 60.892 0 114.506 30.858 146.099 77.8l-101.525-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12z\"]\n};\nvar faRedoAlt = {\n prefix: 'fas',\n iconName: 'redo-alt',\n icon: [512, 512, [], \"f2f9\", \"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"]\n};\nvar faRegistered = {\n prefix: 'fas',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"]\n};\nvar faReply = {\n prefix: 'fas',\n iconName: 'reply',\n icon: [512, 512, [], \"f3e5\", \"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"]\n};\nvar faReplyAll = {\n prefix: 'fas',\n iconName: 'reply-all',\n icon: [576, 512, [], \"f122\", \"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"]\n};\nvar faRepublican = {\n prefix: 'fas',\n iconName: 'republican',\n icon: [640, 512, [], \"f75e\", \"M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faRestroom = {\n prefix: 'fas',\n iconName: 'restroom',\n icon: [640, 512, [], \"f7bd\", \"M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z\"]\n};\nvar faRetweet = {\n prefix: 'fas',\n iconName: 'retweet',\n icon: [640, 512, [], \"f079\", \"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"]\n};\nvar faRibbon = {\n prefix: 'fas',\n iconName: 'ribbon',\n icon: [448, 512, [], \"f4d6\", \"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"]\n};\nvar faRing = {\n prefix: 'fas',\n iconName: 'ring',\n icon: [512, 512, [], \"f70b\", \"M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z\"]\n};\nvar faRoad = {\n prefix: 'fas',\n iconName: 'road',\n icon: [576, 512, [], \"f018\", \"M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z\"]\n};\nvar faRobot = {\n prefix: 'fas',\n iconName: 'robot',\n icon: [640, 512, [], \"f544\", \"M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z\"]\n};\nvar faRocket = {\n prefix: 'fas',\n iconName: 'rocket',\n icon: [512, 512, [], \"f135\", \"M505.05 19.1a15.89 15.89 0 0 0-12.2-12.2C460.65 0 435.46 0 410.36 0c-103.2 0-165.1 55.2-211.29 128H94.87A48 48 0 0 0 52 154.49l-49.42 98.8A24 24 0 0 0 24.07 288h103.77l-22.47 22.47a32 32 0 0 0 0 45.25l50.9 50.91a32 32 0 0 0 45.26 0L224 384.16V488a24 24 0 0 0 34.7 21.49l98.7-49.39a47.91 47.91 0 0 0 26.5-42.9V312.79c72.59-46.3 128-108.4 128-211.09.1-25.2.1-50.4-6.85-82.6zM384 168a40 40 0 1 1 40-40 40 40 0 0 1-40 40z\"]\n};\nvar faRoute = {\n prefix: 'fas',\n iconName: 'route',\n icon: [512, 512, [], \"f4d7\", \"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faRss = {\n prefix: 'fas',\n iconName: 'rss',\n icon: [448, 512, [], \"f09e\", \"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"]\n};\nvar faRssSquare = {\n prefix: 'fas',\n iconName: 'rss-square',\n icon: [448, 512, [], \"f143\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"]\n};\nvar faRubleSign = {\n prefix: 'fas',\n iconName: 'ruble-sign',\n icon: [384, 512, [], \"f158\", \"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"]\n};\nvar faRuler = {\n prefix: 'fas',\n iconName: 'ruler',\n icon: [640, 512, [], \"f545\", \"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"]\n};\nvar faRulerCombined = {\n prefix: 'fas',\n iconName: 'ruler-combined',\n icon: [512, 512, [], \"f546\", \"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerHorizontal = {\n prefix: 'fas',\n iconName: 'ruler-horizontal',\n icon: [576, 512, [], \"f547\", \"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerVertical = {\n prefix: 'fas',\n iconName: 'ruler-vertical',\n icon: [256, 512, [], \"f548\", \"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"]\n};\nvar faRunning = {\n prefix: 'fas',\n iconName: 'running',\n icon: [416, 512, [], \"f70c\", \"M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z\"]\n};\nvar faRupeeSign = {\n prefix: 'fas',\n iconName: 'rupee-sign',\n icon: [320, 512, [], \"f156\", \"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"]\n};\nvar faSadCry = {\n prefix: 'fas',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"]\n};\nvar faSadTear = {\n prefix: 'fas',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"]\n};\nvar faSatellite = {\n prefix: 'fas',\n iconName: 'satellite',\n icon: [512, 512, [], \"f7bf\", \"M502.7 265l-80.3-80.4 47.8-47.9c13.1-13.1 13.1-34.4 0-47.5l-47.5-47.5c-13.1-13.1-34.4-13.1-47.5 0l-47.8 47.9-80.3-80.3C240.8 3.1 232.7 0 224.5 0S208.2 3.1 202 9.3L105.3 106c-12.4 12.4-12.4 32.6 0 45.1l80.3 80.4-9.8 9.8C122.1 217 59.6 218.6 7.3 246.7c-8.5 4.6-9.6 16.4-2.8 23.2L112 377.4l-17.8 17.8c-2.6-.7-5-1.6-7.8-1.6-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32c0-2.8-.9-5.2-1.6-7.8l17.8-17.8 107.5 107.5c6.8 6.8 18.7 5.7 23.2-2.8 28.1-52.3 29.7-114.8 5.4-168.5l9.9-9.9 80.3 80.4c6.2 6.2 14.4 9.3 22.5 9.3s16.3-3.1 22.5-9.3l96.7-96.7c12.5-12.4 12.5-32.6.1-45zm-352-136.5l73.8-73.8 68.9 68.9-73.8 73.8-68.9-68.9zm232.8 232.8l-68.9-68.9 73.8-73.8 68.9 68.9-73.8 73.8z\"]\n};\nvar faSatelliteDish = {\n prefix: 'fas',\n iconName: 'satellite-dish',\n icon: [512, 512, [], \"f7c0\", \"M188.8 345.9l27.4-27.4c2.6.7 5 1.6 7.8 1.6 17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32c0 2.8.9 5.2 1.6 7.8l-27.4 27.4L49.4 206.5c-7.3-7.3-20.1-6.1-25 3-41.8 77.8-29.9 176.7 35.7 242.3 65.6 65.6 164.6 77.5 242.3 35.7 9.2-4.9 10.4-17.7 3-25L188.8 345.9zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faSave = {\n prefix: 'fas',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"]\n};\nvar faSchool = {\n prefix: 'fas',\n iconName: 'school',\n icon: [640, 512, [], \"f549\", \"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"]\n};\nvar faScrewdriver = {\n prefix: 'fas',\n iconName: 'screwdriver',\n icon: [512, 512, [], \"f54a\", \"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"]\n};\nvar faScroll = {\n prefix: 'fas',\n iconName: 'scroll',\n icon: [640, 512, [], \"f70e\", \"M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z\"]\n};\nvar faSdCard = {\n prefix: 'fas',\n iconName: 'sd-card',\n icon: [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z\"]\n};\nvar faSearch = {\n prefix: 'fas',\n iconName: 'search',\n icon: [512, 512, [], \"f002\", \"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"]\n};\nvar faSearchDollar = {\n prefix: 'fas',\n iconName: 'search-dollar',\n icon: [512, 512, [], \"f688\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z\"]\n};\nvar faSearchLocation = {\n prefix: 'fas',\n iconName: 'search-location',\n icon: [512, 512, [], \"f689\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faSearchMinus = {\n prefix: 'fas',\n iconName: 'search-minus',\n icon: [512, 512, [], \"f010\", \"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSearchPlus = {\n prefix: 'fas',\n iconName: 'search-plus',\n icon: [512, 512, [], \"f00e\", \"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSeedling = {\n prefix: 'fas',\n iconName: 'seedling',\n icon: [512, 512, [], \"f4d8\", \"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"]\n};\nvar faServer = {\n prefix: 'fas',\n iconName: 'server',\n icon: [512, 512, [], \"f233\", \"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"]\n};\nvar faShapes = {\n prefix: 'fas',\n iconName: 'shapes',\n icon: [512, 512, [], \"f61f\", \"M512 320v160c0 17.67-14.33 32-32 32H320c-17.67 0-32-14.33-32-32V320c0-17.67 14.33-32 32-32h160c17.67 0 32 14.33 32 32zm-384-64C57.31 256 0 313.31 0 384s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm351.03-32c25.34 0 41.18-26.67 28.51-48L412.51 16c-12.67-21.33-44.35-21.33-57.02 0l-95.03 160c-12.67 21.33 3.17 48 28.51 48h190.06z\"]\n};\nvar faShare = {\n prefix: 'fas',\n iconName: 'share',\n icon: [512, 512, [], \"f064\", \"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"]\n};\nvar faShareAlt = {\n prefix: 'fas',\n iconName: 'share-alt',\n icon: [448, 512, [], \"f1e0\", \"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"]\n};\nvar faShareAltSquare = {\n prefix: 'fas',\n iconName: 'share-alt-square',\n icon: [448, 512, [], \"f1e1\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"]\n};\nvar faShareSquare = {\n prefix: 'fas',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"]\n};\nvar faShekelSign = {\n prefix: 'fas',\n iconName: 'shekel-sign',\n icon: [448, 512, [], \"f20b\", \"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faShieldAlt = {\n prefix: 'fas',\n iconName: 'shield-alt',\n icon: [512, 512, [], \"f3ed\", \"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"]\n};\nvar faShip = {\n prefix: 'fas',\n iconName: 'ship',\n icon: [640, 512, [], \"f21a\", \"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"]\n};\nvar faShippingFast = {\n prefix: 'fas',\n iconName: 'shipping-fast',\n icon: [640, 512, [], \"f48b\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faShoePrints = {\n prefix: 'fas',\n iconName: 'shoe-prints',\n icon: [640, 512, [], \"f54b\", \"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"]\n};\nvar faShoppingBag = {\n prefix: 'fas',\n iconName: 'shopping-bag',\n icon: [448, 512, [], \"f290\", \"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"]\n};\nvar faShoppingBasket = {\n prefix: 'fas',\n iconName: 'shopping-basket',\n icon: [576, 512, [], \"f291\", \"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"]\n};\nvar faShoppingCart = {\n prefix: 'fas',\n iconName: 'shopping-cart',\n icon: [576, 512, [], \"f07a\", \"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"]\n};\nvar faShower = {\n prefix: 'fas',\n iconName: 'shower',\n icon: [512, 512, [], \"f2cc\", \"M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z\"]\n};\nvar faShuttleVan = {\n prefix: 'fas',\n iconName: 'shuttle-van',\n icon: [640, 512, [], \"f5b6\", \"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"]\n};\nvar faSign = {\n prefix: 'fas',\n iconName: 'sign',\n icon: [512, 512, [], \"f4d9\", \"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"]\n};\nvar faSignInAlt = {\n prefix: 'fas',\n iconName: 'sign-in-alt',\n icon: [512, 512, [], \"f2f6\", \"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"]\n};\nvar faSignLanguage = {\n prefix: 'fas',\n iconName: 'sign-language',\n icon: [448, 512, [], \"f2a7\", \"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"]\n};\nvar faSignOutAlt = {\n prefix: 'fas',\n iconName: 'sign-out-alt',\n icon: [512, 512, [], \"f2f5\", \"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"]\n};\nvar faSignal = {\n prefix: 'fas',\n iconName: 'signal',\n icon: [640, 512, [], \"f012\", \"M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faSignature = {\n prefix: 'fas',\n iconName: 'signature',\n icon: [640, 512, [], \"f5b7\", \"M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z\"]\n};\nvar faSimCard = {\n prefix: 'fas',\n iconName: 'sim-card',\n icon: [384, 512, [], \"f7c4\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 192h64v64h-64v-64zm-96 32c0-17.7 14.3-32 32-32h32v64H64v-32zm64 224H96c-17.7 0-32-14.3-32-32v-32h64v64zm96 0h-64v-64h64v64zm96-32c0 17.7-14.3 32-32 32h-32v-64h64v32zm0-64H64v-64h256v64zm0-96h-64v-64h32c17.7 0 32 14.3 32 32v32z\"]\n};\nvar faSitemap = {\n prefix: 'fas',\n iconName: 'sitemap',\n icon: [640, 512, [], \"f0e8\", \"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faSkating = {\n prefix: 'fas',\n iconName: 'skating',\n icon: [448, 512, [], \"f7c5\", \"M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSkiing = {\n prefix: 'fas',\n iconName: 'skiing',\n icon: [512, 512, [], \"f7c9\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z\"]\n};\nvar faSkiingNordic = {\n prefix: 'fas',\n iconName: 'skiing-nordic',\n icon: [576, 512, [], \"f7ca\", \"M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z\"]\n};\nvar faSkull = {\n prefix: 'fas',\n iconName: 'skull',\n icon: [512, 512, [], \"f54c\", \"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"]\n};\nvar faSkullCrossbones = {\n prefix: 'fas',\n iconName: 'skull-crossbones',\n icon: [448, 512, [], \"f714\", \"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"]\n};\nvar faSlash = {\n prefix: 'fas',\n iconName: 'slash',\n icon: [640, 512, [], \"f715\", \"M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z\"]\n};\nvar faSleigh = {\n prefix: 'fas',\n iconName: 'sleigh',\n icon: [640, 512, [], \"f7cc\", \"M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z\"]\n};\nvar faSlidersH = {\n prefix: 'fas',\n iconName: 'sliders-h',\n icon: [512, 512, [], \"f1de\", \"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"]\n};\nvar faSmile = {\n prefix: 'fas',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"]\n};\nvar faSmileBeam = {\n prefix: 'fas',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"]\n};\nvar faSmileWink = {\n prefix: 'fas',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"]\n};\nvar faSmog = {\n prefix: 'fas',\n iconName: 'smog',\n icon: [640, 512, [], \"f75f\", \"M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z\"]\n};\nvar faSmoking = {\n prefix: 'fas',\n iconName: 'smoking',\n icon: [640, 512, [], \"f48d\", \"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"]\n};\nvar faSmokingBan = {\n prefix: 'fas',\n iconName: 'smoking-ban',\n icon: [512, 512, [], \"f54d\", \"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"]\n};\nvar faSms = {\n prefix: 'fas',\n iconName: 'sms',\n icon: [512, 512, [], \"f7cd\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z\"]\n};\nvar faSnowboarding = {\n prefix: 'fas',\n iconName: 'snowboarding',\n icon: [512, 512, [], \"f7ce\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z\"]\n};\nvar faSnowflake = {\n prefix: 'fas',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z\"]\n};\nvar faSnowman = {\n prefix: 'fas',\n iconName: 'snowman',\n icon: [512, 512, [], \"f7d0\", \"M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faSnowplow = {\n prefix: 'fas',\n iconName: 'snowplow',\n icon: [640, 512, [], \"f7d2\", \"M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faSocks = {\n prefix: 'fas',\n iconName: 'socks',\n icon: [512, 512, [], \"f696\", \"M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z\"]\n};\nvar faSolarPanel = {\n prefix: 'fas',\n iconName: 'solar-panel',\n icon: [640, 512, [], \"f5ba\", \"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"]\n};\nvar faSort = {\n prefix: 'fas',\n iconName: 'sort',\n icon: [320, 512, [], \"f0dc\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"]\n};\nvar faSortAlphaDown = {\n prefix: 'fas',\n iconName: 'sort-alpha-down',\n icon: [448, 512, [], \"f15d\", \"M400.7 427.1h-61.1c.7-1 1.5-2 2.3-3.1l67.5-95.7c1.4-2 2.2-4.4 2.2-6.9V300c0-6.6-5.4-12-12-12H274.5c-6.6 0-12 5.4-12 12v28.9c0 6.6 5.4 12 12 12H331c-.7 1-1.5 2-2.3 3.1l-67.2 95.2c-1.4 2-2.2 4.4-2.2 6.9V468c0 6.6 5.4 12 12 12h129.4c6.6 0 12-5.4 12-12v-28.9c0-6.7-5.4-12-12-12zM176 368h-48V48c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v320H16c-14.2 0-21.4 17.2-11.3 27.3l80 80c6.2 6.2 16.4 6.2 22.6 0l80-80c10-10 2.9-27.3-11.3-27.3zm248.2-159.9l-57.1-168c-1.7-4.9-6.2-8.1-11.4-8.1h-39.6c-5.1 0-9.7 3.3-11.4 8.1l-57.1 168c-2.6 7.8 3.1 15.9 11.4 15.9h35.7c5.4 0 10.1-3.5 11.5-8.7l8.1-28.2h42.9l8.3 28.3A12 12 0 0 0 377 224h35.7c8.4 0 14.2-8.1 11.5-15.9zm-95-71.5l6.8-22.9 6.6 22.9z\"]\n};\nvar faSortAlphaUp = {\n prefix: 'fas',\n iconName: 'sort-alpha-up',\n icon: [448, 512, [], \"f15e\", \"M107.3 36.7c-6.2-6.2-16.4-6.2-22.6 0l-80 80c-10 10-2.9 27.3 11.3 27.3h48v320c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V144h48c14.2 0 21.4-17.2 11.3-27.3zm293.4 390.4h-61.1c.7-1 1.5-2 2.3-3.1l67.5-95.7c1.4-2 2.2-4.4 2.2-6.9V300c0-6.6-5.4-12-12-12H274.5c-6.6 0-12 5.4-12 12v28.9c0 6.6 5.4 12 12 12H331c-.7 1-1.5 2-2.3 3.1l-67.2 95.2c-1.4 2-2.2 4.4-2.2 6.9V468c0 6.6 5.4 12 12 12h129.4c6.6 0 12-5.4 12-12v-28.9c0-6.7-5.4-12-12-12zm23.5-219l-57.1-168c-1.7-4.9-6.2-8.1-11.4-8.1h-39.6c-5.1 0-9.7 3.3-11.4 8.1l-57.1 168c-2.6 7.8 3.1 15.9 11.4 15.9h35.7c5.4 0 10.1-3.5 11.5-8.7l8.1-28.2h42.9l8.3 28.3A12 12 0 0 0 377 224h35.7c8.4 0 14.2-8.1 11.5-15.9zm-95-71.5l6.8-22.9 6.6 22.9z\"]\n};\nvar faSortAmountDown = {\n prefix: 'fas',\n iconName: 'sort-amount-down',\n icon: [512, 512, [], \"f160\", \"M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"]\n};\nvar faSortAmountUp = {\n prefix: 'fas',\n iconName: 'sort-amount-up',\n icon: [512, 512, [], \"f161\", \"M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"]\n};\nvar faSortDown = {\n prefix: 'fas',\n iconName: 'sort-down',\n icon: [320, 512, [], \"f0dd\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"]\n};\nvar faSortNumericDown = {\n prefix: 'fas',\n iconName: 'sort-numeric-down',\n icon: [448, 512, [], \"f162\", \"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z\"]\n};\nvar faSortNumericUp = {\n prefix: 'fas',\n iconName: 'sort-numeric-up',\n icon: [448, 512, [], \"f163\", \"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z\"]\n};\nvar faSortUp = {\n prefix: 'fas',\n iconName: 'sort-up',\n icon: [320, 512, [], \"f0de\", \"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"]\n};\nvar faSpa = {\n prefix: 'fas',\n iconName: 'spa',\n icon: [576, 512, [], \"f5bb\", \"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"]\n};\nvar faSpaceShuttle = {\n prefix: 'fas',\n iconName: 'space-shuttle',\n icon: [640, 512, [], \"f197\", \"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"]\n};\nvar faSpider = {\n prefix: 'fas',\n iconName: 'spider',\n icon: [576, 512, [], \"f717\", \"M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z\"]\n};\nvar faSpinner = {\n prefix: 'fas',\n iconName: 'spinner',\n icon: [512, 512, [], \"f110\", \"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"]\n};\nvar faSplotch = {\n prefix: 'fas',\n iconName: 'splotch',\n icon: [512, 512, [], \"f5bc\", \"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"]\n};\nvar faSprayCan = {\n prefix: 'fas',\n iconName: 'spray-can',\n icon: [512, 512, [], \"f5bd\", \"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faSquare = {\n prefix: 'fas',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faSquareFull = {\n prefix: 'fas',\n iconName: 'square-full',\n icon: [512, 512, [], \"f45c\", \"M512 512H0V0h512v512z\"]\n};\nvar faSquareRootAlt = {\n prefix: 'fas',\n iconName: 'square-root-alt',\n icon: [576, 512, [], \"f698\", \"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z\"]\n};\nvar faStamp = {\n prefix: 'fas',\n iconName: 'stamp',\n icon: [512, 512, [], \"f5bf\", \"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"]\n};\nvar faStar = {\n prefix: 'fas',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"]\n};\nvar faStarAndCrescent = {\n prefix: 'fas',\n iconName: 'star-and-crescent',\n icon: [512, 512, [], \"f699\", \"M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z\"]\n};\nvar faStarHalf = {\n prefix: 'fas',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"]\n};\nvar faStarHalfAlt = {\n prefix: 'fas',\n iconName: 'star-half-alt',\n icon: [536, 512, [], \"f5c0\", \"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"]\n};\nvar faStarOfDavid = {\n prefix: 'fas',\n iconName: 'star-of-david',\n icon: [464, 512, [], \"f69a\", \"M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z\"]\n};\nvar faStarOfLife = {\n prefix: 'fas',\n iconName: 'star-of-life',\n icon: [480, 512, [], \"f621\", \"M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z\"]\n};\nvar faStepBackward = {\n prefix: 'fas',\n iconName: 'step-backward',\n icon: [448, 512, [], \"f048\", \"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"]\n};\nvar faStepForward = {\n prefix: 'fas',\n iconName: 'step-forward',\n icon: [448, 512, [], \"f051\", \"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"]\n};\nvar faStethoscope = {\n prefix: 'fas',\n iconName: 'stethoscope',\n icon: [512, 512, [], \"f0f1\", \"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faStickyNote = {\n prefix: 'fas',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"]\n};\nvar faStop = {\n prefix: 'fas',\n iconName: 'stop',\n icon: [448, 512, [], \"f04d\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faStopCircle = {\n prefix: 'fas',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faStopwatch = {\n prefix: 'fas',\n iconName: 'stopwatch',\n icon: [448, 512, [], \"f2f2\", \"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faStore = {\n prefix: 'fas',\n iconName: 'store',\n icon: [616, 512, [], \"f54e\", \"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"]\n};\nvar faStoreAlt = {\n prefix: 'fas',\n iconName: 'store-alt',\n icon: [640, 512, [], \"f54f\", \"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"]\n};\nvar faStream = {\n prefix: 'fas',\n iconName: 'stream',\n icon: [512, 512, [], \"f550\", \"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"]\n};\nvar faStreetView = {\n prefix: 'fas',\n iconName: 'street-view',\n icon: [512, 512, [], \"f21d\", \"M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z\"]\n};\nvar faStrikethrough = {\n prefix: 'fas',\n iconName: 'strikethrough',\n icon: [512, 512, [], \"f0cc\", \"M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z\"]\n};\nvar faStroopwafel = {\n prefix: 'fas',\n iconName: 'stroopwafel',\n icon: [512, 512, [], \"f551\", \"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"]\n};\nvar faSubscript = {\n prefix: 'fas',\n iconName: 'subscript',\n icon: [512, 512, [], \"f12c\", \"M272 32h-67.8c-5.5 0-10.7 2.9-13.6 7.6l-40.3 65c-2.3 3.6-4.5 7.3-6.2 10.5-1.7-3.2-3.7-6.8-5.7-10.4L98.5 39.6c-2.9-4.7-8.1-7.6-13.6-7.6H16C7.2 32 0 39.2 0 48v32c0 8.8 7.2 16 16 16h30.1l52.8 77.3L42.3 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64c5.5 0 10.7-2.9 13.6-7.6l44.7-72.1c2.2-3.6 4.2-7.3 5.9-10.6 1.8 3.2 3.9 6.9 6.2 10.2l45.7 72.6c2.9 4.7 8 7.5 13.5 7.5H272c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-22l-58.6-84.3L244 96h28c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16zm224 384H395.2c3.5-10.5 18.8-21.3 36.3-32.4 16.6-10.6 35.5-22.6 50.3-38.9 17.5-19.1 25.9-40.2 25.9-64.6 0-60.6-50.7-88.1-97.8-88.1-42.5 0-76.4 22-94.4 50.4-4.7 7.3-2.6 17 4.6 21.9l30.3 20.3c7 4.7 16.5 3.1 21.6-3.6 8-10.4 18.8-18.2 31.7-18.2 19.4 0 26.3 12.9 26.3 23.9 0 36.2-119.4 57-119.4 160 0 6.7.6 13 1.4 19.3 1.1 8 7.8 13.9 15.9 13.9H496c8.8 0 16-7.2 16-16v-32c0-8.7-7.2-15.9-16-15.9z\"]\n};\nvar faSubway = {\n prefix: 'fas',\n iconName: 'subway',\n icon: [448, 512, [], \"f239\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faSuitcase = {\n prefix: 'fas',\n iconName: 'suitcase',\n icon: [512, 512, [], \"f0f2\", \"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"]\n};\nvar faSuitcaseRolling = {\n prefix: 'fas',\n iconName: 'suitcase-rolling',\n icon: [384, 512, [], \"f5c1\", \"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"]\n};\nvar faSun = {\n prefix: 'fas',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z\"]\n};\nvar faSuperscript = {\n prefix: 'fas',\n iconName: 'superscript',\n icon: [512, 512, [], \"f12b\", \"M272 192h-67.8c-5.5 0-10.7 2.9-13.6 7.6l-40.3 65c-2.3 3.6-4.5 7.3-6.2 10.5-1.7-3.2-3.7-6.8-5.7-10.4l-39.9-65.1c-2.9-4.7-8.1-7.6-13.6-7.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h30.1l52.8 77.3L42.3 416H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64c5.5 0 10.7-2.9 13.6-7.6l44.7-72.1c2.2-3.6 4.2-7.3 5.9-10.6 1.8 3.2 3.9 6.9 6.2 10.2l45.7 72.6c2.9 4.7 8 7.5 13.5 7.5H272c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-22l-58.6-84.3L244 256h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm224 64H395.2c3.5-10.5 18.8-21.3 36.3-32.4 16.6-10.6 35.5-22.6 50.3-38.9 17.5-19.1 25.9-40.2 25.9-64.6 0-60.6-50.7-88.1-97.8-88.1-42.5 0-76.4 22-94.4 50.4-4.7 7.3-2.6 17 4.6 21.9l30.3 20.3c7 4.7 16.5 3.1 21.6-3.6 8-10.4 18.8-18.2 31.7-18.2 19.4 0 26.3 12.9 26.3 23.9 0 36.2-119.4 57-119.4 160 0 6.7.6 13 1.4 19.3 1.1 8 7.8 13.9 15.9 13.9H496c8.8 0 16-7.2 16-16v-32c0-8.7-7.2-15.9-16-15.9z\"]\n};\nvar faSurprise = {\n prefix: 'fas',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faSwatchbook = {\n prefix: 'fas',\n iconName: 'swatchbook',\n icon: [511, 512, [], \"f5c3\", \"M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z\"]\n};\nvar faSwimmer = {\n prefix: 'fas',\n iconName: 'swimmer',\n icon: [640, 512, [], \"f5c4\", \"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"]\n};\nvar faSwimmingPool = {\n prefix: 'fas',\n iconName: 'swimming-pool',\n icon: [640, 512, [], \"f5c5\", \"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"]\n};\nvar faSynagogue = {\n prefix: 'fas',\n iconName: 'synagogue',\n icon: [640, 512, [], \"f69b\", \"M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z\"]\n};\nvar faSync = {\n prefix: 'fas',\n iconName: 'sync',\n icon: [512, 512, [], \"f021\", \"M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z\"]\n};\nvar faSyncAlt = {\n prefix: 'fas',\n iconName: 'sync-alt',\n icon: [512, 512, [], \"f2f1\", \"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"]\n};\nvar faSyringe = {\n prefix: 'fas',\n iconName: 'syringe',\n icon: [512, 512, [], \"f48e\", \"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"]\n};\nvar faTable = {\n prefix: 'fas',\n iconName: 'table',\n icon: [512, 512, [], \"f0ce\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"]\n};\nvar faTableTennis = {\n prefix: 'fas',\n iconName: 'table-tennis',\n icon: [512, 512, [], \"f45d\", \"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"]\n};\nvar faTablet = {\n prefix: 'fas',\n iconName: 'tablet',\n icon: [448, 512, [], \"f10a\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faTabletAlt = {\n prefix: 'fas',\n iconName: 'tablet-alt',\n icon: [448, 512, [], \"f3fa\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faTablets = {\n prefix: 'fas',\n iconName: 'tablets',\n icon: [640, 512, [], \"f490\", \"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"]\n};\nvar faTachometerAlt = {\n prefix: 'fas',\n iconName: 'tachometer-alt',\n icon: [576, 512, [], \"f3fd\", \"M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTag = {\n prefix: 'fas',\n iconName: 'tag',\n icon: [512, 512, [], \"f02b\", \"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faTags = {\n prefix: 'fas',\n iconName: 'tags',\n icon: [640, 512, [], \"f02c\", \"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"]\n};\nvar faTape = {\n prefix: 'fas',\n iconName: 'tape',\n icon: [640, 512, [], \"f4db\", \"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"]\n};\nvar faTasks = {\n prefix: 'fas',\n iconName: 'tasks',\n icon: [512, 512, [], \"f0ae\", \"M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z\"]\n};\nvar faTaxi = {\n prefix: 'fas',\n iconName: 'taxi',\n icon: [512, 512, [], \"f1ba\", \"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTeeth = {\n prefix: 'fas',\n iconName: 'teeth',\n icon: [640, 512, [], \"f62e\", \"M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z\"]\n};\nvar faTeethOpen = {\n prefix: 'fas',\n iconName: 'teeth-open',\n icon: [640, 512, [], \"f62f\", \"M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z\"]\n};\nvar faTemperatureHigh = {\n prefix: 'fas',\n iconName: 'temperature-high',\n icon: [512, 512, [], \"f769\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTemperatureLow = {\n prefix: 'fas',\n iconName: 'temperature-low',\n icon: [512, 512, [], \"f76b\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTenge = {\n prefix: 'fas',\n iconName: 'tenge',\n icon: [384, 512, [], \"f7d7\", \"M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z\"]\n};\nvar faTerminal = {\n prefix: 'fas',\n iconName: 'terminal',\n icon: [640, 512, [], \"f120\", \"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"]\n};\nvar faTextHeight = {\n prefix: 'fas',\n iconName: 'text-height',\n icon: [576, 512, [], \"f034\", \"M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z\"]\n};\nvar faTextWidth = {\n prefix: 'fas',\n iconName: 'text-width',\n icon: [448, 512, [], \"f035\", \"M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z\"]\n};\nvar faTh = {\n prefix: 'fas',\n iconName: 'th',\n icon: [512, 512, [], \"f00a\", \"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"]\n};\nvar faThLarge = {\n prefix: 'fas',\n iconName: 'th-large',\n icon: [512, 512, [], \"f009\", \"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"]\n};\nvar faThList = {\n prefix: 'fas',\n iconName: 'th-list',\n icon: [512, 512, [], \"f00b\", \"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"]\n};\nvar faTheaterMasks = {\n prefix: 'fas',\n iconName: 'theater-masks',\n icon: [640, 512, [], \"f630\", \"M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z\"]\n};\nvar faThermometer = {\n prefix: 'fas',\n iconName: 'thermometer',\n icon: [512, 512, [], \"f491\", \"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"]\n};\nvar faThermometerEmpty = {\n prefix: 'fas',\n iconName: 'thermometer-empty',\n icon: [256, 512, [], \"f2cb\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerFull = {\n prefix: 'fas',\n iconName: 'thermometer-full',\n icon: [256, 512, [], \"f2c7\", \"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"]\n};\nvar faThermometerHalf = {\n prefix: 'fas',\n iconName: 'thermometer-half',\n icon: [256, 512, [], \"f2c9\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerQuarter = {\n prefix: 'fas',\n iconName: 'thermometer-quarter',\n icon: [256, 512, [], \"f2ca\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerThreeQuarters = {\n prefix: 'fas',\n iconName: 'thermometer-three-quarters',\n icon: [256, 512, [], \"f2c8\", \"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThumbsDown = {\n prefix: 'fas',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"]\n};\nvar faThumbsUp = {\n prefix: 'fas',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"]\n};\nvar faThumbtack = {\n prefix: 'fas',\n iconName: 'thumbtack',\n icon: [384, 512, [], \"f08d\", \"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"]\n};\nvar faTicketAlt = {\n prefix: 'fas',\n iconName: 'ticket-alt',\n icon: [576, 512, [], \"f3ff\", \"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"]\n};\nvar faTimes = {\n prefix: 'fas',\n iconName: 'times',\n icon: [352, 512, [], \"f00d\", \"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"]\n};\nvar faTimesCircle = {\n prefix: 'fas',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"]\n};\nvar faTint = {\n prefix: 'fas',\n iconName: 'tint',\n icon: [352, 512, [], \"f043\", \"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faTintSlash = {\n prefix: 'fas',\n iconName: 'tint-slash',\n icon: [640, 512, [], \"f5c7\", \"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"]\n};\nvar faTired = {\n prefix: 'fas',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"]\n};\nvar faToggleOff = {\n prefix: 'fas',\n iconName: 'toggle-off',\n icon: [576, 512, [], \"f204\", \"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"]\n};\nvar faToggleOn = {\n prefix: 'fas',\n iconName: 'toggle-on',\n icon: [576, 512, [], \"f205\", \"M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z\"]\n};\nvar faToilet = {\n prefix: 'fas',\n iconName: 'toilet',\n icon: [384, 512, [], \"f7d8\", \"M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z\"]\n};\nvar faToiletPaper = {\n prefix: 'fas',\n iconName: 'toilet-paper',\n icon: [576, 512, [], \"f71e\", \"M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z\"]\n};\nvar faToolbox = {\n prefix: 'fas',\n iconName: 'toolbox',\n icon: [512, 512, [], \"f552\", \"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"]\n};\nvar faTools = {\n prefix: 'fas',\n iconName: 'tools',\n icon: [512, 512, [], \"f7d9\", \"M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z\"]\n};\nvar faTooth = {\n prefix: 'fas',\n iconName: 'tooth',\n icon: [448, 512, [], \"f5c9\", \"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"]\n};\nvar faTorah = {\n prefix: 'fas',\n iconName: 'torah',\n icon: [640, 512, [], \"f6a0\", \"M48 0A48.05 48.05 0 0 0 0 48v64a16 16 0 0 0 16 16h80V48A48.05 48.05 0 0 0 48 0zm347.14 228.56h34.91l-17.47-29.17zm-59.09 52.07l16.78-28.07h-33.58zM242 228.56h34.9l-17.48-29.19zm188-105.12h-34.9l17.48 29.19zM256 412.57V352h288V96a96.1 96.1 0 0 0-96-96H111.59A79.24 79.24 0 0 1 128 48v368a64 64 0 0 0 74.75 63.12C234.22 474 256 444.46 256 412.57zm-38.59-303a20.11 20.11 0 0 1 17.5-10.15h56.3L318.8 53.3a20 20 0 0 1 17.25-9.82 19.66 19.66 0 0 1 17 9.68l27.7 46.28h56.36a20 20 0 0 1 17.14 30.29L426.57 176l27.79 46.43a19.6 19.6 0 0 1 .23 20 20.11 20.11 0 0 1-17.5 10.15h-56.3L353.2 298.7a20 20 0 0 1-17.2 9.82 19.66 19.66 0 0 1-17-9.68l-27.7-46.28h-56.39a20 20 0 0 1-17.14-30.29L245.43 176l-27.79-46.43a19.6 19.6 0 0 1-.23-19.98zM624 384H288v32a96.11 96.11 0 0 1-96 96h336a112 112 0 0 0 112-112 16 16 0 0 0-16-16zM276.86 123.44H242l17.47 29.17zM336 71.38l-16.83 28.06h33.58zm-31.12 157.18h62.3L398.59 176l-31.47-52.58h-62.3L273.41 176z\"]\n};\nvar faToriiGate = {\n prefix: 'fas',\n iconName: 'torii-gate',\n icon: [512, 512, [], \"f6a1\", \"M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z\"]\n};\nvar faTractor = {\n prefix: 'fas',\n iconName: 'tractor',\n icon: [640, 512, [], \"f722\", \"M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z\"]\n};\nvar faTrademark = {\n prefix: 'fas',\n iconName: 'trademark',\n icon: [640, 512, [], \"f25c\", \"M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z\"]\n};\nvar faTrafficLight = {\n prefix: 'fas',\n iconName: 'traffic-light',\n icon: [384, 512, [], \"f637\", \"M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTrain = {\n prefix: 'fas',\n iconName: 'train',\n icon: [448, 512, [], \"f238\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"]\n};\nvar faTram = {\n prefix: 'fas',\n iconName: 'tram',\n icon: [512, 512, [], \"f7da\", \"M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faTransgender = {\n prefix: 'fas',\n iconName: 'transgender',\n icon: [384, 512, [], \"f224\", \"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTransgenderAlt = {\n prefix: 'fas',\n iconName: 'transgender-alt',\n icon: [480, 512, [], \"f225\", \"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTrash = {\n prefix: 'fas',\n iconName: 'trash',\n icon: [448, 512, [], \"f1f8\", \"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z\"]\n};\nvar faTrashAlt = {\n prefix: 'fas',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestore = {\n prefix: 'fas',\n iconName: 'trash-restore',\n icon: [448, 512, [], \"f829\", \"M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestoreAlt = {\n prefix: 'fas',\n iconName: 'trash-restore-alt',\n icon: [448, 512, [], \"f82a\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTree = {\n prefix: 'fas',\n iconName: 'tree',\n icon: [384, 512, [], \"f1bb\", \"M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z\"]\n};\nvar faTrophy = {\n prefix: 'fas',\n iconName: 'trophy',\n icon: [576, 512, [], \"f091\", \"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"]\n};\nvar faTruck = {\n prefix: 'fas',\n iconName: 'truck',\n icon: [640, 512, [], \"f0d1\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faTruckLoading = {\n prefix: 'fas',\n iconName: 'truck-loading',\n icon: [640, 512, [], \"f4de\", \"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faTruckMonster = {\n prefix: 'fas',\n iconName: 'truck-monster',\n icon: [640, 512, [], \"f63b\", \"M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTruckMoving = {\n prefix: 'fas',\n iconName: 'truck-moving',\n icon: [640, 512, [], \"f4df\", \"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"]\n};\nvar faTruckPickup = {\n prefix: 'fas',\n iconName: 'truck-pickup',\n icon: [640, 512, [], \"f63c\", \"M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faTshirt = {\n prefix: 'fas',\n iconName: 'tshirt',\n icon: [640, 512, [], \"f553\", \"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"]\n};\nvar faTty = {\n prefix: 'fas',\n iconName: 'tty',\n icon: [512, 512, [], \"f1e4\", \"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faTv = {\n prefix: 'fas',\n iconName: 'tv',\n icon: [640, 512, [], \"f26c\", \"M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z\"]\n};\nvar faUmbrella = {\n prefix: 'fas',\n iconName: 'umbrella',\n icon: [576, 512, [], \"f0e9\", \"M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z\"]\n};\nvar faUmbrellaBeach = {\n prefix: 'fas',\n iconName: 'umbrella-beach',\n icon: [640, 512, [], \"f5ca\", \"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"]\n};\nvar faUnderline = {\n prefix: 'fas',\n iconName: 'underline',\n icon: [448, 512, [], \"f0cd\", \"M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z\"]\n};\nvar faUndo = {\n prefix: 'fas',\n iconName: 'undo',\n icon: [512, 512, [], \"f0e2\", \"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"]\n};\nvar faUndoAlt = {\n prefix: 'fas',\n iconName: 'undo-alt',\n icon: [512, 512, [], \"f2ea\", \"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"]\n};\nvar faUniversalAccess = {\n prefix: 'fas',\n iconName: 'universal-access',\n icon: [512, 512, [], \"f29a\", \"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"]\n};\nvar faUniversity = {\n prefix: 'fas',\n iconName: 'university',\n icon: [512, 512, [], \"f19c\", \"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"]\n};\nvar faUnlink = {\n prefix: 'fas',\n iconName: 'unlink',\n icon: [512, 512, [], \"f127\", \"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"]\n};\nvar faUnlock = {\n prefix: 'fas',\n iconName: 'unlock',\n icon: [448, 512, [], \"f09c\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faUnlockAlt = {\n prefix: 'fas',\n iconName: 'unlock-alt',\n icon: [448, 512, [], \"f13e\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"]\n};\nvar faUpload = {\n prefix: 'fas',\n iconName: 'upload',\n icon: [512, 512, [], \"f093\", \"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faUser = {\n prefix: 'fas',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserAlt = {\n prefix: 'fas',\n iconName: 'user-alt',\n icon: [512, 512, [], \"f406\", \"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"]\n};\nvar faUserAltSlash = {\n prefix: 'fas',\n iconName: 'user-alt-slash',\n icon: [640, 512, [], \"f4fa\", \"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"]\n};\nvar faUserAstronaut = {\n prefix: 'fas',\n iconName: 'user-astronaut',\n icon: [448, 512, [], \"f4fb\", \"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faUserCheck = {\n prefix: 'fas',\n iconName: 'user-check',\n icon: [640, 512, [], \"f4fc\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"]\n};\nvar faUserCircle = {\n prefix: 'fas',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"]\n};\nvar faUserClock = {\n prefix: 'fas',\n iconName: 'user-clock',\n icon: [640, 512, [], \"f4fd\", \"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"]\n};\nvar faUserCog = {\n prefix: 'fas',\n iconName: 'user-cog',\n icon: [640, 512, [], \"f4fe\", \"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"]\n};\nvar faUserEdit = {\n prefix: 'fas',\n iconName: 'user-edit',\n icon: [640, 512, [], \"f4ff\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"]\n};\nvar faUserFriends = {\n prefix: 'fas',\n iconName: 'user-friends',\n icon: [640, 512, [], \"f500\", \"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"]\n};\nvar faUserGraduate = {\n prefix: 'fas',\n iconName: 'user-graduate',\n icon: [448, 512, [], \"f501\", \"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"]\n};\nvar faUserInjured = {\n prefix: 'fas',\n iconName: 'user-injured',\n icon: [448, 512, [], \"f728\", \"M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z\"]\n};\nvar faUserLock = {\n prefix: 'fas',\n iconName: 'user-lock',\n icon: [640, 512, [], \"f502\", \"M320 320c0-11.1 3.1-21.4 8.1-30.5-4.8-.5-9.5-1.5-14.5-1.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h280.9c-5.5-9.5-8.9-20.3-8.9-32V320zm-96-64c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm384 32h-32v-48c0-44.2-35.8-80-80-80s-80 35.8-80 80v48h-32c-17.7 0-32 14.3-32 32v160c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32zm-80 0h-64v-48c0-17.6 14.4-32 32-32s32 14.4 32 32v48z\"]\n};\nvar faUserMd = {\n prefix: 'fas',\n iconName: 'user-md',\n icon: [448, 512, [], \"f0f0\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"]\n};\nvar faUserMinus = {\n prefix: 'fas',\n iconName: 'user-minus',\n icon: [640, 512, [], \"f503\", \"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserNinja = {\n prefix: 'fas',\n iconName: 'user-ninja',\n icon: [448, 512, [], \"f504\", \"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"]\n};\nvar faUserNurse = {\n prefix: 'fas',\n iconName: 'user-nurse',\n icon: [448, 512, [], \"f82f\", \"M57.78 288h82.36c22.51 19.68 51.62 32 83.86 32s61.35-12.32 83.86-32h82.36a16 16 0 0 0 14.28-23.18c-15.23-29.85-31.28-62.23-42.15-95.54C354.78 146.09 352 121.59 352 97.2V48L224 0 96 48v49.2c0 24.39-2.75 48.89-10.33 72.08C74.78 202.59 58.73 235 43.5 264.82A16 16 0 0 0 57.78 288zM184 71.67a5 5 0 0 1 5-5h21.67V45a5 5 0 0 1 5-5h16.66a5 5 0 0 1 5 5v21.67H259a5 5 0 0 1 5 5v16.66a5 5 0 0 1-5 5h-21.67V115a5 5 0 0 1-5 5h-16.66a5 5 0 0 1-5-5V93.33H189a5 5 0 0 1-5-5zM144 160h160v32a80 80 0 0 1-160 0zm175.41 160L224 415.39 128.59 320C57.1 323.1 0 381.6 0 453.79A58.21 58.21 0 0 0 58.21 512h331.58A58.21 58.21 0 0 0 448 453.79C448 381.6 390.9 323.1 319.41 320z\"]\n};\nvar faUserPlus = {\n prefix: 'fas',\n iconName: 'user-plus',\n icon: [640, 512, [], \"f234\", \"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserSecret = {\n prefix: 'fas',\n iconName: 'user-secret',\n icon: [448, 512, [], \"f21b\", \"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"]\n};\nvar faUserShield = {\n prefix: 'fas',\n iconName: 'user-shield',\n icon: [640, 512, [], \"f505\", \"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"]\n};\nvar faUserSlash = {\n prefix: 'fas',\n iconName: 'user-slash',\n icon: [640, 512, [], \"f506\", \"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"]\n};\nvar faUserTag = {\n prefix: 'fas',\n iconName: 'user-tag',\n icon: [640, 512, [], \"f507\", \"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"]\n};\nvar faUserTie = {\n prefix: 'fas',\n iconName: 'user-tie',\n icon: [448, 512, [], \"f508\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"]\n};\nvar faUserTimes = {\n prefix: 'fas',\n iconName: 'user-times',\n icon: [640, 512, [], \"f235\", \"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUsers = {\n prefix: 'fas',\n iconName: 'users',\n icon: [640, 512, [], \"f0c0\", \"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersCog = {\n prefix: 'fas',\n iconName: 'users-cog',\n icon: [640, 512, [], \"f509\", \"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUtensilSpoon = {\n prefix: 'fas',\n iconName: 'utensil-spoon',\n icon: [512, 512, [], \"f2e5\", \"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"]\n};\nvar faUtensils = {\n prefix: 'fas',\n iconName: 'utensils',\n icon: [416, 512, [], \"f2e7\", \"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"]\n};\nvar faVectorSquare = {\n prefix: 'fas',\n iconName: 'vector-square',\n icon: [512, 512, [], \"f5cb\", \"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"]\n};\nvar faVenus = {\n prefix: 'fas',\n iconName: 'venus',\n icon: [288, 512, [], \"f221\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faVenusDouble = {\n prefix: 'fas',\n iconName: 'venus-double',\n icon: [512, 512, [], \"f226\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"]\n};\nvar faVenusMars = {\n prefix: 'fas',\n iconName: 'venus-mars',\n icon: [576, 512, [], \"f228\", \"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faVial = {\n prefix: 'fas',\n iconName: 'vial',\n icon: [480, 512, [], \"f492\", \"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"]\n};\nvar faVials = {\n prefix: 'fas',\n iconName: 'vials',\n icon: [640, 512, [], \"f493\", \"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"]\n};\nvar faVideo = {\n prefix: 'fas',\n iconName: 'video',\n icon: [576, 512, [], \"f03d\", \"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"]\n};\nvar faVideoSlash = {\n prefix: 'fas',\n iconName: 'video-slash',\n icon: [640, 512, [], \"f4e2\", \"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"]\n};\nvar faVihara = {\n prefix: 'fas',\n iconName: 'vihara',\n icon: [640, 512, [], \"f6a7\", \"M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z\"]\n};\nvar faVolleyballBall = {\n prefix: 'fas',\n iconName: 'volleyball-ball',\n icon: [495, 512, [], \"f45f\", \"M223.3 243.4c-.9-37-8.6-72.8-22.7-105.7-90.8 42.4-157.5 122.4-180.3 216.8 13.4 30.8 32.9 58.3 56.9 81.1 22.7-79.2 74.2-147.8 146.1-192.2zM186.4 109c-15-26.4-34.5-50.1-57.4-70.7C38 88.1-15.8 191.2 4 300.5c33.4-83.1 98.4-152 182.4-191.5zM374 274.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5 57.3 59.3 91 138.2 93.5 222.7 32.5 17.7 67.3 29 102.9 33.2zm-124.7 9.5c-31.6 19.3-58.7 43.9-80.2 72.6 82 57.3 184.5 75.1 277.5 47.8 19.7-26.4 34.2-56.8 42.2-89.9-26.6 6.6-53.7 10.4-80.9 10.4-54.6-.1-108.9-14.1-158.6-40.9zM151 383.3c-15.2 26-25.7 54.4-32.1 84.2 37.6 23 81.7 36.5 129.1 36.5 61 0 116.7-22.1 159.9-58.6C295 461.5 204.6 420.6 151 383.3zM331.3 22.7c55.3 70.4 82.5 161.2 74.6 253.6 30.3.2 60.5-4.8 89.7-14.2 0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"]\n};\nvar faVolumeDown = {\n prefix: 'fas',\n iconName: 'volume-down',\n icon: [384, 512, [], \"f027\", \"M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z\"]\n};\nvar faVolumeMute = {\n prefix: 'fas',\n iconName: 'volume-mute',\n icon: [512, 512, [], \"f6a9\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z\"]\n};\nvar faVolumeOff = {\n prefix: 'fas',\n iconName: 'volume-off',\n icon: [257, 512, [], \"f026\", \"M216.36 71.04L127.39 160H25.33c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.47-25.96-31.98-40.97-16.98z\"]\n};\nvar faVolumeUp = {\n prefix: 'fas',\n iconName: 'volume-up',\n icon: [576, 512, [], \"f028\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z\"]\n};\nvar faVoteYea = {\n prefix: 'fas',\n iconName: 'vote-yea',\n icon: [640, 512, [], \"f772\", \"M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z\"]\n};\nvar faVrCardboard = {\n prefix: 'fas',\n iconName: 'vr-cardboard',\n icon: [640, 512, [], \"f729\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"]\n};\nvar faWalking = {\n prefix: 'fas',\n iconName: 'walking',\n icon: [320, 512, [], \"f554\", \"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"]\n};\nvar faWallet = {\n prefix: 'fas',\n iconName: 'wallet',\n icon: [512, 512, [], \"f555\", \"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faWarehouse = {\n prefix: 'fas',\n iconName: 'warehouse',\n icon: [640, 512, [], \"f494\", \"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"]\n};\nvar faWater = {\n prefix: 'fas',\n iconName: 'water',\n icon: [576, 512, [], \"f773\", \"M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z\"]\n};\nvar faWeight = {\n prefix: 'fas',\n iconName: 'weight',\n icon: [512, 512, [], \"f496\", \"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"]\n};\nvar faWeightHanging = {\n prefix: 'fas',\n iconName: 'weight-hanging',\n icon: [512, 512, [], \"f5cd\", \"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faWheelchair = {\n prefix: 'fas',\n iconName: 'wheelchair',\n icon: [512, 512, [], \"f193\", \"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"]\n};\nvar faWifi = {\n prefix: 'fas',\n iconName: 'wifi',\n icon: [640, 512, [], \"f1eb\", \"M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z\"]\n};\nvar faWind = {\n prefix: 'fas',\n iconName: 'wind',\n icon: [512, 512, [], \"f72e\", \"M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z\"]\n};\nvar faWindowClose = {\n prefix: 'fas',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"]\n};\nvar faWindowMaximize = {\n prefix: 'fas',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"]\n};\nvar faWindowMinimize = {\n prefix: 'fas',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"]\n};\nvar faWindowRestore = {\n prefix: 'fas',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"]\n};\nvar faWineBottle = {\n prefix: 'fas',\n iconName: 'wine-bottle',\n icon: [512, 512, [], \"f72f\", \"M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z\"]\n};\nvar faWineGlass = {\n prefix: 'fas',\n iconName: 'wine-glass',\n icon: [288, 512, [], \"f4e3\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"]\n};\nvar faWineGlassAlt = {\n prefix: 'fas',\n iconName: 'wine-glass-alt',\n icon: [288, 512, [], \"f5ce\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"]\n};\nvar faWonSign = {\n prefix: 'fas',\n iconName: 'won-sign',\n icon: [576, 512, [], \"f159\", \"M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z\"]\n};\nvar faWrench = {\n prefix: 'fas',\n iconName: 'wrench',\n icon: [512, 512, [], \"f0ad\", \"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faXRay = {\n prefix: 'fas',\n iconName: 'x-ray',\n icon: [640, 512, [], \"f497\", \"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faYenSign = {\n prefix: 'fas',\n iconName: 'yen-sign',\n icon: [384, 512, [], \"f157\", \"M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z\"]\n};\nvar faYinYang = {\n prefix: 'fas',\n iconName: 'yin-yang',\n icon: [496, 512, [], \"f6ad\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar _iconsCache = {\n faAd: faAd,\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAdjust: faAdjust,\n faAirFreshener: faAirFreshener,\n faAlignCenter: faAlignCenter,\n faAlignJustify: faAlignJustify,\n faAlignLeft: faAlignLeft,\n faAlignRight: faAlignRight,\n faAllergies: faAllergies,\n faAmbulance: faAmbulance,\n faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n faAnchor: faAnchor,\n faAngleDoubleDown: faAngleDoubleDown,\n faAngleDoubleLeft: faAngleDoubleLeft,\n faAngleDoubleRight: faAngleDoubleRight,\n faAngleDoubleUp: faAngleDoubleUp,\n faAngleDown: faAngleDown,\n faAngleLeft: faAngleLeft,\n faAngleRight: faAngleRight,\n faAngleUp: faAngleUp,\n faAngry: faAngry,\n faAnkh: faAnkh,\n faAppleAlt: faAppleAlt,\n faArchive: faArchive,\n faArchway: faArchway,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faArrowCircleDown: faArrowCircleDown,\n faArrowCircleLeft: faArrowCircleLeft,\n faArrowCircleRight: faArrowCircleRight,\n faArrowCircleUp: faArrowCircleUp,\n faArrowDown: faArrowDown,\n faArrowLeft: faArrowLeft,\n faArrowRight: faArrowRight,\n faArrowUp: faArrowUp,\n faArrowsAlt: faArrowsAlt,\n faArrowsAltH: faArrowsAltH,\n faArrowsAltV: faArrowsAltV,\n faAssistiveListeningSystems: faAssistiveListeningSystems,\n faAsterisk: faAsterisk,\n faAt: faAt,\n faAtlas: faAtlas,\n faAtom: faAtom,\n faAudioDescription: faAudioDescription,\n faAward: faAward,\n faBaby: faBaby,\n faBabyCarriage: faBabyCarriage,\n faBackspace: faBackspace,\n faBackward: faBackward,\n faBacon: faBacon,\n faBalanceScale: faBalanceScale,\n faBan: faBan,\n faBandAid: faBandAid,\n faBarcode: faBarcode,\n faBars: faBars,\n faBaseballBall: faBaseballBall,\n faBasketballBall: faBasketballBall,\n faBath: faBath,\n faBatteryEmpty: faBatteryEmpty,\n faBatteryFull: faBatteryFull,\n faBatteryHalf: faBatteryHalf,\n faBatteryQuarter: faBatteryQuarter,\n faBatteryThreeQuarters: faBatteryThreeQuarters,\n faBed: faBed,\n faBeer: faBeer,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBezierCurve: faBezierCurve,\n faBible: faBible,\n faBicycle: faBicycle,\n faBinoculars: faBinoculars,\n faBiohazard: faBiohazard,\n faBirthdayCake: faBirthdayCake,\n faBlender: faBlender,\n faBlenderPhone: faBlenderPhone,\n faBlind: faBlind,\n faBlog: faBlog,\n faBold: faBold,\n faBolt: faBolt,\n faBomb: faBomb,\n faBone: faBone,\n faBong: faBong,\n faBook: faBook,\n faBookDead: faBookDead,\n faBookMedical: faBookMedical,\n faBookOpen: faBookOpen,\n faBookReader: faBookReader,\n faBookmark: faBookmark,\n faBowlingBall: faBowlingBall,\n faBox: faBox,\n faBoxOpen: faBoxOpen,\n faBoxes: faBoxes,\n faBraille: faBraille,\n faBrain: faBrain,\n faBreadSlice: faBreadSlice,\n faBriefcase: faBriefcase,\n faBriefcaseMedical: faBriefcaseMedical,\n faBroadcastTower: faBroadcastTower,\n faBroom: faBroom,\n faBrush: faBrush,\n faBug: faBug,\n faBuilding: faBuilding,\n faBullhorn: faBullhorn,\n faBullseye: faBullseye,\n faBurn: faBurn,\n faBus: faBus,\n faBusAlt: faBusAlt,\n faBusinessTime: faBusinessTime,\n faCalculator: faCalculator,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarDay: faCalendarDay,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCalendarWeek: faCalendarWeek,\n faCamera: faCamera,\n faCameraRetro: faCameraRetro,\n faCampground: faCampground,\n faCandyCane: faCandyCane,\n faCannabis: faCannabis,\n faCapsules: faCapsules,\n faCar: faCar,\n faCarAlt: faCarAlt,\n faCarBattery: faCarBattery,\n faCarCrash: faCarCrash,\n faCarSide: faCarSide,\n faCaretDown: faCaretDown,\n faCaretLeft: faCaretLeft,\n faCaretRight: faCaretRight,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faCaretUp: faCaretUp,\n faCarrot: faCarrot,\n faCartArrowDown: faCartArrowDown,\n faCartPlus: faCartPlus,\n faCashRegister: faCashRegister,\n faCat: faCat,\n faCertificate: faCertificate,\n faChair: faChair,\n faChalkboard: faChalkboard,\n faChalkboardTeacher: faChalkboardTeacher,\n faChargingStation: faChargingStation,\n faChartArea: faChartArea,\n faChartBar: faChartBar,\n faChartLine: faChartLine,\n faChartPie: faChartPie,\n faCheck: faCheck,\n faCheckCircle: faCheckCircle,\n faCheckDouble: faCheckDouble,\n faCheckSquare: faCheckSquare,\n faCheese: faCheese,\n faChess: faChess,\n faChessBishop: faChessBishop,\n faChessBoard: faChessBoard,\n faChessKing: faChessKing,\n faChessKnight: faChessKnight,\n faChessPawn: faChessPawn,\n faChessQueen: faChessQueen,\n faChessRook: faChessRook,\n faChevronCircleDown: faChevronCircleDown,\n faChevronCircleLeft: faChevronCircleLeft,\n faChevronCircleRight: faChevronCircleRight,\n faChevronCircleUp: faChevronCircleUp,\n faChevronDown: faChevronDown,\n faChevronLeft: faChevronLeft,\n faChevronRight: faChevronRight,\n faChevronUp: faChevronUp,\n faChild: faChild,\n faChurch: faChurch,\n faCircle: faCircle,\n faCircleNotch: faCircleNotch,\n faCity: faCity,\n faClinicMedical: faClinicMedical,\n faClipboard: faClipboard,\n faClipboardCheck: faClipboardCheck,\n faClipboardList: faClipboardList,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faCloud: faCloud,\n faCloudDownloadAlt: faCloudDownloadAlt,\n faCloudMeatball: faCloudMeatball,\n faCloudMoon: faCloudMoon,\n faCloudMoonRain: faCloudMoonRain,\n faCloudRain: faCloudRain,\n faCloudShowersHeavy: faCloudShowersHeavy,\n faCloudSun: faCloudSun,\n faCloudSunRain: faCloudSunRain,\n faCloudUploadAlt: faCloudUploadAlt,\n faCocktail: faCocktail,\n faCode: faCode,\n faCodeBranch: faCodeBranch,\n faCoffee: faCoffee,\n faCog: faCog,\n faCogs: faCogs,\n faCoins: faCoins,\n faColumns: faColumns,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDollar: faCommentDollar,\n faCommentDots: faCommentDots,\n faCommentMedical: faCommentMedical,\n faCommentSlash: faCommentSlash,\n faComments: faComments,\n faCommentsDollar: faCommentsDollar,\n faCompactDisc: faCompactDisc,\n faCompass: faCompass,\n faCompress: faCompress,\n faCompressArrowsAlt: faCompressArrowsAlt,\n faConciergeBell: faConciergeBell,\n faCookie: faCookie,\n faCookieBite: faCookieBite,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCouch: faCouch,\n faCreditCard: faCreditCard,\n faCrop: faCrop,\n faCropAlt: faCropAlt,\n faCross: faCross,\n faCrosshairs: faCrosshairs,\n faCrow: faCrow,\n faCrown: faCrown,\n faCrutch: faCrutch,\n faCube: faCube,\n faCubes: faCubes,\n faCut: faCut,\n faDatabase: faDatabase,\n faDeaf: faDeaf,\n faDemocrat: faDemocrat,\n faDesktop: faDesktop,\n faDharmachakra: faDharmachakra,\n faDiagnoses: faDiagnoses,\n faDice: faDice,\n faDiceD20: faDiceD20,\n faDiceD6: faDiceD6,\n faDiceFive: faDiceFive,\n faDiceFour: faDiceFour,\n faDiceOne: faDiceOne,\n faDiceSix: faDiceSix,\n faDiceThree: faDiceThree,\n faDiceTwo: faDiceTwo,\n faDigitalTachograph: faDigitalTachograph,\n faDirections: faDirections,\n faDivide: faDivide,\n faDizzy: faDizzy,\n faDna: faDna,\n faDog: faDog,\n faDollarSign: faDollarSign,\n faDolly: faDolly,\n faDollyFlatbed: faDollyFlatbed,\n faDonate: faDonate,\n faDoorClosed: faDoorClosed,\n faDoorOpen: faDoorOpen,\n faDotCircle: faDotCircle,\n faDove: faDove,\n faDownload: faDownload,\n faDraftingCompass: faDraftingCompass,\n faDragon: faDragon,\n faDrawPolygon: faDrawPolygon,\n faDrum: faDrum,\n faDrumSteelpan: faDrumSteelpan,\n faDrumstickBite: faDrumstickBite,\n faDumbbell: faDumbbell,\n faDumpster: faDumpster,\n faDumpsterFire: faDumpsterFire,\n faDungeon: faDungeon,\n faEdit: faEdit,\n faEgg: faEgg,\n faEject: faEject,\n faEllipsisH: faEllipsisH,\n faEllipsisV: faEllipsisV,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEnvelopeOpenText: faEnvelopeOpenText,\n faEnvelopeSquare: faEnvelopeSquare,\n faEquals: faEquals,\n faEraser: faEraser,\n faEthernet: faEthernet,\n faEuroSign: faEuroSign,\n faExchangeAlt: faExchangeAlt,\n faExclamation: faExclamation,\n faExclamationCircle: faExclamationCircle,\n faExclamationTriangle: faExclamationTriangle,\n faExpand: faExpand,\n faExpandArrowsAlt: faExpandArrowsAlt,\n faExternalLinkAlt: faExternalLinkAlt,\n faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n faEye: faEye,\n faEyeDropper: faEyeDropper,\n faEyeSlash: faEyeSlash,\n faFastBackward: faFastBackward,\n faFastForward: faFastForward,\n faFax: faFax,\n faFeather: faFeather,\n faFeatherAlt: faFeatherAlt,\n faFemale: faFemale,\n faFighterJet: faFighterJet,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileContract: faFileContract,\n faFileCsv: faFileCsv,\n faFileDownload: faFileDownload,\n faFileExcel: faFileExcel,\n faFileExport: faFileExport,\n faFileImage: faFileImage,\n faFileImport: faFileImport,\n faFileInvoice: faFileInvoice,\n faFileInvoiceDollar: faFileInvoiceDollar,\n faFileMedical: faFileMedical,\n faFileMedicalAlt: faFileMedicalAlt,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFilePrescription: faFilePrescription,\n faFileSignature: faFileSignature,\n faFileUpload: faFileUpload,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFill: faFill,\n faFillDrip: faFillDrip,\n faFilm: faFilm,\n faFilter: faFilter,\n faFingerprint: faFingerprint,\n faFire: faFire,\n faFireAlt: faFireAlt,\n faFireExtinguisher: faFireExtinguisher,\n faFirstAid: faFirstAid,\n faFish: faFish,\n faFistRaised: faFistRaised,\n faFlag: faFlag,\n faFlagCheckered: faFlagCheckered,\n faFlagUsa: faFlagUsa,\n faFlask: faFlask,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderMinus: faFolderMinus,\n faFolderOpen: faFolderOpen,\n faFolderPlus: faFolderPlus,\n faFont: faFont,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFootballBall: faFootballBall,\n faForward: faForward,\n faFrog: faFrog,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFunnelDollar: faFunnelDollar,\n faFutbol: faFutbol,\n faGamepad: faGamepad,\n faGasPump: faGasPump,\n faGavel: faGavel,\n faGem: faGem,\n faGenderless: faGenderless,\n faGhost: faGhost,\n faGift: faGift,\n faGifts: faGifts,\n faGlassCheers: faGlassCheers,\n faGlassMartini: faGlassMartini,\n faGlassMartiniAlt: faGlassMartiniAlt,\n faGlassWhiskey: faGlassWhiskey,\n faGlasses: faGlasses,\n faGlobe: faGlobe,\n faGlobeAfrica: faGlobeAfrica,\n faGlobeAmericas: faGlobeAmericas,\n faGlobeAsia: faGlobeAsia,\n faGlobeEurope: faGlobeEurope,\n faGolfBall: faGolfBall,\n faGopuram: faGopuram,\n faGraduationCap: faGraduationCap,\n faGreaterThan: faGreaterThan,\n faGreaterThanEqual: faGreaterThanEqual,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faGripHorizontal: faGripHorizontal,\n faGripLines: faGripLines,\n faGripLinesVertical: faGripLinesVertical,\n faGripVertical: faGripVertical,\n faGuitar: faGuitar,\n faHSquare: faHSquare,\n faHamburger: faHamburger,\n faHammer: faHammer,\n faHamsa: faHamsa,\n faHandHolding: faHandHolding,\n faHandHoldingHeart: faHandHoldingHeart,\n faHandHoldingUsd: faHandHoldingUsd,\n faHandLizard: faHandLizard,\n faHandMiddleFinger: faHandMiddleFinger,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSpock: faHandSpock,\n faHands: faHands,\n faHandsHelping: faHandsHelping,\n faHandshake: faHandshake,\n faHanukiah: faHanukiah,\n faHardHat: faHardHat,\n faHashtag: faHashtag,\n faHatWizard: faHatWizard,\n faHaykal: faHaykal,\n faHdd: faHdd,\n faHeading: faHeading,\n faHeadphones: faHeadphones,\n faHeadphonesAlt: faHeadphonesAlt,\n faHeadset: faHeadset,\n faHeart: faHeart,\n faHeartBroken: faHeartBroken,\n faHeartbeat: faHeartbeat,\n faHelicopter: faHelicopter,\n faHighlighter: faHighlighter,\n faHiking: faHiking,\n faHippo: faHippo,\n faHistory: faHistory,\n faHockeyPuck: faHockeyPuck,\n faHollyBerry: faHollyBerry,\n faHome: faHome,\n faHorse: faHorse,\n faHorseHead: faHorseHead,\n faHospital: faHospital,\n faHospitalAlt: faHospitalAlt,\n faHospitalSymbol: faHospitalSymbol,\n faHotTub: faHotTub,\n faHotdog: faHotdog,\n faHotel: faHotel,\n faHourglass: faHourglass,\n faHourglassEnd: faHourglassEnd,\n faHourglassHalf: faHourglassHalf,\n faHourglassStart: faHourglassStart,\n faHouseDamage: faHouseDamage,\n faHryvnia: faHryvnia,\n faICursor: faICursor,\n faIceCream: faIceCream,\n faIcicles: faIcicles,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faIdCardAlt: faIdCardAlt,\n faIgloo: faIgloo,\n faImage: faImage,\n faImages: faImages,\n faInbox: faInbox,\n faIndent: faIndent,\n faIndustry: faIndustry,\n faInfinity: faInfinity,\n faInfo: faInfo,\n faInfoCircle: faInfoCircle,\n faItalic: faItalic,\n faJedi: faJedi,\n faJoint: faJoint,\n faJournalWhills: faJournalWhills,\n faKaaba: faKaaba,\n faKey: faKey,\n faKeyboard: faKeyboard,\n faKhanda: faKhanda,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faKiwiBird: faKiwiBird,\n faLandmark: faLandmark,\n faLanguage: faLanguage,\n faLaptop: faLaptop,\n faLaptopCode: faLaptopCode,\n faLaptopMedical: faLaptopMedical,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLayerGroup: faLayerGroup,\n faLeaf: faLeaf,\n faLemon: faLemon,\n faLessThan: faLessThan,\n faLessThanEqual: faLessThanEqual,\n faLevelDownAlt: faLevelDownAlt,\n faLevelUpAlt: faLevelUpAlt,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faLink: faLink,\n faLiraSign: faLiraSign,\n faList: faList,\n faListAlt: faListAlt,\n faListOl: faListOl,\n faListUl: faListUl,\n faLocationArrow: faLocationArrow,\n faLock: faLock,\n faLockOpen: faLockOpen,\n faLongArrowAltDown: faLongArrowAltDown,\n faLongArrowAltLeft: faLongArrowAltLeft,\n faLongArrowAltRight: faLongArrowAltRight,\n faLongArrowAltUp: faLongArrowAltUp,\n faLowVision: faLowVision,\n faLuggageCart: faLuggageCart,\n faMagic: faMagic,\n faMagnet: faMagnet,\n faMailBulk: faMailBulk,\n faMale: faMale,\n faMap: faMap,\n faMapMarked: faMapMarked,\n faMapMarkedAlt: faMapMarkedAlt,\n faMapMarker: faMapMarker,\n faMapMarkerAlt: faMapMarkerAlt,\n faMapPin: faMapPin,\n faMapSigns: faMapSigns,\n faMarker: faMarker,\n faMars: faMars,\n faMarsDouble: faMarsDouble,\n faMarsStroke: faMarsStroke,\n faMarsStrokeH: faMarsStrokeH,\n faMarsStrokeV: faMarsStrokeV,\n faMask: faMask,\n faMedal: faMedal,\n faMedkit: faMedkit,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMemory: faMemory,\n faMenorah: faMenorah,\n faMercury: faMercury,\n faMeteor: faMeteor,\n faMicrochip: faMicrochip,\n faMicrophone: faMicrophone,\n faMicrophoneAlt: faMicrophoneAlt,\n faMicrophoneAltSlash: faMicrophoneAltSlash,\n faMicrophoneSlash: faMicrophoneSlash,\n faMicroscope: faMicroscope,\n faMinus: faMinus,\n faMinusCircle: faMinusCircle,\n faMinusSquare: faMinusSquare,\n faMitten: faMitten,\n faMobile: faMobile,\n faMobileAlt: faMobileAlt,\n faMoneyBill: faMoneyBill,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoneyBillWave: faMoneyBillWave,\n faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n faMoneyCheck: faMoneyCheck,\n faMoneyCheckAlt: faMoneyCheckAlt,\n faMonument: faMonument,\n faMoon: faMoon,\n faMortarPestle: faMortarPestle,\n faMosque: faMosque,\n faMotorcycle: faMotorcycle,\n faMountain: faMountain,\n faMousePointer: faMousePointer,\n faMugHot: faMugHot,\n faMusic: faMusic,\n faNetworkWired: faNetworkWired,\n faNeuter: faNeuter,\n faNewspaper: faNewspaper,\n faNotEqual: faNotEqual,\n faNotesMedical: faNotesMedical,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faOilCan: faOilCan,\n faOm: faOm,\n faOtter: faOtter,\n faOutdent: faOutdent,\n faPager: faPager,\n faPaintBrush: faPaintBrush,\n faPaintRoller: faPaintRoller,\n faPalette: faPalette,\n faPallet: faPallet,\n faPaperPlane: faPaperPlane,\n faPaperclip: faPaperclip,\n faParachuteBox: faParachuteBox,\n faParagraph: faParagraph,\n faParking: faParking,\n faPassport: faPassport,\n faPastafarianism: faPastafarianism,\n faPaste: faPaste,\n faPause: faPause,\n faPauseCircle: faPauseCircle,\n faPaw: faPaw,\n faPeace: faPeace,\n faPen: faPen,\n faPenAlt: faPenAlt,\n faPenFancy: faPenFancy,\n faPenNib: faPenNib,\n faPenSquare: faPenSquare,\n faPencilAlt: faPencilAlt,\n faPencilRuler: faPencilRuler,\n faPeopleCarry: faPeopleCarry,\n faPepperHot: faPepperHot,\n faPercent: faPercent,\n faPercentage: faPercentage,\n faPersonBooth: faPersonBooth,\n faPhone: faPhone,\n faPhoneSlash: faPhoneSlash,\n faPhoneSquare: faPhoneSquare,\n faPhoneVolume: faPhoneVolume,\n faPiggyBank: faPiggyBank,\n faPills: faPills,\n faPizzaSlice: faPizzaSlice,\n faPlaceOfWorship: faPlaceOfWorship,\n faPlane: faPlane,\n faPlaneArrival: faPlaneArrival,\n faPlaneDeparture: faPlaneDeparture,\n faPlay: faPlay,\n faPlayCircle: faPlayCircle,\n faPlug: faPlug,\n faPlus: faPlus,\n faPlusCircle: faPlusCircle,\n faPlusSquare: faPlusSquare,\n faPodcast: faPodcast,\n faPoll: faPoll,\n faPollH: faPollH,\n faPoo: faPoo,\n faPooStorm: faPooStorm,\n faPoop: faPoop,\n faPortrait: faPortrait,\n faPoundSign: faPoundSign,\n faPowerOff: faPowerOff,\n faPray: faPray,\n faPrayingHands: faPrayingHands,\n faPrescription: faPrescription,\n faPrescriptionBottle: faPrescriptionBottle,\n faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n faPrint: faPrint,\n faProcedures: faProcedures,\n faProjectDiagram: faProjectDiagram,\n faPuzzlePiece: faPuzzlePiece,\n faQrcode: faQrcode,\n faQuestion: faQuestion,\n faQuestionCircle: faQuestionCircle,\n faQuidditch: faQuidditch,\n faQuoteLeft: faQuoteLeft,\n faQuoteRight: faQuoteRight,\n faQuran: faQuran,\n faRadiation: faRadiation,\n faRadiationAlt: faRadiationAlt,\n faRainbow: faRainbow,\n faRandom: faRandom,\n faReceipt: faReceipt,\n faRecycle: faRecycle,\n faRedo: faRedo,\n faRedoAlt: faRedoAlt,\n faRegistered: faRegistered,\n faReply: faReply,\n faReplyAll: faReplyAll,\n faRepublican: faRepublican,\n faRestroom: faRestroom,\n faRetweet: faRetweet,\n faRibbon: faRibbon,\n faRing: faRing,\n faRoad: faRoad,\n faRobot: faRobot,\n faRocket: faRocket,\n faRoute: faRoute,\n faRss: faRss,\n faRssSquare: faRssSquare,\n faRubleSign: faRubleSign,\n faRuler: faRuler,\n faRulerCombined: faRulerCombined,\n faRulerHorizontal: faRulerHorizontal,\n faRulerVertical: faRulerVertical,\n faRunning: faRunning,\n faRupeeSign: faRupeeSign,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSatellite: faSatellite,\n faSatelliteDish: faSatelliteDish,\n faSave: faSave,\n faSchool: faSchool,\n faScrewdriver: faScrewdriver,\n faScroll: faScroll,\n faSdCard: faSdCard,\n faSearch: faSearch,\n faSearchDollar: faSearchDollar,\n faSearchLocation: faSearchLocation,\n faSearchMinus: faSearchMinus,\n faSearchPlus: faSearchPlus,\n faSeedling: faSeedling,\n faServer: faServer,\n faShapes: faShapes,\n faShare: faShare,\n faShareAlt: faShareAlt,\n faShareAltSquare: faShareAltSquare,\n faShareSquare: faShareSquare,\n faShekelSign: faShekelSign,\n faShieldAlt: faShieldAlt,\n faShip: faShip,\n faShippingFast: faShippingFast,\n faShoePrints: faShoePrints,\n faShoppingBag: faShoppingBag,\n faShoppingBasket: faShoppingBasket,\n faShoppingCart: faShoppingCart,\n faShower: faShower,\n faShuttleVan: faShuttleVan,\n faSign: faSign,\n faSignInAlt: faSignInAlt,\n faSignLanguage: faSignLanguage,\n faSignOutAlt: faSignOutAlt,\n faSignal: faSignal,\n faSignature: faSignature,\n faSimCard: faSimCard,\n faSitemap: faSitemap,\n faSkating: faSkating,\n faSkiing: faSkiing,\n faSkiingNordic: faSkiingNordic,\n faSkull: faSkull,\n faSkullCrossbones: faSkullCrossbones,\n faSlash: faSlash,\n faSleigh: faSleigh,\n faSlidersH: faSlidersH,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSmog: faSmog,\n faSmoking: faSmoking,\n faSmokingBan: faSmokingBan,\n faSms: faSms,\n faSnowboarding: faSnowboarding,\n faSnowflake: faSnowflake,\n faSnowman: faSnowman,\n faSnowplow: faSnowplow,\n faSocks: faSocks,\n faSolarPanel: faSolarPanel,\n faSort: faSort,\n faSortAlphaDown: faSortAlphaDown,\n faSortAlphaUp: faSortAlphaUp,\n faSortAmountDown: faSortAmountDown,\n faSortAmountUp: faSortAmountUp,\n faSortDown: faSortDown,\n faSortNumericDown: faSortNumericDown,\n faSortNumericUp: faSortNumericUp,\n faSortUp: faSortUp,\n faSpa: faSpa,\n faSpaceShuttle: faSpaceShuttle,\n faSpider: faSpider,\n faSpinner: faSpinner,\n faSplotch: faSplotch,\n faSprayCan: faSprayCan,\n faSquare: faSquare,\n faSquareFull: faSquareFull,\n faSquareRootAlt: faSquareRootAlt,\n faStamp: faStamp,\n faStar: faStar,\n faStarAndCrescent: faStarAndCrescent,\n faStarHalf: faStarHalf,\n faStarHalfAlt: faStarHalfAlt,\n faStarOfDavid: faStarOfDavid,\n faStarOfLife: faStarOfLife,\n faStepBackward: faStepBackward,\n faStepForward: faStepForward,\n faStethoscope: faStethoscope,\n faStickyNote: faStickyNote,\n faStop: faStop,\n faStopCircle: faStopCircle,\n faStopwatch: faStopwatch,\n faStore: faStore,\n faStoreAlt: faStoreAlt,\n faStream: faStream,\n faStreetView: faStreetView,\n faStrikethrough: faStrikethrough,\n faStroopwafel: faStroopwafel,\n faSubscript: faSubscript,\n faSubway: faSubway,\n faSuitcase: faSuitcase,\n faSuitcaseRolling: faSuitcaseRolling,\n faSun: faSun,\n faSuperscript: faSuperscript,\n faSurprise: faSurprise,\n faSwatchbook: faSwatchbook,\n faSwimmer: faSwimmer,\n faSwimmingPool: faSwimmingPool,\n faSynagogue: faSynagogue,\n faSync: faSync,\n faSyncAlt: faSyncAlt,\n faSyringe: faSyringe,\n faTable: faTable,\n faTableTennis: faTableTennis,\n faTablet: faTablet,\n faTabletAlt: faTabletAlt,\n faTablets: faTablets,\n faTachometerAlt: faTachometerAlt,\n faTag: faTag,\n faTags: faTags,\n faTape: faTape,\n faTasks: faTasks,\n faTaxi: faTaxi,\n faTeeth: faTeeth,\n faTeethOpen: faTeethOpen,\n faTemperatureHigh: faTemperatureHigh,\n faTemperatureLow: faTemperatureLow,\n faTenge: faTenge,\n faTerminal: faTerminal,\n faTextHeight: faTextHeight,\n faTextWidth: faTextWidth,\n faTh: faTh,\n faThLarge: faThLarge,\n faThList: faThList,\n faTheaterMasks: faTheaterMasks,\n faThermometer: faThermometer,\n faThermometerEmpty: faThermometerEmpty,\n faThermometerFull: faThermometerFull,\n faThermometerHalf: faThermometerHalf,\n faThermometerQuarter: faThermometerQuarter,\n faThermometerThreeQuarters: faThermometerThreeQuarters,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faThumbtack: faThumbtack,\n faTicketAlt: faTicketAlt,\n faTimes: faTimes,\n faTimesCircle: faTimesCircle,\n faTint: faTint,\n faTintSlash: faTintSlash,\n faTired: faTired,\n faToggleOff: faToggleOff,\n faToggleOn: faToggleOn,\n faToilet: faToilet,\n faToiletPaper: faToiletPaper,\n faToolbox: faToolbox,\n faTools: faTools,\n faTooth: faTooth,\n faTorah: faTorah,\n faToriiGate: faToriiGate,\n faTractor: faTractor,\n faTrademark: faTrademark,\n faTrafficLight: faTrafficLight,\n faTrain: faTrain,\n faTram: faTram,\n faTransgender: faTransgender,\n faTransgenderAlt: faTransgenderAlt,\n faTrash: faTrash,\n faTrashAlt: faTrashAlt,\n faTrashRestore: faTrashRestore,\n faTrashRestoreAlt: faTrashRestoreAlt,\n faTree: faTree,\n faTrophy: faTrophy,\n faTruck: faTruck,\n faTruckLoading: faTruckLoading,\n faTruckMonster: faTruckMonster,\n faTruckMoving: faTruckMoving,\n faTruckPickup: faTruckPickup,\n faTshirt: faTshirt,\n faTty: faTty,\n faTv: faTv,\n faUmbrella: faUmbrella,\n faUmbrellaBeach: faUmbrellaBeach,\n faUnderline: faUnderline,\n faUndo: faUndo,\n faUndoAlt: faUndoAlt,\n faUniversalAccess: faUniversalAccess,\n faUniversity: faUniversity,\n faUnlink: faUnlink,\n faUnlock: faUnlock,\n faUnlockAlt: faUnlockAlt,\n faUpload: faUpload,\n faUser: faUser,\n faUserAlt: faUserAlt,\n faUserAltSlash: faUserAltSlash,\n faUserAstronaut: faUserAstronaut,\n faUserCheck: faUserCheck,\n faUserCircle: faUserCircle,\n faUserClock: faUserClock,\n faUserCog: faUserCog,\n faUserEdit: faUserEdit,\n faUserFriends: faUserFriends,\n faUserGraduate: faUserGraduate,\n faUserInjured: faUserInjured,\n faUserLock: faUserLock,\n faUserMd: faUserMd,\n faUserMinus: faUserMinus,\n faUserNinja: faUserNinja,\n faUserNurse: faUserNurse,\n faUserPlus: faUserPlus,\n faUserSecret: faUserSecret,\n faUserShield: faUserShield,\n faUserSlash: faUserSlash,\n faUserTag: faUserTag,\n faUserTie: faUserTie,\n faUserTimes: faUserTimes,\n faUsers: faUsers,\n faUsersCog: faUsersCog,\n faUtensilSpoon: faUtensilSpoon,\n faUtensils: faUtensils,\n faVectorSquare: faVectorSquare,\n faVenus: faVenus,\n faVenusDouble: faVenusDouble,\n faVenusMars: faVenusMars,\n faVial: faVial,\n faVials: faVials,\n faVideo: faVideo,\n faVideoSlash: faVideoSlash,\n faVihara: faVihara,\n faVolleyballBall: faVolleyballBall,\n faVolumeDown: faVolumeDown,\n faVolumeMute: faVolumeMute,\n faVolumeOff: faVolumeOff,\n faVolumeUp: faVolumeUp,\n faVoteYea: faVoteYea,\n faVrCardboard: faVrCardboard,\n faWalking: faWalking,\n faWallet: faWallet,\n faWarehouse: faWarehouse,\n faWater: faWater,\n faWeight: faWeight,\n faWeightHanging: faWeightHanging,\n faWheelchair: faWheelchair,\n faWifi: faWifi,\n faWind: faWind,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore,\n faWineBottle: faWineBottle,\n faWineGlass: faWineGlass,\n faWineGlassAlt: faWineGlassAlt,\n faWonSign: faWonSign,\n faWrench: faWrench,\n faXRay: faXRay,\n faYenSign: faYenSign,\n faYinYang: faYinYang\n};\n\nexport { _iconsCache as fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBalanceScale, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBowlingBall, faBox, faBoxOpen, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFastBackward, faFastForward, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingUsd, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHands, faHandsHelping, faHandshake, faHanukiah, faHardHat, faHashtag, faHatWizard, faHaykal, faHdd, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHryvnia, faICursor, faIceCream, faIcicles, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneSlash, faPhoneSquare, faPhoneVolume, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecycle, faRedo, faRedoAlt, faRegistered, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaUp, faSortAmountDown, faSortAmountUp, faSortDown, faSortNumericDown, faSortNumericUp, faSortUp, faSpa, faSpaceShuttle, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStore, faStoreAlt, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVial, faVials, faVideo, faVideoSlash, faVihara, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang };\n", + "import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar humps = createCommonjsModule(function (module) {\n(function(global) {\n\n var _processKeys = function(convert, obj, options) {\n if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\n return obj;\n }\n\n var output,\n i = 0,\n l = 0;\n\n if(_isArray(obj)) {\n output = [];\n for(l=obj.length; i 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof element === 'string') {\n return element;\n }\n\n var children = (element.children || []).map(function (child) {\n return convert(createElement, child);\n });\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n var val = element.attributes[key];\n\n switch (key) {\n case 'class':\n acc.attrs['className'] = val;\n delete element.attributes['class'];\n break;\n\n case 'style':\n acc.attrs['style'] = styleToObject(val);\n break;\n\n default:\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n acc.attrs[key.toLowerCase()] = val;\n } else {\n acc.attrs[humps.camelize(key)] = val;\n }\n\n }\n\n return acc;\n }, {\n attrs: {}\n });\n\n var _extraProps$style = extraProps.style,\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n remaining = _objectWithoutProperties(extraProps, [\"style\"]);\n\n mixins.attrs['style'] = _objectSpread({}, mixins.attrs['style'], existingStyle);\n return createElement.apply(void 0, [element.tag, _objectSpread({}, mixins.attrs, remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n if (!PRODUCTION && console && typeof console.error === 'function') {\n var _console;\n\n (_console = console).error.apply(_console, arguments);\n }\n}\n\nfunction objectWithKey(key, value) {\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nfunction classList(props) {\n var _classes;\n\n var classes = (_classes = {\n 'fa-spin': props.spin,\n 'fa-pulse': props.pulse,\n 'fa-fw': props.fixedWidth,\n 'fa-inverse': props.inverse,\n 'fa-border': props.border,\n 'fa-li': props.listItem,\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\n }, _defineProperty(_classes, \"fa-\".concat(props.size), props.size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \"fa-pull-\".concat(props.pull), props.pull !== null), _classes);\n return Object.keys(classes).map(function (key) {\n return classes[key] ? key : null;\n }).filter(function (key) {\n return key;\n });\n}\n\nfunction normalizeIconArgs(icon$$1) {\n if (icon$$1 === null) {\n return null;\n }\n\n if (_typeof(icon$$1) === 'object' && icon$$1.prefix && icon$$1.iconName) {\n return icon$$1;\n }\n\n if (Array.isArray(icon$$1) && icon$$1.length === 2) {\n return {\n prefix: icon$$1[0],\n iconName: icon$$1[1]\n };\n }\n\n if (typeof icon$$1 === 'string') {\n return {\n prefix: 'fas',\n iconName: icon$$1\n };\n }\n}\n\nfunction FontAwesomeIcon(props) {\n var iconArgs = props.icon,\n maskArgs = props.mask,\n symbol = props.symbol,\n className = props.className,\n title = props.title;\n var iconLookup = normalizeIconArgs(iconArgs);\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\n var transform = objectWithKey('transform', typeof props.transform === 'string' ? parse.transform(props.transform) : props.transform);\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n var renderedIcon = icon(iconLookup, _objectSpread({}, classes, transform, mask, {\n symbol: symbol,\n title: title\n }));\n\n if (!renderedIcon) {\n log('Could not find icon', iconLookup);\n return null;\n }\n\n var abstract = renderedIcon.abstract;\n var extraProps = {};\n Object.keys(props).forEach(function (key) {\n if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\n extraProps[key] = props[key];\n }\n });\n return convertCurry(abstract[0], extraProps);\n}\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n border: PropTypes.bool,\n className: PropTypes.string,\n mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n fixedWidth: PropTypes.bool,\n inverse: PropTypes.bool,\n flip: PropTypes.oneOf(['horizontal', 'vertical', 'both']),\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n listItem: PropTypes.bool,\n pull: PropTypes.oneOf(['right', 'left']),\n pulse: PropTypes.bool,\n rotation: PropTypes.oneOf([90, 180, 270]),\n size: PropTypes.oneOf(['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n spin: PropTypes.bool,\n symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n title: PropTypes.string,\n transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\nFontAwesomeIcon.defaultProps = {\n border: false,\n className: '',\n mask: null,\n fixedWidth: false,\n inverse: false,\n flip: null,\n icon: null,\n listItem: false,\n pull: null,\n pulse: false,\n rotation: null,\n size: null,\n spin: false,\n symbol: false,\n title: '',\n transform: null\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\n", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar _Paper = _interopRequireDefault(require(\"../Paper\"));\n\n// @inheritedComponent Paper\nvar styles = function styles(theme) {\n var backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n boxSizing: 'border-box',\n // Prevent padding issue with the Modal and fixed positioned AppBar.\n zIndex: theme.zIndex.appBar,\n flexShrink: 0\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + (`position=\"fixed\"` + "`")) + (`. */\n positionFixed: {\n position: 'fixed',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if ` + ("`" + `position=\"absolute\"`))) + (("`" + (`. */\n positionAbsolute: {\n position: 'absolute',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if ` + "`")) + (`position=\"sticky\"` + ("`" + `. */\n positionSticky: {\n position: 'sticky',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `)))))))) + ((((((("`" + `position=\"static\"`) + ("`" + (`. */\n positionStatic: {\n position: 'static'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`position=\"relative\"` + ("`" + `. */\n positionRelative: {\n position: 'relative'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`color=\"default\"` + "`")))) + (((`. */\n colorDefault: {\n backgroundColor: backgroundColorDefault,\n color: theme.palette.getContrastText(backgroundColorDefault)\n },\n\n /* Styles applied to the root element if ` + "`") + (`color=\"primary\"` + ("`" + `. */\n colorPrimary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`color=\"secondary\"` + "`")) + (`. */\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText\n }\n };\n};\n\nexports.styles = styles;\n\nfunction AppBar(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n color = props.color,\n position = props.position,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"position\"]);\n var className = (0, _classnames.default)(classes.root, classes[\"position\".concat((0, _helpers.capitalize)(position))], (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'inherit'), (0, _defineProperty2.default)(_classNames, 'mui-fixed', position === 'fixed'), _classNames), classNameProp);\n return _react.default.createElement(_Paper.default, (0, _extends2.default)({\n square: true,\n component: \"header\",\n elevation: 4,\n className: className\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['inherit', 'primary', 'secondary', 'default']),\n\n /**\r\n * The positioning type. The behavior of the different options is described\r\n * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\r\n * Note: ` + ("`" + `sticky`))))) + (((("`" + ` is not universally supported and will fall back to `) + ("`" + (`static` + "`"))) + ((` when unavailable.\r\n */\n position: _propTypes.default.oneOf(['fixed', 'absolute', 'sticky', 'static', 'relative'])\n} : void 0;\nAppBar.defaultProps = {\n color: 'primary',\n position: 'fixed'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAppBar'\n})(AppBar);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AppBar.default;\n }\n});\n\nvar _AppBar = _interopRequireDefault(require(\"./AppBar\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _ownerWindow = _interopRequireDefault(require(\"../utils/ownerWindow\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _NoSsr = _interopRequireDefault(require(\"../NoSsr\"));\n\nvar _focusVisible = require(\"./focusVisible\");\n\nvar _TouchRipple = _interopRequireDefault(require(\"./TouchRipple\"));\n\nvar _createRippleHandler = _interopRequireDefault(require(\"./createRippleHandler\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n '&$disabled': {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `disabled={true}`)) + ("`" + (`. */\n disabled: {},\n\n /* Styles applied to the root element if keyboard focused. */\n focusVisible: {}\n};\n/* istanbul ignore if */\n\nexports.styles = styles;\n\nif (process.env.NODE_ENV !== 'production' && !_react.default.createContext) {\n throw new Error('Material-UI: react@16.3.0 or greater is required.');\n}\n/**\r\n * ` + "`")))) + (((`ButtonBase` + "`") + (` contains as few styles as possible.\r\n * It aims to be a simple building block for creating a button.\r\n * It contains a load of style reset and some focus/ripple logic.\r\n */\n\n\nvar ButtonBase =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(ButtonBase, _React$Component);\n\n function ButtonBase() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, ButtonBase);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(ButtonBase)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {};\n _this.keyDown = false;\n _this.focusVisibleCheckTime = 50;\n _this.focusVisibleMaxCheckTimes = 5;\n _this.handleMouseDown = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseDown', 'start', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n _this.handleMouseUp = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseUp', 'stop');\n _this.handleMouseLeave = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseLeave', 'stop', function (event) {\n if (_this.state.focusVisible) {\n event.preventDefault();\n }\n });\n _this.handleTouchStart = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchStart', 'start');\n _this.handleTouchEnd = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchEnd', 'stop');\n _this.handleTouchMove = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchMove', 'stop');\n _this.handleContextMenu = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'ContextMenu', 'stop');\n _this.handleBlur = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'Blur', 'stop', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n\n _this.onRippleRef = function (node) {\n _this.ripple = node;\n };\n\n _this.onFocusVisibleHandler = function (event) {\n _this.keyDown = false;\n\n _this.setState({\n focusVisible: true\n });\n\n if (_this.props.onFocusVisible) {\n _this.props.onFocusVisible(event);\n }\n };\n\n _this.handleKeyDown = function (event) {\n var _this$props = _this.props,\n component = _this$props.component,\n focusRipple = _this$props.focusRipple,\n onKeyDown = _this$props.onKeyDown,\n onClick = _this$props.onClick; // Check if key is already down to avoid repeats being counted as multiple activations\n\n if (focusRipple && !_this.keyDown && _this.state.focusVisible && _this.ripple && event.key === ' ') {\n _this.keyDown = true;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.start(event);\n });\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && component && component !== 'button' && (event.key === ' ' || event.key === 'Enter') && !(_this.button.tagName === 'A' && _this.button.href)) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n };\n\n _this.handleKeyUp = function (event) {\n if (_this.props.focusRipple && event.key === ' ' && _this.ripple && _this.state.focusVisible) {\n _this.keyDown = false;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.pulsate(event);\n });\n }\n\n if (_this.props.onKeyUp) {\n _this.props.onKeyUp(event);\n }\n };\n\n _this.handleFocus = function (event) {\n if (_this.props.disabled) {\n return;\n } // Fix for https://github.com/facebook/react/issues/7769\n\n\n if (!_this.button) {\n _this.button = event.currentTarget;\n }\n\n event.persist();\n (0, _focusVisible.detectFocusVisible)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), _this.button, function () {\n _this.onFocusVisibleHandler(event);\n });\n\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(ButtonBase, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.button = _reactDom.default.findDOMNode(this);\n (0, _focusVisible.listenForFocusKeys)((0, _ownerWindow.default)(this.button));\n\n if (this.props.action) {\n this.props.action({\n focusVisible: function focusVisible() {\n _this2.setState({\n focusVisible: true\n });\n\n _this2.button.focus();\n }\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.focusRipple && !this.props.disableRipple && !prevState.focusVisible && this.state.focusVisible) {\n this.ripple.pulsate();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.focusVisibleTimeout);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames;\n\n var _this$props2 = this.props,\n action = _this$props2.action,\n buttonRef = _this$props2.buttonRef,\n centerRipple = _this$props2.centerRipple,\n children = _this$props2.children,\n classes = _this$props2.classes,\n classNameProp = _this$props2.className,\n component = _this$props2.component,\n disabled = _this$props2.disabled,\n disableRipple = _this$props2.disableRipple,\n disableTouchRipple = _this$props2.disableTouchRipple,\n focusRipple = _this$props2.focusRipple,\n focusVisibleClassName = _this$props2.focusVisibleClassName,\n onBlur = _this$props2.onBlur,\n onFocus = _this$props2.onFocus,\n onFocusVisible = _this$props2.onFocusVisible,\n onKeyDown = _this$props2.onKeyDown,\n onKeyUp = _this$props2.onKeyUp,\n onMouseDown = _this$props2.onMouseDown,\n onMouseLeave = _this$props2.onMouseLeave,\n onMouseUp = _this$props2.onMouseUp,\n onTouchEnd = _this$props2.onTouchEnd,\n onTouchMove = _this$props2.onTouchMove,\n onTouchStart = _this$props2.onTouchStart,\n tabIndex = _this$props2.tabIndex,\n TouchRippleProps = _this$props2.TouchRippleProps,\n type = _this$props2.type,\n other = (0, _objectWithoutProperties2.default)(_this$props2, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.focusVisible, this.state.focusVisible), (0, _defineProperty2.default)(_classNames, focusVisibleClassName, this.state.focusVisible), _classNames), classNameProp);\n var ComponentProp = component;\n\n if (ComponentProp === 'button' && other.href) {\n ComponentProp = 'a';\n }\n\n var buttonProps = {};\n\n if (ComponentProp === 'button') {\n buttonProps.type = type || 'button';\n buttonProps.disabled = disabled;\n } else {\n buttonProps.role = 'button';\n }\n\n return _react.default.createElement(ComponentProp, (0, _extends2.default)({\n className: className,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseLeave: this.handleMouseLeave,\n onMouseUp: this.handleMouseUp,\n onTouchEnd: this.handleTouchEnd,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onContextMenu: this.handleContextMenu,\n ref: buttonRef,\n tabIndex: disabled ? '-1' : tabIndex\n }, buttonProps, other), children, !disableRipple && !disabled ? _react.default.createElement(_NoSsr.default, null, _react.default.createElement(_TouchRipple.default, (0, _extends2.default)({\n innerRef: this.onRippleRef,\n center: centerRipple\n }, TouchRippleProps))) : null);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (typeof prevState.focusVisible === 'undefined') {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n } // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n\n\n if (!prevState.prevState && nextProps.disabled && prevState.focusVisible) {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n }\n\n return {\n lastDisabled: nextProps.disabled\n };\n }\n }]);\n return ButtonBase;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? ButtonBase.propTypes = {\n /**\r\n * Callback fired when the component mounts.\r\n * This is useful when you want to trigger an action programmatically.\r\n * It currently only supports ` + ("`" + `focusVisible()`))) + (("`" + (` action.\r\n *\r\n * @param {object} actions This object contains all possible actions\r\n * that can be triggered programmatically.\r\n */\n action: _propTypes.default.func,\n\n /**\r\n * Use that property to pass a ref callback to the native button component.\r\n */\n buttonRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\r\n * If ` + "`")) + (`true` + ("`" + `, the ripples will be centered.\r\n * They won't start at the cursor interaction position.\r\n */\n centerRipple: _propTypes.default.bool,\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `)))))) + ((((("`" + `true`) + ("`" + (`, the base button will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If ` + "`"))) + ((`true` + ("`" + `, the ripple effect will be disabled.\r\n */\n disableRipple: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, the touch ripple effect will be disabled.\r\n */\n disableTouchRipple: _propTypes.default.bool,\n\n /**\r\n * If ` + "`") + (`true` + ("`" + `, the base button will have a keyboard focus ripple.\r\n * `))) + (("`" + (`disableRipple` + "`")) + (` must also be ` + ("`" + `false`))))) + (((("`" + `.\r\n */\n focusRipple: _propTypes.default.bool,\n\n /**\r\n * This property can help a person know which element has the keyboard focus.\r\n * The class name will be applied when the element gain the focus through a keyboard interaction.\r\n * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\r\n * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\r\n * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `) + ("`" + (`focus-visible` + "`"))) + ((` class to other components\r\n * if needed.\r\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\r\n * @ignore\r\n */\n onBlur: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onClick: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onFocus: _propTypes.default.func,\n\n /**\r\n * Callback fired when the component is focused with a keyboard.\r\n * We trigger a ` + ("`" + `onFocus`)) + ("`" + (` callback too.\r\n */\n onFocusVisible: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onKeyDown: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onKeyUp: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseDown: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseLeave: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseUp: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchEnd: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchMove: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchStart: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n role: _propTypes.default.string,\n\n /**\r\n * @ignore\r\n */\n tabIndex: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n\n /**\r\n * Properties applied to the ` + "`")))) + (((`TouchRipple` + "`") + (` element.\r\n */\n TouchRippleProps: _propTypes.default.object,\n\n /**\r\n * Used to control the button's purpose.\r\n * This property passes the value to the ` + ("`" + `type`))) + (("`" + (` attribute of the native button component.\r\n * Valid property values include ` + "`")) + (`button` + ("`" + `, `))))))) + (((((("`" + `submit`) + ("`" + (`, and ` + "`"))) + ((`reset` + ("`" + `.\r\n */\n type: _propTypes.default.string\n} : void 0;\nButtonBase.defaultProps = {\n centerRipple: false,\n component: 'button',\n disableRipple: false,\n disableTouchRipple: false,\n focusRipple: false,\n tabIndex: '0',\n type: 'button'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiButtonBase'\n})(ButtonBase);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Transition = _interopRequireDefault(require(\"react-transition-group/Transition\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar Ripple =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Ripple, _React$Component);\n\n function Ripple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Ripple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Ripple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n visible: false,\n leaving: false\n };\n\n _this.handleEnter = function () {\n _this.setState({\n visible: true\n });\n };\n\n _this.handleExit = function () {\n _this.setState({\n leaving: true\n });\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Ripple, [{\n key: \"render\",\n value: function render() {\n var _classNames, _classNames2;\n\n var _this$props = this.props,\n classes = _this$props.classes,\n classNameProp = _this$props.className,\n pulsate = _this$props.pulsate,\n rippleX = _this$props.rippleX,\n rippleY = _this$props.rippleY,\n rippleSize = _this$props.rippleSize,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"pulsate\", \"rippleX\", \"rippleY\", \"rippleSize\"]);\n var _this$state = this.state,\n visible = _this$state.visible,\n leaving = _this$state.leaving;\n var rippleClassName = (0, _classnames.default)(classes.ripple, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.rippleVisible, visible), (0, _defineProperty2.default)(_classNames, classes.ripplePulsate, pulsate), _classNames), classNameProp);\n var rippleStyles = {\n width: rippleSize,\n height: rippleSize,\n top: -(rippleSize / 2) + rippleY,\n left: -(rippleSize / 2) + rippleX\n };\n var childClassName = (0, _classnames.default)(classes.child, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.childLeaving, leaving), (0, _defineProperty2.default)(_classNames2, classes.childPulsate, pulsate), _classNames2));\n return _react.default.createElement(_Transition.default, (0, _extends2.default)({\n onEnter: this.handleEnter,\n onExit: this.handleExit\n }, other), _react.default.createElement(\"span\", {\n className: rippleClassName,\n style: rippleStyles\n }, _react.default.createElement(\"span\", {\n className: childClassName\n })));\n }\n }]);\n return Ripple;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes = {\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, the ripple pulsates, typically indicating the keyboard focus state of an element.\r\n */\n pulsate: _propTypes.default.bool,\n\n /**\r\n * Diameter of the ripple.\r\n */\n rippleSize: _propTypes.default.number,\n\n /**\r\n * Horizontal position of the ripple center.\r\n */\n rippleX: _propTypes.default.number,\n\n /**\r\n * Vertical position of the ripple center.\r\n */\n rippleY: _propTypes.default.number\n} : void 0;\nRipple.defaultProps = {\n pulsate: false\n};\nvar _default = Ripple;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = exports.DELAY_RIPPLE = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"react-transition-group/TransitionGroup\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Ripple = _interopRequireDefault(require(\"./Ripple\"));\n\nvar DURATION = 550;\nvar DELAY_RIPPLE = 80;\nexports.DELAY_RIPPLE = DELAY_RIPPLE;\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'block',\n position: 'absolute',\n overflow: 'hidden',\n borderRadius: 'inherit',\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n pointerEvents: 'none',\n zIndex: 0\n },\n\n /* Styles applied to the internal ` + "`") + (`Ripple` + ("`" + ` components `))) + (("`" + (`ripple` + "`")) + (` class. */\n ripple: {\n width: 50,\n height: 50,\n left: 0,\n top: 0,\n opacity: 0,\n position: 'absolute'\n },\n\n /* Styles applied to the internal ` + ("`" + `Ripple`))))) + (((("`" + ` components `) + ("`" + (`rippleVisible` + "`"))) + ((` class. */\n rippleVisible: {\n opacity: 0.3,\n transform: 'scale(1)',\n animation: \"mui-ripple-enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-enter'\n },\n\n /* Styles applied to the internal ` + ("`" + `Ripple`)) + ("`" + (` components ` + "`")))) + (((`ripplePulsate` + "`") + (` class. */\n ripplePulsate: {\n animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n },\n\n /* Styles applied to the internal ` + ("`" + `Ripple`))) + (("`" + (` components ` + "`")) + (`child` + ("`" + ` class. */\n child: {\n opacity: 1,\n display: 'block',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: 'currentColor'\n },\n\n /* Styles applied to the internal `)))))) + ((((("`" + `Ripple`) + ("`" + (` components ` + "`"))) + ((`childLeaving` + ("`" + ` class. */\n childLeaving: {\n opacity: 0,\n animation: \"mui-ripple-exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-exit'\n },\n\n /* Styles applied to the internal `)) + ("`" + (`Ripple` + "`")))) + (((` components ` + "`") + (`childPulsate` + ("`" + ` class. */\n childPulsate: {\n position: 'absolute',\n left: 0,\n top: 0,\n animation: \"mui-ripple-pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\"),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-pulsate'\n },\n '@keyframes mui-ripple-enter': {\n '0%': {\n transform: 'scale(0)',\n opacity: 0.1\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 0.3\n }\n },\n '@keyframes mui-ripple-exit': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n },\n '@keyframes mui-ripple-pulsate': {\n '0%': {\n transform: 'scale(1)'\n },\n '50%': {\n transform: 'scale(0.92)'\n },\n '100%': {\n transform: 'scale(1)'\n }\n }\n };\n};\n\nexports.styles = styles;\n\nvar TouchRipple =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n (0, _inherits2.default)(TouchRipple, _React$PureComponent);\n\n function TouchRipple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, TouchRipple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(TouchRipple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n nextKey: 0,\n ripples: []\n };\n\n _this.pulsate = function () {\n _this.start({}, {\n pulsate: true\n });\n };\n\n _this.start = function () {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var cb = arguments.length > 2 ? arguments[2] : undefined;\n var _options$pulsate = options.pulsate,\n pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n _options$center = options.center,\n center = _options$center === void 0 ? _this.props.center || options.pulsate : _options$center,\n _options$fakeElement = options.fakeElement,\n fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n if (event.type === 'mousedown' && _this.ignoringMouseDown) {\n _this.ignoringMouseDown = false;\n return;\n }\n\n if (event.type === 'touchstart') {\n _this.ignoringMouseDown = true;\n }\n\n var element = fakeElement ? null : _reactDom.default.findDOMNode((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));\n var rect = element ? element.getBoundingClientRect() : {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }; // Get the size of the ripple\n\n var rippleX;\n var rippleY;\n var rippleSize;\n\n if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n rippleX = Math.round(rect.width / 2);\n rippleY = Math.round(rect.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n rippleX = Math.round(clientX - rect.left);\n rippleY = Math.round(clientY - rect.top);\n }\n\n if (center) {\n rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n if (rippleSize % 2 === 0) {\n rippleSize += 1;\n }\n } else {\n var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n } // Touche devices\n\n\n if (event.touches) {\n // Prepare the ripple effect.\n _this.startTimerCommit = function () {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }; // Delay the execution of the ripple effect.\n\n\n _this.startTimer = setTimeout(function () {\n if (_this.startTimerCommit) {\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n }\n }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n } else {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }\n };\n\n _this.startCommit = function (params) {\n var pulsate = params.pulsate,\n rippleX = params.rippleX,\n rippleY = params.rippleY,\n rippleSize = params.rippleSize,\n cb = params.cb;\n\n _this.setState(function (state) {\n return {\n nextKey: state.nextKey + 1,\n ripples: [].concat((0, _toConsumableArray2.default)(state.ripples), [_react.default.createElement(_Ripple.default, {\n key: state.nextKey,\n classes: _this.props.classes,\n timeout: {\n exit: DURATION,\n enter: DURATION\n },\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize\n })])\n };\n }, cb);\n };\n\n _this.stop = function (event, cb) {\n clearTimeout(_this.startTimer);\n var ripples = _this.state.ripples; // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n\n if (event.type === 'touchend' && _this.startTimerCommit) {\n event.persist();\n\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n _this.startTimer = setTimeout(function () {\n _this.stop(event, cb);\n });\n return;\n }\n\n _this.startTimerCommit = null;\n\n if (ripples && ripples.length) {\n _this.setState({\n ripples: ripples.slice(1)\n }, cb);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(TouchRipple, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.startTimer);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n center = _this$props.center,\n classes = _this$props.classes,\n className = _this$props.className,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"center\", \"classes\", \"className\"]);\n return _react.default.createElement(_TransitionGroup.default, (0, _extends2.default)({\n component: \"span\",\n enter: true,\n exit: true,\n className: (0, _classnames.default)(classes.root, className)\n }, other), this.state.ripples);\n }\n }]);\n return TouchRipple;\n}(_react.default.PureComponent);\n\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes = {\n /**\r\n * If `))) + (("`" + (`true` + "`")) + (`, the ripple starts at the center of the component\r\n * rather than at the point of interaction.\r\n */\n center: _propTypes.default.bool,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string\n} : void 0;\nTouchRipple.defaultProps = {\n center: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n flip: false,\n name: 'MuiTouchRipple'\n})(TouchRipple);\n\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable import/no-mutable-exports */\nvar createRippleHandler = function createRippleHandler(instance, eventName, action, cb) {\n return function (event) {\n if (cb) {\n cb.call(instance, event);\n }\n\n var ignore = false; // Ignore events that have been ` + ("`" + `event.preventDefault()`))))) + (((("`" + ` marked.\n\n if (event.defaultPrevented) {\n ignore = true;\n }\n\n if (instance.props.disableTouchRipple && eventName !== 'Blur') {\n ignore = true;\n }\n\n if (!ignore && instance.ripple) {\n instance.ripple[action](event);\n }\n\n if (typeof instance.props[\"on\".concat(eventName)] === 'function') {\n instance.props[\"on\".concat(eventName)](event);\n }\n\n return true;\n };\n};\n/* istanbul ignore if */\n\n\nif (typeof window === 'undefined') {\n createRippleHandler = function createRippleHandler() {\n return function () {};\n };\n}\n\nvar _default = createRippleHandler;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectFocusVisible = detectFocusVisible;\nexports.listenForFocusKeys = listenForFocusKeys;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"../utils/ownerDocument\"));\n\nvar internal = {\n focusKeyPressed: false,\n keyUpEventTimeout: -1\n};\n\nfunction findActiveElement(doc) {\n var activeElement = doc.activeElement;\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n}\n\nfunction detectFocusVisible(instance, element, callback) {\n var attempt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(instance.focusVisibleCheckTime, 'Material-UI: missing instance.focusVisibleCheckTime.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(instance.focusVisibleMaxCheckTimes, 'Material-UI: missing instance.focusVisibleMaxCheckTimes.') : void 0;\n instance.focusVisibleTimeout = setTimeout(function () {\n var doc = (0, _ownerDocument.default)(element);\n var activeElement = findActiveElement(doc);\n\n if (internal.focusKeyPressed && (activeElement === element || element.contains(activeElement))) {\n callback();\n } else if (attempt < instance.focusVisibleMaxCheckTimes) {\n detectFocusVisible(instance, element, callback, attempt + 1);\n }\n }, instance.focusVisibleCheckTime);\n}\n\nvar FOCUS_KEYS = [9, // 'Tab',\n13, // 'Enter',\n27, // 'Escape',\n32, // ' ',\n37, // 'ArrowLeft',\n38, // 'ArrowUp',\n39, // 'ArrowRight',\n40];\n\nfunction isFocusKey(event) {\n // Use event.keyCode to support IE 11\n return FOCUS_KEYS.indexOf(event.keyCode) > -1;\n}\n\nvar handleKeyUpEvent = function handleKeyUpEvent(event) {\n if (isFocusKey(event)) {\n internal.focusKeyPressed = true; // Let's consider that the user is using a keyboard during a window frame of 500ms.\n\n clearTimeout(internal.keyUpEventTimeout);\n internal.keyUpEventTimeout = setTimeout(function () {\n internal.focusKeyPressed = false;\n }, 500);\n }\n};\n\nfunction listenForFocusKeys(win) {\n // The event listener will only be added once per window.\n // Duplicate event listeners will be ignored by addEventListener.\n // Also, this logic is client side only, we don't need a teardown.\n win.addEventListener('keyup', handleKeyUpEvent);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ButtonBase.default;\n }\n});\n\nvar _ButtonBase = _interopRequireDefault(require(\"./ButtonBase\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _createBreakpoints = require(\"../styles/createBreakpoints\");\n\nvar _requirePropFactory = _interopRequireDefault(require(\"../utils/requirePropFactory\"));\n\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - http://v4-alpha.getbootstrap.com/layout/flexbox-grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\nvar GUTTERS = [0, 8, 16, 24, 32, 40];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n var styles = {};\n GRID_SIZES.forEach(function (size) {\n var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n if (size === true) {\n // For the auto layouting\n styles[key] = {\n flexBasis: 0,\n flexGrow: 1,\n maxWidth: '100%'\n };\n return;\n }\n\n if (size === 'auto') {\n styles[key] = {\n flexBasis: 'auto',\n flexGrow: 0,\n maxWidth: 'none'\n };\n return;\n } // Keep 7 significant numbers.\n\n\n var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n styles[key] = {\n flexBasis: width,\n flexGrow: 0,\n maxWidth: width\n };\n }); // No need for a media query for the first size.\n\n if (breakpoint === 'xs') {\n (0, _extends2.default)(globalStyles, styles);\n } else {\n globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n }\n}\n\nfunction generateGutter(theme, breakpoint) {\n var styles = {};\n GUTTERS.forEach(function (spacing, index) {\n if (index === 0) {\n // Skip the default style.\n return;\n }\n\n styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n margin: -spacing / 2,\n width: \"calc(100% + \".concat(spacing, \"px)\"),\n '& > $item': {\n padding: spacing / 2\n }\n };\n });\n return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nvar styles = function styles(theme) {\n return (0, _extends2.default)({\n /* Styles applied to the root element if `) + ("`" + (`container={true}` + "`"))) + ((`. */\n container: {\n boxSizing: 'border-box',\n display: 'flex',\n flexWrap: 'wrap',\n width: '100%'\n },\n\n /* Styles applied to the root element if ` + ("`" + `item={true}`)) + ("`" + (`. */\n item: {\n boxSizing: 'border-box',\n margin: '0' // For instance, it's useful when used with a ` + "`")))) + (((`figure` + ("`" + ` element.\n\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`zeroMinWidth={true}` + "`"))) + ((`. */\n zeroMinWidth: {\n minWidth: 0\n },\n\n /* Styles applied to the root element if ` + ("`" + `direction=\"column\"`)) + ("`" + (`. */\n 'direction-xs-column': {\n flexDirection: 'column'\n },\n\n /* Styles applied to the root element if ` + "`"))))))))) + ((((((((`direction=\"column-reverse\"` + "`") + (`. */\n 'direction-xs-column-reverse': {\n flexDirection: 'column-reverse'\n },\n\n /* Styles applied to the root element if ` + ("`" + `direction=\"rwo-reverse\"`))) + (("`" + (`. */\n 'direction-xs-row-reverse': {\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`wrap=\"nowrap\"` + ("`" + `. */\n 'wrap-xs-nowrap': {\n flexWrap: 'nowrap'\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + `wrap=\"reverse\"`) + ("`" + (`. */\n 'wrap-xs-wrap-reverse': {\n flexWrap: 'wrap-reverse'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`alignItems=\"center\"` + ("`" + `. */\n 'align-items-xs-center': {\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`alignItems=\"flex-start\"` + "`"))))) + ((((`. */\n 'align-items-xs-flex-start': {\n alignItems: 'flex-start'\n },\n\n /* Styles applied to the root element if ` + "`") + (`alignItems=\"flex-end\"` + ("`" + `. */\n 'align-items-xs-flex-end': {\n alignItems: 'flex-end'\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`alignItems=\"baseline\"` + "`")) + (`. */\n 'align-items-xs-baseline': {\n alignItems: 'baseline'\n },\n\n /* Styles applied to the root element if ` + ("`" + `alignContent=\"center\"`)))) + ((("`" + `. */\n 'align-content-xs-center': {\n alignContent: 'center'\n },\n\n /* Styles applied to the root element if `) + ("`" + (`alignContent=\"flex-start\"` + "`"))) + ((`. */\n 'align-content-xs-flex-start': {\n alignContent: 'flex-start'\n },\n\n /* Styles applied to the root element if ` + ("`" + `alignContent=\"flex-end\"`)) + ("`" + (`. */\n 'align-content-xs-flex-end': {\n alignContent: 'flex-end'\n },\n\n /* Styles applied to the root element if ` + "`")))))) + (((((`alignContent=\"space-between\"` + "`") + (`. */\n 'align-content-xs-space-between': {\n alignContent: 'space-between'\n },\n\n /* Styles applied to the root element if ` + ("`" + `alignContent=\"space-around\"`))) + (("`" + (`. */\n 'align-content-xs-space-around': {\n alignContent: 'space-around'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`justify=\"center\"` + ("`" + `. */\n 'justify-xs-center': {\n justifyContent: 'center'\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + `justify=\"flex-end\"`) + ("`" + (`. */\n 'justify-xs-flex-end': {\n justifyContent: 'flex-end'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`justify=\"space-between\"` + ("`" + `. */\n 'justify-xs-space-between': {\n justifyContent: 'space-between'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`justify=\"space-around\"` + "`"))))) + ((((`. */\n 'justify-xs-space-around': {\n justifyContent: 'space-around'\n },\n\n /* Styles applied to the root element if ` + "`") + (`justify=\"space-evenly\"` + ("`" + `. */\n 'justify-xs-space-evenly': {\n justifyContent: 'space-evenly'\n }\n }, generateGutter(theme, 'xs'), _createBreakpoints.keys.reduce(function (accumulator, key) {\n // Use side effect over immutability for better performance.\n generateGrid(accumulator, theme, key);\n return accumulator;\n }, {}));\n};\n\nexports.styles = styles;\n\nfunction Grid(props) {\n var _classNames;\n\n var alignContent = props.alignContent,\n alignItems = props.alignItems,\n classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n container = props.container,\n direction = props.direction,\n item = props.item,\n justify = props.justify,\n lg = props.lg,\n md = props.md,\n sm = props.sm,\n spacing = props.spacing,\n wrap = props.wrap,\n xl = props.xl,\n xs = props.xs,\n zeroMinWidth = props.zeroMinWidth,\n other = (0, _objectWithoutProperties2.default)(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n var className = (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.container, container), (0, _defineProperty2.default)(_classNames, classes.item, item), (0, _defineProperty2.default)(_classNames, classes.zeroMinWidth, zeroMinWidth), (0, _defineProperty2.default)(_classNames, classes[\"spacing-xs-\".concat(String(spacing))], container && spacing !== 0), (0, _defineProperty2.default)(_classNames, classes[\"direction-xs-\".concat(String(direction))], direction !== Grid.defaultProps.direction), (0, _defineProperty2.default)(_classNames, classes[\"wrap-xs-\".concat(String(wrap))], wrap !== Grid.defaultProps.wrap), (0, _defineProperty2.default)(_classNames, classes[\"align-items-xs-\".concat(String(alignItems))], alignItems !== Grid.defaultProps.alignItems), (0, _defineProperty2.default)(_classNames, classes[\"align-content-xs-\".concat(String(alignContent))], alignContent !== Grid.defaultProps.alignContent), (0, _defineProperty2.default)(_classNames, classes[\"justify-xs-\".concat(String(justify))], justify !== Grid.defaultProps.justify), (0, _defineProperty2.default)(_classNames, classes[\"grid-xs-\".concat(String(xs))], xs !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-sm-\".concat(String(sm))], sm !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-md-\".concat(String(md))], md !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-lg-\".concat(String(lg))], lg !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-xl-\".concat(String(xl))], xl !== false), _classNames), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Grid.propTypes = {\n /**\r\n * Defines the `))) + (("`" + (`align-content` + "`")) + (` style property.\r\n * It's applied for all screen sizes.\r\n */\n alignContent: _propTypes.default.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n /**\r\n * Defines the ` + ("`" + `align-items`)))) + ((("`" + ` style property.\r\n * It's applied for all screen sizes.\r\n */\n alignItems: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, the component will have the flex *container* behavior.\r\n * You should be wrapping *items* with a *container*.\r\n */\n container: _propTypes.default.bool,\n\n /**\r\n * Defines the ` + ("`" + `flex-direction`)) + ("`" + (` style property.\r\n * It is applied for all screen sizes.\r\n */\n direction: _propTypes.default.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n /**\r\n * If ` + "`"))))))) + ((((((`true` + "`") + (`, the component will have the flex *item* behavior.\r\n * You should be wrapping *items* with a *container*.\r\n */\n item: _propTypes.default.bool,\n\n /**\r\n * Defines the ` + ("`" + `justify-content`))) + (("`" + (` style property.\r\n * It is applied for all screen sizes.\r\n */\n justify: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the ` + "`")) + (`lg` + ("`" + ` breakpoint and wider screens if not overridden.\r\n */\n lg: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the `)))) + ((("`" + `md`) + ("`" + (` breakpoint and wider screens if not overridden.\r\n */\n md: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the ` + "`"))) + ((`sm` + ("`" + ` breakpoint and wider screens if not overridden.\r\n */\n sm: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the space between the type `)) + ("`" + (`item` + "`"))))) + ((((` component.\r\n * It can only be used on a type ` + "`") + (`container` + ("`" + ` component.\r\n */\n spacing: _propTypes.default.oneOf(GUTTERS),\n\n /**\r\n * Defines the `))) + (("`" + (`flex-wrap` + "`")) + (` style property.\r\n * It's applied for all screen sizes.\r\n */\n wrap: _propTypes.default.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the ` + ("`" + `xl`)))) + ((("`" + ` breakpoint and wider screens.\r\n */\n xl: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for all the screen sizes with the lowest priority.\r\n */\n xs: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, it sets ` + ("`" + `min-width: 0`)) + ("`" + (` on the item.\r\n * Refer to the limitations section of the documentation to better understand the use case.\r\n */\n zeroMinWidth: _propTypes.default.bool\n} : void 0;\nGrid.defaultProps = {\n alignContent: 'stretch',\n alignItems: 'stretch',\n component: 'div',\n container: false,\n direction: 'row',\n item: false,\n justify: 'flex-start',\n lg: false,\n md: false,\n sm: false,\n spacing: 0,\n wrap: 'wrap',\n xl: false,\n xs: false,\n zeroMinWidth: false\n};\nvar StyledGrid = (0, _withStyles.default)(styles, {\n name: 'MuiGrid'\n})(Grid);\n\nif (process.env.NODE_ENV !== 'production') {\n var requireProp = (0, _requirePropFactory.default)('Grid');\n StyledGrid.propTypes = (0, _extends2.default)({}, StyledGrid.propTypes, {\n alignContent: requireProp('container'),\n alignItems: requireProp('container'),\n direction: requireProp('container'),\n justify: requireProp('container'),\n lg: requireProp('item'),\n md: requireProp('item'),\n sm: requireProp('item'),\n spacing: requireProp('container'),\n wrap: requireProp('container'),\n xs: requireProp('item'),\n zeroMinWidth: requireProp('zeroMinWidth')\n });\n}\n\nvar _default = StyledGrid;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Grid.default;\n }\n});\n\nvar _Grid = _interopRequireDefault(require(\"./Grid\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n userSelect: 'none',\n fontSize: 24,\n width: '1em',\n height: '1em',\n // Chrome fix for https://bugs.chromium.org/p/chromium/issues/detail?id=820541\n // To remove at some point.\n overflow: 'hidden',\n flexShrink: 0\n },\n\n /* Styles applied to the root element if ` + "`")))))) + (((((`color=\"primary\"` + "`") + (`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"secondary\"`))) + (("`" + (`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the root element if ` + "`")) + (`color=\"action\"` + ("`" + `. */\n colorAction: {\n color: theme.palette.action.active\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + `color=\"error\"`) + ("`" + (`. */\n colorError: {\n color: theme.palette.error.main\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`color=\"disabled\"` + ("`" + `. */\n colorDisabled: {\n color: theme.palette.action.disabled\n },\n fontSizeInherit: {\n fontSize: 'inherit'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`fontSize=\"small\"` + "`"))))) + ((((`. */\n fontSizeSmall: {\n fontSize: 20\n },\n\n /* Styles applied to the root element if ` + "`") + (`fontSize=\"large\"` + ("`" + `. */\n fontSizeLarge: {\n fontSize: 36\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Icon(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n color = props.color,\n Component = props.component,\n fontSize = props.fontSize,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)('material-icons', classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes[\"fontSize\".concat((0, _helpers.capitalize)(fontSize))], fontSize !== 'default'), _classNames), className),\n \"aria-hidden\": \"true\"\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Icon.propTypes = {\n /**\r\n * The name of the icon font ligature.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['inherit', 'primary', 'secondary', 'action', 'error', 'disabled']),\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\r\n */\n fontSize: _propTypes.default.oneOf(['inherit', 'default', 'small', 'large'])\n} : void 0;\nIcon.defaultProps = {\n color: 'inherit',\n component: 'span',\n fontSize: 'default'\n};\nIcon.muiName = 'Icon';\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiIcon'\n})(Icon);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Icon.default;\n }\n});\n\nvar _Icon = _interopRequireDefault(require(\"./Icon\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _colorManipulator = require(\"../styles/colorManipulator\");\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\n// @inheritedComponent ButtonBase\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n textAlign: 'center',\n flex: '0 0 auto',\n fontSize: theme.typography.pxToRem(24),\n padding: 12,\n borderRadius: '50%',\n overflow: 'visible',\n // Explicitly set the default value to solve a bug on IE 11.\n color: theme.palette.action.active,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest\n }),\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n },\n '&$disabled': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`color=\"inherit\"` + "`")) + (`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"primary\"`)))) + ((("`" + (`. */\n colorPrimary: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if ` + "`")) + (`color=\"secondary\"` + ("`" + `. */\n colorSecondary: {\n color: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`disabled={true}` + "`")) + (`. */\n disabled: {},\n\n /* Styles applied to the children container element. */\n label: {\n width: '100%',\n display: 'flex',\n alignItems: 'inherit',\n justifyContent: 'inherit'\n }\n };\n};\n/**\r\n * Refer to the [Icons](/style/icons/) section of the documentation\r\n * regarding the available icon options.\r\n */\n\n\nexports.styles = styles;\n\nfunction IconButton(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n color = props.color,\n disabled = props.disabled,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"disabled\"]);\n return _react.default.createElement(_ButtonBase.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'default'), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), _classNames), className),\n centerRipple: true,\n focusRipple: true,\n disabled: disabled\n }, other), _react.default.createElement(\"span\", {\n className: classes.label\n }, children));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? IconButton.propTypes = {\n /**\r\n * The icon element.\r\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node, function (props) {\n var found = _react.default.Children.toArray(props.children).some(function (child) {\n return _react.default.isValidElement(child) && child.props.onClick;\n });\n\n if (found) {\n return new Error(['Material-UI: you are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957', // Change error message slightly on every check to prevent caching when testing\n // which would not trigger console errors on subsequent fails\n process.env.NODE_ENV === 'test' ? Date.now() : ''].join('\\n'));\n }\n\n return null;\n }),\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n /**\r\n * If ` + ("`" + `true`)))))))) + ((((((("`" + `, the button will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, the ripple will be disabled.\r\n */\n disableRipple: _propTypes.default.bool\n} : void 0;\nIconButton.defaultProps = {\n color: 'default',\n disabled: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiIconButton'\n})(IconButton);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _IconButton.default;\n }\n});\n\nvar _IconButton = _interopRequireDefault(require(\"./IconButton\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _ListContext = _interopRequireDefault(require(\"./ListContext\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative'\n },\n\n /* Styles applied to the root element if ` + ("`" + `disablePadding={false}`)) + ("`" + (`. */\n padding: {\n paddingTop: 8,\n paddingBottom: 8\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`dense={true}` + "`") + (` & ` + ("`" + `disablePadding={false}`))) + (("`" + (`. */\n dense: {\n paddingTop: 4,\n paddingBottom: 4\n },\n\n /* Styles applied to the root element if a ` + "`")) + (`subheader` + ("`" + ` is provided. */\n subheader: {\n paddingTop: 0\n }\n};\nexports.styles = styles;\n\nfunction List(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n Component = props.component,\n dense = props.dense,\n disablePadding = props.disablePadding,\n subheader = props.subheader,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.dense, dense && !disablePadding), (0, _defineProperty2.default)(_classNames, classes.padding, !disablePadding), (0, _defineProperty2.default)(_classNames, classes.subheader, subheader), _classNames), className)\n }, other), _react.default.createElement(_ListContext.default.Provider, {\n value: {\n dense: dense\n }\n }, subheader, children));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `))))) + (((("`" + `true`) + ("`" + (`, compact vertical padding designed for keyboard and mouse input will be used for\r\n * the list and list items. The property is available to descendant components as the\r\n * ` + "`"))) + ((`dense` + ("`" + ` context.\r\n */\n dense: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, vertical padding will be removed from the list.\r\n */\n disablePadding: _propTypes.default.bool,\n\n /**\r\n * The content of the subheader, normally ` + "`") + (`ListSubheader` + ("`" + `.\r\n */\n subheader: _propTypes.default.node\n} : void 0;\nList.defaultProps = {\n component: 'ul',\n dense: false,\n disablePadding: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiList'\n})(List);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar ListContext = _react.default.createContext({});\n\nvar _default = ListContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _List.default;\n }\n});\n\nvar _List = _interopRequireDefault(require(\"./List\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _reactHelpers = require(\"../utils/reactHelpers\");\n\nvar _MergeListContext = _interopRequireDefault(require(\"./MergeListContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the (normally root) `))) + (("`" + (`component` + "`")) + (` element. May be wrapped by a ` + ("`" + `container`)))))) + ((((("`" + `. */\n root: {\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n position: 'relative',\n textDecoration: 'none',\n width: '100%',\n boxSizing: 'border-box',\n textAlign: 'left',\n paddingTop: 11,\n // To use 10px in v4\n paddingBottom: 11,\n // To use 10px in v4\n '&$selected, &$selected:hover, &$selected:focus': {\n backgroundColor: theme.palette.action.selected\n }\n },\n\n /* Styles applied to the `) + ("`" + (`container` + "`"))) + ((` element if ` + ("`" + `children`)) + ("`" + (` includes ` + "`")))) + (((`ListItemSecondaryAction` + "`") + (`. */\n container: {\n position: 'relative'\n },\n // To remove in v4\n\n /* Styles applied to the ` + ("`" + `component`))) + (("`" + (`'s ` + "`")) + (`focusVisibleClassName` + ("`" + ` property if `))))) + (((("`" + `button={true}`) + ("`" + (`. */\n focusVisible: {},\n\n /* Legacy styles applied to the root element. Use ` + "`"))) + ((`root` + ("`" + ` instead. */\n default: {},\n\n /* Styles applied to the `)) + ("`" + (`component` + "`")))) + (((` element if ` + ("`" + `dense={true}`)) + ("`" + (` or ` + "`"))) + ((`children` + ("`" + ` includes `)) + ("`" + (`Avatar` + "`"))))))) + ((((((`. */\n dense: {\n paddingTop: 8,\n paddingBottom: 8\n },\n\n /* Styles applied to the ` + "`") + (`component` + ("`" + ` element if `))) + (("`" + (`alignItems=\"flex-start\"` + "`")) + (`. */\n alignItemsFlexStart: {\n alignItems: 'flex-start'\n },\n\n /* Styles applied to the inner ` + ("`" + `component`)))) + ((("`" + ` element if `) + ("`" + (`disabled={true}` + "`"))) + ((`. */\n disabled: {\n opacity: 0.5\n },\n\n /* Styles applied to the inner ` + ("`" + `component`)) + ("`" + (` element if ` + "`"))))) + ((((`divider={true}` + "`") + (`. */\n divider: {\n borderBottom: \"1px solid \".concat(theme.palette.divider),\n backgroundClip: 'padding-box'\n },\n\n /* Styles applied to the inner ` + ("`" + `component`))) + (("`" + (` element if ` + "`")) + (`disableGutters={false}` + ("`" + `. */\n gutters: {\n paddingLeft: 16,\n paddingRight: 16\n },\n\n /* Styles applied to the inner `)))) + ((("`" + `component`) + ("`" + (` element if ` + "`"))) + ((`button={true}` + ("`" + `. */\n button: {\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest\n }),\n '&:hover': {\n textDecoration: 'none',\n backgroundColor: theme.palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&:focus': {\n backgroundColor: theme.palette.action.hover\n }\n },\n\n /* Styles applied to the `)) + ("`" + (`component` + "`")))))) + (((((` element if ` + "`") + (`children` + ("`" + ` includes `))) + (("`" + (`ListItemSecondaryAction` + "`")) + (`. */\n secondaryAction: {\n // Add some space to avoid collision as ` + ("`" + `ListItemSecondaryAction`)))) + ((("`" + `\n // is absolutely positioned.\n paddingRight: 32\n },\n\n /* Styles applied to the root element if `) + ("`" + (`selected={true}` + "`"))) + ((`. */\n selected: {}\n };\n};\n/**\r\n * Uses an additional container component if ` + ("`" + `ListItemSecondaryAction`)) + ("`" + (` is the last child.\r\n */\n\n\nexports.styles = styles;\n\nfunction ListItem(props) {\n var alignItems = props.alignItems,\n button = props.button,\n childrenProp = props.children,\n classes = props.classes,\n classNameProp = props.className,\n componentProp = props.component,\n ContainerComponent = props.ContainerComponent,\n _props$ContainerProps = props.ContainerProps;\n _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n var ContainerClassName = _props$ContainerProps.className,\n ContainerProps = (0, _objectWithoutProperties2.default)(_props$ContainerProps, [\"className\"]),\n denseProp = props.dense,\n disabled = props.disabled,\n disableGutters = props.disableGutters,\n divider = props.divider,\n focusVisibleClassName = props.focusVisibleClassName,\n selected = props.selected,\n other = (0, _objectWithoutProperties2.default)(props, [\"alignItems\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n return _react.default.createElement(_MergeListContext.default, {\n dense: denseProp,\n alignItems: alignItems\n }, function (_ref) {\n var _classNames;\n\n var dense = _ref.dense;\n\n var children = _react.default.Children.toArray(childrenProp);\n\n var hasAvatar = children.some(function (value) {\n return (0, _reactHelpers.isMuiElement)(value, ['ListItemAvatar']);\n });\n var hasSecondaryAction = children.length && (0, _reactHelpers.isMuiElement)(children[children.length - 1], ['ListItemSecondaryAction']);\n var className = (0, _classnames.default)(classes.root, classes.default, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.dense, dense || hasAvatar), (0, _defineProperty2.default)(_classNames, classes.gutters, !disableGutters), (0, _defineProperty2.default)(_classNames, classes.divider, divider), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.button, button), (0, _defineProperty2.default)(_classNames, classes.alignItemsFlexStart, alignItems === 'flex-start'), (0, _defineProperty2.default)(_classNames, classes.secondaryAction, hasSecondaryAction), (0, _defineProperty2.default)(_classNames, classes.selected, selected), _classNames), classNameProp);\n var componentProps = (0, _extends2.default)({\n className: className,\n disabled: disabled\n }, other);\n var Component = componentProp || 'li';\n\n if (button) {\n componentProps.component = componentProp || 'div';\n componentProps.focusVisibleClassName = (0, _classnames.default)(classes.focusVisible, focusVisibleClassName);\n Component = _ButtonBase.default;\n }\n\n if (hasSecondaryAction) {\n // Use div by default.\n Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n if (ContainerComponent === 'li') {\n if (Component === 'li') {\n Component = 'div';\n } else if (componentProps.component === 'li') {\n componentProps.component = 'div';\n }\n }\n\n return _react.default.createElement(ContainerComponent, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.container, ContainerClassName)\n }, ContainerProps), _react.default.createElement(Component, componentProps, children), children.pop());\n }\n\n return _react.default.createElement(Component, componentProps, children);\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItem.propTypes = {\n /**\r\n * Defines the ` + "`"))))) + ((((`align-items` + "`") + (` style property.\r\n */\n alignItems: _propTypes.default.oneOf(['flex-start', 'center']),\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the list item will be a button (using ` + "`")) + (`ButtonBase` + ("`" + `).\r\n */\n button: _propTypes.default.bool,\n\n /**\r\n * The content of the component. If a `)))) + ((("`" + (`ListItemSecondaryAction` + "`")) + (` is used it must\r\n * be the last child.\r\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node, function (props) {\n var children = _react.default.Children.toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n\n var secondaryActionIndex = -1;\n\n for (var i = children.length - 1; i >= 0; i -= 1) {\n var child = children[i];\n\n if ((0, _reactHelpers.isMuiElement)(child, ['ListItemSecondaryAction'])) {\n secondaryActionIndex = i;\n break;\n }\n } // is ListItemSecondaryAction the last child of ListItem\n\n\n if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n return new Error('Material-UI: you used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + \"you must pass it has the last children to ListItem.\".concat(process.env.NODE_ENV === 'test' ? Date.now() : ''));\n }\n\n return null;\n }),\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n * By default, it's a ` + ("`" + `li`))) + (("`" + (` when ` + "`")) + (`button` + ("`" + ` is `)))))))))) + ((((((((("`" + `false`) + ("`" + (` and a ` + "`"))) + ((`div` + ("`" + ` when `)) + ("`" + (`button` + "`")))) + (((` is ` + "`") + (`true` + ("`" + `.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * The container component used when a `))) + (("`" + (`ListItemSecondaryAction` + "`")) + (` is the last child.\r\n */\n ContainerComponent: _utils.componentPropType,\n\n /**\r\n * Properties applied to the container component if used.\r\n */\n ContainerProps: _propTypes.default.object,\n\n /**\r\n * If ` + ("`" + `true`))))) + (((("`" + `, compact vertical padding designed for keyboard and mouse input will be used.\r\n */\n dense: _propTypes.default.bool,\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, the list item will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, the left and right padding is removed.\r\n */\n disableGutters: _propTypes.default.bool,\n\n /**\r\n * If ` + "`")))) + (((`true` + "`") + (`, a 1px light border is added to the bottom of the list item.\r\n */\n divider: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\r\n * Use to apply selected styling.\r\n */\n selected: _propTypes.default.bool\n} : void 0;\nListItem.defaultProps = {\n alignItems: 'center',\n button: false,\n ContainerComponent: 'li',\n dense: false,\n disabled: false,\n disableGutters: false,\n divider: false,\n selected: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItem'\n})(ListItem);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _ListContext = _interopRequireDefault(require(\"../List/ListContext\"));\n\n/**\r\n * @ignore - internal component.\r\n *\r\n * Consumes a context and passes that context merged with its props.\r\n */\nfunction MergeListContext(props) {\n var alignItems = props.alignItems,\n children = props.children,\n dense = props.dense;\n return _react.default.createElement(_ListContext.default.Consumer, null, function (context) {\n var childContext = {\n dense: dense || context.dense || false,\n alignItems: alignItems\n };\n return _react.default.createElement(_ListContext.default.Provider, {\n value: childContext\n }, children(childContext));\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? MergeListContext.propTypes = {\n alignItems: _propTypes.default.oneOf(['flex-start', 'center']).isRequired,\n children: _propTypes.default.func.isRequired,\n dense: _propTypes.default.bool.isRequired\n} : void 0;\nvar _default = MergeListContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItem.default;\n }\n});\n\nvar _ListItem = _interopRequireDefault(require(\"./ListItem\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n marginRight: 16,\n color: theme.palette.action.active,\n flexShrink: 0,\n display: 'inline-flex'\n }\n };\n};\n/**\r\n * A simple wrapper to apply ` + ("`" + `List`))) + (("`" + (` styles to an ` + "`")) + (`Icon` + ("`" + ` or `)))))) + ((((("`" + `SvgIcon`) + ("`" + (`.\r\n */\n\n\nexports.styles = styles;\n\nfunction ListItemIcon(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, classNameProp)\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItemIcon.propTypes = {\n /**\r\n * The content of the component, normally ` + "`"))) + ((`Icon` + ("`" + `, `)) + ("`" + (`SvgIcon` + "`")))) + (((`,\r\n * or a ` + "`") + (`@material-ui/icons` + ("`" + ` SVG icon element.\r\n */\n children: _propTypes.default.element.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItemIcon'\n})(ListItemIcon);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItemIcon.default;\n }\n});\n\nvar _ListItemIcon = _interopRequireDefault(require(\"./ListItemIcon\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Typography = _interopRequireDefault(require(\"../Typography\"));\n\nvar _ListContext = _interopRequireDefault(require(\"../List/ListContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n flex: '1 1 auto',\n minWidth: 0,\n padding: '0 16px',\n '&:first-child': {\n paddingLeft: 0\n }\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`inset={true}` + "`")) + (`. */\n inset: {\n '&:first-child': {\n paddingLeft: 56\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `context.dense`))))) + (((("`" + ` is `) + ("`" + (`true` + "`"))) + ((`. */\n dense: {\n fontSize: theme.typography.pxToRem(13)\n },\n\n /* Styles applied to the primary ` + ("`" + `Typography`)) + ("`" + (` component. */\n primary: {\n '&$textDense': {\n fontSize: 'inherit'\n }\n },\n\n /* Styles applied to the secondary ` + "`")))) + (((`Typography` + "`") + (` component. */\n secondary: {\n '&$textDense': {\n fontSize: 'inherit'\n }\n },\n\n /* Styles applied to the ` + ("`" + `Typography`))) + (("`" + (` components if ` + "`")) + (`context.dense` + ("`" + ` is `))))))) + (((((("`" + `true`) + ("`" + (`. */\n textDense: {}\n };\n};\n\nexports.styles = styles;\n\nfunction ListItemText(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n disableTypography = props.disableTypography,\n inset = props.inset,\n primaryProp = props.primary,\n primaryTypographyProps = props.primaryTypographyProps,\n secondaryProp = props.secondary,\n secondaryTypographyProps = props.secondaryTypographyProps,\n theme = props.theme,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableTypography\", \"inset\", \"primary\", \"primaryTypographyProps\", \"secondary\", \"secondaryTypographyProps\", \"theme\"]);\n return _react.default.createElement(_ListContext.default.Consumer, null, function (_ref) {\n var _classNames3;\n\n var dense = _ref.dense;\n var primary = primaryProp != null ? primaryProp : children;\n\n if (primary != null && primary.type !== _Typography.default && !disableTypography) {\n primary = _react.default.createElement(_Typography.default, (0, _extends2.default)({\n variant: theme.typography.useNextVariants ? 'body1' : 'subheading',\n className: (0, _classnames.default)(classes.primary, (0, _defineProperty2.default)({}, classes.textDense, dense)),\n component: \"span\"\n }, primaryTypographyProps), primary);\n }\n\n var secondary = secondaryProp;\n\n if (secondary != null && secondary.type !== _Typography.default && !disableTypography) {\n secondary = _react.default.createElement(_Typography.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.secondary, (0, _defineProperty2.default)({}, classes.textDense, dense)),\n color: \"textSecondary\"\n }, secondaryTypographyProps), secondary);\n }\n\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, classes.dense, dense), (0, _defineProperty2.default)(_classNames3, classes.inset, inset), _classNames3), classNameProp)\n }, other), primary, secondary);\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItemText.propTypes = {\n /**\r\n * Alias for the ` + "`"))) + ((`primary` + ("`" + ` property.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, the children won't be wrapped by a Typography component.\r\n * This can be useful to render an alternative Typography variant by wrapping\r\n * the ` + "`") + (`children` + ("`" + ` (or `))) + (("`" + (`primary` + "`")) + (`) text, and optional ` + ("`" + `secondary`))))) + (((("`" + ` text\r\n * with the Typography component.\r\n */\n disableTypography: _propTypes.default.bool,\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, the children will be indented.\r\n * This should be used if there is no left avatar or left icon.\r\n */\n inset: _propTypes.default.bool,\n\n /**\r\n * The main content element.\r\n */\n primary: _propTypes.default.node,\n\n /**\r\n * These props will be forwarded to the primary typography component\r\n * (as long as disableTypography is not ` + ("`" + `true`)) + ("`" + (`).\r\n */\n primaryTypographyProps: _propTypes.default.object,\n\n /**\r\n * The secondary content element.\r\n */\n secondary: _propTypes.default.node,\n\n /**\r\n * These props will be forwarded to the secondary typography component\r\n * (as long as disableTypography is not ` + "`")))) + (((`true` + "`") + (`).\r\n */\n secondaryTypographyProps: _propTypes.default.object,\n\n /**\r\n * @ignore\r\n */\n theme: _propTypes.default.object.isRequired\n} : void 0;\nListItemText.defaultProps = {\n disableTypography: false,\n inset: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItemText',\n withTheme: true\n})(ListItemText);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItemText.default;\n }\n});\n\nvar _ListItemText = _interopRequireDefault(require(\"./ListItemText\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\n/**\r\n * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).\r\n *\r\n * This component can be useful in a variety of situations:\r\n * - Escape hatch for broken dependencies not supporting SSR.\r\n * - Improve the time-to-first paint on the client by only rendering above the fold.\r\n * - Reduce the rendering time on the server.\r\n * - Under too heavy server load, you can turn on service degradation.\r\n */\nvar NoSsr =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(NoSsr, _React$Component);\n\n function NoSsr() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, NoSsr);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(NoSsr)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.mounted = false;\n _this.state = {\n mounted: false\n };\n return _this;\n }\n\n (0, _createClass2.default)(NoSsr, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.mounted = true;\n\n if (this.props.defer) {\n // Wondering why we use two RAFs? Check this video out:\n // https://www.youtube.com/watch?v=cCOL7MC4Pl0\n //\n // The componentDidMount() method is called after the DOM nodes are inserted.\n // The UI might not have rendering the changes. We request a frame.\n requestAnimationFrame(function () {\n // The browser should be about to render the DOM nodes\n // that React committed at this point.\n // We don't want to interrupt. Let's wait the next frame.\n requestAnimationFrame(function () {\n // The UI is up-to-date at this point.\n // We can continue rendering the children.\n if (_this2.mounted) {\n _this2.setState({\n mounted: true\n });\n }\n });\n });\n } else {\n this.setState({\n mounted: true\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n fallback = _this$props.fallback;\n return this.state.mounted ? children : fallback;\n }\n }]);\n return NoSsr;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? NoSsr.propTypes = {\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the component will not only prevent server-side rendering.\r\n * It will also defer the rendering of the children into a different screen frame.\r\n */\n defer: _propTypes.default.bool,\n\n /**\r\n * The fallback content to display.\r\n */\n fallback: _propTypes.default.node\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? NoSsr.propTypes = (0, _utils.exactProp)(NoSsr.propTypes) : void 0;\n}\n\nNoSsr.defaultProps = {\n defer: false,\n fallback: null\n};\nvar _default = NoSsr;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _NoSsr.default;\n }\n});\n\nvar _NoSsr = _interopRequireDefault(require(\"./NoSsr\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n var elevations = {};\n theme.shadows.forEach(function (shadow, index) {\n elevations[\"elevation\".concat(index)] = {\n boxShadow: shadow\n };\n });\n return (0, _extends2.default)({\n /* Styles applied to the root element. */\n root: {\n backgroundColor: theme.palette.background.paper\n },\n\n /* Styles applied to the root element if ` + "`")) + (`square={false}` + ("`" + `. */\n rounded: {\n borderRadius: theme.shape.borderRadius\n }\n }, elevations);\n};\n\nexports.styles = styles;\n\nfunction Paper(props) {\n var classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n square = props.square,\n elevation = props.elevation,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\", \"square\", \"elevation\"]);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(elevation >= 0 && elevation < 25, \"Material-UI: this elevation `)))))) + ((((("`" + `\".concat(elevation, \"`) + ("`" + (` is not implemented.\")) : void 0;\n var className = (0, _classnames.default)(classes.root, classes[\"elevation\".concat(elevation)], (0, _defineProperty2.default)({}, classes.rounded, !square), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Paper.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * Shadow depth, corresponds to ` + "`"))) + ((`dp` + ("`" + ` in the spec.\r\n * It's accepting values between 0 and 24 inclusive.\r\n */\n elevation: _propTypes.default.number,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, rounded corners are disabled.\r\n */\n square: _propTypes.default.bool\n} : void 0;\nPaper.defaultProps = {\n component: 'div',\n elevation: 2,\n square: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiPaper'\n})(Paper);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Paper.default;\n }\n});\n\nvar _Paper = _interopRequireDefault(require(\"./Paper\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _TableContext = _interopRequireDefault(require(\"./TableContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'table',\n fontFamily: theme.typography.fontFamily,\n width: '100%',\n borderCollapse: 'collapse',\n borderSpacing: 0\n }\n };\n};\n\nexports.styles = styles;\n\nvar Table =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Table, _React$Component);\n\n function Table() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Table);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Table)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.memoizedContextValue = {};\n return _this;\n }\n\n (0, _createClass2.default)(Table, [{\n key: \"useMemo\",\n // To replace with the corresponding Hook once Material-UI v4 is out:\n // https://reactjs.org/docs/hooks-reference.html#usememo\n value: function useMemo(contextValue) {\n var objectKeys = Object.keys(contextValue);\n\n for (var i = 0; i < objectKeys.length; i += 1) {\n var objectKey = objectKeys[i];\n\n if (contextValue[objectKey] !== this.memoizedContextValue[objectKey]) {\n this.memoizedContextValue = contextValue;\n break;\n }\n }\n\n return this.memoizedContextValue;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n classes = _this$props.classes,\n className = _this$props.className,\n Component = _this$props.component,\n padding = _this$props.padding,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"component\", \"padding\"]);\n return _react.default.createElement(_TableContext.default.Provider, {\n value: this.useMemo({\n padding: padding\n })\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n }\n }]);\n return Table;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? Table.propTypes = {\n /**\r\n * The content of the table, normally ` + "`") + (`TableHead` + ("`" + ` and `))) + (("`" + (`TableBody` + "`")) + (`.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * Allows TableCells to inherit padding of the Table.\r\n */\n padding: _propTypes.default.oneOf(['default', 'checkbox', 'dense', 'none'])\n} : void 0;\nTable.defaultProps = {\n component: 'table',\n padding: 'default'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTable'\n})(Table);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar TableContext = _react.default.createContext();\n\nvar _default = TableContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar Tablelvl2Context = _react.default.createContext();\n\nvar _default = Tablelvl2Context;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Table.default;\n }\n});\n\nvar _Table = _interopRequireDefault(require(\"./Table\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'table-row-group'\n }\n};\nexports.styles = styles;\nvar contextValue = {\n variant: 'body'\n};\n\nfunction TableBody(props) {\n var classes = props.classes,\n className = props.className,\n Component = props.component,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Provider, {\n value: contextValue\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableBody.propTypes = {\n /**\r\n * The content of the component, normally ` + ("`" + `TableRow`))))) + (((("`" + `.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType\n} : void 0;\nTableBody.defaultProps = {\n component: 'tbody'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableBody'\n})(TableBody);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableBody.default;\n }\n});\n\nvar _TableBody = _interopRequireDefault(require(\"./TableBody\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar _deprecatedPropType = _interopRequireDefault(require(\"../utils/deprecatedPropType\"));\n\nvar _colorManipulator = require(\"../styles/colorManipulator\");\n\nvar _TableContext = _interopRequireDefault(require(\"../Table/TableContext\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'table-cell',\n verticalAlign: 'inherit',\n // Workaround for a rendering bug with spanned columns in Chrome 62.0.\n // Removes the alpha (sets it to 1), and lightens or darkens the theme color.\n borderBottom: \"1px solid\\n \".concat(theme.palette.type === 'light' ? (0, _colorManipulator.lighten)((0, _colorManipulator.fade)(theme.palette.divider, 1), 0.88) : (0, _colorManipulator.darken)((0, _colorManipulator.fade)(theme.palette.divider, 1), 0.68)),\n textAlign: 'left',\n padding: '4px 56px 4px 24px',\n '&:last-child': {\n paddingRight: 24\n }\n },\n\n /* Styles applied to the root element if `) + ("`" + (`variant=\"head\"` + "`"))) + ((` or ` + ("`" + `context.table.head`)) + ("`" + (`. */\n head: {\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(12),\n fontWeight: theme.typography.fontWeightMedium\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`variant=\"body\"` + ("`" + ` or `)) + ("`" + (`context.table.body` + "`"))) + ((`. */\n body: {\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"footer\"`)) + ("`" + (` or ` + "`")))))))) + (((((((`context.table.footer` + "`") + (`. */\n footer: {\n borderBottom: 0,\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(12)\n },\n\n /* Styles applied to the root element if ` + ("`" + `numeric={true}`))) + (("`" + (`. */\n numeric: {\n textAlign: 'right',\n flexDirection: 'row-reverse' // can be dynamically inherited at runtime by contents\n\n },\n\n /* Styles applied to the root element if ` + "`")) + (`padding=\"dense\"` + ("`" + `. */\n paddingDense: {\n paddingRight: 24\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + `padding=\"checkbox\"`) + ("`" + (`. */\n paddingCheckbox: {\n padding: '0 12px',\n '&:last-child': {\n paddingRight: 12\n }\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`padding=\"none\"` + ("`" + `. */\n paddingNone: {\n padding: 0,\n '&:last-child': {\n padding: 0\n }\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`align=\"left\"` + "`"))))) + ((((`. */\n alignLeft: {\n textAlign: 'left'\n },\n\n /* Styles applied to the root element if ` + "`") + (`align=\"center\"` + ("`" + `. */\n alignCenter: {\n textAlign: 'center'\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`align=\"right\"` + "`")) + (`. */\n alignRight: {\n textAlign: 'right',\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"justify\"`)))) + ((("`" + `. */\n alignJustify: {\n textAlign: 'justify'\n }\n };\n};\n\nexports.styles = styles;\n\nfunction TableCell(props) {\n var align = props.align,\n children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n component = props.component,\n sortDirection = props.sortDirection,\n _props$numeric = props.numeric,\n numeric = _props$numeric === void 0 ? false : _props$numeric,\n paddingProp = props.padding,\n scopeProp = props.scope,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"align\", \"children\", \"classes\", \"className\", \"component\", \"sortDirection\", \"numeric\", \"padding\", \"scope\", \"variant\"]);\n return _react.default.createElement(_TableContext.default.Consumer, null, function (table) {\n return _react.default.createElement(_Tablelvl2Context.default.Consumer, null, function (tablelvl2) {\n var _classNames;\n\n var Component;\n\n if (component) {\n Component = component;\n } else {\n Component = tablelvl2 && tablelvl2.variant === 'head' ? 'th' : 'td';\n }\n\n var scope = scopeProp;\n\n if (!scope && tablelvl2 && tablelvl2.variant === 'head') {\n scope = 'col';\n }\n\n var padding = paddingProp || (table && table.padding ? table.padding : 'default');\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.head, variant ? variant === 'head' : tablelvl2 && tablelvl2.variant === 'head'), (0, _defineProperty2.default)(_classNames, classes.body, variant ? variant === 'body' : tablelvl2 && tablelvl2.variant === 'body'), (0, _defineProperty2.default)(_classNames, classes.footer, variant ? variant === 'footer' : tablelvl2 && tablelvl2.variant === 'footer'), (0, _defineProperty2.default)(_classNames, classes[\"align\".concat((0, _helpers.capitalize)(align))], align !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes.numeric, numeric), (0, _defineProperty2.default)(_classNames, classes[\"padding\".concat((0, _helpers.capitalize)(padding))], padding !== 'default'), _classNames), classNameProp);\n var ariaSort = null;\n\n if (sortDirection) {\n ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';\n }\n\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className,\n \"aria-sort\": ariaSort,\n scope: scope\n }, other), children);\n });\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableCell.propTypes = {\n /**\r\n * Set the text-align on the table cell content.\r\n *\r\n * Monetary or generally number fields **should be right aligned** as that allows\r\n * you to add them up quickly in your head without having to worry about decimals.\r\n */\n align: _propTypes.default.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n /**\r\n * The table cell contents.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `) + ("`" + (`true` + "`"))) + ((`, content will align to the right.\r\n */\n numeric: (0, _deprecatedPropType.default)(_propTypes.default.bool, 'Instead, use the ` + ("`" + `align`)) + ("`" + (` property.'),\n\n /**\r\n * Sets the padding applied to the cell.\r\n * By default, the Table parent component set the value.\r\n */\n padding: _propTypes.default.oneOf(['default', 'checkbox', 'dense', 'none']),\n\n /**\r\n * Set scope attribute.\r\n */\n scope: _propTypes.default.string,\n\n /**\r\n * Set aria-sort direction.\r\n */\n sortDirection: _propTypes.default.oneOf(['asc', 'desc', false]),\n\n /**\r\n * Specify the cell type.\r\n * By default, the TableHead, TableBody or TableFooter parent component set the value.\r\n */\n variant: _propTypes.default.oneOf(['head', 'body', 'footer'])\n} : void 0;\nTableCell.defaultProps = {\n align: 'inherit'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableCell'\n})(TableCell);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableCell.default;\n }\n});\n\nvar _TableCell = _interopRequireDefault(require(\"./TableCell\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'table-header-group'\n }\n};\nexports.styles = styles;\nvar contextValue = {\n variant: 'head'\n};\n\nfunction TableHead(props) {\n var classes = props.classes,\n className = props.className,\n Component = props.component,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Provider, {\n value: contextValue\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableHead.propTypes = {\n /**\r\n * The content of the component, normally ` + "`")))))) + (((((`TableRow` + "`") + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType\n} : void 0;\nTableHead.defaultProps = {\n component: 'thead'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableHead'\n})(TableHead);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableHead.default;\n }\n});\n\nvar _TableHead = _interopRequireDefault(require(\"./TableHead\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: 'inherit',\n display: 'table-row',\n height: 48,\n verticalAlign: 'middle',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n '&$selected': {\n backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.04)' // grey[100]\n : 'rgba(255, 255, 255, 0.08)'\n },\n '&$hover:hover': {\n backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.07)' // grey[200]\n : 'rgba(255, 255, 255, 0.14)'\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `selected={true}`))) + (("`" + (`. */\n selected: {},\n\n /* Styles applied to the root element if ` + "`")) + (`hover={true}` + ("`" + `. */\n hover: {},\n\n /* Styles applied to the root element if table variant = 'head'. */\n head: {\n height: 56\n },\n\n /* Styles applied to the root element if table variant = 'footer'. */\n footer: {\n height: 56\n }\n };\n};\n/**\r\n * Will automatically set dynamic row height\r\n * based on the material table element parent (head, body, etc).\r\n */\n\n\nexports.styles = styles;\n\nfunction TableRow(props) {\n var classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n hover = props.hover,\n selected = props.selected,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\", \"hover\", \"selected\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Consumer, null, function (tablelvl2) {\n var _classNames;\n\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.head, tablelvl2 && tablelvl2.variant === 'head'), (0, _defineProperty2.default)(_classNames, classes.footer, tablelvl2 && tablelvl2.variant === 'footer'), (0, _defineProperty2.default)(_classNames, classes.hover, hover), (0, _defineProperty2.default)(_classNames, classes.selected, selected), _classNames), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableRow.propTypes = {\n /**\r\n * Should be valid children such as `)))) + ((("`" + `TableCell`) + ("`" + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + "`"))) + ((`true` + ("`" + `, the table row will shade on hover.\r\n */\n hover: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`"))))) + ((((`, the table row will have the selected shading.\r\n */\n selected: _propTypes.default.bool\n} : void 0;\nTableRow.defaultProps = {\n component: 'tr',\n hover: false,\n selected: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableRow'\n})(TableRow);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableRow.default;\n }\n});\n\nvar _TableRow = _interopRequireDefault(require(\"./TableRow\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if ` + "`") + (`disableGutters={false}` + ("`" + `. */\n gutters: theme.mixins.gutters(),\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"regular\"` + "`")) + (`. */\n regular: theme.mixins.toolbar,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"dense\"`)))) + ((("`" + `. */\n dense: {\n minHeight: 48\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Toolbar(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n disableGutters = props.disableGutters,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableGutters\", \"variant\"]);\n var className = (0, _classnames.default)(classes.root, classes[variant], (0, _defineProperty2.default)({}, classes.gutters, !disableGutters), classNameProp);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: className\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Toolbar.propTypes = {\n /**\r\n * Toolbar children, usually a mixture of `) + ("`" + (`IconButton` + "`"))) + ((`, ` + ("`" + `Button`)) + ("`" + (` and ` + "`"))))))) + ((((((`Typography` + "`") + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, disables gutter padding.\r\n */\n disableGutters: _propTypes.default.bool,\n\n /**\r\n * The variant to use.\r\n */\n variant: _propTypes.default.oneOf(['regular', 'dense'])\n} : void 0;\nToolbar.defaultProps = {\n disableGutters: false,\n variant: 'regular'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiToolbar'\n})(Toolbar);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Toolbar.default;\n }\n});\n\nvar _Toolbar = _interopRequireDefault(require(\"./Toolbar\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'block',\n margin: 0\n },\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"display4\"` + ("`" + `. */\n display4: theme.typography.display4,\n\n /* Styles applied to the root element if `)))) + ((("`" + `variant=\"display3\"`) + ("`" + (`. */\n display3: theme.typography.display3,\n\n /* Styles applied to the root element if ` + "`"))) + ((`variant=\"display2\"` + ("`" + `. */\n display2: theme.typography.display2,\n\n /* Styles applied to the root element if `)) + ("`" + (`variant=\"display1\"` + "`"))))) + ((((`. */\n display1: theme.typography.display1,\n\n /* Styles applied to the root element if ` + "`") + (`variant=\"headline\"` + ("`" + `. */\n headline: theme.typography.headline,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"title\"` + "`")) + (`. */\n title: theme.typography.title,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"subheading\"`)))) + ((("`" + `. */\n subheading: theme.typography.subheading,\n\n /* Styles applied to the root element if `) + ("`" + (`variant=\"body2\"` + "`"))) + ((`. */\n body2: theme.typography.body2,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"body1\"`)) + ("`" + (`. */\n body1: theme.typography.body1,\n\n /* Styles applied to the root element if ` + "`")))))) + (((((`variant=\"caption\"` + "`") + (`. */\n caption: theme.typography.caption,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"button\"`))) + (("`" + (`. */\n button: theme.typography.button,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"h1\"` + ("`" + `. */\n h1: theme.typography.h1,\n\n /* Styles applied to the root element if `)))) + ((("`" + `variant=\"h2\"`) + ("`" + (`. */\n h2: theme.typography.h2,\n\n /* Styles applied to the root element if ` + "`"))) + ((`variant=\"h3\"` + ("`" + `. */\n h3: theme.typography.h3,\n\n /* Styles applied to the root element if `)) + ("`" + (`variant=\"h4\"` + "`"))))) + ((((`. */\n h4: theme.typography.h4,\n\n /* Styles applied to the root element if ` + "`") + (`variant=\"h5\"` + ("`" + `. */\n h5: theme.typography.h5,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"h6\"` + "`")) + (`. */\n h6: theme.typography.h6,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"subtitle1\"`)))) + ((("`" + (`. */\n subtitle1: theme.typography.subtitle1,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"subtitle2\"` + ("`" + `. */\n subtitle2: theme.typography.subtitle2,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"overline\"` + "`")) + (`. */\n overline: theme.typography.overline,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"srOnly\"`))))))))) + (((((((("`" + `. Only accessible to screen readers. */\n srOnly: {\n position: 'absolute',\n height: 1,\n width: 1,\n overflow: 'hidden'\n },\n\n /* Styles applied to the root element if `) + ("`" + (`align=\"left\"` + "`"))) + ((`. */\n alignLeft: {\n textAlign: 'left'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"center\"`)) + ("`" + (`. */\n alignCenter: {\n textAlign: 'center'\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`align=\"right\"` + "`") + (`. */\n alignRight: {\n textAlign: 'right'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"justify\"`))) + (("`" + (`. */\n alignJustify: {\n textAlign: 'justify'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`align=\"nowrap\"` + ("`" + `. */\n noWrap: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n\n /* Styles applied to the root element if `))))) + (((("`" + `gutterBottom={true}`) + ("`" + (`. */\n gutterBottom: {\n marginBottom: '0.35em'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`paragraph={true}` + ("`" + `. */\n paragraph: {\n marginBottom: 16\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`color=\"inherit\"` + "`")))) + (((`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if ` + "`") + (`color=\"primary\"` + ("`" + `. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`color=\"secondary\"` + "`")) + (`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"textPrimary\"`)))))) + ((((("`" + `. */\n colorTextPrimary: {\n color: theme.palette.text.primary\n },\n\n /* Styles applied to the root element if `) + ("`" + (`color=\"textSecondary\"` + "`"))) + ((`. */\n colorTextSecondary: {\n color: theme.palette.text.secondary\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"error\"`)) + ("`" + (`. */\n colorError: {\n color: theme.palette.error.main\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`inline={true}` + "`") + (`. */\n inline: {\n display: 'inline'\n }\n };\n};\n\nexports.styles = styles;\nvar nextVariants = {\n display4: 'h1',\n display3: 'h2',\n display2: 'h3',\n display1: 'h4',\n headline: 'h5',\n title: 'h6',\n subheading: 'subtitle1'\n};\n\nfunction getVariant(theme, variantProp) {\n var typography = theme.typography;\n var variant = variantProp;\n\n if (!variant) {\n variant = typography.useNextVariants ? 'body2' : 'body1';\n } // complete v2 switch\n\n\n if (typography.useNextVariants) {\n variant = nextVariants[variant] || variant;\n }\n\n return variant;\n}\n\nvar defaultHeadlineMapping = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n subtitle1: 'h6',\n subtitle2: 'h6',\n body1: 'p',\n body2: 'p',\n // deprecated\n display4: 'h1',\n display3: 'h1',\n display2: 'h1',\n display1: 'h1',\n headline: 'h1',\n title: 'h2',\n subheading: 'h3'\n};\n\nfunction Typography(props) {\n var _classNames;\n\n var align = props.align,\n classes = props.classes,\n classNameProp = props.className,\n color = props.color,\n componentProp = props.component,\n gutterBottom = props.gutterBottom,\n headlineMapping = props.headlineMapping,\n inline = props.inline,\n internalDeprecatedVariant = props.internalDeprecatedVariant,\n noWrap = props.noWrap,\n paragraph = props.paragraph,\n theme = props.theme,\n variantProp = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"align\", \"classes\", \"className\", \"color\", \"component\", \"gutterBottom\", \"headlineMapping\", \"inline\", \"internalDeprecatedVariant\", \"noWrap\", \"paragraph\", \"theme\", \"variant\"]);\n var variant = getVariant(theme, variantProp);\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[variant], variant !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'default'), (0, _defineProperty2.default)(_classNames, classes.noWrap, noWrap), (0, _defineProperty2.default)(_classNames, classes.gutterBottom, gutterBottom), (0, _defineProperty2.default)(_classNames, classes.paragraph, paragraph), (0, _defineProperty2.default)(_classNames, classes[\"align\".concat((0, _helpers.capitalize)(align))], align !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes.inline, inline), _classNames), classNameProp);\n var Component = componentProp || (paragraph ? 'p' : headlineMapping[variant] || defaultHeadlineMapping[variant]) || 'span';\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Typography.propTypes = {\n /**\r\n * Set the text-align on the component.\r\n */\n align: _propTypes.default.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['default', 'error', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary']),\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n * By default, it maps the variant to a good default headline component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the text will have a bottom margin.\r\n */\n gutterBottom: _propTypes.default.bool,\n\n /**\r\n * We are empirically mapping the variant property to a range of different DOM element types.\r\n * For instance, subtitle1 to ` + "`")) + (`
` + ("`" + `.\r\n * If you wish to change that mapping, you can provide your own.\r\n * Alternatively, you can use the `))))) + (((("`" + `component`) + ("`" + (` property.\r\n * The default mapping is the following:\r\n */\n headlineMapping: _propTypes.default.object,\n\n /**\r\n * Controls whether the Typography is inline or not.\r\n */\n inline: _propTypes.default.bool,\n\n /**\r\n * A deprecated variant is used from an internal component. Users don't need\r\n * a deprecation warning here if they switched to the v2 theme. They already\r\n * get the mapping that will be applied in the next major release.\r\n *\r\n * @internal\r\n */\n internalDeprecatedVariant: _propTypes.default.bool,\n\n /**\r\n * If ` + "`"))) + ((`true` + ("`" + `, the text will not wrap, but instead will truncate with an ellipsis.\r\n */\n noWrap: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, the text will have a bottom margin.\r\n */\n paragraph: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n */\n theme: _propTypes.default.object.isRequired,\n\n /**\r\n * Applies the theme typography styles.\r\n * Use ` + "`") + (`body1` + ("`" + ` as the default value with the legacy implementation and `))) + (("`" + (`body2` + "`")) + (` with the new one.\r\n */\n variant: (0, _utils.chainPropTypes)(_propTypes.default.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline', 'srOnly', 'inherit', // deprecated\n 'display4', 'display3', 'display2', 'display1', 'headline', 'title', 'subheading']), function (props) {\n var deprecatedVariants = ['display4', 'display3', 'display2', 'display1', 'headline', 'title', 'subheading'];\n\n if (props.theme.typography.useNextVariants && !props.internalDeprecatedVariant && deprecatedVariants.indexOf(props.variant) !== -1) {\n return new Error('Material-UI: you are using a deprecated typography variant: ' + \"` + ("`" + `\".concat(props.variant, \"`))))))) + (((((("`" + ` that will be removed in the next major release.\\n\") + 'Please read the migration guide under https://material-ui.com/style/typography#migration-to-typography-v2.');\n }\n\n return null;\n })\n} : void 0;\nTypography.defaultProps = {\n align: 'inherit',\n color: 'default',\n gutterBottom: false,\n headlineMapping: defaultHeadlineMapping,\n inline: false,\n noWrap: false,\n paragraph: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTypography',\n withTheme: true\n})(Typography);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Typography.default;\n }\n});\n\nvar _Typography = _interopRequireDefault(require(\"./Typography\"));", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar common = {\n black: '#000',\n white: '#fff'\n};\nvar _default = common;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#d5d5d5',\n A200: '#aaaaaa',\n A400: '#303030',\n A700: '#616161'\n};\nvar _default = grey;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar indigo = {\n 50: '#e8eaf6',\n 100: '#c5cae9',\n 200: '#9fa8da',\n 300: '#7986cb',\n 400: '#5c6bc0',\n 500: '#3f51b5',\n 600: '#3949ab',\n 700: '#303f9f',\n 800: '#283593',\n 900: '#1a237e',\n A100: '#8c9eff',\n A200: '#536dfe',\n A400: '#3d5afe',\n A700: '#304ffe'\n};\nvar _default = indigo;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar pink = {\n 50: '#fce4ec',\n 100: '#f8bbd0',\n 200: '#f48fb1',\n 300: '#f06292',\n 400: '#ec407a',\n 500: '#e91e63',\n 600: '#d81b60',\n 700: '#c2185b',\n 800: '#ad1457',\n 900: '#880e4f',\n A100: '#ff80ab',\n A200: '#ff4081',\n A400: '#f50057',\n A700: '#c51162'\n};\nvar _default = pink;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nvar _default = red;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.MuiThemeProviderOld = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _brcast = _interopRequireDefault(require(\"brcast\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _themeListener = _interopRequireWildcard(require(\"./themeListener\"));\n\n/* eslint-disable no-underscore-dangle */\n\n/**\r\n * This component takes a `) + ("`" + (`theme` + "`"))) + ((` property.\r\n * It makes the ` + ("`" + `theme`)) + ("`" + (` available down the React tree thanks to React context.\r\n * This component should preferably be used at **the root of your component tree**.\r\n */\nvar MuiThemeProviderOld =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(MuiThemeProviderOld, _React$Component);\n\n // We are not using the React state in order to avoid unnecessary rerender.\n function MuiThemeProviderOld(props, context) {\n var _this;\n\n (0, _classCallCheck2.default)(this, MuiThemeProviderOld);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(MuiThemeProviderOld).call(this)); // Get the outer theme from the context, can be null\n\n _this.broadcast = (0, _brcast.default)();\n _this.outerTheme = _themeListener.default.initial(context); // Propagate the theme so it can be accessed by the children\n\n _this.broadcast.setState(_this.mergeOuterLocalTheme(props.theme));\n\n return _this;\n }\n\n (0, _createClass2.default)(MuiThemeProviderOld, [{\n key: \"getChildContext\",\n value: function getChildContext() {\n var _ref;\n\n var _this$props = this.props,\n disableStylesGeneration = _this$props.disableStylesGeneration,\n sheetsCache = _this$props.sheetsCache,\n sheetsManager = _this$props.sheetsManager;\n var muiThemeProviderOptions = this.context.muiThemeProviderOptions || {};\n\n if (disableStylesGeneration !== undefined) {\n muiThemeProviderOptions.disableStylesGeneration = disableStylesGeneration;\n }\n\n if (sheetsCache !== undefined) {\n muiThemeProviderOptions.sheetsCache = sheetsCache;\n }\n\n if (sheetsManager !== undefined) {\n muiThemeProviderOptions.sheetsManager = sheetsManager;\n }\n\n return _ref = {}, (0, _defineProperty2.default)(_ref, _themeListener.CHANNEL, this.broadcast), (0, _defineProperty2.default)(_ref, \"muiThemeProviderOptions\", muiThemeProviderOptions), _ref;\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n // Subscribe on the outer theme, if present\n this.unsubscribeId = _themeListener.default.subscribe(this.context, function (outerTheme) {\n _this2.outerTheme = outerTheme; // Forward the parent theme update to the children\n\n _this2.broadcast.setState(_this2.mergeOuterLocalTheme(_this2.props.theme));\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // Propagate a local theme update\n if (this.props.theme !== prevProps.theme) {\n this.broadcast.setState(this.mergeOuterLocalTheme(this.props.theme));\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.unsubscribeId !== null) {\n _themeListener.default.unsubscribe(this.context, this.unsubscribeId);\n }\n } // Simple merge between the outer theme and the local theme\n\n }, {\n key: \"mergeOuterLocalTheme\",\n value: function mergeOuterLocalTheme(localTheme) {\n // To support composition of theme.\n if (typeof localTheme === 'function') {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(this.outerTheme, ['Material-UI: you are providing a theme function property ' + 'to the MuiThemeProvider component:', ' outerTheme} />', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n')) : void 0;\n return localTheme(this.outerTheme);\n }\n\n if (!this.outerTheme) {\n return localTheme;\n }\n\n return (0, _extends2.default)({}, this.outerTheme, localTheme);\n }\n }, {\n key: \"render\",\n value: function render() {\n // TODO move the sheetsManager property to a different component.\n // warning(\n // typeof window !== 'undefined' || this.props.sheetsManager,\n // [\n // 'Material-UI: you need to provide a sheetsManager to the MuiThemeProvider ' +\n // 'when rendering on the server.',\n // 'If you do not, you might experience a memory leak',\n // ].join('\\n'),\n // );\n return this.props.children;\n }\n }]);\n return MuiThemeProviderOld;\n}(_react.default.Component);\n\nexports.MuiThemeProviderOld = MuiThemeProviderOld;\nprocess.env.NODE_ENV !== \"production\" ? MuiThemeProviderOld.propTypes = {\n /**\r\n * You can wrap a node.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * You can disable the generation of the styles with this option.\r\n * It can be useful when traversing the React tree outside of the HTML\r\n * rendering step on the server.\r\n * Let's say you are using react-apollo to extract all\r\n * the queries made by the interface server-side.\r\n * You can significantly speed up the traversal with this property.\r\n */\n disableStylesGeneration: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n *\r\n * In beta.\r\n */\n sheetsCache: _propTypes.default.object,\n\n /**\r\n * The sheetsManager is used to deduplicate style sheet injection in the page.\r\n * It's deduplicating using the (theme, styles) couple.\r\n * On the server, you should provide a new instance for each request.\r\n */\n sheetsManager: _propTypes.default.object,\n\n /**\r\n * A theme object.\r\n */\n theme: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]).isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? MuiThemeProviderOld.propTypes = (0, _utils.exactProp)(MuiThemeProviderOld.propTypes) : void 0;\n}\n\nMuiThemeProviderOld.childContextTypes = (0, _extends2.default)({}, _themeListener.default.contextTypes, {\n muiThemeProviderOptions: _propTypes.default.object\n});\nMuiThemeProviderOld.contextTypes = (0, _extends2.default)({}, _themeListener.default.contextTypes, {\n muiThemeProviderOptions: _propTypes.default.object\n});\n/* istanbul ignore if */\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__) {\n _utils.ponyfillGlobal.__MUI_STYLES__ = {};\n}\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider) {\n _utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider = MuiThemeProviderOld;\n}\n\nvar _default = _utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.convertHexToRGB = convertHexToRGB;\nexports.rgbToHex = rgbToHex;\nexports.decomposeColor = decomposeColor;\nexports.recomposeColor = recomposeColor;\nexports.getContrastRatio = getContrastRatio;\nexports.getLuminance = getLuminance;\nexports.emphasize = emphasize;\nexports.fade = fade;\nexports.darken = darken;\nexports.lighten = lighten;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n/* eslint-disable no-use-before-define */\n\n/**\r\n * Returns a number whose value is limited to the given range.\r\n *\r\n * @param {number} value The value to be clamped\r\n * @param {number} min The lower boundary of the output range\r\n * @param {number} max The upper boundary of the output range\r\n * @returns {number} A number in the range [min, max]\r\n */\nfunction clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(value >= min && value <= max, \"Material-UI: the value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\")) : void 0;\n\n if (value < min) {\n return min;\n }\n\n if (value > max) {\n return max;\n }\n\n return value;\n}\n/**\r\n * Converts a color from CSS hex format to CSS rgb format.\r\n *\r\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\r\n * @returns {string} A CSS rgb color string\r\n */\n\n\nfunction convertHexToRGB(color) {\n color = color.substr(1);\n var re = new RegExp(\".{1,\".concat(color.length / 3, \"}\"), 'g');\n var colors = color.match(re);\n\n if (colors && colors[0].length === 1) {\n colors = colors.map(function (n) {\n return n + n;\n });\n }\n\n return colors ? \"rgb(\".concat(colors.map(function (n) {\n return parseInt(n, 16);\n }).join(', '), \")\") : '';\n}\n/**\r\n * Converts a color from CSS rgb format to CSS hex format.\r\n *\r\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\r\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\r\n */\n\n\nfunction rgbToHex(color) {\n // Pass hex straight through\n if (color.indexOf('#') === 0) {\n return color;\n }\n\n function intToHex(c) {\n var hex = c.toString(16);\n return hex.length === 1 ? \"0\".concat(hex) : hex;\n }\n\n var _decomposeColor = decomposeColor(color),\n values = _decomposeColor.values;\n\n values = values.map(function (n) {\n return intToHex(n);\n });\n return \"#\".concat(values.join(''));\n}\n/**\r\n * Returns an object with the type and values of a color.\r\n *\r\n * Note: Does not support rgb % values.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {object} - A MUI color object: {type: string, values: number[]}\r\n */\n\n\nfunction decomposeColor(color) {\n if (color.charAt(0) === '#') {\n return decomposeColor(convertHexToRGB(color));\n }\n\n var marker = color.indexOf('(');\n var type = color.substring(0, marker);\n var values = color.substring(marker + 1, color.length - 1).split(',');\n values = values.map(function (value) {\n return parseFloat(value);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n throw new Error([\"Material-UI: unsupported ` + "`")))) + (((`\".concat(color, \"` + "`") + (` color.\"), 'We support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().'].join('\\n'));\n }\n }\n\n return {\n type: type,\n values: values\n };\n}\n/**\r\n * Converts a color object with type and values to a string.\r\n *\r\n * @param {object} color - Decomposed color\r\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\r\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\r\n * @returns {string} A CSS color string\r\n */\n\n\nfunction recomposeColor(color) {\n var type = color.type;\n var values = color.values;\n\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map(function (n, i) {\n return i < 3 ? parseInt(n, 10) : n;\n });\n }\n\n if (type.indexOf('hsl') !== -1) {\n values[1] = \"\".concat(values[1], \"%\");\n values[2] = \"\".concat(values[2], \"%\");\n }\n\n return \"\".concat(color.type, \"(\").concat(values.join(', '), \")\");\n}\n/**\r\n * Calculates the contrast ratio between two colors.\r\n *\r\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\r\n *\r\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} A contrast ratio value in the range 0 - 21.\r\n */\n\n\nfunction getContrastRatio(foreground, background) {\n var lumA = getLuminance(foreground);\n var lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\r\n * The relative brightness of any point in a color space,\r\n * normalized to 0 for darkest black and 1 for lightest white.\r\n *\r\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} The relative brightness of the color in the range 0 - 1\r\n */\n\n\nfunction getLuminance(color) {\n var decomposedColor = decomposeColor(color);\n\n if (decomposedColor.type.indexOf('rgb') !== -1) {\n var rgb = decomposedColor.values.map(function (val) {\n val /= 255; // normalized\n\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n }); // Truncate at 3 digits\n\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n } // else if (decomposedColor.type.indexOf('hsl') !== -1)\n\n\n return decomposedColor.values[2] / 100;\n}\n/**\r\n * Darken or lighten a colour, depending on its luminance.\r\n * Light colors are darkened, dark colors are lightened.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction emphasize(color) {\n var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\r\n * Set the absolute transparency of a color.\r\n * Any existing alpha values are overwritten.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} value - value to set the alpha channel to in the range 0 -1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction fade(color, value) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in fade(\".concat(color, \", \").concat(value, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n value = clamp(value);\n\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n\n color.values[3] = value;\n return recomposeColor(color);\n}\n/**\r\n * Darkens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction darken(color, coefficient) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in darken(\".concat(color, \", \").concat(coefficient, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n\n return recomposeColor(color);\n}\n/**\r\n * Lightens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction lighten(color, coefficient) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in lighten(\".concat(color, \", \").concat(coefficient, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n }\n\n return recomposeColor(color);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createBreakpoints;\nexports.keys = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nvar keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nexports.keys = keys;\n\nfunction createBreakpoints(breakpoints) {\n var _breakpoints$values = breakpoints.values,\n values = _breakpoints$values === void 0 ? {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920\n } : _breakpoints$values,\n _breakpoints$unit = breakpoints.unit,\n unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n _breakpoints$step = breakpoints.step,\n step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n other = (0, _objectWithoutProperties2.default)(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n function up(key) {\n var value = typeof values[key] === 'number' ? values[key] : key;\n return \"@media (min-width:\".concat(value).concat(unit, \")\");\n }\n\n function down(key) {\n var endIndex = keys.indexOf(key) + 1;\n var upperbound = values[keys[endIndex]];\n\n if (endIndex === keys.length) {\n // xl down applies to all sizes\n return up('xs');\n }\n\n var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n }\n\n function between(start, end) {\n var endIndex = keys.indexOf(end) + 1;\n\n if (endIndex === keys.length) {\n return up(start);\n }\n\n return \"@media (min-width:\".concat(values[start]).concat(unit, \") and \") + \"(max-width:\".concat(values[keys[endIndex]] - step / 100).concat(unit, \")\");\n }\n\n function only(key) {\n return between(key, key);\n }\n\n function width(key) {\n return values[key];\n }\n\n return (0, _extends2.default)({\n keys: keys,\n values: values,\n up: up,\n down: down,\n between: between,\n only: only,\n width: width\n }, other);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createGenerateClassName;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'` + ("`" + `\\s])/g;\n\nfunction safePrefix(classNamePrefix) {\n var prefix = String(classNamePrefix);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(prefix.length < 256, \"Material-UI: the class name prefix is too long: \".concat(prefix, \".\")) : void 0; // Sanitize the string as will be used to prefix the generated class name.\n\n return prefix.replace(escapeRegex, '-');\n} // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\n\nfunction createGenerateClassName() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _options$dangerouslyU = options.dangerouslyUseGlobalCSS,\n dangerouslyUseGlobalCSS = _options$dangerouslyU === void 0 ? false : _options$dangerouslyU,\n _options$productionPr = options.productionPrefix,\n productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n _options$seed = options.seed,\n seed = _options$seed === void 0 ? '' : _options$seed;\n var ruleCounter = 0;\n return function (rule, styleSheet) {\n ruleCounter += 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(ruleCounter < 1e10, ['Material-UI: you might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join('')) : void 0;\n\n if (dangerouslyUseGlobalCSS && styleSheet && styleSheet.options.name) {\n return \"\".concat(safePrefix(styleSheet.options.name), \"-\").concat(rule.key);\n }\n\n if (process.env.NODE_ENV === 'production') {\n return \"\".concat(productionPrefix).concat(seed).concat(ruleCounter);\n } // Help with debuggability.\n\n\n if (styleSheet && styleSheet.options.classNamePrefix) {\n return \"\".concat(safePrefix(styleSheet.options.classNamePrefix), \"-\").concat(rule.key, \"-\").concat(seed).concat(ruleCounter);\n }\n\n return \"\".concat(rule.key, \"-\").concat(seed).concat(ruleCounter);\n };\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createMixins;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nfunction createMixins(breakpoints, spacing, mixins) {\n var _toolbar;\n\n return (0, _extends3.default)({\n gutters: function gutters() {\n var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return (0, _extends3.default)({\n paddingLeft: spacing.unit * 2,\n paddingRight: spacing.unit * 2\n }, styles, (0, _defineProperty2.default)({}, breakpoints.up('sm'), (0, _extends3.default)({\n paddingLeft: spacing.unit * 3,\n paddingRight: spacing.unit * 3\n }, styles[breakpoints.up('sm')])));\n },\n toolbar: (_toolbar = {\n minHeight: 56\n }, (0, _defineProperty2.default)(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n minHeight: 48\n }), (0, _defineProperty2.default)(_toolbar, breakpoints.up('sm'), {\n minHeight: 64\n }), _toolbar)\n }, mixins);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _isPlainObject = _interopRequireDefault(require(\"is-plain-object\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _createBreakpoints = _interopRequireDefault(require(\"./createBreakpoints\"));\n\nvar _createMixins = _interopRequireDefault(require(\"./createMixins\"));\n\nvar _createPalette = _interopRequireDefault(require(\"./createPalette\"));\n\nvar _createTypography = _interopRequireDefault(require(\"./createTypography\"));\n\nvar _shadows = _interopRequireDefault(require(\"./shadows\"));\n\nvar _shape = _interopRequireDefault(require(\"./shape\"));\n\nvar _spacing = _interopRequireDefault(require(\"./spacing\"));\n\nvar _transitions = _interopRequireDefault(require(\"./transitions\"));\n\nvar _zIndex = _interopRequireDefault(require(\"./zIndex\"));\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nfunction createMuiTheme() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _options$breakpoints = options.breakpoints,\n breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n _options$mixins = options.mixins,\n mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n _options$palette = options.palette,\n paletteInput = _options$palette === void 0 ? {} : _options$palette,\n shadowsInput = options.shadows,\n _options$spacing = options.spacing,\n spacingInput = _options$spacing === void 0 ? {} : _options$spacing,\n _options$typography = options.typography,\n typographyInput = _options$typography === void 0 ? {} : _options$typography,\n other = (0, _objectWithoutProperties2.default)(options, [\"breakpoints\", \"mixins\", \"palette\", \"shadows\", \"spacing\", \"typography\"]);\n var palette = (0, _createPalette.default)(paletteInput);\n var breakpoints = (0, _createBreakpoints.default)(breakpointsInput);\n var spacing = (0, _extends2.default)({}, _spacing.default, spacingInput);\n var muiTheme = (0, _extends2.default)({\n breakpoints: breakpoints,\n direction: 'ltr',\n mixins: (0, _createMixins.default)(breakpoints, spacing, mixinsInput),\n overrides: {},\n // Inject custom styles\n palette: palette,\n props: {},\n // Inject custom properties\n shadows: shadowsInput || _shadows.default,\n typography: (0, _createTypography.default)(palette, typographyInput)\n }, (0, _deepmerge.default)({\n shape: _shape.default,\n spacing: spacing,\n transitions: _transitions.default,\n zIndex: _zIndex.default\n }, other, {\n isMergeableObject: _isPlainObject.default\n }));\n\n if (process.env.NODE_ENV !== 'production') {\n var statesWarning = ['disabled', 'focused', 'selected', 'checked'];\n\n var traverse = function traverse(node, parentKey) {\n var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n for (key in node) {\n var child = node[key];\n\n if (depth === 1) {\n if (key.indexOf('Mui') === 0 && child) {\n traverse(child, key, depth + 1);\n }\n } else if (statesWarning.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(false, [\"Material-UI: the `))) + (("`" + (`\".concat(parentKey, \"` + "`")) + (` component increases \") + \"the CSS specificity of the ` + ("`" + `\".concat(key, \"`))))) + (((("`" + ` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify((0, _defineProperty2.default)({}, \"&$\".concat(key), child), null, 2), '', 'https://material-ui.com/customization/overrides#internal-states'].join('\\n')) : void 0;\n }\n }\n };\n\n traverse(other.overrides);\n }\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(muiTheme.shadows.length === 25, 'Material-UI: the shadows array provided to createMuiTheme should support 25 elevations.') : void 0;\n return muiTheme;\n}\n\nvar _default = createMuiTheme;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createPalette;\nexports.dark = exports.light = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _indigo = _interopRequireDefault(require(\"../colors/indigo\"));\n\nvar _pink = _interopRequireDefault(require(\"../colors/pink\"));\n\nvar _grey = _interopRequireDefault(require(\"../colors/grey\"));\n\nvar _red = _interopRequireDefault(require(\"../colors/red\"));\n\nvar _common = _interopRequireDefault(require(\"../colors/common\"));\n\nvar _colorManipulator = require(\"./colorManipulator\");\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nvar light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.54)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)',\n // Text hints.\n hint: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: _common.default.white,\n default: _grey.default[50]\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.08)',\n hoverOpacity: 0.08,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.14)',\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)'\n }\n};\nexports.light = light;\nvar dark = {\n text: {\n primary: _common.default.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n hint: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: _grey.default[800],\n default: '#303030'\n },\n action: {\n active: _common.default.white,\n hover: 'rgba(255, 255, 255, 0.1)',\n hoverOpacity: 0.1,\n selected: 'rgba(255, 255, 255, 0.2)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)'\n }\n};\nexports.dark = dark;\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = (0, _colorManipulator.lighten)(intent.main, tonalOffset);\n } else if (direction === 'dark') {\n intent.dark = (0, _colorManipulator.darken)(intent.main, tonalOffset * 1.5);\n }\n }\n}\n\nfunction createPalette(palette) {\n var _palette$primary = palette.primary,\n primary = _palette$primary === void 0 ? {\n light: _indigo.default[300],\n main: _indigo.default[500],\n dark: _indigo.default[700]\n } : _palette$primary,\n _palette$secondary = palette.secondary,\n secondary = _palette$secondary === void 0 ? {\n light: _pink.default.A200,\n main: _pink.default.A400,\n dark: _pink.default.A700\n } : _palette$secondary,\n _palette$error = palette.error,\n error = _palette$error === void 0 ? {\n light: _red.default[300],\n main: _red.default[500],\n dark: _red.default[700]\n } : _palette$error,\n _palette$type = palette.type,\n type = _palette$type === void 0 ? 'light' : _palette$type,\n _palette$contrastThre = palette.contrastThreshold,\n contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n _palette$tonalOffset = palette.tonalOffset,\n tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n other = (0, _objectWithoutProperties2.default)(palette, [\"primary\", \"secondary\", \"error\", \"type\", \"contrastThreshold\", \"tonalOffset\"]);\n\n function getContrastText(background) {\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n var contrastText = (0, _colorManipulator.getContrastRatio)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n if (process.env.NODE_ENV !== 'production') {\n var contrast = (0, _colorManipulator.getContrastRatio)(background, contrastText);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(contrast >= 3, [\"Material-UI: the contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WACG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n')) : void 0;\n }\n\n return contrastText;\n }\n\n function augmentColor(color) {\n var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n\n if (process.env.NODE_ENV !== 'production' && !color.main) {\n throw new Error(['Material-UI: the color provided to augmentColor(color) is invalid.', \"The color object needs to have a `) + ("`" + (`main` + "`"))) + ((` property or a ` + ("`" + `\".concat(mainShade, \"`)) + ("`" + (` property.\")].join('\\n'));\n }\n\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n\n return color;\n }\n\n augmentColor(primary);\n augmentColor(secondary, 'A400', 'A200', 'A700');\n augmentColor(error);\n var types = {\n dark: dark,\n light: light\n };\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(types[type], \"Material-UI: the palette type ` + "`")))) + (((`\".concat(type, \"` + "`") + (` is not supported.\")) : void 0;\n var paletteOutput = (0, _deepmerge.default)((0, _extends2.default)({\n // A collection of common colors.\n common: _common.default,\n // The palette type, can be light or dark.\n type: type,\n // The colors used to represent primary interface elements for a user.\n primary: primary,\n // The colors used to represent secondary interface elements for a user.\n secondary: secondary,\n // The colors used to represent interface elements that the user should be made aware of.\n error: error,\n // The grey colors.\n grey: _grey.default,\n // Used by ` + ("`" + `getContrastText()`))) + (("`" + (` to maximize the contrast between the background and\n // the text.\n contrastThreshold: contrastThreshold,\n // Take a background color and return the color of the text to maximize the contrast.\n getContrastText: getContrastText,\n // Generate a rich color object.\n augmentColor: augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset: tonalOffset\n }, types[type]), other, {\n clone: false // No need to clone deep\n\n });\n return paletteOutput;\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createTypography;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\r\n * @see @link{https://material.io/design/typography/the-type-system.html}\r\n * @see @link{https://material.io/design/typography/understanding-typography.html}\r\n */\n\nfunction createTypography(palette, typography) {\n var _ref = typeof typography === 'function' ? typography(palette) : typography,\n _ref$fontFamily = _ref.fontFamily,\n fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n _ref$fontSize = _ref.fontSize,\n fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n _ref$fontWeightLight = _ref.fontWeightLight,\n fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n _ref$fontWeightRegula = _ref.fontWeightRegular,\n fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n _ref$fontWeightMedium = _ref.fontWeightMedium,\n fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n _ref$htmlFontSize = _ref.htmlFontSize,\n htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n _ref$useNextVariants = _ref.useNextVariants,\n useNextVariants = _ref$useNextVariants === void 0 ? Boolean(_utils.ponyfillGlobal.__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__) : _ref$useNextVariants,\n _ref$suppressWarning = _ref.suppressWarning,\n suppressWarning = _ref$suppressWarning === void 0 ? false : _ref$suppressWarning,\n allVariants = _ref.allVariants,\n other = (0, _objectWithoutProperties2.default)(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"htmlFontSize\", \"useNextVariants\", \"suppressWarning\", \"allVariants\"]);\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(useNextVariants || suppressWarning, 'Material-UI: you are using the deprecated typography variants ' + 'that will be removed in the next major release.' + '\\nPlease read the migration guide under https://material-ui.com/style/typography#migration-to-typography-v2') : void 0;\n var coef = fontSize / 14;\n\n var pxToRem = function pxToRem(size) {\n return \"\".concat(size / htmlFontSize * coef, \"rem\");\n };\n\n var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n return (0, _extends2.default)({\n color: palette.text.primary,\n fontFamily: fontFamily,\n fontWeight: fontWeight,\n fontSize: pxToRem(size),\n // Unitless following http://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight: lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n } : {}, casing, allVariants);\n };\n\n var nextVariants = {\n h1: buildVariant(fontWeightLight, 96, 1, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.04, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.17, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.33, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1Next: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2Next: buildVariant(fontWeightRegular, 14, 1.5, 0.15),\n buttonNext: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n captionNext: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n }; // To remove in v4\n\n var oldVariants = {\n display4: (0, _extends2.default)({\n fontSize: pxToRem(112),\n fontWeight: fontWeightLight,\n fontFamily: fontFamily,\n letterSpacing: '-.04em',\n lineHeight: \"\".concat(round(128 / 112), \"em\"),\n marginLeft: '-.04em',\n color: palette.text.secondary\n }, allVariants),\n display3: (0, _extends2.default)({\n fontSize: pxToRem(56),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n letterSpacing: '-.02em',\n lineHeight: \"\".concat(round(73 / 56), \"em\"),\n marginLeft: '-.02em',\n color: palette.text.secondary\n }, allVariants),\n display2: (0, _extends2.default)({\n fontSize: pxToRem(45),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(51 / 45), \"em\"),\n marginLeft: '-.02em',\n color: palette.text.secondary\n }, allVariants),\n display1: (0, _extends2.default)({\n fontSize: pxToRem(34),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(41 / 34), \"em\"),\n color: palette.text.secondary\n }, allVariants),\n headline: (0, _extends2.default)({\n fontSize: pxToRem(24),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(32.5 / 24), \"em\"),\n color: palette.text.primary\n }, allVariants),\n title: (0, _extends2.default)({\n fontSize: pxToRem(21),\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24.5 / 21), \"em\"),\n color: palette.text.primary\n }, allVariants),\n subheading: (0, _extends2.default)({\n fontSize: pxToRem(16),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24 / 16), \"em\"),\n color: palette.text.primary\n }, allVariants),\n body2: (0, _extends2.default)({\n fontSize: pxToRem(14),\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24 / 14), \"em\"),\n color: palette.text.primary\n }, allVariants),\n body1: (0, _extends2.default)({\n fontSize: pxToRem(14),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(20.5 / 14), \"em\"),\n color: palette.text.primary\n }, allVariants),\n caption: (0, _extends2.default)({\n fontSize: pxToRem(12),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(16.5 / 12), \"em\"),\n color: palette.text.secondary\n }, allVariants),\n button: (0, _extends2.default)({\n fontSize: pxToRem(14),\n textTransform: 'uppercase',\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n color: palette.text.primary\n }, allVariants)\n };\n return (0, _deepmerge.default)((0, _extends2.default)({\n pxToRem: pxToRem,\n round: round,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeightLight: fontWeightLight,\n fontWeightRegular: fontWeightRegular,\n fontWeightMedium: fontWeightMedium\n }, oldVariants, nextVariants, useNextVariants ? {\n body1: nextVariants.body1Next,\n body2: nextVariants.body2Next,\n button: nextVariants.buttonNext,\n caption: nextVariants.captionNext\n } : {}, {\n useNextVariants: useNextVariants\n }), other, {\n clone: false // No need to clone deep\n\n });\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\n// Support for the jss-expand plugin.\nfunction arrayMerge(destination, source) {\n return source;\n}\n\nfunction getStylesCreator(stylesOrCreator) {\n var themingEnabled = typeof stylesOrCreator === 'function';\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)((0, _typeof2.default)(stylesOrCreator) === 'object' || themingEnabled, ['Material-UI: the first argument provided to withStyles() is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n')) : void 0;\n\n function create(theme, name) {\n var styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n\n if (!name || !theme.overrides || !theme.overrides[name]) {\n return styles;\n }\n\n var overrides = theme.overrides[name];\n var stylesWithOverrides = (0, _extends2.default)({}, styles);\n Object.keys(overrides).forEach(function (key) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(stylesWithOverrides[key], ['Material-UI: you are trying to override a style that does not exist.', \"Fix the ` + "`")) + (`\".concat(key, \"` + ("`" + ` key of `)))))) + ((((("`" + `theme.overrides.\").concat(name, \"`) + ("`" + (`.\")].join('\\n')) : void 0;\n stylesWithOverrides[key] = (0, _deepmerge.default)(stylesWithOverrides[key], overrides[key], {\n arrayMerge: arrayMerge\n });\n });\n return stylesWithOverrides;\n }\n\n return {\n create: create,\n options: {},\n themingEnabled: themingEnabled\n };\n}\n\nvar _default = getStylesCreator;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n var theme = params.theme,\n name = params.name,\n props = params.props;\n\n if (!theme.props || !name || !theme.props[name]) {\n return props;\n } // Resolve default props, code borrow from React source.\n // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n var defaultProps = theme.props[name];\n var propName;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n}\n\nvar _default = getThemeProps;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _jssGlobal = _interopRequireDefault(require(\"jss-global\"));\n\nvar _jssNested = _interopRequireDefault(require(\"jss-nested\"));\n\nvar _jssCamelCase = _interopRequireDefault(require(\"jss-camel-case\"));\n\nvar _jssDefaultUnit = _interopRequireDefault(require(\"jss-default-unit\"));\n\nvar _jssVendorPrefixer = _interopRequireDefault(require(\"jss-vendor-prefixer\"));\n\nvar _jssPropsSort = _interopRequireDefault(require(\"jss-props-sort\"));\n\n// Subset of jss-preset-default with only the plugins the Material-UI components are using.\nfunction jssPreset() {\n return {\n plugins: [(0, _jssGlobal.default)(), (0, _jssNested.default)(), (0, _jssCamelCase.default)(), (0, _jssDefaultUnit.default)(), // Disable the vendor prefixer server-side, it does nothing.\n // This way, we can get a performance boost.\n // In the documentation, we are using ` + "`"))) + ((`autoprefixer` + ("`" + ` to solve this problem.\n typeof window === 'undefined' ? null : (0, _jssVendorPrefixer.default)(), (0, _jssPropsSort.default)()]\n };\n}\n\nvar _default = jssPreset;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nfunction mergeClasses() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var baseClasses = options.baseClasses,\n newClasses = options.newClasses,\n Component = options.Component;\n\n if (!newClasses) {\n return baseClasses;\n }\n\n var nextClasses = (0, _extends2.default)({}, baseClasses);\n\n if (process.env.NODE_ENV !== 'production' && typeof newClasses === 'string') {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(false, [\"Material-UI: the value `)) + ("`" + (`\".concat(newClasses, \"` + "`")))) + (((` \") + \"provided to the classes property of \".concat((0, _utils.getDisplayName)(Component), \" is incorrect.\"), 'You might want to use the className property instead.'].join('\\n')) : void 0;\n return baseClasses;\n }\n\n Object.keys(newClasses).forEach(function (key) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(baseClasses[key] || !newClasses[key], [\"Material-UI: the key ` + "`") + (`\".concat(key, \"` + ("`" + ` \") + \"provided to the classes property is not implemented in \".concat((0, _utils.getDisplayName)(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n')) : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(!newClasses[key] || typeof newClasses[key] === 'string', [\"Material-UI: the key `))) + (("`" + (`\".concat(key, \"` + "`")) + (` \") + \"provided to the classes property is not valid for \".concat((0, _utils.getDisplayName)(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n')) : void 0;\n\n if (newClasses[key]) {\n nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n }\n });\n return nextClasses;\n}\n\nvar _default = mergeClasses;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n set: function set(cache, key1, key2, value) {\n var subCache = cache.get(key1);\n\n if (!subCache) {\n subCache = new Map();\n cache.set(key1, subCache);\n }\n\n subCache.set(key2, value);\n },\n get: function get(cache, key1, key2) {\n var subCache = cache.get(key1);\n return subCache ? subCache.get(key2) : undefined;\n },\n delete: function _delete(cache, key1, key2) {\n var subCache = cache.get(key1);\n subCache.delete(key2);\n }\n};\nvar _default = multiKeyStore;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// Share the same values than in\n// https://github.com/cssinjs/jss/blob/master/packages/react-jss/src/ns.js\nvar ns = {\n jss: '64a55d578f856d258dc345b094a2a2b3',\n sheetsRegistry: 'd4bd0baacbc52bbd48bbb9eb24344ecd',\n sheetOptions: '6fc570d6bd61383819d0f9e7407c452d'\n};\nvar _default = ns;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n}\n\nvar shadows = ['none', createShadow(0, 1, 3, 0, 0, 1, 1, 0, 0, 2, 1, -1), createShadow(0, 1, 5, 0, 0, 2, 2, 0, 0, 3, 1, -2), createShadow(0, 1, 8, 0, 0, 3, 4, 0, 0, 3, 3, -2), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nvar _default = shadows;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar shape = {\n borderRadius: 4\n};\nvar _default = shape;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar spacing = {\n // All components align to an 8dp square baseline grid for mobile, tablet, and desktop.\n // https://material.io/design/layout/understanding-layout.html#pixel-density\n unit: 8\n};\nvar _default = spacing;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.CHANNEL = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\n// Same value used by react-jss\nvar CHANNEL = '__THEMING__';\nexports.CHANNEL = CHANNEL;\nvar themeListener = {\n contextTypes: (0, _defineProperty2.default)({}, CHANNEL, function () {}),\n initial: function initial(context) {\n if (!context[CHANNEL]) {\n return null;\n }\n\n return context[CHANNEL].getState();\n },\n subscribe: function subscribe(context, cb) {\n if (!context[CHANNEL]) {\n return null;\n }\n\n return context[CHANNEL].subscribe(cb);\n },\n unsubscribe: function unsubscribe(context, subscriptionId) {\n if (context[CHANNEL]) {\n context[CHANNEL].unsubscribe(subscriptionId);\n }\n }\n};\nvar _default = themeListener;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.isNumber = exports.isString = exports.formatMs = exports.duration = exports.easing = void 0;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n/* eslint-disable no-restricted-globals */\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nexports.easing = easing;\nvar duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nexports.duration = duration;\n\nvar formatMs = function formatMs(milliseconds) {\n return \"\".concat(Math.round(milliseconds), \"ms\");\n};\n\nexports.formatMs = formatMs;\n\nvar isString = function isString(value) {\n return typeof value === 'string';\n};\n\nexports.isString = isString;\n\nvar isNumber = function isNumber(value) {\n return !isNaN(parseFloat(value));\n};\n/**\r\n * @param {string|Array} props\r\n * @param {object} param\r\n * @param {string} param.prop\r\n * @param {number} param.duration\r\n * @param {string} param.easing\r\n * @param {number} param.delay\r\n */\n\n\nexports.isNumber = isNumber;\nvar _default = {\n easing: easing,\n duration: duration,\n create: function create() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$duration = options.duration,\n durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n _options$easing = options.easing,\n easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n _options$delay = options.delay,\n delay = _options$delay === void 0 ? 0 : _options$delay,\n other = (0, _objectWithoutProperties2.default)(options, [\"duration\", \"easing\", \"delay\"]);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isString(props) || Array.isArray(props), 'Material-UI: argument \"props\" must be a string or Array.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isNumber(durationOption) || isString(durationOption), \"Material-UI: argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\")) : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isString(easingOption), 'Material-UI: argument \"easing\" must be a string.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isNumber(delay) || isString(delay), 'Material-UI: argument \"delay\" must be a number or a string.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(Object.keys(other).length === 0, \"Material-UI: unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"]\")) : void 0;\n return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n }).join(',');\n },\n getAutoHeightDuration: function getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n\n var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n }\n};\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.sheetsManager = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _hoistNonReactStatics = _interopRequireDefault(require(\"hoist-non-react-statics\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _jss = require(\"jss\");\n\nvar _reactJssContext = _interopRequireDefault(require(\"./reactJssContext\"));\n\nvar _jssPreset = _interopRequireDefault(require(\"./jssPreset\"));\n\nvar _mergeClasses = _interopRequireDefault(require(\"./mergeClasses\"));\n\nvar _multiKeyStore = _interopRequireDefault(require(\"./multiKeyStore\"));\n\nvar _createMuiTheme = _interopRequireDefault(require(\"./createMuiTheme\"));\n\nvar _themeListener = _interopRequireDefault(require(\"./themeListener\"));\n\nvar _createGenerateClassName = _interopRequireDefault(require(\"./createGenerateClassName\"));\n\nvar _getStylesCreator = _interopRequireDefault(require(\"./getStylesCreator\"));\n\nvar _getThemeProps = _interopRequireDefault(require(\"./getThemeProps\"));\n\n/* eslint-disable no-underscore-dangle */\n// Default JSS instance.\nvar jss = (0, _jss.create)((0, _jssPreset.default)()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = (0, _createGenerateClassName.default)(); // Global index counter to preserve source order.\n// We create the style sheet during at the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\n\nvar indexCounter = -10e10; // Exported for test purposes\n\nvar sheetsManager = new Map(); // We use the same empty object to ref count the styles that don't need a theme object.\n\nexports.sheetsManager = sheetsManager;\nvar noopTheme = {}; // In order to have self-supporting components, we rely on default theme when not provided.\n\nvar defaultTheme = (0, _createMuiTheme.default)({\n typography: {\n suppressWarning: true\n }\n}); // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a ` + ("`" + `classes`))))) + (((("`" + ` property.\n\nvar withStylesOld = function withStylesOld(stylesOrCreator) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function (Component) {\n var _extends2;\n\n var _options$withTheme = options.withTheme,\n withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n _options$flip = options.flip,\n flip = _options$flip === void 0 ? null : _options$flip,\n name = options.name,\n styleSheetOptions = (0, _objectWithoutProperties2.default)(options, [\"withTheme\", \"flip\", \"name\"]);\n var stylesCreator = (0, _getStylesCreator.default)(stylesOrCreator);\n var listenToTheme = stylesCreator.themingEnabled || typeof name === 'string' || withTheme;\n indexCounter += 1;\n stylesCreator.options.index = indexCounter;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(indexCounter < 0, ['Material-UI: you might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n')) : void 0;\n\n var WithStyles =\n /*#__PURE__*/\n function (_React$Component) {\n (0, _inherits2.default)(WithStyles, _React$Component);\n\n function WithStyles(props, context) {\n var _this;\n\n (0, _classCallCheck2.default)(this, WithStyles);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(WithStyles).call(this, props, context));\n _this.jss = context[_reactJssContext.default.jss] || jss;\n _this.sheetsManager = sheetsManager;\n _this.unsubscribeId = null;\n var muiThemeProviderOptions = context.muiThemeProviderOptions;\n\n if (muiThemeProviderOptions) {\n if (muiThemeProviderOptions.sheetsManager) {\n _this.sheetsManager = muiThemeProviderOptions.sheetsManager;\n }\n\n _this.sheetsCache = muiThemeProviderOptions.sheetsCache;\n _this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration;\n } // Attach the stylesCreator to the instance of the component as in the context\n // of react-hot-loader the hooks can be executed in a different closure context:\n // https://github.com/gaearon/react-hot-loader/blob/master/src/patch.dev.js#L107\n\n\n _this.stylesCreatorSaved = stylesCreator;\n _this.sheetOptions = (0, _extends3.default)({\n generateClassName: generateClassName\n }, context[_reactJssContext.default.sheetOptions]); // We use || as the function call is lazy evaluated.\n\n _this.theme = listenToTheme ? _themeListener.default.initial(context) || defaultTheme : noopTheme;\n\n _this.attach(_this.theme);\n\n _this.cacheClasses = {\n // Cache for the finalized classes value.\n value: null,\n // Cache for the last used classes prop pointer.\n lastProp: null,\n // Cache for the last used rendered classes pointer.\n lastJSS: {}\n };\n return _this;\n }\n\n (0, _createClass2.default)(WithStyles, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n if (!listenToTheme) {\n return;\n }\n\n this.unsubscribeId = _themeListener.default.subscribe(this.context, function (theme) {\n var oldTheme = _this2.theme;\n _this2.theme = theme;\n\n _this2.attach(_this2.theme); // Rerender the component so the underlying component gets the theme update.\n // By theme update we mean receiving and applying the new class names.\n\n\n _this2.setState({}, function () {\n _this2.detach(oldTheme);\n });\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n // react-hot-loader specific logic\n if (this.stylesCreatorSaved === stylesCreator || process.env.NODE_ENV === 'production') {\n return;\n }\n\n this.detach(this.theme);\n this.stylesCreatorSaved = stylesCreator;\n this.attach(this.theme);\n this.forceUpdate();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.detach(this.theme);\n\n if (this.unsubscribeId !== null) {\n _themeListener.default.unsubscribe(this.context, this.unsubscribeId);\n }\n }\n }, {\n key: \"getClasses\",\n value: function getClasses() {\n if (this.disableStylesGeneration) {\n return this.props.classes || {};\n } // Tracks if either the rendered classes or classes prop has changed,\n // requiring the generation of a new finalized classes object.\n\n\n var generate = false;\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, this.stylesCreatorSaved, this.theme);\n\n if (sheetManager.sheet.classes !== this.cacheClasses.lastJSS) {\n this.cacheClasses.lastJSS = sheetManager.sheet.classes;\n generate = true;\n }\n\n if (this.props.classes !== this.cacheClasses.lastProp) {\n this.cacheClasses.lastProp = this.props.classes;\n generate = true;\n }\n\n if (generate) {\n this.cacheClasses.value = (0, _mergeClasses.default)({\n baseClasses: this.cacheClasses.lastJSS,\n newClasses: this.props.classes,\n Component: Component\n });\n }\n\n return this.cacheClasses.value;\n }\n }, {\n key: \"attach\",\n value: function attach(theme) {\n if (this.disableStylesGeneration) {\n return;\n }\n\n var stylesCreatorSaved = this.stylesCreatorSaved;\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, stylesCreatorSaved, theme);\n\n if (!sheetManager) {\n sheetManager = {\n refs: 0,\n sheet: null\n };\n\n _multiKeyStore.default.set(this.sheetsManager, stylesCreatorSaved, theme, sheetManager);\n }\n\n if (sheetManager.refs === 0) {\n var sheet;\n\n if (this.sheetsCache) {\n sheet = _multiKeyStore.default.get(this.sheetsCache, stylesCreatorSaved, theme);\n }\n\n if (!sheet) {\n sheet = this.createSheet(theme);\n sheet.attach();\n\n if (this.sheetsCache) {\n _multiKeyStore.default.set(this.sheetsCache, stylesCreatorSaved, theme, sheet);\n }\n }\n\n sheetManager.sheet = sheet;\n var sheetsRegistry = this.context[_reactJssContext.default.sheetsRegistry];\n\n if (sheetsRegistry) {\n sheetsRegistry.add(sheet);\n }\n }\n\n sheetManager.refs += 1;\n }\n }, {\n key: \"createSheet\",\n value: function createSheet(theme) {\n var styles = this.stylesCreatorSaved.create(theme, name);\n var meta = name;\n\n if (process.env.NODE_ENV !== 'production' && !meta) {\n // Provide a better DX outside production.\n meta = (0, _utils.getDisplayName)(Component);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(typeof meta === 'string', ['Material-UI: the component displayName is invalid. It needs to be a string.', \"Please fix the following component: \".concat(Component, \".\")].join('\\n')) : void 0;\n }\n\n var sheet = this.jss.createStyleSheet(styles, (0, _extends3.default)({\n meta: meta,\n classNamePrefix: meta,\n flip: typeof flip === 'boolean' ? flip : theme.direction === 'rtl',\n link: false\n }, this.sheetOptions, this.stylesCreatorSaved.options, {\n name: name || Component.displayName\n }, styleSheetOptions));\n return sheet;\n }\n }, {\n key: \"detach\",\n value: function detach(theme) {\n if (this.disableStylesGeneration) {\n return;\n }\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, this.stylesCreatorSaved, theme);\n\n sheetManager.refs -= 1;\n\n if (sheetManager.refs === 0) {\n _multiKeyStore.default.delete(this.sheetsManager, this.stylesCreatorSaved, theme);\n\n this.jss.removeStyleSheet(sheetManager.sheet);\n var sheetsRegistry = this.context[_reactJssContext.default.sheetsRegistry];\n\n if (sheetsRegistry) {\n sheetsRegistry.remove(sheetManager.sheet);\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n classes = _this$props.classes,\n innerRef = _this$props.innerRef,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"innerRef\"]);\n var more = (0, _getThemeProps.default)({\n theme: this.theme,\n name: name,\n props: other\n }); // Provide the theme to the wrapped component.\n // So we don't have to use the `) + ("`" + (`withTheme()` + "`"))) + ((` Higher-order Component.\n\n if (withTheme && !more.theme) {\n more.theme = this.theme;\n }\n\n return _react.default.createElement(Component, (0, _extends3.default)({}, more, {\n classes: this.getClasses(),\n ref: innerRef\n }));\n }\n }]);\n return WithStyles;\n }(_react.default.Component);\n\n process.env.NODE_ENV !== \"production\" ? WithStyles.propTypes = {\n /**\r\n * Override or extend the styles applied to the component.\r\n */\n classes: _propTypes.default.object,\n\n /**\r\n * Use that property to pass a ref callback to the decorated component.\r\n */\n innerRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])\n } : void 0;\n WithStyles.contextTypes = (0, _extends3.default)((_extends2 = {\n muiThemeProviderOptions: _propTypes.default.object\n }, (0, _defineProperty2.default)(_extends2, _reactJssContext.default.jss, _propTypes.default.object), (0, _defineProperty2.default)(_extends2, _reactJssContext.default.sheetOptions, _propTypes.default.object), (0, _defineProperty2.default)(_extends2, _reactJssContext.default.sheetsRegistry, _propTypes.default.object), _extends2), listenToTheme ? _themeListener.default.contextTypes : {});\n\n if (process.env.NODE_ENV !== 'production') {\n WithStyles.displayName = \"WithStyles(\".concat((0, _utils.getDisplayName)(Component), \")\");\n }\n\n (0, _hoistNonReactStatics.default)(WithStyles, Component);\n\n if (process.env.NODE_ENV !== 'production') {\n // Exposed for test purposes.\n WithStyles.Naked = Component;\n WithStyles.options = options;\n }\n\n return WithStyles;\n };\n};\n/* istanbul ignore if */\n\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__) {\n _utils.ponyfillGlobal.__MUI_STYLES__ = {};\n}\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__.withStyles) {\n _utils.ponyfillGlobal.__MUI_STYLES__.withStyles = withStylesOld;\n}\n\nvar _default = function _default(styles, options) {\n return _utils.ponyfillGlobal.__MUI_STYLES__.withStyles(styles, (0, _extends3.default)({\n defaultTheme: defaultTheme\n }, options));\n};\n\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n mobileStepper: 1000,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nvar _default = zIndex;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction deprecatedPropType(validator, reason) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function (props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || '<>';\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== 'undefined') {\n return new Error(\"The \".concat(location, \" ` + ("`" + `\").concat(propFullNameSafe, \"`)) + ("`" + (` of \") + \"` + "`")))) + (((`\".concat(componentNameSafe, \"` + ("`" + ` is deprecated. \").concat(reason));\n }\n\n return null;\n };\n}\n\nvar _default = deprecatedPropType;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.capitalize = capitalize;\nexports.contains = contains;\nexports.findIndex = findIndex;\nexports.find = find;\nexports.createChainedFunction = createChainedFunction;\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n// It should to be noted that this function isn't equivalent to `)) + ("`" + (`text-transform: capitalize` + "`"))) + ((`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n if (process.env.NODE_ENV !== 'production' && typeof string !== 'string') {\n throw new Error('Material-UI: capitalize(string) expects a string argument.');\n }\n\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nfunction contains(obj, pred) {\n return Object.keys(pred).every(function (key) {\n return obj.hasOwnProperty(key) && obj[key] === pred[key];\n });\n}\n\nfunction findIndex(arr, pred) {\n var predType = (0, _typeof2.default)(pred);\n\n for (var i = 0; i < arr.length; i += 1) {\n if (predType === 'function' && !!pred(arr[i], i, arr) === true) {\n return i;\n }\n\n if (predType === 'object' && contains(arr[i], pred)) {\n return i;\n }\n\n if (['string', 'number', 'boolean'].indexOf(predType) !== -1) {\n return arr.indexOf(pred);\n }\n }\n\n return -1;\n}\n\nfunction find(arr, pred) {\n var index = findIndex(arr, pred);\n return index > -1 ? arr[index] : undefined;\n}\n/**\r\n * Safe chained function\r\n *\r\n * Will only create a new function if needed,\r\n * otherwise will pass back existing functions or null.\r\n *\r\n * @param {function} functions to chain\r\n * @returns {function|null}\r\n */\n\n\nfunction createChainedFunction() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (acc, func) {\n if (func == null) {\n return acc;\n }\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(typeof func === 'function', 'Material-UI: invalid Argument Type, must only provide functions, undefined, or null.') : void 0;\n return function chainedFunction() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, function () {});\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction ownerDocument(node) {\n return node && node.ownerDocument || document;\n}\n\nvar _default = ownerDocument;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _ownerDocument = _interopRequireDefault(require(\"./ownerDocument\"));\n\nfunction ownerWindow(node) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var doc = (0, _ownerDocument.default)(node);\n return doc.defaultView || doc.parentView || fallback;\n}\n\nvar _default = ownerWindow;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cloneElementWithClassName = cloneElementWithClassName;\nexports.cloneChildrenWithClassName = cloneChildrenWithClassName;\nexports.isMuiElement = isMuiElement;\nexports.setRef = setRef;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction cloneElementWithClassName(child, className) {\n return _react.default.cloneElement(child, {\n className: (0, _classnames.default)(child.props.className, className)\n });\n}\n\nfunction cloneChildrenWithClassName(children, className) {\n return _react.default.Children.map(children, function (child) {\n return _react.default.isValidElement(child) && cloneElementWithClassName(child, className);\n });\n}\n\nfunction isMuiElement(element, muiNames) {\n return _react.default.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;\n}\n\nfunction setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction requirePropFactory(componentNameInError) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n var requireProp = function requireProp(requiredProp) {\n return function (props, propName, componentName, location, propFullName) {\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(\"The property ` + ("`" + `\".concat(propFullNameSafe, \"`)) + ("`" + (` of \") + \"` + "`")))))))) + (((((((`\".concat(componentNameInError, \"` + "`") + (` must be used on ` + ("`" + `\").concat(requiredProp, \"`))) + (("`" + (`.\"));\n }\n\n return null;\n };\n };\n\n return requireProp;\n}\n\nvar _default = requirePropFactory;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction chainPropTypes(propType1, propType2) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function validate() {\n return propType1.apply(void 0, arguments) || propType2.apply(void 0, arguments);\n };\n}\n\nvar _default = chainPropTypes;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _reactIs = require(\"react-is\");\n\n/**\n * A factory that returns a propTypes validator that only accepts values that\n * are also accepted by React.createElement\n * e.g. \"div\", functional, class components, forwardRef etc.\n *\n * @param {boolean} isRequired If ` + "`")) + (`true` + ("`" + ` returns a validator\n * that will throw if nullish values are passed\n */\nfunction createComponentProp(isRequired) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function componentPropType(props, key, componentName, location, propFullName) {\n var prop = props[key];\n var propName = propFullName || key;\n var message;\n\n if (prop == null) {\n if (isRequired) {\n message = \"The \".concat(location, \" `)))) + ((("`" + `\").concat(propName, \"`) + ("`" + (` is marked as required in ` + "`"))) + ((`\").concat(componentName, \"` + ("`" + `, \") + \"but its value is `)) + ("`" + (`\".concat((0, _typeof2.default)(prop), \"` + "`"))))) + ((((`.\");\n }\n } else if (!(0, _reactIs.isValidElementType)(prop)) {\n var preciseType = (0, _typeof2.default)(prop);\n message = \"Invalid \".concat(location, \" ` + "`") + (`\").concat(propName, \"` + ("`" + ` of type `))) + (("`" + (`\").concat(preciseType, \"` + "`")) + (` \") + \"supplied to ` + ("`" + `\".concat(componentName, \"`)))) + ((("`" + `, expected a component.\");\n }\n\n if (message != null) {\n // change error message slightly on every check to prevent caching when testing\n // which would not trigger console errors on subsequent fails\n return new Error(\"\".concat(message).concat(process.env.NODE_ENV === 'test' ? Date.now() : ''));\n }\n\n return null;\n };\n}\n\nvar componentPropType = createComponentProp(false);\ncomponentPropType.isRequired = createComponentProp(true);\nvar _default = componentPropType;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.specialProperty = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\n// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n// Only exported for test purposes.\nvar specialProperty = \"exact-prop: \\u200B\";\nexports.specialProperty = specialProperty;\n\nfunction exactProp(propTypes) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return propTypes;\n }\n\n return (0, _extends3.default)({}, propTypes, (0, _defineProperty2.default)({}, specialProperty, function (props) {\n var unsupportedProps = Object.keys(props).filter(function (prop) {\n return !propTypes.hasOwnProperty(prop);\n });\n\n if (unsupportedProps.length > 0) {\n return new Error(\"The following properties are not supported: \".concat(unsupportedProps.map(function (prop) {\n return \"`) + ("`" + (`\".concat(prop, \"` + "`"))) + ((`\");\n }).join(', '), \". Please remove them.\"));\n }\n\n return null;\n }));\n}\n\nvar _default = exactProp;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getFunctionName = getFunctionName;\nexports.default = void 0;\n// Fork of recompose/getDisplayName with added IE 11 support\n// Simplified polyfill for IE 11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nvar fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\n\nfunction getFunctionName(fn) {\n var match = \"\".concat(fn).match(fnNameMatchRegex);\n var name = match && match[1];\n return name || '';\n}\n\nfunction getDisplayName(Component) {\n if (typeof Component === 'string') {\n return Component;\n }\n\n if (!Component) {\n return undefined;\n }\n\n return Component.displayName || Component.name || getFunctionName(Component) || 'Component';\n}\n\nvar _default = getDisplayName;\nexports.default = _default;", + "/** @license Material-UI v3.0.0-alpha.3\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nexport { default as componentPropType } from './componentPropType';\nexport { default as chainPropTypes } from './chainPropTypes';\nexport { default as exactProp } from './exactProp';\nexport { default as getDisplayName } from './getDisplayName';\nexport { default as ponyfillGlobal } from './ponyfillGlobal';\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar _default = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\nexports.default = _default;", + "module.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n", + "function createBroadcast (initialState) {\n var listeners = {};\n var id = 1;\n var _state = initialState;\n\n function getState () {\n return _state\n }\n\n function setState (state) {\n _state = state;\n var keys = Object.keys(listeners);\n var i = 0;\n var len = keys.length;\n for (; i < len; i++) {\n // if a listener gets unsubscribed during setState we just skip it\n if (listeners[keys[i]]) { listeners[keys[i]](state); }\n }\n }\n\n // subscribe to changes and return the subscriptionId\n function subscribe (listener) {\n if (typeof listener !== 'function') {\n throw new Error('listener must be a function.')\n }\n var currentId = id;\n listeners[currentId] = listener;\n id += 1;\n return currentId\n }\n\n // remove subscription by removing the listener function\n function unsubscribe (id) {\n listeners[id] = undefined;\n }\n\n return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }\n}\n\nexport default createBroadcast;\n", + "/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", + "/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct ` + ("`" + `typeof`)) + ("`" + (` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", + "const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", + "const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property ` + "`")))))) + (((((`.conversion` + "`") + (` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", + "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = camelize;\nvar regExp = /[-\\s]+(.)?/g;\n\n/**\n * Convert dash separated strings to camel cased.\n *\n * @param {String} str\n * @return {String}\n */\nfunction camelize(str) {\n return str.replace(regExp, toUpper);\n}\n\nfunction toUpper(match, c) {\n return c ? c.toUpperCase() : '';\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.supportedValue = exports.supportedProperty = exports.prefix = undefined;\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nvar _supportedProperty = require('./supported-property');\n\nvar _supportedProperty2 = _interopRequireDefault(_supportedProperty);\n\nvar _supportedValue = require('./supported-value');\n\nvar _supportedValue2 = _interopRequireDefault(_supportedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = {\n prefix: _prefix2['default'],\n supportedProperty: _supportedProperty2['default'],\n supportedValue: _supportedValue2['default']\n}; /**\n * CSS Vendor prefix detection and property feature testing.\n *\n * @copyright Oleg Slobodskoi 2015\n * @website https://github.com/jsstyles/css-vendor\n * @license MIT\n */\n\nexports.prefix = _prefix2['default'];\nexports.supportedProperty = _supportedProperty2['default'];\nexports.supportedValue = _supportedValue2['default'];", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar js = ''; /**\n * Export javascript style and css style vendor prefixes.\n * Based on \"transform\" support test.\n */\n\nvar css = '';\n\n// We should not do anything if required serverside.\nif (_isInBrowser2['default']) {\n // Order matters. We need to check Webkit the last one because\n // other vendors use to add Webkit prefixes to some properties\n var jsCssMap = {\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-',\n Webkit: '-webkit-'\n };\n var style = document.createElement('p').style;\n var testProp = 'Transform';\n\n for (var key in jsCssMap) {\n if (key + testProp in style) {\n js = key;\n css = jsCssMap[key];\n break;\n }\n }\n}\n\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String}}\n * @api public\n */\nexports['default'] = { js: js, css: css };", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = supportedProperty;\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nvar _camelize = require('./camelize');\n\nvar _camelize2 = _interopRequireDefault(_camelize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar el = void 0;\nvar cache = {};\n\nif (_isInBrowser2['default']) {\n el = document.createElement('p');\n\n /**\n * We test every property on vendor prefix requirement.\n * Once tested, result is cached. It gives us up to 70% perf boost.\n * http://jsperf.com/element-style-object-access-vs-plain-object\n *\n * Prefill cache with known css properties to reduce amount of\n * properties we need to feature test at runtime.\n * http://davidwalsh.name/vendor-prefix\n */\n var computed = window.getComputedStyle(document.documentElement, '');\n for (var key in computed) {\n if (!isNaN(key)) cache[computed[key]] = computed[key];\n }\n}\n\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns ` + ("`" + `false`))) + (("`" + (` if not supported.\n *\n * @param {String} prop dash separated\n * @return {String|Boolean}\n * @api public\n */\nfunction supportedProperty(prop) {\n // For server-side rendering.\n if (!el) return prop;\n\n // We have not tested this prop yet, lets do the test.\n if (cache[prop] != null) return cache[prop];\n\n // Camelization is required because we can't test using\n // css syntax for e.g. in FF.\n // Test if property is supported as it is.\n if ((0, _camelize2['default'])(prop) in el.style) {\n cache[prop] = prop;\n }\n // Test if property is supported with vendor prefix.\n else if (_prefix2['default'].js + (0, _camelize2['default'])('-' + prop) in el.style) {\n cache[prop] = _prefix2['default'].css + prop;\n } else {\n cache[prop] = false;\n }\n\n return cache[prop];\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = supportedValue;\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar cache = {};\nvar el = void 0;\n\nif (_isInBrowser2['default']) el = document.createElement('p');\n\n/**\n * Returns prefixed value if needed. Returns ` + "`")) + (`false` + ("`" + ` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\nfunction supportedValue(property, value) {\n // For server-side rendering.\n if (!el) return value;\n\n // It is a string or a number as a string like '1'.\n // We want only prefixable values here.\n if (typeof value !== 'string' || !isNaN(parseInt(value, 10))) return value;\n\n var cacheKey = property + value;\n\n if (cache[cacheKey] != null) return cache[cacheKey];\n\n // IE can even throw an error in some cases, for e.g. style.content = 'bar'\n try {\n // Test value as it is.\n el.style[property] = value;\n } catch (err) {\n cache[cacheKey] = false;\n return false;\n }\n\n // Value is supported as it is.\n if (el.style[property] !== '') {\n cache[cacheKey] = value;\n } else {\n // Test value with vendor prefix.\n value = _prefix2['default'].css + value;\n\n // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n if (value === '-ms-flex') value = '-ms-flexbox';\n\n el.style[property] = value;\n\n // Value is supported with vendor prefix.\n if (el.style[property] !== '') cache[cacheKey] = value;\n }\n\n if (!cache[cacheKey]) cache[cacheKey] = false;\n\n // Reset style value.\n el.style[property] = '';\n\n return cache[cacheKey];\n}", + "export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", + "import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n", + "import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n", + "import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n", + "export default function(x) {\n return x === null ? NaN : +x;\n}\n", + "var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n", + "export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n", + "var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n", + "export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n", + "import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n", + "export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n", + "import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n", + "var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n", + "import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n", + "import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n", + "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", + "import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", + "export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n", + "import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n", + "import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n", + "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", + "export default function(x) {\n return function() {\n return x;\n };\n}\n", + "import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", + "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", + "import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", + "export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n", + "import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", + "import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", + "import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", + "export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n", + "import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", + "import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", + "export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n", + "var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n", + "import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", + "var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n", + "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n", + "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", + "import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n", + "export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n", + "export default function(x) {\n return function() {\n return x;\n };\n}\n", + "export default function(x) {\n return +x;\n}\n", + "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n", + "// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n", + "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n", + "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", + "import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", + "import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n", + "export default function(x) {\n return x;\n}\n", + "import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n", + "export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n", + "export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n", + "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", + "import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n", + "import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n", + "export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", + "import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n", + "import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n", + "import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n", + "import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n", + "import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n", + "var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n", + "import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n", + "export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n", + "import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n", + "import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n", + "import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n", + "import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n", + "import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n", + "import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n", + "import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n", + "import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n", + "import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n", + "import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n", + "import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n", + "import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n", + "import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n", + "import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n", + "import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n", + "import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n", + "import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n", + "import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n", + "import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\n\nexport default function() {\n return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n}\n", + "import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n k10 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) * k10;\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], k10 = x0 === x1 ? 0 : 1 / (x1 - x0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n", + "import {linearish} from \"./linear\";\n\nexport default function diverging(interpolator) {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n k10 = 1,\n k21 = 1,\n clamp = false;\n\n function scale(x) {\n var t = 0.5 + ((x = +x) - x1) * (x < x1 ? k10 : k21);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], x2 = +_[2], k10 = x0 === x1 ? 0 : 0.5 / (x1 - x0), k21 = x1 === x2 ? 0 : 0.5 / (x2 - x1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return diverging(interpolator).domain([x0, x1, x2]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n", + "export {\n default as scaleBand,\n point as scalePoint\n} from \"./band\";\n\nexport {\n default as scaleIdentity\n} from \"./identity\";\n\nexport {\n default as scaleLinear\n} from \"./linear\";\n\nexport {\n default as scaleLog\n} from \"./log\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold\";\n\nexport {\n default as scaleTime\n} from \"./time\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime\";\n\nexport {\n default as scaleSequential\n} from \"./sequential\";\n\nexport {\n default as scaleDiverging\n} from \"./diverging\";\n", + "var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n", + "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", + "export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", + "function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n", + "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", + "import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n", + "import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n", + "import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n", + "import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n", + "export var slice = Array.prototype.slice;\n", + "import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n", + "export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n", + "var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n", + "import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n", + "export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n", + "var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n", + "var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n", + "import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n", + "export default function() {}\n", + "export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n", + "import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n", + "import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n", + "import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n", + "export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n", + "function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n", + "function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n", + "function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n", + "export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n", + "export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n", + "import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n", + "export {default as arc} from \"./arc\";\nexport {default as area} from \"./area\";\nexport {default as line} from \"./line\";\nexport {default as pie} from \"./pie\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index\";\n\nexport {default as symbol, symbols} from \"./symbol\";\nexport {default as symbolCircle} from \"./symbol/circle\";\nexport {default as symbolCross} from \"./symbol/cross\";\nexport {default as symbolDiamond} from \"./symbol/diamond\";\nexport {default as symbolSquare} from \"./symbol/square\";\nexport {default as symbolStar} from \"./symbol/star\";\nexport {default as symbolTriangle} from \"./symbol/triangle\";\nexport {default as symbolWye} from \"./symbol/wye\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen\";\nexport {default as curveBasis} from \"./curve/basis\";\nexport {default as curveBundle} from \"./curve/bundle\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen\";\nexport {default as curveCardinal} from \"./curve/cardinal\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed\";\nexport {default as curveLinear} from \"./curve/linear\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone\";\nexport {default as curveNatural} from \"./curve/natural\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step\";\n\nexport {default as stack} from \"./stack\";\nexport {default as stackOffsetExpand} from \"./offset/expand\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging\";\nexport {default as stackOffsetNone} from \"./offset/none\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle\";\nexport {default as stackOrderAscending} from \"./order/ascending\";\nexport {default as stackOrderDescending} from \"./order/descending\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut\";\nexport {default as stackOrderNone} from \"./order/none\";\nexport {default as stackOrderReverse} from \"./order/reverse\";\n", + "/*! decimal.js-light v2.5.0 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*\r\n * decimal.js-light v2.5.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js-light\r\n * Copyright (c) 2018 Michael Mclaughlin \r\n * MIT Expat Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The limit on the value of `)))) + ((("`" + `precision`) + ("`" + (`, and on the value of the first argument to\r\n // ` + "`"))) + ((`toDecimalPlaces` + ("`" + `, `)) + ("`" + (`toExponential` + "`"))))) + ((((`, ` + "`") + (`toFixed` + ("`" + `, `))) + (("`" + (`toPrecision` + "`")) + (` and ` + ("`" + `toSignificantDigits`)))) + ((("`" + (`.\r\n var MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n Decimal = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed during run-time using ` + "`")) + (`Decimal.config` + ("`" + `.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `))) + (("`" + (`Decimal.config({ precision: 20 });` + "`")) + (`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used by default by ` + ("`" + `toInteger`))))))) + (((((("`" + `, `) + ("`" + (`toDecimalPlaces` + "`"))) + ((`, ` + ("`" + `toExponential`)) + ("`" + (`,\r\n // ` + "`")))) + (((`toFixed` + "`") + (`, ` + ("`" + `toPrecision`))) + (("`" + (` and ` + "`")) + (`toSignificantDigits` + ("`" + `.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `))))) + (((("`" + `Decimal.rounding = 4;`) + ("`" + (`\r\n // ` + "`"))) + ((`Decimal.rounding = Decimal.ROUND_HALF_UP;` + ("`" + `\r\n rounding: 4, // 0 to 8\r\n\r\n // The exponent value at and beneath which `)) + ("`" + (`toString` + "`")))) + (((` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -MAX_E\r\n\r\n // The exponent value at and above which ` + "`") + (`toString` + ("`" + ` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to MAX_E\r\n\r\n // The natural logarithm of 10.\r\n // 115 digits\r\n LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n ONE,\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE), // 1286742750677284\r\n\r\n // Decimal.prototype object\r\n P = {};\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * comparedTo cmp\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy idiv\r\n * equals eq\r\n * exponent\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * isInteger isint\r\n * isNegative isneg\r\n * isPositive ispos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * squareRoot sqrt\r\n * times mul\r\n * toDecimalPlaces todp\r\n * toExponential\r\n * toFixed\r\n * toInteger toint\r\n * toNumber\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits tosd\r\n * toString\r\n * valueOf val\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `))) + (("`" + (`y` + "`")) + (`,\r\n * -1 if the value of this Decimal is less than the value of ` + ("`" + `y`)))))) + ((((("`" + `,\r\n * 0 if they have the same value\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this;\r\n\r\n y = new x.constructor(y);\r\n\r\n // Signs differ?\r\n if (x.s !== y.s) return x.s || -y.s;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n xdL = x.d.length;\r\n ydL = y.d.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var x = this,\r\n w = x.d.length - 1,\r\n dp = (w - x.e) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = x.d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n return dp < 0 ? 0 : dp;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `) + ("`" + (`y` + "`"))) + ((`, truncated to\r\n * ` + ("`" + `precision`)) + ("`" + (` significant digits.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of ` + "`")))) + (((`y` + "`") + (`, truncated to ` + ("`" + `precision`))) + (("`" + (` significant digits.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of ` + "`")) + (`y` + ("`" + `, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\n P.exponent = function () {\r\n return getBase10Exponent(this);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `))))) + (((("`" + `y`) + ("`" + (`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of ` + "`"))) + ((`y` + ("`" + `,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n return this.cmp(y) >= 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isint = function () {\r\n return this.e > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isneg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.ispos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return this.s === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `)) + ("`" + (`y` + "`")))) + (((`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to ` + ("`" + `y`)) + ("`" + (`, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * ` + "`"))) + ((`precision` + ("`" + ` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var r,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n wpr = pr + 5;\r\n\r\n // Default base is 10.\r\n if (base === void 0) {\r\n base = new Ctor(10);\r\n } else {\r\n base = new Ctor(base);\r\n\r\n // log[-b](x) = NaN\r\n // log[0](x) = NaN\r\n // log[1](x) = NaN\r\n if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n }\r\n\r\n // log[b](-x) = NaN\r\n // log[b](0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // log[b](1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n external = false;\r\n r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal minus `)) + ("`" + (`y` + "`"))))))))))) + ((((((((((`, truncated to\r\n * ` + "`") + (`precision` + ("`" + ` significant digits.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `))) + (("`" + (`y` + "`")) + (`, truncated to\r\n * ` + ("`" + `precision`)))) + ((("`" + ` significant digits.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n y = new Ctor(y);\r\n\r\n // x % 0 = NaN\r\n if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n // Return x if x is 0.\r\n if (!x.s) return round(new Ctor(x), pr);\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n q = divide(x, y, 0, 1).times(y);\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `) + ("`" + (`precision` + "`"))) + ((`\r\n * significant digits.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return exp(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to ` + ("`" + `precision`)) + ("`" + (` significant digits.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return ln(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s || 0;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal plus ` + "`"))))) + ((((`y` + "`") + (`, truncated to\r\n * ` + ("`" + `precision`))) + (("`" + (` significant digits.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var e, sd, w,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n e = getBase10Exponent(x) + 1;\r\n w = x.d.length - 1;\r\n sd = w * LOG_BASE + 1;\r\n w = x.d[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n }\r\n\r\n return z && e > sd ? e : sd;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to ` + "`")) + (`precision` + ("`" + `\r\n * significant digits.\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var e, n, pr, r, s, t, wpr,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n // Negative or zero?\r\n if (x.s < 1) {\r\n if (!x.s) return new Ctor(0);\r\n\r\n // sqrt(-x) = NaN\r\n throw Error(decimalError + 'NaN');\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(x.d);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '1e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n pr = Ctor.precision;\r\n s = wpr = pr + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n n = n.slice(wpr - 3, wpr + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (s == wpr && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n round(t, pr + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n } else if (n != '9999') {\r\n break;\r\n }\r\n\r\n wpr += 4;\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal times `)))) + ((("`" + `y`) + ("`" + (`, truncated to\r\n * ` + "`"))) + ((`precision` + ("`" + ` significant digits.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n // Return 0 if either is 0.\r\n if (!x.s || !y.s) return new Ctor(0);\r\n\r\n y.s *= x.s;\r\n e = x.e + y.e;\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = e;\r\n\r\n return external ? round(y, Ctor.precision) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `)) + ("`" + (`dp` + "`")))))) + (((((`\r\n * decimal places using rounding mode ` + "`") + (`rm` + ("`" + ` or `))) + (("`" + (`rounding` + "`")) + (` if ` + ("`" + `rm`)))) + ((("`" + ` is omitted.\r\n *\r\n * If `) + ("`" + (`dp` + "`"))) + ((` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * ` + ("`" + `dp`)) + ("`" + (` fixed decimal places using rounding mode ` + "`"))))) + ((((`rounding` + "`") + (`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = toString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), dp + 1, rm);\r\n str = toString(x, true, dp + 1);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * ` + ("`" + `dp`))) + (("`" + (` fixed decimal places and rounded using rounding mode ` + "`")) + (`rm` + ("`" + ` or `)))) + ((("`" + `rounding`) + ("`" + (` if ` + "`"))) + ((`rm` + ("`" + ` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) return toString(x);\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `)) + ("`" + (`x` + "`"))))))) + ((((((` rather than ` + "`") + (`y` + ("`" + `.\r\n return x.isneg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `))) + (("`" + (`rounding` + "`")) + (`.\r\n *\r\n */\r\n P.toInteger = P.toint = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power ` + ("`" + `y`)))) + ((("`" + `,\r\n * truncated to `) + ("`" + (`precision` + "`"))) + ((` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, sign, yIsInt,\r\n x = this,\r\n Ctor = x.constructor,\r\n guard = 12,\r\n yn = +(y = new Ctor(y));\r\n\r\n // pow(x, 0) = 1\r\n if (!y.s) return new Ctor(ONE);\r\n\r\n x = new Ctor(x);\r\n\r\n // pow(0, y > 0) = 0\r\n // pow(0, y < 0) = Infinity\r\n if (!x.s) {\r\n if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n return x;\r\n }\r\n\r\n // pow(1, y) = 1\r\n if (x.eq(ONE)) return x;\r\n\r\n pr = Ctor.precision;\r\n\r\n // pow(x, 1) = x\r\n if (y.eq(ONE)) return round(x, pr);\r\n\r\n e = y.e;\r\n k = y.d.length - 1;\r\n yIsInt = e >= k;\r\n sign = x.s;\r\n\r\n if (!yIsInt) {\r\n\r\n // pow(x < 0, y non-integer) = NaN\r\n if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = new Ctor(ONE);\r\n\r\n // Max k of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (k % 2) {\r\n r = r.times(x);\r\n truncate(r.d, e);\r\n }\r\n\r\n k = mathfloor(k / 2);\r\n if (k === 0) break;\r\n\r\n x = x.times(x);\r\n truncate(x.d, e);\r\n }\r\n\r\n external = true;\r\n\r\n return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n }\r\n\r\n // Result is negative if x is negative and the last digit of integer y is odd.\r\n sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n x.s = 1;\r\n external = false;\r\n r = y.times(ln(x, pr + guard));\r\n external = true;\r\n r = exp(r);\r\n r.s = sign;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to ` + ("`" + `sd`)) + ("`" + (` significant digits\r\n * using rounding mode ` + "`"))))) + ((((`rounding` + "`") + (`.\r\n *\r\n * Return exponential notation if ` + ("`" + `sd`))) + (("`" + (` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var e, str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n e = getBase10Exponent(x);\r\n str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), sd, rm);\r\n e = getBase10Exponent(x);\r\n str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of ` + "`")) + (`sd` + ("`" + `\r\n * significant digits using rounding mode `)))) + ((("`" + `rm`) + ("`" + (`, or to ` + "`"))) + ((`precision` + ("`" + ` and `)) + ("`" + (`rounding` + "`")))))) + (((((` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return round(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * ` + "`") + (`toExpPos` + ("`" + `, or a negative exponent equal to or less than `))) + (("`" + (`toExpNeg` + "`")) + (`.\r\n *\r\n */\r\n P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n var x = this,\r\n e = getBase10Exponent(x),\r\n Ctor = x.constructor;\r\n\r\n return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * add P.minus, P.plus\r\n * checkInt32 P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n * digitsToString P.log, P.sqrt, P.pow, toString, exp, ln\r\n * divide P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n * exp P.exp, P.pow\r\n * getBase10Exponent P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n * P.toString, divide, round, toString, exp, ln\r\n * getLn10 P.log, ln\r\n * getZeroString digitsToString, toString\r\n * ln P.log, P.ln, P.pow, exp\r\n * parseDecimal Decimal\r\n * round P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n * P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n * divide, getLn10, exp, ln\r\n * subtract P.minus, P.plus\r\n * toString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n * truncate P.pow\r\n *\r\n * Throws: P.log, P.mod, P.sd, P.sqrt, P.pow, checkInt32, divide, round,\r\n * getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\n function add(x, y) {\r\n var carry, d, e, i, k, len, xd, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // If either is zero...\r\n if (!x.s || !y.s) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!y.s) y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n k = x.e;\r\n e = y.e;\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % BASE | 0;\r\n carry = temp / BASE | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * BASE + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, dp) {\r\n var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either 0?\r\n if (!x.s) return new Ctor(x);\r\n if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n e = x.e - y.e;\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n } else if (dp) {\r\n sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) return new Ctor(0);\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / LOG_BASE + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * BASE + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n k = BASE / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k);\r\n xd = multiplyInteger(xd, k);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= BASE) k = BASE - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n\r\n q.e = e;\r\n\r\n return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of ` + ("`" + `x`)))) + ((("`" + ` truncated to `) + ("`" + (`sd` + "`"))) + ((`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\n function exp(x, sd) {\r\n var denominator, guard, pow, sum, t, wpr,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n // exp(0) = 1\r\n if (!x.s) return new Ctor(ONE);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n while (x.abs().gte(0.1)) {\r\n x = x.times(t); // x = x / 2^5\r\n k += 5;\r\n }\r\n\r\n // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(ONE);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = round(pow.times(x), wpr);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n while (k--) sum = round(sum.times(sum), wpr);\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(x) {\r\n var e = x.e * LOG_BASE,\r\n w = x.d[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for (; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n\r\n if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(decimalError + 'LN10 precision limit exceeded');\r\n }\r\n\r\n return round(new Ctor(Ctor.LN10), sd);\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of ` + ("`" + `x`)) + ("`" + (` truncated to ` + "`"))))) + ((((`sd` + "`") + (` significant\r\n * digits.\r\n *\r\n * ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\n function ln(y, sd) {\r\n var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // ln(-x) = NaN\r\n // ln(0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // ln(1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n if (x.eq(10)) {\r\n if (sd == null) external = true;\r\n return getLn10(Ctor, wpr);\r\n }\r\n\r\n wpr += guard;\r\n Ctor.precision = wpr;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n e = getBase10Exponent(x);\r\n\r\n if (Math.abs(e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(x, pr)) : x;\r\n }\r\n\r\n // x is reduced to a value near 1.\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n x2 = round(x.times(x), wpr);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = round(numerator.times(x2), wpr);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal ` + ("`" + `x`))) + (("`" + (` from string ` + "`")) + (`str` + ("`" + `.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n e = e - i - 1;\r\n x.e = mathfloor(e / LOG_BASE);\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n } else {\r\n\r\n // Zero.\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round `)))) + ((("`" + (`x` + "`")) + (` to ` + ("`" + `sd`))) + (("`" + (` significant digits, using rounding mode ` + "`")) + (`rm` + ("`" + ` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n var i, j, k, n, rd, doRound, w, xdi,\r\n xd = x.d;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // n: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n i = sd - n;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) return x;\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - n.\r\n j = i - LOG_BASE + n;\r\n }\r\n\r\n if (rm !== void 0) {\r\n k = mathpow(10, n - j - 1);\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / k % 10 | 0;\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n // The expression `)))))))) + ((((((("`" + `w % mathpow(10, n - j - 1)`) + ("`" + (` returns all the digits of w to the right of the\r\n // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n // 714.\r\n\r\n doRound = rm < 4\r\n ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n }\r\n\r\n if (sd < 1 || !xd[0]) {\r\n if (doRound) {\r\n k = getBase10Exponent(x);\r\n xd.length = 1;\r\n\r\n // Convert sd to decimal places.\r\n sd = sd - k - 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n } else {\r\n xd.length = 1;\r\n\r\n // Zero.\r\n xd[0] = x.e = x.s = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (doRound) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n if ((xd[0] += k) == BASE) {\r\n xd[0] = 1;\r\n ++x.e;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function subtract(x, y) {\r\n var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // Return y negated if x is zero.\r\n // Return x if y is zero and x is non-zero.\r\n if (!x.s || !y.s) {\r\n if (y.s) y.s = -y.s;\r\n else y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are non-zero numbers with the same sign.\r\n\r\n e = y.e;\r\n xe = x.e;\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of zeros\r\n // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n // limiting the number of zeros to ` + "`"))) + ((`Math.ceil(pr / LOG_BASE) + 2` + ("`" + `.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to xd if shorter.\r\n // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(0);\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function toString(x, isExp, sd) {\r\n var k,\r\n e = getBase10Exponent(x),\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (e < 0 ? 'e' : 'e+') + e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * clone\r\n * config/set\r\n */\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * value {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(value) {\r\n var x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (value instanceof Decimal) {\r\n x.s = value.s;\r\n x.e = value.e;\r\n x.d = (value = value.d) ? value.slice() : value;\r\n return;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n\r\n // Reject Infinity/NaN.\r\n if (value * 0 !== 0) {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n if (value > 0) {\r\n x.s = 1;\r\n } else if (value < 0) {\r\n value = -value;\r\n x.s = -1;\r\n } else {\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (value === ~~value && value < 1e7) {\r\n x.e = 0;\r\n x.d = [value];\r\n return;\r\n }\r\n\r\n return parseDecimal(x, value.toString());\r\n } else if (typeof value !== 'string') {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n // Minus sign?\r\n if (value.charCodeAt(0) === 45) {\r\n value = value.slice(1);\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n if (isDecimal.test(value)) parseDecimal(x, value);\r\n else throw Error(invalidArgument + value);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n Decimal.clone = clone;\r\n Decimal.config = Decimal.set = config;\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `)) + ("`" + (`obj` + "`")))) + (((` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n throw Error(decimalError + 'Object expected');\r\n }\r\n var i, p, v,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -1 / 0, 0,\r\n 'toExpPos', 0, 1 / 0\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if ((v = obj[p = ps[i]]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if ((v = obj[p = 'LN10']) !== void 0) {\r\n if (v == Math.LN10) this[p] = new this(v);\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(Decimal);\r\n\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Internal constant.\r\n ONE = new Decimal(1);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self\r\n ? self : Function('return this')();\r\n }\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n", + "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = addClass;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nfunction addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className);\n}\n\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = hasClass;\n\nfunction hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);else return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\nmodule.exports = exports[\"default\"];", + "'use strict';\n\nfunction replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp('(^|\\\\s)' + classToRemove + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};", + "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the ` + "`") + (`throw` + ("`" + ` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `))) + (("`" + (`events` + "`")) + (` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n", + "'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar ReactIs = require('react-is');\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\n\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\n\nvar TYPE_STATICS = {};\nTYPE_STATICS[ReactIs.ForwardRef] = FORWARD_REF_STATICS;\n\nfunction getStatics(component) {\n if (ReactIs.isMemo(component)) {\n return MEMO_STATICS;\n }\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n", + "/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n", + "var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexport var isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\nexport default isBrowser;\n", + "/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true\n && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor,prot;\n\n if (isObjectObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n};\n", + "/*!\n * isobject \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = camelCase;\n\nvar _hyphenateStyleName = require('hyphenate-style-name');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Convert camel cased property names to dash separated.\n *\n * @param {Object} style\n * @return {Object}\n */\nfunction convertCase(style) {\n var converted = {};\n\n for (var prop in style) {\n converted[(0, _hyphenateStyleName2['default'])(prop)] = style[prop];\n }\n\n if (style.fallbacks) {\n if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n }\n\n return converted;\n}\n\n/**\n * Allow camel cased property names by converting them back to dasherized.\n *\n * @param {Rule} rule\n */\nfunction camelCase() {\n function onProcessStyle(style) {\n if (Array.isArray(style)) {\n // Handle rules like @font-face, which can have multiple styles in an array\n for (var index = 0; index < style.length; index++) {\n style[index] = convertCase(style[index]);\n }\n return style;\n }\n\n return convertCase(style);\n }\n\n function onChangeValue(value, prop, rule) {\n var hyphenatedProp = (0, _hyphenateStyleName2['default'])(prop);\n\n // There was no camel case in place\n if (prop === hyphenatedProp) return value;\n\n rule.prop(hyphenatedProp, value);\n\n // Core will ignore that property value we set the proper one above.\n return null;\n }\n\n return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Generated jss-default-unit CSS property units\n *\n * @type object\n */\nexports['default'] = {\n 'animation-delay': 'ms',\n 'animation-duration': 'ms',\n 'background-position': 'px',\n 'background-position-x': 'px',\n 'background-position-y': 'px',\n 'background-size': 'px',\n border: 'px',\n 'border-bottom': 'px',\n 'border-bottom-left-radius': 'px',\n 'border-bottom-right-radius': 'px',\n 'border-bottom-width': 'px',\n 'border-left': 'px',\n 'border-left-width': 'px',\n 'border-radius': 'px',\n 'border-right': 'px',\n 'border-right-width': 'px',\n 'border-spacing': 'px',\n 'border-top': 'px',\n 'border-top-left-radius': 'px',\n 'border-top-right-radius': 'px',\n 'border-top-width': 'px',\n 'border-width': 'px',\n 'border-after-width': 'px',\n 'border-before-width': 'px',\n 'border-end-width': 'px',\n 'border-horizontal-spacing': 'px',\n 'border-start-width': 'px',\n 'border-vertical-spacing': 'px',\n bottom: 'px',\n 'box-shadow': 'px',\n 'column-gap': 'px',\n 'column-rule': 'px',\n 'column-rule-width': 'px',\n 'column-width': 'px',\n 'flex-basis': 'px',\n 'font-size': 'px',\n 'font-size-delta': 'px',\n height: 'px',\n left: 'px',\n 'letter-spacing': 'px',\n 'logical-height': 'px',\n 'logical-width': 'px',\n margin: 'px',\n 'margin-after': 'px',\n 'margin-before': 'px',\n 'margin-bottom': 'px',\n 'margin-left': 'px',\n 'margin-right': 'px',\n 'margin-top': 'px',\n 'max-height': 'px',\n 'max-width': 'px',\n 'margin-end': 'px',\n 'margin-start': 'px',\n 'mask-position-x': 'px',\n 'mask-position-y': 'px',\n 'mask-size': 'px',\n 'max-logical-height': 'px',\n 'max-logical-width': 'px',\n 'min-height': 'px',\n 'min-width': 'px',\n 'min-logical-height': 'px',\n 'min-logical-width': 'px',\n motion: 'px',\n 'motion-offset': 'px',\n outline: 'px',\n 'outline-offset': 'px',\n 'outline-width': 'px',\n padding: 'px',\n 'padding-bottom': 'px',\n 'padding-left': 'px',\n 'padding-right': 'px',\n 'padding-top': 'px',\n 'padding-after': 'px',\n 'padding-before': 'px',\n 'padding-end': 'px',\n 'padding-start': 'px',\n 'perspective-origin-x': '%',\n 'perspective-origin-y': '%',\n perspective: 'px',\n right: 'px',\n 'shape-margin': 'px',\n size: 'px',\n 'text-indent': 'px',\n 'text-stroke': 'px',\n 'text-stroke-width': 'px',\n top: 'px',\n 'transform-origin': '%',\n 'transform-origin-x': '%',\n 'transform-origin-y': '%',\n 'transform-origin-z': '%',\n 'transition-delay': 'ms',\n 'transition-duration': 'ms',\n 'vertical-align': 'px',\n width: 'px',\n 'word-spacing': 'px',\n // Not existing properties.\n // Used to avoid issues with jss-expand intergration.\n 'box-shadow-x': 'px',\n 'box-shadow-y': 'px',\n 'box-shadow-blur': 'px',\n 'box-shadow-spread': 'px',\n 'font-line-height': 'px',\n 'text-shadow-x': 'px',\n 'text-shadow-y': 'px',\n 'text-shadow-blur': 'px'\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = defaultUnit;\n\nvar _defaultUnits = require('./defaultUnits');\n\nvar _defaultUnits2 = _interopRequireDefault(_defaultUnits);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Clones the object and adds a camel cased property version.\n */\nfunction addCamelCasedVersion(obj) {\n var regExp = /(-[a-z])/g;\n var replace = function replace(str) {\n return str[1].toUpperCase();\n };\n var newObj = {};\n for (var key in obj) {\n newObj[key] = obj[key];\n newObj[key.replace(regExp, replace)] = obj[key];\n }\n return newObj;\n}\n\nvar units = addCamelCasedVersion(_defaultUnits2['default']);\n\n/**\n * Recursive deep style passing function\n *\n * @param {String} current property\n * @param {(Object|Array|Number|String)} property value\n * @param {Object} options\n * @return {(Object|Array|Number|String)} resulting value\n */\nfunction iterate(prop, value, options) {\n if (!value) return value;\n\n var convertedValue = value;\n\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n if (type === 'object' && Array.isArray(value)) type = 'array';\n\n switch (type) {\n case 'object':\n if (prop === 'fallbacks') {\n for (var innerProp in value) {\n value[innerProp] = iterate(innerProp, value[innerProp], options);\n }\n break;\n }\n for (var _innerProp in value) {\n value[_innerProp] = iterate(prop + '-' + _innerProp, value[_innerProp], options);\n }\n break;\n case 'array':\n for (var i = 0; i < value.length; i++) {\n value[i] = iterate(prop, value[i], options);\n }\n break;\n case 'number':\n if (value !== 0) {\n convertedValue = value + (options[prop] || units[prop] || '');\n }\n break;\n default:\n break;\n }\n\n return convertedValue;\n}\n\n/**\n * Add unit to numeric values.\n */\nfunction defaultUnit() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var camelCasedOptions = addCamelCasedVersion(options);\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n for (var prop in style) {\n style[prop] = iterate(prop, style[prop], camelCasedOptions);\n }\n\n return style;\n }\n\n function onChangeValue(value, prop) {\n return iterate(prop, value, camelCasedOptions);\n }\n\n return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports['default'] = jssGlobal;\n\nvar _jss = require('jss');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar propKey = '@global';\nvar prefixKey = '@global ';\n\nvar GlobalContainerRule = function () {\n function GlobalContainerRule(key, styles, options) {\n _classCallCheck(this, GlobalContainerRule);\n\n this.type = 'global';\n\n this.key = key;\n this.options = options;\n this.rules = new _jss.RuleList(_extends({}, options, {\n parent: this\n }));\n\n for (var selector in styles) {\n this.rules.add(selector, styles[selector], { selector: selector });\n }\n\n this.rules.process();\n }\n\n /**\n * Get a rule.\n */\n\n\n _createClass(GlobalContainerRule, [{\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Create and register rule, run plugins.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, style, options) {\n var rule = this.rules.add(name, style, options);\n this.options.jss.plugins.onProcessRule(rule);\n return rule;\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n return this.rules.toString();\n }\n }]);\n\n return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule = function () {\n function GlobalPrefixedRule(name, style, options) {\n _classCallCheck(this, GlobalPrefixedRule);\n\n this.name = name;\n this.options = options;\n var selector = name.substr(prefixKey.length);\n this.rule = options.jss.createRule(selector, style, _extends({}, options, {\n parent: this,\n selector: selector\n }));\n }\n\n _createClass(GlobalPrefixedRule, [{\n key: 'toString',\n value: function toString(options) {\n return this.rule.toString(options);\n }\n }]);\n\n return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n var parts = selector.split(separatorRegExp);\n var scoped = '';\n for (var i = 0; i < parts.length; i++) {\n scoped += scope + ' ' + parts[i].trim();\n if (parts[i + 1]) scoped += ', ';\n }\n return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule) {\n var options = rule.options,\n style = rule.style;\n\n var rules = style[propKey];\n\n if (!rules) return;\n\n for (var name in rules) {\n options.sheet.addRule(name, rules[name], _extends({}, options, {\n selector: addScope(name, rule.selector)\n }));\n }\n\n delete style[propKey];\n}\n\nfunction handlePrefixedGlobalRule(rule) {\n var options = rule.options,\n style = rule.style;\n\n for (var prop in style) {\n if (prop.substr(0, propKey.length) !== propKey) continue;\n\n var selector = addScope(prop.substr(propKey.length), rule.selector);\n options.sheet.addRule(selector, style[prop], _extends({}, options, {\n selector: selector\n }));\n delete style[prop];\n }\n}\n\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssGlobal() {\n function onCreateRule(name, styles, options) {\n if (name === propKey) {\n return new GlobalContainerRule(name, styles, options);\n }\n\n if (name[0] === '@' && name.substr(0, prefixKey.length) === prefixKey) {\n return new GlobalPrefixedRule(name, styles, options);\n }\n\n var parent = options.parent;\n\n\n if (parent) {\n if (parent.type === 'global' || parent.options.parent.type === 'global') {\n options.global = true;\n }\n }\n\n if (options.global) options.selector = name;\n\n return null;\n }\n\n function onProcessRule(rule) {\n if (rule.type !== 'style') return;\n\n handleNestedGlobalContainerRule(rule);\n handlePrefixedGlobalRule(rule);\n }\n\n return { onCreateRule: onCreateRule, onProcessRule: onProcessRule };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = jssNested;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssNested() {\n // Get a function to be used for $ref replacement.\n function getReplaceRef(container) {\n return function (match, key) {\n var rule = container.getRule(key);\n if (rule) return rule.selector;\n (0, _warning2.default)(false, '[JSS] Could not find the referenced rule %s in %s.', key, container.options.meta || container);\n return key;\n };\n }\n\n var hasAnd = function hasAnd(str) {\n return str.indexOf('&') !== -1;\n };\n\n function replaceParentRefs(nestedProp, parentProp) {\n var parentSelectors = parentProp.split(separatorRegExp);\n var nestedSelectors = nestedProp.split(separatorRegExp);\n\n var result = '';\n\n for (var i = 0; i < parentSelectors.length; i++) {\n var parent = parentSelectors[i];\n\n for (var j = 0; j < nestedSelectors.length; j++) {\n var nested = nestedSelectors[j];\n if (result) result += ', ';\n // Replace all & by the parent or prefix & with the parent.\n result += hasAnd(nested) ? nested.replace(parentRegExp, parent) : parent + ' ' + nested;\n }\n }\n\n return result;\n }\n\n function getOptions(rule, container, options) {\n // Options has been already created, now we only increase index.\n if (options) return _extends({}, options, { index: options.index + 1 });\n\n var nestingLevel = rule.options.nestingLevel;\n\n nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n return _extends({}, rule.options, {\n nestingLevel: nestingLevel,\n index: container.indexOf(rule) + 1\n });\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n var container = rule.options.parent;\n var options = void 0;\n var replaceRef = void 0;\n for (var prop in style) {\n var isNested = hasAnd(prop);\n var isNestedConditional = prop[0] === '@';\n\n if (!isNested && !isNestedConditional) continue;\n\n options = getOptions(rule, container, options);\n\n if (isNested) {\n var selector = replaceParentRefs(prop, rule.selector\n // Lazily create the ref replacer function just once for\n // all nested rules within the sheet.\n );if (!replaceRef) replaceRef = getReplaceRef(container\n // Replace all $refs.\n );selector = selector.replace(refRegExp, replaceRef);\n\n container.addRule(selector, style[prop], _extends({}, options, { selector: selector }));\n } else if (isNestedConditional) {\n container\n // Place conditional right after the parent rule to ensure right ordering.\n .addRule(prop, null, options).addRule(rule.key, style[prop], { selector: rule.selector });\n }\n\n delete style[prop];\n }\n\n return style;\n }\n\n return { onProcessStyle: onProcessStyle };\n}", + "/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '` + ("`" + `warning(condition, format, ...args)`))))) + (((("`" + ` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = jssPropsSort;\n/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n function sort(prop0, prop1) {\n return prop0.length - prop1.length;\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n var newStyle = {};\n var props = Object.keys(style).sort(sort);\n for (var prop in props) {\n newStyle[props[prop]] = style[props[prop]];\n }\n return newStyle;\n }\n\n return { onProcessStyle: onProcessStyle };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = jssVendorPrefixer;\n\nvar _cssVendor = require('css-vendor');\n\nvar vendor = _interopRequireWildcard(_cssVendor);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n/**\n * Add vendor prefix to a property name when needed.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssVendorPrefixer() {\n function onProcessRule(rule) {\n if (rule.type === 'keyframes') {\n rule.key = '@' + vendor.prefix.css + rule.key.substr(1);\n }\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n for (var prop in style) {\n var value = style[prop];\n\n var changeProp = false;\n var supportedProp = vendor.supportedProperty(prop);\n if (supportedProp && supportedProp !== prop) changeProp = true;\n\n var changeValue = false;\n var supportedValue = vendor.supportedValue(supportedProp, value);\n if (supportedValue && supportedValue !== value) changeValue = true;\n\n if (changeProp || changeValue) {\n if (changeProp) delete style[prop];\n style[supportedProp || prop] = supportedValue || value;\n }\n }\n\n return style;\n }\n\n function onChangeValue(value, prop) {\n return vendor.supportedValue(prop, value);\n }\n\n return { onProcessRule: onProcessRule, onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _StyleSheet = require('./StyleSheet');\n\nvar _StyleSheet2 = _interopRequireDefault(_StyleSheet);\n\nvar _PluginsRegistry = require('./PluginsRegistry');\n\nvar _PluginsRegistry2 = _interopRequireDefault(_PluginsRegistry);\n\nvar _rules = require('./plugins/rules');\n\nvar _rules2 = _interopRequireDefault(_rules);\n\nvar _observables = require('./plugins/observables');\n\nvar _observables2 = _interopRequireDefault(_observables);\n\nvar _functions = require('./plugins/functions');\n\nvar _functions2 = _interopRequireDefault(_functions);\n\nvar _sheets = require('./sheets');\n\nvar _sheets2 = _interopRequireDefault(_sheets);\n\nvar _StyleRule = require('./rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createGenerateClassName = require('./utils/createGenerateClassName');\n\nvar _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName);\n\nvar _createRule2 = require('./utils/createRule');\n\nvar _createRule3 = _interopRequireDefault(_createRule2);\n\nvar _DomRenderer = require('./renderers/DomRenderer');\n\nvar _DomRenderer2 = _interopRequireDefault(_DomRenderer);\n\nvar _VirtualRenderer = require('./renderers/VirtualRenderer');\n\nvar _VirtualRenderer2 = _interopRequireDefault(_VirtualRenderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultPlugins = _rules2['default'].concat([_observables2['default'], _functions2['default']]);\n\nvar instanceCounter = 0;\n\nvar Jss = function () {\n function Jss(options) {\n _classCallCheck(this, Jss);\n\n this.id = instanceCounter++;\n this.version = \"9.8.7\";\n this.plugins = new _PluginsRegistry2['default']();\n this.options = {\n createGenerateClassName: _createGenerateClassName2['default'],\n Renderer: _isInBrowser2['default'] ? _DomRenderer2['default'] : _VirtualRenderer2['default'],\n plugins: []\n };\n this.generateClassName = (0, _createGenerateClassName2['default'])();\n\n // eslint-disable-next-line prefer-spread\n this.use.apply(this, defaultPlugins);\n this.setup(options);\n }\n\n _createClass(Jss, [{\n key: 'setup',\n value: function setup() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (options.createGenerateClassName) {\n this.options.createGenerateClassName = options.createGenerateClassName;\n // $FlowFixMe\n this.generateClassName = options.createGenerateClassName();\n }\n\n if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n if (options.virtual || options.Renderer) {\n this.options.Renderer = options.Renderer || (options.virtual ? _VirtualRenderer2['default'] : _DomRenderer2['default']);\n }\n\n // eslint-disable-next-line prefer-spread\n if (options.plugins) this.use.apply(this, options.plugins);\n\n return this;\n }\n\n /**\n * Create a Style Sheet.\n */\n\n }, {\n key: 'createStyleSheet',\n value: function createStyleSheet(styles) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var index = options.index;\n if (typeof index !== 'number') {\n index = _sheets2['default'].index === 0 ? 0 : _sheets2['default'].index + 1;\n }\n var sheet = new _StyleSheet2['default'](styles, _extends({}, options, {\n jss: this,\n generateClassName: options.generateClassName || this.generateClassName,\n insertionPoint: this.options.insertionPoint,\n Renderer: this.options.Renderer,\n index: index\n }));\n this.plugins.onProcessSheet(sheet);\n\n return sheet;\n }\n\n /**\n * Detach the Style Sheet and remove it from the registry.\n */\n\n }, {\n key: 'removeStyleSheet',\n value: function removeStyleSheet(sheet) {\n sheet.detach();\n _sheets2['default'].remove(sheet);\n return this;\n }\n\n /**\n * Create a rule without a Style Sheet.\n */\n\n }, {\n key: 'createRule',\n value: function createRule(name) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Enable rule without name for inline styles.\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n options = style;\n style = name;\n name = undefined;\n }\n\n // Cast from RuleFactoryOptions to RuleOptions\n // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n var ruleOptions = options;\n\n ruleOptions.jss = this;\n ruleOptions.Renderer = this.options.Renderer;\n if (!ruleOptions.generateClassName) ruleOptions.generateClassName = this.generateClassName;\n if (!ruleOptions.classes) ruleOptions.classes = {};\n var rule = (0, _createRule3['default'])(name, style, ruleOptions);\n\n if (!ruleOptions.selector && rule instanceof _StyleRule2['default']) {\n rule.selector = '.' + ruleOptions.generateClassName(rule);\n }\n\n this.plugins.onProcessRule(rule);\n\n return rule;\n }\n\n /**\n * Register plugin. Passed function will be invoked with a rule instance.\n */\n\n }, {\n key: 'use',\n value: function use() {\n var _this = this;\n\n for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n plugins.forEach(function (plugin) {\n // Avoids applying same plugin twice, at least based on ref.\n if (_this.options.plugins.indexOf(plugin) === -1) {\n _this.options.plugins.push(plugin);\n _this.plugins.use(plugin);\n }\n });\n\n return this;\n }\n }]);\n\n return Jss;\n}();\n\nexports['default'] = Jss;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PluginsRegistry = function () {\n function PluginsRegistry() {\n _classCallCheck(this, PluginsRegistry);\n\n this.hooks = {\n onCreateRule: [],\n onProcessRule: [],\n onProcessStyle: [],\n onProcessSheet: [],\n onChangeValue: [],\n onUpdate: []\n\n /**\n * Call `) + ("`" + (`onCreateRule` + "`"))) + ((` hooks and return an object if returned by a hook.\n */\n };\n }\n\n _createClass(PluginsRegistry, [{\n key: 'onCreateRule',\n value: function onCreateRule(name, decl, options) {\n for (var i = 0; i < this.hooks.onCreateRule.length; i++) {\n var rule = this.hooks.onCreateRule[i](name, decl, options);\n if (rule) return rule;\n }\n return null;\n }\n\n /**\n * Call ` + ("`" + `onProcessRule`)) + ("`" + (` hooks.\n */\n\n }, {\n key: 'onProcessRule',\n value: function onProcessRule(rule) {\n if (rule.isProcessed) return;\n var sheet = rule.options.sheet;\n\n for (var i = 0; i < this.hooks.onProcessRule.length; i++) {\n this.hooks.onProcessRule[i](rule, sheet);\n }\n\n // $FlowFixMe\n if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n\n rule.isProcessed = true;\n }\n\n /**\n * Call ` + "`")))) + (((`onProcessStyle` + "`") + (` hooks.\n */\n\n }, {\n key: 'onProcessStyle',\n value: function onProcessStyle(style, rule, sheet) {\n var nextStyle = style;\n\n for (var i = 0; i < this.hooks.onProcessStyle.length; i++) {\n nextStyle = this.hooks.onProcessStyle[i](nextStyle, rule, sheet);\n // $FlowFixMe\n rule.style = nextStyle;\n }\n }\n\n /**\n * Call ` + ("`" + `onProcessSheet`))) + (("`" + (` hooks.\n */\n\n }, {\n key: 'onProcessSheet',\n value: function onProcessSheet(sheet) {\n for (var i = 0; i < this.hooks.onProcessSheet.length; i++) {\n this.hooks.onProcessSheet[i](sheet);\n }\n }\n\n /**\n * Call ` + "`")) + (`onUpdate` + ("`" + ` hooks.\n */\n\n }, {\n key: 'onUpdate',\n value: function onUpdate(data, rule, sheet) {\n for (var i = 0; i < this.hooks.onUpdate.length; i++) {\n this.hooks.onUpdate[i](data, rule, sheet);\n }\n }\n\n /**\n * Call `)))))) + ((((("`" + `onChangeValue`) + ("`" + (` hooks.\n */\n\n }, {\n key: 'onChangeValue',\n value: function onChangeValue(value, prop, rule) {\n var processedValue = value;\n for (var i = 0; i < this.hooks.onChangeValue.length; i++) {\n processedValue = this.hooks.onChangeValue[i](processedValue, prop, rule);\n }\n return processedValue;\n }\n\n /**\n * Register a plugin.\n * If function is passed, it is a shortcut for ` + "`"))) + ((`{onProcessRule}` + ("`" + `.\n */\n\n }, {\n key: 'use',\n value: function use(plugin) {\n for (var name in plugin) {\n if (this.hooks[name]) this.hooks[name].push(plugin[name]);else (0, _warning2['default'])(false, '[JSS] Unknown hook \"%s\".', name);\n }\n }\n }]);\n\n return PluginsRegistry;\n}();\n\nexports['default'] = PluginsRegistry;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _createRule = require('./utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nvar _linkRule = require('./utils/linkRule');\n\nvar _linkRule2 = _interopRequireDefault(_linkRule);\n\nvar _StyleRule = require('./rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _escape = require('./utils/escape');\n\nvar _escape2 = _interopRequireDefault(_escape);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Contains rules objects and allows adding/removing etc.\n * Is used for e.g. by `)) + ("`" + (`StyleSheet` + "`")))) + (((` or ` + "`") + (`ConditionalRule` + ("`" + `.\n */\nvar RuleList = function () {\n\n // Original styles object.\n function RuleList(options) {\n var _this = this;\n\n _classCallCheck(this, RuleList);\n\n this.map = {};\n this.raw = {};\n this.index = [];\n\n this.update = function (name, data) {\n var _options = _this.options,\n plugins = _options.jss.plugins,\n sheet = _options.sheet;\n\n if (typeof name === 'string') {\n plugins.onUpdate(data, _this.get(name), sheet);\n } else {\n for (var index = 0; index < _this.index.length; index++) {\n plugins.onUpdate(name, _this.index[index], sheet);\n }\n }\n };\n\n this.options = options;\n this.classes = options.classes;\n }\n\n /**\n * Create and register rule.\n *\n * Will not render after Style Sheet was rendered the first time.\n */\n\n\n // Used to ensure correct rules order.\n\n // Rules registry for access by .get() method.\n // It contains the same rule registered by name and by selector.\n\n\n _createClass(RuleList, [{\n key: 'add',\n value: function add(name, decl, options) {\n var _options2 = this.options,\n parent = _options2.parent,\n sheet = _options2.sheet,\n jss = _options2.jss,\n Renderer = _options2.Renderer,\n generateClassName = _options2.generateClassName;\n\n\n options = _extends({\n classes: this.classes,\n parent: parent,\n sheet: sheet,\n jss: jss,\n Renderer: Renderer,\n generateClassName: generateClassName\n }, options);\n\n if (!options.selector && this.classes[name]) {\n options.selector = '.' + (0, _escape2['default'])(this.classes[name]);\n }\n\n this.raw[name] = decl;\n\n var rule = (0, _createRule2['default'])(name, decl, options);\n\n var className = void 0;\n\n if (!options.selector && rule instanceof _StyleRule2['default']) {\n className = generateClassName(rule, sheet);\n rule.selector = '.' + (0, _escape2['default'])(className);\n }\n\n this.register(rule, className);\n\n var index = options.index === undefined ? this.index.length : options.index;\n this.index.splice(index, 0, rule);\n\n return rule;\n }\n\n /**\n * Get a rule.\n */\n\n }, {\n key: 'get',\n value: function get(name) {\n return this.map[name];\n }\n\n /**\n * Delete a rule.\n */\n\n }, {\n key: 'remove',\n value: function remove(rule) {\n this.unregister(rule);\n this.index.splice(this.indexOf(rule), 1);\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.index.indexOf(rule);\n }\n\n /**\n * Run `))) + (("`" + (`onProcessRule()` + "`")) + (` plugins on every rule.\n */\n\n }, {\n key: 'process',\n value: function process() {\n var plugins = this.options.jss.plugins;\n // We need to clone array because if we modify the index somewhere else during a loop\n // we end up with very hard-to-track-down side effects.\n\n this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n }\n\n /**\n * Register a rule in ` + ("`" + `.map`))))) + (((("`" + ` and `) + ("`" + (`.classes` + "`"))) + ((` maps.\n */\n\n }, {\n key: 'register',\n value: function register(rule, className) {\n this.map[rule.key] = rule;\n if (rule instanceof _StyleRule2['default']) {\n this.map[rule.selector] = rule;\n if (className) this.classes[rule.key] = className;\n }\n }\n\n /**\n * Unregister a rule.\n */\n\n }, {\n key: 'unregister',\n value: function unregister(rule) {\n delete this.map[rule.key];\n if (rule instanceof _StyleRule2['default']) {\n delete this.map[rule.selector];\n delete this.classes[rule.key];\n }\n }\n\n /**\n * Update the function values with a new data.\n */\n\n }, {\n key: 'link',\n\n\n /**\n * Link renderable rules with CSSRuleList.\n */\n value: function link(cssRules) {\n var map = this.options.sheet.renderer.getUnescapedKeysMap(this.index);\n\n for (var i = 0; i < cssRules.length; i++) {\n var cssRule = cssRules[i];\n var _key = this.options.sheet.renderer.getKey(cssRule);\n if (map[_key]) _key = map[_key];\n var rule = this.map[_key];\n if (rule) (0, _linkRule2['default'])(rule, cssRule);\n }\n }\n\n /**\n * Convert rules to a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n var str = '';\n var sheet = this.options.sheet;\n\n var link = sheet ? sheet.options.link : false;\n\n for (var index = 0; index < this.index.length; index++) {\n var rule = this.index[index];\n var css = rule.toString(options);\n\n // No need to render an empty rule.\n if (!css && !link) continue;\n\n if (str) str += '\\n';\n str += css;\n }\n\n return str;\n }\n }]);\n\n return RuleList;\n}();\n\nexports['default'] = RuleList;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n */\nvar SheetsManager = function () {\n function SheetsManager() {\n _classCallCheck(this, SheetsManager);\n\n this.sheets = [];\n this.refs = [];\n this.keys = [];\n }\n\n _createClass(SheetsManager, [{\n key: 'get',\n value: function get(key) {\n var index = this.keys.indexOf(key);\n return this.sheets[index];\n }\n }, {\n key: 'add',\n value: function add(key, sheet) {\n var sheets = this.sheets,\n refs = this.refs,\n keys = this.keys;\n\n var index = sheets.indexOf(sheet);\n\n if (index !== -1) return index;\n\n sheets.push(sheet);\n refs.push(0);\n keys.push(key);\n\n return sheets.length - 1;\n }\n }, {\n key: 'manage',\n value: function manage(key) {\n var index = this.keys.indexOf(key);\n var sheet = this.sheets[index];\n if (this.refs[index] === 0) sheet.attach();\n this.refs[index]++;\n if (!this.keys[index]) this.keys.splice(index, 0, key);\n return sheet;\n }\n }, {\n key: 'unmanage',\n value: function unmanage(key) {\n var index = this.keys.indexOf(key);\n if (index === -1) {\n // eslint-ignore-next-line no-console\n (0, _warning2['default'])(false, \"SheetsManager: can't find sheet to unmanage\");\n return;\n }\n if (this.refs[index] > 0) {\n this.refs[index]--;\n if (this.refs[index] === 0) this.sheets[index].detach();\n }\n }\n }, {\n key: 'size',\n get: function get() {\n return this.keys.length;\n }\n }]);\n\n return SheetsManager;\n}();\n\nexports['default'] = SheetsManager;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Sheets registry to access them all at one place.\n */\nvar SheetsRegistry = function () {\n function SheetsRegistry() {\n _classCallCheck(this, SheetsRegistry);\n\n this.registry = [];\n }\n\n _createClass(SheetsRegistry, [{\n key: 'add',\n\n\n /**\n * Register a Style Sheet.\n */\n value: function add(sheet) {\n var registry = this.registry;\n var index = sheet.options.index;\n\n\n if (registry.indexOf(sheet) !== -1) return;\n\n if (registry.length === 0 || index >= this.index) {\n registry.push(sheet);\n return;\n }\n\n // Find a position.\n for (var i = 0; i < registry.length; i++) {\n if (registry[i].options.index > index) {\n registry.splice(i, 0, sheet);\n return;\n }\n }\n }\n\n /**\n * Reset the registry.\n */\n\n }, {\n key: 'reset',\n value: function reset() {\n this.registry = [];\n }\n\n /**\n * Remove a Style Sheet.\n */\n\n }, {\n key: 'remove',\n value: function remove(sheet) {\n var index = this.registry.indexOf(sheet);\n this.registry.splice(index, 1);\n }\n\n /**\n * Convert all attached sheets to a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n return this.registry.filter(function (sheet) {\n return sheet.attached;\n }).map(function (sheet) {\n return sheet.toString(options);\n }).join('\\n');\n }\n }, {\n key: 'index',\n\n\n /**\n * Current highest index number.\n */\n get: function get() {\n return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n }\n }]);\n\n return SheetsRegistry;\n}();\n\nexports['default'] = SheetsRegistry;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _linkRule = require('./utils/linkRule');\n\nvar _linkRule2 = _interopRequireDefault(_linkRule);\n\nvar _RuleList = require('./RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable-next-line no-use-before-define */\nvar StyleSheet = function () {\n function StyleSheet(styles, options) {\n var _this = this;\n\n _classCallCheck(this, StyleSheet);\n\n this.update = function (name, data) {\n if (typeof name === 'string') {\n _this.rules.update(name, data);\n } else {\n _this.rules.update(name);\n }\n return _this;\n };\n\n this.attached = false;\n this.deployed = false;\n this.linked = false;\n this.classes = {};\n this.options = _extends({}, options, {\n sheet: this,\n parent: this,\n classes: this.classes\n });\n this.renderer = new options.Renderer(this);\n this.rules = new _RuleList2['default'](this.options);\n\n for (var _name in styles) {\n this.rules.add(_name, styles[_name]);\n }\n\n this.rules.process();\n }\n\n /**\n * Attach renderable to the render tree.\n */\n\n\n _createClass(StyleSheet, [{\n key: 'attach',\n value: function attach() {\n if (this.attached) return this;\n if (!this.deployed) this.deploy();\n this.renderer.attach();\n if (!this.linked && this.options.link) this.link();\n this.attached = true;\n return this;\n }\n\n /**\n * Remove renderable from render tree.\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n if (!this.attached) return this;\n this.renderer.detach();\n this.attached = false;\n return this;\n }\n\n /**\n * Add a rule to the current stylesheet.\n * Will insert a rule also after the stylesheet has been rendered first time.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, decl, options) {\n var queue = this.queue;\n\n // Plugins can create rules.\n // In order to preserve the right order, we need to queue all ` + ("`" + `.addRule`)) + ("`" + (` calls,\n // which happen after the first ` + "`")))) + (((`rules.add()` + "`") + (` call.\n\n if (this.attached && !queue) this.queue = [];\n\n var rule = this.rules.add(name, decl, options);\n this.options.jss.plugins.onProcessRule(rule);\n\n if (this.attached) {\n if (!this.deployed) return rule;\n // Don't insert rule directly if there is no stringified version yet.\n // It will be inserted all together when .attach is called.\n if (queue) queue.push(rule);else {\n this.insertRule(rule);\n if (this.queue) {\n this.queue.forEach(this.insertRule, this);\n this.queue = undefined;\n }\n }\n return rule;\n }\n\n // We can't add rules to a detached style node.\n // We will redeploy the sheet once user will attach it.\n this.deployed = false;\n\n return rule;\n }\n\n /**\n * Insert rule into the StyleSheet\n */\n\n }, {\n key: 'insertRule',\n value: function insertRule(rule) {\n var renderable = this.renderer.insertRule(rule);\n if (renderable && this.options.link) (0, _linkRule2['default'])(rule, renderable);\n }\n\n /**\n * Create and add rules.\n * Will render also after Style Sheet was rendered the first time.\n */\n\n }, {\n key: 'addRules',\n value: function addRules(styles, options) {\n var added = [];\n for (var _name2 in styles) {\n added.push(this.addRule(_name2, styles[_name2], options));\n }\n return added;\n }\n\n /**\n * Get a rule by name.\n */\n\n }, {\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Delete a rule by name.\n * Returns ` + ("`" + `true`))) + (("`" + (`: if rule has been deleted from the DOM.\n */\n\n }, {\n key: 'deleteRule',\n value: function deleteRule(name) {\n var rule = this.rules.get(name);\n\n if (!rule) return false;\n\n this.rules.remove(rule);\n\n if (this.attached && rule.renderable) {\n return this.renderer.deleteRule(rule.renderable);\n }\n\n return true;\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Deploy pure CSS string to a renderable.\n */\n\n }, {\n key: 'deploy',\n value: function deploy() {\n this.renderer.deploy();\n this.deployed = true;\n return this;\n }\n\n /**\n * Link renderable CSS rules from sheet with their corresponding models.\n */\n\n }, {\n key: 'link',\n value: function link() {\n var cssRules = this.renderer.getRules();\n\n // Is undefined when VirtualRenderer is used.\n if (cssRules) this.rules.link(cssRules);\n this.linked = true;\n return this;\n }\n\n /**\n * Update the function values with a new data.\n */\n\n }, {\n key: 'toString',\n\n\n /**\n * Convert rules to a CSS string.\n */\n value: function toString(options) {\n return this.rules.toString(options);\n }\n }]);\n\n return StyleSheet;\n}();\n\nexports['default'] = StyleSheet;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.create = exports.createGenerateClassName = exports.sheets = exports.RuleList = exports.SheetsManager = exports.SheetsRegistry = exports.toCssValue = exports.getDynamicStyles = undefined;\n\nvar _getDynamicStyles = require('./utils/getDynamicStyles');\n\nObject.defineProperty(exports, 'getDynamicStyles', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_getDynamicStyles)['default'];\n }\n});\n\nvar _toCssValue = require('./utils/toCssValue');\n\nObject.defineProperty(exports, 'toCssValue', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_toCssValue)['default'];\n }\n});\n\nvar _SheetsRegistry = require('./SheetsRegistry');\n\nObject.defineProperty(exports, 'SheetsRegistry', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_SheetsRegistry)['default'];\n }\n});\n\nvar _SheetsManager = require('./SheetsManager');\n\nObject.defineProperty(exports, 'SheetsManager', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_SheetsManager)['default'];\n }\n});\n\nvar _RuleList = require('./RuleList');\n\nObject.defineProperty(exports, 'RuleList', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_RuleList)['default'];\n }\n});\n\nvar _sheets = require('./sheets');\n\nObject.defineProperty(exports, 'sheets', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sheets)['default'];\n }\n});\n\nvar _createGenerateClassName = require('./utils/createGenerateClassName');\n\nObject.defineProperty(exports, 'createGenerateClassName', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_createGenerateClassName)['default'];\n }\n});\n\nvar _Jss = require('./Jss');\n\nvar _Jss2 = _interopRequireDefault(_Jss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Creates a new instance of Jss.\n */\nvar create = exports.create = function create(options) {\n return new _Jss2['default'](options);\n};\n\n/**\n * A global Jss instance.\n */\nexports['default'] = create();", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createRule = require('../utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// A symbol replacement.\nvar now = Date.now();\n\nvar fnValuesNs = 'fnValues' + now;\nvar fnStyleNs = 'fnStyle' + ++now;\n\nexports['default'] = {\n onCreateRule: function onCreateRule(name, decl, options) {\n if (typeof decl !== 'function') return null;\n var rule = (0, _createRule2['default'])(name, {}, options);\n rule[fnStyleNs] = decl;\n return rule;\n },\n onProcessStyle: function onProcessStyle(style, rule) {\n var fn = {};\n for (var prop in style) {\n var value = style[prop];\n if (typeof value !== 'function') continue;\n delete style[prop];\n fn[prop] = value;\n }\n rule = rule;\n rule[fnValuesNs] = fn;\n return style;\n },\n onUpdate: function onUpdate(data, rule) {\n // It is a rules container like for e.g. ConditionalRule.\n if (rule.rules instanceof _RuleList2['default']) {\n rule.rules.update(data);\n return;\n }\n if (!(rule instanceof _StyleRule2['default'])) return;\n\n rule = rule;\n\n // If we have a fn values map, it is a rule with function values.\n if (rule[fnValuesNs]) {\n for (var prop in rule[fnValuesNs]) {\n rule.prop(prop, rule[fnValuesNs][prop](data));\n }\n }\n\n rule = rule;\n\n var fnStyle = rule[fnStyleNs];\n\n // If we have a style function, the entire rule is dynamic and style object\n // will be returned from that function.\n if (fnStyle) {\n var style = fnStyle(data);\n for (var _prop in style) {\n rule.prop(_prop, style[_prop]);\n }\n }\n }\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createRule = require('../utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nvar _isObservable = require('../utils/isObservable');\n\nvar _isObservable2 = _interopRequireDefault(_isObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = {\n onCreateRule: function onCreateRule(name, decl, options) {\n if (!(0, _isObservable2['default'])(decl)) return null;\n\n // Cast ` + "`")) + (`decl` + ("`" + ` to `))))))) + (((((("`" + `Observable`) + ("`" + (`, since it passed the type guard.\n var style$ = decl;\n\n var rule = (0, _createRule2['default'])(name, {}, options);\n\n // TODO\n // Call ` + "`"))) + ((`stream.subscribe()` + ("`" + ` returns a subscription, which should be explicitly\n // unsubscribed from when we know this sheet is no longer needed.\n style$.subscribe(function (style) {\n for (var prop in style) {\n rule.prop(prop, style[prop]);\n }\n });\n\n return rule;\n },\n onProcessRule: function onProcessRule(rule) {\n if (!(rule instanceof _StyleRule2['default'])) return;\n var styleRule = rule;\n var style = styleRule.style;\n\n var _loop = function _loop(prop) {\n var value = style[prop];\n if (!(0, _isObservable2['default'])(value)) return 'continue';\n delete style[prop];\n value.subscribe({\n next: function next(nextValue) {\n styleRule.prop(prop, nextValue);\n }\n });\n };\n\n for (var prop in style) {\n var _ret = _loop(prop);\n\n if (_ret === 'continue') continue;\n }\n }\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SimpleRule = require('../rules/SimpleRule');\n\nvar _SimpleRule2 = _interopRequireDefault(_SimpleRule);\n\nvar _KeyframesRule = require('../rules/KeyframesRule');\n\nvar _KeyframesRule2 = _interopRequireDefault(_KeyframesRule);\n\nvar _ConditionalRule = require('../rules/ConditionalRule');\n\nvar _ConditionalRule2 = _interopRequireDefault(_ConditionalRule);\n\nvar _FontFaceRule = require('../rules/FontFaceRule');\n\nvar _FontFaceRule2 = _interopRequireDefault(_FontFaceRule);\n\nvar _ViewportRule = require('../rules/ViewportRule');\n\nvar _ViewportRule2 = _interopRequireDefault(_ViewportRule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar classes = {\n '@charset': _SimpleRule2['default'],\n '@import': _SimpleRule2['default'],\n '@namespace': _SimpleRule2['default'],\n '@keyframes': _KeyframesRule2['default'],\n '@media': _ConditionalRule2['default'],\n '@supports': _ConditionalRule2['default'],\n '@font-face': _FontFaceRule2['default'],\n '@viewport': _ViewportRule2['default'],\n '@-ms-viewport': _ViewportRule2['default']\n\n /**\n * Generate plugins which will register all rules.\n */\n};\nvar plugins = Object.keys(classes).map(function (key) {\n // https://jsperf.com/indexof-vs-substr-vs-regex-at-the-beginning-3\n var re = new RegExp('^' + key);\n var RuleClass = classes[key];\n var onCreateRule = function onCreateRule(name, decl, options) {\n return re.test(name) ? new RuleClass(name, decl, options) : null;\n };\n return { onCreateRule: onCreateRule };\n});\n\nexports['default'] = plugins;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _sheets = require('../sheets');\n\nvar _sheets2 = _interopRequireDefault(_sheets);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _toCssValue = require('../utils/toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Cache the value from the first time a function is called.\n */\nvar memoize = function memoize(fn) {\n var value = void 0;\n return function () {\n if (!value) value = fn();\n return value;\n };\n};\n\n/**\n * Get a style property value.\n */\nfunction getPropertyValue(cssRule, prop) {\n try {\n return cssRule.style.getPropertyValue(prop);\n } catch (err) {\n // IE may throw if property is unknown.\n return '';\n }\n}\n\n/**\n * Set a style property.\n */\nfunction setProperty(cssRule, prop, value) {\n try {\n var cssValue = value;\n\n if (Array.isArray(value)) {\n cssValue = (0, _toCssValue2['default'])(value, true);\n\n if (value[value.length - 1] === '!important') {\n cssRule.style.setProperty(prop, cssValue, 'important');\n return true;\n }\n }\n\n cssRule.style.setProperty(prop, cssValue);\n } catch (err) {\n // IE may throw if property is unknown.\n return false;\n }\n return true;\n}\n\n/**\n * Remove a style property.\n */\nfunction removeProperty(cssRule, prop) {\n try {\n cssRule.style.removeProperty(prop);\n } catch (err) {\n (0, _warning2['default'])(false, '[JSS] DOMException \"%s\" was thrown. Tried to remove property \"%s\".', err.message, prop);\n }\n}\n\nvar CSSRuleTypes = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7\n\n /**\n * Get the CSS Rule key.\n */\n\n};var getKey = function () {\n var extractKey = function extractKey(cssText) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return cssText.substr(from, cssText.indexOf('{') - 1);\n };\n\n return function (cssRule) {\n if (cssRule.type === CSSRuleTypes.STYLE_RULE) return cssRule.selectorText;\n if (cssRule.type === CSSRuleTypes.KEYFRAMES_RULE) {\n var name = cssRule.name;\n\n if (name) return '@keyframes ' + name;\n\n // There is no rule.name in the following browsers:\n // - IE 9\n // - Safari 7.1.8\n // - Mobile Safari 9.0.0\n var cssText = cssRule.cssText;\n\n return '@' + extractKey(cssText, cssText.indexOf('keyframes'));\n }\n\n // Conditionals.\n return extractKey(cssRule.cssText);\n };\n}();\n\n/**\n * Set the selector.\n */\nfunction setSelector(cssRule, selectorText) {\n cssRule.selectorText = selectorText;\n\n // Return false if setter was not successful.\n // Currently works in chrome only.\n return cssRule.selectorText === selectorText;\n}\n\n/**\n * Gets the `)) + ("`" + (`head` + "`")))) + (((` element upon the first call and caches it.\n */\nvar getHead = memoize(function () {\n return document.head || document.getElementsByTagName('head')[0];\n});\n\n/**\n * Gets a map of rule keys, where the property is an unescaped key and value\n * is a potentially escaped one.\n * It is used to identify CSS rules and the corresponding JSS rules. As an identifier\n * for CSSStyleRule we normally use ` + "`") + (`selectorText` + ("`" + `. Though if original selector text\n * contains escaped code points e.g. `))) + (("`" + (`:not(#\\\\20)` + "`")) + (`, CSSOM will compile it to ` + ("`" + `:not(# )`))))) + (((("`" + `\n * and so CSS rule's `) + ("`" + (`selectorText` + "`"))) + ((` won't match JSS rule selector.\n *\n * https://www.w3.org/International/questions/qa-escapes#cssescapes\n */\nvar getUnescapedKeysMap = function () {\n var style = void 0;\n var isAttached = false;\n\n return function (rules) {\n var map = {};\n // https://github.com/facebook/flow/issues/2696\n if (!style) style = document.createElement('style');\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (!(rule instanceof _StyleRule2['default'])) continue;\n var selector = rule.selector;\n // Only unescape selector over CSSOM if it contains a back slash.\n\n if (selector && selector.indexOf('\\\\') !== -1) {\n // Lazilly attach when needed.\n if (!isAttached) {\n getHead().appendChild(style);\n isAttached = true;\n }\n style.textContent = selector + ' {}';\n var _style = style,\n sheet = _style.sheet;\n\n if (sheet) {\n var cssRules = sheet.cssRules;\n\n if (cssRules) map[cssRules[0].selectorText] = rule.key;\n }\n }\n }\n if (isAttached) {\n getHead().removeChild(style);\n isAttached = false;\n }\n return map;\n };\n}();\n\n/**\n * Find attached sheet with an index higher than the passed one.\n */\nfunction findHigherSheet(registry, options) {\n for (var i = 0; i < registry.length; i++) {\n var sheet = registry[i];\n if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n return sheet;\n }\n }\n return null;\n}\n\n/**\n * Find attached sheet with the highest index.\n */\nfunction findHighestSheet(registry, options) {\n for (var i = registry.length - 1; i >= 0; i--) {\n var sheet = registry[i];\n if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n return sheet;\n }\n }\n return null;\n}\n\n/**\n * Find a comment with \"jss\" inside.\n */\nfunction findCommentNode(text) {\n var head = getHead();\n for (var i = 0; i < head.childNodes.length; i++) {\n var node = head.childNodes[i];\n if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n return node;\n }\n }\n return null;\n}\n\n/**\n * Find a node before which we can insert the sheet.\n */\nfunction findPrevNode(options) {\n var registry = _sheets2['default'].registry;\n\n\n if (registry.length > 0) {\n // Try to insert before the next higher sheet.\n var sheet = findHigherSheet(registry, options);\n if (sheet) return sheet.renderer.element;\n\n // Otherwise insert after the last attached.\n sheet = findHighestSheet(registry, options);\n if (sheet) return sheet.renderer.element.nextElementSibling;\n }\n\n // Try to find a comment placeholder if registry is empty.\n var insertionPoint = options.insertionPoint;\n\n if (insertionPoint && typeof insertionPoint === 'string') {\n var comment = findCommentNode(insertionPoint);\n if (comment) return comment.nextSibling;\n // If user specifies an insertion point and it can't be found in the document -\n // bad specificity issues may appear.\n (0, _warning2['default'])(insertionPoint === 'jss', '[JSS] Insertion point \"%s\" not found.', insertionPoint);\n }\n\n return null;\n}\n\n/**\n * Insert style element into the DOM.\n */\nfunction insertStyle(style, options) {\n var insertionPoint = options.insertionPoint;\n\n var prevNode = findPrevNode(options);\n\n if (prevNode) {\n var parentNode = prevNode.parentNode;\n\n if (parentNode) parentNode.insertBefore(style, prevNode);\n return;\n }\n\n // Works with iframes and any node types.\n if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n var insertionPointElement = insertionPoint;\n var _parentNode = insertionPointElement.parentNode;\n\n if (_parentNode) _parentNode.insertBefore(style, insertionPointElement.nextSibling);else (0, _warning2['default'])(false, '[JSS] Insertion point is not in the DOM.');\n return;\n }\n\n getHead().insertBefore(style, prevNode);\n}\n\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\nvar getNonce = memoize(function () {\n var node = document.querySelector('meta[property=\"csp-nonce\"]');\n return node ? node.getAttribute('content') : null;\n});\n\nvar DomRenderer = function () {\n function DomRenderer(sheet) {\n _classCallCheck(this, DomRenderer);\n\n this.getPropertyValue = getPropertyValue;\n this.setProperty = setProperty;\n this.removeProperty = removeProperty;\n this.setSelector = setSelector;\n this.getKey = getKey;\n this.getUnescapedKeysMap = getUnescapedKeysMap;\n this.hasInsertedRules = false;\n\n // There is no sheet when the renderer is used from a standalone StyleRule.\n if (sheet) _sheets2['default'].add(sheet);\n\n this.sheet = sheet;\n\n var _ref = this.sheet ? this.sheet.options : {},\n media = _ref.media,\n meta = _ref.meta,\n element = _ref.element;\n\n this.element = element || document.createElement('style');\n this.element.setAttribute('data-jss', '');\n if (media) this.element.setAttribute('media', media);\n if (meta) this.element.setAttribute('data-meta', meta);\n var nonce = getNonce();\n if (nonce) this.element.setAttribute('nonce', nonce);\n }\n\n /**\n * Insert style element into render tree.\n */\n\n\n // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696\n\n\n _createClass(DomRenderer, [{\n key: 'attach',\n value: function attach() {\n // In the case the element node is external and it is already in the DOM.\n if (this.element.parentNode || !this.sheet) return;\n\n // When rules are inserted using ` + ("`" + `insertRule`)) + ("`" + (` API, after ` + "`")))) + (((`sheet.detach().attach()` + "`") + (`\n // browsers remove those rules.\n // TODO figure out if its a bug and if it is known.\n // Workaround is to redeploy the sheet before attaching as a string.\n if (this.hasInsertedRules) {\n this.deploy();\n this.hasInsertedRules = false;\n }\n\n insertStyle(this.element, this.sheet.options);\n }\n\n /**\n * Remove style element from render tree.\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n this.element.parentNode.removeChild(this.element);\n }\n\n /**\n * Inject CSS string into element.\n */\n\n }, {\n key: 'deploy',\n value: function deploy() {\n if (!this.sheet) return;\n this.element.textContent = '\\n' + this.sheet.toString() + '\\n';\n }\n\n /**\n * Insert a rule into element.\n */\n\n }, {\n key: 'insertRule',\n value: function insertRule(rule, index) {\n var sheet = this.element.sheet;\n var cssRules = sheet.cssRules;\n\n var str = rule.toString();\n if (!index) index = cssRules.length;\n\n if (!str) return false;\n\n try {\n sheet.insertRule(str, index);\n } catch (err) {\n (0, _warning2['default'])(false, '[JSS] Can not insert an unsupported rule \\n\\r%s', rule);\n return false;\n }\n this.hasInsertedRules = true;\n\n return cssRules[index];\n }\n\n /**\n * Delete a rule.\n */\n\n }, {\n key: 'deleteRule',\n value: function deleteRule(cssRule) {\n var sheet = this.element.sheet;\n\n var index = this.indexOf(cssRule);\n if (index === -1) return false;\n sheet.deleteRule(index);\n return true;\n }\n\n /**\n * Get index of a CSS Rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(cssRule) {\n var cssRules = this.element.sheet.cssRules;\n\n for (var _index = 0; _index < cssRules.length; _index++) {\n if (cssRule === cssRules[_index]) return _index;\n }\n return -1;\n }\n\n /**\n * Generate a new CSS rule and replace the existing one.\n */\n\n }, {\n key: 'replaceRule',\n value: function replaceRule(cssRule, rule) {\n var index = this.indexOf(cssRule);\n var newCssRule = this.insertRule(rule, index);\n this.element.sheet.deleteRule(index);\n return newCssRule;\n }\n\n /**\n * Get all rules elements.\n */\n\n }, {\n key: 'getRules',\n value: function getRules() {\n return this.element.sheet.cssRules;\n }\n }]);\n\n return DomRenderer;\n}();\n\nexports['default'] = DomRenderer;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable class-methods-use-this */\n\n/**\n * Rendering backend to do nothing in nodejs.\n */\nvar VirtualRenderer = function () {\n function VirtualRenderer() {\n _classCallCheck(this, VirtualRenderer);\n }\n\n _createClass(VirtualRenderer, [{\n key: 'setProperty',\n value: function setProperty() {\n return true;\n }\n }, {\n key: 'getPropertyValue',\n value: function getPropertyValue() {\n return '';\n }\n }, {\n key: 'removeProperty',\n value: function removeProperty() {}\n }, {\n key: 'setSelector',\n value: function setSelector() {\n return true;\n }\n }, {\n key: 'getKey',\n value: function getKey() {\n return '';\n }\n }, {\n key: 'attach',\n value: function attach() {}\n }, {\n key: 'detach',\n value: function detach() {}\n }, {\n key: 'deploy',\n value: function deploy() {}\n }, {\n key: 'insertRule',\n value: function insertRule() {\n return false;\n }\n }, {\n key: 'deleteRule',\n value: function deleteRule() {\n return true;\n }\n }, {\n key: 'replaceRule',\n value: function replaceRule() {\n return false;\n }\n }, {\n key: 'getRules',\n value: function getRules() {}\n }, {\n key: 'indexOf',\n value: function indexOf() {\n return -1;\n }\n }]);\n\n return VirtualRenderer;\n}();\n\nexports['default'] = VirtualRenderer;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Conditional rule for @media, @supports\n */\nvar ConditionalRule = function () {\n function ConditionalRule(key, styles, options) {\n _classCallCheck(this, ConditionalRule);\n\n this.type = 'conditional';\n this.isProcessed = false;\n\n this.key = key;\n this.options = options;\n this.rules = new _RuleList2['default'](_extends({}, options, { parent: this }));\n\n for (var name in styles) {\n this.rules.add(name, styles[name]);\n }\n\n this.rules.process();\n }\n\n /**\n * Get a rule.\n */\n\n\n _createClass(ConditionalRule, [{\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Create and register rule, run plugins.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, style, options) {\n var rule = this.rules.add(name, style, options);\n this.options.jss.plugins.onProcessRule(rule);\n return rule;\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { indent: 1 };\n\n var inner = this.rules.toString(options);\n return inner ? this.key + ' {\\n' + inner + '\\n}' : '';\n }\n }]);\n\n return ConditionalRule;\n}();\n\nexports['default'] = ConditionalRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FontFaceRule = function () {\n function FontFaceRule(key, style, options) {\n _classCallCheck(this, FontFaceRule);\n\n this.type = 'font-face';\n this.isProcessed = false;\n\n this.key = key;\n this.style = style;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(FontFaceRule, [{\n key: 'toString',\n value: function toString(options) {\n if (Array.isArray(this.style)) {\n var str = '';\n for (var index = 0; index < this.style.length; index++) {\n str += (0, _toCss2['default'])(this.key, this.style[index]);\n if (this.style[index + 1]) str += '\\n';\n }\n return str;\n }\n\n return (0, _toCss2['default'])(this.key, this.style, options);\n }\n }]);\n\n return FontFaceRule;\n}();\n\nexports['default'] = FontFaceRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Rule for @keyframes\n */\nvar KeyframesRule = function () {\n function KeyframesRule(key, frames, options) {\n _classCallCheck(this, KeyframesRule);\n\n this.type = 'keyframes';\n this.isProcessed = false;\n\n this.key = key;\n this.options = options;\n this.rules = new _RuleList2['default'](_extends({}, options, { parent: this }));\n\n for (var name in frames) {\n this.rules.add(name, frames[name], _extends({}, this.options, {\n parent: this,\n selector: name\n }));\n }\n\n this.rules.process();\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(KeyframesRule, [{\n key: 'toString',\n value: function toString() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { indent: 1 };\n\n var inner = this.rules.toString(options);\n if (inner) inner += '\\n';\n return this.key + ' {\\n' + inner + '}';\n }\n }]);\n\n return KeyframesRule;\n}();\n\nexports['default'] = KeyframesRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SimpleRule = function () {\n function SimpleRule(key, value, options) {\n _classCallCheck(this, SimpleRule);\n\n this.type = 'simple';\n this.isProcessed = false;\n\n this.key = key;\n this.value = value;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n // eslint-disable-next-line no-unused-vars\n\n\n _createClass(SimpleRule, [{\n key: 'toString',\n value: function toString(options) {\n if (Array.isArray(this.value)) {\n var str = '';\n for (var index = 0; index < this.value.length; index++) {\n str += this.key + ' ' + this.value[index] + ';';\n if (this.value[index + 1]) str += '\\n';\n }\n return str;\n }\n\n return this.key + ' ' + this.value + ';';\n }\n }]);\n\n return SimpleRule;\n}();\n\nexports['default'] = SimpleRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nvar _toCssValue = require('../utils/toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StyleRule = function () {\n function StyleRule(key, style, options) {\n _classCallCheck(this, StyleRule);\n\n this.type = 'style';\n this.isProcessed = false;\n var sheet = options.sheet,\n Renderer = options.Renderer,\n selector = options.selector;\n\n this.key = key;\n this.options = options;\n this.style = style;\n if (selector) this.selectorText = selector;\n this.renderer = sheet ? sheet.renderer : new Renderer();\n }\n\n /**\n * Set selector string.\n * Attention: use this with caution. Most browsers didn't implement\n * selectorText setter, so this may result in rerendering of entire Style Sheet.\n */\n\n\n _createClass(StyleRule, [{\n key: 'prop',\n\n\n /**\n * Get or set a style property.\n */\n value: function prop(name, value) {\n // It's a getter.\n if (value === undefined) return this.style[name];\n\n // Don't do anything if the value has not changed.\n if (this.style[name] === value) return this;\n\n value = this.options.jss.plugins.onChangeValue(value, name, this);\n\n var isEmpty = value == null || value === false;\n var isDefined = name in this.style;\n\n // Value is empty and wasn't defined before.\n if (isEmpty && !isDefined) return this;\n\n // We are going to remove this value.\n var remove = isEmpty && isDefined;\n\n if (remove) delete this.style[name];else this.style[name] = value;\n\n // Renderable is defined if StyleSheet option ` + ("`" + `link`))) + (("`" + (` is true.\n if (this.renderable) {\n if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, value);\n return this;\n }\n\n var sheet = this.options.sheet;\n\n if (sheet && sheet.attached) {\n (0, _warning2['default'])(false, 'Rule is not linked. Missing sheet option \"link: true\".');\n }\n return this;\n }\n\n /**\n * Apply rule to an element inline.\n */\n\n }, {\n key: 'applyTo',\n value: function applyTo(renderable) {\n var json = this.toJSON();\n for (var prop in json) {\n this.renderer.setProperty(renderable, prop, json[prop]);\n }return this;\n }\n\n /**\n * Returns JSON representation of the rule.\n * Fallbacks are not supported.\n * Useful for inline styles.\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var json = {};\n for (var prop in this.style) {\n var value = this.style[prop];\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = (0, _toCssValue2['default'])(value);\n }\n return json;\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n var sheet = this.options.sheet;\n\n var link = sheet ? sheet.options.link : false;\n var opts = link ? _extends({}, options, { allowEmpty: true }) : options;\n return (0, _toCss2['default'])(this.selector, this.style, opts);\n }\n }, {\n key: 'selector',\n set: function set(selector) {\n if (selector === this.selectorText) return;\n\n this.selectorText = selector;\n\n if (!this.renderable) return;\n\n var hasChanged = this.renderer.setSelector(this.renderable, selector);\n\n // If selector setter is not implemented, rerender the rule.\n if (!hasChanged && this.renderable) {\n var renderable = this.renderer.replaceRule(this.renderable, this);\n if (renderable) this.renderable = renderable;\n }\n }\n\n /**\n * Get selector string.\n */\n ,\n get: function get() {\n return this.selectorText;\n }\n }]);\n\n return StyleRule;\n}();\n\nexports['default'] = StyleRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ViewportRule = function () {\n function ViewportRule(key, style, options) {\n _classCallCheck(this, ViewportRule);\n\n this.type = 'viewport';\n this.isProcessed = false;\n\n this.key = key;\n this.style = style;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(ViewportRule, [{\n key: 'toString',\n value: function toString(options) {\n return (0, _toCss2['default'])(this.key, this.style, options);\n }\n }]);\n\n return ViewportRule;\n}();\n\nexports['default'] = ViewportRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SheetsRegistry = require('./SheetsRegistry');\n\nvar _SheetsRegistry2 = _interopRequireDefault(_SheetsRegistry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\nexports['default'] = new _SheetsRegistry2['default']();", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = cloneStyle;\n\nvar _isObservable = require('./isObservable');\n\nvar _isObservable2 = _interopRequireDefault(_isObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar isArray = Array.isArray;\nfunction cloneStyle(style) {\n // Support empty values in case user ends up with them by accident.\n if (style == null) return style;\n\n // Support string value for SimpleRule.\n var typeOfStyle = typeof style === 'undefined' ? 'undefined' : _typeof(style);\n\n if (typeOfStyle === 'string' || typeOfStyle === 'number' || typeOfStyle === 'function') {\n return style;\n }\n\n // Support array for FontFaceRule.\n if (isArray(style)) return style.map(cloneStyle);\n\n // Support Observable styles. Observables are immutable, so we don't need to\n // copy them.\n if ((0, _isObservable2['default'])(style)) return style;\n\n var newStyle = {};\n for (var name in style) {\n var value = style[name];\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n newStyle[name] = cloneStyle(value);\n continue;\n }\n newStyle[name] = value;\n }\n\n return newStyle;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _StyleSheet = require('../StyleSheet');\n\nvar _StyleSheet2 = _interopRequireDefault(_StyleSheet);\n\nvar _moduleId = require('./moduleId');\n\nvar _moduleId2 = _interopRequireDefault(_moduleId);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar maxRules = 1e10;\n\n\nvar env = process.env.NODE_ENV;\n\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\n\nexports['default'] = function () {\n var ruleCounter = 0;\n var defaultPrefix = env === 'production' ? 'c' : '';\n\n return function (rule, sheet) {\n ruleCounter += 1;\n\n if (ruleCounter > maxRules) {\n (0, _warning2['default'])(false, '[JSS] You might have a memory leak. Rule counter is at %s.', ruleCounter);\n }\n\n var prefix = defaultPrefix;\n var jssId = '';\n\n if (sheet) {\n prefix = sheet.options.classNamePrefix || defaultPrefix;\n if (sheet.options.jss.id != null) jssId += sheet.options.jss.id;\n }\n\n if (env === 'production') {\n return '' + prefix + _moduleId2['default'] + jssId + ruleCounter;\n }\n\n return prefix + rule.key + '-' + _moduleId2['default'] + (jssId && '-' + jssId) + '-' + ruleCounter;\n };\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = createRule;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _cloneStyle = require('../utils/cloneStyle');\n\nvar _cloneStyle2 = _interopRequireDefault(_cloneStyle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Create a rule instance.\n */\nfunction createRule() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unnamed';\n var decl = arguments[1];\n var options = arguments[2];\n var jss = options.jss;\n\n var declCopy = (0, _cloneStyle2['default'])(decl);\n\n var rule = jss.plugins.onCreateRule(name, declCopy, options);\n if (rule) return rule;\n\n // It is an at-rule and it has no instance.\n if (name[0] === '@') {\n (0, _warning2['default'])(false, '[JSS] Unknown at-rule %s', name);\n }\n\n return new _StyleRule2['default'](name, declCopy, options);\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CSS = global.CSS;\n\nvar env = process.env.NODE_ENV;\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'` + "`")) + (`])/g;\n\nexports['default'] = function (str) {\n // We don't need to escape it in production, because we are not using user's\n // input for selectors, we are generating a valid selector.\n if (env === 'production') return str;\n\n if (!CSS || !CSS.escape) {\n return str.replace(escapeRegex, '\\\\$1');\n }\n\n return CSS.escape(str);\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = getDynamicStyles;\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n var to = null;\n\n for (var key in styles) {\n var value = styles[key];\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n if (type === 'function') {\n if (!to) to = {};\n to[key] = value;\n } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n var extracted = getDynamicStyles(value);\n if (extracted) {\n if (!to) to = {};\n to[key] = extracted;\n }\n }\n }\n\n return to;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _symbolObservable = require('symbol-observable');\n\nvar _symbolObservable2 = _interopRequireDefault(_symbolObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = function (value) {\n return value && value[_symbolObservable2['default']] && value === value[_symbolObservable2['default']]();\n};", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = linkRule;\n/**\n * Link rule with CSSStyleRule and nested rules with corresponding nested cssRules if both exists.\n */\nfunction linkRule(rule, cssRule) {\n rule.renderable = cssRule;\n if (rule.rules && cssRule.cssRules) rule.rules.link(cssRule.cssRules);\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (global[ns] == null) global[ns] = 0;\n\n// Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\nexports['default'] = global[ns]++;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = toCss;\n\nvar _toCssValue = require('./toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\nfunction indentStr(str, indent) {\n var result = '';\n for (var index = 0; index < indent; index++) {\n result += ' ';\n }return result + str;\n}\n\n/**\n * Converts a Rule to CSS string.\n */\n\nfunction toCss(selector, style) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var result = '';\n\n if (!style) return result;\n\n var _options$indent = options.indent,\n indent = _options$indent === undefined ? 0 : _options$indent;\n var fallbacks = style.fallbacks;\n\n\n indent++;\n\n // Apply fallbacks first.\n if (fallbacks) {\n // Array syntax {fallbacks: [{prop: value}]}\n if (Array.isArray(fallbacks)) {\n for (var index = 0; index < fallbacks.length; index++) {\n var fallback = fallbacks[index];\n for (var prop in fallback) {\n var value = fallback[prop];\n if (value != null) {\n result += '\\n' + indentStr(prop + ': ' + (0, _toCssValue2['default'])(value) + ';', indent);\n }\n }\n }\n } else {\n // Object syntax {fallbacks: {prop: value}}\n for (var _prop in fallbacks) {\n var _value = fallbacks[_prop];\n if (_value != null) {\n result += '\\n' + indentStr(_prop + ': ' + (0, _toCssValue2['default'])(_value) + ';', indent);\n }\n }\n }\n }\n\n for (var _prop2 in style) {\n var _value2 = style[_prop2];\n if (_value2 != null && _prop2 !== 'fallbacks') {\n result += '\\n' + indentStr(_prop2 + ': ' + (0, _toCssValue2['default'])(_value2) + ';', indent);\n }\n }\n\n // Allow empty style in this case, because properties will be added dynamically.\n if (!result && !options.allowEmpty) return result;\n\n indent--;\n result = indentStr(selector + ' {' + result + '\\n', indent) + indentStr('}', indent);\n\n return result;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = toCssValue;\nvar join = function join(value, by) {\n var result = '';\n for (var i = 0; i < value.length; i++) {\n // Remove !important from the value, it will be readded later.\n if (value[i] === '!important') break;\n if (result) result += by;\n result += value[i];\n }\n return result;\n};\n\n/**\n * Converts array values to string.\n *\n * ` + ("`" + `margin: [['5px', '10px']]`)))))) + ((((("`" + ` > `) + ("`" + (`margin: 5px 10px;` + "`"))) + ((`\n * ` + ("`" + `border: ['1px', '2px']`)) + ("`" + (` > ` + "`")))) + (((`border: 1px, 2px;` + "`") + (`\n * ` + ("`" + `margin: [['5px', '10px'], '!important']`))) + (("`" + (` > ` + "`")) + (`margin: 5px 10px !important;` + ("`" + `\n * `))))) + (((("`" + `color: ['red', !important]`) + ("`" + (` > ` + "`"))) + ((`color: red !important;` + ("`" + `\n */\nfunction toCssValue(value) {\n var ignoreImportant = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!Array.isArray(value)) return value;\n\n var cssValue = '';\n\n // Support space separated values via `)) + ("`" + (`[['5px', '10px']]` + "`")))) + (((`.\n if (Array.isArray(value[0])) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] === '!important') break;\n if (cssValue) cssValue += ', ';\n cssValue += join(value[i], ' ');\n }\n } else cssValue = join(value, ', ');\n\n // Add !important, because it was ignored.\n if (!ignoreImportant && value[value.length - 1] === '!important') {\n cssValue += ' !important';\n }\n\n return cssValue;\n}", + "/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '` + ("`" + `warning(condition, format, ...args)`)) + ("`" + (` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n", + "/**\n * lodash (Custom Build) \n * Build: ` + "`"))) + ((`lodash modularize exports=\"npm\" -o ./` + ("`" + `\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `)) + ("`" + (`TypeError` + "`"))))))))) + ((((((((` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various ` + "`") + (`Number` + ("`" + ` constants. */\nvar NAN = 0 / 0;\n\n/** `))) + (("`" + (`Object#toString` + "`")) + (` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on ` + ("`" + `root`)))) + ((("`" + `. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `) + ("`" + (`global` + "`"))) + ((` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable ` + ("`" + `self`)) + ("`" + (`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [` + "`"))))) + ((((`toStringTag` + "`") + (`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other ` + ("`" + `lodash`))) + (("`" + (` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking ` + "`")) + (`func` + ("`" + ` until after `)))) + ((("`" + `wait`) + ("`" + (`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a ` + "`"))) + ((`cancel` + ("`" + ` method to cancel\n * delayed `)) + ("`" + (`func` + "`")))))) + (((((` invocations and a ` + "`") + (`flush` + ("`" + ` method to immediately invoke them.\n * Provide `))) + (("`" + (`options` + "`")) + (` to indicate whether ` + ("`" + `func`)))) + ((("`" + ` should be invoked on the\n * leading and/or trailing edge of the `) + ("`" + (`wait` + "`"))) + ((` timeout. The ` + ("`" + `func`)) + ("`" + (` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last ` + "`"))))) + ((((`func` + "`") + (`\n * invocation.\n *\n * **Note:** If ` + ("`" + `leading`))) + (("`" + (` and ` + "`")) + (`trailing` + ("`" + ` options are `)))) + ((("`" + `true`) + ("`" + (`, ` + "`"))) + ((`func` + ("`" + ` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `)) + ("`" + (`wait` + "`"))))))) + ((((((` timeout.\n *\n * If ` + "`") + (`wait` + ("`" + ` is `))) + (("`" + (`0` + "`")) + (` and ` + ("`" + `leading`)))) + ((("`" + ` is `) + ("`" + (`false` + "`"))) + ((`, ` + ("`" + `func`)) + ("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`"))))) + ((((`setTimeout` + "`") + (` with a timeout of ` + ("`" + `0`))) + (("`" + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`")) + (`_.debounce` + ("`" + ` and `)))) + ((("`" + `_.throttle`) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + "`"))) + ((`func` + ("`" + ` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `)) + ("`" + (`sendMail` + "`")))))) + (((((` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure ` + "`") + (`batchLog` + ("`" + ` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `))) + (("`" + (`maxWait` + "`")) + (` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the ` + ("`" + `maxWait`)))) + ((("`" + ` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `) + ("`" + (`lastArgs` + "`"))) + ((` which means ` + ("`" + `func`)) + ("`" + (` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if ` + "`"))))) + ((((`value` + "`") + (` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of ` + ("`" + `Object`))) + (("`" + (`. (e.g. arrays, functions, objects, regexes, ` + "`")) + (`new Number(0)` + ("`" + `, and `)))) + ((("`" + (`new String('')` + "`")) + (`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is an object, else `)))))))) + ((((((("`" + `false`) + ("`" + (`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is object-like. A value is object-like if it's not `)) + ("`" + (`null` + "`")))) + (((`\n * and has a ` + "`") + (`typeof` + ("`" + ` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + (` if ` + ("`" + `value`))))) + (((("`" + ` is object-like, else `) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if ` + ("`" + `value`)) + ("`" + (` is classified as a ` + "`")))) + (((`Symbol` + "`") + (` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is a symbol, else `)))))) + ((((("`" + `false`) + ("`" + (`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts ` + "`"))) + ((`value` + ("`" + ` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", + "/**\n * lodash (Custom Build) \n * Build: `)) + ("`" + (`lodash modularize exports=\"npm\" -o ./` + "`")))) + (((`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the ` + "`") + (`TypeError` + ("`" + ` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `))) + (("`" + (`Number` + "`")) + (` constants. */\nvar NAN = 0 / 0;\n\n/** ` + ("`" + `Object#toString`))))) + (((("`" + ` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `) + ("`" + (`root` + "`"))) + ((`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable ` + ("`" + `global`)) + ("`" + (` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable ` + "`")))) + (((`self` + ("`" + `. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`)) + ("`" + (`toStringTag` + "`"))) + ((`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other ` + ("`" + `lodash`)) + ("`" + (` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking ` + "`"))))))) + ((((((`func` + "`") + (` until after ` + ("`" + `wait`))) + (("`" + (`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a ` + "`")) + (`cancel` + ("`" + ` method to cancel\n * delayed `)))) + ((("`" + `func`) + ("`" + (` invocations and a ` + "`"))) + ((`flush` + ("`" + ` method to immediately invoke them.\n * Provide `)) + ("`" + (`options` + "`"))))) + ((((` to indicate whether ` + "`") + (`func` + ("`" + ` should be invoked on the\n * leading and/or trailing edge of the `))) + (("`" + (`wait` + "`")) + (` timeout. The ` + ("`" + `func`)))) + ((("`" + ` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `) + ("`" + (`func` + "`"))) + ((`\n * invocation.\n *\n * **Note:** If ` + ("`" + `leading`)) + ("`" + (` and ` + "`")))))) + (((((`trailing` + "`") + (` options are ` + ("`" + `true`))) + (("`" + (`, ` + "`")) + (`func` + ("`" + ` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `)))) + ((("`" + `wait`) + ("`" + (` timeout.\n *\n * If ` + "`"))) + ((`wait` + ("`" + ` is `)) + ("`" + (`0` + "`"))))) + ((((` and ` + "`") + (`leading` + ("`" + ` is `))) + (("`" + (`false` + "`")) + (`, ` + ("`" + `func`)))) + ((("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`")) + (`setTimeout` + ("`" + ` with a timeout of `))) + (("`" + (`0` + "`")) + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + ("`" + `_.debounce`)))))))))) + ((((((((("`" + ` and `) + ("`" + (`_.throttle` + "`"))) + ((`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + ("`" + `func`)) + ("`" + (` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke ` + "`")))) + (((`sendMail` + "`") + (` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure ` + ("`" + `batchLog`))) + (("`" + (` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any ` + "`")) + (`maxWait` + ("`" + ` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `))))) + (((("`" + `maxWait`) + ("`" + (` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have ` + "`"))) + ((`lastArgs` + ("`" + ` which means `)) + ("`" + (`func` + "`")))) + (((` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes ` + "`") + (`func` + ("`" + ` at most once per\n * every `))) + (("`" + (`wait` + "`")) + (` milliseconds. The throttled function comes with a ` + ("`" + `cancel`)))))) + ((((("`" + `\n * method to cancel delayed `) + ("`" + (`func` + "`"))) + ((` invocations and a ` + ("`" + `flush`)) + ("`" + (` method to\n * immediately invoke them. Provide ` + "`")))) + (((`options` + "`") + (` to indicate whether ` + ("`" + `func`))) + (("`" + (`\n * should be invoked on the leading and/or trailing edge of the ` + "`")) + (`wait` + ("`" + `\n * timeout. The `))))) + (((("`" + `func`) + ("`" + (` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last ` + "`"))) + ((`func` + ("`" + ` invocation.\n *\n * **Note:** If `)) + ("`" + (`leading` + "`")))) + (((` and ` + "`") + (`trailing` + ("`" + ` options are `))) + (("`" + (`true` + "`")) + (`, ` + ("`" + `func`))))))) + (((((("`" + ` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `) + ("`" + (`wait` + "`"))) + ((` timeout.\n *\n * If ` + ("`" + `wait`)) + ("`" + (` is ` + "`")))) + (((`0` + "`") + (` and ` + ("`" + `leading`))) + (("`" + (` is ` + "`")) + (`false` + ("`" + `, `))))) + (((("`" + `func`) + ("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`"))) + ((`setTimeout` + ("`" + ` with a timeout of `)) + ("`" + (`0` + "`")))) + (((`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`") + (`_.throttle` + ("`" + ` and `))) + (("`" + (`_.debounce` + "`")) + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke ` + ("`" + `renewToken`)))))) + ((((("`" + ` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `) + ("`" + (`value` + "`"))) + ((` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of ` + ("`" + `Object`)) + ("`" + (`. (e.g. arrays, functions, objects, regexes, ` + "`")))) + (((`new Number(0)` + "`") + (`, and ` + ("`" + `new String('')`))) + (("`" + (`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `))))) + (((("`" + `value`) + ("`" + (` is an object, else ` + "`"))) + ((`false` + ("`" + `.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `)) + ("`" + (`value` + "`")))) + (((` is object-like. A value is object-like if it's not ` + ("`" + `null`)) + ("`" + (`\n * and has a ` + "`"))) + ((`typeof` + ("`" + ` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))))))) + (((((((` if ` + "`") + (`value` + ("`" + ` is object-like, else `))) + (("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if ` + ("`" + `value`)))) + ((("`" + ` is classified as a `) + ("`" + (`Symbol` + "`"))) + ((` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))))) + ((((`value` + "`") + (` is a symbol, else ` + ("`" + `false`))) + (("`" + (`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts ` + "`")) + (`value` + ("`" + ` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", + "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `)))) + ((("`" + `Hash`) + ("`" + (`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", + "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to ` + "`"))) + ((`ListCache` + ("`" + `.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", + "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `)) + ("`" + (`MapCache` + "`")))))) + (((((`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", + "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to ` + "`") + (`SetCache` + ("`" + `.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", + "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `))) + (("`" + (`Stack` + "`")) + (`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", + "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", + "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", + "/**\n * A faster alternative to ` + ("`" + `Function#apply`)))) + ((("`" + `, this function invokes `) + ("`" + (`func` + "`"))) + ((`\n * with the ` + ("`" + `this`)) + ("`" + (` binding of ` + "`"))))) + ((((`thisArg` + "`") + (` and the arguments of ` + ("`" + `args`))) + (("`" + (`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The ` + "`")) + (`this` + ("`" + ` binding of `)))) + ((("`" + `func`) + ("`" + (`.\n * @param {Array} args The arguments to invoke ` + "`"))) + ((`func` + ("`" + ` with.\n * @returns {*} Returns the result of `)) + ("`" + (`func` + "`"))))))) + ((((((`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n", + "/**\n * A specialized version of ` + "`") + (`_.every` + ("`" + ` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + (` if all elements pass the predicate check,\n * else ` + ("`" + `false`)))) + ((("`" + `.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = arrayEvery;\n", + "/**\n * A specialized version of `) + ("`" + (`_.filter` + "`"))) + ((` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", + "var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of ` + ("`" + `_.includes`)) + ("`" + (` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns ` + "`"))))) + ((((`true` + "`") + (` if ` + ("`" + `target`))) + (("`" + (` is found, else ` + "`")) + (`false` + ("`" + `.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n", + "/**\n * This function is like `)))) + ((("`" + `arrayIncludes`) + ("`" + (` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + ("`" + (`target` + "`")))))) + (((((` is found, else ` + "`") + (`false` + ("`" + `.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n", + "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `))) + (("`" + (`value` + "`")) + (`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable ` + ("`" + `arguments.length`)))) + ((("`" + ` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", + "/**\n * A specialized version of `) + ("`" + (`_.map` + "`"))) + ((` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", + "/**\n * Appends the elements of ` + ("`" + `values`)) + ("`" + (` to ` + "`"))))) + ((((`array` + "`") + (`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns ` + ("`" + `array`))) + (("`" + (`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n", + "/**\n * A specialized version of ` + "`")) + (`_.some` + ("`" + ` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `)))) + ((("`" + (`true` + "`")) + (` if any element passes the predicate check,\n * else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", + "var eq = require('./eq');\n\n/**\n * Gets the index at which the ` + "`")) + (`key` + ("`" + ` is found in `))))))))) + (((((((("`" + `array`) + ("`" + (` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else ` + "`"))) + ((`-1` + ("`" + `.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", + "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `)) + ("`" + (`assignValue` + "`")))) + (((` and ` + "`") + (`assignMergeValue` + ("`" + ` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", + "var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `))) + (("`" + (`_.forEach` + "`")) + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns ` + ("`" + `collection`))))) + (((("`" + `.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `) + ("`" + (`_.every` + "`"))) + ((` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if all elements pass the predicate check,\n * else ` + "`")))) + (((`false` + "`") + (`\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nmodule.exports = baseEvery;\n", + "var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like ` + ("`" + `_.max`))) + (("`" + (` and ` + "`")) + (`_.min` + ("`" + ` which accepts a\n * `)))))) + ((((("`" + `comparator`) + ("`" + (` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of ` + "`"))) + ((`_.filter` + ("`" + ` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n", + "/**\n * The base implementation of `)) + ("`" + (`_.findIndex` + "`")))) + (((` and ` + "`") + (`_.findLastIndex` + ("`" + ` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `))) + (("`" + (`-1` + "`")) + (`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n", + "var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of ` + ("`" + `_.flatten`))))) + (((("`" + ` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `) + ("`" + (`predicate` + "`"))) + ((` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n", + "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of ` + ("`" + `baseForOwn`)) + ("`" + (` which iterates over ` + "`")))) + (((`object` + "`") + (`\n * properties returned by ` + ("`" + `keysFunc`))) + (("`" + (` and invokes ` + "`")) + (`iteratee` + ("`" + ` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `))))))) + (((((("`" + `false`) + ("`" + (`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of ` + "`"))) + ((`object` + ("`" + `.\n * @returns {Object} Returns `)) + ("`" + (`object` + "`")))) + (((`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", + "var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of ` + "`") + (`_.forOwn` + ("`" + ` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `))) + (("`" + (`object` + "`")) + (`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", + "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of ` + ("`" + `_.get`))))) + (((("`" + ` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", + "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `) + ("`" + (`getAllKeys` + "`"))) + ((` and ` + ("`" + `getAllKeysIn`)) + ("`" + (` which uses\n * ` + "`")))) + (((`keysFunc` + "`") + (` and ` + ("`" + `symbolsFunc`))) + (("`" + (` to get the enumerable property names and\n * symbols of ` + "`")) + (`object` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `)))))) + ((((("`" + `object`) + ("`" + (`.\n * @param {Function} symbolsFunc The function to get the symbols of ` + "`"))) + ((`object` + ("`" + `.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", + "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `)) + ("`" + (`Object#toString` + "`")))) + (((` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of ` + "`") + (`getTag` + ("`" + ` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `))) + (("`" + (`toStringTag` + "`")) + (`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", + "/**\n * The base implementation of ` + ("`" + `_.gt`))))) + (((("`" + ` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + ("`" + (` is greater than ` + "`")))) + (((`other` + ("`" + `,\n * else `)) + ("`" + (`false` + "`"))) + ((`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n", + "/**\n * The base implementation of ` + ("`" + `_.hasIn`)) + ("`" + (` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns ` + "`")))))))) + (((((((`true` + "`") + (` if ` + ("`" + `key`))) + (("`" + (` exists, else ` + "`")) + (`false` + ("`" + `.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", + "var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `)))) + ((("`" + `_.indexOf`) + ("`" + (` without ` + "`"))) + ((`fromIndex` + ("`" + ` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `)) + ("`" + (`-1` + "`"))))) + ((((`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n", + "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/* Built-in method references for those with the same name as other ` + "`") + (`lodash` + ("`" + ` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `))) + (("`" + (`_.intersection` + "`")) + (`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseIntersection;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + ("`" + `Object#toString`)))) + ((("`" + ` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `) + ("`" + (`_.isArguments` + "`"))) + ((`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`")))))) + (((((`value` + "`") + (` is an ` + ("`" + `arguments`))) + (("`" + (` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", + "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of ` + "`")) + (`_.isEqual` + ("`" + ` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `)))) + ((("`" + `value`) + ("`" + (` and ` + "`"))) + ((`other` + ("`" + ` objects.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))))) + ((((` if the values are equivalent, else ` + "`") + (`false` + ("`" + `.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", + "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `))) + (("`" + (`Object#toString` + "`")) + (` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of ` + ("`" + `baseIsEqual`)))) + ((("`" + (` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See ` + "`")) + (`baseIsEqual` + ("`" + ` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `))) + (("`" + (`object` + "`")) + (` and ` + ("`" + `other`))))))) + (((((("`" + ` objects.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if the objects are equivalent, else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", + "var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of ` + "`")))) + (((`_.isMatch` + "`") + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`object` + ("`" + ` is a match, else `))))) + (((("`" + `false`) + ("`" + (`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n", + "/**\n * The base implementation of ` + "`"))) + ((`_.isNaN` + ("`" + ` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))) + (((` if ` + "`") + (`value` + ("`" + ` is `))) + (("`" + (`NaN` + "`")) + (`, else ` + ("`" + `false`)))))) + ((((("`" + `.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n", + "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `) + ("`" + (`RegExp` + "`"))) + ((`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of ` + ("`" + `_.isNative`)) + ("`" + (` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")))) + (((`true` + "`") + (` if ` + ("`" + `value`))) + (("`" + (` is a native function,\n * else ` + "`")) + (`false` + ("`" + `.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", + "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `))))) + (((("`" + `Object#toString`) + ("`" + (` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify ` + "`"))) + ((`toStringTag` + ("`" + ` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `)) + ("`" + (`_.isTypedArray` + "`")))) + (((` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))) + ((`value` + ("`" + ` is a typed array, else `)) + ("`" + (`false` + "`")))))))))))) + (((((((((((`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", + "var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of ` + "`") + (`_.iteratee` + ("`" + `.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `))) + (("`" + (`typeof` + "`")) + (` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n", + "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of ` + ("`" + `_.keys`)))) + ((("`" + ` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", + "/**\n * The base implementation of `) + ("`" + (`_.lt` + "`"))) + ((` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))))) + ((((`value` + "`") + (` is less than ` + ("`" + `other`))) + (("`" + (`,\n * else ` + "`")) + (`false` + ("`" + `.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nmodule.exports = baseLt;\n", + "var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `)))) + ((("`" + `_.map`) + ("`" + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n", + "var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of ` + "`"))) + ((`_.matches` + ("`" + ` which doesn't clone `)) + ("`" + (`source` + "`")))))) + (((((`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n", + "var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of ` + "`") + (`_.matchesProperty` + ("`" + ` which doesn't clone `))) + (("`" + (`srcValue` + "`")) + (`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n", + "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity');\n\n/**\n * The base implementation of ` + ("`" + `_.orderBy`)))) + ((("`" + ` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `) + ("`" + (`iteratees` + "`"))) + ((`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n", + "/**\n * The base implementation of ` + ("`" + `_.property`)) + ("`" + (` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n", + "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of ` + "`"))))) + ((((`baseProperty` + "`") + (` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n", + "/* Built-in method references for those with the same name as other ` + ("`" + `lodash`))) + (("`" + (` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of ` + "`")) + (`_.range` + ("`" + ` and `)))) + ((("`" + `_.rangeRight`) + ("`" + (` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nmodule.exports = baseRange;\n", + "var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of ` + "`"))) + ((`_.rest` + ("`" + ` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n", + "var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `)) + ("`" + (`setToString` + "`"))))))) + ((((((` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The ` + "`") + (`toString` + ("`" + ` result.\n * @returns {Function} Returns `))) + (("`" + (`func` + "`")) + (`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of ` + ("`" + `_.some`)))) + ((("`" + ` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if any element passes the predicate check,\n * else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n", + "/**\n * The base implementation of ` + "`"))))) + ((((`_.sortBy` + "`") + (` which uses ` + ("`" + `comparer`))) + (("`" + (` to define the\n * sort order of ` + "`")) + (`array` + ("`" + ` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `)))) + ((("`" + `array`) + ("`" + (`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n", + "/**\n * The base implementation of ` + "`"))) + ((`_.times` + ("`" + ` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `)) + ("`" + (`iteratee` + "`")))))) + (((((`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", + "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various ` + "`") + (`Number` + ("`" + ` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `))) + (("`" + (`_.toString` + "`")) + (` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", + "/**\n * The base implementation of ` + ("`" + `_.unary`)))) + ((("`" + ` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", + "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `) + ("`" + (`_.uniqBy` + "`"))) + ((` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n", + "/**\n * Checks if a ` + ("`" + `cache`)) + ("`" + (` value for ` + "`"))))) + ((((`key` + "`") + (` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if an entry for ` + "`")) + (`key` + ("`" + ` exists, else `)))) + ((("`" + (`false` + "`")) + (`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", + "var isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Casts ` + ("`" + `value`))) + (("`" + (` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nmodule.exports = castArrayLikeObject;\n", + "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts ` + "`")) + (`value` + ("`" + ` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", + "var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `)))))))) + ((((((("`" + `value`) + ("`" + (`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n", + "var compareAscending = require('./_compareAscending');\n\n/**\n * Used by ` + "`"))) + ((`_.orderBy` + ("`" + ` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `)) + ("`" + (`orders` + "`")))) + (((` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for ` + "`") + (`object` + ("`" + `.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `))) + (("`" + (`Array#sort` + "`")) + (` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // ` + ("`" + `object`))))) + (((("`" + ` and `) + ("`" + (`other` + "`"))) + ((`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n", + "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", + "var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a ` + ("`" + `baseEach`)) + ("`" + (` or ` + "`")))) + (((`baseEachRight` + "`") + (` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n", + "/**\n * Creates a base function for methods like ` + ("`" + `_.forIn`))) + (("`" + (` and ` + "`")) + (`_.forOwn` + ("`" + `.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", + "var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `)))))) + ((((("`" + `_.find`) + ("`" + (` or ` + "`"))) + ((`_.findLast` + ("`" + ` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n", + "var baseRange = require('./_baseRange'),\n isIterateeCall = require('./_isIterateeCall'),\n toFinite = require('./toFinite');\n\n/**\n * Creates a `)) + ("`" + (`_.range` + "`")))) + (((` or ` + "`") + (`_.rangeRight` + ("`" + ` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `))) + (("`" + (`-0` + "`")) + (` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nmodule.exports = createRange;\n", + "var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various ` + ("`" + `Number`))))) + (((("`" + ` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `) + ("`" + (`values` + "`"))) + ((`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n", + "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", + "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of ` + ("`" + `baseIsEqualDeep`)) + ("`" + (` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See ` + "`")))) + (((`baseIsEqual` + "`") + (` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed ` + ("`" + `array`))) + (("`" + (` and ` + "`")) + (`other` + ("`" + ` objects.\n * @returns {boolean} Returns `))))))) + (((((("`" + `true`) + ("`" + (` if the arrays are equivalent, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", + "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `)) + ("`" + (`Object#toString` + "`")))) + (((` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of ` + "`") + (`baseIsEqualDeep` + ("`" + ` for comparing objects of\n * the same `))) + (("`" + (`toStringTag` + "`")) + (`.\n *\n * **Note:** This function only supports comparing values with tags of\n * ` + ("`" + `Boolean`))))) + (((("`" + `, `) + ("`" + (`Date` + "`"))) + ((`, ` + ("`" + `Error`)) + ("`" + (`, ` + "`")))) + (((`Number` + "`") + (`, ` + ("`" + `RegExp`))) + (("`" + (`, or ` + "`")) + (`String` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `)))))) + ((((("`" + `toStringTag`) + ("`" + (` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See ` + "`"))) + ((`baseIsEqual` + ("`" + ` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `)) + ("`" + (`object` + "`")))) + (((` and ` + "`") + (`other` + ("`" + ` objects.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + (` if the objects are equivalent, else ` + ("`" + `false`))))) + (((("`" + `.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `) + ("`" + (`1` + "`"))) + ((` or ` + ("`" + `0`)) + ("`" + (` and dates to milliseconds.\n // Invalid dates are coerced to ` + "`")))) + (((`NaN` + ("`" + `.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", + "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `)) + ("`" + (`baseIsEqualDeep` + "`"))) + ((` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See ` + ("`" + `baseIsEqual`)) + ("`" + (` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed ` + "`"))))))))) + ((((((((`object` + "`") + (` and ` + ("`" + `other`))) + (("`" + (` objects.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if the objects are equivalent, else `)))) + ((("`" + `false`) + ("`" + (`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non ` + "`"))) + ((`Object` + ("`" + ` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", + "/** Detect free variable `)) + ("`" + (`global` + "`"))))) + ((((` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", + "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of ` + "`") + (`object` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", + "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `))) + (("`" + (`map` + "`")) + (`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", + "var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of ` + ("`" + `object`)))) + ((("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `) + ("`" + (`object` + "`"))) + ((`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n", + "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at ` + ("`" + `key`)) + ("`" + (` of ` + "`")))))) + (((((`object` + "`") + (`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else ` + ("`" + `undefined`))) + (("`" + (`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", + "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", + "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [` + "`")) + (`toStringTag` + ("`" + `](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `)))) + ((("`" + `baseGetTag`) + ("`" + (` which ignores ` + "`"))) + ((`Symbol.toStringTag` + ("`" + ` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `)) + ("`" + (`toStringTag` + "`"))))) + ((((`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", + "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other ` + "`") + (`lodash` + ("`" + ` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `))) + (("`" + (`object` + "`")) + (`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", + "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** ` + ("`" + `Object#toString`)))) + ((("`" + ` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `) + ("`" + (`toStringTag` + "`"))) + ((` of ` + ("`" + `value`)) + ("`" + (`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the ` + "`"))))))) + ((((((`toStringTag` + "`") + (`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", + "/**\n * Gets the value at ` + ("`" + `key`))) + (("`" + (` of ` + "`")) + (`object` + ("`" + `.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", + "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `)))) + ((("`" + `path`) + ("`" + (` exists on ` + "`"))) + ((`object` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))))) + ((((` if ` + "`") + (`path` + ("`" + ` exists, else `))) + (("`" + (`false` + "`")) + (`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", + "/**\n * Removes ` + ("`" + `key`)))) + ((("`" + ` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if the entry was removed, else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for ` + "`")))))) + (((((`undefined` + "`") + (` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for ` + ("`" + `key`))) + (("`" + (`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for ` + "`")) + (`key` + ("`" + ` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `)))) + ((("`" + `true`) + ("`" + (` if an entry for ` + "`"))) + ((`key` + ("`" + ` exists, else `)) + ("`" + (`false` + "`"))))) + ((((`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for ` + "`") + (`undefined` + ("`" + ` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `))) + (("`" + (`key` + "`")) + (` to ` + ("`" + `value`)))) + ((("`" + (`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", + "var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is a flattenable `))) + (("`" + (`arguments` + "`")) + (` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)))))))) + ((((((("`" + ` if `) + ("`" + (`value` + "`"))) + ((` is flattenable, else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n", + "/** Used as references for various ` + "`")))) + (((`Number` + "`") + (` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `))))) + (((("`" + `value`) + ("`" + (` is a valid index, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", + "var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))) + (((` if the arguments are from an iteratee call,\n * else ` + "`") + (`false` + ("`" + `.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n", + "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `))) + (("`" + (`value` + "`")) + (` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns ` + ("`" + `true`)))))) + ((((("`" + ` if `) + ("`" + (`value` + "`"))) + ((` is a property name, else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", + "/**\n * Checks if ` + "`")))) + (((`value` + "`") + (` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is suitable, else `))))) + (((("`" + `false`) + ("`" + (`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", + "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if ` + "`"))) + ((`func` + ("`" + ` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))) + (((` if ` + ("`" + `func`)) + ("`" + (` is masked, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `)) + ("`" + (`value` + "`"))))))) + ((((((` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + ("`" + ` if `))) + (("`" + (`value` + "`")) + (` is a prototype, else ` + ("`" + `false`)))) + ((("`" + `.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", + "var isObject = require('./isObject');\n\n/**\n * Checks if `) + ("`" + (`value` + "`"))) + ((` is suitable for strict equality comparisons, i.e. ` + ("`" + `===`)) + ("`" + (`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))))) + ((((`true` + "`") + (` if ` + ("`" + `value`))) + (("`" + (` if suitable for strict\n * equality comparisons, else ` + "`")) + (`false` + ("`" + `.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", + "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `)))) + ((("`" + `key`) + ("`" + (` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if the entry was removed, else `)) + ("`" + (`false` + "`")))))) + (((((`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for ` + "`") + (`key` + ("`" + `.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `))) + (("`" + (`key` + "`")) + (` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + ` if an entry for `) + ("`" + (`key` + "`"))) + ((` exists, else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache ` + "`"))))) + ((((`key` + "`") + (` to ` + ("`" + `value`))) + (("`" + (`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", + "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Removes ` + "`")) + (`key` + ("`" + ` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `)))) + ((("`" + (`true` + "`")) + (` if the entry was removed, else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for ` + "`")) + (`key` + ("`" + `.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `)))))))))) + ((((((((("`" + `key`) + ("`" + (` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if an entry for `)) + ("`" + (`key` + "`")))) + (((` exists, else ` + "`") + (`false` + ("`" + `.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `))) + (("`" + (`key` + "`")) + (` to ` + ("`" + `value`))))) + (((("`" + `.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", + "/**\n * Converts `) + ("`" + (`map` + "`"))) + ((` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", + "/**\n * A specialized version of ` + ("`" + `matchesProperty`)) + ("`" + (` for source values suitable\n * for strict equality comparisons, i.e. ` + "`")))) + (((`===` + "`") + (`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n", + "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of ` + ("`" + `_.memoize`))) + (("`" + (` which clears the memoized function's\n * cache when it exceeds ` + "`")) + (`MAX_MEMOIZE_SIZE` + ("`" + `.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", + "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", + "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `)))))) + ((((("`" + `lodash`) + ("`" + (` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", + "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable ` + "`"))) + ((`exports` + ("`" + `. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `)) + ("`" + (`module` + "`")))) + (((`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension ` + "`") + (`module.exports` + ("`" + `. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `))) + (("`" + (`process` + "`")) + (` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use ` + ("`" + `util.types`))))) + (((("`" + ` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `) + ("`" + (`process.binding('util')` + "`"))) + ((` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [` + ("`" + `toStringTag`)) + ("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts ` + "`")))) + (((`value` + "`") + (` to a string using ` + ("`" + `Object.prototype.toString`))) + (("`" + (`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", + "/**\n * Creates a unary function that invokes ` + "`")) + (`func` + ("`" + ` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", + "var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `))))))) + (((((("`" + `lodash`) + ("`" + (` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of ` + "`"))) + ((`baseRest` + ("`" + ` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n", + "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `)) + ("`" + (`self` + "`")))) + (((`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", + "/** Used to stand-in for ` + "`") + (`undefined` + ("`" + ` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `))) + (("`" + (`value` + "`")) + (` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", + "/**\n * Checks if ` + ("`" + `value`))))) + (((("`" + ` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + ("`" + (` is found, else ` + "`")))) + (((`false` + "`") + (`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", + "/**\n * Converts ` + ("`" + `set`))) + (("`" + (` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", + "var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the ` + "`")) + (`toString` + ("`" + ` method of `)))))) + ((((("`" + `func`) + ("`" + (` to return ` + "`"))) + ((`string` + ("`" + `.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `)) + ("`" + (`toString` + "`")))) + (((` result.\n * @returns {Function} Returns ` + "`") + (`func` + ("`" + `.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n", + "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `))) + (("`" + (`lodash` + "`")) + (` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke ` + ("`" + `identity`))))) + (((("`" + ` instead\n * of `) + ("`" + (`func` + "`"))) + ((` when it's called ` + ("`" + `HOT_COUNT`)) + ("`" + (` or more times in ` + "`")))) + (((`HOT_SPAN` + ("`" + `\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n", + "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", + "/**\n * Removes `)) + ("`" + (`key` + "`"))) + ((` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if the entry was removed, else ` + "`")))))))) + (((((((`false` + "`") + (`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", + "/**\n * Gets the stack value for ` + ("`" + `key`))) + (("`" + (`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", + "/**\n * Checks if a stack value for ` + "`")) + (`key` + ("`" + ` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `)))) + ((("`" + `true`) + ("`" + (` if an entry for ` + "`"))) + ((`key` + ("`" + ` exists, else `)) + ("`" + (`false` + "`"))))) + ((((`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", + "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack ` + "`") + (`key` + ("`" + ` to `))) + (("`" + (`value` + "`")) + (`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", + "/**\n * A specialized version of ` + ("`" + `_.indexOf`)))) + ((("`" + ` which performs strict equality\n * comparisons of values, i.e. `) + ("`" + (`===` + "`"))) + ((`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else ` + ("`" + `-1`)) + ("`" + (`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n", + "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts ` + "`")))))) + (((((`string` + "`") + (` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", + "var isSymbol = require('./isSymbol');\n\n/** Used as references for various ` + ("`" + `Number`))) + (("`" + (` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts ` + "`")) + (`value` + ("`" + ` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", + "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `)))) + ((("`" + `func`) + ("`" + (` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", + "/**\n * Creates a function that returns ` + "`"))) + ((`value` + ("`" + `.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n", + "var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `)) + ("`" + (`lodash` + "`"))))) + ((((` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking ` + "`") + (`func` + ("`" + ` until after `))) + (("`" + (`wait` + "`")) + (`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a ` + ("`" + `cancel`)))) + ((("`" + ` method to cancel\n * delayed `) + ("`" + (`func` + "`"))) + ((` invocations and a ` + ("`" + `flush`)) + ("`" + (` method to immediately invoke them.\n * Provide ` + "`"))))))) + ((((((`options` + "`") + (` to indicate whether ` + ("`" + `func`))) + (("`" + (` should be invoked on the\n * leading and/or trailing edge of the ` + "`")) + (`wait` + ("`" + ` timeout. The `)))) + ((("`" + `func`) + ("`" + (` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last ` + "`"))) + ((`func` + ("`" + `\n * invocation.\n *\n * **Note:** If `)) + ("`" + (`leading` + "`"))))) + ((((` and ` + "`") + (`trailing` + ("`" + ` options are `))) + (("`" + (`true` + "`")) + (`, ` + ("`" + `func`)))) + ((("`" + ` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `) + ("`" + (`wait` + "`"))) + ((` timeout.\n *\n * If ` + ("`" + `wait`)) + ("`" + (` is ` + "`")))))) + (((((`0` + "`") + (` and ` + ("`" + `leading`))) + (("`" + (` is ` + "`")) + (`false` + ("`" + `, `)))) + ((("`" + `func`) + ("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`"))) + ((`setTimeout` + ("`" + ` with a timeout of `)) + ("`" + (`0` + "`"))))) + ((((`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`") + (`_.debounce` + ("`" + ` and `))) + (("`" + (`_.throttle` + "`")) + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + ("`" + `func`)))) + ((("`" + (` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke ` + "`")) + (`sendMail` + ("`" + ` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `))) + (("`" + (`batchLog` + "`")) + (` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any ` + ("`" + `maxWait`))))))))) + (((((((("`" + ` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `) + ("`" + (`maxWait` + "`"))) + ((` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have ` + ("`" + `lastArgs`)) + ("`" + (` which means ` + "`")))) + (((`func` + "`") + (` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n", + "/**\n * Performs a\n * [` + ("`" + `SameValueZero`))) + (("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if the values are equivalent, else `))))) + (((("`" + `false`) + ("`" + (`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", + "var arrayEvery = require('./_arrayEvery'),\n baseEvery = require('./_baseEvery'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if ` + "`"))) + ((`predicate` + ("`" + ` returns truthy for **all** elements of `)) + ("`" + (`collection` + "`")))) + (((`.\n * Iteration is stopped once ` + "`") + (`predicate` + ("`" + ` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `))) + (("`" + (`true` + "`")) + (` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like ` + ("`" + `_.map`)))))) + ((((("`" + `.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if all elements pass the predicate check,\n * else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The ` + "`")))) + (((`_.matches` + "`") + (` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The ` + ("`" + `_.matchesProperty`))) + (("`" + (` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The ` + "`")) + (`_.property` + ("`" + ` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n", + "var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `))))) + (((("`" + `collection`) + ("`" + (`, returning an array of all elements\n * ` + "`"))) + ((`predicate` + ("`" + ` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `)) + ("`" + (`_.remove` + "`")))) + (((`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The ` + "`") + (`_.matches` + ("`" + ` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `))) + (("`" + (`_.matchesProperty` + "`")) + (` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The ` + ("`" + `_.property`))))))) + (((((("`" + ` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n", + "var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `) + ("`" + (`collection` + "`"))) + ((`, returning the first element\n * ` + ("`" + `predicate`)) + ("`" + (` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else ` + "`")))) + (((`undefined` + "`") + (`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The ` + ("`" + `_.matches`))) + (("`" + (` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The ` + "`")) + (`_.matchesProperty` + ("`" + ` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `))))) + (((("`" + `_.property`) + ("`" + (` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n", + "var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other ` + "`"))) + ((`lodash` + ("`" + ` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `)) + ("`" + (`_.find` + "`")))) + (((` except that it returns the index of the first\n * element ` + "`") + (`predicate` + ("`" + ` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `))) + (("`" + (`-1` + "`")) + (`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The ` + ("`" + `_.matches`)))))) + ((((("`" + ` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `) + ("`" + (`_.matchesProperty` + "`"))) + ((` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The ` + ("`" + `_.property`)) + ("`" + (` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n", + "var baseFlatten = require('./_baseFlatten'),\n map = require('./map');\n\n/**\n * Creates a flattened array of values by running each element in ` + "`")))) + (((`collection` + "`") + (`\n * thru ` + ("`" + `iteratee`))) + (("`" + (` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nmodule.exports = flatMap;\n", + "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at ` + "`")) + (`path` + ("`" + ` of `))))) + (((("`" + `object`) + ("`" + (`. If the resolved value is\n * ` + "`"))) + ((`undefined` + ("`" + `, the `)) + ("`" + (`defaultValue` + "`")))) + (((` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for ` + ("`" + `undefined`)) + ("`" + (` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", + "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if ` + "`"))) + ((`path` + ("`" + ` is a direct or inherited property of `)) + ("`" + (`object` + "`")))))))) + (((((((`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns ` + "`") + (`true` + ("`" + ` if `))) + (("`" + (`path` + "`")) + (` exists, else ` + ("`" + `false`)))) + ((("`" + `.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", + "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `) + ("`" + (`value` + "`"))) + ((`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n", + "var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject');\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [` + ("`" + `SameValueZero`)) + ("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nmodule.exports = intersection;\n", + "var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if ` + "`"))))) + ((((`value` + "`") + (` is likely an ` + ("`" + `arguments`))) + (("`" + (` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `)))) + ((("`" + `value`) + ("`" + (` is an ` + "`"))) + ((`arguments` + ("`" + ` object,\n * else `)) + ("`" + (`false` + "`")))))) + (((((`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", + "/**\n * Checks if ` + "`") + (`value` + ("`" + ` is classified as an `))) + (("`" + (`Array` + "`")) + (` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + ` if `) + ("`" + (`value` + "`"))) + ((` is an array, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", + "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if ` + "`"))))) + ((((`value` + "`") + (` is array-like. A value is considered array-like if it's\n * not a function and has a ` + ("`" + `value.length`))) + (("`" + (` that's an integer greater than or\n * equal to ` + "`")) + (`0` + ("`" + ` and less than or equal to `)))) + ((("`" + (`Number.MAX_SAFE_INTEGER` + "`")) + (`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is array-like, else `))))))) + (((((("`" + `false`) + ("`" + (`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", + "var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like ` + "`"))) + ((`_.isArrayLike` + ("`" + ` except that it also checks if `)) + ("`" + (`value` + "`")))) + (((`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + ("`" + ` if `))) + (("`" + (`value` + "`")) + (` is an array-like object,\n * else ` + ("`" + `false`))))) + (((("`" + `.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n", + "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `) + ("`" + (`exports` + "`"))) + ((`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable ` + ("`" + `module`)) + ("`" + (`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension ` + "`")))) + (((`module.exports` + "`") + (`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other ` + ("`" + `lodash`))) + (("`" + (` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)))))) + ((((("`" + `true`) + ("`" + (` if ` + "`"))) + ((`value` + ("`" + ` is a buffer, else `)) + ("`" + (`false` + "`")))) + (((`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", + "var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, ` + "`") + (`Object` + ("`" + ` objects, regexes,\n * sets, strings, symbols, and typed arrays. `))) + (("`" + (`Object` + "`")) + (` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. ` + ("`" + `===`))))) + (((("`" + `.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `) + ("`" + (`true` + "`"))) + ((` if the values are equivalent, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** ` + "`")))) + (((`Object#toString` + ("`" + ` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `)) + ("`" + (`value` + "`"))) + ((` is classified as a ` + ("`" + `Function`)) + ("`" + (` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))))))))))) + ((((((((((`true` + "`") + (` if ` + ("`" + `value`))) + (("`" + (` is a function, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `)))) + ((("`" + `Object#toString`) + ("`" + (` avoids issues with the ` + "`"))) + ((`typeof` + ("`" + ` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", + "/** Used as references for various `)) + ("`" + (`Number` + "`"))))) + ((((` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if ` + "`") + (`value` + ("`" + ` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`))) + (("`" + (`ToLength` + "`")) + (`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + ` if `) + ("`" + (`value` + "`"))) + ((` is a valid length, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", + "var isNumber = require('./isNumber');\n\n/**\n * Checks if ` + "`")))))) + (((((`value` + "`") + (` is ` + ("`" + `NaN`))) + (("`" + (`.\n *\n * **Note:** This method is based on\n * [` + "`")) + (`Number.isNaN` + ("`" + `](https://mdn.io/Number/isNaN) and is not the same as\n * global [`)))) + ((("`" + `isNaN`) + ("`" + (`](https://mdn.io/isNaN) which returns ` + "`"))) + ((`true` + ("`" + ` for\n * `)) + ("`" + (`undefined` + "`"))))) + ((((` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + ("`" + ` if `))) + (("`" + (`value` + "`")) + (` is ` + ("`" + `NaN`)))) + ((("`" + `, else `) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n // An ` + ("`" + `NaN`)) + ("`" + (` primitive is the only value that is not equal to itself.\n // Perform the ` + "`"))))))) + ((((((`toStringTag` + "`") + (` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n", + "/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is ` + "`")) + (`null` + ("`" + ` or `)))) + ((("`" + `undefined`) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + ("`" + (`value` + "`"))))) + ((((` is nullish, else ` + "`") + (`false` + ("`" + `.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `))) + (("`" + (`Object#toString` + "`")) + (` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if ` + ("`" + `value`)))) + ((("`" + ` is classified as a `) + ("`" + (`Number` + "`"))) + ((` primitive or object.\n *\n * **Note:** To exclude ` + ("`" + `Infinity`)) + ("`" + (`, ` + "`")))))) + (((((`-Infinity` + "`") + (`, and ` + ("`" + `NaN`))) + (("`" + (`, which are\n * classified as numbers, use the ` + "`")) + (`_.isFinite` + ("`" + ` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)))) + ((("`" + `true`) + ("`" + (` if ` + "`"))) + ((`value` + ("`" + ` is a number, else `)) + ("`" + (`false` + "`"))))) + ((((`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n", + "/**\n * Checks if ` + "`") + (`value` + ("`" + ` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `))) + (("`" + (`Object` + "`")) + (`. (e.g. arrays, functions, objects, regexes, ` + ("`" + `new Number(0)`)))) + ((("`" + (`, and ` + "`")) + (`new String('')` + ("`" + `)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + (` if ` + ("`" + `value`)))))))) + ((((((("`" + ` is an object, else `) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", + "/**\n * Checks if ` + ("`" + `value`)) + ("`" + (` is object-like. A value is object-like if it's not ` + "`")))) + (((`null` + "`") + (`\n * and has a ` + ("`" + `typeof`))) + (("`" + (` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `))))) + (((("`" + `value`) + ("`" + (` is object-like, else ` + "`"))) + ((`false` + ("`" + `.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", + "var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `)) + ("`" + (`Object#toString` + "`")))) + (((` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the ` + "`") + (`Object` + ("`" + ` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `))) + (("`" + (`value` + "`")) + (` is a plain object, that is, an object created by the\n * ` + ("`" + `Object`)))))) + ((((("`" + ` constructor or one with a `) + ("`" + (`[[Prototype]]` + "`"))) + ((` of ` + ("`" + `null`)) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")))) + (((`true` + "`") + (` if ` + ("`" + `value`))) + (("`" + (` is a plain object, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", + "var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `))))) + (((("`" + `Object#toString`) + ("`" + (` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is classified as a `)) + ("`" + (`String` + "`")))) + (((` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + ("`" + ` if `))) + (("`" + (`value` + "`")) + (` is a string, else ` + ("`" + `false`))))))) + (((((("`" + `.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `) + ("`" + (`Object#toString` + "`"))) + ((` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if ` + ("`" + `value`)) + ("`" + (` is classified as a ` + "`")))) + (((`Symbol` + "`") + (` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is a symbol, else `))))) + (((("`" + `false`) + ("`" + (`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", + "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))) + (((` if ` + "`") + (`value` + ("`" + ` is a typed array, else `))) + (("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", + "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of ` + ("`" + `object`)))))) + ((((("`" + `.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", + "/**\n * Gets the last element of `) + ("`" + (`array` + "`"))) + ((`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of ` + ("`" + `array`)) + ("`" + (`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n", + "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in ` + "`")))) + (((`collection` + "`") + (` thru\n * ` + ("`" + `iteratee`))) + (("`" + (`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * ` + "`")) + (`_.every` + ("`" + `, `))))) + (((("`" + `_.filter`) + ("`" + (`, ` + "`"))) + ((`_.map` + ("`" + `, `)) + ("`" + (`_.mapValues` + "`")))) + (((`, ` + ("`" + `_.reject`)) + ("`" + (`, and ` + "`"))) + ((`_.some` + ("`" + `.\n *\n * The guarded methods are:\n * `)) + ("`" + (`ary` + "`"))))))))) + ((((((((`, ` + "`") + (`chunk` + ("`" + `, `))) + (("`" + (`curry` + "`")) + (`, ` + ("`" + `curryRight`)))) + ((("`" + `, `) + ("`" + (`drop` + "`"))) + ((`, ` + ("`" + `dropRight`)) + ("`" + (`, ` + "`"))))) + ((((`every` + "`") + (`,\n * ` + ("`" + `fill`))) + (("`" + (`, ` + "`")) + (`invert` + ("`" + `, `)))) + ((("`" + `parseInt`) + ("`" + (`, ` + "`"))) + ((`random` + ("`" + `, `)) + ("`" + (`range` + "`")))))) + (((((`, ` + "`") + (`rangeRight` + ("`" + `, `))) + (("`" + (`repeat` + "`")) + (`,\n * ` + ("`" + `sampleSize`)))) + ((("`" + `, `) + ("`" + (`slice` + "`"))) + ((`, ` + ("`" + `some`)) + ("`" + (`, ` + "`"))))) + ((((`sortBy` + "`") + (`, ` + ("`" + `split`))) + (("`" + (`, ` + "`")) + (`take` + ("`" + `, `)))) + ((("`" + `takeRight`) + ("`" + (`,\n * ` + "`"))) + ((`template` + ("`" + `, `)) + ("`" + (`trim` + "`"))))))) + ((((((`, ` + "`") + (`trimEnd` + ("`" + `, `))) + (("`" + (`trimStart` + "`")) + (`, and ` + ("`" + `words`)))) + ((("`" + `\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `) + ("`" + (`_.property` + "`"))) + ((` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n", + "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as ` + ("`" + `object`)) + ("`" + (` and values generated\n * by running each own enumerable string keyed property of ` + "`"))))) + ((((`object` + "`") + (` thru\n * ` + ("`" + `iteratee`))) + (("`" + (`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The ` + "`")) + (`_.property` + ("`" + ` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", + "var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of `)))) + ((("`" + `array`) + ("`" + (`. If ` + "`"))) + ((`array` + ("`" + ` is empty or falsey,\n * `)) + ("`" + (`undefined` + "`")))))) + (((((` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n", + "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of ` + "`") + (`func` + ("`" + `. If `))) + (("`" + (`resolver` + "`")) + (` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The ` + ("`" + `func`)))) + ((("`" + `\n * is invoked with the `) + ("`" + (`this` + "`"))) + ((` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the ` + ("`" + `cache`)) + ("`" + (` property on the memoized\n * function. Its creation may be customized by replacing the ` + "`"))))) + ((((`_.memoize.Cache` + "`") + (`\n * constructor with one whose instances implement the\n * [` + ("`" + `Map`))) + (("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of ` + "`")) + (`clear` + ("`" + `, `)))) + ((("`" + (`delete` + "`")) + (`, ` + ("`" + `get`))) + (("`" + (`, ` + "`")) + (`has` + ("`" + `, and `)))))))) + ((((((("`" + `set`) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace ` + "`"))) + ((`_.memoize.Cache` + ("`" + `.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `)) + ("`" + (`MapCache` + "`")))) + (((`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", + "var baseExtremum = require('./_baseExtremum'),\n baseLt = require('./_baseLt'),\n identity = require('./identity');\n\n/**\n * Computes the minimum value of ` + "`") + (`array` + ("`" + `. If `))) + (("`" + (`array` + "`")) + (` is empty or falsey,\n * ` + ("`" + `undefined`))))) + (((("`" + ` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nmodule.exports = min;\n", + "/**\n * This method returns `) + ("`" + (`undefined` + "`"))) + ((`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n", + "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n", + "var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at ` + ("`" + `path`)) + ("`" + (` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", + "var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * ` + "`")))) + (((`start` + "`") + (` up to, but not including, ` + ("`" + `end`))) + (("`" + (`. A step of ` + "`")) + (`-1` + ("`" + ` is used if a negative\n * `)))))) + ((((("`" + `start`) + ("`" + (` is specified without an ` + "`"))) + ((`end` + ("`" + ` or `)) + ("`" + (`step` + "`")))) + (((`. If ` + "`") + (`end` + ("`" + ` is not specified,\n * it's set to `))) + (("`" + (`start` + "`")) + (` with ` + ("`" + `start`))))) + (((("`" + ` then set to `) + ("`" + (`0` + "`"))) + ((`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n", + "var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if ` + ("`" + `predicate`)) + ("`" + (` returns truthy for **any** element of ` + "`")))) + (((`collection` + ("`" + `.\n * Iteration is stopped once `)) + ("`" + (`predicate` + "`"))) + ((` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like ` + ("`" + `_.map`)) + ("`" + (`.\n * @returns {boolean} Returns ` + "`"))))))) + ((((((`true` + "`") + (` if any element passes the predicate check,\n * else ` + ("`" + `false`))) + (("`" + (`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The ` + "`")) + (`_.matches` + ("`" + ` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `)))) + ((("`" + `_.matchesProperty`) + ("`" + (` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The ` + "`"))) + ((`_.property` + ("`" + ` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n", + "var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n", + "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", + "/**\n * This method returns `)) + ("`" + (`false` + "`"))))) + ((((`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns ` + "`") + (`false` + ("`" + `.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", + "var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `))) + (("`" + (`func` + "`")) + (` at most once per\n * every ` + ("`" + `wait`)))) + ((("`" + ` milliseconds. The throttled function comes with a `) + ("`" + (`cancel` + "`"))) + ((`\n * method to cancel delayed ` + ("`" + `func`)) + ("`" + (` invocations and a ` + "`")))))) + (((((`flush` + "`") + (` method to\n * immediately invoke them. Provide ` + ("`" + `options`))) + (("`" + (` to indicate whether ` + "`")) + (`func` + ("`" + `\n * should be invoked on the leading and/or trailing edge of the `)))) + ((("`" + `wait`) + ("`" + (`\n * timeout. The ` + "`"))) + ((`func` + ("`" + ` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `)) + ("`" + (`func` + "`"))))) + ((((` invocation.\n *\n * **Note:** If ` + "`") + (`leading` + ("`" + ` and `))) + (("`" + (`trailing` + "`")) + (` options are ` + ("`" + `true`)))) + ((("`" + (`, ` + "`")) + (`func` + ("`" + ` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `))) + (("`" + (`wait` + "`")) + (` timeout.\n *\n * If ` + ("`" + `wait`)))))))))) + ((((((((("`" + ` is `) + ("`" + (`0` + "`"))) + ((` and ` + ("`" + `leading`)) + ("`" + (` is ` + "`")))) + (((`false` + "`") + (`, ` + ("`" + `func`))) + (("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`")) + (`setTimeout` + ("`" + ` with a timeout of `))))) + (((("`" + `0`) + ("`" + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`"))) + ((`_.throttle` + ("`" + ` and `)) + ("`" + (`_.debounce` + "`")))) + (((`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke ` + "`") + (`renewToken` + ("`" + ` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n", + "var toNumber = require('./toNumber');\n\n/** Used as references for various `))) + (("`" + (`Number` + "`")) + (` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts ` + ("`" + `value`)))))) + ((((("`" + ` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n", + "var toFinite = require('./toFinite');\n\n/**\n * Converts `) + ("`" + (`value` + "`"))) + ((` to an integer.\n *\n * **Note:** This method is loosely based on\n * [` + ("`" + `ToInteger`)) + ("`" + (`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n", + "var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various ` + "`")))) + (((`Number` + "`") + (` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on ` + ("`" + `root`))) + (("`" + (`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts ` + "`")) + (`value` + ("`" + ` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", + "var baseToString = require('./_baseToString');\n\n/**\n * Converts `))))) + (((("`" + `value`) + ("`" + (` to a string. An empty string is returned for ` + "`"))) + ((`null` + ("`" + `\n * and `)) + ("`" + (`undefined` + "`")))) + (((` values. The sign of ` + "`") + (`-0` + ("`" + ` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", + "var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `))) + (("`" + (`_.uniq` + "`")) + (` except that it accepts ` + ("`" + `iteratee`))))))) + (((((("`" + ` which is\n * invoked for each element in `) + ("`" + (`array` + "`"))) + ((` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The ` + ("`" + `_.property`)) + ("`" + (` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n", + "var Mexp=require('./postfix_evaluator.js');\r\nMexp.prototype.formulaEval = function () {\r\n\t\"use strict\";\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tfor(var i=0;i\"+pop2.value+\"\"+arr[i].show+\"\"+pop1.value+\"\",type:10});\r\n\t\t\telse disp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+\"\"+pop1.value+\"\",type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tdisp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+arr[i].show+(pop1.type!=1?\"(\":\"\")+pop1.value+(pop1.type!=1?\")\":\"\"),type:arr[i].type});\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tpop3=disp.pop();\r\n\t\t\tdisp.push({value:arr[i].show+\"(\"+pop3.value+\",\"+pop2.value+\",\"+pop1.value+\")\",type:12});\r\n\t\t}\r\n\t}\r\n\treturn disp[0].value;\r\n};\r\nmodule.exports=Mexp;", + "var Mexp=require('./math_function.js');\r\n\tfunction inc(arr,val){\r\n\t\tfor(var i=0;i(newAr.length-2)?newAr.length-1:inpStr.length-i);x>0;x--){\r\n\t\t\t\tfor(y=0;yprep)stack.push(elem);\r\n\t\t\t\telse {\r\n\t\t\t\t\twhile(prep>=pre&&!flag||flag&&pre1) {\r\n\t\tthrow(new Mexp.exception(\"Uncaught Syntax error\"));\r\n\t}\r\n\treturn stack[0].value>1000000000000000?\"Infinity\":parseFloat(stack[0].value.toFixed(15));\r\n};\r\nMexp.eval=function(str,tokens,obj){\r\n\tif (typeof tokens===\"undefined\") {\r\n\t\treturn this.lex(str).toPostfix().postfixEval();\r\n\t}\r\n\telse if (typeof obj===\"undefined\") {\r\n\t\tif (typeof tokens.length!==\"undefined\") \r\n\t\t\treturn this.lex(str,tokens).toPostfix().postfixEval();\r\n\t\telse\r\n\t\t\treturn this.lex(str).toPostfix().postfixEval(tokens);\r\n\t}\r\n\telse\r\n\t\treturn this.lex(str,tokens).toPostfix().postfixEval(obj);\r\n};\r\nmodule.exports=Mexp;", + "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", + "// Generated by CoffeeScript 1.12.2\n(function() {\n var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - nodeLoadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n moduleLoadTime = getNanoSeconds();\n upTime = process.uptime() * 1e9;\n nodeLoadTime = moduleLoadTime - upTime;\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n", + "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the ` + "`")))) + (((`prop-types` + "`") + (` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in ` + ("`" + `./factoryWithTypeCheckers.js`))) + (("`" + (`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using ` + "`")) + (`prop-types` + ("`" + ` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `))))) + (((("`" + `prop-types`) + ("`" + (` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n", + "var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // ` + "`"))) + ((`cancel` + ("`" + ` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n", + "/** @license React v16.8.4\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function ba(a,b,c,d,e,f,g,h){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[c,d,e,f,g,h],k=0;a=Error(b.replace(/%s/g,function(){return l[k++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction x(a){for(var b=arguments.length-1,c=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,d=0;dthis.eventPool.length&&this.eventPool.push(a)}\nfunction hb(a){a.eventPool=[];a.getPooled=ib;a.release=jb}var kb=y.extend({data:null}),lb=y.extend({data:null}),mb=[9,13,27,32],nb=Ra&&\"CompositionEvent\"in window,ob=null;Ra&&\"documentMode\"in document&&(ob=document.documentMode);\nvar pb=Ra&&\"TextEvent\"in window&&!ob,qb=Ra&&(!nb||ob&&8=ob),rb=String.fromCharCode(32),sb={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},tb=!1;\nfunction ub(a,b){switch(a){case \"keyup\":return-1!==mb.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function vb(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var wb=!1;function xb(a,b){switch(a){case \"compositionend\":return vb(b);case \"keypress\":if(32!==b.which)return null;tb=!0;return rb;case \"textInput\":return a=b.data,a===rb&&tb?null:a;default:return null}}\nfunction yb(a,b){if(wb)return\"compositionend\"===a||!nb&&ub(a,b)?(a=eb(),db=cb=bb=null,wb=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1}function C(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new C(a,0,!1,a,null)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new C(b,1,!1,a[1],null)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new C(a,2,!1,a.toLowerCase(),null)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new C(a,2,!1,a,null)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new C(a,3,!1,a.toLowerCase(),null)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new C(a,3,!0,a,null)});\n[\"capture\",\"download\"].forEach(function(a){D[a]=new C(a,4,!1,a,null)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new C(a,6,!1,a,null)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new C(a,5,!1,a.toLowerCase(),null)});var rc=/[\\-:]([a-z])/g;function sc(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(rc,\nsc);D[b]=new C(b,1,!1,a,null)});\"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/1999/xlink\")});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\")});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new C(a,1,!1,a.toLowerCase(),null)});\nfunction tc(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2zd.length&&zd.push(a)}}}var Fd={},Gd=0,Hd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);\nfunction Id(a){Object.prototype.hasOwnProperty.call(a,Hd)||(a[Hd]=Gd++,Fd[a[Hd]]={});return Fd[a[Hd]]}function Jd(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function Kd(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ld(a,b){var c=Kd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Kd(c)}}function Md(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Md(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Nd(){for(var a=window,b=Jd();b instanceof a.HTMLIFrameElement;){try{a=b.contentDocument.defaultView}catch(c){break}b=Jd(a.document)}return b}function Od(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Pd(){var a=Nd();if(Od(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{b=(b=a.ownerDocument)&&b.defaultView||window;var c=b.getSelection&&b.getSelection();if(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(A){b=null;break a}var f=0,g=-1,h=-1,l=0,k=0,m=a,p=null;b:for(;;){for(var t;;){m!==b||0!==d&&3!==m.nodeType||(g=f+d);m!==e||0!==c&&3!==m.nodeType||(h=f+c);3===m.nodeType&&(f+=m.nodeValue.length);\nif(null===(t=m.firstChild))break;p=m;m=t}for(;;){if(m===a)break b;p===b&&++l===d&&(g=f);p===e&&++k===c&&(h=f);if(null!==(t=m.nextSibling))break;m=p;p=m.parentNode}m=t}b=-1===g||-1===h?null:{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;return{focusedElem:a,selectionRange:b}}\nfunction Qd(a){var b=Nd(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Md(c.ownerDocument.documentElement,c)){if(null!==d&&Od(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ld(c,f);var g=Ld(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Sd={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Td=null,Ud=null,Vd=null,Wd=!1;\nfunction Xd(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(Wd||null==Td||Td!==Jd(c))return null;c=Td;\"selectionStart\"in c&&Od(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return Vd&&dd(Vd,c)?null:(Vd=c,a=y.getPooled(Sd.select,Ud,a,b),a.type=\"select\",a.target=Td,Qa(a),a)}\nvar Yd={eventTypes:Sd,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Id(e);f=sa.onSelect;for(var g=0;g=b.length?void 0:x(\"93\"),b=b[0]),c=b),null==c&&(c=\"\"));a._wrapperState={initialValue:uc(c)}}\nfunction de(a,b){var c=uc(b.value),d=uc(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function ee(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var fe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction ge(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function he(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?ge(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ie=void 0,je=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==fe.svg||\"innerHTML\"in a)a.innerHTML=b;else{ie=ie||document.createElement(\"div\");ie.innerHTML=\"\"+b+\"\";for(b=ie.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ke(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(le).forEach(function(a){me.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);le[b]=le[a]})});function ne(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||le.hasOwnProperty(a)&&le[a]?(\"\"+b).trim():b+\"px\"}\nfunction oe(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ne(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var pe=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction qe(a,b){b&&(pe[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?x(\"137\",a,\"\"):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?x(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:x(\"61\")),null!=b.style&&\"object\"!==typeof b.style?x(\"62\",\"\"):void 0)}\nfunction re(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nfunction se(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Id(a);b=sa[b];for(var d=0;dGe||(a.current=Fe[Ge],Fe[Ge]=null,Ge--)}function G(a,b){Ge++;Fe[Ge]=a.current;a.current=b}var He={},H={current:He},I={current:!1},Ie=He;\nfunction Je(a,b){var c=a.type.contextTypes;if(!c)return He;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function J(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Ke(a){F(I,a);F(H,a)}function Le(a){F(I,a);F(H,a)}\nfunction Me(a,b,c){H.current!==He?x(\"168\"):void 0;G(H,b,a);G(I,c,a)}function Ne(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)e in a?void 0:x(\"108\",ic(b)||\"Unknown\",e);return n({},c,d)}function Oe(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||He;Ie=H.current;G(H,b,a);G(I,I.current,a);return!0}\nfunction Pe(a,b,c){var d=a.stateNode;d?void 0:x(\"169\");c?(b=Ne(a,b,Ie),d.__reactInternalMemoizedMergedChildContext=b,F(I,a),F(H,a),G(H,b,a)):F(I,a);G(I,c,a)}var Qe=null,Re=null;function Se(a){return function(b){try{return a(b)}catch(c){}}}\nfunction Te(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Qe=Se(function(a){return b.onCommitFiberRoot(c,a)});Re=Se(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}\nfunction Ue(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function K(a,b,c,d){return new Ue(a,b,c,d)}\nfunction Ve(a){a=a.prototype;return!(!a||!a.isReactComponent)}function We(a){if(\"function\"===typeof a)return Ve(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===cc)return 11;if(a===ec)return 14}return 2}\nfunction Xe(a,b){var c=a.alternate;null===c?(c=K(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;c.contextDependencies=a.contextDependencies;c.sibling=a.sibling;\nc.index=a.index;c.ref=a.ref;return c}\nfunction Ye(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)Ve(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case Xb:return Ze(c.children,e,f,b);case bc:return $e(c,e|3,f,b);case Yb:return $e(c,e|2,f,b);case Zb:return a=K(12,c,b,e|4),a.elementType=Zb,a.type=Zb,a.expirationTime=f,a;case dc:return a=K(13,c,b,e),a.elementType=dc,a.type=dc,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case $b:g=10;break a;case ac:g=9;break a;case cc:g=11;break a;case ec:g=\n14;break a;case fc:g=16;d=null;break a}x(\"130\",null==a?a:typeof a,\"\")}b=K(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Ze(a,b,c,d){a=K(7,a,d,b);a.expirationTime=c;return a}function $e(a,b,c,d){a=K(8,a,d,b);b=0===(b&1)?Yb:bc;a.elementType=b;a.type=b;a.expirationTime=c;return a}function af(a,b,c){a=K(6,a,null,b);a.expirationTime=c;return a}\nfunction bf(a,b,c){b=K(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function cf(a,b){a.didError=!1;var c=a.earliestPendingTime;0===c?a.earliestPendingTime=a.latestPendingTime=b:cb&&(a.latestPendingTime=b);df(b,a)}\nfunction ef(a,b){a.didError=!1;if(0===b)a.earliestPendingTime=0,a.latestPendingTime=0,a.earliestSuspendedTime=0,a.latestSuspendedTime=0,a.latestPingedTime=0;else{bb?a.earliestPendingTime=a.latestPendingTime=0:a.earliestPendingTime>b&&(a.earliestPendingTime=a.latestPendingTime));c=a.earliestSuspendedTime;0===c?cf(a,b):bc&&cf(a,b)}df(0,a)}function ff(a,b){a.didError=!1;a.latestPingedTime>=b&&(a.latestPingedTime=0);var c=a.earliestPendingTime,d=a.latestPendingTime;c===b?a.earliestPendingTime=d===b?a.latestPendingTime=0:d:d===b&&(a.latestPendingTime=c);c=a.earliestSuspendedTime;d=a.latestSuspendedTime;0===c?a.earliestSuspendedTime=a.latestSuspendedTime=b:cb&&(a.latestSuspendedTime=b);df(b,a)}\nfunction gf(a,b){var c=a.earliestPendingTime;a=a.earliestSuspendedTime;c>b&&(b=c);a>b&&(b=a);return b}function df(a,b){var c=b.earliestSuspendedTime,d=b.latestSuspendedTime,e=b.earliestPendingTime,f=b.latestPingedTime;e=0!==e?e:f;0===e&&(0===a||da&&(a=c);b.nextExpirationTimeToWorkOn=e;b.expirationTime=a}function L(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}\nfunction hf(a){var b=a._result;switch(a._status){case 1:return b;case 2:throw b;case 0:throw b;default:a._status=0;b=a._ctor;b=b();b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)});switch(a._status){case 1:return a._result;case 2:throw a._result;}a._result=b;throw b;}}var jf=(new aa.Component).refs;\nfunction kf(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar tf={isMounted:function(a){return(a=a._reactInternalFiber)?2===ed(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.tag=rf;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=lf();c=mf(c,a);var d=nf(c);d.tag=\nsf;void 0!==b&&null!==b&&(d.callback=b);of();pf(a,d);qf(a,c)}};function uf(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!dd(c,d)||!dd(e,f):!0}\nfunction vf(a,b,c){var d=!1,e=He;var f=b.contextType;\"object\"===typeof f&&null!==f?f=M(f):(e=J(b)?Ie:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Je(a,e):He);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=tf;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction wf(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&tf.enqueueReplaceState(b,b.state,null)}\nfunction xf(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jf;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=M(f):(f=J(b)?Ie:H.current,e.context=Je(a,f));f=a.updateQueue;null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kf(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&tf.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var zf=Array.isArray;\nfunction Af(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;var d=void 0;c&&(1!==c.tag?x(\"309\"):void 0,d=c.stateNode);d?void 0:x(\"147\",a);var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===jf&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}\"string\"!==typeof a?x(\"284\"):void 0;c._owner?void 0:x(\"290\",a)}return a}\nfunction Bf(a,b){\"textarea\"!==a.type&&x(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction Cf(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=Xe(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,du?(B=q,q=null):B=q.sibling;var w=t(e,q,h[u],k);if(null===w){null===q&&(q=B);break}a&&\nq&&null===w.alternate&&b(e,q);g=f(w,g,u);null===m?l=w:m.sibling=w;m=w;q=B}if(u===h.length)return c(e,q),l;if(null===q){for(;uu?(B=q,q=null):B=q.sibling;var v=t(e,q,w.value,k);if(null===v){q||(q=B);break}a&&q&&null===v.alternate&&b(e,q);g=f(v,g,u);null===m?l=v:m.sibling=v;m=v;q=B}if(w.done)return c(e,q),l;if(null===q){for(;!w.done;u++,w=h.next())w=p(e,w.value,k),null!==w&&(g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);return l}for(q=d(e,q);!w.done;u++,w=h.next())w=A(q,e,u,w.value,k),null!==w&&(a&&null!==w.alternate&&q.delete(null===w.key?u:\nw.key),g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);a&&q.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===Xb&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Vb:a:{l=f.key;for(k=d;null!==k;){if(k.key===l)if(7===k.tag?f.type===Xb:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===Xb?f.props.children:f.props,h);d.ref=Af(a,k,f);d.return=a;a=d;break a}else{c(a,k);break}else b(a,k);k=\nk.sibling}f.type===Xb?(d=Ze(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ye(f.type,f.key,f.props,null,a.mode,h),h.ref=Af(a,d,f),h.return=a,a=h)}return g(a);case Wb:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=bf(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\n\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=af(f,a.mode,h),d.return=a,a=d),g(a);if(zf(f))return v(a,d,f,h);if(hc(f))return R(a,d,f,h);l&&Bf(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:h=a.type,x(\"152\",h.displayName||h.name||\"Component\")}return c(a,d)}}var Df=Cf(!0),Ef=Cf(!1),Ff={},N={current:Ff},Gf={current:Ff},Hf={current:Ff};function If(a){a===Ff?x(\"174\"):void 0;return a}\nfunction Jf(a,b){G(Hf,b,a);G(Gf,a,a);G(N,Ff,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:he(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=he(b,c)}F(N,a);G(N,b,a)}function Kf(a){F(N,a);F(Gf,a);F(Hf,a)}function Lf(a){If(Hf.current);var b=If(N.current);var c=he(b,a.type);b!==c&&(G(Gf,a,a),G(N,c,a))}function Mf(a){Gf.current===a&&(F(N,a),F(Gf,a))}\nvar Nf=0,Of=2,Pf=4,Qf=8,Rf=16,Sf=32,Tf=64,Uf=128,Vf=Tb.ReactCurrentDispatcher,Wf=0,Xf=null,O=null,P=null,Yf=null,Q=null,Zf=null,$f=0,ag=null,bg=0,cg=!1,dg=null,eg=0;function fg(){x(\"307\")}function gg(a,b){if(null===b)return!1;for(var c=0;c$f&&($f=m)):f=l.eagerReducer===a?l.eagerState:a(f,l.action);g=l;l=l.next}while(null!==l&&l!==d);k||(h=g,e=f);bd(f,b.memoizedState)||(qg=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.eagerReducer=a;c.eagerState=f}return[b.memoizedState,c.dispatch]}\nfunction rg(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===ag?(ag={lastEffect:null},ag.lastEffect=a.next=a):(b=ag.lastEffect,null===b?ag.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,ag.lastEffect=a));return a}function sg(a,b,c,d){var e=mg();bg|=a;e.memoizedState=rg(b,c,void 0,void 0===d?null:d)}\nfunction tg(a,b,c,d){var e=ng();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&gg(d,g.deps)){rg(Nf,c,f,d);return}}bg|=a;e.memoizedState=rg(b,c,f,d)}function ug(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function vg(){}\nfunction wg(a,b,c){25>eg?void 0:x(\"301\");var d=a.alternate;if(a===Xf||null!==d&&d===Xf)if(cg=!0,a={expirationTime:Wf,action:c,eagerReducer:null,eagerState:null,next:null},null===dg&&(dg=new Map),c=dg.get(b),void 0===c)dg.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{of();var e=lf();e=mf(e,a);var f={expirationTime:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===\nd||0===d.expirationTime)&&(d=b.eagerReducer,null!==d))try{var l=b.eagerState,k=d(l,c);f.eagerReducer=d;f.eagerState=k;if(bd(k,l))return}catch(m){}finally{}qf(a,e)}}\nvar kg={readContext:M,useCallback:fg,useContext:fg,useEffect:fg,useImperativeHandle:fg,useLayoutEffect:fg,useMemo:fg,useReducer:fg,useRef:fg,useState:fg,useDebugValue:fg},ig={readContext:M,useCallback:function(a,b){mg().memoizedState=[a,void 0===b?null:b];return a},useContext:M,useEffect:function(a,b){return sg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return sg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return sg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=mg();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=mg();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,eagerReducer:a,eagerState:b};a=a.dispatch=wg.bind(null,Xf,a);return[d.memoizedState,a]},useRef:function(a){var b=mg();a={current:a};return b.memoizedState=a},useState:function(a){var b=mg();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,eagerReducer:og,\neagerState:a};a=a.dispatch=wg.bind(null,Xf,a);return[b.memoizedState,a]},useDebugValue:vg},jg={readContext:M,useCallback:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:M,useEffect:function(a,b){return tg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return tg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return tg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:pg,useRef:function(){return ng().memoizedState},useState:function(a){return pg(og,a)},useDebugValue:vg},xg=null,yg=null,zg=!1;\nfunction Ag(a,b){var c=K(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function Bg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Cg(a){if(zg){var b=yg;if(b){var c=b;if(!Bg(a,b)){b=De(c);if(!b||!Bg(a,b)){a.effectTag|=2;zg=!1;xg=a;return}Ag(xg,c)}xg=a;yg=Ee(b)}else a.effectTag|=2,zg=!1,xg=a}}function Dg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&18!==a.tag;)a=a.return;xg=a}function Eg(a){if(a!==xg)return!1;if(!zg)return Dg(a),zg=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!xe(b,a.memoizedProps))for(b=yg;b;)Ag(a,b),b=De(b);Dg(a);yg=xg?De(a.stateNode):null;return!0}function Fg(){yg=xg=null;zg=!1}\nvar Gg=Tb.ReactCurrentOwner,qg=!1;function S(a,b,c,d){b.child=null===a?Ef(b,null,c,d):Df(b,a.child,c,d)}function Hg(a,b,c,d,e){c=c.render;var f=b.ref;Ig(b,e);d=hg(a,b,c,d,f,e);if(null!==a&&!qg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Jg(a,b,e);b.effectTag|=1;S(a,b,d,e);return b.child}\nfunction Kg(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!Ve(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Lg(a,b,g,d,e,f);a=Ye(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e=c)return Sg(a,b,c);b=Jg(a,b,c);return null!==b?b.sibling:null}}return Jg(a,b,c)}}else qg=!1;b.expirationTime=0;switch(b.tag){case 2:d=\nb.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;var e=Je(b,H.current);Ig(b,c);e=hg(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;lg();if(J(d)){var f=!0;Oe(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;\"function\"===typeof g&&kf(b,d,g,a);e.updater=tf;b.stateNode=e;e._reactInternalFiber=b;xf(b,d,a,c);b=Qg(null,b,d,!0,f,\nc)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);f=b.pendingProps;a=hf(e);b.type=a;e=b.tag=We(a);f=L(a,f);g=void 0;switch(e){case 0:g=Mg(null,b,a,f,c);break;case 1:g=Og(null,b,a,f,c);break;case 11:g=Hg(null,b,a,f,c);break;case 14:g=Kg(null,b,a,L(a.type,f),d,c);break;default:x(\"306\",a,\"\")}return g;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Mg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,\ne=b.elementType===d?e:L(d,e),Og(a,b,d,e,c);case 3:Rg(b);d=b.updateQueue;null===d?x(\"282\"):void 0;e=b.memoizedState;e=null!==e?e.element:null;yf(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)Fg(),b=Jg(a,b,c);else{e=b.stateNode;if(e=(null===a||null===a.child)&&e.hydrate)yg=Ee(b.stateNode.containerInfo),xg=b,e=zg=!0;e?(b.effectTag|=2,b.child=Ef(b,null,d,c)):(S(a,b,d,c),Fg());b=b.child}return b;case 5:return Lf(b),null===a&&Cg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,\ng=e.children,xe(d,e)?g=null:null!==f&&xe(d,f)&&(b.effectTag|=16),Ng(a,b),1!==c&&b.mode&1&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(S(a,b,g,c),b=b.child),b;case 6:return null===a&&Cg(b),null;case 13:return Sg(a,b,c);case 4:return Jf(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Df(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Hg(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,\nc),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;Ug(b,f);if(null!==g){var h=g.value;f=bd(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!I.current){b=Jg(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var l=h.contextDependencies;if(null!==l){g=h.child;for(var k=l.first;null!==k;){if(k.context===d&&0!==\n(k.observedBits&f)){1===h.tag&&(k=nf(c),k.tag=sf,pf(h,k));h.expirationTime=b&&(qg=!0);a.contextDependencies=null}\nfunction M(a,b){if(Yg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)Yg=a,b=1073741823;b={context:a,observedBits:b,next:null};null===Xg?(null===Wg?x(\"308\"):void 0,Xg=b,Wg.contextDependencies={first:b,expirationTime:0}):Xg=Xg.next=b}return a._currentValue}var $g=0,rf=1,sf=2,ah=3,Pg=!1;function bh(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction ch(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function nf(a){return{expirationTime:a,tag:$g,payload:null,callback:null,next:null,nextEffect:null}}function dh(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction pf(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=bh(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=bh(a.memoizedState),e=c.updateQueue=bh(c.memoizedState)):d=a.updateQueue=ch(e):null===e&&(e=c.updateQueue=ch(d));null===e||d===e?dh(d,b):null===d.lastUpdate||null===e.lastUpdate?(dh(d,b),dh(e,b)):(dh(d,b),e.lastUpdate=b)}\nfunction eh(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=bh(a.memoizedState):fh(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function fh(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=ch(b));return b}\nfunction gh(a,b,c,d,e,f){switch(c.tag){case rf:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case ah:a.effectTag=a.effectTag&-2049|64;case $g:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return n({},d,e);case sf:Pg=!0}return d}\nfunction yf(a,b,c,d,e){Pg=!1;b=fh(a,b);for(var f=b.baseState,g=null,h=0,l=b.firstUpdate,k=f;null!==l;){var m=l.expirationTime;md?e:d);Ih.current=null;d=void 0;1c?b:c;0===b&&(Fh=null);$h(a,b)}\nfunction ai(a){for(;;){var b=a.alternate,c=a.return,d=a.sibling;if(0===(a.effectTag&1024)){T=a;a:{var e=b;b=a;var f=U;var g=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:J(b.type)&&Ke(b);break;case 3:Kf(b);Le(b);g=b.stateNode;g.pendingContext&&(g.context=g.pendingContext,g.pendingContext=null);if(null===e||null===e.child)Eg(b),b.effectTag&=-3;mh(b);break;case 5:Mf(b);var h=If(Hf.current);f=b.type;if(null!==e&&null!=b.stateNode)nh(e,b,f,g,h),e.ref!==b.ref&&(b.effectTag|=\n128);else if(g){var l=If(N.current);if(Eg(b)){g=b;e=g.stateNode;var k=g.type,m=g.memoizedProps,p=h;e[Fa]=g;e[Ga]=m;f=void 0;h=k;switch(h){case \"iframe\":case \"object\":E(\"load\",e);break;case \"video\":case \"audio\":for(k=0;k\\x3c/script>\",k=e.removeChild(e.firstChild)):\"string\"===typeof p.is?k=k.createElement(e,{is:p.is}):(k=k.createElement(e),\"select\"===e&&p.multiple&&(k.multiple=!0)):k=k.createElementNS(l,e);e=k;e[Fa]=m;e[Ga]=g;lh(e,b,!1,!1);p=e;k=f;m=g;var t=h,A=re(k,m);switch(k){case \"iframe\":case \"object\":E(\"load\",\np);h=m;break;case \"video\":case \"audio\":for(h=0;hg&&(g=e),h>g&&(g=h),f=f.sibling;b.childExpirationTime=g}if(null!==T)return T;null!==c&&0===(c.effectTag&1024)&&(null===c.firstEffect&&\n(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1=v)t=0;else if(-1===t||v component higher in the tree to provide a loading indicator or placeholder to display.\"+jc(k))}Nh=!0;m=jh(m,k);h=l;do{switch(h.tag){case 3:h.effectTag|=2048;h.expirationTime=g;g=Ch(h,m,g);eh(h,g);break a;case 1:if(t=m,A=h.type,k=h.stateNode,0===(h.effectTag&64)&&(\"function\"===typeof A.getDerivedStateFromError||null!==k&&\"function\"===typeof k.componentDidCatch&&(null===Fh||!Fh.has(k)))){h.effectTag|=2048;\nh.expirationTime=g;g=Eh(h,t,g);eh(h,g);break a}}h=h.return}while(null!==h)}T=ai(f);continue}}}break}while(1);Kh=!1;Hh.current=c;Yg=Xg=Wg=null;lg();if(e)Lh=null,a.finishedWork=null;else if(null!==T)a.finishedWork=null;else{c=a.current.alternate;null===c?x(\"281\"):void 0;Lh=null;if(Nh){e=a.latestPendingTime;f=a.latestSuspendedTime;g=a.latestPingedTime;if(0!==e&&eb?0:b)):(a.pendingCommitExpirationTime=d,a.finishedWork=c)}}\nfunction sh(a,b){for(var c=a.return;null!==c;){switch(c.tag){case 1:var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Fh||!Fh.has(d))){a=jh(b,a);a=Eh(c,a,1073741823);pf(c,a);qf(c,1073741823);return}break;case 3:a=jh(b,a);a=Ch(c,a,1073741823);pf(c,a);qf(c,1073741823);return}c=c.return}3===a.tag&&(c=jh(b,a),c=Ch(a,c,1073741823),pf(a,c),qf(a,1073741823))}\nfunction mf(a,b){var c=r.unstable_getCurrentPriorityLevel(),d=void 0;if(0===(b.mode&1))d=1073741823;else if(Kh&&!Oh)d=U;else{switch(c){case r.unstable_ImmediatePriority:d=1073741823;break;case r.unstable_UserBlockingPriority:d=1073741822-10*(((1073741822-a+15)/10|0)+1);break;case r.unstable_NormalPriority:d=1073741822-25*(((1073741822-a+500)/25|0)+1);break;case r.unstable_LowPriority:case r.unstable_IdlePriority:d=1;break;default:x(\"313\")}null!==Lh&&d===U&&--d}c===r.unstable_UserBlockingPriority&&\n(0===gi||d=d){a.didError=!1;b=a.latestPingedTime;if(0===b||b>c)a.latestPingedTime=c;df(c,a);c=a.expirationTime;0!==c&&Xh(a,c)}}function Ah(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=lf();b=mf(b,a);a=hi(a,b);null!==a&&(cf(a,b),b=a.expirationTime,0!==b&&Xh(a,b))}\nfunction hi(a,b){a.expirationTimeU&&Sh(),cf(a,b),Kh&&!Oh&&Lh===a||Xh(a,a.expirationTime),ii>ji&&(ii=0,x(\"185\")))}function ki(a,b,c,d,e){return r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){return a(b,c,d,e)})}var li=null,Y=null,mi=0,ni=void 0,W=!1,oi=null,Z=0,gi=0,pi=!1,qi=null,X=!1,ri=!1,si=null,ti=r.unstable_now(),ui=1073741822-(ti/10|0),vi=ui,ji=50,ii=0,wi=null;function xi(){ui=1073741822-((r.unstable_now()-ti)/10|0)}\nfunction yi(a,b){if(0!==mi){if(ba.expirationTime&&(a.expirationTime=b);W||(X?ri&&(oi=a,Z=1073741823,Di(a,1073741823,!1)):1073741823===b?Yh(1073741823,!1):yi(a,b))}\nfunction Ci(){var a=0,b=null;if(null!==Y)for(var c=Y,d=li;null!==d;){var e=d.expirationTime;if(0===e){null===c||null===Y?x(\"244\"):void 0;if(d===d.nextScheduledRoot){li=Y=d.nextScheduledRoot=null;break}else if(d===li)li=e=d.nextScheduledRoot,Y.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===Y){Y=c;Y.nextScheduledRoot=li;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{e>a&&(a=e,b=d);if(d===Y)break;if(1073741823===\na)break;c=d;d=d.nextScheduledRoot}}oi=b;Z=a}var Ei=!1;function di(){return Ei?!0:r.unstable_shouldYield()?Ei=!0:!1}function zi(){try{if(!di()&&null!==li){xi();var a=li;do{var b=a.expirationTime;0!==b&&ui<=b&&(a.nextExpirationTimeToWorkOn=ui);a=a.nextScheduledRoot}while(a!==li)}Yh(0,!0)}finally{Ei=!1}}\nfunction Yh(a,b){Ci();if(b)for(xi(),vi=ui;null!==oi&&0!==Z&&a<=Z&&!(Ei&&ui>Z);)Di(oi,Z,ui>Z),Ci(),xi(),vi=ui;else for(;null!==oi&&0!==Z&&a<=Z;)Di(oi,Z,!1),Ci();b&&(mi=0,ni=null);0!==Z&&yi(oi,Z);ii=0;wi=null;if(null!==si)for(a=si,si=null,b=0;b=c&&(null===si?si=[d]:si.push(d),d._defer)){a.finishedWork=b;a.expirationTime=0;return}a.finishedWork=null;a===wi?ii++:(wi=a,ii=0);r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){Zh(a,b)})}function Dh(a){null===oi?x(\"246\"):void 0;oi.expirationTime=0;pi||(pi=!0,qi=a)}function Gi(a,b){var c=X;X=!0;try{return a(b)}finally{(X=c)||W||Yh(1073741823,!1)}}\nfunction Hi(a,b){if(X&&!ri){ri=!0;try{return a(b)}finally{ri=!1}}return a(b)}function Ii(a,b,c){X||W||0===gi||(Yh(gi,!1),gi=0);var d=X;X=!0;try{return r.unstable_runWithPriority(r.unstable_UserBlockingPriority,function(){return a(b,c)})}finally{(X=d)||W||Yh(1073741823,!1)}}\nfunction Ji(a,b,c,d,e){var f=b.current;a:if(c){c=c._reactInternalFiber;b:{2===ed(c)&&1===c.tag?void 0:x(\"170\");var g=c;do{switch(g.tag){case 3:g=g.stateNode.context;break b;case 1:if(J(g.type)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}}g=g.return}while(null!==g);x(\"171\");g=void 0}if(1===c.tag){var h=c.type;if(J(h)){c=Ne(c,h,g);break a}}c=g}else c=He;null===b.context?b.context=c:b.pendingContext=c;b=e;e=nf(d);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);\nof();pf(f,e);qf(f,d);return d}function Ki(a,b,c,d){var e=b.current,f=lf();e=mf(f,e);return Ji(a,b,c,e,d)}function Li(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Mi(a,b,c){var d=3=Jh&&(b=Jh-1);this._expirationTime=Jh=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=this._didComplete=!1;this._children=null;this._defer=!0}Ni.prototype.render=function(a){this._defer?void 0:x(\"250\");this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new Oi;Ji(a,b,null,c,d._onCommit);return d};\nNi.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nNi.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;this._defer&&null!==b?void 0:x(\"251\");if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;null===d?x(\"251\"):void 0;d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;Bi(a,c);b=this._next;this._next=null;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=\nnull,this._defer=!1};Ni.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==a)for(var b=0;b=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};function Qi(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}Gb=Gi;Hb=Ii;Ib=function(){W||0===gi||(Yh(gi,!1),gi=0)};\nfunction Ri(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new Pi(a,!1,b)}\nfunction Si(a,b,c,d,e){var f=c._reactRootContainer;if(f){if(\"function\"===typeof e){var g=e;e=function(){var a=Li(f._internalRoot);g.call(a)}}null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)}else{f=c._reactRootContainer=Ri(c,d);if(\"function\"===typeof e){var h=e;e=function(){var a=Li(f._internalRoot);h.call(a)}}Hi(function(){null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)})}return Li(f._internalRoot)}\nfunction Ti(a,b){var c=2 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var currTime = -1;\n\n var shouldUpdate = function shouldUpdate(now) {\n if (currTime < 0) {\n currTime = now;\n }\n\n if (now - currTime > timeout) {\n callback(now);\n currTime = -1;\n } else {\n raf(shouldUpdate);\n }\n };\n\n raf(shouldUpdate);\n}", + "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport setRafTimeout from './setRafTimeout';\nexport default function createAnimateManager() {\n var currStyle = {};\n\n var handleChange = function handleChange() {\n return null;\n };\n\n var shouldStop = false;\n\n var setStyle = function setStyle(_style) {\n if (shouldStop) {\n return;\n }\n\n if (Array.isArray(_style)) {\n if (!_style.length) {\n return;\n }\n\n var styles = _style;\n\n var _styles = _toArray(styles),\n curr = _styles[0],\n restStyles = _styles.slice(1);\n\n if (typeof curr === 'number') {\n setRafTimeout(setStyle.bind(null, restStyles), curr);\n return;\n }\n\n setStyle(curr);\n setRafTimeout(setStyle.bind(null, restStyles));\n return;\n }\n\n if (_typeof(_style) === 'object') {\n currStyle = _style;\n handleChange(currStyle);\n }\n\n if (typeof _style === 'function') {\n _style();\n }\n };\n\n return {\n stop: function stop() {\n shouldStop = true;\n },\n start: function start(style) {\n shouldStop = false;\n setStyle(style);\n },\n subscribe: function subscribe(_handleChange) {\n handleChange = _handleChange;\n return function () {\n handleChange = function handleChange() {\n return null;\n };\n };\n }\n };\n}", + "import _isPlainObject from \"lodash/isPlainObject\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = hasOwnProperty.bind(objB);\n\n for (var i = 0; i < keysA.length; i++) {\n var keyA = keysA[i];\n\n if (objA[keyA] === objB[keyA]) {\n continue;\n } // special diff with Array or Object\n\n\n if (_isArray(objA[keyA])) {\n if (!_isArray(objB[keyA]) || objA[keyA].length !== objB[keyA].length) {\n return false;\n } else if (!_isEqual(objA[keyA], objB[keyA])) {\n return false;\n }\n } else if (_isPlainObject(objA[keyA])) {\n if (!_isPlainObject(objB[keyA]) || !_isEqual(objA[keyA], objB[keyA])) {\n return false;\n }\n } else if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction shallowCompare(instance, nextProps, nextState) {\n return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);\n}\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return shallowCompare(this, nextProps, nextState);\n}\n/* eslint-disable no-param-reassign */\n\n\nfunction pureRenderDecorator(component) {\n component.prototype.shouldComponentUpdate = shouldComponentUpdate;\n}\n\nexport { shallowEqual };\nexport default pureRenderDecorator;", + "import _intersection from \"lodash/intersection\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/* eslint no-console: 0 */\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nvar IN_LINE_PREFIX_LIST = ['-webkit-', '-moz-', '-o-', '-ms-'];\nvar IN_COMPATIBLE_PROPERTY = ['transform', 'transformOrigin', 'transition'];\nexport var getIntersectionKeys = function getIntersectionKeys(preObj, nextObj) {\n return _intersection(Object.keys(preObj), Object.keys(nextObj));\n};\nexport var identity = function identity(param) {\n return param;\n};\n/*\n * @description: convert camel case to dash case\n * string => string\n */\n\nexport var getDashCase = function getDashCase(name) {\n return name.replace(/([A-Z])/g, function (v) {\n return \"-\".concat(v.toLowerCase());\n });\n};\n/*\n * @description: add compatible style prefix\n * (string, string) => object\n */\n\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (IN_COMPATIBLE_PROPERTY.indexOf(name) === -1) {\n return _defineProperty({}, name, value);\n }\n\n var isTransition = name === 'transition';\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var styleVal = value;\n return PREFIX_LIST.reduce(function (result, property, i) {\n if (isTransition) {\n styleVal = value.replace(/(transform|transform-origin)/gim, \"\".concat(IN_LINE_PREFIX_LIST[i], \"$1\"));\n }\n\n return _objectSpread({}, result, _defineProperty({}, property + camelName, styleVal));\n }, {});\n};\nexport var log = function log() {\n var _console;\n\n (_console = console).log.apply(_console, arguments);\n};\n/*\n * @description: log the value of a varible\n * string => any => any\n */\n\nexport var debug = function debug(name) {\n return function (item) {\n log(name, item);\n return item;\n };\n};\n/*\n * @description: log name, args, return value of a function\n * function => function\n */\n\nexport var debugf = function debugf(tag, f) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var res = f.apply(void 0, args);\n var name = tag || f.name || 'anonymous function';\n var argNames = \"(\".concat(args.map(JSON.stringify).join(', '), \")\");\n log(\"\".concat(name, \": \").concat(argNames, \" => \").concat(JSON.stringify(res)));\n return res;\n };\n};\n/*\n * @description: map object on every element in this object.\n * (function, object) => object\n */\n\nexport var mapObject = function mapObject(fn, obj) {\n return Object.keys(obj).reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, fn(key, obj[key])));\n }, {});\n};\n/*\n * @description: add compatible prefix to style\n * object => object\n */\n\nexport var translateStyle = function translateStyle(style) {\n return Object.keys(style).reduce(function (res, key) {\n return _objectSpread({}, res, generatePrefixStyle(key, res[key]));\n }, style);\n};\nexport var compose = function compose() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (!args.length) {\n return identity;\n }\n\n var fns = args.reverse(); // first function can receive multiply arguments\n\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\nexport var getTransitionVal = function getTransitionVal(props, duration, easing) {\n return props.map(function (prop) {\n return \"\".concat(getDashCase(prop), \" \").concat(duration, \"ms \").concat(easing);\n }).join(',');\n};\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format, a, b, c, d, e, f) {\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};", + "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { warn } from './util';\nvar ACCURACY = 1e-4;\n\nvar cubicBezierFactor = function cubicBezierFactor(c1, c2) {\n return [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];\n};\n\nvar multyTime = function multyTime(params, t) {\n return params.map(function (param, i) {\n return param * Math.pow(t, i);\n }).reduce(function (pre, curr) {\n return pre + curr;\n });\n};\n\nvar cubicBezier = function cubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n return multyTime(params, t);\n };\n};\n\nvar derivativeCubicBezier = function derivativeCubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n\n var newParams = _toConsumableArray(params.map(function (param, i) {\n return param * i;\n }).slice(1)).concat([0]);\n\n return multyTime(newParams, t);\n };\n}; // calculate cubic-bezier using Newton's method\n\n\nexport var configBezier = function configBezier() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var x1 = args[0],\n y1 = args[1],\n x2 = args[2],\n y2 = args[3];\n\n if (args.length === 1) {\n switch (args[0]) {\n case 'linear':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n\n case 'ease':\n x1 = 0.25;\n y1 = 0.1;\n x2 = 0.25;\n y2 = 1.0;\n break;\n\n case 'ease-in':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n\n case 'ease-out':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n\n case 'ease-in-out':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n\n default:\n warn(false, '[configBezier]: arguments should be one of ' + 'oneOf \\'linear\\', \\'ease\\', \\'ease-in\\', \\'ease-out\\', ' + '\\'ease-in-out\\', instead received %s', args);\n }\n }\n\n warn([x1, x2, y1, y2].every(function (num) {\n return typeof num === 'number' && num >= 0 && num <= 1;\n }), '[configBezier]: arguments should be x1, y1, x2, y2 of [0, 1] instead received %s', args);\n var curveX = cubicBezier(x1, x2);\n var curveY = cubicBezier(y1, y2);\n var derCurveX = derivativeCubicBezier(x1, x2);\n\n var rangeValue = function rangeValue(value) {\n if (value > 1) {\n return 1;\n } else if (value < 0) {\n return 0;\n }\n\n return value;\n };\n\n var bezier = function bezier(_t) {\n var t = _t > 1 ? 1 : _t;\n var x = t;\n\n for (var i = 0; i < 8; ++i) {\n var evalT = curveX(x) - t;\n var derVal = derCurveX(x);\n\n if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {\n return curveY(x);\n }\n\n x = rangeValue(x - evalT / derVal);\n }\n\n return curveY(x);\n };\n\n bezier.isStepper = false;\n return bezier;\n};\nexport var configSpring = function configSpring() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _config$stiff = config.stiff,\n stiff = _config$stiff === void 0 ? 100 : _config$stiff,\n _config$damping = config.damping,\n damping = _config$damping === void 0 ? 8 : _config$damping,\n _config$dt = config.dt,\n dt = _config$dt === void 0 ? 17 : _config$dt;\n\n var stepper = function stepper(currX, destX, currV) {\n var FSpring = -(currX - destX) * stiff;\n var FDamping = currV * damping;\n var newV = currV + (FSpring - FDamping) * dt / 1000;\n var newX = currV * dt / 1000 + currX;\n\n if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {\n return [destX, 0];\n }\n\n return [newX, newV];\n };\n\n stepper.isStepper = true;\n stepper.dt = dt;\n return stepper;\n};\nexport var configEasing = function configEasing() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var easing = args[0];\n\n if (typeof easing === 'string') {\n switch (easing) {\n case 'ease':\n case 'ease-in-out':\n case 'ease-out':\n case 'ease-in':\n case 'linear':\n return configBezier(easing);\n\n case 'spring':\n return configSpring();\n\n default:\n warn(false, '[configEasing]: first argument should be one of \\'ease\\', \\'ease-in\\', ' + '\\'ease-out\\', \\'ease-in-out\\', \\'linear\\' and \\'spring\\', instead received %s', args);\n }\n }\n\n if (typeof easing === 'function') {\n return easing;\n }\n\n warn(false, '[configEasing]: first argument type should be function or ' + 'string, instead received %s', args);\n return null;\n};", + "import _filter from \"lodash/filter\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport raf, { cancel as caf } from 'raf';\nimport { getIntersectionKeys, mapObject } from './util';\n\nvar alpha = function alpha(begin, end, k) {\n return begin + (end - begin) * k;\n};\n\nvar needContinue = function needContinue(_ref) {\n var from = _ref.from,\n to = _ref.to;\n return from !== to;\n};\n/*\n * @description: cal new from value and velocity in each stepper\n * @return: { [styleProperty]: { from, to, velocity } }\n */\n\n\nvar calStepperVals = function calStepperVals(easing, preVals, steps) {\n var nextStepVals = mapObject(function (key, val) {\n if (needContinue(val)) {\n var _easing = easing(val.from, val.to, val.velocity),\n _easing2 = _slicedToArray(_easing, 2),\n newX = _easing2[0],\n newV = _easing2[1];\n\n return _objectSpread({}, val, {\n from: newX,\n velocity: newV\n });\n }\n\n return val;\n }, preVals);\n\n if (steps < 1) {\n return mapObject(function (key, val) {\n if (needContinue(val)) {\n return _objectSpread({}, val, {\n velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),\n from: alpha(val.from, nextStepVals[key].from, steps)\n });\n }\n\n return val;\n }, preVals);\n }\n\n return calStepperVals(easing, nextStepVals, steps - 1);\n}; // configure update function\n\n\nexport default (function (from, to, easing, duration, render) {\n var interKeys = getIntersectionKeys(from, to);\n var timingStyle = interKeys.reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, [from[key], to[key]]));\n }, {});\n var stepperStyle = interKeys.reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, {\n from: from[key],\n velocity: 0,\n to: to[key]\n }));\n }, {});\n var cafId = -1;\n var preTime;\n var beginTime;\n\n var update = function update() {\n return null;\n };\n\n var getCurrStyle = function getCurrStyle() {\n return mapObject(function (key, val) {\n return val.from;\n }, stepperStyle);\n };\n\n var shouldStopAnimation = function shouldStopAnimation() {\n return !_filter(stepperStyle, needContinue).length;\n }; // stepper timing function like spring\n\n\n var stepperUpdate = function stepperUpdate(now) {\n if (!preTime) {\n preTime = now;\n }\n\n var deltaTime = now - preTime;\n var steps = deltaTime / easing.dt;\n stepperStyle = calStepperVals(easing, stepperStyle, steps); // get union set and add compatible prefix\n\n render(_objectSpread({}, from, to, getCurrStyle(stepperStyle)));\n preTime = now;\n\n if (!shouldStopAnimation()) {\n cafId = raf(update);\n }\n }; // t => val timing function like cubic-bezier\n\n\n var timingUpdate = function timingUpdate(now) {\n if (!beginTime) {\n beginTime = now;\n }\n\n var t = (now - beginTime) / duration;\n var currStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(t)]));\n }, timingStyle); // get union set and add compatible prefix\n\n render(_objectSpread({}, from, to, currStyle));\n\n if (t < 1) {\n cafId = raf(update);\n } else {\n var finalStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(1)]));\n }, timingStyle);\n render(_objectSpread({}, from, to, finalStyle));\n }\n };\n\n update = easing.isStepper ? stepperUpdate : timingUpdate; // return start animation method\n\n return function () {\n raf(update); // return stop animation method\n\n return function () {\n caf(cafId);\n };\n };\n});", + "import _isEqual from \"lodash/isEqual\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nimport React, { Component, cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport createAnimateManager from './AnimateManager';\nimport pureRender from './PureRender';\nimport { configEasing } from './easing';\nimport configUpdate from './configUpdate';\nimport { getTransitionVal, identity, translateStyle } from './util';\n\nvar Animate = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Animate, _Component);\n\n function Animate(props, context) {\n var _this;\n\n _classCallCheck(this, Animate);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Animate).call(this, props, context));\n var _this$props = _this.props,\n isActive = _this$props.isActive,\n attributeName = _this$props.attributeName,\n from = _this$props.from,\n to = _this$props.to,\n steps = _this$props.steps,\n children = _this$props.children;\n _this.handleStyleChange = _this.handleStyleChange.bind(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.changeStyle = _this.changeStyle.bind(_assertThisInitialized(_assertThisInitialized(_this)));\n\n if (!isActive) {\n _this.state = {\n style: {}\n }; // if children is a function and animation is not active, set style to 'to'\n\n if (typeof children === 'function') {\n _this.state = {\n style: to\n };\n }\n\n return _possibleConstructorReturn(_this);\n }\n\n if (steps && steps.length) {\n _this.state = {\n style: steps[0].style\n };\n } else if (from) {\n if (typeof children === 'function') {\n _this.state = {\n style: from\n };\n return _possibleConstructorReturn(_this);\n }\n\n _this.state = {\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n };\n } else {\n _this.state = {\n style: {}\n };\n }\n\n return _this;\n }\n\n _createClass(Animate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props2 = this.props,\n isActive = _this$props2.isActive,\n canBegin = _this$props2.canBegin;\n this.mounted = true;\n\n if (!isActive || !canBegin) {\n return;\n }\n\n this.runAnimation(this.props);\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var isActive = nextProps.isActive,\n canBegin = nextProps.canBegin,\n attributeName = nextProps.attributeName,\n shouldReAnimate = nextProps.shouldReAnimate;\n\n if (!canBegin) {\n return;\n }\n\n if (!isActive) {\n this.setState({\n style: attributeName ? _defineProperty({}, attributeName, nextProps.to) : nextProps.to\n });\n return;\n }\n\n if (_isEqual(this.props.to, nextProps.to) && this.props.canBegin && this.props.isActive) {\n return;\n }\n\n var isTriggered = !this.props.canBegin || !this.props.isActive;\n\n if (this.manager) {\n this.manager.stop();\n }\n\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n\n var from = isTriggered || shouldReAnimate ? nextProps.from : this.props.to;\n this.setState({\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n });\n this.runAnimation(_objectSpread({}, nextProps, {\n from: from,\n begin: 0\n }));\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n\n if (this.unSubscribe) {\n this.unSubscribe();\n }\n\n if (this.manager) {\n this.manager.stop();\n this.manager = null;\n }\n\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n }\n }, {\n key: \"runJSAnimation\",\n value: function runJSAnimation(props) {\n var _this2 = this;\n\n var from = props.from,\n to = props.to,\n duration = props.duration,\n easing = props.easing,\n begin = props.begin,\n onAnimationEnd = props.onAnimationEnd,\n onAnimationStart = props.onAnimationStart;\n var startAnimation = configUpdate(from, to, configEasing(easing), duration, this.changeStyle);\n\n var finalStartAnimation = function finalStartAnimation() {\n _this2.stopJSAnimation = startAnimation();\n };\n\n this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);\n }\n }, {\n key: \"runStepAnimation\",\n value: function runStepAnimation(props) {\n var _this3 = this;\n\n var steps = props.steps,\n begin = props.begin,\n onAnimationStart = props.onAnimationStart;\n var _steps$ = steps[0],\n initialStyle = _steps$.style,\n _steps$$duration = _steps$.duration,\n initialTime = _steps$$duration === void 0 ? 0 : _steps$$duration;\n\n var addStyle = function addStyle(sequence, nextItem, index) {\n if (index === 0) {\n return sequence;\n }\n\n var duration = nextItem.duration,\n _nextItem$easing = nextItem.easing,\n easing = _nextItem$easing === void 0 ? 'ease' : _nextItem$easing,\n style = nextItem.style,\n nextProperties = nextItem.properties,\n onAnimationEnd = nextItem.onAnimationEnd;\n var preItem = index > 0 ? steps[index - 1] : nextItem;\n var properties = nextProperties || Object.keys(style);\n\n if (typeof easing === 'function' || easing === 'spring') {\n return _toConsumableArray(sequence).concat([_this3.runJSAnimation.bind(_this3, {\n from: preItem.style,\n to: style,\n duration: duration,\n easing: easing\n }), duration]);\n }\n\n var transition = getTransitionVal(properties, duration, easing);\n\n var newStyle = _objectSpread({}, preItem.style, style, {\n transition: transition\n });\n\n return _toConsumableArray(sequence).concat([newStyle, duration, onAnimationEnd]).filter(identity);\n };\n\n return this.manager.start([onAnimationStart].concat(_toConsumableArray(steps.reduce(addStyle, [initialStyle, Math.max(initialTime, begin)])), [props.onAnimationEnd]));\n }\n }, {\n key: \"runAnimation\",\n value: function runAnimation(props) {\n if (!this.manager) {\n this.manager = createAnimateManager();\n }\n\n var begin = props.begin,\n duration = props.duration,\n attributeName = props.attributeName,\n propsTo = props.to,\n easing = props.easing,\n onAnimationStart = props.onAnimationStart,\n onAnimationEnd = props.onAnimationEnd,\n steps = props.steps,\n children = props.children;\n var manager = this.manager;\n this.unSubscribe = manager.subscribe(this.handleStyleChange);\n\n if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {\n this.runJSAnimation(props);\n return;\n }\n\n if (steps.length > 1) {\n this.runStepAnimation(props);\n return;\n }\n\n var to = attributeName ? _defineProperty({}, attributeName, propsTo) : propsTo;\n var transition = getTransitionVal(Object.keys(to), duration, easing);\n manager.start([onAnimationStart, begin, _objectSpread({}, to, {\n transition: transition\n }), duration, onAnimationEnd]);\n }\n }, {\n key: \"handleStyleChange\",\n value: function handleStyleChange(style) {\n this.changeStyle(style);\n }\n }, {\n key: \"changeStyle\",\n value: function changeStyle(style) {\n if (this.mounted) {\n this.setState({\n style: style\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n children = _this$props3.children,\n begin = _this$props3.begin,\n duration = _this$props3.duration,\n attributeName = _this$props3.attributeName,\n easing = _this$props3.easing,\n isActive = _this$props3.isActive,\n steps = _this$props3.steps,\n from = _this$props3.from,\n to = _this$props3.to,\n canBegin = _this$props3.canBegin,\n onAnimationEnd = _this$props3.onAnimationEnd,\n shouldReAnimate = _this$props3.shouldReAnimate,\n onAnimationReStart = _this$props3.onAnimationReStart,\n others = _objectWithoutProperties(_this$props3, [\"children\", \"begin\", \"duration\", \"attributeName\", \"easing\", \"isActive\", \"steps\", \"from\", \"to\", \"canBegin\", \"onAnimationEnd\", \"shouldReAnimate\", \"onAnimationReStart\"]);\n\n var count = Children.count(children);\n var stateStyle = translateStyle(this.state.style);\n\n if (typeof children === 'function') {\n return children(stateStyle);\n }\n\n if (!isActive || count === 0) {\n return children;\n }\n\n var cloneContainer = function cloneContainer(container) {\n var _container$props = container.props,\n _container$props$styl = _container$props.style,\n style = _container$props$styl === void 0 ? {} : _container$props$styl,\n className = _container$props.className;\n var res = cloneElement(container, _objectSpread({}, others, {\n style: _objectSpread({}, style, stateStyle),\n className: className\n }));\n return res;\n };\n\n if (count === 1) {\n return cloneContainer(Children.only(children));\n }\n\n return React.createElement(\"div\", null, Children.map(children, function (child) {\n return cloneContainer(child);\n }));\n }\n }]);\n\n return Animate;\n}(Component), _class2.displayName = 'Animate', _class2.propTypes = {\n from: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n to: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n attributeName: PropTypes.string,\n // animation duration\n duration: PropTypes.number,\n begin: PropTypes.number,\n easing: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n steps: PropTypes.arrayOf(PropTypes.shape({\n duration: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n easing: PropTypes.oneOfType([PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']), PropTypes.func]),\n // transition css properties(dash case), optional\n properties: PropTypes.arrayOf('string'),\n onAnimationEnd: PropTypes.func\n })),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n isActive: PropTypes.bool,\n canBegin: PropTypes.bool,\n onAnimationEnd: PropTypes.func,\n // decide if it should reanimate with initial from style when props change\n shouldReAnimate: PropTypes.bool,\n onAnimationStart: PropTypes.func,\n onAnimationReStart: PropTypes.func\n}, _class2.defaultProps = {\n begin: 0,\n duration: 1000,\n from: '',\n to: '',\n attributeName: '',\n easing: 'ease',\n isActive: true,\n canBegin: true,\n steps: [],\n onAnimationEnd: function onAnimationEnd() {},\n onAnimationStart: function onAnimationStart() {}\n}, _temp)) || _class;\n\nexport default Animate;", + "import _isNumber from \"lodash/isNumber\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component, Children } from 'react';\nimport { Transition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport Animate from './Animate';\n\nvar parseDurationOfSingleTransition = function parseDurationOfSingleTransition() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var steps = options.steps,\n duration = options.duration;\n\n if (steps && steps.length) {\n return steps.reduce(function (result, entry) {\n return result + (_isNumber(entry.duration) && entry.duration > 0 ? entry.duration : 0);\n }, 0);\n }\n\n if (_isNumber(duration)) {\n return duration;\n }\n\n return 0;\n};\n\nvar AnimateGroupChild =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(AnimateGroupChild, _Component);\n\n function AnimateGroupChild() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, AnimateGroupChild);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnimateGroupChild)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n isActive: false\n };\n\n _this.handleEnter = function (node, isAppearing) {\n var _this$props = _this.props,\n appearOptions = _this$props.appearOptions,\n enterOptions = _this$props.enterOptions;\n\n _this.handleStyleActive(isAppearing ? appearOptions : enterOptions);\n };\n\n _this.handleExit = function () {\n _this.handleStyleActive(_this.props.leaveOptions);\n };\n\n return _this;\n }\n\n _createClass(AnimateGroupChild, [{\n key: \"handleStyleActive\",\n value: function handleStyleActive(style) {\n if (style) {\n var onAnimationEnd = style.onAnimationEnd ? function () {\n style.onAnimationEnd();\n } : null;\n this.setState(_objectSpread({}, style, {\n onAnimationEnd: onAnimationEnd,\n isActive: true\n }));\n }\n }\n }, {\n key: \"parseTimeout\",\n value: function parseTimeout() {\n var _this$props2 = this.props,\n appearOptions = _this$props2.appearOptions,\n enterOptions = _this$props2.enterOptions,\n leaveOptions = _this$props2.leaveOptions;\n return parseDurationOfSingleTransition(appearOptions) + parseDurationOfSingleTransition(enterOptions) + parseDurationOfSingleTransition(leaveOptions);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props3 = this.props,\n children = _this$props3.children,\n appearOptions = _this$props3.appearOptions,\n enterOptions = _this$props3.enterOptions,\n leaveOptions = _this$props3.leaveOptions,\n props = _objectWithoutProperties(_this$props3, [\"children\", \"appearOptions\", \"enterOptions\", \"leaveOptions\"]);\n\n return React.createElement(Transition, _extends({}, props, {\n onEnter: this.handleEnter,\n onExit: this.handleExit,\n timeout: this.parseTimeout()\n }), function () {\n return React.createElement(Animate, _this2.state, Children.only(children));\n });\n }\n }]);\n\n return AnimateGroupChild;\n}(Component);\n\nAnimateGroupChild.propTypes = {\n appearOptions: PropTypes.object,\n enterOptions: PropTypes.object,\n leaveOptions: PropTypes.object,\n children: PropTypes.element\n};\nexport default AnimateGroupChild;", + "import React, { Children } from 'react';\nimport { TransitionGroup } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport AnimateGroupChild from './AnimateGroupChild';\n\nfunction AnimateGroup(props) {\n var component = props.component,\n children = props.children,\n appear = props.appear,\n enter = props.enter,\n leave = props.leave;\n return React.createElement(TransitionGroup, {\n component: component\n }, Children.map(children, function (child, index) {\n return React.createElement(AnimateGroupChild, {\n appearOptions: appear,\n enterOptions: enter,\n leaveOptions: leave,\n key: \"child-\".concat(index)\n }, child);\n }));\n}\n\nAnimateGroup.propTypes = {\n appear: PropTypes.object,\n enter: PropTypes.object,\n leave: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.element]),\n component: PropTypes.any\n};\nAnimateGroup.defaultProps = {\n component: 'span'\n};\nexport default AnimateGroup;", + "import Animate from './Animate';\nimport { configBezier, configSpring } from './easing';\nimport { translateStyle } from './util';\nimport AnimateGroup from './AnimateGroup';\nexport { configSpring, configBezier, AnimateGroup, translateStyle };\nexport default Animate;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _addClass = _interopRequireDefault(require(\"dom-helpers/class/addClass\"));\n\nvar _removeClass = _interopRequireDefault(require(\"dom-helpers/class/removeClass\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _addClass.default)(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _removeClass.default)(node, c);\n });\n};\n/**\n * A `)) + ("`" + (`Transition` + "`")))) + (((` component using CSS transitions and animations.\n * It's inspired by the excellent [ng-animate](http://www.nganimate.org/) library.\n *\n * ` + "`") + (`CSSTransition` + ("`" + ` applies a pair of class names during the `))) + (("`" + (`appear` + "`")) + (`, ` + ("`" + `enter`)))))) + ((((("`" + `,\n * and `) + ("`" + (`exit` + "`"))) + ((` stages of the transition. The first class is applied and then a\n * second \"active\" class in order to activate the css animation. After the animation,\n * matching ` + ("`" + `done`)) + ("`" + (` class names are applied to persist the animation state.\n *\n * When the ` + "`")))) + (((`in` + "`") + (` prop is toggled to ` + ("`" + `true`))) + (("`" + (` the Component will get\n * the ` + "`")) + (`example-enter` + ("`" + ` CSS class and the `))))) + (((("`" + `example-enter-active`) + ("`" + (` CSS class\n * added in the next tick. This is a convention based on the ` + "`"))) + ((`classNames` + ("`" + ` prop.\n */\n\n\nvar CSSTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.onEnter = function (node, appearing) {\n var _this$getClassNames = _this.getClassNames(appearing ? 'appear' : 'enter'),\n className = _this$getClassNames.className;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, className);\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node, appearing);\n }\n };\n\n _this.onEntering = function (node, appearing) {\n var _this$getClassNames2 = _this.getClassNames(appearing ? 'appear' : 'enter'),\n activeClassName = _this$getClassNames2.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onEntering) {\n _this.props.onEntering(node, appearing);\n }\n };\n\n _this.onEntered = function (node, appearing) {\n var _this$getClassNames3 = _this.getClassNames('enter'),\n doneClassName = _this$getClassNames3.doneClassName;\n\n _this.removeClasses(node, appearing ? 'appear' : 'enter');\n\n addClass(node, doneClassName);\n\n if (_this.props.onEntered) {\n _this.props.onEntered(node, appearing);\n }\n };\n\n _this.onExit = function (node) {\n var _this$getClassNames4 = _this.getClassNames('exit'),\n className = _this$getClassNames4.className;\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n addClass(node, className);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n _this.onExiting = function (node) {\n var _this$getClassNames5 = _this.getClassNames('exit'),\n activeClassName = _this$getClassNames5.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onExiting) {\n _this.props.onExiting(node);\n }\n };\n\n _this.onExited = function (node) {\n var _this$getClassNames6 = _this.getClassNames('exit'),\n doneClassName = _this$getClassNames6.doneClassName;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, doneClassName);\n\n if (_this.props.onExited) {\n _this.props.onExited(node);\n }\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var className = typeof classNames !== 'string' ? classNames[type] : classNames + '-' + type;\n var activeClassName = typeof classNames !== 'string' ? classNames[type + 'Active'] : className + '-active';\n var doneClassName = typeof classNames !== 'string' ? classNames[type + 'Done'] : className + '-done';\n return {\n className: className,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$getClassNames7 = this.getClassNames(type),\n className = _this$getClassNames7.className,\n activeClassName = _this$getClassNames7.activeClassName,\n doneClassName = _this$getClassNames7.doneClassName;\n\n className && removeClass(node, className);\n activeClassName && removeClass(node, activeClassName);\n doneClassName && removeClass(node, doneClassName);\n };\n\n _proto.reflowAndAddClass = function reflowAndAddClass(node, className) {\n // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n if (className) {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n /* eslint-enable no-unused-expressions */\n\n addClass(node, className);\n }\n };\n\n _proto.render = function render() {\n var props = _extends({}, this.props);\n\n delete props.classNames;\n return _react.default.createElement(_Transition.default, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(_react.default.Component);\n\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, _Transition.default.propTypes, {\n /**\n * The animation classNames applied to the component as it enters, exits or has finished the transition.\n * A single name can be provided and it will be suffixed for each stage: e.g.\n *\n * `)) + ("`" + (`classNames=\"fade\"` + "`")))) + (((` applies ` + ("`" + `fade-enter`)) + ("`" + (`, ` + "`"))) + ((`fade-enter-active` + ("`" + `, `)) + ("`" + (`fade-enter-done` + "`")))))))) + (((((((`,\n * ` + "`") + (`fade-exit` + ("`" + `, `))) + (("`" + (`fade-exit-active` + "`")) + (`, ` + ("`" + `fade-exit-done`)))) + ((("`" + `, `) + ("`" + (`fade-appear` + "`"))) + ((`, and ` + ("`" + `fade-appear-active`)) + ("`" + (`.\n * Each individual classNames can also be specified independently like:\n *\n * ` + "`"))))) + (((("`" + "`") + (`js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ` + ("`" + "`"))) + (("`" + (`\n *\n * If you want to set these classes using CSS Modules:\n *\n * ` + "`")) + ("`" + ("`" + `js\n * import styles from './styles.css';\n * `)))) + ((("`" + "`") + ("`" + (`\n *\n * you might want to use camelCase in your CSS file, that way could simply spread\n * them instead of listing them one by one:\n *\n * ` + "`"))) + (("`" + ("`" + `js\n * classNames={{ ...styles }}\n * `)) + ("`" + ("`" + "`")))))) + (((((`\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: _PropTypes.classNamesShape,\n\n /**\n * A ` + "`") + (`` + ("`" + ` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `))) + (("`" + (`` + "`")) + (` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A ` + ("`" + ``)))) + ((("`" + ` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `) + ("`" + (`done` + "`"))) + ((` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A ` + ("`" + ``)) + ("`" + (` callback fired immediately after the 'exit' class is\n * applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A ` + "`"))))) + ((((`` + "`") + (` callback fired immediately after the 'exit-active' is applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A ` + ("`" + ``))) + (("`" + (` callback fired immediately after the 'exit' classes\n * are **removed** and the ` + "`")) + (`exit-done` + ("`" + ` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nvar _default = CSSTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/**\n * The `)))) + ((("`" + (`` + "`")) + (` component is a specialized ` + ("`" + `Transition`))) + (("`" + (` component\n * that animates between two children.\n *\n * ` + "`")) + ("`" + ("`" + `jsx\n * \n *
I appear first
\n *
I replace the above
\n *
\n * `))))))) + (((((("`" + "`") + ("`" + (`\n */\nvar ReplaceTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReplaceTransition, _React$Component);\n\n function ReplaceTransition() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n _this.handleEnter = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _this.handleLifecycle('onEnter', 0, args);\n };\n\n _this.handleEntering = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return _this.handleLifecycle('onEntering', 0, args);\n };\n\n _this.handleEntered = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return _this.handleLifecycle('onEntered', 0, args);\n };\n\n _this.handleExit = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n return _this.handleLifecycle('onExit', 1, args);\n };\n\n _this.handleExiting = function () {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n return _this.handleLifecycle('onExiting', 1, args);\n };\n\n _this.handleExited = function () {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n return _this.handleLifecycle('onExited', 1, args);\n };\n\n return _this;\n }\n\n var _proto = ReplaceTransition.prototype;\n\n _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n var _child$props;\n\n var children = this.props.children;\n\n var child = _react.default.Children.toArray(children)[idx];\n\n if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n if (this.props[handler]) this.props[handler]((0, _reactDom.findDOMNode)(this));\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n inProp = _this$props.in,\n props = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\"]);\n\n var _React$Children$toArr = _react.default.Children.toArray(children),\n first = _React$Children$toArr[0],\n second = _React$Children$toArr[1];\n\n delete props.onEnter;\n delete props.onEntering;\n delete props.onEntered;\n delete props.onExit;\n delete props.onExiting;\n delete props.onExited;\n return _react.default.createElement(_TransitionGroup.default, props, inProp ? _react.default.cloneElement(first, {\n key: 'first',\n onEnter: this.handleEnter,\n onEntering: this.handleEntering,\n onEntered: this.handleEntered\n }) : _react.default.cloneElement(second, {\n key: 'second',\n onEnter: this.handleExit,\n onEntering: this.handleExiting,\n onEntered: this.handleExited\n }));\n };\n\n return ReplaceTransition;\n}(_react.default.Component);\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n in: _propTypes.default.bool.isRequired,\n children: function children(props, propName) {\n if (_react.default.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n return null;\n }\n} : {};\nvar _default = ReplaceTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * By default the ` + "`"))) + ((`Transition` + ("`" + ` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the components.\n * It's up to you to give meaning and effect to those states. For example we can\n * add styles to a component when it enters or exits:\n *\n * `)) + ("`" + ("`" + "`")))) + (((`jsx\n * import Transition from 'react-transition-group/Transition';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: ` + "`") + (`opacity ${duration}ms ease-in-out` + ("`" + `,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {(state) => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * `))) + (("`" + ("`" + "`")) + (`\n *\n * As noted the ` + ("`" + `Transition`))))) + (((("`" + ` component doesn't _do_ anything by itself to its child component.\n * What it does do is track transition states over time so you can update the\n * component (such as by adding styles or classes) when it changes states.\n *\n * There are 4 main states a Transition can be in:\n * - `) + ("`" + (`'entering'` + "`"))) + ((`\n * - ` + ("`" + `'entered'`)) + ("`" + (`\n * - ` + "`")))) + (((`'exiting'` + "`") + (`\n * - ` + ("`" + `'exited'`))) + (("`" + (`\n *\n * Transition state is toggled via the ` + "`")) + (`in` + ("`" + ` prop. When `)))))) + ((((("`" + `true`) + ("`" + (` the component begins the\n * \"Enter\" stage. During this stage, the component will shift from its current transition state,\n * to ` + "`"))) + ((`'entering'` + ("`" + ` for the duration of the transition and then to the `)) + ("`" + (`'entered'` + "`")))) + (((` stage once\n * it's complete. Let's take the following example:\n *\n * ` + "`") + ("`" + ("`" + `jsx\n * state = { in: false };\n *\n * toggleEnterState = () => {\n * this.setState({ in: true });\n * }\n *\n * render() {\n * return (\n *
\n * \n * \n *
\n * );\n * }\n * `))) + (("`" + ("`" + "`")) + (`\n *\n * When the button is clicked the component will shift to the ` + ("`" + `'entering'`))))) + (((("`" + ` state and\n * stay there for 500ms (the value of `) + ("`" + (`timeout` + "`"))) + ((`) before it finally switches to ` + ("`" + `'entered'`)) + ("`" + (`.\n *\n * When ` + "`")))) + (((`in` + ("`" + ` is `)) + ("`" + (`false` + "`"))) + ((` the same thing happens except the state moves from ` + ("`" + `'exiting'`)) + ("`" + (` to ` + "`"))))))))) + ((((((((`'exited'` + "`") + (`.\n *\n * ## Timing\n *\n * Timing is often the trickiest part of animation, mistakes can result in slight delays\n * that are hard to pin down. A common example is when you want to add an exit transition,\n * you should set the desired final styles when the state is ` + ("`" + `'exiting'`))) + (("`" + (`. That's when the\n * transition to those styles will start and, if you matched the ` + "`")) + (`timeout` + ("`" + ` prop with the\n * CSS Transition duration, it will end exactly when the state changes to `)))) + ((("`" + `'exited'`) + ("`" + (`.\n *\n * > **Note**: For simpler transitions the ` + "`"))) + ((`Transition` + ("`" + ` component might be enough, but\n * > take into account that it's platform-agnostic, while the `)) + ("`" + (`CSSTransition` + "`"))))) + ((((` component\n * > [forces reflows](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * > in order to make more complex transitions more predictable. For example, even though\n * > classes ` + "`") + (`example-enter` + ("`" + ` and `))) + (("`" + (`example-enter-active` + "`")) + (` are applied immediately one after\n * > another, you can still transition from one to the other because of the forced reflow\n * > (read [this issue](https://github.com/reactjs/react-transition-group/issues/159#issuecomment-322761171)\n * > for more info). Take this into account when choosing between ` + ("`" + `Transition`)))) + ((("`" + ` and\n * > `) + ("`" + (`CSSTransition` + "`"))) + ((`.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A ` + ("`" + `function`)) + ("`" + (` child can be used instead of a React element.\n * This function is called with the current transition status\n * ('entering', 'entered', 'exiting', 'exited', 'unmounted'), which can be used\n * to apply context specific props to a component.\n *\n * ` + "`")))))) + ((((("`" + "`") + (`jsx\n * \n * {(status) => (\n * \n * )}\n * \n * ` + "`")) + ("`" + ("`" + `\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `)))) + ((("`" + `Transition`) + ("`" + (` component. If you want to \"lazy mount\" the component on the\n * first ` + "`"))) + ((`in={true}` + ("`" + ` you can set `)) + ("`" + (`mountOnEnter` + "`"))))) + ((((`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify ` + "`") + (`unmountOnExit` + ("`" + `.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `))) + (("`" + (`'exited'` + "`")) + (` state.\n * Set ` + ("`" + `unmountOnExit`)))) + ((("`" + ` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `) + ("`" + (`` + "`"))) + ((` component mounts.\n * If you want to transition on the first mount set ` + ("`" + `appear`)) + ("`" + (` to ` + "`"))))))) + ((((((`true` + "`") + (`, and the\n * component will transition in as soon as the ` + ("`" + ``))) + (("`" + (` mounts.\n *\n * > Note: there are no specific \"appear\" states. ` + "`")) + (`appear` + ("`" + ` only adds an additional `)))) + ((("`" + `enter`) + ("`" + (` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless ` + "`"))) + ((`addEndListener` + ("`" + ` is provided\n *\n * You may specify a single timeout for all transitions like: `)) + ("`" + (`timeout={500}` + "`"))))) + ((((`,\n * or individually like:\n *\n * ` + "`") + ("`" + ("`" + `jsx\n * timeout={{\n * enter: 300,\n * exit: 500,\n * appear: 500,\n * }}\n * `))) + (("`" + ("`" + "`")) + (`\n *\n * If the value of ` + ("`" + `appear`)))) + ((("`" + ` is not set, then the value from enter is taken.\n *\n * If the `) + ("`" + (`enter` + "`"))) + ((` or ` + ("`" + `exit`)) + ("`" + (` value is ` + "`")))))) + (((((`null` + "`") + (` or ` + ("`" + `undefined`))) + (("`" + (`, then the timer is set to ` + "`")) + (`0` + ("`" + `\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = process.env.NODE_ENV !== \"production\" ? _PropTypes.timeoutsShape : {};;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `)))) + ((("`" + `done`) + ("`" + (` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ` + "`"))) + (("`" + ("`" + `jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * `)) + ("`" + ("`" + "`"))))) + ((((`\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * ` + "`") + (`isAppearing` + ("`" + ` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `))) + (("`" + (`isAppearing` + "`")) + (` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * ` + ("`" + `isAppearing`)))) + ((("`" + (` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The ` + "`")) + (`` + ("`" + ` component manages a set of transition components\n * (`))) + (("`" + (`` + "`")) + (` and ` + ("`" + ``)))))))) + ((((((("`" + `) in a list. Like with the transition\n * components, `) + ("`" + (`` + "`"))) + ((` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * ` + ("`" + `in`)) + ("`" + (` prop is toggled automatically by the ` + "`")))) + (((`` + "`") + (`.\n *\n * Note that ` + ("`" + ``))) + (("`" + (` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * ` + "`")) + (`` + ("`" + ` renders a `))))) + (((("`" + `
`) + ("`" + (` by default. You can change this\n * behavior by providing a ` + "`"))) + ((`component` + ("`" + ` prop.\n * If you use React v16+ and would like to avoid a wrapping `)) + ("`" + (`
` + "`")))) + (((` element\n * you can pass in ` + "`") + (`component={null}` + ("`" + `. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of `))) + (("`" + (`` + "`")) + (` components, that are toggled ` + ("`" + `in`)))))) + ((((("`" + ` and out as they\n * leave. the `) + ("`" + (`` + "`"))) + ((` will inject specific transition props, so\n * remember to spread them through if you are wrapping the ` + ("`" + ``)) + ("`" + (` as\n * with our ` + "`")))) + (((`` + "`") + (` example.\n *\n * While this component is meant to make it easier to animate multiple\n * ` + ("`" + `Transition`))) + (("`" + (` or ` + "`")) + (`CSSTransition` + ("`" + ` children, sometimes you want to transition a\n * single child by changing its content, e.g. routes, slides, images in a\n * carousel etc. In that case you can change the `))))) + (((("`" + `key`) + ("`" + (` prop of the child\n * component along with its content, that way ` + "`"))) + ((`TransitionGroup` + ("`" + ` will know that\n * it should transition the child.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `)) + ("`" + (`cloneElement` + "`")))) + (((` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a ` + ("`" + `childFactory`)) + ("`" + (`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nvar _CSSTransition = _interopRequireDefault(require(\"./CSSTransition\"));\n\nvar _ReplaceTransition = _interopRequireDefault(require(\"./ReplaceTransition\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n Transition: _Transition.default,\n TransitionGroup: _TransitionGroup.default,\n ReplaceTransition: _ReplaceTransition.default,\n CSSTransition: _CSSTransition.default\n};", + "\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given ` + "`"))) + ((`this.props.children` + ("`" + `, return an object mapping key to child.\n *\n * @param {*} children `)) + ("`" + (`this.props.children` + "`"))))))) + ((((((`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * ` + "`") + (`ReactTransitionChildMapping.getChildMapping()` + ("`" + `.\n * @param {object} next next children as returned from\n * `))) + (("`" + (`ReactTransitionChildMapping.getChildMapping()` + "`")) + (`.\n * @return {object} a key set that contains all keys in ` + ("`" + `prev`)))) + ((("`" + ` and all keys\n * in `) + ("`" + (`next` + "`"))) + ((` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of ` + ("`" + `next`)) + ("`" + (`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in ` + "`"))))) + ((((`next` + "`") + (`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}", + "\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;", + "/** @license React v16.8.4\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.concurrent_mode\"):60111,y=n?Symbol.for(\"react.forward_ref\"):60112,z=n?Symbol.for(\"react.suspense\"):60113,aa=n?Symbol.for(\"react.memo\"):\n60115,ba=n?Symbol.for(\"react.lazy\"):60116,A=\"function\"===typeof Symbol&&Symbol.iterator;function ca(a,b,d,c,e,g,h,f){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[d,c,e,g,h,f],m=0;a=Error(b.replace(/%s/g,function(){return l[m++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction B(a){for(var b=arguments.length-1,d=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;cP.length&&P.push(a)}\nfunction S(a,b,d,c){var e=typeof a;if(\"undefined\"===e||\"boolean\"===e)a=null;var g=!1;if(null===a)g=!0;else switch(e){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return d(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;h max) {\n validMin = max;\n validMax = min;\n }\n\n return [validMin, validMax];\n}\n/**\n * Calculate the step which is easy to understand between ticks, like 10, 20, 25\n *\n * @param {Decimal} roughStep The rough step calculated by deviding the\n * difference by the tickCount\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Integer} correctionFactor A correction factor\n * @return {Decimal} The step which is easy to understand between two ticks\n */\n\n\nfunction getFormatStep(roughStep, allowDecimals, correctionFactor) {\n if (roughStep.lte(0)) {\n return new _decimal.default(0);\n }\n\n var digitCount = _arithmetic.default.getDigitCount(roughStep.toNumber()); // The ratio between the rough step and the smallest number which has a bigger\n // order of magnitudes than the rough step\n\n\n var digitCountValue = new _decimal.default(10).pow(digitCount);\n var stepRatio = roughStep.div(digitCountValue); // When an integer and a float multiplied, the accuracy of result may be wrong\n\n var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;\n var amendStepRatio = new _decimal.default(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);\n var formatStep = amendStepRatio.mul(digitCountValue);\n return allowDecimals ? formatStep : new _decimal.default(Math.ceil(formatStep));\n}\n/**\n * calculate the ticks when the minimum value equals to the maximum value\n *\n * @param {Number} value The minimum valuue which is also the maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickOfSingleValue(value, tickCount, allowDecimals) {\n var step = 1; // calculate the middle value of ticks\n\n var middle = new _decimal.default(value);\n\n if (!middle.isint() && allowDecimals) {\n var absVal = Math.abs(value);\n\n if (absVal < 1) {\n // The step should be a float number when the difference is smaller than 1\n step = new _decimal.default(10).pow(_arithmetic.default.getDigitCount(value) - 1);\n middle = new _decimal.default(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (absVal > 1) {\n // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1\n middle = new _decimal.default(Math.floor(value));\n }\n } else if (value === 0) {\n middle = new _decimal.default(Math.floor((tickCount - 1) / 2));\n } else if (!allowDecimals) {\n middle = new _decimal.default(Math.floor(value));\n }\n\n var middleIndex = Math.floor((tickCount - 1) / 2);\n var fn = (0, _utils.compose)((0, _utils.map)(function (n) {\n return middle.add(new _decimal.default(n - middleIndex).mul(step)).toNumber();\n }), _utils.range);\n return fn(0, tickCount);\n}\n/**\n * Calculate the step\n *\n * @param {Number} min The minimum value of an interval\n * @param {Number} max The maximum value of an interval\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Number} correctionFactor A correction factor\n * @return {Object} The step, minimum value of ticks, maximum value of ticks\n */\n\n\nfunction calculateStep(min, max, tickCount, allowDecimals) {\n var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n // dirty hack (for recharts' test)\n if (!Number.isFinite((max - min) / (tickCount - 1))) {\n return {\n step: new _decimal.default(0),\n tickMin: new _decimal.default(0),\n tickMax: new _decimal.default(0)\n };\n } // The step which is easy to understand between two ticks\n\n\n var step = getFormatStep(new _decimal.default(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor); // A medial value of ticks\n\n var middle; // When 0 is inside the interval, 0 should be a tick\n\n if (min <= 0 && max >= 0) {\n middle = new _decimal.default(0);\n } else {\n // calculate the middle value\n middle = new _decimal.default(min).add(max).div(2); // minus modulo value\n\n middle = middle.sub(new _decimal.default(middle).mod(step));\n }\n\n var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());\n var upCount = Math.ceil(new _decimal.default(max).sub(middle).div(step).toNumber());\n var scaleCount = belowCount + upCount + 1;\n\n if (scaleCount > tickCount) {\n // When more ticks need to cover the interval, step should be bigger.\n return calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);\n }\n\n if (scaleCount < tickCount) {\n // When less ticks can cover the interval, we should add some additional ticks\n upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;\n belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);\n }\n\n return {\n step: step,\n tickMin: middle.sub(new _decimal.default(belowCount).mul(step)),\n tickMax: middle.add(new _decimal.default(upCount).mul(step))\n };\n}\n/**\n * Calculate the ticks of an interval, the count of ticks will be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getNiceTickValuesFn(_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n min = _ref4[0],\n max = _ref4[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval = getValidInterval([min, max]),\n _getValidInterval2 = _slicedToArray(_getValidInterval, 2),\n cormin = _getValidInterval2[0],\n cormax = _getValidInterval2[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n var _values = cormax === Infinity ? [cormin].concat(_toConsumableArray((0, _utils.range)(0, tickCount - 1).map(function () {\n return Infinity;\n }))) : _toConsumableArray((0, _utils.range)(0, tickCount - 1).map(function () {\n return -Infinity;\n })).concat([cormax]);\n\n return min > max ? (0, _utils.reverse)(_values) : _values;\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n } // Get the step between two ticks\n\n\n var _calculateStep = calculateStep(cormin, cormax, count, allowDecimals),\n step = _calculateStep.step,\n tickMin = _calculateStep.tickMin,\n tickMax = _calculateStep.tickMax;\n\n var values = _arithmetic.default.rangeStep(tickMin, tickMax.add(new _decimal.default(0.1).mul(step)), step);\n\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFn(_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n min = _ref6[0],\n max = _ref6[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval3 = getValidInterval([min, max]),\n _getValidInterval4 = _slicedToArray(_getValidInterval3, 2),\n cormin = _getValidInterval4[0],\n cormax = _getValidInterval4[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n }\n\n var step = getFormatStep(new _decimal.default(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n var fn = (0, _utils.compose)((0, _utils.map)(function (n) {\n return new _decimal.default(cormin).add(new _decimal.default(n).mul(step)).toNumber();\n }), _utils.range);\n var values = fn(0, count).filter(function (entry) {\n return entry >= cormin && entry <= cormax;\n });\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed,\n * but the domain will be guaranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFixedDomainFn(_ref7, tickCount) {\n var _ref8 = _slicedToArray(_ref7, 2),\n min = _ref8[0],\n max = _ref8[1];\n\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n // More than two ticks should be return\n var _getValidInterval5 = getValidInterval([min, max]),\n _getValidInterval6 = _slicedToArray(_getValidInterval5, 2),\n cormin = _getValidInterval6[0],\n cormax = _getValidInterval6[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return [cormin];\n }\n\n var count = Math.max(tickCount, 2);\n var step = getFormatStep(new _decimal.default(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n\n var values = _toConsumableArray(_arithmetic.default.rangeStep(new _decimal.default(cormin), new _decimal.default(cormax).sub(new _decimal.default(0.99).mul(step)), step)).concat([cormax]);\n\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n\nvar getNiceTickValues = (0, _utils.memoize)(getNiceTickValuesFn);\nexports.getNiceTickValues = getNiceTickValues;\nvar getTickValues = (0, _utils.memoize)(getTickValuesFn);\nexports.getTickValues = getTickValues;\nvar getTickValuesFixedDomain = (0, _utils.memoize)(getTickValuesFixedDomainFn);\nexports.getTickValuesFixedDomain = getTickValuesFixedDomain;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"getTickValues\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getTickValues;\n }\n});\nObject.defineProperty(exports, \"getNiceTickValues\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getNiceTickValues;\n }\n});\nObject.defineProperty(exports, \"getTickValuesFixedDomain\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getTickValuesFixedDomain;\n }\n});\n\nvar _getNiceTickValues = require(\"./getNiceTickValues\");", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _decimal = _interopRequireDefault(require(\"decimal.js-light\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileOverview 一些公用的运算方法\n * @author xile611\n * @date 2015-09-17\n */\n\n/**\n * 获取数值的位数\n * 其中绝对值属于区间[0.1, 1), 得到的值为0\n * 绝对值属于区间[0.01, 0.1),得到的位数为 -1\n * 绝对值属于区间[0.001, 0.01),得到的位数为 -2\n *\n * @param {Number} value 数值\n * @return {Integer} 位数\n */\nfunction getDigitCount(value) {\n var result;\n\n if (value === 0) {\n result = 1;\n } else {\n result = Math.floor(new _decimal.default(value).abs().log(10).toNumber()) + 1;\n }\n\n return result;\n}\n/**\n * 按照固定的步长获取[start, end)这个区间的数据\n * 并且需要处理js计算精度的问题\n *\n * @param {Decimal} start 起点\n * @param {Decimal} end 终点,不包含该值\n * @param {Decimal} step 步长\n * @return {Array} 若干数值\n */\n\n\nfunction rangeStep(start, end, step) {\n var num = new _decimal.default(start);\n var result = [];\n\n while (num.lt(end)) {\n result.push(num.toNumber());\n num = num.add(step);\n }\n\n return result;\n}\n/**\n * 对数值进行线性插值\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} t [0, 1]内的某个值\n * @return {Number} 定义域内的某个值\n */\n\n\nvar interpolateNumber = (0, _utils.curry)(function (a, b, t) {\n var newA = +a;\n var newB = +b;\n return newA + t * (newB - newA);\n});\n/**\n * 线性插值的逆运算\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个范围内时,返回值属于[0, 1]\n */\n\nvar uninterpolateNumber = (0, _utils.curry)(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return (x - a) / diff;\n});\n/**\n * 线性插值的逆运算,并且有截断的操作\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个区间内时,返回值属于[0, 1],\n * 当x不在 a ~ b这个区间时,会截断到 a ~ b 这个区间\n */\n\nvar uninterpolateTruncation = (0, _utils.curry)(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return Math.max(0, Math.min(1, (x - a) / diff));\n});\nvar _default = {\n rangeStep: rangeStep,\n getDigitCount: getDigitCount,\n interpolateNumber: interpolateNumber,\n uninterpolateNumber: uninterpolateNumber,\n uninterpolateTruncation: uninterpolateTruncation\n};\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.memoize = exports.reverse = exports.compose = exports.map = exports.range = exports.curry = exports.PLACE_HOLDER = void 0;\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nvar identity = function identity(i) {\n return i;\n};\n\nvar PLACE_HOLDER = {\n '@@functional/placeholder': true\n};\nexports.PLACE_HOLDER = PLACE_HOLDER;\n\nvar isPlaceHolder = function isPlaceHolder(val) {\n return val === PLACE_HOLDER;\n};\n\nvar curry0 = function curry0(fn) {\n return function _curried() {\n if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {\n return _curried;\n }\n\n return fn.apply(void 0, arguments);\n };\n};\n\nvar curryN = function curryN(n, fn) {\n if (n === 1) {\n return fn;\n }\n\n return curry0(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var argsLength = args.filter(function (arg) {\n return arg !== PLACE_HOLDER;\n }).length;\n\n if (argsLength >= n) {\n return fn.apply(void 0, args);\n }\n\n return curryN(n - argsLength, curry0(function () {\n for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n restArgs[_key2] = arguments[_key2];\n }\n\n var newArgs = args.map(function (arg) {\n return isPlaceHolder(arg) ? restArgs.shift() : arg;\n });\n return fn.apply(void 0, _toConsumableArray(newArgs).concat(restArgs));\n }));\n });\n};\n\nvar curry = function curry(fn) {\n return curryN(fn.length, fn);\n};\n\nexports.curry = curry;\n\nvar range = function range(begin, end) {\n var arr = [];\n\n for (var i = begin; i < end; ++i) {\n arr[i - begin] = i;\n }\n\n return arr;\n};\n\nexports.range = range;\nvar map = curry(function (fn, arr) {\n if (Array.isArray(arr)) {\n return arr.map(fn);\n }\n\n return Object.keys(arr).map(function (key) {\n return arr[key];\n }).map(fn);\n});\nexports.map = map;\n\nvar compose = function compose() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n if (!args.length) {\n return identity;\n }\n\n var fns = args.reverse(); // first function can receive multiply arguments\n\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\n\nexports.compose = compose;\n\nvar reverse = function reverse(arr) {\n if (Array.isArray(arr)) {\n return arr.reverse();\n } // can be string\n\n\n return arr.split('').reverse.join('');\n};\n\nexports.reverse = reverse;\n\nvar memoize = function memoize(fn) {\n var lastArgs = null;\n var lastResult = null;\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n if (lastArgs && args.every(function (val, i) {\n return val === lastArgs[i];\n })) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = fn.apply(void 0, args);\n return lastResult;\n };\n};\n\nexports.memoize = memoize;", + "import _isEqual from \"lodash/isEqual\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\nimport _isArray from \"lodash/isArray\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Area\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Animate from 'react-smooth';\nimport Curve from '../shape/Curve';\nimport Dot from '../shape/Dot';\nimport Layer from '../container/Layer';\nimport LabelList from '../component/LabelList';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, LEGEND_TYPES, getPresentationAttributes, isSsr, filterEventAttributes } from '../util/ReactUtils';\nimport { isNumber, uniqueId, interpolateNumber } from '../util/DataUtils';\nimport { getCateCoordinateOfLine, getValueByDataKey } from '../util/ChartUtils';\n\nvar Area = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Area, _Component);\n\n function Area() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Area);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Area)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n isAnimationFinished: true\n };\n _this.id = uniqueId('recharts-area-');\n\n _this.cachePrevData = function (points, baseLine) {\n _this.setState({\n prevPoints: points,\n prevBaseLine: baseLine\n });\n };\n\n _this.handleAnimationEnd = function () {\n var onAnimationEnd = _this.props.onAnimationEnd;\n\n _this.setState({\n isAnimationFinished: true\n });\n\n if (_isFunction(onAnimationEnd)) {\n onAnimationEnd();\n }\n };\n\n _this.handleAnimationStart = function () {\n var onAnimationStart = _this.props.onAnimationStart;\n\n _this.setState({\n isAnimationFinished: false\n });\n\n if (_isFunction(onAnimationStart)) {\n onAnimationStart();\n }\n };\n\n return _this;\n }\n\n _createClass(Area, [{\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this$props = this.props,\n animationId = _this$props.animationId,\n points = _this$props.points,\n baseLine = _this$props.baseLine;\n\n if (nextProps.animationId !== animationId) {\n this.cachePrevData(points, baseLine);\n }\n }\n }, {\n key: \"renderDots\",\n value: function renderDots(needClip, clipPathId) {\n var _this2 = this;\n\n var isAnimationActive = this.props.isAnimationActive;\n var isAnimationFinished = this.state.isAnimationFinished;\n\n if (isAnimationActive && !isAnimationFinished) {\n return null;\n }\n\n var _this$props2 = this.props,\n dot = _this$props2.dot,\n points = _this$props2.points,\n dataKey = _this$props2.dataKey;\n var areaProps = getPresentationAttributes(this.props);\n var customDotProps = getPresentationAttributes(dot);\n var dotEvents = filterEventAttributes(dot);\n var dots = points.map(function (entry, i) {\n var dotProps = _objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, areaProps, customDotProps, dotEvents, {\n dataKey: dataKey,\n cx: entry.x,\n cy: entry.y,\n index: i,\n value: entry.value,\n payload: entry.payload\n });\n\n return _this2.constructor.renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n };\n return React.createElement(Layer, _extends({\n className: \"recharts-area-dots\"\n }, dotsProps), dots);\n }\n }, {\n key: \"renderHorizontalRect\",\n value: function renderHorizontalRect(alpha) {\n var _this$props3 = this.props,\n baseLine = _this$props3.baseLine,\n points = _this$props3.points,\n strokeWidth = _this$props3.strokeWidth;\n var startX = points[0].x;\n var endX = points[points.length - 1].x;\n var width = alpha * Math.abs(startX - endX);\n var maxY = Math.max.apply(null, points.map(function (entry) {\n return entry.y || 0;\n }));\n\n if (isNumber(baseLine)) {\n maxY = Math.max(baseLine, maxY);\n } else if (baseLine && _isArray(baseLine) && baseLine.length) {\n maxY = Math.max(Math.max.apply(null, baseLine.map(function (entry) {\n return entry.y || 0;\n })), maxY);\n }\n\n if (isNumber(maxY)) {\n return React.createElement(\"rect\", {\n x: startX < endX ? startX : startX - width,\n y: 0,\n width: width,\n height: parseInt(maxY + (strokeWidth || 1), 10)\n });\n }\n\n return null;\n }\n }, {\n key: \"renderVerticalRect\",\n value: function renderVerticalRect(alpha) {\n var _this$props4 = this.props,\n baseLine = _this$props4.baseLine,\n points = _this$props4.points,\n strokeWidth = _this$props4.strokeWidth;\n var startY = points[0].y;\n var endY = points[points.length - 1].y;\n var height = alpha * Math.abs(startY - endY);\n var maxX = Math.max.apply(null, points.map(function (entry) {\n return entry.x || 0;\n }));\n\n if (isNumber(baseLine)) {\n maxX = Math.max(baseLine, maxX);\n } else if (baseLine && _isArray(baseLine) && baseLine.length) {\n maxX = Math.max(Math.max.apply(null, baseLine.map(function (entry) {\n return entry.x || 0;\n })), maxX);\n }\n\n if (isNumber(maxX)) {\n return React.createElement(\"rect\", {\n x: 0,\n y: startY < endY ? startY : startY - height,\n width: maxX + (strokeWidth || 1),\n height: parseInt(height, 10)\n });\n }\n\n return null;\n }\n }, {\n key: \"renderClipRect\",\n value: function renderClipRect(alpha) {\n var layout = this.props.layout;\n\n if (layout === 'vertical') {\n return this.renderVerticalRect(alpha);\n }\n\n return this.renderHorizontalRect(alpha);\n }\n }, {\n key: \"renderAreaStatically\",\n value: function renderAreaStatically(points, baseLine, needClip, clipPathId) {\n var _this$props5 = this.props,\n layout = _this$props5.layout,\n type = _this$props5.type,\n stroke = _this$props5.stroke,\n connectNulls = _this$props5.connectNulls,\n isRange = _this$props5.isRange;\n return React.createElement(Layer, {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n }, React.createElement(Curve, _extends({}, this.props, {\n points: points,\n baseLine: baseLine,\n stroke: \"none\",\n className: \"recharts-area-area\"\n })), stroke !== 'none' && React.createElement(Curve, _extends({}, getPresentationAttributes(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: points\n })), stroke !== 'none' && isRange && React.createElement(Curve, _extends({}, getPresentationAttributes(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: baseLine\n })));\n }\n }, {\n key: \"renderAreaWithAnimation\",\n value: function renderAreaWithAnimation(needClip, clipPathId) {\n var _this3 = this;\n\n var _this$props6 = this.props,\n points = _this$props6.points,\n baseLine = _this$props6.baseLine,\n isAnimationActive = _this$props6.isAnimationActive,\n animationBegin = _this$props6.animationBegin,\n animationDuration = _this$props6.animationDuration,\n animationEasing = _this$props6.animationEasing,\n animationId = _this$props6.animationId;\n var _this$state = this.state,\n prevPoints = _this$state.prevPoints,\n prevBaseLine = _this$state.prevBaseLine; // const clipPathId = _.isNil(id) ? this.id : id;\n\n return React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"area-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function (_ref) {\n var t = _ref.t;\n\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length; // update animtaion\n\n var stepPoints = points.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread({}, entry, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n\n return entry;\n });\n var stepBaseLine;\n\n if (isNumber(baseLine)) {\n var interpolator = interpolateNumber(prevBaseLine, baseLine);\n stepBaseLine = interpolator(t);\n } else if (_isNil(baseLine) || _isNaN(baseLine)) {\n var _interpolator = interpolateNumber(prevBaseLine, 0);\n\n stepBaseLine = _interpolator(t);\n } else {\n stepBaseLine = baseLine.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n\n if (prevBaseLine[prevPointIndex]) {\n var prev = prevBaseLine[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread({}, entry, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n\n return entry;\n });\n }\n\n return _this3.renderAreaStatically(stepPoints, stepBaseLine, needClip, clipPathId);\n }\n\n return React.createElement(Layer, null, React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: \"animationClipPath-\".concat(clipPathId)\n }, _this3.renderClipRect(t))), React.createElement(Layer, {\n clipPath: \"url(#animationClipPath-\".concat(clipPathId, \")\")\n }, _this3.renderAreaStatically(points, baseLine, needClip, clipPathId)));\n });\n }\n }, {\n key: \"renderArea\",\n value: function renderArea(needClip, clipPathId) {\n var _this$props7 = this.props,\n points = _this$props7.points,\n baseLine = _this$props7.baseLine,\n isAnimationActive = _this$props7.isAnimationActive;\n var _this$state2 = this.state,\n prevPoints = _this$state2.prevPoints,\n prevBaseLine = _this$state2.prevBaseLine,\n totalLength = _this$state2.totalLength;\n\n if (isAnimationActive && points && points.length && (!prevPoints && totalLength > 0 || !_isEqual(prevPoints, points) || !_isEqual(prevBaseLine, baseLine))) {\n return this.renderAreaWithAnimation(needClip, clipPathId);\n }\n\n return this.renderAreaStatically(points, baseLine, needClip, clipPathId);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props8 = this.props,\n hide = _this$props8.hide,\n dot = _this$props8.dot,\n points = _this$props8.points,\n className = _this$props8.className,\n top = _this$props8.top,\n left = _this$props8.left,\n xAxis = _this$props8.xAxis,\n yAxis = _this$props8.yAxis,\n width = _this$props8.width,\n height = _this$props8.height,\n isAnimationActive = _this$props8.isAnimationActive,\n id = _this$props8.id;\n\n if (hide || !points || !points.length) {\n return null;\n }\n\n var isAnimationFinished = this.state.isAnimationFinished;\n var hasSinglePoint = points.length === 1;\n var layerClass = classNames('recharts-area', className);\n var needClip = xAxis && xAxis.allowDataOverflow || yAxis && yAxis.allowDataOverflow;\n var clipPathId = _isNil(id) ? this.id : id;\n return React.createElement(Layer, {\n className: layerClass\n }, needClip ? React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, React.createElement(\"rect\", {\n x: left,\n y: top,\n width: width,\n height: parseInt(height, 10)\n }))) : null, !hasSinglePoint ? this.renderArea(needClip, clipPathId) : null, (dot || hasSinglePoint) && this.renderDots(needClip, clipPathId), (!isAnimationActive || isAnimationFinished) && LabelList.renderCallByParent(this.props, points));\n }\n }]);\n\n return Area;\n}(Component), _class2.displayName = 'Area', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,\n type: PropTypes.oneOfType([PropTypes.oneOf(['basis', 'basisClosed', 'basisOpen', 'linear', 'linearClosed', 'natural', 'monotoneX', 'monotoneY', 'monotone', 'step', 'stepBefore', 'stepAfter']), PropTypes.func]),\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n yAxis: PropTypes.object,\n xAxis: PropTypes.object,\n stackId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n legendType: PropTypes.oneOf(LEGEND_TYPES),\n connectNulls: PropTypes.bool,\n activeDot: PropTypes.oneOfType([PropTypes.object, PropTypes.element, PropTypes.func, PropTypes.bool]),\n // dot configuration\n dot: PropTypes.oneOfType([PropTypes.func, PropTypes.element, PropTypes.object, PropTypes.bool]),\n label: PropTypes.oneOfType([PropTypes.func, PropTypes.element, PropTypes.object, PropTypes.bool]),\n hide: PropTypes.bool,\n // have curve configuration\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n baseLine: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n isRange: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.array])\n })),\n onAnimationStart: PropTypes.func,\n onAnimationEnd: PropTypes.func,\n animationId: PropTypes.number,\n isAnimationActive: PropTypes.bool,\n animationBegin: PropTypes.number,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']),\n id: PropTypes.string\n}), _class2.defaultProps = {\n stroke: '#3182bd',\n fill: '#3182bd',\n fillOpacity: 0.6,\n xAxisId: 0,\n yAxisId: 0,\n legendType: 'line',\n connectNulls: false,\n // points of area\n points: [],\n dot: false,\n activeDot: true,\n hide: false,\n isAnimationActive: !isSsr(),\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n}, _class2.getBaseValue = function (props, xAxis, yAxis) {\n var layout = props.layout,\n baseValue = props.baseValue;\n\n if (isNumber(baseValue)) {\n return baseValue;\n }\n\n var numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n var domain = numericAxis.scale.domain();\n\n if (numericAxis.type === 'number') {\n var max = Math.max(domain[0], domain[1]);\n var min = Math.min(domain[0], domain[1]);\n\n if (baseValue === 'dataMin') {\n return min;\n }\n\n if (baseValue === 'dataMax') {\n return max;\n }\n\n return max < 0 ? max : Math.max(Math.min(domain[0], domain[1]), 0);\n }\n\n if (baseValue === 'dataMin') {\n return domain[0];\n }\n\n if (baseValue === 'dataMax') {\n return domain[1];\n }\n\n return domain[0];\n}, _class2.getComposedData = function (_ref2) {\n var props = _ref2.props,\n xAxis = _ref2.xAxis,\n yAxis = _ref2.yAxis,\n xAxisTicks = _ref2.xAxisTicks,\n yAxisTicks = _ref2.yAxisTicks,\n bandSize = _ref2.bandSize,\n dataKey = _ref2.dataKey,\n stackedData = _ref2.stackedData,\n dataStartIndex = _ref2.dataStartIndex,\n displayedData = _ref2.displayedData,\n offset = _ref2.offset;\n var layout = props.layout;\n var hasStack = stackedData && stackedData.length;\n var baseValue = Area.getBaseValue(props, xAxis, yAxis);\n var isRange = false;\n var points = displayedData.map(function (entry, index) {\n var value;\n\n if (hasStack) {\n value = stackedData[dataStartIndex + index];\n } else {\n value = getValueByDataKey(entry, dataKey);\n\n if (!_isArray(value)) {\n value = [baseValue, value];\n } else {\n isRange = true;\n }\n }\n\n if (layout === 'horizontal') {\n return {\n x: getCateCoordinateOfLine({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n y: _isNil(value[1]) ? null : yAxis.scale(value[1]),\n value: value,\n payload: entry\n };\n }\n\n return {\n x: _isNil(value[1]) ? null : xAxis.scale(value[1]),\n y: getCateCoordinateOfLine({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n value: value,\n payload: entry\n };\n });\n var baseLine;\n\n if (hasStack || isRange) {\n baseLine = points.map(function (entry) {\n if (layout === 'horizontal') {\n return {\n x: entry.x,\n y: !_isNil(_get(entry, 'value[0]')) ? yAxis.scale(_get(entry, 'value[0]')) : null\n };\n }\n\n return {\n x: !_isNil(_get(entry, 'value[0]')) ? xAxis.scale(_get(entry, 'value[0]')) : null,\n y: entry.y\n };\n });\n } else if (layout === 'horizontal') {\n baseLine = yAxis.scale(baseValue);\n } else {\n baseLine = xAxis.scale(baseValue);\n }\n\n return _objectSpread({\n points: points,\n baseLine: baseLine,\n layout: layout,\n isRange: isRange\n }, offset);\n}, _class2.renderDotItem = function (option, props) {\n var dotItem;\n\n if (React.isValidElement(option)) {\n dotItem = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n dotItem = option(props);\n } else {\n dotItem = React.createElement(Dot, _extends({}, props, {\n className: \"recharts-area-dot\"\n }));\n }\n\n return dotItem;\n}, _temp)) || _class;\n\nexport default Area;", + "function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (!name) {\n return null;\n }\n\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var result = PREFIX_LIST.reduce(function (res, entry) {\n return _objectSpread({}, res, _defineProperty({}, entry + camelName, value));\n }, {});\n result[name] = value;\n return result;\n};", + "import _range from \"lodash/range\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\n/**\n * @fileOverview Brush\n */\nimport React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { scalePoint } from 'd3-scale';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Text from '../component/Text';\nimport { isNumber } from '../util/DataUtils';\nimport { generatePrefixStyle } from '../util/CssPrefixUtils';\n\nvar Brush = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Brush, _Component);\n\n function Brush(props) {\n var _this;\n\n _classCallCheck(this, Brush);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Brush).call(this, props));\n\n _this.handleDrag = function (e) {\n if (_this.leaveTimer) {\n clearTimeout(_this.leaveTimer);\n _this.leaveTimer = null;\n }\n\n if (_this.state.isTravellerMoving) {\n _this.handleTravellerMove(e);\n } else if (_this.state.isSlideMoving) {\n _this.handleSlideDrag(e);\n }\n };\n\n _this.handleTouchMove = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleDrag(e.changedTouches[0]);\n }\n };\n\n _this.handleDragEnd = function () {\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: false\n });\n };\n\n _this.handleLeaveWrapper = function () {\n if (_this.state.isTravellerMoving || _this.state.isSlideMoving) {\n _this.leaveTimer = setTimeout(_this.handleDragEnd, _this.props.leaveTimeOut);\n }\n };\n\n _this.handleEnterSlideOrTraveller = function () {\n _this.setState({\n isTextActive: true\n });\n };\n\n _this.handleLeaveSlideOrTraveller = function () {\n _this.setState({\n isTextActive: false\n });\n };\n\n _this.handleSlideDragStart = function (e) {\n var event = e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: true,\n slideMoveStartX: event.pageX\n });\n };\n\n _this.travellerDragStartHandlers = {\n startX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_assertThisInitialized(_this)), 'startX'),\n endX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_assertThisInitialized(_this)), 'endX')\n };\n _this.state = props.data && props.data.length ? _this.updateScale(props) : {};\n return _this;\n }\n\n _createClass(Brush, [{\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var _this$props = this.props,\n data = _this$props.data,\n width = _this$props.width,\n x = _this$props.x,\n travellerWidth = _this$props.travellerWidth,\n updateId = _this$props.updateId;\n\n if ((nextProps.data !== data || nextProps.updateId !== updateId) && nextProps.data && nextProps.data.length) {\n this.setState(this.updateScale(nextProps));\n } else if (nextProps.width !== width || nextProps.x !== x || nextProps.travellerWidth !== travellerWidth) {\n this.scale.range([nextProps.x, nextProps.x + nextProps.width - nextProps.travellerWidth]);\n this.scaleValues = this.scale.domain().map(function (entry) {\n return _this2.scale(entry);\n });\n this.setState({\n startX: this.scale(nextProps.startIndex),\n endX: this.scale(nextProps.endIndex)\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.scale = null;\n this.scaleValues = null;\n\n if (this.leaveTimer) {\n clearTimeout(this.leaveTimer);\n this.leaveTimer = null;\n }\n }\n }, {\n key: \"getIndex\",\n value: function getIndex(_ref) {\n var startX = _ref.startX,\n endX = _ref.endX;\n var _this$props2 = this.props,\n gap = _this$props2.gap,\n data = _this$props2.data;\n var lastIndex = data.length - 1;\n var min = Math.min(startX, endX);\n var max = Math.max(startX, endX);\n var minIndex = this.constructor.getIndexInRange(this.scaleValues, min);\n var maxIndex = this.constructor.getIndexInRange(this.scaleValues, max);\n return {\n startIndex: minIndex - minIndex % gap,\n endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap\n };\n }\n }, {\n key: \"getTextOfTick\",\n value: function getTextOfTick(index) {\n var _this$props3 = this.props,\n data = _this$props3.data,\n tickFormatter = _this$props3.tickFormatter,\n dataKey = _this$props3.dataKey;\n var text = getValueByDataKey(data[index], dataKey, index);\n return _isFunction(tickFormatter) ? tickFormatter(text) : text;\n }\n }, {\n key: \"handleSlideDrag\",\n value: function handleSlideDrag(e) {\n var _this$state = this.state,\n slideMoveStartX = _this$state.slideMoveStartX,\n startX = _this$state.startX,\n endX = _this$state.endX;\n var _this$props4 = this.props,\n x = _this$props4.x,\n width = _this$props4.width,\n travellerWidth = _this$props4.travellerWidth,\n startIndex = _this$props4.startIndex,\n endIndex = _this$props4.endIndex,\n onChange = _this$props4.onChange;\n var delta = e.pageX - slideMoveStartX;\n\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);\n } else if (delta < 0) {\n delta = Math.max(delta, x - startX, x - endX);\n }\n\n var newIndex = this.getIndex({\n startX: startX + delta,\n endX: endX + delta\n });\n\n if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {\n onChange(newIndex);\n }\n\n this.setState({\n startX: startX + delta,\n endX: endX + delta,\n slideMoveStartX: e.pageX\n });\n }\n }, {\n key: \"handleTravellerDragStart\",\n value: function handleTravellerDragStart(id, e) {\n var event = e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n this.setState({\n isSlideMoving: false,\n isTravellerMoving: true,\n movingTravellerId: id,\n brushMoveStartX: event.pageX\n });\n }\n }, {\n key: \"handleTravellerMove\",\n value: function handleTravellerMove(e) {\n var _this$setState;\n\n var _this$state2 = this.state,\n brushMoveStartX = _this$state2.brushMoveStartX,\n movingTravellerId = _this$state2.movingTravellerId,\n endX = _this$state2.endX,\n startX = _this$state2.startX;\n var prevValue = this.state[movingTravellerId];\n var _this$props5 = this.props,\n x = _this$props5.x,\n width = _this$props5.width,\n travellerWidth = _this$props5.travellerWidth,\n onChange = _this$props5.onChange,\n gap = _this$props5.gap,\n data = _this$props5.data;\n var params = {\n startX: this.state.startX,\n endX: this.state.endX\n };\n var delta = e.pageX - brushMoveStartX;\n\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - prevValue);\n } else if (delta < 0) {\n delta = Math.max(delta, x - prevValue);\n }\n\n params[movingTravellerId] = prevValue + delta;\n var newIndex = this.getIndex(params);\n var startIndex = newIndex.startIndex,\n endIndex = newIndex.endIndex;\n\n var isFullGap = function isFullGap() {\n var lastIndex = data.length - 1;\n\n if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {\n return true;\n }\n\n return false;\n };\n\n this.setState((_this$setState = {}, _defineProperty(_this$setState, movingTravellerId, prevValue + delta), _defineProperty(_this$setState, \"brushMoveStartX\", e.pageX), _this$setState), function () {\n if (onChange) {\n if (isFullGap()) {\n onChange(newIndex);\n }\n }\n });\n }\n }, {\n key: \"updateScale\",\n value: function updateScale(props) {\n var _this3 = this;\n\n var data = props.data,\n startIndex = props.startIndex,\n endIndex = props.endIndex,\n x = props.x,\n width = props.width,\n travellerWidth = props.travellerWidth;\n var len = data.length;\n this.scale = scalePoint().domain(_range(0, len)).range([x, x + width - travellerWidth]);\n this.scaleValues = this.scale.domain().map(function (entry) {\n return _this3.scale(entry);\n });\n return {\n isTextActive: false,\n isSlideMoving: false,\n isTravellerMoving: false,\n startX: this.scale(startIndex),\n endX: this.scale(endIndex)\n };\n }\n }, {\n key: \"renderBackground\",\n value: function renderBackground() {\n var _this$props6 = this.props,\n x = _this$props6.x,\n y = _this$props6.y,\n width = _this$props6.width,\n height = _this$props6.height,\n fill = _this$props6.fill,\n stroke = _this$props6.stroke;\n return React.createElement(\"rect\", {\n stroke: stroke,\n fill: fill,\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n }, {\n key: \"renderPanorama\",\n value: function renderPanorama() {\n var _this$props7 = this.props,\n x = _this$props7.x,\n y = _this$props7.y,\n width = _this$props7.width,\n height = _this$props7.height,\n data = _this$props7.data,\n children = _this$props7.children,\n padding = _this$props7.padding;\n var chartElement = Children.only(children);\n\n if (!chartElement) {\n return null;\n }\n\n return React.cloneElement(chartElement, {\n x: x,\n y: y,\n width: width,\n height: height,\n margin: padding,\n compact: true,\n data: data\n });\n }\n }, {\n key: \"renderTraveller\",\n value: function renderTraveller(travellerX, id) {\n var _this$props8 = this.props,\n y = _this$props8.y,\n travellerWidth = _this$props8.travellerWidth,\n height = _this$props8.height,\n stroke = _this$props8.stroke;\n var lineY = Math.floor(y + height / 2) - 1;\n var x = Math.max(travellerX, this.props.x);\n return React.createElement(Layer, {\n className: \"recharts-brush-traveller\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.travellerDragStartHandlers[id],\n onTouchStart: this.travellerDragStartHandlers[id],\n style: {\n cursor: 'col-resize'\n }\n }, React.createElement(\"rect\", {\n x: x,\n y: y,\n width: travellerWidth,\n height: height,\n fill: stroke,\n stroke: \"none\"\n }), React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY,\n x2: x + travellerWidth - 1,\n y2: lineY,\n fill: \"none\",\n stroke: \"#fff\"\n }), React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY + 2,\n x2: x + travellerWidth - 1,\n y2: lineY + 2,\n fill: \"none\",\n stroke: \"#fff\"\n }));\n }\n }, {\n key: \"renderSlide\",\n value: function renderSlide(startX, endX) {\n var _this$props9 = this.props,\n y = _this$props9.y,\n height = _this$props9.height,\n stroke = _this$props9.stroke;\n return React.createElement(\"rect\", {\n className: \"recharts-brush-slide\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.handleSlideDragStart,\n onTouchStart: this.handleSlideDragStart,\n style: {\n cursor: 'move'\n },\n stroke: \"none\",\n fill: stroke,\n fillOpacity: 0.2,\n x: Math.min(startX, endX),\n y: y,\n width: Math.abs(endX - startX),\n height: height\n });\n }\n }, {\n key: \"renderText\",\n value: function renderText() {\n var _this$props10 = this.props,\n startIndex = _this$props10.startIndex,\n endIndex = _this$props10.endIndex,\n y = _this$props10.y,\n height = _this$props10.height,\n travellerWidth = _this$props10.travellerWidth,\n stroke = _this$props10.stroke;\n var _this$state3 = this.state,\n startX = _this$state3.startX,\n endX = _this$state3.endX;\n var offset = 5;\n var attrs = {\n pointerEvents: 'none',\n fill: stroke\n };\n return React.createElement(Layer, {\n className: \"recharts-brush-texts\"\n }, React.createElement(Text, _extends({\n textAnchor: \"end\",\n verticalAnchor: \"middle\",\n x: Math.min(startX, endX) - offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(startIndex)), React.createElement(Text, _extends({\n textAnchor: \"start\",\n verticalAnchor: \"middle\",\n x: Math.max(startX, endX) + travellerWidth + offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(endIndex)));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props11 = this.props,\n data = _this$props11.data,\n className = _this$props11.className,\n children = _this$props11.children,\n x = _this$props11.x,\n y = _this$props11.y,\n width = _this$props11.width,\n height = _this$props11.height;\n var _this$state4 = this.state,\n startX = _this$state4.startX,\n endX = _this$state4.endX,\n isTextActive = _this$state4.isTextActive,\n isSlideMoving = _this$state4.isSlideMoving,\n isTravellerMoving = _this$state4.isTravellerMoving;\n\n if (!data || !data.length || !isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n var layerClass = classNames('recharts-brush', className);\n var isPanoramic = React.Children.count(children) === 1;\n var style = generatePrefixStyle('userSelect', 'none');\n return React.createElement(Layer, {\n className: layerClass,\n onMouseMove: this.handleDrag,\n onMouseLeave: this.handleLeaveWrapper,\n onMouseUp: this.handleDragEnd,\n onTouchEnd: this.handleDragEnd,\n onTouchMove: this.handleTouchMove,\n style: style\n }, this.renderBackground(), isPanoramic && this.renderPanorama(), this.renderSlide(startX, endX), this.renderTraveller(startX, 'startX'), this.renderTraveller(endX, 'endX'), (isTextActive || isSlideMoving || isTravellerMoving) && this.renderText());\n }\n }], [{\n key: \"getIndexInRange\",\n value: function getIndexInRange(range, x) {\n var len = range.length;\n var start = 0;\n var end = len - 1;\n\n while (end - start > 1) {\n var middle = Math.floor((start + end) / 2);\n\n if (range[middle] > x) {\n end = middle;\n } else {\n start = middle;\n }\n }\n\n return x >= range[end] ? end : start;\n }\n }]);\n\n return Brush;\n}(Component), _class2.displayName = 'Brush', _class2.propTypes = {\n className: PropTypes.string,\n fill: PropTypes.string,\n stroke: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number.isRequired,\n travellerWidth: PropTypes.number,\n gap: PropTypes.number,\n padding: PropTypes.shape({\n top: PropTypes.number,\n right: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number\n }),\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n data: PropTypes.array,\n startIndex: PropTypes.number,\n endIndex: PropTypes.number,\n tickFormatter: PropTypes.func,\n children: PropTypes.node,\n onChange: PropTypes.func,\n updateId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n leaveTimeOut: PropTypes.number\n}, _class2.defaultProps = {\n height: 40,\n travellerWidth: 5,\n gap: 1,\n fill: '#fff',\n stroke: '#666',\n padding: {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n },\n leaveTimeOut: 1000\n}, _temp)) || _class;\n\nexport default Brush;", + "import _isFunction from \"lodash/isFunction\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Cartesian Axis\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { shallowEqual } from '../util/PureRender';\nimport { getStringSize } from '../util/DOMUtils';\nimport Layer from '../container/Layer';\nimport Text from '../component/Text';\nimport Label from '../component/Label';\nimport { isSsr, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventsOfChild } from '../util/ReactUtils';\nimport { isNumber, mathSign } from '../util/DataUtils';\n\nvar CartesianAxis =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(CartesianAxis, _Component);\n\n function CartesianAxis() {\n _classCallCheck(this, CartesianAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(CartesianAxis).apply(this, arguments));\n }\n\n _createClass(CartesianAxis, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(_ref, state) {\n var viewBox = _ref.viewBox,\n restProps = _objectWithoutProperties(_ref, [\"viewBox\"]);\n\n // props.viewBox is sometimes generated every time -\n // check that specially as object equality is likely to fail\n var _this$props = this.props,\n viewBoxOld = _this$props.viewBox,\n restPropsOld = _objectWithoutProperties(_this$props, [\"viewBox\"]);\n\n return !shallowEqual(viewBox, viewBoxOld) || !shallowEqual(restProps, restPropsOld) || !shallowEqual(state, this.state);\n }\n /**\n * Calculate the coordinates of endpoints in ticks\n * @param {Object} data The data of a simple tick\n * @return {Object} (x1, y1): The coordinate of endpoint close to tick text\n * (x2, y2): The coordinate of endpoint close to axis\n */\n\n }, {\n key: \"getTickLineCoord\",\n value: function getTickLineCoord(data) {\n var _this$props2 = this.props,\n x = _this$props2.x,\n y = _this$props2.y,\n width = _this$props2.width,\n height = _this$props2.height,\n orientation = _this$props2.orientation,\n tickSize = _this$props2.tickSize,\n mirror = _this$props2.mirror,\n tickMargin = _this$props2.tickMargin;\n var x1, x2, y1, y2, tx, ty;\n var sign = mirror ? -1 : 1;\n var finalTickSize = data.tickSize || tickSize;\n var tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;\n\n switch (orientation) {\n case 'top':\n x1 = x2 = data.coordinate;\n y2 = y + !mirror * height;\n y1 = y2 - sign * finalTickSize;\n ty = y1 - sign * tickMargin;\n tx = tickCoord;\n break;\n\n case 'left':\n y1 = y2 = data.coordinate;\n x2 = x + !mirror * width;\n x1 = x2 - sign * finalTickSize;\n tx = x1 - sign * tickMargin;\n ty = tickCoord;\n break;\n\n case 'right':\n y1 = y2 = data.coordinate;\n x2 = x + mirror * width;\n x1 = x2 + sign * finalTickSize;\n tx = x1 + sign * tickMargin;\n ty = tickCoord;\n break;\n\n default:\n x1 = x2 = data.coordinate;\n y2 = y + mirror * height;\n y1 = y2 + sign * finalTickSize;\n ty = y1 + sign * tickMargin;\n tx = tickCoord;\n break;\n }\n\n return {\n line: {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n },\n tick: {\n x: tx,\n y: ty\n }\n };\n }\n }, {\n key: \"getTickTextAnchor\",\n value: function getTickTextAnchor() {\n var _this$props3 = this.props,\n orientation = _this$props3.orientation,\n mirror = _this$props3.mirror;\n var textAnchor;\n\n switch (orientation) {\n case 'left':\n textAnchor = mirror ? 'start' : 'end';\n break;\n\n case 'right':\n textAnchor = mirror ? 'end' : 'start';\n break;\n\n default:\n textAnchor = 'middle';\n break;\n }\n\n return textAnchor;\n }\n }, {\n key: \"getTickVerticalAnchor\",\n value: function getTickVerticalAnchor() {\n var _this$props4 = this.props,\n orientation = _this$props4.orientation,\n mirror = _this$props4.mirror;\n var verticalAnchor = 'end';\n\n switch (orientation) {\n case 'left':\n case 'right':\n verticalAnchor = 'middle';\n break;\n\n case 'top':\n verticalAnchor = mirror ? 'start' : 'end';\n break;\n\n default:\n verticalAnchor = mirror ? 'end' : 'start';\n break;\n }\n\n return verticalAnchor;\n }\n }, {\n key: \"renderAxisLine\",\n value: function renderAxisLine() {\n var _this$props5 = this.props,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height,\n orientation = _this$props5.orientation,\n axisLine = _this$props5.axisLine,\n mirror = _this$props5.mirror;\n\n var props = _objectSpread({}, getPresentationAttributes(this.props), {\n fill: 'none'\n }, getPresentationAttributes(axisLine));\n\n if (orientation === 'top' || orientation === 'bottom') {\n var needHeight = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n props = _objectSpread({}, props, {\n x1: x,\n y1: y + needHeight * height,\n x2: x + width,\n y2: y + needHeight * height\n });\n } else {\n var needWidth = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n props = _objectSpread({}, props, {\n x1: x + needWidth * width,\n y1: y,\n x2: x + needWidth * width,\n y2: y + height\n });\n }\n\n return React.createElement(\"line\", _extends({\n className: \"recharts-cartesian-axis-line\"\n }, props));\n }\n }, {\n key: \"renderTicks\",\n\n /**\n * render the ticks\n * @param {Array} ticks The ticks to actually render (overrides what was passed in props)\n * @return {ReactComponent} renderedTicks\n */\n value: function renderTicks(ticks) {\n var _this = this;\n\n var _this$props6 = this.props,\n tickLine = _this$props6.tickLine,\n stroke = _this$props6.stroke,\n tick = _this$props6.tick,\n tickFormatter = _this$props6.tickFormatter,\n unit = _this$props6.unit;\n var finalTicks = CartesianAxis.getTicks(_objectSpread({}, this.props, {\n ticks: ticks\n }));\n var textAnchor = this.getTickTextAnchor();\n var verticalAnchor = this.getTickVerticalAnchor();\n var axisProps = getPresentationAttributes(this.props);\n var customTickProps = getPresentationAttributes(tick);\n\n var tickLineProps = _objectSpread({}, axisProps, {\n fill: 'none'\n }, getPresentationAttributes(tickLine));\n\n var items = finalTicks.map(function (entry, i) {\n var _this$getTickLineCoor = _this.getTickLineCoord(entry),\n lineCoord = _this$getTickLineCoor.line,\n tickCoord = _this$getTickLineCoor.tick;\n\n var tickProps = _objectSpread({\n textAnchor: textAnchor,\n verticalAnchor: verticalAnchor\n }, axisProps, {\n stroke: 'none',\n fill: stroke\n }, customTickProps, tickCoord, {\n index: i,\n payload: entry,\n visibleTicksCount: finalTicks.length\n });\n\n return React.createElement(Layer, _extends({\n className: \"recharts-cartesian-axis-tick\",\n key: \"tick-\".concat(i)\n }, filterEventsOfChild(_this.props, entry, i)), tickLine && React.createElement(\"line\", _extends({\n className: \"recharts-cartesian-axis-tick-line\"\n }, tickLineProps, lineCoord)), tick && _this.constructor.renderTickItem(tick, tickProps, \"\".concat(_isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value).concat(unit || '')));\n });\n return React.createElement(\"g\", {\n className: \"recharts-cartesian-axis-ticks\"\n }, items);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props7 = this.props,\n axisLine = _this$props7.axisLine,\n width = _this$props7.width,\n height = _this$props7.height,\n ticksGenerator = _this$props7.ticksGenerator,\n className = _this$props7.className,\n hide = _this$props7.hide;\n\n if (hide) {\n return null;\n }\n\n var _this$props8 = this.props,\n ticks = _this$props8.ticks,\n noTicksProps = _objectWithoutProperties(_this$props8, [\"ticks\"]);\n\n var finalTicks = ticks;\n\n if (_isFunction(ticksGenerator)) {\n finalTicks = ticks && ticks.length > 0 ? ticksGenerator(this.props) : ticksGenerator(noTicksProps);\n }\n\n if (width <= 0 || height <= 0 || !finalTicks || !finalTicks.length) {\n return null;\n }\n\n return React.createElement(Layer, {\n className: classNames('recharts-cartesian-axis', className)\n }, axisLine && this.renderAxisLine(), this.renderTicks(finalTicks), Label.renderCallByParent(this.props));\n }\n }], [{\n key: \"getTicks\",\n value: function getTicks(props) {\n var tick = props.tick,\n ticks = props.ticks,\n viewBox = props.viewBox,\n minTickGap = props.minTickGap,\n orientation = props.orientation,\n interval = props.interval,\n tickFormatter = props.tickFormatter,\n unit = props.unit;\n\n if (!ticks || !ticks.length || !tick) {\n return [];\n }\n\n if (isNumber(interval) || isSsr()) {\n return CartesianAxis.getNumberIntervalTicks(ticks, isNumber(interval) ? interval : 0);\n }\n\n if (interval === 'preserveStartEnd') {\n return CartesianAxis.getTicksStart({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n }, true);\n }\n\n if (interval === 'preserveStart') {\n return CartesianAxis.getTicksStart({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n });\n }\n\n return CartesianAxis.getTicksEnd({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n });\n }\n }, {\n key: \"getNumberIntervalTicks\",\n value: function getNumberIntervalTicks(ticks, interval) {\n return ticks.filter(function (entry, i) {\n return i % (interval + 1) === 0;\n });\n }\n }, {\n key: \"getTicksStart\",\n value: function getTicksStart(_ref2, preserveEnd) {\n var ticks = _ref2.ticks,\n tickFormatter = _ref2.tickFormatter,\n viewBox = _ref2.viewBox,\n orientation = _ref2.orientation,\n minTickGap = _ref2.minTickGap,\n unit = _ref2.unit;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';\n var result = (ticks || []).slice(); // we need add the width of 'unit' only when sizeKey === 'width'\n\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit)[sizeKey] : 0;\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n\n if (preserveEnd) {\n // Try to guarantee the tail to be displayed\n var tail = ticks[len - 1];\n var tailContent = _isFunction(tickFormatter) ? tickFormatter(tail.value) : tail.value;\n var tailSize = getStringSize(tailContent)[sizeKey] + unitSize;\n var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);\n result[len - 1] = tail = _objectSpread({}, tail, {\n tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate\n });\n var isTailShow = sign * (tail.tickCoord - sign * tailSize / 2 - start) >= 0 && sign * (tail.tickCoord + sign * tailSize / 2 - end) <= 0;\n\n if (isTailShow) {\n end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);\n result[len - 1] = _objectSpread({}, tail, {\n isShow: true\n });\n }\n }\n\n var count = preserveEnd ? len - 1 : len;\n\n for (var i = 0; i < count; i++) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value;\n var size = getStringSize(content)[sizeKey] + unitSize;\n\n if (i === 0) {\n var gap = sign * (entry.coordinate - sign * size / 2 - start);\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: entry.coordinate\n });\n }\n\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n\n if (isShow) {\n start = entry.tickCoord + sign * (size / 2 + minTickGap);\n result[i] = _objectSpread({}, entry, {\n isShow: true\n });\n }\n }\n\n return result.filter(function (entry) {\n return entry.isShow;\n });\n }\n }, {\n key: \"getTicksEnd\",\n value: function getTicksEnd(_ref3) {\n var ticks = _ref3.ticks,\n tickFormatter = _ref3.tickFormatter,\n viewBox = _ref3.viewBox,\n orientation = _ref3.orientation,\n minTickGap = _ref3.minTickGap,\n unit = _ref3.unit;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height'; // we need add the width of 'unit' only when sizeKey === 'width'\n\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit)[sizeKey] : 0;\n var result = (ticks || []).slice();\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n\n for (var i = len - 1; i >= 0; i--) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value;\n var size = getStringSize(content)[sizeKey] + unitSize;\n\n if (i === len - 1) {\n var gap = sign * (entry.coordinate + sign * size / 2 - end);\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: entry.coordinate\n });\n }\n\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n\n if (isShow) {\n end = entry.tickCoord - sign * (size / 2 + minTickGap);\n result[i] = _objectSpread({}, entry, {\n isShow: true\n });\n }\n }\n\n return result.filter(function (entry) {\n return entry.isShow;\n });\n }\n }, {\n key: \"renderTickItem\",\n value: function renderTickItem(option, props, value) {\n var tickItem;\n\n if (React.isValidElement(option)) {\n tickItem = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n tickItem = option(props);\n } else {\n tickItem = React.createElement(Text, _extends({}, props, {\n className: \"recharts-cartesian-axis-tick-value\"\n }), value);\n }\n\n return tickItem;\n }\n }]);\n\n return CartesianAxis;\n}(Component);\n\nCartesianAxis.displayName = 'CartesianAxis';\nCartesianAxis.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n orientation: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),\n // The viewBox of svg\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n mirror: PropTypes.bool,\n tickMargin: PropTypes.number.isRequired,\n minTickGap: PropTypes.number,\n ticks: PropTypes.array,\n tickSize: PropTypes.number,\n stroke: PropTypes.string,\n tickFormatter: PropTypes.func,\n ticksGenerator: PropTypes.func,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])])\n});\nCartesianAxis.defaultProps = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n viewBox: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n // The orientation of axis\n orientation: 'bottom',\n // The ticks\n ticks: [],\n stroke: '#666',\n tickLine: true,\n axisLine: true,\n tick: true,\n mirror: false,\n minTickGap: 5,\n // The width or height of tick\n tickSize: 6,\n tickMargin: 2,\n interval: 'preserveEnd'\n};\nexport default CartesianAxis;", + "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Render a group of error bar\n*/\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Layer from '../container/Layer';\nimport { getPresentationAttributes } from '../util/ReactUtils';\n\nvar ErrorBar =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ErrorBar, _Component);\n\n function ErrorBar() {\n _classCallCheck(this, ErrorBar);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ErrorBar).apply(this, arguments));\n }\n\n _createClass(ErrorBar, [{\n key: \"renderErrorBars\",\n value: function renderErrorBars() {\n var _this$props = this.props,\n offset = _this$props.offset,\n layout = _this$props.layout,\n width = _this$props.width,\n dataKey = _this$props.dataKey,\n data = _this$props.data,\n dataPointFormatter = _this$props.dataPointFormatter,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis,\n others = _objectWithoutProperties(_this$props, [\"offset\", \"layout\", \"width\", \"dataKey\", \"data\", \"dataPointFormatter\", \"xAxis\", \"yAxis\"]);\n\n var props = getPresentationAttributes(others);\n return data.map(function (entry, i) {\n var _dataPointFormatter = dataPointFormatter(entry, dataKey),\n x = _dataPointFormatter.x,\n y = _dataPointFormatter.y,\n value = _dataPointFormatter.value,\n errorVal = _dataPointFormatter.errorVal;\n\n if (!errorVal) {\n return null;\n }\n\n var xMid, yMid, xMin, yMin, xMax, yMax, scale, coordsTop, coordsMid, coordsBot, lowBound, highBound;\n\n if (Array.isArray(errorVal)) {\n var _errorVal = _slicedToArray(errorVal, 2);\n\n lowBound = _errorVal[0];\n highBound = _errorVal[1];\n } else {\n lowBound = highBound = errorVal;\n }\n\n if (layout === 'vertical') {\n scale = xAxis.scale;\n xMid = value;\n yMid = y + offset;\n xMin = scale(xMid - lowBound);\n yMin = yMid + width;\n xMax = scale(xMid + highBound);\n yMax = yMid - width;\n coordsTop = {\n x1: xMax,\n y1: yMin,\n x2: xMax,\n y2: yMax\n };\n coordsMid = {\n x1: xMin,\n y1: yMid,\n x2: xMax,\n y2: yMid\n };\n coordsBot = {\n x1: xMin,\n y1: yMin,\n x2: xMin,\n y2: yMax\n };\n } else if (layout === 'horizontal') {\n scale = yAxis.scale;\n xMid = x + offset;\n yMid = value;\n xMin = xMid - width;\n xMax = xMid + width;\n yMin = scale(yMid - lowBound);\n yMax = scale(yMid + highBound);\n coordsTop = {\n x1: xMin,\n y1: yMax,\n x2: xMax,\n y2: yMax\n };\n coordsMid = {\n x1: xMid,\n y1: yMin,\n x2: xMid,\n y2: yMax\n };\n coordsBot = {\n x1: xMin,\n y1: yMin,\n x2: xMax,\n y2: yMin\n };\n }\n\n return React.createElement(Layer, _extends({\n className: \"recharts-errorBar\",\n key: \"bar-\".concat(i)\n }, props), React.createElement(\"line\", coordsTop), React.createElement(\"line\", coordsMid), React.createElement(\"line\", coordsBot));\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n return React.createElement(Layer, {\n className: \"recharts-errorBars\"\n }, this.renderErrorBars());\n }\n }]);\n\n return ErrorBar;\n}(Component);\n\nErrorBar.propTypes = {\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,\n data: PropTypes.array,\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n layout: PropTypes.string,\n dataPointFormatter: PropTypes.func,\n stroke: PropTypes.string,\n strokeWidth: PropTypes.number,\n width: PropTypes.number,\n offset: PropTypes.number\n};\nErrorBar.defaultProps = {\n stroke: 'black',\n strokeWidth: 1.5,\n width: 5,\n offset: 0,\n layout: 'horizontal'\n};\nexport default ErrorBar;", + "import _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Reference Line\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Label from '../component/Label';\nimport { LabeledScaleHelper, rectWithPoints } from '../util/CartesianUtils';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { PRESENTATION_ATTRIBUTES } from '../util/ReactUtils';\nimport Rectangle from '../shape/Rectangle';\n\nvar ReferenceArea = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceArea, _Component);\n\n function ReferenceArea() {\n _classCallCheck(this, ReferenceArea);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceArea).apply(this, arguments));\n }\n\n _createClass(ReferenceArea, [{\n key: \"getRect\",\n value: function getRect(hasX1, hasX2, hasY1, hasY2) {\n var _this$props = this.props,\n xValue1 = _this$props.x1,\n xValue2 = _this$props.x2,\n yValue1 = _this$props.y1,\n yValue2 = _this$props.y2,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis;\n var scale = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var p1 = {\n x: hasX1 ? scale.x.apply(xValue1) : scale.x.rangeMin,\n y: hasY1 ? scale.y.apply(yValue1) : scale.y.rangeMin\n };\n var p2 = {\n x: hasX2 ? scale.x.apply(xValue2) : scale.x.rangeMax,\n y: hasY2 ? scale.y.apply(yValue2) : scale.y.rangeMax\n };\n\n if (ifOverflowMatches(this.props, 'discard') && (!scale.isInRange(p1) || !scale.isInRange(p2))) {\n return null;\n }\n\n return rectWithPoints(p1, p2);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n x1 = _this$props2.x1,\n x2 = _this$props2.x2,\n y1 = _this$props2.y1,\n y2 = _this$props2.y2,\n className = _this$props2.className,\n alwaysShow = _this$props2.alwaysShow,\n clipPathId = _this$props2.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var hasX1 = isNumOrStr(x1);\n var hasX2 = isNumOrStr(x2);\n var hasY1 = isNumOrStr(y1);\n var hasY2 = isNumOrStr(y2);\n\n if (!hasX1 && !hasX2 && !hasY1 && !hasY2) {\n return null;\n }\n\n var rect = this.getRect(hasX1, hasX2, hasY1, hasY2);\n\n if (!rect) {\n return null;\n }\n\n var shape = this.props.shape;\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n return React.createElement(Layer, {\n className: classNames('recharts-reference-area', className)\n }, this.constructor.renderRect(shape, _objectSpread({\n clipPath: clipPath\n }, this.props, rect)), Label.renderCallByParent(this.props, rect));\n }\n }], [{\n key: \"renderRect\",\n value: function renderRect(option, props) {\n var rect;\n\n if (React.isValidElement(option)) {\n rect = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n rect = option(props);\n } else {\n rect = React.createElement(Rectangle, _extends({}, props, {\n className: \"recharts-reference-area-rect\"\n }));\n }\n\n return rect;\n }\n }]);\n\n return ReferenceArea;\n}(Component), _class2.displayName = 'ReferenceArea', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x1: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n x2: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y1: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y2: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.oneOfType([PropTypes.func, PropTypes.element])\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#ccc',\n fillOpacity: 0.5,\n stroke: 'none',\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceArea;", + "import _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Reference Dot\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Dot from '../shape/Dot';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport Label from '../component/Label';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { LabeledScaleHelper } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\n\nvar ReferenceDot = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceDot, _Component);\n\n function ReferenceDot() {\n _classCallCheck(this, ReferenceDot);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceDot).apply(this, arguments));\n }\n\n _createClass(ReferenceDot, [{\n key: \"getCoordinate\",\n value: function getCoordinate() {\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis;\n var scales = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var result = scales.apply({\n x: x,\n y: y\n }, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.isInRange(result)) {\n return null;\n }\n\n return result;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n x = _this$props2.x,\n y = _this$props2.y,\n r = _this$props2.r,\n alwaysShow = _this$props2.alwaysShow,\n clipPathId = _this$props2.clipPathId;\n var isX = isNumOrStr(x);\n var isY = isNumOrStr(y);\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n\n if (!isX || !isY) {\n return null;\n }\n\n var coordinate = this.getCoordinate();\n\n if (!coordinate) {\n return null;\n }\n\n var cx = coordinate.x,\n cy = coordinate.y;\n var _this$props3 = this.props,\n shape = _this$props3.shape,\n className = _this$props3.className;\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n\n var dotProps = _objectSpread({\n clipPath: clipPath\n }, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n cx: cx,\n cy: cy\n });\n\n return React.createElement(Layer, {\n className: classNames('recharts-reference-dot', className)\n }, this.constructor.renderDot(shape, dotProps), Label.renderCallByParent(this.props, {\n x: cx - r,\n y: cy - r,\n width: 2 * r,\n height: 2 * r\n }));\n }\n }], [{\n key: \"renderDot\",\n value: function renderDot(option, props) {\n var dot;\n\n if (React.isValidElement(option)) {\n dot = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = React.createElement(Dot, _extends({}, props, {\n cx: props.cx,\n cy: props.cy,\n className: \"recharts-reference-dot-dot\"\n }));\n }\n\n return dot;\n }\n }]);\n\n return ReferenceDot;\n}(Component), _class2.displayName = 'ReferenceDot', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n r: PropTypes.number,\n xAxis: PropTypes.shape({\n scale: PropTypes.func\n }),\n yAxis: PropTypes.shape({\n scale: PropTypes.func\n }),\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\n clipPathId: PropTypes.string\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#fff',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceDot;", + "import _some from \"lodash/some\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/**\n * @fileOverview Reference Line\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport Label from '../component/Label';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { LabeledScaleHelper, rectWithCoords } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\n\nvar renderLine = function renderLine(option, props) {\n var line;\n\n if (React.isValidElement(option)) {\n line = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n line = option(props);\n } else {\n line = React.createElement(\"line\", _extends({}, props, {\n className: \"recharts-reference-line-line\"\n }));\n }\n\n return line;\n};\n\nvar ReferenceLine = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceLine, _Component);\n\n function ReferenceLine() {\n _classCallCheck(this, ReferenceLine);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceLine).apply(this, arguments));\n }\n\n _createClass(ReferenceLine, [{\n key: \"getEndPoints\",\n value: function getEndPoints(scales, isFixedX, isFixedY, isSegment) {\n var _this$props$viewBox = this.props.viewBox,\n x = _this$props$viewBox.x,\n y = _this$props$viewBox.y,\n width = _this$props$viewBox.width,\n height = _this$props$viewBox.height;\n\n if (isFixedY) {\n var _this$props = this.props,\n yCoord = _this$props.y,\n orientation = _this$props.yAxis.orientation;\n var coord = scales.y.apply(yCoord, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.y.isInRange(coord)) {\n return null;\n }\n\n var points = [{\n x: x + width,\n y: coord\n }, {\n x: x,\n y: coord\n }];\n return orientation === 'left' ? points.reverse() : points;\n }\n\n if (isFixedX) {\n var _this$props2 = this.props,\n xCoord = _this$props2.x,\n _orientation = _this$props2.xAxis.orientation;\n\n var _coord = scales.x.apply(xCoord, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.x.isInRange(_coord)) {\n return null;\n }\n\n var _points = [{\n x: _coord,\n y: y + height\n }, {\n x: _coord,\n y: y\n }];\n return _orientation === 'top' ? _points.reverse() : _points;\n }\n\n if (isSegment) {\n var segment = this.props.segment;\n\n var _points2 = segment.map(function (p) {\n return scales.apply(p, {\n bandAware: true\n });\n });\n\n if (ifOverflowMatches(this.props, 'discard') && _some(_points2, function (p) {\n return !scales.isInRange(p);\n })) {\n return null;\n }\n\n return _points2;\n }\n\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n fixedX = _this$props3.x,\n fixedY = _this$props3.y,\n segment = _this$props3.segment,\n xAxis = _this$props3.xAxis,\n yAxis = _this$props3.yAxis,\n shape = _this$props3.shape,\n className = _this$props3.className,\n alwaysShow = _this$props3.alwaysShow,\n clipPathId = _this$props3.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var scales = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var isX = isNumOrStr(fixedX);\n var isY = isNumOrStr(fixedY);\n var isSegment = segment && segment.length === 2;\n var endPoints = this.getEndPoints(scales, isX, isY, isSegment);\n\n if (!endPoints) {\n return null;\n }\n\n var _endPoints = _slicedToArray(endPoints, 2),\n _endPoints$ = _endPoints[0],\n x1 = _endPoints$.x,\n y1 = _endPoints$.y,\n _endPoints$2 = _endPoints[1],\n x2 = _endPoints$2.x,\n y2 = _endPoints$2.y;\n\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n\n var props = _objectSpread({\n clipPath: clipPath\n }, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n\n return React.createElement(Layer, {\n className: classNames('recharts-reference-line', className)\n }, renderLine(shape, props), Label.renderCallByParent(this.props, rectWithCoords({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n })));\n }\n }]);\n\n return ReferenceLine;\n}(Component), _class2.displayName = 'ReferenceLine', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n segment: PropTypes.arrayOf(PropTypes.shape({\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n })),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.func\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n fill: 'none',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceLine;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview X Axis\n */\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\nimport { SCALE_TYPES } from '../util/ReactUtils';\n\nvar XAxis = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(XAxis, _Component);\n\n function XAxis() {\n _classCallCheck(this, XAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(XAxis).apply(this, arguments));\n }\n\n _createClass(XAxis, [{\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return XAxis;\n}(Component), _class2.displayName = 'XAxis', _class2.propTypes = {\n allowDecimals: PropTypes.bool,\n allowDuplicatedCategory: PropTypes.bool,\n hide: PropTypes.bool,\n // The name of data displayed in the axis\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unit of data displayed in the axis\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unique id of x-axis\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n domain: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func, PropTypes.oneOf(['auto', 'dataMin', 'dataMax'])])),\n // The key of data displayed in the axis\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n // The width of axis which is usually calculated internally\n width: PropTypes.number,\n // The height of axis, which need to be setted by user\n height: PropTypes.number,\n mirror: PropTypes.bool,\n // The orientation of axis\n orientation: PropTypes.oneOf(['top', 'bottom']),\n type: PropTypes.oneOf(['number', 'category']),\n // Ticks can be any type when the axis is the type of category\n // Ticks must be numbers when the axis is the type of number\n ticks: PropTypes.array,\n // The count of ticks\n tickCount: PropTypes.number,\n // The formatter function of tick\n tickFormatter: PropTypes.func,\n padding: PropTypes.shape({\n left: PropTypes.number,\n right: PropTypes.number\n }),\n allowDataOverflow: PropTypes.bool,\n scale: PropTypes.oneOfType([PropTypes.oneOf(SCALE_TYPES), PropTypes.func]),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n minTickGap: PropTypes.number,\n tickSize: PropTypes.number,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])]),\n reversed: PropTypes.bool\n}, _class2.defaultProps = {\n allowDecimals: true,\n hide: false,\n orientation: 'bottom',\n width: 0,\n height: 30,\n mirror: false,\n xAxisId: 0,\n tickCount: 5,\n type: 'category',\n domain: [0, 'auto'],\n padding: {\n left: 0,\n right: 0\n },\n allowDataOverflow: false,\n scale: 'auto',\n reversed: false,\n allowDuplicatedCategory: true\n}, _temp)) || _class;\n\nexport default XAxis;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Y Axis\n */\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\n\nvar YAxis = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(YAxis, _Component);\n\n function YAxis() {\n _classCallCheck(this, YAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(YAxis).apply(this, arguments));\n }\n\n _createClass(YAxis, [{\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return YAxis;\n}(Component), _class2.displayName = 'YAxis', _class2.propTypes = {\n allowDecimals: PropTypes.bool,\n allowDuplicatedCategory: PropTypes.bool,\n hide: PropTypes.bool,\n // The name of data displayed in the axis\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unit of data displayed in the axis\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unique id of y-axis\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n domain: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func, PropTypes.oneOf(['auto', 'dataMin', 'dataMax'])])),\n // The key of data displayed in the axis\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n // Ticks can be any type when the axis is the type of category\n // Ticks must be numbers when the axis is the type of number\n ticks: PropTypes.array,\n // The count of ticks\n tickCount: PropTypes.number,\n // The formatter function of tick\n tickFormatter: PropTypes.func,\n // The width of axis, which need to be setted by user\n width: PropTypes.number,\n // The height of axis which is usually calculated in Chart\n height: PropTypes.number,\n mirror: PropTypes.bool,\n // The orientation of axis\n orientation: PropTypes.oneOf(['left', 'right']),\n type: PropTypes.oneOf(['number', 'category']),\n padding: PropTypes.shape({\n top: PropTypes.number,\n bottom: PropTypes.number\n }),\n allowDataOverflow: PropTypes.bool,\n scale: PropTypes.oneOfType([PropTypes.oneOf(['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold']), PropTypes.func]),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n minTickGap: PropTypes.number,\n tickSize: PropTypes.number,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])]),\n reversed: PropTypes.bool\n}, _class2.defaultProps = {\n allowDuplicatedCategory: true,\n allowDecimals: true,\n hide: false,\n orientation: 'left',\n width: 60,\n height: 0,\n mirror: false,\n yAxisId: 0,\n tickCount: 5,\n type: 'number',\n domain: [0, 'auto'],\n padding: {\n top: 0,\n bottom: 0\n },\n allowDataOverflow: false,\n scale: 'auto',\n reversed: false\n}, _temp)) || _class;\n\nexport default YAxis;", + "import EventEmitter from 'events';\nvar eventCenter = new EventEmitter();\n\nif (eventCenter.setMaxListeners) {\n eventCenter.setMaxListeners(10);\n}\n\nexport { eventCenter };\nexport var SYNC_EVENT = 'recharts.syncMouseEvents';", + "import _every from \"lodash/every\";\nimport _find from \"lodash/find\";\nimport _sortBy from \"lodash/sortBy\";\nimport _isFunction from \"lodash/isFunction\";\nimport _range from \"lodash/range\";\nimport _throttle from \"lodash/throttle\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nimport React, { Component, cloneElement, isValidElement, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Surface from '../container/Surface';\nimport Layer from '../container/Layer';\nimport Tooltip from '../component/Tooltip';\nimport Legend from '../component/Legend';\nimport Curve from '../shape/Curve';\nimport Cross from '../shape/Cross';\nimport Sector from '../shape/Sector';\nimport Dot from '../shape/Dot';\nimport Rectangle from '../shape/Rectangle';\nimport { findAllByType, findChildByType, getDisplayName, parseChildIndex, getPresentationAttributes, validateWidthHeight, isChildrenEqual, renderByOrder, getReactEventByType, filterEventAttributes } from '../util/ReactUtils';\nimport CartesianAxis from '../cartesian/CartesianAxis';\nimport Brush from '../cartesian/Brush';\nimport { getOffset, calculateChartCoordinate } from '../util/DOMUtils';\nimport { getAnyElementOfObject, hasDuplicate, uniqueId, isNumber, findEntryInArray } from '../util/DataUtils';\nimport { calculateActiveTickIndex, getMainColorOfGraphicItem, getBarSizeList, getBarPosition, appendOffsetOfLegend, getLegendProps, combineEventHandlers, getTicksOfAxis, getCoordinatesOfGrid, getStackedDataOfItem, parseErrorBarsOfAxis, getBandSizeOfAxis, getStackGroupsByAxisId, getValueByDataKey, isCategorialAxis, getDomainOfItemsWithSameAxis, getDomainOfStackGroups, getDomainOfDataByKey, detectReferenceElementsDomain, parseSpecifiedDomain, parseDomainOfCategoryAxis } from '../util/ChartUtils';\nimport { inRangeOfSector, polarToCartesian } from '../util/PolarUtils';\nimport { shallowEqual } from '../util/PureRender';\nimport { eventCenter, SYNC_EVENT } from '../util/Events';\nvar ORIENT_MAP = {\n xAxis: ['bottom', 'top'],\n yAxis: ['left', 'right']\n};\nvar originCoordinate = {\n x: 0,\n y: 0\n};\n\nvar generateCategoricalChart = function generateCategoricalChart(_ref) {\n var chartName = _ref.chartName,\n GraphicalChild = _ref.GraphicalChild,\n _ref$eventType = _ref.eventType,\n eventType = _ref$eventType === void 0 ? 'axis' : _ref$eventType,\n axisComponents = _ref.axisComponents,\n legendContent = _ref.legendContent,\n formatAxisMap = _ref.formatAxisMap,\n defaultProps = _ref.defaultProps,\n propTypes = _ref.propTypes;\n\n var CategoricalChartWrapper =\n /*#__PURE__*/\n function (_Component) {\n _inherits(CategoricalChartWrapper, _Component);\n\n /**\n * Returns default, reset state for the categorical chart.\n * @param {Object} props Props object to use when creating the default state\n * @return {Object} Whole new state\n */\n function CategoricalChartWrapper(_props) {\n var _this;\n\n _classCallCheck(this, CategoricalChartWrapper);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(CategoricalChartWrapper).call(this, _props));\n\n _this.handleLegendBBoxUpdate = function (box) {\n if (box && _this.legendInstance) {\n var _this$state = _this.state,\n dataStartIndex = _this$state.dataStartIndex,\n dataEndIndex = _this$state.dataEndIndex,\n updateId = _this$state.updateId;\n\n _this.setState(_this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n }));\n }\n };\n\n _this.handleReceiveSyncEvent = function (cId, chartId, data) {\n var _this$props = _this.props,\n syncId = _this$props.syncId,\n layout = _this$props.layout;\n var updateId = _this.state.updateId;\n\n if (syncId === cId && chartId !== _this.uniqueChartId) {\n var dataStartIndex = data.dataStartIndex,\n dataEndIndex = data.dataEndIndex;\n\n if (!_isNil(data.dataStartIndex) || !_isNil(data.dataEndIndex)) {\n _this.setState(_objectSpread({\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n })));\n } else if (!_isNil(data.activeTooltipIndex)) {\n var chartX = data.chartX,\n chartY = data.chartY,\n activeTooltipIndex = data.activeTooltipIndex;\n var _this$state2 = _this.state,\n offset = _this$state2.offset,\n tooltipTicks = _this$state2.tooltipTicks;\n\n if (!offset) {\n return;\n }\n\n var viewBox = _objectSpread({}, offset, {\n x: offset.left,\n y: offset.top\n }); // When a categotical chart is combined with another chart, the value of chartX\n // and chartY may beyond the boundaries.\n\n\n var validateChartX = Math.min(chartX, viewBox.x + viewBox.width);\n var validateChartY = Math.min(chartY, viewBox.y + viewBox.height);\n var activeLabel = tooltipTicks[activeTooltipIndex] && tooltipTicks[activeTooltipIndex].value;\n\n var activePayload = _this.getTooltipContent(activeTooltipIndex);\n\n var activeCoordinate = tooltipTicks[activeTooltipIndex] ? {\n x: layout === 'horizontal' ? tooltipTicks[activeTooltipIndex].coordinate : validateChartX,\n y: layout === 'horizontal' ? validateChartY : tooltipTicks[activeTooltipIndex].coordinate\n } : originCoordinate;\n\n _this.setState(_objectSpread({}, data, {\n activeLabel: activeLabel,\n activeCoordinate: activeCoordinate,\n activePayload: activePayload\n }));\n } else {\n _this.setState(data);\n }\n }\n };\n\n _this.handleBrushChange = function (_ref2) {\n var startIndex = _ref2.startIndex,\n endIndex = _ref2.endIndex;\n\n // Only trigger changes if the extents of the brush have actually changed\n if (startIndex !== _this.state.dataStartIndex || endIndex !== _this.state.dataEndIndex) {\n var updateId = _this.state.updateId;\n\n _this.setState(function () {\n return _objectSpread({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n updateId: updateId\n }));\n });\n\n _this.triggerSyncEvent({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n });\n }\n };\n\n _this.handleMouseEnter = function (e) {\n var onMouseEnter = _this.props.onMouseEnter;\n\n var mouse = _this.getMouseInfo(e);\n\n if (mouse) {\n var nextState = _objectSpread({}, mouse, {\n isTooltipActive: true\n });\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseEnter)) {\n onMouseEnter(nextState, e);\n }\n }\n };\n\n _this.triggeredAfterMouseMove = function (e) {\n var onMouseMove = _this.props.onMouseMove;\n\n var mouse = _this.getMouseInfo(e);\n\n var nextState = mouse ? _objectSpread({}, mouse, {\n isTooltipActive: true\n }) : {\n isTooltipActive: false\n };\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseMove)) {\n onMouseMove(nextState, e);\n }\n };\n\n _this.handleItemMouseEnter = function (el) {\n _this.setState(function () {\n return {\n isTooltipActive: true,\n activeItem: el,\n activePayload: el.tooltipPayload,\n activeCoordinate: el.tooltipPosition || {\n x: el.cx,\n y: el.cy\n }\n };\n });\n };\n\n _this.handleItemMouseLeave = function () {\n _this.setState(function () {\n return {\n isTooltipActive: false\n };\n });\n };\n\n _this.handleMouseMove = function (e) {\n if (e && _isFunction(e.persist)) {\n e.persist();\n }\n\n _this.triggeredAfterMouseMove(e);\n };\n\n _this.handleMouseLeave = function (e) {\n var onMouseLeave = _this.props.onMouseLeave;\n var nextState = {\n isTooltipActive: false\n };\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseLeave)) {\n onMouseLeave(nextState, e);\n }\n };\n\n _this.handleOuterEvent = function (e) {\n var eventName = getReactEventByType(e);\n\n if (eventName && _isFunction(_this.props[eventName])) {\n var mouse = _this.getMouseInfo(e);\n\n var handler = _this.props[eventName];\n handler(mouse, e);\n }\n };\n\n _this.handleClick = function (e) {\n var onClick = _this.props.onClick;\n\n if (_isFunction(onClick)) {\n var mouse = _this.getMouseInfo(e);\n\n onClick(mouse, e);\n }\n };\n\n _this.handleMouseDown = function (e) {\n var onMouseDown = _this.props.onMouseDown;\n\n if (_isFunction(onMouseDown)) {\n var mouse = _this.getMouseInfo(e);\n\n onMouseDown(mouse, e);\n }\n };\n\n _this.handleMouseUp = function (e) {\n var onMouseUp = _this.props.onMouseUp;\n\n if (_isFunction(onMouseUp)) {\n var mouse = _this.getMouseInfo(e);\n\n onMouseUp(mouse, e);\n }\n };\n\n _this.handleTouchMove = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseMove(e.changedTouches[0]);\n }\n };\n\n _this.handleTouchStart = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseDown(e.changedTouches[0]);\n }\n };\n\n _this.handleTouchEnd = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseUp(e.changedTouches[0]);\n }\n };\n\n _this.verticalCoordinatesGenerator = function (_ref3) {\n var xAxis = _ref3.xAxis,\n width = _ref3.width,\n height = _ref3.height,\n offset = _ref3.offset;\n return getCoordinatesOfGrid(CartesianAxis.getTicks(_objectSpread({}, CartesianAxis.defaultProps, xAxis, {\n ticks: getTicksOfAxis(xAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.left, offset.left + offset.width);\n };\n\n _this.horizontalCoordinatesGenerator = function (_ref4) {\n var yAxis = _ref4.yAxis,\n width = _ref4.width,\n height = _ref4.height,\n offset = _ref4.offset;\n return getCoordinatesOfGrid(CartesianAxis.getTicks(_objectSpread({}, CartesianAxis.defaultProps, yAxis, {\n ticks: getTicksOfAxis(yAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.top, offset.top + offset.height);\n };\n\n _this.axesTicksGenerator = function (axis) {\n return getTicksOfAxis(axis, true);\n };\n\n _this.tooltipTicksGenerator = function (axisMap) {\n var axis = getAnyElementOfObject(axisMap);\n var tooltipTicks = getTicksOfAxis(axis, false, true);\n return {\n tooltipTicks: tooltipTicks,\n orderedTooltipTicks: _sortBy(tooltipTicks, function (o) {\n return o.coordinate;\n }),\n tooltipAxis: axis,\n tooltipAxisBandSize: getBandSizeOfAxis(axis)\n };\n };\n\n _this.renderCursor = function (element) {\n var _this$state3 = _this.state,\n isTooltipActive = _this$state3.isTooltipActive,\n activeCoordinate = _this$state3.activeCoordinate,\n activePayload = _this$state3.activePayload,\n offset = _this$state3.offset;\n\n if (!element || !element.props.cursor || !isTooltipActive || !activeCoordinate) {\n return null;\n }\n\n var layout = _this.props.layout;\n var restProps;\n var cursorComp = Curve;\n\n if (chartName === 'ScatterChart') {\n restProps = activeCoordinate;\n cursorComp = Cross;\n } else if (chartName === 'BarChart') {\n restProps = _this.getCursorRectangle();\n cursorComp = Rectangle;\n } else if (layout === 'radial') {\n var _this$getCursorPoints = _this.getCursorPoints(),\n cx = _this$getCursorPoints.cx,\n cy = _this$getCursorPoints.cy,\n radius = _this$getCursorPoints.radius,\n startAngle = _this$getCursorPoints.startAngle,\n endAngle = _this$getCursorPoints.endAngle;\n\n restProps = {\n cx: cx,\n cy: cy,\n startAngle: startAngle,\n endAngle: endAngle,\n innerRadius: radius,\n outerRadius: radius\n };\n cursorComp = Sector;\n } else {\n restProps = {\n points: _this.getCursorPoints()\n };\n cursorComp = Curve;\n }\n\n var key = element.key || '_recharts-cursor';\n\n var cursorProps = _objectSpread({\n stroke: '#ccc',\n pointerEvents: 'none'\n }, offset, restProps, getPresentationAttributes(element.props.cursor), {\n payload: activePayload,\n key: key,\n className: 'recharts-tooltip-cursor'\n });\n\n return isValidElement(element.props.cursor) ? cloneElement(element.props.cursor, cursorProps) : createElement(cursorComp, cursorProps);\n };\n\n _this.renderPolarAxis = function (element, displayName, index) {\n var axisType = element.type.axisType;\n\n var axisMap = _this.state[\"\".concat(axisType, \"Map\")];\n\n var axisOption = axisMap[element.props[\"\".concat(axisType, \"Id\")]];\n return cloneElement(element, _objectSpread({}, axisOption, {\n className: axisType,\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n ticks: getTicksOfAxis(axisOption, true)\n }));\n };\n\n _this.renderXAxis = function (element, displayName, index) {\n var xAxisMap = _this.state.xAxisMap;\n var axisObj = xAxisMap[element.props.xAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n };\n\n _this.renderYAxis = function (element, displayName, index) {\n var yAxisMap = _this.state.yAxisMap;\n var axisObj = yAxisMap[element.props.yAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n };\n\n _this.renderGrid = function (element) {\n var _this$state4 = _this.state,\n xAxisMap = _this$state4.xAxisMap,\n yAxisMap = _this$state4.yAxisMap,\n offset = _this$state4.offset;\n var _this$props2 = _this.props,\n width = _this$props2.width,\n height = _this$props2.height;\n var xAxis = getAnyElementOfObject(xAxisMap);\n\n var yAxisWithFiniteDomain = _find(yAxisMap, function (axis) {\n return _every(axis.domain, Number.isFinite);\n });\n\n var yAxis = yAxisWithFiniteDomain || getAnyElementOfObject(yAxisMap);\n var props = element.props || {};\n return cloneElement(element, {\n key: element.key || 'grid',\n x: isNumber(props.x) ? props.x : offset.left,\n y: isNumber(props.y) ? props.y : offset.top,\n width: isNumber(props.width) ? props.width : offset.width,\n height: isNumber(props.height) ? props.height : offset.height,\n xAxis: xAxis,\n yAxis: yAxis,\n offset: offset,\n chartWidth: width,\n chartHeight: height,\n verticalCoordinatesGenerator: props.verticalCoordinatesGenerator || _this.verticalCoordinatesGenerator,\n horizontalCoordinatesGenerator: props.horizontalCoordinatesGenerator || _this.horizontalCoordinatesGenerator\n });\n };\n\n _this.renderPolarGrid = function (element) {\n var _this$state5 = _this.state,\n radiusAxisMap = _this$state5.radiusAxisMap,\n angleAxisMap = _this$state5.angleAxisMap;\n var radiusAxis = getAnyElementOfObject(radiusAxisMap);\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n var cx = angleAxis.cx,\n cy = angleAxis.cy,\n innerRadius = angleAxis.innerRadius,\n outerRadius = angleAxis.outerRadius;\n return cloneElement(element, {\n polarAngles: getTicksOfAxis(angleAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n polarRadius: getTicksOfAxis(radiusAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n key: element.key || 'polar-grid'\n });\n };\n\n _this.renderBrush = function (element) {\n var _this$props3 = _this.props,\n margin = _this$props3.margin,\n data = _this$props3.data;\n var _this$state6 = _this.state,\n offset = _this$state6.offset,\n dataStartIndex = _this$state6.dataStartIndex,\n dataEndIndex = _this$state6.dataEndIndex,\n updateId = _this$state6.updateId; // TODO: update brush when children update\n\n return cloneElement(element, {\n key: element.key || '_recharts-brush',\n onChange: combineEventHandlers(_this.handleBrushChange, null, element.props.onChange),\n data: data,\n x: isNumber(element.props.x) ? element.props.x : offset.left,\n y: isNumber(element.props.y) ? element.props.y : offset.top + offset.height + offset.brushBottom - (margin.bottom || 0),\n width: isNumber(element.props.width) ? element.props.width : offset.width,\n startIndex: dataStartIndex,\n endIndex: dataEndIndex,\n updateId: \"brush-\".concat(updateId)\n });\n };\n\n _this.renderReferenceElement = function (element, displayName, index) {\n if (!element) {\n return null;\n }\n\n var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n clipPathId = _assertThisInitialize.clipPathId;\n\n var _this$state7 = _this.state,\n xAxisMap = _this$state7.xAxisMap,\n yAxisMap = _this$state7.yAxisMap,\n offset = _this$state7.offset;\n var _element$props = element.props,\n xAxisId = _element$props.xAxisId,\n yAxisId = _element$props.yAxisId;\n return cloneElement(element, {\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n xAxis: xAxisMap[xAxisId],\n yAxis: yAxisMap[yAxisId],\n viewBox: {\n x: offset.left,\n y: offset.top,\n width: offset.width,\n height: offset.height\n },\n clipPathId: clipPathId\n });\n };\n\n _this.renderGraphicChild = function (element, displayName, index) {\n var item = _this.filterFormatItem(element, displayName, index);\n\n if (!item) {\n return null;\n }\n\n var graphicalItem = cloneElement(element, item.props);\n var _this$state8 = _this.state,\n isTooltipActive = _this$state8.isTooltipActive,\n tooltipAxis = _this$state8.tooltipAxis,\n activeTooltipIndex = _this$state8.activeTooltipIndex,\n activeLabel = _this$state8.activeLabel;\n var children = _this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n var _item$props = item.props,\n points = _item$props.points,\n isRange = _item$props.isRange,\n baseLine = _item$props.baseLine;\n var _item$item$props = item.item.props,\n activeDot = _item$item$props.activeDot,\n hide = _item$item$props.hide;\n var hasActive = !hide && isTooltipActive && tooltipItem && activeDot && activeTooltipIndex >= 0;\n\n if (hasActive) {\n var activePoint, basePoint;\n\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n activePoint = findEntryInArray(points, \"payload.\".concat(tooltipAxis.dataKey), activeLabel);\n basePoint = isRange && baseLine && findEntryInArray(baseLine, \"payload.\".concat(tooltipAxis.dataKey), activeLabel);\n } else {\n activePoint = points[activeTooltipIndex];\n basePoint = isRange && baseLine && baseLine[activeTooltipIndex];\n }\n\n if (!_isNil(activePoint)) {\n return [graphicalItem].concat(_toConsumableArray(_this.renderActivePoints({\n item: item,\n activePoint: activePoint,\n basePoint: basePoint,\n childIndex: activeTooltipIndex,\n isRange: isRange\n })));\n }\n }\n\n if (isRange) {\n return [graphicalItem, null, null];\n }\n\n return [graphicalItem, null];\n };\n\n var defaultState = _this.constructor.createDefaultState(_props);\n\n var _updateId = 0;\n _this.state = _objectSpread({}, defaultState, {\n updateId: 0\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: _props\n }, defaultState, {\n updateId: _updateId\n })));\n _this.uniqueChartId = _isNil(_props.id) ? uniqueId('recharts') : _props.id;\n _this.clipPathId = \"\".concat(_this.uniqueChartId, \"-clip\");\n\n if (_props.throttleDelay) {\n _this.triggeredAfterMouseMove = _throttle(_this.triggeredAfterMouseMove, _props.throttleDelay);\n }\n\n return _this;\n }\n /* eslint-disable react/no-did-mount-set-state */\n\n\n _createClass(CategoricalChartWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_isNil(this.props.syncId)) {\n this.addListener();\n }\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var _this$props4 = this.props,\n data = _this$props4.data,\n children = _this$props4.children,\n width = _this$props4.width,\n height = _this$props4.height,\n layout = _this$props4.layout,\n stackOffset = _this$props4.stackOffset,\n margin = _this$props4.margin;\n var updateId = this.state.updateId;\n\n if (nextProps.data !== data || nextProps.width !== width || nextProps.height !== height || nextProps.layout !== layout || nextProps.stackOffset !== stackOffset || !shallowEqual(nextProps.margin, margin)) {\n var defaultState = this.constructor.createDefaultState(nextProps);\n this.setState(_objectSpread({}, defaultState, {\n updateId: updateId + 1\n }, this.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: nextProps\n }, defaultState, {\n updateId: updateId + 1\n }))));\n } else if (!isChildrenEqual(nextProps.children, children)) {\n // update configuration in chilren\n var hasGlobalData = !_isNil(nextProps.data);\n var newUpdateId = hasGlobalData ? updateId : updateId + 1;\n this.setState(function (prevState) {\n return _objectSpread({\n updateId: newUpdateId\n }, _this2.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: nextProps\n }, prevState, {\n updateId: newUpdateId\n })));\n });\n } // add syncId\n\n\n if (_isNil(this.props.syncId) && !_isNil(nextProps.syncId)) {\n this.addListener();\n } // remove syncId\n\n\n if (!_isNil(this.props.syncId) && _isNil(nextProps.syncId)) {\n this.removeListener();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_isNil(this.props.syncId)) {\n this.removeListener();\n }\n\n if (typeof this.triggeredAfterMouseMove.cancel === 'function') {\n this.triggeredAfterMouseMove.cancel();\n }\n }\n /**\n * Get the configuration of all x-axis or y-axis\n * @param {Object} props Latest props\n * @param {String} axisType The type of axis\n * @param {Array} graphicalItems The instances of item\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMap\",\n value: function getAxisMap(props, _ref5) {\n var _ref5$axisType = _ref5.axisType,\n axisType = _ref5$axisType === void 0 ? 'xAxis' : _ref5$axisType,\n AxisComp = _ref5.AxisComp,\n graphicalItems = _ref5.graphicalItems,\n stackGroups = _ref5.stackGroups,\n dataStartIndex = _ref5.dataStartIndex,\n dataEndIndex = _ref5.dataEndIndex;\n var children = props.children;\n var axisIdKey = \"\".concat(axisType, \"Id\"); // Get all the instance of Axis\n\n var axes = findAllByType(children, AxisComp);\n var axisMap = {};\n\n if (axes && axes.length) {\n axisMap = this.getAxisMapByAxes(props, {\n axes: axes,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n } else if (graphicalItems && graphicalItems.length) {\n axisMap = this.getAxisMapByItems(props, {\n Axis: AxisComp,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n }\n\n return axisMap;\n }\n /**\n * Get the configuration of axis by the options of axis instance\n * @param {Object} props Latest props\n * @param {Array} axes The instance of axes\n * @param {Array} graphicalItems The instances of item\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMapByAxes\",\n value: function getAxisMapByAxes(props, _ref6) {\n var _this3 = this;\n\n var axes = _ref6.axes,\n graphicalItems = _ref6.graphicalItems,\n axisType = _ref6.axisType,\n axisIdKey = _ref6.axisIdKey,\n stackGroups = _ref6.stackGroups,\n dataStartIndex = _ref6.dataStartIndex,\n dataEndIndex = _ref6.dataEndIndex;\n var layout = props.layout,\n children = props.children,\n stackOffset = props.stackOffset;\n var isCategorial = isCategorialAxis(layout, axisType); // Eliminate duplicated axes\n\n var axisMap = axes.reduce(function (result, child) {\n var _child$props = child.props,\n type = _child$props.type,\n dataKey = _child$props.dataKey,\n allowDataOverflow = _child$props.allowDataOverflow,\n allowDuplicatedCategory = _child$props.allowDuplicatedCategory,\n scale = _child$props.scale,\n ticks = _child$props.ticks;\n var axisId = child.props[axisIdKey];\n\n var displayedData = _this3.constructor.getDisplayedData(props, {\n graphicalItems: graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId;\n }),\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n\n var len = displayedData.length;\n\n if (!result[axisId]) {\n var domain, duplicateDomain, categoricalDomain;\n\n if (dataKey) {\n domain = getDomainOfDataByKey(displayedData, dataKey, type);\n\n if (type === 'category' && isCategorial) {\n var duplicate = hasDuplicate(domain);\n\n if (allowDuplicatedCategory && duplicate) {\n duplicateDomain = domain; // When category axis has duplicated text, serial numbers are used to generate scale\n\n domain = _range(0, len);\n } else if (!allowDuplicatedCategory) {\n // remove duplicated category\n domain = parseDomainOfCategoryAxis(child.props.domain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 ? finalDomain : _toConsumableArray(finalDomain).concat([entry]);\n }, []);\n }\n } else if (type === 'category') {\n if (!allowDuplicatedCategory) {\n domain = parseDomainOfCategoryAxis(child.props.domain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 || entry === '' || _isNil(entry) ? finalDomain : _toConsumableArray(finalDomain).concat([entry]);\n }, []);\n } else {\n // eliminate undefined or null or empty string\n domain = domain.filter(function (entry) {\n return entry !== '' && !_isNil(entry);\n });\n }\n } else if (type === 'number') {\n var errorBarsDomain = parseErrorBarsOfAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), dataKey, axisType);\n\n if (errorBarsDomain) {\n domain = errorBarsDomain;\n }\n }\n\n if (isCategorial && (type === 'number' || scale !== 'auto')) {\n categoricalDomain = getDomainOfDataByKey(displayedData, dataKey, 'category');\n }\n } else if (isCategorial) {\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack && type === 'number') {\n // when stackOffset is 'expand', the domain may be calculated as [0, 1.000000000002]\n domain = stackOffset === 'expand' ? [0, 1] : getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n } else {\n domain = getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), type, true);\n }\n\n if (type === 'number') {\n // To detect wether there is any reference lines whose props alwaysShow is true\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType, ticks);\n\n if (child.props.domain) {\n domain = parseSpecifiedDomain(child.props.domain, domain, allowDataOverflow);\n }\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, _objectSpread({}, child.props, {\n axisType: axisType,\n domain: domain,\n categoricalDomain: categoricalDomain,\n duplicateDomain: duplicateDomain,\n originalDomain: child.props.domain,\n isCategorial: isCategorial,\n layout: layout\n })));\n }\n\n return result;\n }, {});\n return axisMap;\n }\n /**\n * Get the configuration of axis by the options of item,\n * this kind of axis does not display in chart\n * @param {Object} props Latest props\n * @param {Array} graphicalItems The instances of item\n * @param {ReactElement} Axis Axis Component\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMapByItems\",\n value: function getAxisMapByItems(props, _ref7) {\n var graphicalItems = _ref7.graphicalItems,\n Axis = _ref7.Axis,\n axisType = _ref7.axisType,\n axisIdKey = _ref7.axisIdKey,\n stackGroups = _ref7.stackGroups,\n dataStartIndex = _ref7.dataStartIndex,\n dataEndIndex = _ref7.dataEndIndex;\n var layout = props.layout,\n children = props.children;\n var displayedData = this.constructor.getDisplayedData(props, {\n graphicalItems: graphicalItems,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n var len = displayedData.length;\n var isCategorial = isCategorialAxis(layout, axisType);\n var index = -1; // The default type of x-axis is category axis,\n // The default contents of x-axis is the serial numbers of data\n // The default type of y-axis is number axis\n // The default contents of y-axis is the domain of data\n\n var axisMap = graphicalItems.reduce(function (result, child) {\n var axisId = child.props[axisIdKey];\n\n if (!result[axisId]) {\n index++;\n var domain;\n\n if (isCategorial) {\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack) {\n domain = getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n } else {\n domain = parseSpecifiedDomain(Axis.defaultProps.domain, getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), 'number'), Axis.defaultProps.allowDataOverflow);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, _objectSpread({\n axisType: axisType\n }, Axis.defaultProps, {\n hide: true,\n orientation: ORIENT_MAP[axisType] && ORIENT_MAP[axisType][index % 2],\n domain: domain,\n originalDomain: Axis.defaultProps.domain,\n isCategorial: isCategorial,\n layout: layout // specify scale when no Axis\n // scale: isCategorial ? 'band' : 'linear',\n\n })));\n }\n\n return result;\n }, {});\n return axisMap;\n }\n }, {\n key: \"getActiveCoordinate\",\n value: function getActiveCoordinate(tooltipTicks, activeIndex, rangeObj) {\n var layout = this.props.layout;\n var entry = tooltipTicks.find(function (tick) {\n return tick && tick.index === activeIndex;\n });\n\n if (entry) {\n if (layout === 'horizontal') {\n return {\n x: entry.coordinate,\n y: rangeObj.y\n };\n }\n\n if (layout === 'vertical') {\n return {\n x: rangeObj.x,\n y: entry.coordinate\n };\n }\n\n if (layout === 'centric') {\n var _angle = entry.coordinate;\n var _radius = rangeObj.radius;\n return _objectSpread({}, rangeObj, polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle), {\n angle: _angle,\n radius: _radius\n });\n }\n\n var radius = entry.coordinate;\n var angle = rangeObj.angle;\n return _objectSpread({}, rangeObj, polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle), {\n angle: angle,\n radius: radius\n });\n }\n\n return originCoordinate;\n }\n /**\n * Get the information of mouse in chart, return null when the mouse is not in the chart\n * @param {Object} event The event object\n * @return {Object} Mouse data\n */\n\n }, {\n key: \"getMouseInfo\",\n value: function getMouseInfo(event) {\n if (!this.container) {\n return null;\n }\n\n var containerOffset = getOffset(this.container);\n var e = calculateChartCoordinate(event, containerOffset);\n var rangeObj = this.inRange(e.chartX, e.chartY);\n\n if (!rangeObj) {\n return null;\n }\n\n var _this$state9 = this.state,\n xAxisMap = _this$state9.xAxisMap,\n yAxisMap = _this$state9.yAxisMap;\n\n if (eventType !== 'axis' && xAxisMap && yAxisMap) {\n var xScale = getAnyElementOfObject(xAxisMap).scale;\n var yScale = getAnyElementOfObject(yAxisMap).scale;\n var xValue = xScale && xScale.invert ? xScale.invert(e.chartX) : null;\n var yValue = yScale && yScale.invert ? yScale.invert(e.chartY) : null;\n return _objectSpread({}, e, {\n xValue: xValue,\n yValue: yValue\n });\n }\n\n var _this$state10 = this.state,\n ticks = _this$state10.orderedTooltipTicks,\n axis = _this$state10.tooltipAxis,\n tooltipTicks = _this$state10.tooltipTicks;\n var pos = this.calculateTooltipPos(rangeObj);\n var activeIndex = calculateActiveTickIndex(pos, ticks, tooltipTicks, axis);\n\n if (activeIndex >= 0 && tooltipTicks) {\n var activeLabel = tooltipTicks[activeIndex] && tooltipTicks[activeIndex].value;\n var activePayload = this.getTooltipContent(activeIndex, activeLabel);\n var activeCoordinate = this.getActiveCoordinate(ticks, activeIndex, rangeObj);\n return _objectSpread({}, e, {\n activeTooltipIndex: activeIndex,\n activeLabel: activeLabel,\n activePayload: activePayload,\n activeCoordinate: activeCoordinate\n });\n }\n\n return null;\n }\n /**\n * Get the content to be displayed in the tooltip\n * @param {Number} activeIndex Active index of data\n * @param {String} activeLabel Active label of data\n * @return {Array} The content of tooltip\n */\n\n }, {\n key: \"getTooltipContent\",\n value: function getTooltipContent(activeIndex, activeLabel) {\n var _this$state11 = this.state,\n graphicalItems = _this$state11.graphicalItems,\n tooltipAxis = _this$state11.tooltipAxis;\n var displayedData = this.constructor.getDisplayedData(this.props, this.state);\n\n if (activeIndex < 0 || !graphicalItems || !graphicalItems.length || activeIndex >= displayedData.length) {\n return null;\n } // get data by activeIndex when the axis don't allow duplicated category\n\n\n return graphicalItems.reduce(function (result, child) {\n var hide = child.props.hide;\n\n if (hide) {\n return result;\n }\n\n var _child$props2 = child.props,\n dataKey = _child$props2.dataKey,\n name = _child$props2.name,\n unit = _child$props2.unit,\n formatter = _child$props2.formatter,\n data = _child$props2.data;\n var payload;\n\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n // graphic child has data props\n payload = findEntryInArray(data || displayedData, tooltipAxis.dataKey, activeLabel);\n } else {\n payload = displayedData[activeIndex];\n }\n\n if (!payload) {\n return result;\n }\n\n return _toConsumableArray(result).concat([_objectSpread({}, getPresentationAttributes(child), {\n dataKey: dataKey,\n unit: unit,\n formatter: formatter,\n name: name || dataKey,\n color: getMainColorOfGraphicItem(child),\n value: getValueByDataKey(payload, dataKey),\n payload: payload\n })]);\n }, []);\n }\n }, {\n key: \"getFormatItems\",\n value: function getFormatItems(props, currentState) {\n var _this4 = this;\n\n var graphicalItems = currentState.graphicalItems,\n stackGroups = currentState.stackGroups,\n offset = currentState.offset,\n updateId = currentState.updateId,\n dataStartIndex = currentState.dataStartIndex,\n dataEndIndex = currentState.dataEndIndex;\n var barSize = props.barSize,\n layout = props.layout,\n barGap = props.barGap,\n barCategoryGap = props.barCategoryGap,\n globalMaxBarSize = props.maxBarSize;\n\n var _this$constructor$get = this.constructor.getAxisNameByLayout(layout),\n numericAxisName = _this$constructor$get.numericAxisName,\n cateAxisName = _this$constructor$get.cateAxisName;\n\n var hasBar = this.constructor.hasBar(graphicalItems);\n var sizeList = hasBar && getBarSizeList({\n barSize: barSize,\n stackGroups: stackGroups\n });\n var formatedItems = [];\n graphicalItems.forEach(function (item, index) {\n var displayedData = _this4.constructor.getDisplayedData(props, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, item);\n\n var _item$props2 = item.props,\n dataKey = _item$props2.dataKey,\n childMaxBarSize = _item$props2.maxBarSize;\n var numericAxisId = item.props[\"\".concat(numericAxisName, \"Id\")];\n var cateAxisId = item.props[\"\".concat(cateAxisName, \"Id\")];\n var axisObj = axisComponents.reduce(function (result, entry) {\n var _objectSpread4;\n\n var axisMap = currentState[\"\".concat(entry.axisType, \"Map\")];\n var id = item.props[\"\".concat(entry.axisType, \"Id\")];\n var axis = axisMap && axisMap[id];\n return _objectSpread({}, result, (_objectSpread4 = {}, _defineProperty(_objectSpread4, entry.axisType, axis), _defineProperty(_objectSpread4, \"\".concat(entry.axisType, \"Ticks\"), getTicksOfAxis(axis)), _objectSpread4));\n }, {});\n var cateAxis = axisObj[cateAxisName];\n var cateTicks = axisObj[\"\".concat(cateAxisName, \"Ticks\")];\n var stackedData = stackGroups && stackGroups[numericAxisId] && stackGroups[numericAxisId].hasStack && getStackedDataOfItem(item, stackGroups[numericAxisId].stackGroups);\n var bandSize = getBandSizeOfAxis(cateAxis, cateTicks);\n var maxBarSize = _isNil(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n var barPosition = hasBar && getBarPosition({\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n bandSize: bandSize,\n sizeList: sizeList[cateAxisId],\n maxBarSize: maxBarSize\n });\n var componsedFn = item && item.type && item.type.getComposedData;\n\n if (componsedFn) {\n var _objectSpread5;\n\n formatedItems.push({\n props: _objectSpread({}, componsedFn(_objectSpread({}, axisObj, {\n displayedData: displayedData,\n props: props,\n dataKey: dataKey,\n item: item,\n bandSize: bandSize,\n barPosition: barPosition,\n offset: offset,\n stackedData: stackedData,\n layout: layout,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n onItemMouseLeave: combineEventHandlers(_this4.handleItemMouseLeave, null, item.props.onMouseLeave),\n onItemMouseEnter: combineEventHandlers(_this4.handleItemMouseEnter, null, item.props.onMouseEnter)\n })), (_objectSpread5 = {\n key: item.key || \"item-\".concat(index)\n }, _defineProperty(_objectSpread5, numericAxisName, axisObj[numericAxisName]), _defineProperty(_objectSpread5, cateAxisName, axisObj[cateAxisName]), _defineProperty(_objectSpread5, \"animationId\", updateId), _objectSpread5)),\n childIndex: parseChildIndex(item, props.children),\n item: item\n });\n }\n });\n return formatedItems;\n }\n }, {\n key: \"getCursorRectangle\",\n value: function getCursorRectangle() {\n var layout = this.props.layout;\n var _this$state12 = this.state,\n activeCoordinate = _this$state12.activeCoordinate,\n offset = _this$state12.offset,\n tooltipAxisBandSize = _this$state12.tooltipAxisBandSize;\n var halfSize = tooltipAxisBandSize / 2;\n return {\n stroke: 'none',\n fill: '#ccc',\n x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,\n y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,\n width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,\n height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize\n };\n }\n }, {\n key: \"getCursorPoints\",\n value: function getCursorPoints() {\n var layout = this.props.layout;\n var _this$state13 = this.state,\n activeCoordinate = _this$state13.activeCoordinate,\n offset = _this$state13.offset;\n var x1, y1, x2, y2;\n\n if (layout === 'horizontal') {\n x1 = activeCoordinate.x;\n x2 = x1;\n y1 = offset.top;\n y2 = offset.top + offset.height;\n } else if (layout === 'vertical') {\n y1 = activeCoordinate.y;\n y2 = y1;\n x1 = offset.left;\n x2 = offset.left + offset.width;\n } else if (!_isNil(activeCoordinate.cx) || !_isNil(activeCoordinate.cy)) {\n if (layout === 'centric') {\n var cx = activeCoordinate.cx,\n cy = activeCoordinate.cy,\n innerRadius = activeCoordinate.innerRadius,\n outerRadius = activeCoordinate.outerRadius,\n angle = activeCoordinate.angle;\n var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);\n var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);\n x1 = innerPoint.x;\n y1 = innerPoint.y;\n x2 = outerPoint.x;\n y2 = outerPoint.y;\n } else {\n var _cx = activeCoordinate.cx,\n _cy = activeCoordinate.cy,\n radius = activeCoordinate.radius,\n startAngle = activeCoordinate.startAngle,\n endAngle = activeCoordinate.endAngle;\n var startPoint = polarToCartesian(_cx, _cy, radius, startAngle);\n var endPoint = polarToCartesian(_cx, _cy, radius, endAngle);\n return {\n points: [startPoint, endPoint],\n cx: _cx,\n cy: _cy,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n }\n\n return [{\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n }];\n }\n }, {\n key: \"calculateTooltipPos\",\n value: function calculateTooltipPos(rangeObj) {\n var layout = this.props.layout;\n\n if (layout === 'horizontal') {\n return rangeObj.x;\n }\n\n if (layout === 'vertical') {\n return rangeObj.y;\n }\n\n if (layout === 'centric') {\n return rangeObj.angle;\n }\n\n return rangeObj.radius;\n }\n }, {\n key: \"inRange\",\n value: function inRange(x, y) {\n var layout = this.props.layout;\n\n if (layout === 'horizontal' || layout === 'vertical') {\n var offset = this.state.offset;\n var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;\n return isInRange ? {\n x: x,\n y: y\n } : null;\n }\n\n var _this$state14 = this.state,\n angleAxisMap = _this$state14.angleAxisMap,\n radiusAxisMap = _this$state14.radiusAxisMap;\n\n if (angleAxisMap && radiusAxisMap) {\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n return inRangeOfSector({\n x: x,\n y: y\n }, angleAxis);\n }\n\n return null;\n }\n }, {\n key: \"parseEventsOfWrapper\",\n value: function parseEventsOfWrapper() {\n var children = this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n var tooltipEvents = tooltipItem && eventType === 'axis' ? {\n onMouseEnter: this.handleMouseEnter,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd\n } : {};\n var outerEvents = filterEventAttributes(this.props, this.handleOuterEvent);\n return _objectSpread({}, outerEvents, tooltipEvents);\n }\n /**\n * The AxisMaps are expensive to render on large data sets\n * so provide the ability to store them in state and only update them when necessary\n * they are dependent upon the start and end index of\n * the brush so it's important that this method is called _after_\n * the state is updated with any new start/end indices\n *\n * @param {Object} props The props object to be used for updating the axismaps\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @param {Number} updateId The update id\n * @return {Object} state New state to set\n */\n\n }, {\n key: \"updateStateOfAxisMapsOffsetAndStackGroups\",\n value: function updateStateOfAxisMapsOffsetAndStackGroups(_ref8) {\n var _this5 = this;\n\n var props = _ref8.props,\n dataStartIndex = _ref8.dataStartIndex,\n dataEndIndex = _ref8.dataEndIndex,\n updateId = _ref8.updateId;\n\n if (!validateWidthHeight({\n props: props\n })) {\n return null;\n }\n\n var children = props.children,\n layout = props.layout,\n stackOffset = props.stackOffset,\n data = props.data,\n reverseStackOrder = props.reverseStackOrder;\n\n var _this$constructor$get2 = this.constructor.getAxisNameByLayout(layout),\n numericAxisName = _this$constructor$get2.numericAxisName,\n cateAxisName = _this$constructor$get2.cateAxisName;\n\n var graphicalItems = findAllByType(children, GraphicalChild);\n var stackGroups = getStackGroupsByAxisId(data, graphicalItems, \"\".concat(numericAxisName, \"Id\"), \"\".concat(cateAxisName, \"Id\"), stackOffset, reverseStackOrder);\n var axisObj = axisComponents.reduce(function (result, entry) {\n var name = \"\".concat(entry.axisType, \"Map\");\n return _objectSpread({}, result, _defineProperty({}, name, _this5.getAxisMap(props, _objectSpread({}, entry, {\n graphicalItems: graphicalItems,\n stackGroups: entry.axisType === numericAxisName && stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }))));\n }, {});\n var offset = this.calculateOffset(_objectSpread({}, axisObj, {\n props: props,\n graphicalItems: graphicalItems\n }));\n Object.keys(axisObj).forEach(function (key) {\n axisObj[key] = formatAxisMap(props, axisObj[key], offset, key.replace('Map', ''), chartName);\n });\n var cateAxisMap = axisObj[\"\".concat(cateAxisName, \"Map\")];\n var ticksObj = this.tooltipTicksGenerator(cateAxisMap);\n var formatedGraphicalItems = this.getFormatItems(props, _objectSpread({}, axisObj, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId,\n graphicalItems: graphicalItems,\n stackGroups: stackGroups,\n offset: offset\n }));\n return _objectSpread({\n formatedGraphicalItems: formatedGraphicalItems,\n graphicalItems: graphicalItems,\n offset: offset,\n stackGroups: stackGroups\n }, ticksObj, axisObj);\n }\n /* eslint-disable no-underscore-dangle */\n\n }, {\n key: \"addListener\",\n value: function addListener() {\n eventCenter.on(SYNC_EVENT, this.handleReceiveSyncEvent);\n\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners + 1);\n }\n }\n }, {\n key: \"removeListener\",\n value: function removeListener() {\n eventCenter.removeListener(SYNC_EVENT, this.handleReceiveSyncEvent);\n\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners - 1);\n }\n }\n /**\n * Calculate the offset of main part in the svg element\n * @param {Object} props Latest props\n * @param {Array} graphicalItems The instances of item\n * @param {Object} xAxisMap The configuration of x-axis\n * @param {Object} yAxisMap The configuration of y-axis\n * @return {Object} The offset of main part in the svg element\n */\n\n }, {\n key: \"calculateOffset\",\n value: function calculateOffset(_ref9) {\n var props = _ref9.props,\n graphicalItems = _ref9.graphicalItems,\n _ref9$xAxisMap = _ref9.xAxisMap,\n xAxisMap = _ref9$xAxisMap === void 0 ? {} : _ref9$xAxisMap,\n _ref9$yAxisMap = _ref9.yAxisMap,\n yAxisMap = _ref9$yAxisMap === void 0 ? {} : _ref9$yAxisMap;\n var width = props.width,\n height = props.height,\n children = props.children;\n var margin = props.margin || {};\n var brushItem = findChildByType(children, Brush);\n var legendItem = findChildByType(children, Legend);\n var offsetH = Object.keys(yAxisMap).reduce(function (result, id) {\n var entry = yAxisMap[id];\n var orientation = entry.orientation;\n\n if (!entry.mirror && !entry.hide) {\n return _objectSpread({}, result, _defineProperty({}, orientation, result[orientation] + entry.width));\n }\n\n return result;\n }, {\n left: margin.left || 0,\n right: margin.right || 0\n });\n var offsetV = Object.keys(xAxisMap).reduce(function (result, id) {\n var entry = xAxisMap[id];\n var orientation = entry.orientation;\n\n if (!entry.mirror && !entry.hide) {\n return _objectSpread({}, result, _defineProperty({}, orientation, result[orientation] + entry.height));\n }\n\n return result;\n }, {\n top: margin.top || 0,\n bottom: margin.bottom || 0\n });\n\n var offset = _objectSpread({}, offsetV, offsetH);\n\n var brushBottom = offset.bottom;\n\n if (brushItem) {\n offset.bottom += brushItem.props.height || Brush.defaultProps.height;\n }\n\n if (legendItem && this.legendInstance) {\n var legendBox = this.legendInstance.getBBox();\n offset = appendOffsetOfLegend(offset, graphicalItems, props, legendBox);\n }\n\n return _objectSpread({\n brushBottom: brushBottom\n }, offset, {\n width: width - offset.left - offset.right,\n height: height - offset.top - offset.bottom\n });\n }\n }, {\n key: \"triggerSyncEvent\",\n value: function triggerSyncEvent(data) {\n var syncId = this.props.syncId;\n\n if (!_isNil(syncId)) {\n eventCenter.emit(SYNC_EVENT, syncId, this.uniqueChartId, data);\n }\n }\n }, {\n key: \"filterFormatItem\",\n value: function filterFormatItem(item, displayName, childIndex) {\n var formatedGraphicalItems = this.state.formatedGraphicalItems;\n\n for (var i = 0, len = formatedGraphicalItems.length; i < len; i++) {\n var entry = formatedGraphicalItems[i];\n\n if (entry.item === item || entry.props.key === item.key || displayName === getDisplayName(entry.item.type) && childIndex === entry.childIndex) {\n return entry;\n }\n }\n\n return null;\n }\n }, {\n key: \"renderAxis\",\n\n /**\n * Draw axis\n * @param {Object} axisOptions The options of axis\n * @param {Object} element The axis element\n * @param {String} displayName The display name of axis\n * @param {Number} index The index of element\n * @return {ReactElement} The instance of x-axes\n */\n value: function renderAxis(axisOptions, element, displayName, index) {\n var _this$props5 = this.props,\n width = _this$props5.width,\n height = _this$props5.height;\n return React.createElement(CartesianAxis, _extends({}, axisOptions, {\n className: \"recharts-\".concat(axisOptions.axisType, \" \").concat(axisOptions.axisType),\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n },\n ticksGenerator: this.axesTicksGenerator\n }));\n }\n /**\n * Draw grid\n * @param {ReactElement} element the grid item\n * @return {ReactElement} The instance of grid\n */\n\n }, {\n key: \"renderLegend\",\n\n /**\n * Draw legend\n * @return {ReactElement} The instance of Legend\n */\n value: function renderLegend() {\n var _this6 = this;\n\n var formatedGraphicalItems = this.state.formatedGraphicalItems;\n var _this$props6 = this.props,\n children = _this$props6.children,\n width = _this$props6.width,\n height = _this$props6.height;\n var margin = this.props.margin || {};\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n var legendHeight = height - (margin.top || 0) - (margin.bottom || 0);\n var props = getLegendProps({\n children: children,\n formatedGraphicalItems: formatedGraphicalItems,\n legendWidth: legendWidth,\n legendHeight: legendHeight,\n legendContent: legendContent\n });\n\n if (!props) {\n return null;\n }\n\n var item = props.item,\n otherProps = _objectWithoutProperties(props, [\"item\"]);\n\n return cloneElement(item, _objectSpread({}, otherProps, {\n chartWidth: width,\n chartHeight: height,\n margin: margin,\n ref: function ref(legend) {\n _this6.legendInstance = legend;\n },\n onBBoxUpdate: this.handleLegendBBoxUpdate\n }));\n }\n /**\n * Draw Tooltip\n * @return {ReactElement} The instance of Tooltip\n */\n\n }, {\n key: \"renderTooltip\",\n value: function renderTooltip() {\n var children = this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n\n if (!tooltipItem) {\n return null;\n }\n\n var _this$state15 = this.state,\n isTooltipActive = _this$state15.isTooltipActive,\n activeCoordinate = _this$state15.activeCoordinate,\n activePayload = _this$state15.activePayload,\n activeLabel = _this$state15.activeLabel,\n offset = _this$state15.offset;\n return cloneElement(tooltipItem, {\n viewBox: _objectSpread({}, offset, {\n x: offset.left,\n y: offset.top\n }),\n active: isTooltipActive,\n label: activeLabel,\n payload: isTooltipActive ? activePayload : [],\n coordinate: activeCoordinate\n });\n }\n }, {\n key: \"renderActivePoints\",\n value: function renderActivePoints(_ref10) {\n var item = _ref10.item,\n activePoint = _ref10.activePoint,\n basePoint = _ref10.basePoint,\n childIndex = _ref10.childIndex,\n isRange = _ref10.isRange;\n var result = [];\n var key = item.props.key;\n var _item$item$props2 = item.item.props,\n activeDot = _item$item$props2.activeDot,\n dataKey = _item$item$props2.dataKey;\n\n var dotProps = _objectSpread({\n index: childIndex,\n dataKey: dataKey,\n cx: activePoint.x,\n cy: activePoint.y,\n r: 4,\n fill: getMainColorOfGraphicItem(item.item),\n strokeWidth: 2,\n stroke: '#fff',\n payload: activePoint.payload,\n value: activePoint.value,\n key: \"\".concat(key, \"-activePoint-\").concat(childIndex)\n }, getPresentationAttributes(activeDot), filterEventAttributes(activeDot));\n\n result.push(this.constructor.renderActiveDot(activeDot, dotProps, childIndex));\n\n if (basePoint) {\n result.push(this.constructor.renderActiveDot(activeDot, _objectSpread({}, dotProps, {\n cx: basePoint.x,\n cy: basePoint.y,\n key: \"\".concat(key, \"-basePoint-\").concat(childIndex)\n }), childIndex));\n } else if (isRange) {\n result.push(null);\n }\n\n return result;\n }\n }, {\n key: \"renderClipPath\",\n value: function renderClipPath() {\n var clipPathId = this.clipPathId;\n var _this$state$offset = this.state.offset,\n left = _this$state$offset.left,\n top = _this$state$offset.top,\n height = _this$state$offset.height,\n width = _this$state$offset.width;\n return React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: clipPathId\n }, React.createElement(\"rect\", {\n x: left,\n y: top,\n height: height,\n width: width\n })));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this7 = this;\n\n if (!validateWidthHeight(this)) {\n return null;\n }\n\n var _this$props7 = this.props,\n children = _this$props7.children,\n className = _this$props7.className,\n width = _this$props7.width,\n height = _this$props7.height,\n style = _this$props7.style,\n compact = _this$props7.compact,\n others = _objectWithoutProperties(_this$props7, [\"children\", \"className\", \"width\", \"height\", \"style\", \"compact\"]);\n\n var attrs = getPresentationAttributes(others);\n var map = {\n CartesianGrid: {\n handler: this.renderGrid,\n once: true\n },\n ReferenceArea: {\n handler: this.renderReferenceElement\n },\n ReferenceLine: {\n handler: this.renderReferenceElement\n },\n ReferenceDot: {\n handler: this.renderReferenceElement\n },\n XAxis: {\n handler: this.renderXAxis\n },\n YAxis: {\n handler: this.renderYAxis\n },\n Brush: {\n handler: this.renderBrush,\n once: true\n },\n Bar: {\n handler: this.renderGraphicChild\n },\n Line: {\n handler: this.renderGraphicChild\n },\n Area: {\n handler: this.renderGraphicChild\n },\n Radar: {\n handler: this.renderGraphicChild\n },\n RadialBar: {\n handler: this.renderGraphicChild\n },\n Scatter: {\n handler: this.renderGraphicChild\n },\n Pie: {\n handler: this.renderGraphicChild\n },\n Funnel: {\n handler: this.renderGraphicChild\n },\n Tooltip: {\n handler: this.renderCursor,\n once: true\n },\n PolarGrid: {\n handler: this.renderPolarGrid,\n once: true\n },\n PolarAngleAxis: {\n handler: this.renderPolarAxis\n },\n PolarRadiusAxis: {\n handler: this.renderPolarAxis\n }\n }; // The \"compact\" mode is mainly used as the panorama within Brush\n\n if (compact) {\n return React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height\n }), this.renderClipPath(), renderByOrder(children, map));\n }\n\n var events = this.parseEventsOfWrapper();\n return React.createElement(\"div\", _extends({\n className: classNames('recharts-wrapper', className),\n style: _objectSpread({\n position: 'relative',\n cursor: 'default',\n width: width,\n height: height\n }, style)\n }, events, {\n ref: function ref(node) {\n _this7.container = node;\n }\n }), React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height\n }), this.renderClipPath(), renderByOrder(children, map)), this.renderLegend(), this.renderTooltip());\n }\n }], [{\n key: \"getAxisNameByLayout\",\n value: function getAxisNameByLayout(layout) {\n if (layout === 'horizontal') {\n return {\n numericAxisName: 'yAxis',\n cateAxisName: 'xAxis'\n };\n }\n\n if (layout === 'vertical') {\n return {\n numericAxisName: 'xAxis',\n cateAxisName: 'yAxis'\n };\n }\n\n if (layout === 'centric') {\n return {\n numericAxisName: 'radiusAxis',\n cateAxisName: 'angleAxis'\n };\n }\n\n return {\n numericAxisName: 'angleAxis',\n cateAxisName: 'radiusAxis'\n };\n }\n }, {\n key: \"renderActiveDot\",\n value: function renderActiveDot(option, props) {\n var dot;\n\n if (isValidElement(option)) {\n dot = cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = React.createElement(Dot, props);\n }\n\n return React.createElement(Layer, {\n className: \"recharts-active-dot\",\n key: props.key\n }, dot);\n }\n }]);\n\n return CategoricalChartWrapper;\n }(Component);\n\n CategoricalChartWrapper.displayName = chartName;\n CategoricalChartWrapper.propTypes = _objectSpread({\n syncId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n compact: PropTypes.bool,\n width: PropTypes.number,\n height: PropTypes.number,\n data: PropTypes.arrayOf(PropTypes.object),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n stackOffset: PropTypes.oneOf(['sign', 'expand', 'none', 'wiggle', 'silhouette']),\n throttleDelay: PropTypes.number,\n margin: PropTypes.shape({\n top: PropTypes.number,\n right: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number\n }),\n barCategoryGap: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n barGap: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n barSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n maxBarSize: PropTypes.number,\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultShowTooltip: PropTypes.bool,\n onClick: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseUp: PropTypes.func,\n reverseStackOrder: PropTypes.bool,\n id: PropTypes.string\n }, propTypes);\n CategoricalChartWrapper.defaultProps = _objectSpread({\n layout: 'horizontal',\n stackOffset: 'none',\n barCategoryGap: '10%',\n barGap: 4,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5\n },\n reverseStackOrder: false\n }, defaultProps);\n\n CategoricalChartWrapper.createDefaultState = function (props) {\n var children = props.children,\n defaultShowTooltip = props.defaultShowTooltip;\n var brushItem = findChildByType(children, Brush);\n var startIndex = brushItem && brushItem.props && brushItem.props.startIndex || 0;\n var endIndex = brushItem && brushItem.props && brushItem.props.endIndex || props.data && props.data.length - 1 || 0;\n return {\n chartX: 0,\n chartY: 0,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n activeTooltipIndex: -1,\n isTooltipActive: !_isNil(defaultShowTooltip) ? defaultShowTooltip : false\n };\n };\n\n CategoricalChartWrapper.hasBar = function (graphicalItems) {\n if (!graphicalItems || !graphicalItems.length) {\n return false;\n }\n\n return graphicalItems.some(function (item) {\n var name = getDisplayName(item && item.type);\n return name && name.indexOf('Bar') >= 0;\n });\n };\n\n CategoricalChartWrapper.getDisplayedData = function (props, _ref11, item) {\n var graphicalItems = _ref11.graphicalItems,\n dataStartIndex = _ref11.dataStartIndex,\n dataEndIndex = _ref11.dataEndIndex;\n var itemsData = (graphicalItems || []).reduce(function (result, child) {\n var itemData = child.props.data;\n\n if (itemData && itemData.length) {\n return _toConsumableArray(result).concat(_toConsumableArray(itemData));\n }\n\n return result;\n }, []);\n\n if (itemsData && itemsData.length > 0) {\n return itemsData;\n }\n\n if (item && item.props && item.props.data && item.props.data.length > 0) {\n return item.props.data;\n }\n\n var data = props.data;\n\n if (data && data.length && isNumber(dataStartIndex) && isNumber(dataEndIndex)) {\n return data.slice(dataStartIndex, dataEndIndex + 1);\n }\n\n return [];\n };\n\n return CategoricalChartWrapper;\n};\n\nexport default generateCategoricalChart;", + "/**\n * @fileOverview Area Chart\n */\nimport generateCategoricalChart from './generateCategoricalChart';\nimport Area from '../cartesian/Area';\nimport XAxis from '../cartesian/XAxis';\nimport YAxis from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport default generateCategoricalChart({\n chartName: 'AreaChart',\n GraphicalChild: Area,\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});", + "import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React, { cloneElement, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Text from './Text';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, findAllByType } from '../util/ReactUtils';\nimport { isNumOrStr, isNumber, isPercent, getPercentValue, uniqueId, mathSign } from '../util/DataUtils';\nimport { polarToCartesian } from '../util/PolarUtils';\nvar cartesianViewBoxShape = PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n});\nvar polarViewBoxShape = PropTypes.shape({\n cx: PropTypes.number,\n cy: PropTypes.number,\n innerRadius: PropTypes.number,\n outerRadius: PropTypes.number,\n startAngle: PropTypes.number,\n endAngle: PropTypes.number\n});\n\nvar propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.oneOfType([cartesianViewBoxShape, polarViewBoxShape]),\n formatter: PropTypes.func,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n offset: PropTypes.number,\n position: PropTypes.oneOf(['top', 'left', 'right', 'bottom', 'inside', 'outside', 'insideLeft', 'insideRight', 'insideTop', 'insideBottom', 'insideTopLeft', 'insideBottomLeft', 'insideTopRight', 'insideBottomRight', 'insideStart', 'insideEnd', 'end', 'center', 'centerTop', 'centerBottom']),\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n className: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func])\n});\n\nvar defaultProps = {\n offset: 5\n};\n\nvar getLabel = function getLabel(props) {\n var value = props.value,\n formatter = props.formatter;\n var label = _isNil(props.children) ? value : props.children;\n\n if (_isFunction(formatter)) {\n return formatter(label);\n }\n\n return label;\n};\n\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n return sign * deltaAngle;\n};\n\nvar renderRadialLabel = function renderRadialLabel(labelProps, label, attrs) {\n var position = labelProps.position,\n viewBox = labelProps.viewBox,\n offset = labelProps.offset,\n className = labelProps.className;\n var cx = viewBox.cx,\n cy = viewBox.cy,\n innerRadius = viewBox.innerRadius,\n outerRadius = viewBox.outerRadius,\n startAngle = viewBox.startAngle,\n endAngle = viewBox.endAngle,\n clockWise = viewBox.clockWise;\n var radius = (innerRadius + outerRadius) / 2;\n var deltaAngle = getDeltaAngle(startAngle, endAngle);\n var sign = deltaAngle >= 0 ? 1 : -1;\n var labelAngle, direction;\n\n if (position === 'insideStart') {\n labelAngle = startAngle + sign * offset;\n direction = clockWise;\n } else if (position === 'insideEnd') {\n labelAngle = endAngle - sign * offset;\n direction = !clockWise;\n } else if (position === 'end') {\n labelAngle = endAngle + sign * offset;\n direction = clockWise;\n }\n\n direction = deltaAngle <= 0 ? direction : !direction;\n var startPoint = polarToCartesian(cx, cy, radius, labelAngle);\n var endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);\n var path = \"M\".concat(startPoint.x, \",\").concat(startPoint.y, \"\\n A\").concat(radius, \",\").concat(radius, \",0,1,\").concat(direction ? 0 : 1, \",\\n \").concat(endPoint.x, \",\").concat(endPoint.y);\n var id = _isNil(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;\n return React.createElement(\"text\", _extends({}, attrs, {\n dominantBaseline: \"central\",\n className: classNames('recharts-radial-bar-label', className)\n }), React.createElement(\"defs\", null, React.createElement(\"path\", {\n id: id,\n d: path\n })), React.createElement(\"textPath\", {\n xlinkHref: \"#\".concat(id)\n }, label));\n};\n\nvar getAttrsOfPolarLabel = function getAttrsOfPolarLabel(props) {\n var viewBox = props.viewBox,\n offset = props.offset,\n position = props.position;\n var cx = viewBox.cx,\n cy = viewBox.cy,\n innerRadius = viewBox.innerRadius,\n outerRadius = viewBox.outerRadius,\n startAngle = viewBox.startAngle,\n endAngle = viewBox.endAngle;\n var midAngle = (startAngle + endAngle) / 2;\n\n if (position === 'outside') {\n var _polarToCartesian = polarToCartesian(cx, cy, outerRadius + offset, midAngle),\n _x = _polarToCartesian.x,\n _y = _polarToCartesian.y;\n\n return {\n x: _x,\n y: _y,\n textAnchor: _x >= cx ? 'start' : 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'center') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'centerTop') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'centerBottom') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'end'\n };\n }\n\n var r = (innerRadius + outerRadius) / 2;\n\n var _polarToCartesian2 = polarToCartesian(cx, cy, r, midAngle),\n x = _polarToCartesian2.x,\n y = _polarToCartesian2.y;\n\n return {\n x: x,\n y: y,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n};\n\nvar getAttrsOfCartesianLabel = function getAttrsOfCartesianLabel(props) {\n var viewBox = props.viewBox,\n offset = props.offset,\n position = props.position;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sign = height >= 0 ? 1 : -1;\n\n if (position === 'top') {\n return {\n x: x + width / 2,\n y: y - sign * offset,\n textAnchor: 'middle',\n verticalAnchor: sign > 0 ? 'end' : 'start'\n };\n }\n\n if (position === 'bottom') {\n return {\n x: x + width / 2,\n y: y + height + sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'left') {\n return {\n x: x - offset,\n y: y + height / 2,\n textAnchor: 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'right') {\n return {\n x: x + width + offset,\n y: y + height / 2,\n textAnchor: 'start',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideLeft') {\n return {\n x: x + offset,\n y: y + height / 2,\n textAnchor: 'start',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideRight') {\n return {\n x: x + width - offset,\n y: y + height / 2,\n textAnchor: 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideTop') {\n return {\n x: x + width / 2,\n y: y + sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideBottom') {\n return {\n x: x + width / 2,\n y: y + height - sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'end'\n };\n }\n\n if (position === 'insideTopLeft') {\n return {\n x: x + offset,\n y: y + sign * offset,\n textAnchor: 'start',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideTopRight') {\n return {\n x: x + width - offset,\n y: y + sign * offset,\n textAnchor: 'end',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideBottomLeft') {\n return {\n x: x + offset,\n y: y + height - sign * offset,\n textAnchor: 'start',\n verticalAnchor: 'end'\n };\n }\n\n if (position === 'insideBottomRight') {\n return {\n x: x + width - offset,\n y: y + height - sign * offset,\n textAnchor: 'end',\n verticalAnchor: 'end'\n };\n }\n\n if (_isObject(position) && (isNumber(position.x) || isPercent(position.x)) && (isNumber(position.y) || isPercent(position.y))) {\n return {\n x: x + getPercentValue(position.x, width),\n y: y + getPercentValue(position.y, height),\n textAnchor: 'end',\n verticalAnchor: 'end'\n };\n }\n\n return {\n x: x + width / 2,\n y: y + height / 2,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n};\n\nvar isPolar = function isPolar(viewBox) {\n return isNumber(viewBox.cx);\n};\n\nfunction Label(props) {\n var viewBox = props.viewBox,\n position = props.position,\n value = props.value,\n children = props.children,\n content = props.content,\n _props$className = props.className,\n className = _props$className === void 0 ? '' : _props$className;\n\n if (!viewBox || _isNil(value) && _isNil(children) && !isValidElement(content) && !_isFunction(content)) {\n return null;\n }\n\n if (isValidElement(content)) {\n return cloneElement(content, props);\n }\n\n var label;\n\n if (_isFunction(content)) {\n label = content(props);\n\n if (isValidElement(label)) {\n return label;\n }\n } else {\n label = getLabel(props);\n }\n\n var isPolarLabel = isPolar(viewBox);\n var attrs = getPresentationAttributes(props);\n\n if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {\n return renderRadialLabel(props, label, attrs);\n }\n\n var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(props) : getAttrsOfCartesianLabel(props);\n return React.createElement(Text, _extends({\n className: classNames('recharts-label', className)\n }, attrs, positionAttrs), label);\n}\n\nLabel.displayName = 'Label';\nLabel.defaultProps = defaultProps;\nLabel.propTypes = propTypes;\n\nvar parseViewBox = function parseViewBox(props) {\n var cx = props.cx,\n cy = props.cy,\n angle = props.angle,\n startAngle = props.startAngle,\n endAngle = props.endAngle,\n r = props.r,\n radius = props.radius,\n innerRadius = props.innerRadius,\n outerRadius = props.outerRadius,\n x = props.x,\n y = props.y,\n top = props.top,\n left = props.left,\n width = props.width,\n height = props.height,\n clockWise = props.clockWise;\n\n if (isNumber(width) && isNumber(height)) {\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n\n if (isNumber(top) && isNumber(left)) {\n return {\n x: top,\n y: left,\n width: width,\n height: height\n };\n }\n }\n\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: 0,\n height: 0\n };\n }\n\n if (isNumber(cx) && isNumber(cy)) {\n return {\n cx: cx,\n cy: cy,\n startAngle: startAngle || angle || 0,\n endAngle: endAngle || angle || 0,\n innerRadius: innerRadius || 0,\n outerRadius: outerRadius || radius || r || 0,\n clockWise: clockWise\n };\n }\n\n if (props.viewBox) {\n return props.viewBox;\n }\n\n return {};\n};\n\nvar parseLabel = function parseLabel(label, viewBox) {\n if (!label) {\n return null;\n }\n\n if (label === true) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox\n });\n }\n\n if (isNumOrStr(label)) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox,\n value: label\n });\n }\n\n if (isValidElement(label) || _isFunction(label)) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n content: label,\n viewBox: viewBox\n });\n }\n\n if (_isObject(label)) {\n return React.createElement(Label, _extends({\n viewBox: viewBox\n }, label, {\n key: \"label-implicit\"\n }));\n }\n\n return null;\n};\n\nvar renderCallByParent = function renderCallByParent(parentProps, viewBox) {\n var ckeckPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) {\n return null;\n }\n\n var children = parentProps.children;\n var parentViewBox = parseViewBox(parentProps);\n var explicitChilren = findAllByType(children, Label).map(function (child, index) {\n return cloneElement(child, {\n viewBox: viewBox || parentViewBox,\n key: \"label-\".concat(index)\n });\n });\n\n if (!ckeckPropsLabel) {\n return explicitChilren;\n }\n\n var implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox);\n return [implicitLabel].concat(_toConsumableArray(explicitChilren));\n};\n\nLabel.parseViewBox = parseViewBox;\nLabel.renderCallByParent = renderCallByParent;\nexport default Label;", + "import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\nimport _last from \"lodash/last\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Label from './Label';\nimport Layer from '../container/Layer';\nimport { getPresentationAttributes, findAllByType } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nvar propTypes = {\n id: PropTypes.string,\n data: PropTypes.arrayOf(PropTypes.object),\n valueAccessor: PropTypes.func,\n clockWise: PropTypes.bool,\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func])\n};\nvar defaultProps = {\n valueAccessor: function valueAccessor(entry) {\n return _isArray(entry.value) ? _last(entry.value) : entry.value;\n }\n};\n\nfunction LabelList(props) {\n var data = props.data,\n valueAccessor = props.valueAccessor,\n dataKey = props.dataKey,\n clockWise = props.clockWise,\n id = props.id,\n others = _objectWithoutProperties(props, [\"data\", \"valueAccessor\", \"dataKey\", \"clockWise\", \"id\"]);\n\n if (!data || !data.length) {\n return null;\n }\n\n return React.createElement(Layer, {\n className: \"recharts-label-list\"\n }, data.map(function (entry, index) {\n var value = _isNil(dataKey) ? valueAccessor(entry, index) : getValueByDataKey(entry && entry.payload, dataKey);\n var idProps = _isNil(id) ? {} : {\n id: \"\".concat(id, \"-\").concat(index)\n };\n return React.createElement(Label, _extends({}, getPresentationAttributes(entry), others, idProps, {\n index: index,\n value: value,\n viewBox: Label.parseViewBox(_isNil(clockWise) ? entry : _objectSpread({}, entry, {\n clockWise: clockWise\n })),\n key: \"label-\".concat(index)\n }));\n }));\n}\n\nLabelList.propTypes = propTypes;\nLabelList.displayName = 'LabelList';\n\nvar parseLabelList = function parseLabelList(label, data) {\n if (!label) {\n return null;\n }\n\n if (label === true) {\n return React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data\n });\n }\n\n if (React.isValidElement(label) || _isFunction(label)) {\n return React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data,\n content: label\n });\n }\n\n if (_isObject(label)) {\n return React.createElement(LabelList, _extends({\n data: data\n }, label, {\n key: \"labelList-implicit\"\n }));\n }\n\n return null;\n};\n\nvar renderCallByParent = function renderCallByParent(parentProps, data) {\n var ckeckPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) {\n return null;\n }\n\n var children = parentProps.children;\n var explicitChilren = findAllByType(children, LabelList).map(function (child, index) {\n return cloneElement(child, {\n data: data,\n key: \"labelList-\".concat(index)\n });\n });\n\n if (!ckeckPropsLabel) {\n return explicitChilren;\n }\n\n var implicitLabelList = parseLabelList(parentProps.label, data);\n return [implicitLabelList].concat(_toConsumableArray(explicitChilren));\n};\n\nLabelList.renderCallByParent = renderCallByParent;\nLabelList.defaultProps = defaultProps;\nexport default LabelList;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Default Legend Content\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Surface from '../container/Surface';\nimport Symbols from '../shape/Symbols';\nimport { filterEventsOfChild, LEGEND_TYPES } from '../util/ReactUtils';\nvar SIZE = 32;\nvar ICON_TYPES = LEGEND_TYPES.filter(function (type) {\n return type !== 'none';\n});\n\nvar DefaultLegendContent = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(DefaultLegendContent, _Component);\n\n function DefaultLegendContent() {\n _classCallCheck(this, DefaultLegendContent);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DefaultLegendContent).apply(this, arguments));\n }\n\n _createClass(DefaultLegendContent, [{\n key: \"renderIcon\",\n\n /**\n * Render the path of icon\n * @param {Object} data Data of each legend item\n * @return {String} Path element\n */\n value: function renderIcon(data) {\n var inactiveColor = this.props.inactiveColor;\n var halfSize = SIZE / 2;\n var sixthSize = SIZE / 6;\n var thirdSize = SIZE / 3;\n var color = data.inactive ? inactiveColor : data.color;\n\n if (data.type === 'plainline') {\n return React.createElement(\"line\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n strokeDasharray: data.payload.strokeDasharray,\n x1: 0,\n y1: halfSize,\n x2: SIZE,\n y2: halfSize,\n className: \"recharts-legend-icon\"\n });\n }\n\n if (data.type === 'line') {\n return React.createElement(\"path\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n d: \"M0,\".concat(halfSize, \"h\").concat(thirdSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n H\").concat(SIZE, \"M\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(thirdSize, \",\").concat(halfSize),\n className: \"recharts-legend-icon\"\n });\n }\n\n if (data.type === 'rect') {\n return React.createElement(\"path\", {\n stroke: \"none\",\n fill: color,\n d: \"M0,\".concat(SIZE / 8, \"h\").concat(SIZE, \"v\").concat(SIZE * 3 / 4, \"h\").concat(-SIZE, \"z\"),\n className: \"recharts-legend-icon\"\n });\n }\n\n return React.createElement(Symbols, {\n fill: color,\n cx: halfSize,\n cy: halfSize,\n size: SIZE,\n sizeType: \"diameter\",\n type: data.type\n });\n }\n /**\n * Draw items of legend\n * @return {ReactElement} Items\n */\n\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this = this;\n\n var _this$props = this.props,\n payload = _this$props.payload,\n iconSize = _this$props.iconSize,\n layout = _this$props.layout,\n formatter = _this$props.formatter;\n var viewBox = {\n x: 0,\n y: 0,\n width: SIZE,\n height: SIZE\n };\n var itemStyle = {\n display: layout === 'horizontal' ? 'inline-block' : 'block',\n marginRight: 10\n };\n var svgStyle = {\n display: 'inline-block',\n verticalAlign: 'middle',\n marginRight: 4\n };\n return payload.map(function (entry, i) {\n var _classNames;\n\n var finalFormatter = entry.formatter || formatter;\n var className = classNames((_classNames = {\n 'recharts-legend-item': true\n }, _defineProperty(_classNames, \"legend-item-\".concat(i), true), _defineProperty(_classNames, \"inactive\", entry.inactive), _classNames));\n\n if (entry.type === 'none') {\n return null;\n }\n\n return React.createElement(\"li\", _extends({\n className: className,\n style: itemStyle,\n key: \"legend-item-\".concat(i)\n }, filterEventsOfChild(_this.props, entry, i)), React.createElement(Surface, {\n width: iconSize,\n height: iconSize,\n viewBox: viewBox,\n style: svgStyle\n }, _this.renderIcon(entry)), React.createElement(\"span\", {\n className: \"recharts-legend-item-text\"\n }, finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value));\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n payload = _this$props2.payload,\n layout = _this$props2.layout,\n align = _this$props2.align;\n\n if (!payload || !payload.length) {\n return null;\n }\n\n var finalStyle = {\n padding: 0,\n margin: 0,\n textAlign: layout === 'horizontal' ? align : 'left'\n };\n return React.createElement(\"ul\", {\n className: \"recharts-default-legend\",\n style: finalStyle\n }, this.renderItems());\n }\n }]);\n\n return DefaultLegendContent;\n}(Component), _class2.displayName = 'Legend', _class2.propTypes = {\n content: PropTypes.element,\n iconSize: PropTypes.number,\n iconType: PropTypes.oneOf(ICON_TYPES),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n align: PropTypes.oneOf(['center', 'left', 'right']),\n verticalAlign: PropTypes.oneOf(['top', 'bottom', 'middle']),\n payload: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.any,\n id: PropTypes.any,\n type: PropTypes.oneOf(LEGEND_TYPES)\n })),\n inactiveColor: PropTypes.string,\n formatter: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onClick: PropTypes.func\n}, _class2.defaultProps = {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'middle',\n inactiveColor: '#ccc'\n}, _temp)) || _class;\n\nexport default DefaultLegendContent;", + "import _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Legend\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\nimport DefaultLegendContent from './DefaultLegendContent';\nimport { isNumber } from '../util/DataUtils';\nimport { LEGEND_TYPES } from '../util/ReactUtils';\n\nvar defaultUniqBy = function defaultUniqBy(entry) {\n return entry.value;\n};\n\nvar getUniqPaylod = function getUniqPaylod(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n\n return payload;\n};\n\nvar renderContent = function renderContent(content, props) {\n if (React.isValidElement(content)) {\n return React.cloneElement(content, props);\n }\n\n if (_isFunction(content)) {\n return content(props);\n }\n\n return React.createElement(DefaultLegendContent, props);\n};\n\nvar EPS = 1;\nvar ICON_TYPES = LEGEND_TYPES.filter(function (type) {\n return type !== 'none';\n});\n\nvar Legend = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Legend, _Component);\n\n function Legend() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Legend);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Legend)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n boxWidth: -1,\n boxHeight: -1\n };\n return _this;\n }\n\n _createClass(Legend, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateBBox();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateBBox();\n }\n }, {\n key: \"getBBox\",\n value: function getBBox() {\n var _this$state = this.state,\n boxWidth = _this$state.boxWidth,\n boxHeight = _this$state.boxHeight;\n\n if (boxWidth >= 0 && boxHeight >= 0) {\n return {\n width: boxWidth,\n height: boxHeight\n };\n }\n\n return null;\n }\n }, {\n key: \"getDefaultPosition\",\n value: function getDefaultPosition(style) {\n var _this$props = this.props,\n layout = _this$props.layout,\n align = _this$props.align,\n verticalAlign = _this$props.verticalAlign,\n margin = _this$props.margin,\n chartWidth = _this$props.chartWidth,\n chartHeight = _this$props.chartHeight;\n var hPos, vPos;\n\n if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {\n if (align === 'center' && layout === 'vertical') {\n var box = this.getBBox() || {\n width: 0\n };\n hPos = {\n left: ((chartWidth || 0) - box.width) / 2\n };\n } else {\n hPos = align === 'right' ? {\n right: margin && margin.right || 0\n } : {\n left: margin && margin.left || 0\n };\n }\n }\n\n if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {\n if (verticalAlign === 'middle') {\n var _box = this.getBBox() || {\n height: 0\n };\n\n vPos = {\n top: ((chartHeight || 0) - _box.height) / 2\n };\n } else {\n vPos = verticalAlign === 'bottom' ? {\n bottom: margin && margin.bottom || 0\n } : {\n top: margin && margin.top || 0\n };\n }\n }\n\n return _objectSpread({}, hPos, vPos);\n }\n }, {\n key: \"updateBBox\",\n value: function updateBBox() {\n var _this$state2 = this.state,\n boxWidth = _this$state2.boxWidth,\n boxHeight = _this$state2.boxHeight;\n var onBBoxUpdate = this.props.onBBoxUpdate;\n\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n var box = this.wrapperNode.getBoundingClientRect();\n\n if (Math.abs(box.width - boxWidth) > EPS || Math.abs(box.height - boxHeight) > EPS) {\n this.setState({\n boxWidth: box.width,\n boxHeight: box.height\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(box);\n }\n });\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n this.setState({\n boxWidth: -1,\n boxHeight: -1\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(null);\n }\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n content = _this$props2.content,\n width = _this$props2.width,\n height = _this$props2.height,\n wrapperStyle = _this$props2.wrapperStyle,\n paylodUniqBy = _this$props2.paylodUniqBy,\n payload = _this$props2.payload;\n\n var outerStyle = _objectSpread({\n position: 'absolute',\n width: width || 'auto',\n height: height || 'auto'\n }, this.getDefaultPosition(wrapperStyle), wrapperStyle);\n\n return React.createElement(\"div\", {\n className: \"recharts-legend-wrapper\",\n style: outerStyle,\n ref: function ref(node) {\n _this2.wrapperNode = node;\n }\n }, renderContent(content, _objectSpread({}, this.props, {\n payload: getUniqPaylod(paylodUniqBy, payload)\n })));\n }\n }], [{\n key: \"getWithHeight\",\n value: function getWithHeight(item, chartWidth) {\n var layout = item.props.layout;\n\n if (layout === 'vertical' && isNumber(item.props.height)) {\n return {\n height: item.props.height\n };\n }\n\n if (layout === 'horizontal') {\n return {\n width: item.props.width || chartWidth\n };\n }\n\n return null;\n }\n }]);\n\n return Legend;\n}(Component), _class2.displayName = 'Legend', _class2.propTypes = {\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\n wrapperStyle: PropTypes.object,\n chartWidth: PropTypes.number,\n chartHeight: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n iconSize: PropTypes.number,\n iconType: PropTypes.oneOf(ICON_TYPES),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n align: PropTypes.oneOf(['center', 'left', 'right']),\n verticalAlign: PropTypes.oneOf(['top', 'bottom', 'middle']),\n margin: PropTypes.shape({\n top: PropTypes.number,\n left: PropTypes.number,\n bottom: PropTypes.number,\n right: PropTypes.number\n }),\n payload: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.any,\n id: PropTypes.any,\n type: PropTypes.oneOf(LEGEND_TYPES)\n })),\n paylodUniqBy: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n formatter: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onClick: PropTypes.func,\n onBBoxUpdate: PropTypes.func\n}, _class2.defaultProps = {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'bottom'\n}, _temp)) || _class;\n\nexport default Legend;", + "import _debounce from \"lodash/debounce\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Wrapper component to make charts adapt to the size of parent * DOM\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ReactResizeDetector from 'react-resize-detector';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\n\nvar ResponsiveContainer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ResponsiveContainer, _Component);\n\n function ResponsiveContainer(props) {\n var _this;\n\n _classCallCheck(this, ResponsiveContainer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveContainer).call(this, props));\n\n _this.updateDimensionsImmediate = function () {\n if (!_this.mounted) {\n return;\n }\n\n var newSize = _this.getContainerSize();\n\n if (newSize) {\n var _this$state = _this.state,\n oldWidth = _this$state.containerWidth,\n oldHeight = _this$state.containerHeight;\n var containerWidth = newSize.containerWidth,\n containerHeight = newSize.containerHeight;\n\n if (containerWidth !== oldWidth || containerHeight !== oldHeight) {\n _this.setState({\n containerWidth: containerWidth,\n containerHeight: containerHeight\n });\n }\n }\n };\n\n _this.state = {\n containerWidth: -1,\n containerHeight: -1\n };\n _this.handleResize = props.debounce > 0 ? _debounce(_this.updateDimensionsImmediate, props.debounce) : _this.updateDimensionsImmediate;\n return _this;\n }\n /* eslint-disable react/no-did-mount-set-state */\n\n\n _createClass(ResponsiveContainer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.mounted = true;\n var size = this.getContainerSize();\n\n if (size) {\n this.setState(size);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n }\n }, {\n key: \"getContainerSize\",\n value: function getContainerSize() {\n if (!this.container) {\n return null;\n }\n\n return {\n containerWidth: this.container.clientWidth,\n containerHeight: this.container.clientHeight\n };\n }\n }, {\n key: \"renderChart\",\n value: function renderChart() {\n var _this$state2 = this.state,\n containerWidth = _this$state2.containerWidth,\n containerHeight = _this$state2.containerHeight;\n\n if (containerWidth < 0 || containerHeight < 0) {\n return null;\n }\n\n var _this$props = this.props,\n aspect = _this$props.aspect,\n width = _this$props.width,\n height = _this$props.height,\n minWidth = _this$props.minWidth,\n minHeight = _this$props.minHeight,\n maxHeight = _this$props.maxHeight,\n children = _this$props.children;\n warn(isPercent(width) || isPercent(height), \"The width(%s) and height(%s) are both fixed numbers,\\n maybe you don't need to use a ResponsiveContainer.\", width, height);\n warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n var calculatedWidth = isPercent(width) ? containerWidth : width;\n var calculatedHeight = isPercent(height) ? containerHeight : height;\n\n if (aspect && aspect > 0) {\n // Preserve the desired aspect ratio\n calculatedHeight = calculatedWidth / aspect; // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n\n if (maxHeight && calculatedHeight > maxHeight) {\n calculatedHeight = maxHeight;\n }\n }\n\n warn(calculatedWidth > 0 || calculatedHeight > 0, \"The width(%s) and height(%s) of chart should be greater than 0,\\n please check the style of container, or the props width(%s) and height(%s),\\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\\n height and width.\", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);\n return React.cloneElement(children, {\n width: calculatedWidth,\n height: calculatedHeight\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n minWidth = _this$props2.minWidth,\n minHeight = _this$props2.minHeight,\n width = _this$props2.width,\n height = _this$props2.height,\n maxHeight = _this$props2.maxHeight,\n id = _this$props2.id,\n className = _this$props2.className;\n var style = {\n width: width,\n height: height,\n minWidth: minWidth,\n minHeight: minHeight,\n maxHeight: maxHeight\n };\n return React.createElement(\"div\", {\n id: id,\n className: classNames('recharts-responsive-container', className),\n style: style,\n ref: function ref(node) {\n _this2.container = node;\n }\n }, this.renderChart(), React.createElement(ReactResizeDetector, {\n handleWidth: true,\n handleHeight: true,\n onResize: this.handleResize\n }));\n }\n }]);\n\n return ResponsiveContainer;\n}(Component);\n\nResponsiveContainer.displayName = 'ResponsiveContainer';\nResponsiveContainer.propTypes = {\n aspect: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n children: PropTypes.node.isRequired,\n debounce: PropTypes.number,\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nResponsiveContainer.defaultProps = {\n width: '100%',\n height: '100%',\n debounce: 0\n};\nexport default ResponsiveContainer;", + "import _isNil from \"lodash/isNil\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport classNames from 'classnames';\nimport { isNumber, isNumOrStr } from '../util/DataUtils';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, isSsr } from '../util/ReactUtils';\nimport { getStringSize } from '../util/DOMUtils';\nvar BREAKING_SPACES = /[ \\f\\n\\r\\t\\v\\u2028\\u2029]+/;\n\nvar calculateWordWidths = function calculateWordWidths(props) {\n try {\n var words = !_isNil(props.children) ? props.children.toString().split(BREAKING_SPACES) : [];\n var wordsWithComputedWidth = words.map(function (word) {\n return {\n word: word,\n width: getStringSize(word, props.style).width\n };\n });\n var spaceWidth = getStringSize(\"\\xA0\", props.style).width;\n return {\n wordsWithComputedWidth: wordsWithComputedWidth,\n spaceWidth: spaceWidth\n };\n } catch (e) {\n return null;\n }\n};\n\nvar Text =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Text, _Component);\n\n function Text() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Text);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Text)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n wordsByLines: []\n };\n return _this;\n }\n\n _createClass(Text, [{\n key: \"componentWillMount\",\n value: function componentWillMount() {\n this.updateWordsByLines(this.props, true);\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var needCalculate = this.props.children !== nextProps.children || this.props.style !== nextProps.style;\n this.updateWordsByLines(nextProps, needCalculate);\n }\n }, {\n key: \"updateWordsByLines\",\n value: function updateWordsByLines(props, needCalculate) {\n // Only perform calculations if using features that require them (multiline, scaleToFit)\n if ((props.width || props.scaleToFit) && !isSsr()) {\n if (needCalculate) {\n var wordWidths = calculateWordWidths(props);\n\n if (wordWidths) {\n var wordsWithComputedWidth = wordWidths.wordsWithComputedWidth,\n spaceWidth = wordWidths.spaceWidth;\n this.wordsWithComputedWidth = wordsWithComputedWidth;\n this.spaceWidth = spaceWidth;\n } else {\n this.updateWordsWithoutCalculate(props);\n return;\n }\n }\n\n var wordsByLines = this.calculateWordsByLines(this.wordsWithComputedWidth, this.spaceWidth, props.width);\n this.setState({\n wordsByLines: wordsByLines\n });\n } else {\n this.updateWordsWithoutCalculate(props);\n }\n }\n }, {\n key: \"updateWordsWithoutCalculate\",\n value: function updateWordsWithoutCalculate(props) {\n var words = !_isNil(props.children) ? props.children.toString().split(BREAKING_SPACES) : [];\n this.setState({\n wordsByLines: [{\n words: words\n }]\n });\n }\n }, {\n key: \"calculateWordsByLines\",\n value: function calculateWordsByLines(wordsWithComputedWidth, spaceWidth, lineWidth) {\n var scaleToFit = this.props.scaleToFit;\n return wordsWithComputedWidth.reduce(function (result, _ref) {\n var word = _ref.word,\n width = _ref.width;\n var currentLine = result[result.length - 1];\n\n if (currentLine && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < lineWidth)) {\n // Word can be added to an existing line\n currentLine.words.push(word);\n currentLine.width += width + spaceWidth;\n } else {\n // Add first word to line or word is too long to scaleToFit on existing line\n var newLine = {\n words: [word],\n width: width\n };\n result.push(newLine);\n }\n\n return result;\n }, []);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n dx = _this$props.dx,\n dy = _this$props.dy,\n textAnchor = _this$props.textAnchor,\n verticalAnchor = _this$props.verticalAnchor,\n scaleToFit = _this$props.scaleToFit,\n angle = _this$props.angle,\n lineHeight = _this$props.lineHeight,\n capHeight = _this$props.capHeight,\n className = _this$props.className,\n textProps = _objectWithoutProperties(_this$props, [\"dx\", \"dy\", \"textAnchor\", \"verticalAnchor\", \"scaleToFit\", \"angle\", \"lineHeight\", \"capHeight\", \"className\"]);\n\n var wordsByLines = this.state.wordsByLines;\n\n if (!isNumOrStr(textProps.x) || !isNumOrStr(textProps.y)) {\n return null;\n }\n\n var x = textProps.x + (isNumber(dx) ? dx : 0);\n var y = textProps.y + (isNumber(dy) ? dy : 0);\n var startDy;\n\n switch (verticalAnchor) {\n case 'start':\n startDy = reduceCSSCalc(\"calc(\".concat(capHeight, \")\"));\n break;\n\n case 'middle':\n startDy = reduceCSSCalc(\"calc(\".concat((wordsByLines.length - 1) / 2, \" * -\").concat(lineHeight, \" + (\").concat(capHeight, \" / 2))\"));\n break;\n\n default:\n startDy = reduceCSSCalc(\"calc(\".concat(wordsByLines.length - 1, \" * -\").concat(lineHeight, \")\"));\n break;\n }\n\n var transforms = [];\n\n if (scaleToFit) {\n var lineWidth = wordsByLines[0].width;\n transforms.push(\"scale(\".concat(this.props.width / lineWidth, \")\"));\n }\n\n if (angle) {\n transforms.push(\"rotate(\".concat(angle, \", \").concat(x, \", \").concat(y, \")\"));\n }\n\n if (transforms.length) {\n textProps.transform = transforms.join(' ');\n }\n\n return React.createElement(\"text\", _extends({}, getPresentationAttributes(textProps), {\n x: x,\n y: y,\n className: classNames('recharts-text', className),\n textAnchor: textAnchor\n }), wordsByLines.map(function (line, index) {\n return React.createElement(\"tspan\", {\n x: x,\n dy: index === 0 ? startDy : lineHeight,\n key: index\n }, line.words.join(' '));\n }));\n }\n }]);\n\n return Text;\n}(Component);\n\nText.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n scaleToFit: PropTypes.bool,\n angle: PropTypes.number,\n textAnchor: PropTypes.oneOf(['start', 'middle', 'end', 'inherit']),\n verticalAnchor: PropTypes.oneOf(['start', 'middle', 'end']),\n style: PropTypes.object\n});\nText.defaultProps = {\n x: 0,\n y: 0,\n lineHeight: '1em',\n capHeight: '0.71em',\n // Magic number from d3\n scaleToFit: false,\n textAnchor: 'start',\n verticalAnchor: 'end' // Maintain compat with existing charts / default SVG behavior\n\n};\nexport default Text;", + "import _isArray from \"lodash/isArray\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { isNumOrStr } from '../util/DataUtils';\n\nvar defaultFormatter = function defaultFormatter(value) {\n return _isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;\n};\n\nvar DefaultTooltipContent = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(DefaultTooltipContent, _Component);\n\n function DefaultTooltipContent() {\n _classCallCheck(this, DefaultTooltipContent);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DefaultTooltipContent).apply(this, arguments));\n }\n\n _createClass(DefaultTooltipContent, [{\n key: \"renderContent\",\n value: function renderContent() {\n var _this$props = this.props,\n payload = _this$props.payload,\n separator = _this$props.separator,\n formatter = _this$props.formatter,\n itemStyle = _this$props.itemStyle,\n itemSorter = _this$props.itemSorter;\n\n if (payload && payload.length) {\n var listStyle = {\n padding: 0,\n margin: 0\n };\n var items = payload.sort(itemSorter).map(function (entry, i) {\n var finalItemStyle = _objectSpread({\n display: 'block',\n paddingTop: 4,\n paddingBottom: 4,\n color: entry.color || '#000'\n }, itemStyle);\n\n var finalFormatter = entry.formatter || formatter || defaultFormatter;\n var name = entry.name,\n value = entry.value;\n\n if (finalFormatter) {\n var formatted = finalFormatter(value, name, entry, i);\n\n if (Array.isArray(formatted)) {\n var _formatted = _slicedToArray(formatted, 2);\n\n value = _formatted[0];\n name = _formatted[1];\n } else {\n value = formatted;\n }\n }\n\n return React.createElement(\"li\", {\n className: \"recharts-tooltip-item\",\n key: \"tooltip-item-\".concat(i),\n style: finalItemStyle\n }, isNumOrStr(name) ? React.createElement(\"span\", {\n className: \"recharts-tooltip-item-name\"\n }, name) : null, isNumOrStr(name) ? React.createElement(\"span\", {\n className: \"recharts-tooltip-item-separator\"\n }, separator) : null, React.createElement(\"span\", {\n className: \"recharts-tooltip-item-value\"\n }, value), React.createElement(\"span\", {\n className: \"recharts-tooltip-item-unit\"\n }, entry.unit || ''));\n });\n return React.createElement(\"ul\", {\n className: \"recharts-tooltip-item-list\",\n style: listStyle\n }, items);\n }\n\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n wrapperClassName = _this$props2.wrapperClassName,\n contentStyle = _this$props2.contentStyle,\n labelClassName = _this$props2.labelClassName,\n labelStyle = _this$props2.labelStyle,\n label = _this$props2.label,\n labelFormatter = _this$props2.labelFormatter;\n\n var finalStyle = _objectSpread({\n margin: 0,\n padding: 10,\n backgroundColor: '#fff',\n border: '1px solid #ccc',\n whiteSpace: 'nowrap'\n }, contentStyle);\n\n var finalLabelStyle = _objectSpread({\n margin: 0\n }, labelStyle);\n\n var hasLabel = isNumOrStr(label);\n var finalLabel = hasLabel ? label : '';\n var wrapperCN = classNames('recharts-default-tooltip', wrapperClassName);\n var labelCN = classNames('recharts-tooltip-label', labelClassName);\n\n if (hasLabel && labelFormatter) {\n finalLabel = labelFormatter(label);\n }\n\n return React.createElement(\"div\", {\n className: wrapperCN,\n style: finalStyle\n }, React.createElement(\"p\", {\n className: labelCN,\n style: finalLabelStyle\n }, finalLabel), this.renderContent());\n }\n }]);\n\n return DefaultTooltipContent;\n}(Component), _class2.displayName = 'DefaultTooltipContent', _class2.propTypes = {\n separator: PropTypes.string,\n wrapperClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n formatter: PropTypes.func,\n contentStyle: PropTypes.object,\n itemStyle: PropTypes.object,\n labelStyle: PropTypes.object,\n labelFormatter: PropTypes.func,\n label: PropTypes.any,\n payload: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.any,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]),\n unit: PropTypes.any\n })),\n itemSorter: PropTypes.func\n}, _class2.defaultProps = {\n separator: ' : ',\n contentStyle: {},\n itemStyle: {},\n labelStyle: {}\n}, _temp)) || _class;\n\nexport default DefaultTooltipContent;", + "import _isNil from \"lodash/isNil\";\nimport _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Tooltip\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { translateStyle } from 'react-smooth';\nimport classNames from 'classnames';\nimport DefaultTooltipContent from './DefaultTooltipContent';\nimport { isSsr } from '../util/ReactUtils';\nimport { isNumber } from '../util/DataUtils';\nimport pureRender from '../util/PureRender';\nvar CLS_PREFIX = 'recharts-tooltip-wrapper';\nvar EPS = 1;\n\nvar defaultUniqBy = function defaultUniqBy(entry) {\n return entry.dataKey;\n};\n\nvar getUniqPaylod = function getUniqPaylod(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n\n return payload;\n};\n\nvar propTypes = {\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n active: PropTypes.bool,\n separator: PropTypes.string,\n formatter: PropTypes.func,\n offset: PropTypes.number,\n itemStyle: PropTypes.object,\n labelStyle: PropTypes.object,\n wrapperStyle: PropTypes.object,\n contentStyle: PropTypes.object,\n cursor: PropTypes.oneOfType([PropTypes.bool, PropTypes.element, PropTypes.object]),\n coordinate: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number\n }),\n position: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number\n }),\n label: PropTypes.any,\n payload: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.any,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]),\n unit: PropTypes.any\n })),\n paylodUniqBy: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n isAnimationActive: PropTypes.bool,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']),\n itemSorter: PropTypes.func,\n filterNull: PropTypes.bool,\n useTranslate3d: PropTypes.bool\n};\nvar defaultProps = {\n active: false,\n offset: 10,\n viewBox: {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n },\n coordinate: {\n x: 0,\n y: 0\n },\n cursorStyle: {},\n separator: ' : ',\n wrapperStyle: {},\n contentStyle: {},\n itemStyle: {},\n labelStyle: {},\n cursor: true,\n isAnimationActive: !isSsr(),\n animationEasing: 'ease',\n animationDuration: 400,\n itemSorter: function itemSorter() {\n return -1;\n },\n filterNull: true,\n useTranslate3d: false\n};\n\nvar renderContent = function renderContent(content, props) {\n if (React.isValidElement(content)) {\n return React.cloneElement(content, props);\n }\n\n if (_isFunction(content)) {\n return content(props);\n }\n\n return React.createElement(DefaultTooltipContent, props);\n};\n\nvar Tooltip = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Tooltip, _Component);\n\n function Tooltip() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Tooltip);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Tooltip)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n boxWidth: -1,\n boxHeight: -1\n };\n return _this;\n }\n\n _createClass(Tooltip, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateBBox();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateBBox();\n }\n }, {\n key: \"updateBBox\",\n value: function updateBBox() {\n var _this$state = this.state,\n boxWidth = _this$state.boxWidth,\n boxHeight = _this$state.boxHeight;\n\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n var box = this.wrapperNode.getBoundingClientRect();\n\n if (Math.abs(box.width - boxWidth) > EPS || Math.abs(box.height - boxHeight) > EPS) {\n this.setState({\n boxWidth: box.width,\n boxHeight: box.height\n });\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n this.setState({\n boxWidth: -1,\n boxHeight: -1\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames,\n _this2 = this;\n\n var _this$props = this.props,\n payload = _this$props.payload,\n isAnimationActive = _this$props.isAnimationActive,\n animationDuration = _this$props.animationDuration,\n animationEasing = _this$props.animationEasing,\n filterNull = _this$props.filterNull,\n paylodUniqBy = _this$props.paylodUniqBy;\n var finalPayload = getUniqPaylod(paylodUniqBy, filterNull && payload && payload.length ? payload.filter(function (entry) {\n return !_isNil(entry.value);\n }) : payload);\n var hasPayload = finalPayload && finalPayload.length;\n var _this$props2 = this.props,\n content = _this$props2.content,\n viewBox = _this$props2.viewBox,\n coordinate = _this$props2.coordinate,\n position = _this$props2.position,\n active = _this$props2.active,\n offset = _this$props2.offset,\n wrapperStyle = _this$props2.wrapperStyle;\n\n var outerStyle = _objectSpread({\n pointerEvents: 'none',\n visibility: active && hasPayload ? 'visible' : 'hidden',\n position: 'absolute',\n top: 0\n }, wrapperStyle);\n\n var translateX, translateY;\n\n if (position && isNumber(position.x) && isNumber(position.y)) {\n translateX = position.x;\n translateY = position.y;\n } else {\n var _this$state2 = this.state,\n boxWidth = _this$state2.boxWidth,\n boxHeight = _this$state2.boxHeight;\n\n if (boxWidth > 0 && boxHeight > 0 && coordinate) {\n translateX = position && isNumber(position.x) ? position.x : Math.max(coordinate.x + boxWidth + offset > viewBox.x + viewBox.width ? coordinate.x - boxWidth - offset : coordinate.x + offset, viewBox.x);\n translateY = position && isNumber(position.y) ? position.y : Math.max(coordinate.y + boxHeight + offset > viewBox.y + viewBox.height ? coordinate.y - boxHeight - offset : coordinate.y + offset, viewBox.y);\n } else {\n outerStyle.visibility = 'hidden';\n }\n }\n\n outerStyle = _objectSpread({}, outerStyle, translateStyle({\n transform: this.props.useTranslate3d ? \"translate3d(\".concat(translateX, \"px, \").concat(translateY, \"px, 0)\") : \"translate(\".concat(translateX, \"px, \").concat(translateY, \"px)\")\n }));\n\n if (isAnimationActive && active) {\n outerStyle = _objectSpread({}, outerStyle, translateStyle({\n transition: \"transform \".concat(animationDuration, \"ms \").concat(animationEasing)\n }));\n }\n\n var cls = classNames(CLS_PREFIX, (_classNames = {}, _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-right\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-left\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-bottom\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-top\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y), _classNames));\n return React.createElement(\"div\", {\n className: cls,\n style: outerStyle,\n ref: function ref(node) {\n _this2.wrapperNode = node;\n }\n }, renderContent(content, _objectSpread({}, this.props, {\n payload: finalPayload\n })));\n }\n }]);\n\n return Tooltip;\n}(Component), _class2.displayName = 'Tooltip', _class2.propTypes = propTypes, _class2.defaultProps = defaultProps, _temp)) || _class;\n\nexport default Tooltip;", + "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/**\n * @fileOverview Layer\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nvar propTypes = {\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nfunction Layer(props) {\n var children = props.children,\n className = props.className,\n others = _objectWithoutProperties(props, [\"children\", \"className\"]);\n\n var layerClass = classNames('recharts-layer', className);\n return React.createElement(\"g\", _extends({\n className: layerClass\n }, others), children);\n}\n\nLayer.propTypes = propTypes;\nexport default Layer;", + "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/**\n * @fileOverview Surface\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { getPresentationAttributes } from '../util/ReactUtils';\nvar propTypes = {\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n className: PropTypes.string,\n style: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nfunction Surface(props) {\n var children = props.children,\n width = props.width,\n height = props.height,\n viewBox = props.viewBox,\n className = props.className,\n style = props.style,\n others = _objectWithoutProperties(props, [\"children\", \"width\", \"height\", \"viewBox\", \"className\", \"style\"]);\n\n var svgView = viewBox || {\n width: width,\n height: height,\n x: 0,\n y: 0\n };\n var layerClass = classNames('recharts-surface', className);\n var attrs = getPresentationAttributes(others);\n return React.createElement(\"svg\", _extends({}, attrs, {\n className: layerClass,\n width: width,\n height: height,\n style: style,\n viewBox: \"\".concat(svgView.x, \" \").concat(svgView.y, \" \").concat(svgView.width, \" \").concat(svgView.height),\n version: \"1.1\"\n }), children);\n}\n\nSurface.propTypes = propTypes;\nexport default Surface;", + "import 'core-js/es6/math';\nimport 'core-js/es6/number';\n/* eslint no-proto: 0 */\n\nvar testObject = {};\n\nif (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf;\n\n Object.getPrototypeOf = function (object) {\n if (object.__proto__) {\n return object.__proto__;\n }\n\n return nativeGetPrototypeOf.call(Object, object);\n };\n}", + "import './polyfill';\nimport _Surface from './container/Surface';\nexport { _Surface as Surface };\nimport _Layer from './container/Layer';\nexport { _Layer as Layer };\nimport _Legend from './component/Legend';\nexport { _Legend as Legend };\nimport _Tooltip from './component/Tooltip';\nexport { _Tooltip as Tooltip };\nimport _ResponsiveContainer from './component/ResponsiveContainer';\nexport { _ResponsiveContainer as ResponsiveContainer };\nimport _Cell from './component/Cell';\nexport { _Cell as Cell };\nimport _Text from './component/Text';\nexport { _Text as Text };\nimport _Label from './component/Label';\nexport { _Label as Label };\nimport _LabelList from './component/LabelList';\nexport { _LabelList as LabelList };\nimport _Sector from './shape/Sector';\nexport { _Sector as Sector };\nimport _Curve from './shape/Curve';\nexport { _Curve as Curve };\nimport _Rectangle from './shape/Rectangle';\nexport { _Rectangle as Rectangle };\nimport _Polygon from './shape/Polygon';\nexport { _Polygon as Polygon };\nimport _Dot from './shape/Dot';\nexport { _Dot as Dot };\nimport _Cross from './shape/Cross';\nexport { _Cross as Cross };\nimport _Symbols from './shape/Symbols';\nexport { _Symbols as Symbols };\nimport _PolarGrid from './polar/PolarGrid';\nexport { _PolarGrid as PolarGrid };\nimport _PolarRadiusAxis from './polar/PolarRadiusAxis';\nexport { _PolarRadiusAxis as PolarRadiusAxis };\nimport _PolarAngleAxis from './polar/PolarAngleAxis';\nexport { _PolarAngleAxis as PolarAngleAxis };\nimport _Pie from './polar/Pie';\nexport { _Pie as Pie };\nimport _Radar from './polar/Radar';\nexport { _Radar as Radar };\nimport _RadialBar from './polar/RadialBar';\nexport { _RadialBar as RadialBar };\nimport _Brush from './cartesian/Brush';\nexport { _Brush as Brush };\nimport _ReferenceLine from './cartesian/ReferenceLine';\nexport { _ReferenceLine as ReferenceLine };\nimport _ReferenceDot from './cartesian/ReferenceDot';\nexport { _ReferenceDot as ReferenceDot };\nimport _ReferenceArea from './cartesian/ReferenceArea';\nexport { _ReferenceArea as ReferenceArea };\nimport _CartesianAxis from './cartesian/CartesianAxis';\nexport { _CartesianAxis as CartesianAxis };\nimport _CartesianGrid from './cartesian/CartesianGrid';\nexport { _CartesianGrid as CartesianGrid };\nimport _Line from './cartesian/Line';\nexport { _Line as Line };\nimport _Area from './cartesian/Area';\nexport { _Area as Area };\nimport _Bar from './cartesian/Bar';\nexport { _Bar as Bar };\nimport _Scatter from './cartesian/Scatter';\nexport { _Scatter as Scatter };\nimport _XAxis from './cartesian/XAxis';\nexport { _XAxis as XAxis };\nimport _YAxis from './cartesian/YAxis';\nexport { _YAxis as YAxis };\nimport _ZAxis from './cartesian/ZAxis';\nexport { _ZAxis as ZAxis };\nimport _ErrorBar from './cartesian/ErrorBar';\nexport { _ErrorBar as ErrorBar };\nimport _LineChart from './chart/LineChart';\nexport { _LineChart as LineChart };\nimport _BarChart from './chart/BarChart';\nexport { _BarChart as BarChart };\nimport _PieChart from './chart/PieChart';\nexport { _PieChart as PieChart };\nimport _Treemap from './chart/Treemap';\nexport { _Treemap as Treemap };\nimport _Sankey from './chart/Sankey';\nexport { _Sankey as Sankey };\nimport _RadarChart from './chart/RadarChart';\nexport { _RadarChart as RadarChart };\nimport _ScatterChart from './chart/ScatterChart';\nexport { _ScatterChart as ScatterChart };\nimport _AreaChart from './chart/AreaChart';\nexport { _AreaChart as AreaChart };\nimport _RadialBarChart from './chart/RadialBarChart';\nexport { _RadialBarChart as RadialBarChart };\nimport _ComposedChart from './chart/ComposedChart';\nexport { _ComposedChart as ComposedChart };\nimport _Funnel from './numberAxis/Funnel';\nexport { _Funnel as Funnel };\nimport _FunnelChart from './chart/FunnelChart';\nexport { _FunnelChart as FunnelChart };\nimport _Trapezoid from './shape/Trapezoid';\nexport { _Trapezoid as Trapezoid };", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Cross\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { isNumber } from '../util/DataUtils';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes } from '../util/ReactUtils';\n\nvar Cross = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Cross, _Component);\n\n function Cross() {\n _classCallCheck(this, Cross);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Cross).apply(this, arguments));\n }\n\n _createClass(Cross, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n width = _this$props.width,\n height = _this$props.height,\n top = _this$props.top,\n left = _this$props.left,\n className = _this$props.className;\n\n if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {\n return null;\n }\n\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), {\n className: classNames('recharts-cross', className),\n d: this.constructor.getPath(x, y, width, height, top, left)\n }));\n }\n }], [{\n key: \"getPath\",\n value: function getPath(x, y, width, height, top, left) {\n return \"M\".concat(x, \",\").concat(top, \"v\").concat(height, \"M\").concat(left, \",\").concat(y, \"h\").concat(width);\n }\n }]);\n\n return Cross;\n}(Component), _class2.displayName = 'Cross', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n top: PropTypes.number,\n left: PropTypes.number,\n className: PropTypes.string\n}), _class2.defaultProps = {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n width: 0,\n height: 0\n}, _temp)) || _class;\n\nexport default Cross;", + "import _isArray from \"lodash/isArray\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Curve\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'd3-shape';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport { isNumber } from '../util/DataUtils';\nvar CURVE_FACTORIES = {\n curveBasisClosed: curveBasisClosed,\n curveBasisOpen: curveBasisOpen,\n curveBasis: curveBasis,\n curveLinearClosed: curveLinearClosed,\n curveLinear: curveLinear,\n curveMonotoneX: curveMonotoneX,\n curveMonotoneY: curveMonotoneY,\n curveNatural: curveNatural,\n curveStep: curveStep,\n curveStepAfter: curveStepAfter,\n curveStepBefore: curveStepBefore\n};\n\nvar defined = function defined(p) {\n return p.x === +p.x && p.y === +p.y;\n};\n\nvar getX = function getX(p) {\n return p.x;\n};\n\nvar getY = function getY(p) {\n return p.y;\n};\n\nvar getCurveFactory = function getCurveFactory(type, layout) {\n if (_isFunction(type)) {\n return type;\n }\n\n var name = \"curve\".concat(type.slice(0, 1).toUpperCase()).concat(type.slice(1));\n\n if (name === 'curveMonotone' && layout) {\n return CURVE_FACTORIES[\"\".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];\n }\n\n return CURVE_FACTORIES[name] || curveLinear;\n};\n\nvar Curve = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Curve, _Component);\n\n function Curve() {\n _classCallCheck(this, Curve);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Curve).apply(this, arguments));\n }\n\n _createClass(Curve, [{\n key: \"getPath\",\n\n /**\n * Calculate the path of curve\n * @return {String} path\n */\n value: function getPath() {\n var _this$props = this.props,\n type = _this$props.type,\n points = _this$props.points,\n baseLine = _this$props.baseLine,\n layout = _this$props.layout,\n connectNulls = _this$props.connectNulls;\n var curveFactory = getCurveFactory(type, layout);\n var formatPoints = connectNulls ? points.filter(function (entry) {\n return defined(entry);\n }) : points;\n var lineFunction;\n\n if (_isArray(baseLine)) {\n var formatBaseLine = connectNulls ? baseLine.filter(function (base) {\n return defined(base);\n }) : baseLine;\n var areaPoints = formatPoints.map(function (entry, index) {\n return _objectSpread({}, entry, {\n base: formatBaseLine[index]\n });\n });\n\n if (layout === 'vertical') {\n lineFunction = shapeArea().y(getY).x1(getX).x0(function (d) {\n return d.base.x;\n });\n } else {\n lineFunction = shapeArea().x(getX).y1(getY).y0(function (d) {\n return d.base.y;\n });\n }\n\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(areaPoints);\n }\n\n if (layout === 'vertical' && isNumber(baseLine)) {\n lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);\n } else if (isNumber(baseLine)) {\n lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);\n } else {\n lineFunction = shapeLine().x(getX).y(getY);\n }\n\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(formatPoints);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n points = _this$props2.points,\n path = _this$props2.path,\n pathRef = _this$props2.pathRef;\n\n if ((!points || !points.length) && !path) {\n return null;\n }\n\n var realPath = points && points.length ? this.getPath() : path;\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props, null, true), {\n className: classNames('recharts-curve', className),\n d: realPath,\n ref: pathRef\n }));\n }\n }]);\n\n return Curve;\n}(Component), _class2.displayName = 'Curve', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n type: PropTypes.oneOfType([PropTypes.oneOf(['basis', 'basisClosed', 'basisOpen', 'linear', 'linearClosed', 'natural', 'monotoneX', 'monotoneY', 'monotone', 'step', 'stepBefore', 'stepAfter']), PropTypes.func]),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n baseLine: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n points: PropTypes.arrayOf(PropTypes.object),\n connectNulls: PropTypes.bool,\n path: PropTypes.string,\n pathRef: PropTypes.func\n}), _class2.defaultProps = {\n type: 'linear',\n points: [],\n connectNulls: false\n}, _temp)) || _class;\n\nexport default Curve;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Dot\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\n\nvar Dot = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Dot, _Component);\n\n function Dot() {\n _classCallCheck(this, Dot);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Dot).apply(this, arguments));\n }\n\n _createClass(Dot, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n cx = _this$props.cx,\n cy = _this$props.cy,\n r = _this$props.r,\n className = _this$props.className;\n var layerClass = classNames('recharts-dot', className);\n\n if (cx === +cx && cy === +cy && r === +r) {\n return React.createElement(\"circle\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props, null, true), {\n className: layerClass,\n cx: cx,\n cy: cy,\n r: r\n }));\n }\n\n return null;\n }\n }]);\n\n return Dot;\n}(Component), _class2.displayName = 'Dot', _class2.propTypes = {\n className: PropTypes.string,\n cx: PropTypes.number,\n cy: PropTypes.number,\n r: PropTypes.number\n}, _temp)) || _class;\n\nexport default Dot;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Rectangle\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Animate from 'react-smooth';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\n\nvar getRectangePath = function getRectangePath(x, y, width, height, radius) {\n var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n var ySign = height >= 0 ? 1 : -1;\n var xSign = width >= 0 ? 1 : -1;\n var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;\n var path;\n\n if (maxRadius > 0 && radius instanceof Array) {\n var newRadius = [];\n\n for (var i = 0, len = 4; i < len; i++) {\n newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n }\n\n path = \"M\".concat(x, \",\").concat(y + ySign * newRadius[0]);\n\n if (newRadius[0] > 0) {\n path += \"A \".concat(newRadius[0], \",\").concat(newRadius[0], \",0,0,\").concat(clockWise, \",\").concat(x + xSign * newRadius[0], \",\").concat(y);\n }\n\n path += \"L \".concat(x + width - xSign * newRadius[1], \",\").concat(y);\n\n if (newRadius[1] > 0) {\n path += \"A \".concat(newRadius[1], \",\").concat(newRadius[1], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width, \",\").concat(y + ySign * newRadius[1]);\n }\n\n path += \"L \".concat(x + width, \",\").concat(y + height - ySign * newRadius[2]);\n\n if (newRadius[2] > 0) {\n path += \"A \".concat(newRadius[2], \",\").concat(newRadius[2], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width - xSign * newRadius[2], \",\").concat(y + height);\n }\n\n path += \"L \".concat(x + xSign * newRadius[3], \",\").concat(y + height);\n\n if (newRadius[3] > 0) {\n path += \"A \".concat(newRadius[3], \",\").concat(newRadius[3], \",0,0,\").concat(clockWise, \",\\n \").concat(x, \",\").concat(y + height - ySign * newRadius[3]);\n }\n\n path += 'Z';\n } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n var _newRadius = Math.min(maxRadius, radius);\n\n path = \"M \".concat(x, \",\").concat(y + ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + xSign * _newRadius, \",\").concat(y, \"\\n L \").concat(x + width - xSign * _newRadius, \",\").concat(y, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width, \",\").concat(y + ySign * _newRadius, \"\\n L \").concat(x + width, \",\").concat(y + height - ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width - xSign * _newRadius, \",\").concat(y + height, \"\\n L \").concat(x + xSign * _newRadius, \",\").concat(y + height, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x, \",\").concat(y + height - ySign * _newRadius, \" Z\");\n } else {\n path = \"M \".concat(x, \",\").concat(y, \" h \").concat(width, \" v \").concat(height, \" h \").concat(-width, \" Z\");\n }\n\n return path;\n};\n\nvar Rectangle = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Rectangle, _Component);\n\n function Rectangle() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Rectangle);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Rectangle)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n totalLength: -1\n };\n return _this;\n }\n\n _createClass(Rectangle, [{\n key: \"componentDidMount\",\n\n /* eslint-disable react/no-did-mount-set-state */\n value: function componentDidMount() {\n if (this.node && this.node.getTotalLength) {\n try {\n var totalLength = this.node.getTotalLength();\n\n if (totalLength) {\n this.setState({\n totalLength: totalLength\n });\n }\n } catch (err) {// calculate total length error\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n width = _this$props.width,\n height = _this$props.height,\n radius = _this$props.radius,\n className = _this$props.className;\n var totalLength = this.state.totalLength;\n var _this$props2 = this.props,\n animationEasing = _this$props2.animationEasing,\n animationDuration = _this$props2.animationDuration,\n animationBegin = _this$props2.animationBegin,\n isAnimationActive = _this$props2.isAnimationActive,\n isUpdateAnimationActive = _this$props2.isUpdateAnimationActive;\n\n if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {\n return null;\n }\n\n var layerClass = classNames('recharts-rectangle', className);\n\n if (!isUpdateAnimationActive) {\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: layerClass,\n d: getRectangePath(x, y, width, height, radius)\n }));\n }\n\n return React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n to: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n duration: animationDuration,\n animationEasing: animationEasing,\n isActive: isUpdateAnimationActive\n }, function (_ref) {\n var currWidth = _ref.width,\n currHeight = _ref.height,\n currX = _ref.x,\n currY = _ref.y;\n return React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: \"0px \".concat(totalLength === -1 ? 1 : totalLength, \"px\"),\n to: \"\".concat(totalLength, \"px 0px\"),\n attributeName: \"strokeDasharray\",\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing\n }, React.createElement(\"path\", _extends({}, getPresentationAttributes(_this2.props), filterEventAttributes(_this2.props), {\n className: layerClass,\n d: getRectangePath(currX, currY, currWidth, currHeight, radius),\n ref: function ref(node) {\n _this2.node = node;\n }\n })));\n });\n }\n }]);\n\n return Rectangle;\n}(Component), _class2.displayName = 'Rectangle', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n radius: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n isAnimationActive: PropTypes.bool,\n isUpdateAnimationActive: PropTypes.bool,\n animationBegin: PropTypes.number,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear'])\n}), _class2.defaultProps = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n // The radius of border\n // The radius of four corners when radius is a number\n // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array\n radius: 0,\n isAnimationActive: false,\n isUpdateAnimationActive: false,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n}, _temp)) || _class;\n\nexport default Rectangle;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Sector\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport { polarToCartesian, RADIAN } from '../util/PolarUtils';\nimport { getPercentValue, mathSign } from '../util/DataUtils';\n\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);\n return sign * deltaAngle;\n};\n\nvar getTangentCircle = function getTangentCircle(_ref) {\n var cx = _ref.cx,\n cy = _ref.cy,\n radius = _ref.radius,\n angle = _ref.angle,\n sign = _ref.sign,\n isExternal = _ref.isExternal,\n cornerRadius = _ref.cornerRadius;\n var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;\n var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;\n var centerAngle = angle + sign * theta;\n var center = polarToCartesian(cx, cy, centerRadius, centerAngle); // The coordinate of point which is tangent to the circle\n\n var circleTangency = polarToCartesian(cx, cy, radius, centerAngle); // The coordinate of point which is tangent to the radius line\n\n var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), angle);\n return {\n center: center,\n circleTangency: circleTangency,\n lineTangency: lineTangency,\n theta: theta\n };\n};\n\nvar getSectorPath = function getSectorPath(_ref2) {\n var cx = _ref2.cx,\n cy = _ref2.cy,\n innerRadius = _ref2.innerRadius,\n outerRadius = _ref2.outerRadius,\n startAngle = _ref2.startAngle,\n endAngle = _ref2.endAngle;\n var angle = getDeltaAngle(startAngle, endAngle); // When the angle of sector equals to 360, star point and end point coincide\n\n var tempEndAngle = startAngle + angle;\n var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);\n var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);\n var path = \"M \".concat(outerStartPoint.x, \",\").concat(outerStartPoint.y, \"\\n A \").concat(outerRadius, \",\").concat(outerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle > tempEndAngle), \",\\n \").concat(outerEndPoint.x, \",\").concat(outerEndPoint.y, \"\\n \");\n\n if (innerRadius > 0) {\n var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);\n var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);\n path += \"L \".concat(innerEndPoint.x, \",\").concat(innerEndPoint.y, \"\\n A \").concat(innerRadius, \",\").concat(innerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle <= tempEndAngle), \",\\n \").concat(innerStartPoint.x, \",\").concat(innerStartPoint.y, \" Z\");\n } else {\n path += \"L \".concat(cx, \",\").concat(cy, \" Z\");\n }\n\n return path;\n};\n\nvar getSectorWithCorner = function getSectorWithCorner(_ref3) {\n var cx = _ref3.cx,\n cy = _ref3.cy,\n innerRadius = _ref3.innerRadius,\n outerRadius = _ref3.outerRadius,\n cornerRadius = _ref3.cornerRadius,\n startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var sign = mathSign(endAngle - startAngle);\n\n var _getTangentCircle = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: startAngle,\n sign: sign,\n cornerRadius: cornerRadius\n }),\n soct = _getTangentCircle.circleTangency,\n solt = _getTangentCircle.lineTangency,\n sot = _getTangentCircle.theta;\n\n var _getTangentCircle2 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: endAngle,\n sign: -sign,\n cornerRadius: cornerRadius\n }),\n eoct = _getTangentCircle2.circleTangency,\n eolt = _getTangentCircle2.lineTangency,\n eot = _getTangentCircle2.theta;\n\n var outerArcAngle = Math.abs(startAngle - endAngle) - sot - eot;\n\n if (outerArcAngle < 0) {\n return getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n\n var path = \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(soct.x, \",\").concat(soct.y, \"\\n A\").concat(outerRadius, \",\").concat(outerRadius, \",0,\").concat(+(outerArcAngle > 180), \",\").concat(+(sign < 0), \",\").concat(eoct.x, \",\").concat(eoct.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eolt.x, \",\").concat(eolt.y, \"\\n \");\n\n if (innerRadius > 0) {\n var _getTangentCircle3 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: startAngle,\n sign: sign,\n isExternal: true,\n cornerRadius: cornerRadius\n }),\n sict = _getTangentCircle3.circleTangency,\n silt = _getTangentCircle3.lineTangency,\n sit = _getTangentCircle3.theta;\n\n var _getTangentCircle4 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: endAngle,\n sign: -sign,\n isExternal: true,\n cornerRadius: cornerRadius\n }),\n eict = _getTangentCircle4.circleTangency,\n eilt = _getTangentCircle4.lineTangency,\n eit = _getTangentCircle4.theta;\n\n var innerArcAngle = Math.abs(startAngle - endAngle) - sit - eit;\n\n if (innerArcAngle < 0) {\n return \"\".concat(path, \"L\").concat(cx, \",\").concat(cy, \"Z\");\n }\n\n path += \"L\".concat(eilt.x, \",\").concat(eilt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eict.x, \",\").concat(eict.y, \"\\n A\").concat(innerRadius, \",\").concat(innerRadius, \",0,\").concat(+(innerArcAngle > 180), \",\").concat(+(sign > 0), \",\").concat(sict.x, \",\").concat(sict.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(silt.x, \",\").concat(silt.y, \"Z\");\n } else {\n path += \"L\".concat(cx, \",\").concat(cy, \"Z\");\n }\n\n return path;\n};\n\nvar Sector = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Sector, _Component);\n\n function Sector() {\n _classCallCheck(this, Sector);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Sector).apply(this, arguments));\n }\n\n _createClass(Sector, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n cx = _this$props.cx,\n cy = _this$props.cy,\n innerRadius = _this$props.innerRadius,\n outerRadius = _this$props.outerRadius,\n cornerRadius = _this$props.cornerRadius,\n startAngle = _this$props.startAngle,\n endAngle = _this$props.endAngle,\n className = _this$props.className;\n\n if (outerRadius < innerRadius || startAngle === endAngle) {\n return null;\n }\n\n var layerClass = classNames('recharts-sector', className);\n var deltaRadius = outerRadius - innerRadius;\n var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);\n var path;\n\n if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {\n path = getSectorWithCorner({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n cornerRadius: Math.min(cr, deltaRadius / 2),\n startAngle: startAngle,\n endAngle: endAngle\n });\n } else {\n path = getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: layerClass,\n d: path\n }));\n }\n }]);\n\n return Sector;\n}(Component), _class2.displayName = 'Sector', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n cx: PropTypes.number,\n cy: PropTypes.number,\n innerRadius: PropTypes.number,\n outerRadius: PropTypes.number,\n startAngle: PropTypes.number,\n endAngle: PropTypes.number,\n cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n}), _class2.defaultProps = {\n cx: 0,\n cy: 0,\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n cornerRadius: 0\n}, _temp)) || _class;\n\nexport default Sector;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Curve\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { symbol as shapeSymbol, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from 'd3-shape';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nvar SYMBOL_FACTORIES = {\n symbolCircle: symbolCircle,\n symbolCross: symbolCross,\n symbolDiamond: symbolDiamond,\n symbolSquare: symbolSquare,\n symbolStar: symbolStar,\n symbolTriangle: symbolTriangle,\n symbolWye: symbolWye\n};\nvar RADIAN = Math.PI / 180;\n\nvar getSymbolFactory = function getSymbolFactory(type) {\n var name = \"symbol\".concat(type.slice(0, 1).toUpperCase()).concat(type.slice(1));\n return SYMBOL_FACTORIES[name] || symbolCircle;\n};\n\nvar calculateAreaSize = function calculateAreaSize(size, sizeType, type) {\n if (sizeType === 'area') {\n return size;\n }\n\n switch (type) {\n case 'cross':\n return 5 * size * size / 9;\n\n case 'diamond':\n return 0.5 * size * size / Math.sqrt(3);\n\n case 'square':\n return size * size;\n\n case 'star':\n {\n var angle = 18 * RADIAN;\n return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.pow(Math.tan(angle), 2));\n }\n\n case 'triangle':\n return Math.sqrt(3) * size * size / 4;\n\n case 'wye':\n return (21 - 10 * Math.sqrt(3)) * size * size / 8;\n\n default:\n return Math.PI * size * size / 4;\n }\n};\n\nvar Symbols = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Symbols, _Component);\n\n function Symbols() {\n _classCallCheck(this, Symbols);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Symbols).apply(this, arguments));\n }\n\n _createClass(Symbols, [{\n key: \"getPath\",\n\n /**\n * Calculate the path of curve\n * @return {String} path\n */\n value: function getPath() {\n var _this$props = this.props,\n size = _this$props.size,\n sizeType = _this$props.sizeType,\n type = _this$props.type;\n var symbolFactory = getSymbolFactory(type);\n var symbol = shapeSymbol().type(symbolFactory).size(calculateAreaSize(size, sizeType, type));\n return symbol();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n cx = _this$props2.cx,\n cy = _this$props2.cy,\n size = _this$props2.size;\n\n if (cx === +cx && cy === +cy && size === +size) {\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: classNames('recharts-symbols', className),\n transform: \"translate(\".concat(cx, \", \").concat(cy, \")\"),\n d: this.getPath()\n }));\n }\n\n return null;\n }\n }]);\n\n return Symbols;\n}(Component), _class2.displayName = 'Symbols', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n type: PropTypes.oneOf(['circle', 'cross', 'diamond', 'square', 'star', 'triangle', 'wye']),\n cx: PropTypes.number,\n cy: PropTypes.number,\n size: PropTypes.number,\n sizeType: PropTypes.oneOf(['area', 'diameter'])\n}), _class2.defaultProps = {\n type: 'circle',\n size: 64,\n sizeType: 'area'\n}, _temp)) || _class;\n\nexport default Symbols;", + "import _every from \"lodash/every\";\nimport _mapValues from \"lodash/mapValues\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getTicksOfScale, parseScale, checkDomainOfScale, getBandSizeOfAxis } from './ChartUtils';\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {String} axisType The type of axes, x-axis or y-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\n\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height,\n layout = props.layout;\n var ids = Object.keys(axisMap);\n var steps = {\n left: offset.left,\n leftMirror: offset.left,\n right: width - offset.right,\n rightMirror: width - offset.right,\n top: offset.top,\n topMirror: offset.top,\n bottom: height - offset.bottom,\n bottomMirror: height - offset.bottom\n };\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var orientation = axis.orientation,\n domain = axis.domain,\n _axis$padding = axis.padding,\n padding = _axis$padding === void 0 ? {} : _axis$padding,\n mirror = axis.mirror,\n reversed = axis.reversed;\n var offsetKey = \"\".concat(orientation).concat(mirror ? 'Mirror' : '');\n var range, x, y, needSpace;\n\n if (axisType === 'xAxis') {\n range = [offset.left + (padding.left || 0), offset.left + offset.width - (padding.right || 0)];\n } else if (axisType === 'yAxis') {\n range = layout === 'horizontal' ? [offset.top + offset.height - (padding.bottom || 0), offset.top + (padding.top || 0)] : [offset.top + (padding.top || 0), offset.top + offset.height - (padding.bottom || 0)];\n } else {\n range = axis.range;\n }\n\n if (reversed) {\n range = [range[1], range[0]];\n }\n\n var _parseScale = parseScale(axis, chartName),\n scale = _parseScale.scale,\n realScaleType = _parseScale.realScaleType;\n\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread({}, axis, {\n realScaleType: realScaleType\n }));\n\n if (axisType === 'xAxis') {\n needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n x = offset.left;\n y = steps[offsetKey] - needSpace * axis.height;\n } else if (axisType === 'yAxis') {\n needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n x = steps[offsetKey] - needSpace * axis.width;\n y = offset.top;\n }\n\n var finalAxis = _objectSpread({}, axis, ticks, {\n realScaleType: realScaleType,\n x: x,\n y: y,\n scale: scale,\n width: axisType === 'xAxis' ? offset.width : axis.width,\n height: axisType === 'yAxis' ? offset.height : axis.height\n });\n\n finalAxis.bandSize = getBandSizeOfAxis(finalAxis, ticks);\n\n if (!axis.hide && axisType === 'xAxis') {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.height;\n } else if (!axis.hide) {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.width;\n }\n\n return _objectSpread({}, result, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var rectWithPoints = function rectWithPoints(_ref, _ref2) {\n var x1 = _ref.x,\n y1 = _ref.y;\n var x2 = _ref2.x,\n y2 = _ref2.y;\n return {\n x: Math.min(x1, x2),\n y: Math.min(y1, y2),\n width: Math.abs(x2 - x1),\n height: Math.abs(y2 - y1)\n };\n};\n/**\n * Compute the x, y, width, and height of a box from two reference points.\n * @param {Object} coords x1, x2, y1, and y2\n * @return {Object} object\n */\n\nexport var rectWithCoords = function rectWithCoords(_ref3) {\n var x1 = _ref3.x1,\n y1 = _ref3.y1,\n x2 = _ref3.x2,\n y2 = _ref3.y2;\n return rectWithPoints({\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n });\n};\nexport var ScaleHelper =\n/*#__PURE__*/\nfunction () {\n _createClass(ScaleHelper, null, [{\n key: \"create\",\n value: function create(obj) {\n return new ScaleHelper(obj);\n }\n }]);\n\n function ScaleHelper(scale) {\n _classCallCheck(this, ScaleHelper);\n\n this.scale = scale;\n }\n\n _createClass(ScaleHelper, [{\n key: \"apply\",\n value: function apply(value) {\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref4.bandAware;\n\n if (value === undefined) {\n return undefined;\n }\n\n if (bandAware) {\n var offset = this.bandwidth ? this.bandwidth() / 2 : 0;\n return this.scale(value) + offset;\n }\n\n return this.scale(value);\n }\n }, {\n key: \"isInRange\",\n value: function isInRange(value) {\n var range = this.range();\n var first = range[0];\n var last = range[range.length - 1];\n return first <= last ? value >= first && value <= last : value >= last && value <= first;\n }\n }, {\n key: \"domain\",\n get: function get() {\n return this.scale.domain;\n }\n }, {\n key: \"range\",\n get: function get() {\n return this.scale.range;\n }\n }, {\n key: \"rangeMin\",\n get: function get() {\n return this.range()[0];\n }\n }, {\n key: \"rangeMax\",\n get: function get() {\n return this.range()[1];\n }\n }, {\n key: \"bandwidth\",\n get: function get() {\n return this.scale.bandwidth;\n }\n }]);\n\n return ScaleHelper;\n}();\nScaleHelper.EPS = 1e-4;\nexport var LabeledScaleHelper =\n/*#__PURE__*/\nfunction () {\n _createClass(LabeledScaleHelper, null, [{\n key: \"create\",\n value: function create(obj) {\n return new this(obj);\n }\n }]);\n\n function LabeledScaleHelper(scales) {\n _classCallCheck(this, LabeledScaleHelper);\n\n this.scales = _mapValues(scales, ScaleHelper.create);\n Object.assign(this, this.scales);\n }\n\n _createClass(LabeledScaleHelper, [{\n key: \"apply\",\n value: function apply(coords) {\n var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref5.bandAware;\n\n var scales = this.scales;\n return _mapValues(coords, function (value, label) {\n return scales[label].apply(value, {\n bandAware: bandAware\n });\n });\n }\n }, {\n key: \"isInRange\",\n value: function isInRange(coords) {\n var scales = this.scales;\n return _every(coords, function (value, label) {\n return scales[label].isInRange(value);\n });\n }\n }]);\n\n return LabeledScaleHelper;\n}();", + "import _isEqual from \"lodash/isEqual\";\nimport _sortBy from \"lodash/sortBy\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isString from \"lodash/isString\";\nimport _max from \"lodash/max\";\nimport _min from \"lodash/min\";\nimport _isArray from \"lodash/isArray\";\nimport _flatMap from \"lodash/flatMap\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getNiceTickValues, getTickValuesFixedDomain } from 'recharts-scale';\nimport * as d3Scales from 'd3-scale';\nimport { stack as shapeStack, stackOrderNone, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle } from 'd3-shape';\nimport { isNumOrStr, uniqueId, isNumber, getPercentValue, mathSign, findEntryInArray } from './DataUtils';\nimport ReferenceDot from '../cartesian/ReferenceDot';\nimport ReferenceLine from '../cartesian/ReferenceLine';\nimport ReferenceArea from '../cartesian/ReferenceArea';\nimport ErrorBar from '../cartesian/ErrorBar';\nimport Legend from '../component/Legend';\nimport { findAllByType, findChildByType, getDisplayName } from './ReactUtils';\nexport var getValueByDataKey = function getValueByDataKey(obj, dataKey, defaultValue) {\n if (_isNil(obj) || _isNil(dataKey)) {\n return defaultValue;\n }\n\n if (isNumOrStr(dataKey)) {\n return _get(obj, dataKey, defaultValue);\n }\n\n if (_isFunction(dataKey)) {\n return dataKey(obj);\n }\n\n return defaultValue;\n};\n/**\n * Get domain of data by key\n * @param {Array} data The data displayed in the chart\n * @param {String} key The unique key of a group of data\n * @param {String} type The type of axis\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain of data\n */\n\nexport var getDomainOfDataByKey = function getDomainOfDataByKey(data, key, type, filterNil) {\n var flattenData = _flatMap(data, function (entry) {\n return getValueByDataKey(entry, key);\n });\n\n if (type === 'number') {\n var domain = flattenData.filter(function (entry) {\n return isNumber(entry) || parseFloat(entry, 10);\n });\n return [Math.min.apply(null, domain), Math.max.apply(null, domain)];\n }\n\n var validateData = filterNil ? flattenData.filter(function (entry) {\n return !_isNil(entry);\n }) : flattenData;\n return validateData.map(function (entry) {\n return isNumOrStr(entry) ? entry : '';\n });\n};\nexport var calculateActiveTickIndex = function calculateActiveTickIndex(coordinate, ticks, unsortedTicks, axis) {\n var index = -1;\n var len = ticks.length;\n\n if (len > 1) {\n if (axis && axis.axisType === 'angleAxis' && Math.abs(Math.abs(axis.range[1] - axis.range[0]) - 360) <= 1e-6) {\n var range = axis.range; // ticks are distributed in a circle\n\n for (var i = 0; i < len; i++) {\n var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;\n var cur = unsortedTicks[i].coordinate;\n var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;\n var sameDirectionCoord = void 0;\n\n if (mathSign(cur - before) !== mathSign(after - cur)) {\n var diffInterval = [];\n\n if (mathSign(after - cur) === mathSign(range[1] - range[0])) {\n sameDirectionCoord = after;\n var curInRange = cur + range[1] - range[0];\n diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);\n diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);\n } else {\n sameDirectionCoord = before;\n var afterInRange = after + range[1] - range[0];\n diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);\n diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);\n }\n\n var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];\n\n if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {\n index = unsortedTicks[i].index;\n break;\n }\n } else {\n var min = Math.min(before, after);\n var max = Math.max(before, after);\n\n if (coordinate > (min + cur) / 2 && coordinate <= (max + cur) / 2) {\n index = unsortedTicks[i].index;\n break;\n }\n }\n }\n } else {\n // ticks are distributed in a single direction\n for (var _i = 0; _i < len; _i++) {\n if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {\n index = ticks[_i].index;\n break;\n }\n }\n }\n } else {\n index = 0;\n }\n\n return index;\n};\n/**\n * Get the main color of each graphic item\n * @param {ReactElement} item A graphic item\n * @return {String} Color\n */\n\nexport var getMainColorOfGraphicItem = function getMainColorOfGraphicItem(item) {\n var displayName = item.type.displayName;\n var result;\n\n switch (displayName) {\n case 'Line':\n case 'Area':\n case 'Radar':\n result = item.props.stroke;\n break;\n\n default:\n result = item.props.fill;\n break;\n }\n\n return result;\n};\nexport var getLegendProps = function getLegendProps(_ref) {\n var children = _ref.children,\n formatedGraphicalItems = _ref.formatedGraphicalItems,\n legendWidth = _ref.legendWidth,\n legendContent = _ref.legendContent;\n var legendItem = findChildByType(children, Legend);\n\n if (!legendItem) {\n return null;\n }\n\n var legendData;\n\n if (legendItem.props && legendItem.props.payload) {\n legendData = legendItem.props && legendItem.props.payload;\n } else if (legendContent === 'children') {\n legendData = (formatedGraphicalItems || []).reduce(function (result, _ref2) {\n var item = _ref2.item,\n props = _ref2.props;\n var data = props.sectors || props.data || [];\n return result.concat(data.map(function (entry) {\n return {\n type: legendItem.props.iconType || item.props.legendType,\n value: entry.name,\n color: entry.fill,\n payload: entry\n };\n }));\n }, []);\n } else {\n legendData = (formatedGraphicalItems || []).map(function (_ref3) {\n var item = _ref3.item;\n var _item$props = item.props,\n dataKey = _item$props.dataKey,\n name = _item$props.name,\n legendType = _item$props.legendType,\n hide = _item$props.hide;\n return {\n inactive: hide,\n dataKey: dataKey,\n type: legendItem.props.iconType || legendType || 'square',\n color: getMainColorOfGraphicItem(item),\n value: name || dataKey,\n payload: item.props\n };\n });\n }\n\n return _objectSpread({}, legendItem.props, Legend.getWithHeight(legendItem, legendWidth), {\n payload: legendData,\n item: legendItem\n });\n};\n/**\n * Calculate the size of all groups for stacked bar graph\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @return {Object} The size of all groups\n */\n\nexport var getBarSizeList = function getBarSizeList(_ref4) {\n var globalSize = _ref4.barSize,\n _ref4$stackGroups = _ref4.stackGroups,\n stackGroups = _ref4$stackGroups === void 0 ? {} : _ref4$stackGroups;\n\n if (!stackGroups) {\n return {};\n }\n\n var result = {};\n var numericAxisIds = Object.keys(stackGroups);\n\n for (var i = 0, len = numericAxisIds.length; i < len; i++) {\n var sgs = stackGroups[numericAxisIds[i]].stackGroups;\n var stackIds = Object.keys(sgs);\n\n for (var j = 0, sLen = stackIds.length; j < sLen; j++) {\n var _sgs$stackIds$j = sgs[stackIds[j]],\n items = _sgs$stackIds$j.items,\n cateAxisId = _sgs$stackIds$j.cateAxisId;\n var barItems = items.filter(function (item) {\n return getDisplayName(item.type).indexOf('Bar') >= 0;\n });\n\n if (barItems && barItems.length) {\n var selfSize = barItems[0].props.barSize;\n var cateId = barItems[0].props[cateAxisId];\n\n if (!result[cateId]) {\n result[cateId] = [];\n }\n\n result[cateId].push({\n item: barItems[0],\n stackList: barItems.slice(1),\n barSize: _isNil(selfSize) ? globalSize : selfSize\n });\n }\n }\n }\n\n return result;\n};\n/**\n * Calculate the size of each bar and the gap between two bars\n * @param {Number} bandSize The size of each category\n * @param {sizeList} sizeList The size of all groups\n * @param {maxBarSize} maxBarSize The maximum size of bar\n * @return {Number} The size of each bar and the gap between two bars\n */\n\nexport var getBarPosition = function getBarPosition(_ref5) {\n var barGap = _ref5.barGap,\n barCategoryGap = _ref5.barCategoryGap,\n bandSize = _ref5.bandSize,\n _ref5$sizeList = _ref5.sizeList,\n sizeList = _ref5$sizeList === void 0 ? [] : _ref5$sizeList,\n maxBarSize = _ref5.maxBarSize;\n var len = sizeList.length;\n if (len < 1) return null;\n var realBarGap = getPercentValue(barGap, bandSize, 0, true);\n var result; // whether or not is barSize setted by user\n\n if (sizeList[0].barSize === +sizeList[0].barSize) {\n var useFull = false;\n var fullBarSize = bandSize / len;\n var sum = sizeList.reduce(function (res, entry) {\n return res + entry.barSize || 0;\n }, 0);\n sum += (len - 1) * realBarGap;\n\n if (sum >= bandSize) {\n sum -= (len - 1) * realBarGap;\n realBarGap = 0;\n }\n\n if (sum >= bandSize && fullBarSize > 0) {\n useFull = true;\n fullBarSize *= 0.9;\n sum = len * fullBarSize;\n }\n\n var offset = (bandSize - sum) / 2 >> 0;\n var prev = {\n offset: offset - realBarGap,\n size: 0\n };\n result = sizeList.reduce(function (res, entry) {\n var newRes = _toConsumableArray(res).concat([{\n item: entry.item,\n position: {\n offset: prev.offset + prev.size + realBarGap,\n size: useFull ? fullBarSize : entry.barSize\n }\n }]);\n\n prev = newRes[newRes.length - 1].position;\n\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: prev\n });\n });\n }\n\n return newRes;\n }, []);\n } else {\n var _offset = getPercentValue(barCategoryGap, bandSize, 0, true);\n\n if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {\n realBarGap = 0;\n }\n\n var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;\n\n if (originalSize > 1) {\n originalSize >>= 0;\n }\n\n var size = maxBarSize === +maxBarSize ? Math.min(originalSize, maxBarSize) : originalSize;\n result = sizeList.reduce(function (res, entry, i) {\n var newRes = _toConsumableArray(res).concat([{\n item: entry.item,\n position: {\n offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,\n size: size\n }\n }]);\n\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: newRes[newRes.length - 1].position\n });\n });\n }\n\n return newRes;\n }, []);\n }\n\n return result;\n};\nexport var appendOffsetOfLegend = function appendOffsetOfLegend(offset, items, props, legendBox) {\n var children = props.children,\n width = props.width,\n height = props.height,\n margin = props.margin;\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n var legendHeight = height - (margin.top || 0) - (margin.bottom || 0);\n var legendProps = getLegendProps({\n children: children,\n items: items,\n legendWidth: legendWidth,\n legendHeight: legendHeight\n });\n var newOffset = offset;\n\n if (legendProps) {\n var box = legendBox || {};\n var align = legendProps.align,\n verticalAlign = legendProps.verticalAlign,\n layout = legendProps.layout;\n\n if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'center') && isNumber(offset[align])) {\n newOffset = _objectSpread({}, offset, _defineProperty({}, align, newOffset[align] + (box.width || 0)));\n }\n\n if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && isNumber(offset[verticalAlign])) {\n newOffset = _objectSpread({}, offset, _defineProperty({}, verticalAlign, newOffset[verticalAlign] + (box.height || 0)));\n }\n }\n\n return newOffset;\n};\nexport var getDomainOfErrorBars = function getDomainOfErrorBars(data, item, dataKey, axisType) {\n var children = item.props.children;\n var errorBars = findAllByType(children, ErrorBar).filter(function (errorBarChild) {\n var direction = errorBarChild.props.direction;\n return _isNil(direction) || _isNil(axisType) ? true : axisType.indexOf(direction) >= 0;\n });\n\n if (errorBars && errorBars.length) {\n var keys = errorBars.map(function (errorBarChild) {\n return errorBarChild.props.dataKey;\n });\n return data.reduce(function (result, entry) {\n var entryValue = getValueByDataKey(entry, dataKey, 0);\n var mainValue = _isArray(entryValue) ? [_min(entryValue), _max(entryValue)] : [entryValue, entryValue];\n var errorDomain = keys.reduce(function (prevErrorArr, k) {\n var errorValue = getValueByDataKey(entry, k, 0);\n var lowerValue = mainValue[0] - Math.abs(_isArray(errorValue) ? errorValue[0] : errorValue);\n var upperValue = mainValue[1] + Math.abs(_isArray(errorValue) ? errorValue[1] : errorValue);\n return [Math.min(lowerValue, prevErrorArr[0]), Math.max(upperValue, prevErrorArr[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(errorDomain[0], result[0]), Math.max(errorDomain[1], result[1])];\n }, [Infinity, -Infinity]);\n }\n\n return null;\n};\nexport var parseErrorBarsOfAxis = function parseErrorBarsOfAxis(data, items, dataKey, axisType) {\n var domains = items.map(function (item) {\n return getDomainOfErrorBars(data, item, dataKey, axisType);\n }).filter(function (entry) {\n return !_isNil(entry);\n });\n\n if (domains && domains.length) {\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n\n return null;\n};\n/**\n * Get domain of data by the configuration of item element\n * @param {Array} data The data displayed in the chart\n * @param {Array} items The instances of item\n * @param {String} type The type of axis, number - Number Axis, category - Category Axis\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain\n */\n\nexport var getDomainOfItemsWithSameAxis = function getDomainOfItemsWithSameAxis(data, items, type, filterNil) {\n var domains = items.map(function (item) {\n var dataKey = item.props.dataKey;\n\n if (type === 'number' && dataKey) {\n return getDomainOfErrorBars(data, item, dataKey) || getDomainOfDataByKey(data, dataKey, type, filterNil);\n }\n\n return getDomainOfDataByKey(data, dataKey, type, filterNil);\n });\n\n if (type === 'number') {\n // Calculate the domain of number axis\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n\n var tag = {}; // Get the union set of category axis\n\n return domains.reduce(function (result, entry) {\n for (var i = 0, len = entry.length; i < len; i++) {\n if (!tag[entry[i]]) {\n tag[entry[i]] = true;\n result.push(entry[i]);\n }\n }\n\n return result;\n }, []);\n};\nexport var isCategorialAxis = function isCategorialAxis(layout, axisType) {\n return layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';\n};\n/**\n * Calculate the Coordinates of grid\n * @param {Array} ticks The ticks in axis\n * @param {Number} min The minimun value of axis\n * @param {Number} max The maximun value of axis\n * @return {Array} Coordinates\n */\n\nexport var getCoordinatesOfGrid = function getCoordinatesOfGrid(ticks, min, max) {\n var hasMin, hasMax;\n var values = ticks.map(function (entry) {\n if (entry.coordinate === min) {\n hasMin = true;\n }\n\n if (entry.coordinate === max) {\n hasMax = true;\n }\n\n return entry.coordinate;\n });\n\n if (!hasMin) {\n values.push(min);\n }\n\n if (!hasMax) {\n values.push(max);\n }\n\n return values;\n};\n/**\n * Get the ticks of an axis\n * @param {Object} axis The configuration of an axis\n * @param {Boolean} isGrid Whether or not are the ticks in grid\n * @param {Boolean} isAll Return the ticks of all the points or not\n * @return {Array} Ticks\n */\n\nexport var getTicksOfAxis = function getTicksOfAxis(axis, isGrid, isAll) {\n if (!axis) return null;\n var scale = axis.scale;\n var duplicateDomain = axis.duplicateDomain,\n type = axis.type,\n range = axis.range;\n var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / 2 : 0;\n offset = axis.axisType === 'angleAxis' ? mathSign(range[0] - range[1]) * 2 * offset : offset; // The ticks setted by user should only affect the ticks adjacent to axis line\n\n if (isGrid && (axis.ticks || axis.niceTicks)) {\n return (axis.ticks || axis.niceTicks).map(function (entry) {\n var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n return {\n coordinate: scale(scaleContent) + offset,\n value: entry,\n offset: offset\n };\n });\n }\n\n if (axis.isCategorial && axis.categoricalDomain) {\n return axis.categoricalDomain.map(function (entry, index) {\n return {\n coordinate: scale(entry),\n value: entry,\n index: index,\n offset: offset\n };\n });\n }\n\n if (scale.ticks && !isAll) {\n return scale.ticks(axis.tickCount).map(function (entry) {\n return {\n coordinate: scale(entry) + offset,\n value: entry,\n offset: offset\n };\n });\n } // When axis has duplicated text, serial numbers are used to generate scale\n\n\n return scale.domain().map(function (entry, index) {\n return {\n coordinate: scale(entry) + offset,\n value: duplicateDomain ? duplicateDomain[entry] : entry,\n index: index,\n offset: offset\n };\n });\n};\n/**\n * combine the handlers\n * @param {Function} defaultHandler Internal private handler\n * @param {Function} parentHandler Handler function specified in parent component\n * @param {Function} childHandler Handler function specified in child component\n * @return {Function} The combined handler\n */\n\nexport var combineEventHandlers = function combineEventHandlers(defaultHandler, parentHandler, childHandler) {\n var customizedHandler;\n\n if (_isFunction(childHandler)) {\n customizedHandler = childHandler;\n } else if (_isFunction(parentHandler)) {\n customizedHandler = parentHandler;\n }\n\n if (_isFunction(defaultHandler) || customizedHandler) {\n return function (arg1, arg2, arg3, arg4) {\n if (_isFunction(defaultHandler)) {\n defaultHandler(arg1, arg2, arg3, arg4);\n }\n\n if (_isFunction(customizedHandler)) {\n customizedHandler(arg1, arg2, arg3, arg4);\n }\n };\n }\n\n return null;\n};\n/**\n * Parse the scale function of axis\n * @param {Object} axis The option of axis\n * @param {String} chartType The displayName of chart\n * @return {Function} The scale funcion\n */\n\nexport var parseScale = function parseScale(axis, chartType) {\n var scale = axis.scale,\n type = axis.type,\n layout = axis.layout,\n axisType = axis.axisType;\n\n if (scale === 'auto') {\n if (layout === 'radial' && axisType === 'radiusAxis') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n\n if (layout === 'radial' && axisType === 'angleAxis') {\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n\n if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0)) {\n return {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n }\n\n if (type === 'category') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n\n if (_isString(scale)) {\n var name = \"scale\".concat(scale.slice(0, 1).toUpperCase()).concat(scale.slice(1));\n return {\n scale: (d3Scales[name] || d3Scales.scalePoint)(),\n realScaleType: d3Scales[name] ? name : 'point'\n };\n }\n\n return _isFunction(scale) ? {\n scale: scale\n } : {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n};\nvar EPS = 1e-4;\nexport var checkDomainOfScale = function checkDomainOfScale(scale) {\n var domain = scale.domain();\n\n if (!domain || domain.length <= 2) {\n return;\n }\n\n var len = domain.length;\n var range = scale.range();\n var min = Math.min(range[0], range[1]) - EPS;\n var max = Math.max(range[0], range[1]) + EPS;\n var first = scale(domain[0]);\n var last = scale(domain[len - 1]);\n\n if (first < min || first > max || last < min || last > max) {\n scale.domain([domain[0], domain[len - 1]]);\n }\n};\nexport var findPositionOfBar = function findPositionOfBar(barPosition, child) {\n if (!barPosition) {\n return null;\n }\n\n for (var i = 0, len = barPosition.length; i < len; i++) {\n if (barPosition[i].item === child) {\n return barPosition[i].position;\n }\n }\n\n return null;\n};\nexport var truncateByDomain = function truncateByDomain(value, domain) {\n if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {\n return value;\n }\n\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n var result = [value[0], value[1]];\n\n if (!isNumber(value[0]) || value[0] < min) {\n result[0] = min;\n }\n\n if (!isNumber(value[1]) || value[1] > max) {\n result[1] = max;\n }\n\n if (result[0] > max) {\n result[0] = max;\n }\n\n if (result[1] < min) {\n result[1] = min;\n }\n\n return result;\n};\n/* eslint no-param-reassign: 0 */\n\nexport var offsetSign = function offsetSign(series) {\n var n = series.length;\n\n if (n <= 0) {\n return;\n }\n\n for (var j = 0, m = series[0].length; j < m; ++j) {\n var positive = 0;\n var negative = 0;\n\n for (var i = 0; i < n; ++i) {\n var value = _isNaN(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n /* eslint-disable prefer-destructuring */\n\n if (value >= 0) {\n series[i][j][0] = positive;\n series[i][j][1] = positive + value;\n positive = series[i][j][1];\n } else {\n series[i][j][0] = negative;\n series[i][j][1] = negative + value;\n negative = series[i][j][1];\n }\n /* eslint-enable prefer-destructuring */\n\n }\n }\n};\nvar STACK_OFFSET_MAP = {\n sign: offsetSign,\n expand: stackOffsetExpand,\n none: stackOffsetNone,\n silhouette: stackOffsetSilhouette,\n wiggle: stackOffsetWiggle\n};\nexport var getStackedData = function getStackedData(data, stackItems, offsetType) {\n var dataKeys = stackItems.map(function (item) {\n return item.props.dataKey;\n });\n var stack = shapeStack().keys(dataKeys).value(function (d, key) {\n return +getValueByDataKey(d, key, 0);\n }).order(stackOrderNone).offset(STACK_OFFSET_MAP[offsetType]);\n return stack(data);\n};\nexport var getStackGroupsByAxisId = function getStackGroupsByAxisId(data, _items, numericAxisId, cateAxisId, offsetType, reverseStackOrder) {\n if (!data) {\n return null;\n } // reversing items to affect render order (for layering)\n\n\n var items = reverseStackOrder ? _items.reverse() : _items;\n var stackGroups = items.reduce(function (result, item) {\n var _item$props2 = item.props,\n stackId = _item$props2.stackId,\n hide = _item$props2.hide;\n\n if (hide) {\n return result;\n }\n\n var axisId = item.props[numericAxisId];\n var parentGroup = result[axisId] || {\n hasStack: false,\n stackGroups: {}\n };\n\n if (isNumOrStr(stackId)) {\n var childGroup = parentGroup.stackGroups[stackId] || {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: []\n };\n childGroup.items.push(item);\n parentGroup.hasStack = true;\n parentGroup.stackGroups[stackId] = childGroup;\n } else {\n parentGroup.stackGroups[uniqueId('_stackId_')] = {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: [item]\n };\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, parentGroup));\n }, {});\n return Object.keys(stackGroups).reduce(function (result, axisId) {\n var group = stackGroups[axisId];\n\n if (group.hasStack) {\n group.stackGroups = Object.keys(group.stackGroups).reduce(function (res, stackId) {\n var g = group.stackGroups[stackId];\n return _objectSpread({}, res, _defineProperty({}, stackId, {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: g.items,\n stackedData: getStackedData(data, g.items, offsetType)\n }));\n }, {});\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, group));\n }, {});\n};\n/**\n * get domain of ticks\n * @param {Array} ticks Ticks of axis\n * @param {String} type The type of axis\n * @return {Array} domain\n */\n\nexport var calculateDomainOfTicks = function calculateDomainOfTicks(ticks, type) {\n if (type === 'number') {\n return [Math.min.apply(null, ticks), Math.max.apply(null, ticks)];\n }\n\n return ticks;\n};\n/**\n * Configure the scale function of axis\n * @param {Object} scale The scale function\n * @param {Object} opts The configuration of axis\n * @return {Object} null\n */\n\nexport var getTicksOfScale = function getTicksOfScale(scale, opts) {\n var realScaleType = opts.realScaleType,\n type = opts.type,\n tickCount = opts.tickCount,\n originalDomain = opts.originalDomain,\n allowDecimals = opts.allowDecimals;\n var scaleType = realScaleType || opts.scale;\n\n if (scaleType !== 'auto' && scaleType !== 'linear') {\n return null;\n }\n\n if (tickCount && type === 'number' && originalDomain && (originalDomain[0] === 'auto' || originalDomain[1] === 'auto')) {\n // Calculate the ticks by the number of grid when the axis is a number axis\n var domain = scale.domain();\n var tickValues = getNiceTickValues(domain, tickCount, allowDecimals);\n scale.domain(calculateDomainOfTicks(tickValues, type));\n return {\n niceTicks: tickValues\n };\n }\n\n if (tickCount && type === 'number') {\n var _domain = scale.domain();\n\n var _tickValues = getTickValuesFixedDomain(_domain, tickCount, allowDecimals);\n\n return {\n niceTicks: _tickValues\n };\n }\n\n return null;\n};\nexport var getCateCoordinateOfLine = function getCateCoordinateOfLine(_ref6) {\n var axis = _ref6.axis,\n ticks = _ref6.ticks,\n bandSize = _ref6.bandSize,\n entry = _ref6.entry,\n index = _ref6.index,\n dataKey = _ref6.dataKey;\n\n if (axis.type === 'category') {\n // find coordinate of category axis by the value of category\n if (!axis.allowDuplicatedCategory && axis.dataKey && !_isNil(entry[axis.dataKey])) {\n var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);\n\n if (matchedTick) {\n return matchedTick.coordinate + bandSize / 2;\n }\n }\n\n return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;\n }\n\n var value = getValueByDataKey(entry, !_isNil(dataKey) ? dataKey : axis.dataKey);\n return !_isNil(value) ? axis.scale(value) : null;\n};\nexport var getCateCoordinateOfBar = function getCateCoordinateOfBar(_ref7) {\n var axis = _ref7.axis,\n ticks = _ref7.ticks,\n offset = _ref7.offset,\n bandSize = _ref7.bandSize,\n entry = _ref7.entry,\n index = _ref7.index;\n\n if (axis.type === 'category') {\n return ticks[index] ? ticks[index].coordinate + offset : null;\n }\n\n var value = getValueByDataKey(entry, axis.dataKey, axis.domain[index]);\n return !_isNil(value) ? axis.scale(value) - bandSize / 2 + offset : null;\n};\nexport var getBaseValueOfBar = function getBaseValueOfBar(_ref8) {\n var numericAxis = _ref8.numericAxis;\n var domain = numericAxis.scale.domain();\n\n if (numericAxis.type === 'number') {\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n\n if (min <= 0 && max >= 0) {\n return 0;\n }\n\n if (max < 0) {\n return max;\n }\n\n return min;\n }\n\n return domain[0];\n};\nexport var ifOverflowMatches = function ifOverflowMatches(props, value) {\n var alwaysShow = props.alwaysShow;\n var ifOverflow = props.ifOverflow;\n\n if (alwaysShow) {\n ifOverflow = 'extendDomain';\n }\n\n return ifOverflow === value;\n};\nexport var detectReferenceElementsDomain = function detectReferenceElementsDomain(children, domain, axisId, axisType, specifiedTicks) {\n var lines = findAllByType(children, ReferenceLine);\n var dots = findAllByType(children, ReferenceDot);\n var elements = lines.concat(dots);\n var areas = findAllByType(children, ReferenceArea);\n var idKey = \"\".concat(axisType, \"Id\");\n var valueKey = axisType[0];\n var finalDomain = domain;\n\n if (elements.length) {\n finalDomain = elements.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[valueKey])) {\n var value = el.props[valueKey];\n return [Math.min(result[0], value), Math.max(result[1], value)];\n }\n\n return result;\n }, finalDomain);\n }\n\n if (areas.length) {\n var key1 = \"\".concat(valueKey, \"1\");\n var key2 = \"\".concat(valueKey, \"2\");\n finalDomain = areas.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[key1]) && isNumber(el.props[key2])) {\n var value1 = el.props[key1];\n var value2 = el.props[key2];\n return [Math.min(result[0], value1, value2), Math.max(result[1], value1, value2)];\n }\n\n return result;\n }, finalDomain);\n }\n\n if (specifiedTicks && specifiedTicks.length) {\n finalDomain = specifiedTicks.reduce(function (result, tick) {\n if (isNumber(tick)) {\n return [Math.min(result[0], tick), Math.max(result[1], tick)];\n }\n\n return result;\n }, finalDomain);\n }\n\n return finalDomain;\n};\nexport var getStackedDataOfItem = function getStackedDataOfItem(item, stackGroups) {\n var stackId = item.props.stackId;\n\n if (isNumOrStr(stackId)) {\n var group = stackGroups[stackId];\n\n if (group && group.items.length) {\n var itemIndex = -1;\n\n for (var i = 0, len = group.items.length; i < len; i++) {\n if (group.items[i] === item) {\n itemIndex = i;\n break;\n }\n }\n\n return itemIndex >= 0 ? group.stackedData[itemIndex] : null;\n }\n }\n\n return null;\n};\n\nvar getDomainOfSingle = function getDomainOfSingle(data) {\n return data.reduce(function (result, entry) {\n return [Math.min.apply(null, entry.concat([result[0]]).filter(isNumber)), Math.max.apply(null, entry.concat([result[1]]).filter(isNumber))];\n }, [Infinity, -Infinity]);\n};\n\nexport var getDomainOfStackGroups = function getDomainOfStackGroups(stackGroups, startIndex, endIndex) {\n return Object.keys(stackGroups).reduce(function (result, stackId) {\n var group = stackGroups[stackId];\n var stackedData = group.stackedData;\n var domain = stackedData.reduce(function (res, entry) {\n var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1));\n return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];\n }, [Infinity, -Infinity]).map(function (result) {\n return result === Infinity || result === -Infinity ? 0 : result;\n });\n};\nexport var MIN_VALUE_REG = /^dataMin[\\s]*-[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var MAX_VALUE_REG = /^dataMax[\\s]*\\+[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var parseSpecifiedDomain = function parseSpecifiedDomain(specifiedDomain, dataDomain, allowDataOverflow) {\n if (!_isArray(specifiedDomain)) {\n return dataDomain;\n }\n\n var domain = [];\n /* eslint-disable prefer-destructuring */\n\n if (isNumber(specifiedDomain[0])) {\n domain[0] = allowDataOverflow ? specifiedDomain[0] : Math.min(specifiedDomain[0], dataDomain[0]);\n } else if (MIN_VALUE_REG.test(specifiedDomain[0])) {\n var value = +MIN_VALUE_REG.exec(specifiedDomain[0])[1];\n domain[0] = dataDomain[0] - value;\n } else if (_isFunction(specifiedDomain[0])) {\n domain[0] = specifiedDomain[0](dataDomain[0]);\n } else {\n domain[0] = dataDomain[0];\n }\n\n if (isNumber(specifiedDomain[1])) {\n domain[1] = allowDataOverflow ? specifiedDomain[1] : Math.max(specifiedDomain[1], dataDomain[1]);\n } else if (MAX_VALUE_REG.test(specifiedDomain[1])) {\n var _value = +MAX_VALUE_REG.exec(specifiedDomain[1])[1];\n\n domain[1] = dataDomain[1] + _value;\n } else if (_isFunction(specifiedDomain[1])) {\n domain[1] = specifiedDomain[1](dataDomain[1]);\n } else {\n domain[1] = dataDomain[1];\n }\n /* eslint-enable prefer-destructuring */\n\n\n return domain;\n};\n/**\n * Calculate the size between two category\n * @param {Object} axis The options of axis\n * @param {Array} ticks The ticks of axis\n * @return {Number} Size\n */\n\nexport var getBandSizeOfAxis = function getBandSizeOfAxis(axis, ticks) {\n if (axis && axis.scale && axis.scale.bandwidth) {\n return axis.scale.bandwidth();\n }\n\n if (axis && ticks && ticks.length >= 2) {\n var orderedTicks = _sortBy(ticks, function (o) {\n return o.coordinate;\n });\n\n var bandSize = Infinity;\n\n for (var i = 1, len = orderedTicks.length; i < len; i++) {\n var cur = orderedTicks[i];\n var prev = orderedTicks[i - 1];\n bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);\n }\n\n return bandSize === Infinity ? 0 : bandSize;\n }\n\n return 0;\n};\n/**\n * parse the domain of a category axis when a domain is specified\n * @param {Array} specifiedDomain The domain specified by users\n * @param {Array} calculatedDomain The domain calculated by dateKey\n * @param {ReactElement} axisChild The axis element\n * @returns {Array} domains\n */\n\nexport var parseDomainOfCategoryAxis = function parseDomainOfCategoryAxis(specifiedDomain, calculatedDomain, axisChild) {\n if (!specifiedDomain || !specifiedDomain.length) {\n return calculatedDomain;\n }\n\n if (_isEqual(specifiedDomain, _get(axisChild, 'type.defaultProps.domain'))) {\n return calculatedDomain;\n }\n\n return specifiedDomain;\n};", + "function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { isSsr } from './ReactUtils';\nvar stringCache = {\n widthCache: {},\n cacheCount: 0\n};\nvar MAX_CACHE_NUM = 2000;\nvar SPAN_STYLE = {\n position: 'absolute',\n top: '-20000px',\n left: 0,\n padding: 0,\n margin: 0,\n border: 'none',\n whiteSpace: 'pre'\n};\nvar STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'lineHeight', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];\nvar MEASUREMENT_SPAN_ID = 'recharts_measurement_span';\n\nfunction autoCompleteStyle(name, value) {\n if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {\n return \"\".concat(value, \"px\");\n }\n\n return value;\n}\n\nfunction camelToMiddleLine(text) {\n var strs = text.split('');\n var formatStrs = strs.reduce(function (result, entry) {\n if (entry === entry.toUpperCase()) {\n return _toConsumableArray(result).concat(['-', entry.toLowerCase()]);\n }\n\n return _toConsumableArray(result).concat([entry]);\n }, []);\n return formatStrs.join('');\n}\n\nexport var getStyleString = function getStyleString(style) {\n return Object.keys(style).reduce(function (result, s) {\n return \"\".concat(result).concat(camelToMiddleLine(s), \":\").concat(autoCompleteStyle(s, style[s]), \";\");\n }, '');\n};\nexport var getStringSize = function getStringSize(text) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (text === undefined || text === null || isSsr()) {\n return {\n width: 0,\n height: 0\n };\n }\n\n var str = \"\".concat(text);\n var styleString = getStyleString(style);\n var cacheKey = \"\".concat(str, \"-\").concat(styleString);\n\n if (stringCache.widthCache[cacheKey]) {\n return stringCache.widthCache[cacheKey];\n }\n\n try {\n var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);\n\n if (!measurementSpan) {\n measurementSpan = document.createElement('span');\n measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);\n document.body.appendChild(measurementSpan);\n } // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)\n // https://en.wikipedia.org/wiki/Content_Security_Policy\n\n\n var measurementSpanStyle = _objectSpread({}, SPAN_STYLE, style);\n\n Object.keys(measurementSpanStyle).map(function (styleKey) {\n measurementSpan.style[styleKey] = measurementSpanStyle[styleKey];\n return styleKey;\n });\n measurementSpan.textContent = str;\n var rect = measurementSpan.getBoundingClientRect();\n var result = {\n width: rect.width,\n height: rect.height\n };\n stringCache.widthCache[cacheKey] = result;\n\n if (++stringCache.cacheCount > MAX_CACHE_NUM) {\n stringCache.cacheCount = 0;\n stringCache.widthCache = {};\n }\n\n return result;\n } catch (e) {\n return {\n width: 0,\n height: 0\n };\n }\n};\nexport var getOffset = function getOffset(el) {\n var html = el.ownerDocument.documentElement;\n var box = {\n top: 0,\n left: 0\n }; // If we don't have gBCR, just use 0,0 rather than error\n // BlackBerry 5, iOS 3 (original iPhone)\n\n if (typeof el.getBoundingClientRect !== 'undefined') {\n box = el.getBoundingClientRect();\n }\n\n return {\n top: box.top + window.pageYOffset - html.clientTop,\n left: box.left + window.pageXOffset - html.clientLeft\n };\n};\n/**\n * Calculate coordinate of cursor in chart\n * @param {Object} event Event object\n * @param {Object} offset The offset of main part in the svg element\n * @return {Object} {chartX, chartY}\n */\n\nexport var calculateChartCoordinate = function calculateChartCoordinate(event, offset) {\n return {\n chartX: Math.round(event.pageX - offset.left),\n chartY: Math.round(event.pageY - offset.top)\n };\n};", + "import _get from \"lodash/get\";\nimport _isArray from \"lodash/isArray\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isString from \"lodash/isString\";\nexport var mathSign = function mathSign(value) {\n if (value === 0) {\n return 0;\n }\n\n if (value > 0) {\n return 1;\n }\n\n return -1;\n};\nexport var isPercent = function isPercent(value) {\n return _isString(value) && value.indexOf('%') === value.length - 1;\n};\nexport var isNumber = function isNumber(value) {\n return _isNumber(value) && !_isNaN(value);\n};\nexport var isNumOrStr = function isNumOrStr(value) {\n return isNumber(value) || _isString(value);\n};\nvar idCounter = 0;\nexport var uniqueId = function uniqueId(prefix) {\n var id = ++idCounter;\n return \"\".concat(prefix || '').concat(id);\n};\n/**\n * Get percent value of a total value\n * @param {Number|String} percent A percent\n * @param {Number} totalValue Total value\n * @param {NUmber} defaultValue The value returned when percent is undefined or invalid\n * @param {Boolean} validate If set to be true, the result will be validated\n * @return {Number} value\n */\n\nexport var getPercentValue = function getPercentValue(percent, totalValue) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!isNumber(percent) && !_isString(percent)) {\n return defaultValue;\n }\n\n var value;\n\n if (isPercent(percent)) {\n var index = percent.indexOf('%');\n value = totalValue * parseFloat(percent.slice(0, index)) / 100;\n } else {\n value = +percent;\n }\n\n if (_isNaN(value)) {\n value = defaultValue;\n }\n\n if (validate && value > totalValue) {\n value = totalValue;\n }\n\n return value;\n};\nexport var getAnyElementOfObject = function getAnyElementOfObject(obj) {\n if (!obj) {\n return null;\n }\n\n var keys = Object.keys(obj);\n\n if (keys && keys.length) {\n return obj[keys[0]];\n }\n\n return null;\n};\nexport var hasDuplicate = function hasDuplicate(ary) {\n if (!_isArray(ary)) {\n return false;\n }\n\n var len = ary.length;\n var cache = {};\n\n for (var i = 0; i < len; i++) {\n if (!cache[ary[i]]) {\n cache[ary[i]] = true;\n } else {\n return true;\n }\n }\n\n return false;\n};\nexport var interpolateNumber = function interpolateNumber(numberA, numberB) {\n if (isNumber(numberA) && isNumber(numberB)) {\n return function (t) {\n return numberA + t * (numberB - numberA);\n };\n }\n\n return function () {\n return numberB;\n };\n};\nexport var findEntryInArray = function findEntryInArray(ary, specifiedKey, specifiedValue) {\n if (!ary || !ary.length) {\n return null;\n }\n\n return ary.find(function (entry) {\n return entry && _get(entry, specifiedKey) === specifiedValue;\n });\n};\n/**\n * The least square linear regression\n * @param {Array} data The array of points\n * @returns {Object} The domain of x, and the parameter of linear function\n */\n\nexport var getLinearRegression = function getLinearRegression(data) {\n if (!data || !data.length) {\n return null;\n }\n\n var len = data.length;\n var xsum = 0;\n var ysum = 0;\n var xysum = 0;\n var xxsum = 0;\n var xmin = Infinity;\n var xmax = -Infinity;\n\n for (var i = 0; i < len; i++) {\n xsum += data[i].cx;\n ysum += data[i].cy;\n xysum += data[i].cx * data[i].cy;\n xxsum += data[i].cx * data[i].cx;\n xmin = Math.min(xmin, data[i].cx);\n xmax = Math.max(xmax, data[i].cx);\n }\n\n var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;\n return {\n xmin: xmin,\n xmax: xmax,\n a: a,\n b: (ysum - a * xsum) / len\n };\n};", + "/* eslint no-console: 0 */\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format, a, b, c, d, e, f) {\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};", + "import _isNil from \"lodash/isNil\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getPercentValue } from './DataUtils';\nimport { parseScale, checkDomainOfScale, getTicksOfScale } from './ChartUtils';\nexport var RADIAN = Math.PI / 180;\nexport var degreeToRadian = function degreeToRadian(angle) {\n return angle * Math.PI / 180;\n};\nexport var radianToDegree = function radianToDegree(angleInRadian) {\n return angleInRadian * 180 / Math.PI;\n};\nexport var polarToCartesian = function polarToCartesian(cx, cy, radius, angle) {\n return {\n x: cx + Math.cos(-RADIAN * angle) * radius,\n y: cy + Math.sin(-RADIAN * angle) * radius\n };\n};\nexport var getMaxRadius = function getMaxRadius(width, height) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;\n};\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {Object} axisType The type of axes, radius-axis or angle-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\n\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height;\n var startAngle = props.startAngle,\n endAngle = props.endAngle;\n var cx = getPercentValue(props.cx, width, width / 2);\n var cy = getPercentValue(props.cy, height, height / 2);\n var maxRadius = getMaxRadius(width, height, offset);\n var innerRadius = getPercentValue(props.innerRadius, maxRadius, 0);\n var outerRadius = getPercentValue(props.outerRadius, maxRadius, maxRadius * 0.8);\n var ids = Object.keys(axisMap);\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var domain = axis.domain,\n reversed = axis.reversed;\n var range;\n\n if (_isNil(axis.range)) {\n if (axisType === 'angleAxis') {\n range = [startAngle, endAngle];\n } else if (axisType === 'radiusAxis') {\n range = [innerRadius, outerRadius];\n }\n\n if (reversed) {\n range = [range[1], range[0]];\n }\n } else {\n range = axis.range;\n var _range = range;\n\n var _range2 = _slicedToArray(_range, 2);\n\n startAngle = _range2[0];\n endAngle = _range2[1];\n }\n\n var _parseScale = parseScale(axis, chartName),\n realScaleType = _parseScale.realScaleType,\n scale = _parseScale.scale;\n\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread({}, axis, {\n realScaleType: realScaleType\n }));\n\n var finalAxis = _objectSpread({}, axis, ticks, {\n range: range,\n radius: outerRadius,\n realScaleType: realScaleType,\n scale: scale,\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n return _objectSpread({}, result, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var distanceBetweenPoints = function distanceBetweenPoints(point, anotherPoint) {\n var x1 = point.x,\n y1 = point.y;\n var x2 = anotherPoint.x,\n y2 = anotherPoint.y;\n return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));\n};\nexport var getAngleOfPoint = function getAngleOfPoint(_ref, _ref2) {\n var x = _ref.x,\n y = _ref.y;\n var cx = _ref2.cx,\n cy = _ref2.cy;\n var radius = distanceBetweenPoints({\n x: x,\n y: y\n }, {\n x: cx,\n y: cy\n });\n\n if (radius <= 0) {\n return {\n radius: radius\n };\n }\n\n var cos = (x - cx) / radius;\n var angleInRadian = Math.acos(cos);\n\n if (y > cy) {\n angleInRadian = 2 * Math.PI - angleInRadian;\n }\n\n return {\n radius: radius,\n angle: radianToDegree(angleInRadian),\n angleInRadian: angleInRadian\n };\n};\nexport var formatAngleOfSector = function formatAngleOfSector(_ref3) {\n var startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return {\n startAngle: startAngle - min * 360,\n endAngle: endAngle - min * 360\n };\n};\n\nvar reverseFormatAngleOfSetor = function reverseFormatAngleOfSetor(angle, _ref4) {\n var startAngle = _ref4.startAngle,\n endAngle = _ref4.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return angle + min * 360;\n};\n\nexport var inRangeOfSector = function inRangeOfSector(_ref5, sector) {\n var x = _ref5.x,\n y = _ref5.y;\n\n var _getAngleOfPoint = getAngleOfPoint({\n x: x,\n y: y\n }, sector),\n radius = _getAngleOfPoint.radius,\n angle = _getAngleOfPoint.angle;\n\n var innerRadius = sector.innerRadius,\n outerRadius = sector.outerRadius;\n\n if (radius < innerRadius || radius > outerRadius) {\n return false;\n }\n\n if (radius === 0) {\n return true;\n }\n\n var _formatAngleOfSector = formatAngleOfSector(sector),\n startAngle = _formatAngleOfSector.startAngle,\n endAngle = _formatAngleOfSector.endAngle;\n\n var formatAngle = angle;\n var inRange;\n\n if (startAngle <= endAngle) {\n while (formatAngle > endAngle) {\n formatAngle -= 360;\n }\n\n while (formatAngle < startAngle) {\n formatAngle += 360;\n }\n\n inRange = formatAngle >= startAngle && formatAngle <= endAngle;\n } else {\n while (formatAngle > startAngle) {\n formatAngle -= 360;\n }\n\n while (formatAngle < endAngle) {\n formatAngle += 360;\n }\n\n inRange = formatAngle >= endAngle && formatAngle <= startAngle;\n }\n\n if (inRange) {\n return _objectSpread({}, sector, {\n radius: radius,\n angle: reverseFormatAngleOfSetor(formatAngle, sector)\n });\n }\n\n return null;\n};", + "export function shallowEqual(a, b) {\n /* eslint-disable no-restricted-syntax */\n for (var key in a) {\n if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {\n return false;\n }\n }\n\n for (var _key in b) {\n if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction shouldComponentUpdate(props, state) {\n return !shallowEqual(props, this.props) || !shallowEqual(state, this.state);\n}\n\nexport default function pureRenderDecorator(component) {\n // eslint-disable-next-line no-param-reassign\n component.prototype.shouldComponentUpdate = shouldComponentUpdate;\n}", + "import _isNil from \"lodash/isNil\";\nimport _isString from \"lodash/isString\";\nimport _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { isNumber } from './DataUtils';\nimport { shallowEqual } from './PureRender';\nexport var PRESENTATION_ATTRIBUTES = {\n 'aria-current': PropTypes.string,\n // state\n 'aria-details': PropTypes.any,\n 'aria-disabled': PropTypes.any,\n // state\n 'aria-hidden': PropTypes.any,\n // state\n 'aria-invalid': PropTypes.any,\n // state\n 'aria-keyshortcuts': PropTypes.any,\n 'aria-label': PropTypes.any,\n 'aria-roledescription': PropTypes.any,\n // Widget Attributes\n 'aria-autocomplete': PropTypes.any,\n 'aria-checked': PropTypes.any,\n 'aria-expanded': PropTypes.any,\n 'aria-haspopup': PropTypes.any,\n 'aria-level': PropTypes.any,\n 'aria-modal': PropTypes.any,\n 'aria-multiline': PropTypes.any,\n 'aria-multiselectable': PropTypes.any,\n 'aria-orientation': PropTypes.any,\n 'aria-placeholder': PropTypes.any,\n 'aria-pressed': PropTypes.any,\n 'aria-readonly': PropTypes.any,\n 'aria-required': PropTypes.any,\n 'aria-selected': PropTypes.any,\n 'aria-sort': PropTypes.any,\n 'aria-valuemax': PropTypes.any,\n 'aria-valuemin': PropTypes.any,\n 'aria-valuenow': PropTypes.any,\n 'aria-valuetext': PropTypes.any,\n // Live Region Attributes\n 'aria-atomic': PropTypes.any,\n 'aria-busy': PropTypes.any,\n 'aria-live': PropTypes.any,\n 'aria-relevant': PropTypes.any,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': PropTypes.any,\n 'aria-grabbed': PropTypes.any,\n // Relationship Attributes\n 'aria-activedescendant': PropTypes.any,\n 'aria-colcount': PropTypes.any,\n 'aria-colindex': PropTypes.any,\n 'aria-colspan': PropTypes.any,\n 'aria-controls': PropTypes.any,\n 'aria-describedby': PropTypes.any,\n 'aria-errormessage': PropTypes.any,\n 'aria-flowto': PropTypes.any,\n 'aria-labelledby': PropTypes.any,\n 'aria-owns': PropTypes.any,\n 'aria-posinset': PropTypes.any,\n 'aria-rowcount': PropTypes.any,\n 'aria-rowindex': PropTypes.any,\n 'aria-rowspan': PropTypes.any,\n 'aria-setsize': PropTypes.any,\n alignmentBaseline: PropTypes.string,\n angle: PropTypes.number,\n baselineShift: PropTypes.string,\n clip: PropTypes.string,\n clipPath: PropTypes.string,\n clipRule: PropTypes.string,\n color: PropTypes.string,\n colorInterpolation: PropTypes.string,\n colorInterpolationFilters: PropTypes.string,\n colorProfile: PropTypes.string,\n colorRendering: PropTypes.string,\n cursor: PropTypes.string,\n direction: PropTypes.oneOf(['ltr', 'rtl', 'inherit']),\n display: PropTypes.string,\n dominantBaseline: PropTypes.string,\n enableBackground: PropTypes.string,\n fill: PropTypes.string,\n fillOpacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fillRule: PropTypes.oneOf(['nonzero', 'evenodd', 'inherit']),\n filter: PropTypes.string,\n floodColor: PropTypes.string,\n floodOpacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n font: PropTypes.string,\n fontFamily: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n fontSizeAdjust: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n fontStretch: PropTypes.oneOf(['normal', 'wider', 'narrower', 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', 'inherit']),\n fontStyle: PropTypes.oneOf(['normal', 'italic', 'oblique', 'inherit']),\n fontVariant: PropTypes.oneOf(['normal', 'small-caps', 'inherit']),\n fontWeight: PropTypes.oneOf(['normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900, 'inherit']),\n glyphOrientationHorizontal: PropTypes.string,\n glyphOrientationVertical: PropTypes.string,\n imageRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'optimizeQuality', 'inherit']),\n kerning: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n letterSpacing: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n lightingColor: PropTypes.string,\n lineHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n markerEnd: PropTypes.string,\n markerMid: PropTypes.string,\n markerStart: PropTypes.string,\n mask: PropTypes.string,\n opacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n overflow: PropTypes.oneOf(['visible', 'hidden', 'scroll', 'auto', 'inherit']),\n pointerEvents: PropTypes.oneOf(['visiblePainted', 'visibleFill', 'visibleStroke', 'visible', 'painted', 'fill', 'stroke', 'all', 'none', 'inherit']),\n shapeRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'crispEdges', 'geometricPrecision', 'inherit']),\n stopColor: PropTypes.string,\n stopOpacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n stroke: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeDasharray: PropTypes.string,\n strokeDashoffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeLinecap: PropTypes.oneOf(['butt', 'round', 'square', 'inherit']),\n strokeLinejoin: PropTypes.oneOf(['miter', 'round', 'bevel', 'inherit']),\n strokeMiterlimit: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeOpacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n textAnchor: PropTypes.oneOf(['start', 'middle', 'end', 'inherit']),\n textDecoration: PropTypes.oneOf(['none', 'underline', 'overline', 'line-through', 'blink', 'inherit']),\n textRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'optimizeLegibility', 'geometricPrecision', 'inherit']),\n unicodeBidi: PropTypes.oneOf(['normal', 'embed', 'bidi-override', 'inherit']),\n visibility: PropTypes.oneOf(['visible', 'hidden', 'collapse', 'inherit']),\n wordSpacing: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n writingMode: PropTypes.oneOf(['lr-tb', 'rl-tb', 'tb-rl', 'lr', 'rl', 'tb', 'inherit']),\n transform: PropTypes.string,\n role: PropTypes.string,\n focusable: PropTypes.string,\n tabIndex: PropTypes.string,\n style: PropTypes.object,\n width: PropTypes.number,\n height: PropTypes.number,\n dx: PropTypes.number,\n dy: PropTypes.number,\n x: PropTypes.number,\n y: PropTypes.number,\n r: PropTypes.number,\n // The radius of Rectangle\n radius: PropTypes.oneOfType([PropTypes.number, PropTypes.array])\n};\nexport var EVENT_ATTRIBUTES = {\n onClick: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onTouchEnd: PropTypes.func,\n onTouchMove: PropTypes.func,\n onTouchStart: PropTypes.func,\n onTouchCancel: PropTypes.func\n};\nvar REACT_BROWSER_EVENT_MAP = {\n click: 'onClick',\n mousedown: 'onMouseDown',\n mouseup: 'onMouseUp',\n mouseover: 'onMouseOver',\n mousemove: 'onMouseMove',\n mouseout: 'onMouseOut',\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n touchcancel: 'onTouchCancel',\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchstart: 'onTouchStart'\n};\nexport var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];\nexport var LEGEND_TYPES = ['plainline', 'line', 'square', 'rect', 'circle', 'cross', 'diamond', 'star', 'triangle', 'wye', 'none'];\n/**\n * Get the display name of a component\n * @param {Object} Comp Specified Component\n * @return {String} Display name of Component\n */\n\nexport var getDisplayName = function getDisplayName(Comp) {\n if (typeof Comp === 'string') {\n return Comp;\n }\n\n if (!Comp) {\n return '';\n }\n\n return Comp.displayName || Comp.name || 'Component';\n};\n/*\n * Find and return all matched children by type. ` + ("`" + `type`))) + (("`" + (` can be a React element class or\n * string\n */\n\nexport var findAllByType = function findAllByType(children, type) {\n var result = [];\n var types = [];\n\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n\n React.Children.forEach(children, function (child) {\n var childType = child && child.type && (child.type.displayName || child.type.name);\n\n if (types.indexOf(childType) !== -1) {\n result.push(child);\n }\n });\n return result;\n};\n/*\n * Return the first matched child by type, return null otherwise.\n * ` + "`")) + (`type` + ("`" + ` can be a React element class or string.\n */\n\nexport var findChildByType = function findChildByType(children, type) {\n var result = findAllByType(children, type);\n return result && result[0];\n};\n/*\n * Create a new array of children excluding the ones matched the type\n */\n\nexport var withoutType = function withoutType(children, type) {\n var newChildren = [];\n var types;\n\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n\n React.Children.forEach(children, function (child) {\n if (child && child.type && child.type.displayName && types.indexOf(child.type.displayName) !== -1) {\n return;\n }\n\n newChildren.push(child);\n });\n return newChildren;\n};\n/**\n * get all the presentation attribute of svg element\n * @param {Object} el A react element or the props of a react element\n * @return {Object} attributes or null\n */\n\nexport var getPresentationAttributes = function getPresentationAttributes(el) {\n if (!el || _isFunction(el)) {\n return null;\n }\n\n var props = React.isValidElement(el) ? el.props : el;\n\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && PRESENTATION_ATTRIBUTES[i]) {\n if (!out) out = {};\n out[i] = props[i];\n }\n }\n\n return out;\n};\n\nvar getEventHandlerOfElement = function getEventHandlerOfElement(originalHandler, props) {\n return function (e) {\n originalHandler(props, e);\n return null;\n };\n};\n/**\n * get all the event attribute of svg element\n * @param {Object} el A react element or the props of a react element\n * @param {Function} newHandler New handler of event\n * @param {Boolean} wrapCallback Wrap callback and return more parameters or not\n * @return {Object} attributes or null\n */\n\n\nexport var filterEventAttributes = function filterEventAttributes(el, newHandler) {\n var wrapCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!el || _isFunction(el)) {\n return null;\n }\n\n var props = React.isValidElement(el) ? el.props : el;\n\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i]) {\n if (!out) out = {};\n out[i] = newHandler || (wrapCallback ? getEventHandlerOfElement(props[i], props) : props[i]);\n }\n }\n\n return out;\n};\n\nvar getEventHandlerOfChild = function getEventHandlerOfChild(originalHandler, data, index) {\n return function (e) {\n originalHandler(data, index, e);\n return null;\n };\n};\n\nexport var filterEventsOfChild = function filterEventsOfChild(props, data, index) {\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && _isFunction(props[i])) {\n if (!out) out = {};\n out[i] = getEventHandlerOfChild(props[i], data, index);\n }\n }\n\n return out;\n};\n/**\n * validate the width and height props of a chart element\n * @param {Object} el A chart element\n * @return {Boolean} true If the props width and height are number, and greater than 0\n */\n\nexport var validateWidthHeight = function validateWidthHeight(el) {\n if (!el || !el.props) {\n return false;\n }\n\n var _el$props = el.props,\n width = _el$props.width,\n height = _el$props.height;\n\n if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0) {\n return false;\n }\n\n return true;\n};\nexport var isSsr = function isSsr() {\n return !(typeof window !== 'undefined' && window.document && window.document.createElement && window.setTimeout);\n};\nvar SVG_TAGS = ['a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile', 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColormatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face', 'font-face-format', 'font-face-name', 'font-face-url', 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', 'lineGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'script', 'set', 'stop', 'style', 'svg', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref', 'tspan', 'use', 'view', 'vkern'];\n\nvar isSvgElement = function isSvgElement(child) {\n return child && child.type && _isString(child.type) && SVG_TAGS.indexOf(child.type) >= 0;\n};\n/**\n * Filter all the svg elements of children\n * @param {Array} children The children of a react element\n * @return {Array} All the svg elements\n */\n\n\nexport var filterSvgElements = function filterSvgElements(children) {\n var svgElements = [];\n React.Children.forEach(children, function (entry) {\n if (entry && entry.type && _isString(entry.type) && SVG_TAGS.indexOf(entry.type) >= 0) {\n svgElements.push(entry);\n }\n });\n return svgElements;\n};\nexport var isSingleChildEqual = function isSingleChildEqual(nextChild, prevChild) {\n if (_isNil(nextChild) && _isNil(prevChild)) {\n return true;\n }\n\n if (!_isNil(nextChild) && !_isNil(prevChild)) {\n var _ref = nextChild.props || {},\n nextChildren = _ref.children,\n nextProps = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _ref2 = prevChild.props || {},\n prevChildren = _ref2.children,\n prevProps = _objectWithoutProperties(_ref2, [\"children\"]);\n\n if (nextChildren && prevChildren) {\n // eslint-disable-next-line no-use-before-define\n return shallowEqual(nextProps, prevProps) && isChildrenEqual(nextChildren, prevChildren);\n }\n\n if (!nextChildren && !prevChildren) {\n return shallowEqual(nextProps, prevProps);\n }\n\n return false;\n }\n\n return false;\n};\n/**\n * Wether props of children changed\n * @param {Object} nextChildren The latest children\n * @param {Object} prevChildren The prev children\n * @return {Boolean} equal or not\n */\n\nexport var isChildrenEqual = function isChildrenEqual(nextChildren, prevChildren) {\n if (nextChildren === prevChildren) {\n return true;\n }\n\n if (Children.count(nextChildren) !== Children.count(prevChildren)) {\n return false;\n }\n\n var count = Children.count(nextChildren);\n\n if (count === 0) {\n return true;\n }\n\n if (count === 1) {\n return isSingleChildEqual(_isArray(nextChildren) ? nextChildren[0] : nextChildren, _isArray(prevChildren) ? prevChildren[0] : prevChildren);\n }\n\n for (var i = 0; i < count; i++) {\n var nextChild = nextChildren[i];\n var prevChild = prevChildren[i];\n\n if (_isArray(nextChild) || _isArray(prevChild)) {\n if (!isChildrenEqual(nextChild, prevChild)) {\n return false;\n }\n } else if (!isSingleChildEqual(nextChild, prevChild)) {\n return false;\n }\n }\n\n return true;\n};\nexport var renderByOrder = function renderByOrder(children, renderMap) {\n var elements = [];\n var record = {};\n Children.forEach(children, function (child, index) {\n if (child && isSvgElement(child)) {\n elements.push(child);\n } else if (child && renderMap[getDisplayName(child.type)]) {\n var displayName = getDisplayName(child.type);\n var _renderMap$displayNam = renderMap[displayName],\n handler = _renderMap$displayNam.handler,\n once = _renderMap$displayNam.once;\n\n if (once && !record[displayName] || !once) {\n var results = handler(child, displayName, index);\n\n if (_isArray(results)) {\n elements = [elements].concat(_toConsumableArray(results));\n } else {\n elements.push(results);\n }\n\n record[displayName] = true;\n }\n }\n });\n return elements;\n};\nexport var getReactEventByType = function getReactEventByType(e) {\n var type = e && e.type;\n\n if (type && REACT_BROWSER_EVENT_MAP[type]) {\n return REACT_BROWSER_EVENT_MAP[type];\n }\n\n return null;\n};\nexport var parseChildIndex = function parseChildIndex(child, children) {\n var result = -1;\n Children.forEach(children, function (entry, index) {\n if (entry === child) {\n result = index;\n }\n });\n return result;\n};", + "require('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nmodule.exports = require('../modules/_core').Math;\n", + "require('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nmodule.exports = require('../modules/_core').Number;\n", + "module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n", + "var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n", + "var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n", + "// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n", + "var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n", + "var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n", + "// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n", + "// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n", + "// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n", + "var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n", + "// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n", + "var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `)))) + ((("`" + `library`) + ("`" + (`\nmodule.exports = $export;\n", + "module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n", + "// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n", + "var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n", + "var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n", + "var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n", + "module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n", + "var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n", + "// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n", + "// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n", + "module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n", + "module.exports = false;\n", + "// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n", + "// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n", + "// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n", + "// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n", + "// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake ` + "`"))) + ((`null` + ("`" + ` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n", + "var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n", + "var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n", + "var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n", + "// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n", + "var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n", + "// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n", + "exports.f = {}.propertyIsEnumerable;\n", + "var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n", + "var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n", + "module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n", + "var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n", + "// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n", + "var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n", + "var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n", + "'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n", + "var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n", + "module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n", + "var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n", + "// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n", + "// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n", + "// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n", + "// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n", + "var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n", + "// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n", + "// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n", + "// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n", + "// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n", + "// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n", + "// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n", + "// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n", + "// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n", + "// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n", + "// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n", + "// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n", + "// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n", + "// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n", + "// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n", + "// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n", + "// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n", + "// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n", + "'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n", + "// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n", + "// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n", + "// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n", + "// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n", + "// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n", + "// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n", + "// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n", + "var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n", + "var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n", + "'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n", + "'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `)) + ("`" + (`prop-types` + "`")))))) + (((((` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in ` + "`") + (`./factoryWithTypeCheckers.js` + ("`" + `.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `))) + (("`" + (`prop-types` + "`")) + (` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using ` + ("`" + `prop-types`)))) + ((("`" + ` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n", + "/**\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\nvar reduceFunctionCall = require(\"reduce-function-call\")\nvar mexp = require(\"math-expression-evaluator\")\n\n/**\n * Constantes\n */\nvar MAX_STACK = 100 // should be enough for a single calc()...\nvar NESTED_CALC_RE = /(\\+|\\-|\\*|\\\\|[^a-z]|)(\\s*)(\\()/g\n\n/**\n * Global variables\n */\nvar stack\n\n/**\n * Expose reduceCSSCalc plugin\n *\n * @type {Function}\n */\nmodule.exports = reduceCSSCalc\n\n/**\n * Reduce CSS calc() in a string, whenever it's possible\n *\n * @param {String} value css input\n */\nfunction reduceCSSCalc(value, decimalPrecision) {\n stack = 0\n decimalPrecision = Math.pow(10, decimalPrecision === undefined ? 5 : decimalPrecision)\n\n // Allow calc() on multiple lines\n value = value.replace(/\\n+/g, \" \")\n\n /**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n */\n function evaluateExpression (expression, functionIdentifier, call) {\n if (stack++ > MAX_STACK) {\n stack = 0\n throw new Error(\"Call stack overflow for \" + call)\n }\n\n if (expression === \"\") {\n throw new Error(functionIdentifier + \"(): '\" + call + \"' must contain a non-whitespace string\")\n }\n\n expression = evaluateNestedExpression(expression, call)\n\n var units = getUnitsInExpression(expression)\n\n // If the expression contains multiple units or CSS variables,\n // then let the expression be (i.e. browser calc())\n if (units.length > 1 || expression.indexOf(\"var(\") > -1) {\n return functionIdentifier + \"(\" + expression + \")\"\n }\n\n var unit = units[0] || \"\"\n\n if (unit === \"%\") {\n // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%):\n // console.log(expression)\n expression = expression.replace(/\\b[0-9\\.]+%/g, function(percent) {\n return parseFloat(percent.slice(0, -1)) * 0.01\n })\n }\n\n // Remove units in expression:\n var toEvaluate = expression.replace(new RegExp(unit, \"gi\"), \"\")\n var result\n\n try {\n result = mexp.eval(toEvaluate)\n }\n catch (e) {\n return functionIdentifier + \"(\" + expression + \")\"\n }\n\n // Transform back to a percentage result:\n if (unit === \"%\") {\n result *= 100\n }\n\n // adjust rounding shit\n // (0.1 * 0.2 === 0.020000000000000004)\n if (functionIdentifier.length || unit === \"%\") {\n result = Math.round(result * decimalPrecision) / decimalPrecision\n }\n\n // Add unit\n result += unit\n\n return result\n }\n\n /**\n * Evaluates nested expressions\n *\n * @param {String} expression\n * @returns {String}\n */\n function evaluateNestedExpression(expression, call) {\n // Remove the calc part from nested expressions to ensure\n // better browser compatibility\n expression = expression.replace(/((?:\\-[a-z]+\\-)?calc)/g, \"\")\n var evaluatedPart = \"\"\n var nonEvaluatedPart = expression\n var matches\n while ((matches = NESTED_CALC_RE.exec(nonEvaluatedPart))) {\n if (matches[0].index > 0) {\n evaluatedPart += nonEvaluatedPart.substring(0, matches[0].index)\n }\n\n var balancedExpr = balanced(\"(\", \")\", nonEvaluatedPart.substring([0].index))\n if (balancedExpr.body === \"\") {\n throw new Error(\"'\" + expression + \"' must contain a non-whitespace string\")\n }\n\n var evaluated = evaluateExpression(balancedExpr.body, \"\", call)\n\n evaluatedPart += balancedExpr.pre + evaluated\n nonEvaluatedPart = balancedExpr.post\n }\n\n return evaluatedPart + nonEvaluatedPart\n }\n\n return reduceFunctionCall(value, /((?:\\-[a-z]+\\-)?calc)\\(/, evaluateExpression)\n}\n\n/**\n * Checks what units are used in an expression\n *\n * @param {String} expression\n * @returns {Array}\n */\n\nfunction getUnitsInExpression(expression) {\n var uniqueUnits = []\n var uniqueLowerCaseUnits = []\n var unitRegEx = /[\\.0-9]([%a-z]+)/gi\n var matches = unitRegEx.exec(expression)\n\n while (matches) {\n if (!matches || !matches[1]) {\n continue\n }\n\n if (uniqueLowerCaseUnits.indexOf(matches[1].toLowerCase()) === -1) {\n uniqueUnits.push(matches[1])\n uniqueLowerCaseUnits.push(matches[1].toLowerCase())\n }\n\n matches = unitRegEx.exec(expression)\n }\n\n return uniqueUnits\n}\n", + "/*\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\n\n/**\n * Expose `) + ("`" + (`reduceFunctionCall` + "`"))) + ((`\n *\n * @type {Function}\n */\nmodule.exports = reduceFunctionCall\n\n/**\n * Walkthrough all expressions, evaluate them and insert them into the declaration\n *\n * @param {Array} expressions\n * @param {Object} declaration\n */\n\nfunction reduceFunctionCall(string, functionRE, callback) {\n var call = string\n return getFunctionCalls(string, functionRE).reduce(function(string, obj) {\n return string.replace(obj.functionIdentifier + \"(\" + obj.matches.body + \")\", evalFunctionCall(obj.matches.body, obj.functionIdentifier, callback, call, functionRE))\n }, string)\n}\n\n/**\n * Parses expressions in a value\n *\n * @param {String} value\n * @returns {Array}\n * @api private\n */\n\nfunction getFunctionCalls(call, functionRE) {\n var expressions = []\n\n var fnRE = typeof functionRE === \"string\" ? new RegExp(\"\\\\b(\" + functionRE + \")\\\\(\") : functionRE\n do {\n var searchMatch = fnRE.exec(call)\n if (!searchMatch) {\n return expressions\n }\n if (searchMatch[1] === undefined) {\n throw new Error(\"Missing the first couple of parenthesis to get the function identifier in \" + functionRE)\n }\n var fn = searchMatch[1]\n var startIndex = searchMatch.index\n var matches = balanced(\"(\", \")\", call.substring(startIndex))\n\n if (!matches || matches.start !== searchMatch[0].length - 1) {\n throw new SyntaxError(fn + \"(): missing closing ')' in the value '\" + call + \"'\")\n }\n\n expressions.push({matches: matches, functionIdentifier: fn})\n call = matches.post\n }\n while (fnRE.test(call))\n\n return expressions\n}\n\n/**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n * @api private\n */\n\nfunction evalFunctionCall (string, functionIdentifier, callback, call, functionRE) {\n // allow recursivity\n return callback(reduceFunctionCall(string, functionRE, callback), functionIdentifier, call)\n}\n", + "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", + "/** @license React v0.13.4\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});var d=null,e=!1,g=3,k=-1,l=-1,m=!1,n=!1;function p(){if(!m){var a=d.expirationTime;n?q():n=!0;r(t,a)}}\nfunction u(){var a=d,b=d.next;if(d===b)d=null;else{var c=d.previous;d=c.next=b;b.previous=c}a.next=a.previous=null;c=a.callback;b=a.expirationTime;a=a.priorityLevel;var f=g,Q=l;g=a;l=b;try{var h=c()}finally{g=f,l=Q}if(\"function\"===typeof h)if(h={callback:h,priorityLevel:a,expirationTime:b,next:null,previous:null},null===d)d=h.next=h.previous=h;else{c=null;a=d;do{if(a.expirationTime>=b){c=a;break}a=a.next}while(a!==d);null===c?c=d:c===d&&(d=h,p());b=c.previous;b.next=c.previous=h;h.next=c;h.previous=\nb}}function v(){if(-1===k&&null!==d&&1===d.priorityLevel){m=!0;try{do u();while(null!==d&&1===d.priorityLevel)}finally{m=!1,null!==d?p():n=!1}}}function t(a){m=!0;var b=e;e=a;try{if(a)for(;null!==d;){var c=exports.unstable_now();if(d.expirationTime<=c){do u();while(null!==d&&d.expirationTime<=c)}else break}else if(null!==d){do u();while(null!==d&&!w())}}finally{m=!1,e=b,null!==d?p():n=!1,v()}}\nvar x=Date,y=\"function\"===typeof setTimeout?setTimeout:void 0,z=\"function\"===typeof clearTimeout?clearTimeout:void 0,A=\"function\"===typeof requestAnimationFrame?requestAnimationFrame:void 0,B=\"function\"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,C,D;function E(a){C=A(function(b){z(D);a(b)});D=y(function(){B(C);a(exports.unstable_now())},100)}\nif(\"object\"===typeof performance&&\"function\"===typeof performance.now){var F=performance;exports.unstable_now=function(){return F.now()}}else exports.unstable_now=function(){return x.now()};var r,q,w,G=null;\"undefined\"!==typeof window?G=window:\"undefined\"!==typeof global&&(G=global);\nif(G&&G._schedMock){var H=G._schedMock;r=H[0];q=H[1];w=H[2];exports.unstable_now=H[3]}else if(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var I=null,J=function(a){if(null!==I)try{I(a)}finally{I=null}};r=function(a){null!==I?setTimeout(r,0,a):(I=a,setTimeout(J,0,!1))};q=function(){I=null};w=function(){return!1}}else{\"undefined\"!==typeof console&&(\"function\"!==typeof A&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\n\"function\"!==typeof B&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));var K=null,L=!1,M=-1,N=!1,O=!1,P=0,R=33,S=33;w=function(){return P<=exports.unstable_now()};var T=new MessageChannel,U=T.port2;T.port1.onmessage=function(){L=!1;var a=K,b=M;K=null;M=-1;var c=exports.unstable_now(),f=!1;if(0>=P-c)if(-1!==b&&b<=c)f=!0;else{N||(N=!0,E(V));K=a;M=b;return}if(null!==a){O=!0;try{a(f)}finally{O=!1}}};\nvar V=function(a){if(null!==K){E(V);var b=a-P+S;bb&&(b=8),S=bb?U.postMessage(void 0):N||(N=!0,E(V))};q=function(){K=null;L=!1;M=-1}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;\nexports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=g,f=k;g=a;k=exports.unstable_now();try{return b()}finally{g=c,k=f,v()}};exports.unstable_next=function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g,f=k;g=b;k=exports.unstable_now();try{return a()}finally{g=c,k=f,v()}};\nexports.unstable_scheduleCallback=function(a,b){var c=-1!==k?k:exports.unstable_now();if(\"object\"===typeof b&&null!==b&&\"number\"===typeof b.timeout)b=c+b.timeout;else switch(g){case 1:b=c+-1;break;case 2:b=c+250;break;case 5:b=c+1073741823;break;case 4:b=c+1E4;break;default:b=c+5E3}a={callback:a,priorityLevel:g,expirationTime:b,next:null,previous:null};if(null===d)d=a.next=a.previous=a,p();else{c=null;var f=d;do{if(f.expirationTime>b){c=f;break}f=f.next}while(f!==d);null===c?c=d:c===d&&(d=a,p());\nb=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)d=null;else{a===d&&(d=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,f=k;g=b;k=exports.unstable_now();try{return a.apply(this,arguments)}finally{g=c,k=f,v()}}};exports.unstable_getCurrentPriorityLevel=function(){return g};\nexports.unstable_shouldYield=function(){return!e&&(null!==d&&d.expirationTime element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", + "/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n", + "export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n", + "var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `)))) + ((("`" + (`setimmediate` + "`")) + (` was\n// able to install onto. Search each possibility in the same order as the\n// ` + ("`" + `setimmediate`))) + (("`" + (` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n", + "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '` + "`")) + (`warning(condition, format, ...args)` + ("`" + ` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n", + "var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n", + "module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n", + "module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n" + ], + "sourceRoot": "" +}`)))))))))))))) + +func bundleJsMapBytes() ([]byte, error) { + return _bundleJsMap, nil +} + +func bundleJsMap() (*asset, error) { + bytes, err := bundleJsMapBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "bundle.js.map", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0x68, 0x46, 0x48, 0x3, 0x7c, 0x38, 0x69, 0xe7, 0xca, 0x1d, 0x61, 0xd8, 0x6c, 0x20, 0x6a, 0xf5, 0xe3, 0x9c, 0xa5, 0x35, 0xd7, 0xd9, 0x4d, 0x63, 0xd3, 0xe3, 0xdc, 0x80, 0x20, 0x6a, 0xe1}} return a, nil } @@ -40727,6 +38047,8 @@ var _bindata = map[string]func() (*asset, error){ "index.html": indexHtml, "bundle.js": bundleJs, + + "bundle.js.map": bundleJsMap, } // AssetDir returns the file names below a certain @@ -40770,8 +38092,9 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "bundle.js": {bundleJs, map[string]*bintree{}}, - "index.html": {indexHtml, map[string]*bintree{}}, + "bundle.js": {bundleJs, map[string]*bintree{}}, + "bundle.js.map": {bundleJsMap, map[string]*bintree{}}, + "index.html": {indexHtml, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintignore b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintignore new file mode 100644 index 00000000..565bf83e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintignore @@ -0,0 +1,3 @@ +node_modules/* #ignored by default +flow-typed/* +bundle.js diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintrc b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintrc index ab7a3a03..923d6f5d 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintrc +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.eslintrc @@ -16,71 +16,66 @@ // React syntax style mostly according to https://github.com/airbnb/javascript/tree/master/react { - 'env': { - 'browser': true, - 'node': true, - 'es6': true, + "env": { + "browser": true, + "node": true, + "es6": true }, - 'parser': 'babel-eslint', - 'parserOptions': { - 'sourceType': 'module', - 'ecmaVersion': 6, - 'ecmaFeatures': { - 'jsx': true, + "parser": "babel-eslint", + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 6, + "ecmaFeatures": { + "jsx": true } }, - 'extends': 'airbnb', - 'plugins': [ - 'flowtype', - 'react', + "extends": [ + "eslint:recommended", + "airbnb", + "plugin:flowtype/recommended", + "plugin:react/recommended" ], - 'rules': { - 'no-tabs': 'off', - 'indent': ['error', 'tab'], - 'react/jsx-indent': ['error', 'tab'], - 'react/jsx-indent-props': ['error', 'tab'], - 'react/prefer-stateless-function': 'off', - 'jsx-quotes': ['error', 'prefer-single'], - 'no-plusplus': 'off', - 'no-console': ['error', { allow: ['error'] }], - + "plugins": [ + "flowtype", + "react" + ], + "rules": { + "no-tabs": "off", + "indent": ["error", "tab"], + "react/jsx-indent": ["error", "tab"], + "react/jsx-indent-props": ["error", "tab"], + "react/prefer-stateless-function": "off", + "react/destructuring-assignment": ["error", "always", {"ignoreClassFields": true}], + "jsx-quotes": ["error", "prefer-single"], + "no-plusplus": "off", + "no-console": ["error", { "allow": ["error"] }], // Specifies the maximum length of a line. - 'max-len': ['warn', 120, 2, { - 'ignoreUrls': true, - 'ignoreComments': false, - 'ignoreRegExpLiterals': true, - 'ignoreStrings': true, - 'ignoreTemplateLiterals': true, + "max-len": ["warn", 120, 2, { + "ignoreUrls": true, + "ignoreComments": false, + "ignoreRegExpLiterals": true, + "ignoreStrings": true, + "ignoreTemplateLiterals": true }], // Enforces consistent spacing between keys and values in object literal properties. - 'key-spacing': ['error', {'align': { - 'beforeColon': false, - 'afterColon': true, - 'on': 'value' + "key-spacing": ["error", {"align": { + "beforeColon": false, + "afterColon": true, + "on": "value" }}], // Prohibits padding inside curly braces. - 'object-curly-spacing': ['error', 'never'], - 'no-use-before-define': 'off', // messageAPI - 'default-case': 'off', - - 'flowtype/boolean-style': ['error', 'boolean'], - 'flowtype/define-flow-type': 'warn', - 'flowtype/generic-spacing': ['error', 'never'], - 'flowtype/no-primitive-constructor-types': 'error', - 'flowtype/no-weak-types': 'error', - 'flowtype/object-type-delimiter': ['error', 'comma'], - 'flowtype/require-valid-file-annotation': 'error', - 'flowtype/semi': ['error', 'always'], - 'flowtype/space-after-type-colon': ['error', 'always'], - 'flowtype/space-before-generic-bracket': ['error', 'never'], - 'flowtype/space-before-type-colon': ['error', 'never'], - 'flowtype/union-intersection-spacing': ['error', 'always'], - 'flowtype/use-flow-type': 'warn', - 'flowtype/valid-syntax': 'warn', + "object-curly-spacing": ["error", "never"], + "no-use-before-define": "off", // message types + "default-case": "off" }, - 'settings': { - 'flowtype': { - 'onlyFilesWithFlowAnnotation': true, + "settings": { + "import/resolver": { + "node": { + "paths": ["components"] // import './components/Component' -> import 'Component' + } + }, + "flowtype": { + "onlyFilesWithFlowAnnotation": true } - }, + } } diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.flowconfig b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.flowconfig index 8051ae5d..9104d62a 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.flowconfig +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/.flowconfig @@ -7,3 +7,5 @@ node_modules/jss/flow-typed [options] include_warnings=true +module.system.node.resolve_dirname=node_modules +module.system.node.resolve_dirname=components diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx index ed2f411f..f2750ee3 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx @@ -16,43 +16,46 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +import {faHome, faLink, faGlobeEurope, faTachometerAlt, faList} from '@fortawesome/free-solid-svg-icons'; +import {faCreditCard} from '@fortawesome/free-regular-svg-icons'; + type ProvidedMenuProp = {|title: string, icon: string|}; const menuSkeletons: Array<{|id: string, menu: ProvidedMenuProp|}> = [ { id: 'home', menu: { title: 'Home', - icon: 'home', + icon: faHome, }, }, { id: 'chain', menu: { title: 'Chain', - icon: 'link', + icon: faLink, }, }, { id: 'txpool', menu: { title: 'TxPool', - icon: 'credit-card', + icon: faCreditCard, }, }, { id: 'network', menu: { title: 'Network', - icon: 'globe', + icon: faGlobeEurope, }, }, { id: 'system', menu: { title: 'System', - icon: 'tachometer', + icon: faTachometerAlt, }, }, { id: 'logs', menu: { title: 'Logs', - icon: 'list', + icon: faList, }, }, ]; @@ -64,8 +67,26 @@ export const MENU: Map = new Map(menuSkeletons.map(({id, export const DURATION = 200; +export const chartStrokeWidth = 0.2; + export const styles = { light: { color: 'rgba(255, 255, 255, 0.54)', }, }; + +// unit contains the units for the bytePlotter. +export const unit = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; + +// simplifyBytes returns the simplified version of the given value followed by the unit. +export const simplifyBytes = (x: number) => { + let i = 0; + for (; x > 1024 && i < 8; i++) { + x /= 1024; + } + return x.toFixed(2).toString().concat(' ', unit[i], 'B'); +}; + +// hues contains predefined colors for gradient stop colors. +export const hues = ['#00FF00', '#FFFF00', '#FF7F00', '#FF0000']; +export const hueScale = [0, 2048, 102400, 2097152]; diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx index 1075346f..08da823c 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx @@ -19,7 +19,7 @@ import React, {Component} from 'react'; import type {ChildrenArray} from 'react'; -import Grid from 'material-ui/Grid'; +import Grid from '@material-ui/core/Grid'; // styles contains the constant styles of the component. const styles = { @@ -33,7 +33,7 @@ const styles = { flex: 1, padding: 0, }, -} +}; export type Props = { children: ChildrenArray>, diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx index f597c1ca..52d005e5 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx @@ -18,8 +18,8 @@ import React, {Component} from 'react'; -import Typography from 'material-ui/Typography'; -import {styles} from '../common'; +import Typography from '@material-ui/core/Typography'; +import {styles, simplifyBytes} from '../common'; // multiplier multiplies a number by another. export const multiplier = (by: number = 1) => (x: number) => x * by; @@ -37,18 +37,6 @@ export const percentPlotter = (text: string, mapper: (T => T) = multiplier(1) ); }; -// unit contains the units for the bytePlotter. -const unit = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; - -// simplifyBytes returns the simplified version of the given value followed by the unit. -const simplifyBytes = (x: number) => { - let i = 0; - for (; x > 1024 && i < 8; i++) { - x /= 1024; - } - return x.toFixed(2).toString().concat(' ', unit[i], 'B'); -}; - // bytePlotter renders a tooltip, which displays the payload as a byte value. export const bytePlotter = (text: string, mapper: (T => T) = multiplier(1)) => (payload: T) => { const p = mapper(payload); @@ -70,7 +58,8 @@ export const bytePerSecPlotter = (text: string, mapper: (T => T) = multiplier } return ( - {text} {simplifyBytes(p)}/s + {text} + {simplifyBytes(p)}/s ); }; diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx index 63c2186a..944d5009 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx @@ -17,14 +17,16 @@ // along with the go-ethereum library. If not, see . import React, {Component} from 'react'; +import {hot} from 'react-hot-loader'; -import withStyles from 'material-ui/styles/withStyles'; +import withStyles from '@material-ui/core/styles/withStyles'; -import Header from './Header'; -import Body from './Body'; +import Header from 'Header'; +import Body from 'Body'; +import {inserter as logInserter, SAME} from 'Logs'; +import {inserter as peerInserter} from 'Network'; import {MENU} from '../common'; import type {Content} from '../types/content'; -import {inserter as logInserter} from './Logs'; // deepUpdate updates an object corresponding to the given update data, which has // the shape of the same structure as the original object. updater also has the same @@ -37,7 +39,6 @@ import {inserter as logInserter} from './Logs'; // of the update. const deepUpdate = (updater: Object, update: Object, prev: Object): $Shape => { if (typeof update === 'undefined') { - // TODO (kurkomisi): originally this was deep copy, investigate it. return prev; } if (typeof updater === 'function') { @@ -88,8 +89,13 @@ const defaultContent: () => Content = () => ({ home: {}, chain: {}, txpool: {}, - network: {}, - system: { + network: { + peers: { + bundles: {}, + }, + diff: [], + }, + system: { activeMemory: [], virtualMemory: [], networkIngress: [], @@ -103,8 +109,8 @@ const defaultContent: () => Content = () => ({ chunks: [], endTop: false, endBottom: true, - topChanged: 0, - bottomChanged: 0, + topChanged: SAME, + bottomChanged: SAME, }, }); @@ -119,7 +125,7 @@ const updaters = { home: null, chain: null, txpool: null, - network: null, + network: peerInserter(200), system: { activeMemory: appender(200), virtualMemory: appender(200), @@ -186,8 +192,8 @@ class Dashboard extends Component { // reconnect establishes a websocket connection with the server, listens for incoming messages // and tries to reconnect on connection loss. reconnect = () => { - // PROD is defined by webpack. - const server = new WebSocket(`${((window.location.protocol === 'https:') ? 'wss://' : 'ws://')}${PROD ? window.location.host : 'localhost:8080'}/api`); + const host = process.env.NODE_ENV === 'production' ? window.location.host : 'localhost:8080'; + const server = new WebSocket(`${((window.location.protocol === 'https:') ? 'wss://' : 'ws://')}${host}/api`); server.onopen = () => { this.setState({content: defaultContent(), shouldUpdate: {}, server}); }; @@ -249,4 +255,4 @@ class Dashboard extends Component { } } -export default withStyles(themeStyles)(Dashboard); +export default hot(module)(withStyles(themeStyles)(Dashboard)); diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx index 20830cbb..a5cab08a 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx @@ -18,14 +18,19 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import Typography from 'material-ui/Typography'; -import Grid from 'material-ui/Grid'; -import {ResponsiveContainer, AreaChart, Area, Tooltip} from 'recharts'; +import withStyles from '@material-ui/core/styles/withStyles'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import ResponsiveContainer from 'recharts/es6/component/ResponsiveContainer'; +import AreaChart from 'recharts/es6/chart/AreaChart'; +import Area from 'recharts/es6/cartesian/Area'; +import ReferenceLine from 'recharts/es6/cartesian/ReferenceLine'; +import Label from 'recharts/es6/component/Label'; +import Tooltip from 'recharts/es6/component/Tooltip'; -import ChartRow from './ChartRow'; -import CustomTooltip, {bytePlotter, bytePerSecPlotter, percentPlotter, multiplier} from './CustomTooltip'; -import {styles as commonStyles} from '../common'; +import ChartRow from 'ChartRow'; +import CustomTooltip, {bytePlotter, bytePerSecPlotter, percentPlotter, multiplier} from 'CustomTooltip'; +import {chartStrokeWidth, styles as commonStyles} from '../common'; import type {General, System} from '../types/content'; const FOOTER_SYNC_ID = 'footerSyncId'; @@ -38,6 +43,15 @@ const TRAFFIC = 'traffic'; const TOP = 'Top'; const BOTTOM = 'Bottom'; +const cpuLabelTop = 'Process load'; +const cpuLabelBottom = 'System load'; +const memoryLabelTop = 'Active memory'; +const memoryLabelBottom = 'Virtual memory'; +const diskLabelTop = 'Disk read'; +const diskLabelBottom = 'Disk write'; +const trafficLabelTop = 'Download'; +const trafficLabelBottom = 'Upload'; + // styles contains the constant styles of the component. const styles = { footer: { @@ -53,6 +67,10 @@ const styles = { height: '100%', width: '99%', }, + link: { + color: 'inherit', + textDecoration: 'none', + }, }; // themeStyles returns the styles generated from the theme for the component. @@ -73,18 +91,23 @@ export type Props = { shouldUpdate: Object, }; +type State = {}; + // Footer renders the footer of the dashboard. -class Footer extends Component { - shouldComponentUpdate(nextProps) { +class Footer extends Component { + shouldComponentUpdate(nextProps: Readonly, nextState: Readonly, nextContext: any) { return typeof nextProps.shouldUpdate.general !== 'undefined' || typeof nextProps.shouldUpdate.system !== 'undefined'; } // halfHeightChart renders an area chart with half of the height of its parent. - halfHeightChart = (chartProps, tooltip, areaProps) => ( + halfHeightChart = (chartProps, tooltip, areaProps, label, position) => ( - + {!tooltip || (} />)} - + + + ); @@ -111,6 +134,8 @@ class Footer extends Component { }, topChart.tooltip, {dataKey: topKey, stroke: topColor, fill: topColor}, + topChart.label, + 'insideBottomLeft', )} {this.halfHeightChart( { @@ -120,6 +145,8 @@ class Footer extends Component { }, bottomChart.tooltip, {dataKey: bottomKey, stroke: bottomColor, fill: bottomColor}, + bottomChart.label, + 'insideTopLeft', )}
); @@ -135,37 +162,42 @@ class Footer extends Component { {this.doubleChart( FOOTER_SYNC_ID, CPU, - {data: system.processCPU, tooltip: percentPlotter('Process load')}, - {data: system.systemCPU, tooltip: percentPlotter('System load', multiplier(-1))}, + {data: system.processCPU, tooltip: percentPlotter(cpuLabelTop), label: cpuLabelTop}, + {data: system.systemCPU, tooltip: percentPlotter(cpuLabelBottom, multiplier(-1)), label: cpuLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, MEMORY, - {data: system.activeMemory, tooltip: bytePlotter('Active memory')}, - {data: system.virtualMemory, tooltip: bytePlotter('Virtual memory', multiplier(-1))}, + {data: system.activeMemory, tooltip: bytePlotter(memoryLabelTop), label: memoryLabelTop}, + {data: system.virtualMemory, tooltip: bytePlotter(memoryLabelBottom, multiplier(-1)), label: memoryLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, DISK, - {data: system.diskRead, tooltip: bytePerSecPlotter('Disk read')}, - {data: system.diskWrite, tooltip: bytePerSecPlotter('Disk write', multiplier(-1))}, + {data: system.diskRead, tooltip: bytePerSecPlotter(diskLabelTop), label: diskLabelTop}, + {data: system.diskWrite, tooltip: bytePerSecPlotter(diskLabelBottom, multiplier(-1)), label: diskLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, TRAFFIC, - {data: system.networkIngress, tooltip: bytePerSecPlotter('Download')}, - {data: system.networkEgress, tooltip: bytePerSecPlotter('Upload', multiplier(-1))}, + {data: system.networkIngress, tooltip: bytePerSecPlotter(trafficLabelTop), label: trafficLabelTop}, + {data: system.networkEgress, tooltip: bytePerSecPlotter(trafficLabelBottom, multiplier(-1)), label: trafficLabelBottom}, )} - + Geth {general.version} {general.commit && ( {'Commit '} -
+ {general.commit.substring(0, 8)} diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx index 43bd2bed..063e82d0 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx @@ -18,13 +18,13 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import AppBar from 'material-ui/AppBar'; -import Toolbar from 'material-ui/Toolbar'; -import IconButton from 'material-ui/IconButton'; -import Icon from 'material-ui/Icon'; -import MenuIcon from 'material-ui-icons/Menu'; -import Typography from 'material-ui/Typography'; +import withStyles from '@material-ui/core/styles/withStyles'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import IconButton from '@material-ui/core/IconButton'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faBars} from '@fortawesome/free-solid-svg-icons'; +import Typography from '@material-ui/core/Typography'; // styles contains the constant styles of the component. const styles = { @@ -67,9 +67,7 @@ class Header extends Component { - - - + Go Ethereum Dashboard diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx index 57d6328d..3359287d 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx @@ -18,7 +18,8 @@ import React, {Component} from 'react'; -import List, {ListItem} from 'material-ui/List'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; import escapeHtml from 'escape-html'; import type {Record, Content, LogsMessage, Logs as LogsType} from '../types/content'; @@ -104,9 +105,9 @@ const createChunk = (records: Array) => { // ADDED, SAME and REMOVED are used to track the change of the log chunk array. // The scroll position is set using these values. -const ADDED = 1; -const SAME = 0; -const REMOVED = -1; +export const ADDED = 1; +export const SAME = 0; +export const REMOVED = -1; // inserter is a state updater function for the main component, which inserts the new log chunk into the chunk array. // limit is the maximum length of the chunk array, used in order to prevent the browser from OOM. @@ -166,7 +167,7 @@ export const inserter = (limit: number) => (update: LogsMessage, prev: LogsType) // styles contains the constant styles of the component. const styles = { logListItem: { - padding: 0, + padding: 0, lineHeight: 1.231, }, logChunk: { @@ -251,15 +252,15 @@ class Logs extends Component { // atBottom checks if the scroll position it at the bottom of the container. atBottom = () => { const {container} = this.props; - return container.scrollHeight - container.scrollTop <= - container.clientHeight + container.scrollHeight * requestBand; + return container.scrollHeight - container.scrollTop + <= container.clientHeight + container.scrollHeight * requestBand; }; // beforeUpdate is called by the parent component, saves the previous scroll position // and the height of the first log chunk, which can be deleted during the insertion. beforeUpdate = () => { let firstHeight = 0; - let chunkList = this.content.children[1]; + const chunkList = this.content.children[1]; if (chunkList && chunkList.children[0]) { firstHeight = chunkList.children[0].clientHeight; } diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx index 0018aaf7..5bb13abd 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx @@ -18,11 +18,12 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; +import withStyles from '@material-ui/core/styles/withStyles'; +import Network from 'Network'; +import Logs from 'Logs'; +import Footer from 'Footer'; import {MENU} from '../common'; -import Logs from './Logs'; -import Footer from './Footer'; import type {Content} from '../types/content'; // styles contains the constant styles of the component. @@ -33,7 +34,7 @@ const styles = { width: '100%', }, content: { - flex: 1, + flex: 1, overflow: 'auto', }, }; @@ -54,21 +55,16 @@ export type Props = { send: string => void, }; +type State = {}; + // Main renders the chosen content. -class Main extends Component { +class Main extends Component { constructor(props) { super(props); this.container = React.createRef(); this.content = React.createRef(); } - getSnapshotBeforeUpdate() { - if (this.content && typeof this.content.beforeUpdate === 'function') { - return this.content.beforeUpdate(); - } - return null; - } - componentDidUpdate(prevProps, prevState, snapshot) { if (this.content && typeof this.content.didUpdate === 'function') { this.content.didUpdate(prevProps, prevState, snapshot); @@ -81,6 +77,13 @@ class Main extends Component { } }; + getSnapshotBeforeUpdate(prevProps: Readonly

, prevState: Readonly) { + if (this.content && typeof this.content.beforeUpdate === 'function') { + return this.content.beforeUpdate(); + } + return null; + } + render() { const { classes, active, content, shouldUpdate, @@ -89,9 +92,20 @@ class Main extends Component { let children = null; switch (active) { case MENU.get('home').id: + children =

Work in progress.
; + break; case MENU.get('chain').id: + children =
Work in progress.
; + break; case MENU.get('txpool').id: + children =
Work in progress.
; + break; case MENU.get('network').id: + children = ; + break; case MENU.get('system').id: children =
Work in progress.
; break; diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx new file mode 100644 index 00000000..3a52892e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx @@ -0,0 +1,529 @@ +// @flow + +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +import React, {Component} from 'react'; + +import Table from '@material-ui/core/Table'; +import TableHead from '@material-ui/core/TableHead'; +import TableBody from '@material-ui/core/TableBody'; +import TableRow from '@material-ui/core/TableRow'; +import TableCell from '@material-ui/core/TableCell'; +import Grid from '@material-ui/core/Grid/Grid'; +import Typography from '@material-ui/core/Typography'; +import {AreaChart, Area, Tooltip, YAxis} from 'recharts'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faCircle as fasCircle} from '@fortawesome/free-solid-svg-icons'; +import {faCircle as farCircle} from '@fortawesome/free-regular-svg-icons'; +import convert from 'color-convert'; + +import CustomTooltip, {bytePlotter, multiplier} from 'CustomTooltip'; +import type {Network as NetworkType, PeerEvent} from '../types/content'; +import {styles as commonStyles, chartStrokeWidth, hues, hueScale} from '../common'; + +// Peer chart dimensions. +const trafficChartHeight = 18; +const trafficChartWidth = 400; + +// setMaxIngress adjusts the peer chart's gradient values based on the given value. +const setMaxIngress = (peer, value) => { + peer.maxIngress = value; + peer.ingressGradient = []; + peer.ingressGradient.push({offset: hueScale[0], color: hues[0]}); + let i = 1; + for (; i < hues.length && value > hueScale[i]; i++) { + peer.ingressGradient.push({offset: Math.floor(hueScale[i] * 100 / value), color: hues[i]}); + } + i--; + if (i < hues.length - 1) { + // Usually the maximum value gets between two points on the predefined + // color scale (e.g. 123KB is somewhere between 100KB (#FFFF00) and + // 1MB (#FF0000)), and the charts need to be comparable by the colors, + // so we have to calculate the last hue using the maximum value and the + // surrounding hues in order to avoid the uniformity of the top colors + // on the charts. For this reason the two hues are translated into the + // CIELAB color space, and the top color will be their weighted average + // (CIELAB is perceptually uniform, meaning that any point on the line + // between two pure color points is also a pure color, so the weighted + // average will not lose from the saturation). + // + // In case the maximum value is greater than the biggest predefined + // scale value, the top of the chart will have uniform color. + const lastHue = convert.hex.lab(hues[i]); + const proportion = (value - hueScale[i]) * 100 / (hueScale[i + 1] - hueScale[i]); + convert.hex.lab(hues[i + 1]).forEach((val, j) => { + lastHue[j] = (lastHue[j] * proportion + val * (100 - proportion)) / 100; + }); + peer.ingressGradient.push({offset: 100, color: `#${convert.lab.hex(lastHue)}`}); + } +}; + +// setMaxEgress adjusts the peer chart's gradient values based on the given value. +// In case of the egress the chart is upside down, so the gradients need to be +// calculated inversely compared to the ingress. +const setMaxEgress = (peer, value) => { + peer.maxEgress = value; + peer.egressGradient = []; + peer.egressGradient.push({offset: 100 - hueScale[0], color: hues[0]}); + let i = 1; + for (; i < hues.length && value > hueScale[i]; i++) { + peer.egressGradient.unshift({offset: 100 - Math.floor(hueScale[i] * 100 / value), color: hues[i]}); + } + i--; + if (i < hues.length - 1) { + // Calculate the last hue. + const lastHue = convert.hex.lab(hues[i]); + const proportion = (value - hueScale[i]) * 100 / (hueScale[i + 1] - hueScale[i]); + convert.hex.lab(hues[i + 1]).forEach((val, j) => { + lastHue[j] = (lastHue[j] * proportion + val * (100 - proportion)) / 100; + }); + peer.egressGradient.unshift({offset: 0, color: `#${convert.lab.hex(lastHue)}`}); + } +}; + + +// setIngressChartAttributes searches for the maximum value of the ingress +// samples, and adjusts the peer chart's gradient values accordingly. +const setIngressChartAttributes = (peer) => { + let max = 0; + peer.ingress.forEach(({value}) => { + if (value > max) { + max = value; + } + }); + setMaxIngress(peer, max); +}; + +// setEgressChartAttributes searches for the maximum value of the egress +// samples, and adjusts the peer chart's gradient values accordingly. +const setEgressChartAttributes = (peer) => { + let max = 0; + peer.egress.forEach(({value}) => { + if (value > max) { + max = value; + } + }); + setMaxEgress(peer, max); +}; + +// inserter is a state updater function for the main component, which handles the peers. +export const inserter = (sampleLimit: number) => (update: NetworkType, prev: NetworkType) => { + // The first message contains the metered peer history. + if (update.peers && update.peers.bundles) { + prev.peers = update.peers; + Object.values(prev.peers.bundles).forEach((bundle) => { + if (bundle.knownPeers) { + Object.values(bundle.knownPeers).forEach((peer) => { + if (!peer.maxIngress) { + setIngressChartAttributes(peer); + } + if (!peer.maxEgress) { + setEgressChartAttributes(peer); + } + }); + } + }); + } + if (Array.isArray(update.diff)) { + update.diff.forEach((event: PeerEvent) => { + if (!event.ip) { + console.error('Peer event without IP', event); + return; + } + switch (event.remove) { + case 'bundle': { + delete prev.peers.bundles[event.ip]; + return; + } + case 'known': { + if (!event.id) { + console.error('Remove known peer event without ID', event.ip); + return; + } + const bundle = prev.peers.bundles[event.ip]; + if (!bundle || !bundle.knownPeers || !bundle.knownPeers[event.id]) { + console.error('No known peer to remove', event.ip, event.id); + return; + } + delete bundle.knownPeers[event.id]; + return; + } + case 'attempt': { + const bundle = prev.peers.bundles[event.ip]; + if (!bundle || !Array.isArray(bundle.attempts) || bundle.attempts.length < 1) { + console.error('No unknown peer to remove', event.ip); + return; + } + bundle.attempts.splice(0, 1); + return; + } + } + if (!prev.peers.bundles[event.ip]) { + prev.peers.bundles[event.ip] = { + location: { + country: '', + city: '', + latitude: 0, + longitude: 0, + }, + knownPeers: {}, + attempts: [], + }; + } + const bundle = prev.peers.bundles[event.ip]; + if (event.location) { + bundle.location = event.location; + return; + } + if (!event.id) { + if (!bundle.attempts) { + bundle.attempts = []; + } + bundle.attempts.push({ + connected: event.connected, + disconnected: event.disconnected, + }); + return; + } + if (!bundle.knownPeers) { + bundle.knownPeers = {}; + } + if (!bundle.knownPeers[event.id]) { + bundle.knownPeers[event.id] = { + connected: [], + disconnected: [], + ingress: [], + egress: [], + active: false, + }; + } + const peer = bundle.knownPeers[event.id]; + if (!peer.maxIngress) { + setIngressChartAttributes(peer); + } + if (!peer.maxEgress) { + setEgressChartAttributes(peer); + } + if (event.connected) { + if (!peer.connected) { + console.warn('peer.connected should exist'); + peer.connected = []; + } + peer.connected.push(event.connected); + } + if (event.disconnected) { + if (!peer.disconnected) { + console.warn('peer.disconnected should exist'); + peer.disconnected = []; + } + peer.disconnected.push(event.disconnected); + } + switch (event.activity) { + case 'active': + peer.active = true; + break; + case 'inactive': + peer.active = false; + break; + } + if (Array.isArray(event.ingress) && Array.isArray(event.egress)) { + if (event.ingress.length !== event.egress.length) { + console.error('Different traffic sample length', event); + return; + } + // Check if there is a new maximum value, and reset the colors in case. + let maxIngress = peer.maxIngress; + event.ingress.forEach(({value}) => { + if (value > maxIngress) { + maxIngress = value; + } + }); + if (maxIngress > peer.maxIngress) { + setMaxIngress(peer, maxIngress); + } + // Push the new values. + peer.ingress.splice(peer.ingress.length, 0, ...event.ingress); + const ingressDiff = peer.ingress.length - sampleLimit; + if (ingressDiff > 0) { + // Check if the maximum value is in the beginning. + let i = 0; + while (i < ingressDiff && peer.ingress[i].value < peer.maxIngress) { + i++; + } + // Remove the old values from the beginning. + peer.ingress.splice(0, ingressDiff); + if (i < ingressDiff) { + // Reset the colors if the maximum value leaves the chart. + setIngressChartAttributes(peer); + } + } + // Check if there is a new maximum value, and reset the colors in case. + let maxEgress = peer.maxEgress; + event.egress.forEach(({value}) => { + if (value > maxEgress) { + maxEgress = value; + } + }); + if (maxEgress > peer.maxEgress) { + setMaxEgress(peer, maxEgress); + } + // Push the new values. + peer.egress.splice(peer.egress.length, 0, ...event.egress); + const egressDiff = peer.egress.length - sampleLimit; + if (egressDiff > 0) { + // Check if the maximum value is in the beginning. + let i = 0; + while (i < egressDiff && peer.egress[i].value < peer.maxEgress) { + i++; + } + // Remove the old values from the beginning. + peer.egress.splice(0, egressDiff); + if (i < egressDiff) { + // Reset the colors if the maximum value leaves the chart. + setEgressChartAttributes(peer); + } + } + } + }); + } + return prev; +}; + +// styles contains the constant styles of the component. +const styles = { + tableHead: { + height: 'auto', + }, + tableRow: { + height: 'auto', + }, + tableCell: { + paddingTop: 0, + paddingRight: 5, + paddingBottom: 0, + paddingLeft: 5, + border: 'none', + }, +}; + +export type Props = { + container: Object, + content: NetworkType, + shouldUpdate: Object, +}; + +type State = {}; + +// Network renders the network page. +class Network extends Component { + componentDidMount() { + const {container} = this.props; + if (typeof container === 'undefined') { + return; + } + container.scrollTop = 0; + } + + formatTime = (t: string) => { + const time = new Date(t); + if (isNaN(time)) { + return ''; + } + const month = `0${time.getMonth() + 1}`.slice(-2); + const date = `0${time.getDate()}`.slice(-2); + const hours = `0${time.getHours()}`.slice(-2); + const minutes = `0${time.getMinutes()}`.slice(-2); + const seconds = `0${time.getSeconds()}`.slice(-2); + return `${month}/${date}/${hours}:${minutes}:${seconds}`; + }; + + copyToClipboard = (id) => (event) => { + event.preventDefault(); + navigator.clipboard.writeText(id).then(() => {}, () => { + console.error("Failed to copy node id", id); + }); + }; + + peerTableRow = (ip, id, bundle, peer) => { + const ingressValues = peer.ingress.map(({value}) => ({ingress: value || 0.001})); + const egressValues = peer.egress.map(({value}) => ({egress: -value || -0.001})); + + return ( + + + {peer.active + ? + : + } + + + {id.substring(0, 10)} + + + {bundle.location ? (() => { + const l = bundle.location; + return `${l.country ? l.country : ''}${l.city ? `/${l.city}` : ''}`; + })() : ''} + + + + + + {peer.ingressGradient + && peer.ingressGradient.map(({offset, color}, i) => ( + + ))} + + + } /> + Math.max(dataMax, 0)]} /> + + + + + + {peer.egressGradient + && peer.egressGradient.map(({offset, color}, i) => ( + + ))} + + + } /> + Math.min(dataMin, 0), -0.001]} /> + + + + + ); + }; + + render() { + return ( + + + + + + + Node ID + Location + Traffic + + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.knownPeers || Object.keys(bundle.knownPeers).length < 1) { + return null; + } + return Object.entries(bundle.knownPeers).map(([id, peer]) => { + if (peer.active === false) { + return null; + } + return this.peerTableRow(ip, id, bundle, peer); + }); + })} + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.knownPeers || Object.keys(bundle.knownPeers).length < 1) { + return null; + } + return Object.entries(bundle.knownPeers).map(([id, peer]) => { + if (peer.active === true) { + return null; + } + return this.peerTableRow(ip, id, bundle, peer); + }); + })} + +
+
+ + + Connection attempts + + + + + IP + Location + Nr + + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.attempts || bundle.attempts.length < 1) { + return null; + } + return ( + + {ip} + + {bundle.location ? (() => { + const l = bundle.location; + return `${l.country ? l.country : ''}${l.city ? `/${l.city}` : ''}`; + })() : ''} + + + {Object.values(bundle.attempts).length} + + + ); + })} + +
+
+
+ ); + } +} + +export default Network; diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx index 463d6cb4..301e458d 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx @@ -18,11 +18,14 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import List, {ListItem, ListItemIcon, ListItemText} from 'material-ui/List'; -import Icon from 'material-ui/Icon'; +import withStyles from '@material-ui/core/styles/withStyles'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Icon from '@material-ui/core/Icon'; import Transition from 'react-transition-group/Transition'; -import {Icon as FontAwesome} from 'react-fa'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import {MENU, DURATION} from '../common'; @@ -48,6 +51,7 @@ const themeStyles = theme => ({ }, icon: { fontSize: theme.spacing.unit * 3, + overflow: 'unset', }, }); @@ -57,9 +61,11 @@ export type Props = { changeContent: string => void, }; +type State = {} + // SideBar renders the sidebar of the dashboard. -class SideBar extends Component { - shouldComponentUpdate(nextProps) { +class SideBar extends Component { + shouldComponentUpdate(nextProps: Readonly, nextState: Readonly, nextContext: any) { return nextProps.opened !== this.props.opened; } @@ -78,7 +84,7 @@ class SideBar extends Component { - + content + .replace(/src.*url(?!.*url.*(\.eot)).*(\.eot)[^;]*;/, '') + .replace(/url(?!.*url.*(\.eot)).*(\.eot)[^,]*,/, '') + .replace(/url(?!.*url.*(\.ttf)).*(\.ttf)[^,]*,/, '') + .replace(/,[^,]*url(?!.*url.*(\.svg)).*(\.svg)[^;]*;/, ';'); diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.html b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.html index 1211d152..fbfb7f00 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.html +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.html @@ -21,6 +21,6 @@
- + diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx index 4ee567b0..a08911aa 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx @@ -19,12 +19,15 @@ import React from 'react'; import {render} from 'react-dom'; -import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; -import createMuiTheme from 'material-ui/styles/createMuiTheme'; +import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; +import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; import Dashboard from './components/Dashboard'; const theme: Object = createMuiTheme({ + // typography: { + // useNextVariants: true, + // }, palette: { type: 'dark', }, diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/package.json b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/package.json index fb1a68e5..626ed288 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/package.json +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/package.json @@ -1,48 +1,65 @@ { + "private": true, "dependencies": { - "babel-core": "^6.26.0", - "babel-eslint": "^8.2.1", - "babel-loader": "^7.1.2", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-flow-strip-types": "^6.22.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.6.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "babel-runtime": "^6.26.0", - "classnames": "^2.2.5", - "css-loader": "^0.28.9", + "@babel/core": "7.3.4", + "@babel/plugin-proposal-class-properties": "7.3.4", + "@babel/plugin-proposal-function-bind": "7.2.0", + "@babel/plugin-transform-flow-strip-types": "7.3.4", + "@babel/preset-env": "7.3.4", + "@babel/preset-react": "^7.0.0", + "@babel/preset-stage-0": "^7.0.0", + "@fortawesome/fontawesome-free-regular": "^5.0.13", + "@fortawesome/fontawesome-svg-core": "^1.2.15", + "@fortawesome/free-regular-svg-icons": "^5.7.2", + "@fortawesome/free-solid-svg-icons": "^5.7.2", + "@fortawesome/react-fontawesome": "^0.1.4", + "@material-ui/core": "3.9.2", + "@material-ui/icons": "3.0.2", + "babel-eslint": "10.0.1", + "babel-loader": "8.0.5", + "classnames": "^2.2.6", + "color-convert": "^2.0.0", + "css-loader": "2.1.1", "escape-html": "^1.0.3", - "eslint": "^4.16.0", - "eslint-config-airbnb": "^16.1.0", - "eslint-loader": "^2.0.0", - "eslint-plugin-flowtype": "^2.41.0", - "eslint-plugin-import": "^2.8.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.5.1", - "file-loader": "^1.1.6", - "flow-bin": "^0.63.1", - "flow-bin-loader": "^1.0.2", - "flow-typed": "^2.2.3", - "material-ui": "^1.0.0-beta.30", - "material-ui-icons": "^1.0.0-beta.17", + "eslint": "5.15.1", + "eslint-config-airbnb": "^17.0.0", + "eslint-loader": "2.1.2", + "eslint-plugin-flowtype": "3.4.2", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-react": "7.12.4", + "file-loader": "3.0.1", + "flow-bin": "0.94.0", + "flow-bin-loader": "^1.0.3", + "flow-typed": "^2.5.1", + "js-beautify": "1.9.0", "path": "^0.12.7", - "react": "^16.2.0", - "react-dom": "^16.2.0", - "react-fa": "^5.0.0", - "react-transition-group": "^2.2.1", - "recharts": "^1.0.0-beta.9", - "style-loader": "^0.19.1", + "react": "16.8.4", + "react-dom": "16.8.4", + "react-hot-loader": "4.8.0", + "react-transition-group": "2.6.1", + "recharts": "1.5.0", + "style-loader": "0.23.1", + "terser-webpack-plugin": "^1.2.3", "url": "^0.11.0", - "url-loader": "^0.6.2", - "webpack": "^3.10.0", - "webpack-dev-server": "^2.11.1" + "url-loader": "1.1.2", + "webpack": "4.29.6", + "webpack-cli": "3.2.3", + "webpack-dashboard": "3.0.0", + "webpack-dev-server": "3.2.1", + "webpack-merge": "4.2.1" }, "scripts": { - "build": "NODE_ENV=production webpack", - "stats": "webpack --profile --json > stats.json", - "dev": "webpack-dev-server --port 8081", - "flow": "flow-typed install" - } + "build": "webpack --config webpack.config.prod.js", + "stats": "webpack --config webpack.config.prod.js --profile --json > stats.json", + "dev": "webpack-dev-server --open --config webpack.config.dev.js", + "dash": "webpack-dashboard -- yarn dev", + "install-flow": "flow-typed install", + "flow": "flow status --show-all-errors", + "eslint": "eslint **/*" + }, + "sideEffects": false, + "license": "LGPL-3.0-or-later" } diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/types/content.jsx b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/types/content.jsx index ff82c357..3086d442 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/types/content.jsx +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/types/content.jsx @@ -29,7 +29,6 @@ export type Content = { export type ChartEntries = Array; export type ChartEntry = { - time: Date, value: number, }; @@ -51,7 +50,50 @@ export type TxPool = { }; export type Network = { - /* TODO (kurkomisi) */ + peers: Peers, + diff: Array +}; + +export type PeerEvent = { + ip: string, + id: string, + remove: string, + location: GeoLocation, + connected: Date, + disconnected: Date, + ingress: ChartEntries, + egress: ChartEntries, + activity: string, +}; + +export type Peers = { + bundles: {[string]: PeerBundle}, +}; + +export type PeerBundle = { + location: GeoLocation, + knownPeers: {[string]: KnownPeer}, + attempts: Array, +}; + +export type KnownPeer = { + connected: Array, + disconnected: Array, + ingress: Array, + egress: Array, + active: boolean, +}; + +export type UnknownPeer = { + connected: Date, + disconnected: Date, +}; + +export type GeoLocation = { + country: string, + city: string, + latitude: number, + longitude: number, }; export type System = { diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.js b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.common.js similarity index 58% rename from vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.js rename to vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.common.js index f58d35ad..73ca9049 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.js +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.common.js @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,28 +14,25 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -const webpack = require('webpack'); const path = require('path'); module.exports = { + target: 'web', + entry: { + bundle: './index', + }, + output: { + filename: '[name].js', + path: path.resolve(__dirname, ''), + sourceMapFilename: '[file].map', + }, resolve: { + modules: [ + 'node_modules', + path.resolve(__dirname, 'components'), // import './components/Component' -> import 'Component' + ], extensions: ['.js', '.jsx'], }, - entry: './index', - output: { - path: path.resolve(__dirname, ''), - filename: 'bundle.js', - }, - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - comments: false, - mangle: false, - beautify: true, - }), - new webpack.DefinePlugin({ - PROD: process.env.NODE_ENV === 'production', - }), - ], module: { rules: [ { @@ -45,27 +42,38 @@ module.exports = { { loader: 'babel-loader', options: { - plugins: [ // order: from top to bottom - // 'transform-decorators-legacy', // @withStyles, @withTheme - 'transform-class-properties', // static defaultProps - 'transform-flow-strip-types', - ], presets: [ // order: from bottom to top - 'env', - 'react', - 'stage-0', + '@babel/env', + '@babel/react', + ], + plugins: [ // order: from top to bottom + '@babel/proposal-function-bind', // instead of stage 0 + '@babel/proposal-class-properties', // static defaultProps + '@babel/transform-flow-strip-types', + 'react-hot-loader/babel', ], }, }, - // 'eslint-loader', // show errors not only in the editor, but also in the console + // 'eslint-loader', // show errors in the console ], }, { - test: /font-awesome\.css$/, - use: [ - 'style-loader', - 'css-loader', - path.resolve(__dirname, './fa-only-woff-loader.js'), + test: /\.css$/, + oneOf: [ + { + test: /font-awesome/, + use: [ + 'style-loader', + 'css-loader', + path.resolve(__dirname, './fa-only-woff-loader.js'), + ], + }, + { + use: [ + 'style-loader', + 'css-loader', + ], + }, ], }, { diff --git a/vendor/github.com/ethereum/go-ethereum/core/rawdb/interfaces.go b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.dev.js similarity index 63% rename from vendor/github.com/ethereum/go-ethereum/core/rawdb/interfaces.go rename to vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.dev.js index 3bdf5512..2f00e0da 100644 --- a/vendor/github.com/ethereum/go-ethereum/core/rawdb/interfaces.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.dev.js @@ -14,20 +14,22 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rawdb +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const WebpackDashboard = require('webpack-dashboard/plugin'); +const common = require('./webpack.config.common.js'); -// DatabaseReader wraps the Has and Get method of a backing data store. -type DatabaseReader interface { - Has(key []byte) (bool, error) - Get(key []byte) ([]byte, error) -} - -// DatabaseWriter wraps the Put method of a backing data store. -type DatabaseWriter interface { - Put(key []byte, value []byte) error -} - -// DatabaseDeleter wraps the Delete method of a backing data store. -type DatabaseDeleter interface { - Delete(key []byte) error -} +module.exports = merge(common, { + mode: 'development', + plugins: [ + new WebpackDashboard(), + new webpack.HotModuleReplacementPlugin(), + ], + // devtool: 'eval', + devtool: 'source-map', + devServer: { + port: 8081, + hot: true, + compress: true, + }, +}); diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/utils_test.go b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.prod.js similarity index 53% rename from vendor/github.com/ethereum/go-ethereum/rpc/utils_test.go rename to vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.prod.js index e0e063f6..f6d29c36 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/utils_test.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/webpack.config.prod.js @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,30 +14,28 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rpc +const TerserPlugin = require('terser-webpack-plugin'); +const merge = require('webpack-merge'); +const common = require('./webpack.config.common.js'); -import ( - "strings" - "testing" -) - -func TestNewID(t *testing.T) { - hexchars := "0123456789ABCDEFabcdef" - for i := 0; i < 100; i++ { - id := string(NewID()) - if !strings.HasPrefix(id, "0x") { - t.Fatalf("invalid ID prefix, want '0x...', got %s", id) - } - - id = id[2:] - if len(id) == 0 || len(id) > 32 { - t.Fatalf("invalid ID length, want len(id) > 0 && len(id) <= 32), got %d", len(id)) - } - - for i := 0; i < len(id); i++ { - if strings.IndexByte(hexchars, id[i]) == -1 { - t.Fatalf("unexpected byte, want any valid hex char, got %c", id[i]) - } - } - } -} +module.exports = merge(common, { + mode: 'production', + devtool: 'source-map', + optimization: { + minimize: true, + namedModules: true, // Module names instead of numbers - resolves the large diff problem. + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + sourceMap: true, + terserOptions: { + output: { + comments: false, + beautify: true, + }, + }, + }), + ], + }, +}); diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/yarn.lock b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/yarn.lock index 10277c98..70743e14 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/assets/yarn.lock +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/assets/yarn.lock @@ -2,217 +2,1147 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== dependencies: - "@babel/highlight" "7.0.0-beta.44" + "@babel/highlight" "^7.0.0" -"@babel/generator@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" +"@babel/core@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.3.4" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" + integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg== + dependencies: + "@babel/types" "^7.3.4" jsesc "^2.5.1" - lodash "^4.2.0" + lodash "^4.17.11" source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-function-name@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" + "@babel/types" "^7.0.0" -"@babel/helper-get-function-arity@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/types" "^7.3.0" + esutils "^2.0.0" -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" +"@babel/helper-call-delegate@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" + integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-create-class-features-plugin@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz#092711a7a3ad8ea34de3e541644c2ce6af1f6f0c" + integrity sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.3.4" + "@babel/helper-split-export-declaration" "^7.0.0" + +"@babel/helper-define-map@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" + integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" + integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.2.2" + "@babel/types" "^7.2.2" + lodash "^4.17.10" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== + dependencies: + lodash "^4.17.10" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13" + integrity sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" + +"@babel/helpers@^7.2.0": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9" + integrity sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.3.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== dependencies: chalk "^2.0.0" esutils "^2.0.2" - js-tokens "^3.0.0" + js-tokens "^4.0.0" -"@babel/template@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - lodash "^4.2.0" +"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" + integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== -"@babel/traverse@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - debug "^3.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + +"@babel/plugin-proposal-class-properties@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz#410f5173b3dc45939f9ab30ca26684d72901405e" + integrity sha512-lUf8D3HLs4yYlAo8zjuneLvfxN7qfKv1Yzbj5vjqaqMJxgJA3Ipwp4VUJ+OrOdz53Wbww6ahwB8UhB2HQyLotA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-function-bind@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.2.0.tgz#94dc2cdc505cafc4e225c0014335a01648056bf7" + integrity sha512-qOFJ/eX1Is78sywwTxDcsntLOdb5ZlHVVqUz5xznq8ldAfOVIyZzp1JE2rzHnaksZIhrqMrwIpQL/qcEprnVbw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-function-bind" "^7.2.0" + +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654" + integrity sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" + integrity sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" + +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-function-bind@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.2.0.tgz#68fe85b0c0da67125f87bf239c68051b06c66309" + integrity sha512-/WzU1lLU2l0wDfB42Wkg6tahrmtBbiD8C4H6EGSX0M4GAjzN6JiOpq/Uh8G6GSoR6lPMvhjM0MNiV6znj6y/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c" + integrity sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4" + integrity sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.11" + +"@babel/plugin-transform-classes@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc" + integrity sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.1.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.3.4" + "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" -"@babel/types@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.2.0": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d" + integrity sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" + integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/plugin-transform-duplicate-keys@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" + integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-flow-strip-types@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz#00156236defb7dedddc2d3c9477dcc01a4494327" + integrity sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + +"@babel/plugin-transform-for-of@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" + integrity sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" + integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" + integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" + integrity sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-modules-systemjs@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861" + integrity sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw== + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz#140b52985b2d6ef0cb092ef3b29502b990f9cd50" + integrity sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw== + dependencies: + regexp-tree "^0.1.0" + +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" + integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" + integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + +"@babel/plugin-transform-parameters@^7.2.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz#3a873e07114e1a5bee17d04815662c8317f10e30" + integrity sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw== + dependencies: + "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" + integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" + integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" + integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== + dependencies: + "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-regenerator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a" + integrity sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA== + dependencies: + regenerator-transform "^0.13.4" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.2.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" + integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" + integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" + integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/preset-env@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.3.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.3.4" + "@babel/plugin-transform-classes" "^7.3.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-dotall-regex" "^7.2.0" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.3.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.3.4" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.2.0" + browserslist "^4.3.4" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + +"@babel/preset-stage-0@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz#999aaec79ee8f0a763042c68c06539c97c6e0646" + integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== + dependencies: + regenerator-runtime "^0.12.0" + +"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" + integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" + integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.3.4" + "@babel/types" "^7.3.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" + integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ== dependencies: esutils "^2.0.2" - lodash "^4.2.0" + lodash "^4.17.11" to-fast-properties "^2.0.0" -"@types/jss@^9.3.0": - version "9.5.0" - resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.0.tgz#65d9b5c61f1e95ad3acd53e9a8b2d2342aa917e8" - dependencies: - csstype "^1.6.0" +"@fortawesome/fontawesome-common-types@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.1.7.tgz#4336c4b06d0b5608ff1215464b66fcf9f4795284" + integrity sha512-ego8jRVSHfq/iq4KRZJKQeUAdi3ZjGNrqw4oPN3fNdvTBnLCSntwVCnc37bsAJP9UB8MhrTfPnZYxkv2vpS4pg== -"@types/react-transition-group@^2.0.6": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.7.tgz#2847292d54c5685d982ae5a3ecb6960946689d87" +"@fortawesome/fontawesome-common-types@^0.2.15": + version "0.2.15" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.15.tgz#16af950653083d1e3064061de9f8e5e3b579f688" + integrity sha512-ATBRyKJw1d2ko+0DWN9+BXau0EK3I/Q6pPzPv3LhJD7r052YFAkAdfb1Bd7ZqhBsJrdse/S7jKxWUOZ61qBD4g== + +"@fortawesome/fontawesome-free-regular@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free-regular/-/fontawesome-free-regular-5.0.13.tgz#eb78c30184e3f456a423a1dcfa0f682f7b50de4a" + integrity sha512-36lz9Idww1L4QaaTcv7GZiOeIP9emJFDUsedvRovI10kmwyd6rN0PKkIjnq0FB4foLhX4Rou8vnbCCmjtqiLug== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.1.7" + +"@fortawesome/fontawesome-svg-core@^1.2.15": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.15.tgz#368f9fc7e8e8d8636495dc7483f97510f920ba97" + integrity sha512-M/sHyl4g2VBtKYkay1Z+XImMyTVcaBPmehYtPw4HKD9zg2E7eovB7Yx98aUfZjPbroGqa+IL4/+KhWBMOGlHIQ== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.15" + +"@fortawesome/free-regular-svg-icons@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.7.2.tgz#7113bf9df5a970918b8cac8eb45e5ad120818741" + integrity sha512-ZO+zQcncfT7omTsTIjBkugj/dFXiSnoK44I5p0/WAoNX8aX2Au7j+uxq1qFX4bevkfGFGsPeJUYU1+Q1PB/5pQ== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.15" + +"@fortawesome/free-solid-svg-icons@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.7.2.tgz#9ec2ed353d630092a8e19cc8aae2f716572963e5" + integrity sha512-iujcXMyAvIbWM8W3jkOLpvJbR+rPpdN1QyqhZeJaLRdHPH4JmuovIAYP4vx5Sa1csZVXfRD1eDWqVZ/jGM620A== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.15" + +"@fortawesome/react-fontawesome@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.4.tgz#18d61d9b583ca289a61aa7dccc05bd164d6bc9ad" + integrity sha512-GwmxQ+TK7PEdfSwvxtGnMCqrfEm0/HbRHArbUudsYiy9KzVCwndxa2KMcfyTQ8El0vROrq8gOOff09RF1oQe8g== + dependencies: + humps "^2.0.1" + prop-types "^15.5.10" + +"@material-ui/core@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.2.tgz#41ed1a470e981d199829eb5d9317a671c66a6f7d" + integrity sha512-aukR3mSH3g115St2OnqoeMRtmxzxxx+Mch7pFKRV3Tz3URExBlZwOolimjxKZpG4LGec8HlhREawafLsDzjVWQ== + dependencies: + "@babel/runtime" "^7.2.0" + "@material-ui/system" "^3.0.0-alpha.0" + "@material-ui/utils" "^3.0.0-alpha.2" + "@types/jss" "^9.5.6" + "@types/react-transition-group" "^2.0.8" + brcast "^3.0.1" + classnames "^2.2.5" + csstype "^2.5.2" + debounce "^1.1.0" + deepmerge "^3.0.0" + dom-helpers "^3.2.1" + hoist-non-react-statics "^3.2.1" + is-plain-object "^2.0.4" + jss "^9.8.7" + jss-camel-case "^6.0.0" + jss-default-unit "^8.0.2" + jss-global "^3.0.0" + jss-nested "^6.0.1" + jss-props-sort "^6.0.0" + jss-vendor-prefixer "^7.0.0" + normalize-scroll-left "^0.1.2" + popper.js "^1.14.1" + prop-types "^15.6.0" + react-event-listener "^0.6.2" + react-transition-group "^2.2.1" + recompose "0.28.0 - 0.30.0" + warning "^4.0.1" + +"@material-ui/icons@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10" + integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g== + dependencies: + "@babel/runtime" "^7.2.0" + recompose "0.28.0 - 0.30.0" + +"@material-ui/system@^3.0.0-alpha.0": + version "3.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-3.0.0-alpha.2.tgz#096e80c8bb0f70aea435b9e38ea7749ee77b4e46" + integrity sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA== + dependencies: + "@babel/runtime" "^7.2.0" + deepmerge "^3.0.0" + prop-types "^15.6.0" + warning "^4.0.1" + +"@material-ui/utils@^3.0.0-alpha.2": + version "3.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1" + integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng== + dependencies: + "@babel/runtime" "^7.2.0" + prop-types "^15.6.0" + react-is "^16.6.3" + +"@most/multicast@^1.2.5": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@most/multicast/-/multicast-1.3.0.tgz#e01574840df634478ac3fabd164c6e830fb3b966" + integrity sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw== + dependencies: + "@most/prelude" "^1.4.0" + +"@most/prelude@^1.4.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@most/prelude/-/prelude-1.7.2.tgz#be4ed406518d4c8c220e45c39fa7251365425b73" + integrity sha512-GM5ec7+xpkuXiCMyzhyENgH/xZ8t0nAMDBY0QOsVVD6TrZYjJKUnW1eaI18HHX8W+COWMwWR9c0zoPiBp9+tUg== + +"@octokit/rest@^15.2.6": + version "15.18.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.1.tgz#ec7fb0f8775ef64dc095fae6635411d3fbff9b62" + integrity sha512-g2tecjp2TEtYV8bKAFvfQtu+W29HM7ektmWmw8zrMy9/XCKDEYRErR2YvvhN9+IxkLC4O3lDqYP4b6WgsL6Utw== + dependencies: + before-after-hook "^1.1.0" + btoa-lite "^1.0.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.0" + lodash "^4.17.4" + node-fetch "^2.1.1" + universal-user-agent "^2.0.0" + url-template "^2.0.8" + +"@types/jss@^9.5.6": + version "9.5.8" + resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b" + integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA== + dependencies: + csstype "^2.0.0" + indefinite-observable "^1.0.1" + +"@types/prop-types@*": + version "15.7.0" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.0.tgz#4c48fed958d6dcf9487195a0ef6456d5f6e0163a" + integrity sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg== + +"@types/react-transition-group@^2.0.8": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.16.tgz#2dcb9e396ab385ee19c4af1c9caa469a14cd042f" + integrity sha512-FUJEx2BGJPU1qVQoWd9v7wpOwnCPTWhcE4iTaU5prry9SvwiI11lCXOci8Nz9cM/Fuf650l7Skg6nlVeCYjPFA== dependencies: "@types/react" "*" "@types/react@*": - version "16.0.40" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.40.tgz#caabc2296886f40b67f6fc80f0f3464476461df9" + version "16.8.8" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.8.tgz#4b60a469fd2469f7aa6eaa0f8cfbc51f6d76e662" + integrity sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4: +accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= dependencies: mime-types "~2.1.18" negotiator "0.6.1" -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn@^6.0.5, acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@4, agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: - acorn "^4.0.3" + es6-promisify "^5.0.0" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0, acorn@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" +ajv@^6.0.1, ajv@^6.1.0, ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -ajv@^6.0.1, ajv@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2" - dependencies: - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -220,49 +1150,47 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" -aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: ast-types-flow "0.0.7" commander "^2.11.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" @@ -270,847 +1198,168 @@ array-includes@^3.0.3: array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= dependencies: util "0.10.3" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types-flow@0.0.7: +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" + integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.1.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== dependencies: - lodash "^4.14.0" + lodash "^4.17.11" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" - -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" +axobject-query@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" +babel-eslint@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^8.2.1: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - eslint-scope "~3.7.1" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" +babel-loader@8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" + integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw== dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" - dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-loader@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" - dependencies: - find-cache-dir "^1.0.0" + find-cache-dir "^2.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - -babel-plugin-syntax-do-expressions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-function-bind@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" - -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-class-constructor-call@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" - dependencies: - babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-decorators-legacy@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" - dependencies: - babel-plugin-syntax-decorators "^6.1.18" - babel-runtime "^6.2.0" - babel-template "^6.3.0" - -babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-do-expressions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" - dependencies: - babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-export-extensions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" - dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-function-bind@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" - dependencies: - babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + util.promisify "^1.0.0" babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-env@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-preset-stage-0@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" - dependencies: - babel-plugin-transform-do-expressions "^6.22.0" - babel-plugin-transform-function-bind "^6.22.0" - babel-preset-stage-1 "^6.24.1" - -babel-preset-stage-1@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" - dependencies: - babel-plugin-transform-class-constructor-call "^6.24.1" - babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.24.1" - -babel-preset-stage-2@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-decorators "^6.24.1" - babel-preset-stage-3 "^6.24.1" - -babel-preset-stage-3@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.24.1" - babel-plugin-transform-async-to-generator "^6.24.1" - babel-plugin-transform-exponentiation-operator "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@7.0.0-beta.44: - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@^1.0.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1123,56 +1372,83 @@ base@^0.11.1: batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" +before-after-hook@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" + integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= dependencies: - tweetnacl "^0.14.3" + callsite "1.0.0" -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +big-integer@^1.6.17: + version "1.6.42" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.42.tgz#91623ae5ceeff9a47416c56c9440a66f12f534f1" + integrity sha512-3UQFKcRMx+5Z+IK5vYTMYK2jzLRJkt+XqyDdacgWgtMjjuifKpKTFneJLEgeBElOE2/lXZ1LcMcb5s8pwG2U8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + version "1.13.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" + integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw== -"binary@>= 0.3.0 < 1": +binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= dependencies: buffers "~0.1.1" chainsaw "~0.1.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bluebird@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= dependencies: bytes "3.0.0" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= dependencies: array-flatten "^2.1.0" deep-equal "^1.0.1" @@ -1181,38 +1457,24 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" - define-property "^1.0.0" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" - kind-of "^6.0.2" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" @@ -1222,14 +1484,17 @@ braces@^2.3.0, braces@^2.3.1: brcast@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" + integrity sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg== brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1239,24 +1504,28 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: safe-buffer "^5.0.1" browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -1264,6 +1533,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1276,34 +1546,53 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" +browserslist@^4.3.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.2.tgz#6ea8a74d6464bb0bd549105f659b41197d8f0ba2" + integrity sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg== dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + caniuse-lite "^1.0.30000939" + electron-to-chromium "^1.3.113" + node-releases "^1.1.8" -browserslist@^2.1.2: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1312,22 +1601,42 @@ buffer@^4.3.0: buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cacache@^11.0.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1339,98 +1648,47 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" +camelcase@^5.0.0, camelcase@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000811" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000811.tgz#19efb9238393d40078332c34485c818d641c4305" - -caniuse-lite@^1.0.30000792: - version "1.0.30000811" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000811.tgz#0b6e40f2efccc27bd3cb52f91ee7ca4673d77d10" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chain-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" +caniuse-lite@^1.0.30000939: + version "1.0.30000947" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000947.tgz#c30305e9701449c22e97f4e9837cea3d76aa3273" + integrity sha512-ubgBUfufe5Oi3W1+EHyh2C3lfBIEcZ6bTuvl5wNOpIuRB978GF/Z+pQ7pGGUpeYRB0P+8C7i/3lt6xkeu2hwnA== chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.1.0, chalk@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1439,279 +1697,331 @@ chalk@^2.1.0, chalk@^2.3.1: change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + version "2.1.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" + integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg== dependencies: anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" + async-each "^1.0.1" + braces "^2.3.2" glob-parent "^3.1.0" - inherits "^2.0.1" + inherits "^2.0.3" is-binary-path "^1.0.0" is-glob "^4.0.0" - normalize-path "^2.1.1" + normalize-path "^3.0.0" path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.0" optionalDependencies: - fsevents "^1.0.0" + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== + dependencies: + tslib "^1.9.0" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.2.5, classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +classnames@^2.2.5, classnames@^2.2.6, classnames@~2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: - q "^1.1.2" + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.0.0, color-name@^1.1.1: +color-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.0.tgz#9851ac61cc0d3898a8a3088650d5bf447bf69d97" + integrity sha512-hzTicsCJIHdxih9+2aLR1tNGZX5qSJGRHDPVwSY26tVrEf55XNajLOBWz2UuWSIergszA09/bqnOiHyqx9fxQg== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" +colors@^1.1.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" +commander@^2.11.0, commander@^2.15.1, commander@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -colors@^1.1.2, colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.11.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1, component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +compressible@~2.0.14: + version "2.0.16" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" + integrity sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA== dependencies: - mime-db ">= 1.33.0 < 2" + mime-db ">= 1.38.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.14" debug "2.6.9" on-headers "~1.0.1" - safe-buffer "5.1.1" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: + buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +convert-source-map@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.5.0: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-js@~2.5.1: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^2.0.0" + md5.js "^1.3.4" + ripemd160 "^2.0.1" sha.js "^2.4.0" create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -1720,27 +2030,35 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1754,262 +2072,241 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-loader@^0.28.9: - version "0.28.10" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" +css-loader@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" + integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" + camelcase "^5.2.0" + icss-utils "^4.1.0" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.14" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^2.0.6" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^2.0.0" postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + schema-utils "^1.0.0" css-vendor@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" + integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo= dependencies: is-in-browser "^1.0.2" -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" +csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.3.tgz#b701e5968245bf9b08d54ac83d00b624e622a9fa" + integrity sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg== -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -csstype@^1.6.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-1.8.2.tgz#2c0f16da08b99f13fe7fbb242e87d1a19dbe77a7" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= d3-array@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== d3-collection@1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== d3-color@1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f" + integrity sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw== d3-format@1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562" + integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ== -d3-interpolate@1, d3-interpolate@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" +d3-interpolate@1, d3-interpolate@~1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" + integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w== dependencies: d3-color "1" d3-path@1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8" + integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA== -d3-scale@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed" +d3-scale@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.1.2.tgz#4e932b7b60182aee9073ede8764c98423e5f9a94" + integrity sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q== dependencies: d3-array "^1.2.0" d3-collection "1" - d3-color "1" d3-format "1" d3-interpolate "1" d3-time "1" d3-time-format "2" -d3-shape@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" +d3-shape@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.3.tgz#3dad9b593e7297adac19b1f34a6821940968d7d6" + integrity sha512-mdrQ+V3jdEAa5k9clSEhCNFtq+pdky25PBGjocUgAI0AUbu/Esq4x6bdFcjkNura87Wqp1pd3dfZh6uJ+XojlA== dependencies: d3-path "1" d3-time-format@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + version "2.1.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b" + integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA== dependencies: d3-time "1" d3-time@1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" + version "1.0.11" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.11.tgz#1d831a3e25cd189eb256c17770a666368762bbce" + integrity sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw== -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -damerau-levenshtein@^1.0.0: +damerau-levenshtein@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: +debounce@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== + dependencies: + xregexp "4.0.0" + +decimal.js-light@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.0.tgz#ca7faf504c799326df94b0ab920424fdfc125348" + integrity sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312" +deepmerge@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e" + integrity sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow== -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +default-gateway@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -2018,25 +2315,20 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -2044,24 +2336,27 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -2070,10 +2365,12 @@ diffie-hellman@^5.0.0: dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -2081,55 +2378,95 @@ dns-packet@^1.3.1: dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= dependencies: buffer-indexof "^1.0.0" doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.2, doctrine@^2.1.0: +doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" -dom-helpers@^3.2.0, dom-helpers@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-helpers@^3.2.1, dom-helpers@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: - jsbn "~0.1.0" + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +editorconfig@^0.15.2: + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.34" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed" +electron-to-chromium@^1.3.113: + version "1.3.116" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz#1dbfee6a592a0c14ade77dbdfe54fef86387d702" + integrity sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA== elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2139,154 +2476,171 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -encodeurl@~1.0.1: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" -enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" + integrity sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59" + integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~6.1.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" + tapable "^1.0.0" -errno@^0.1.3: +errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" +es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== dependencies: - es-to-primitive "^1.1.1" + es-to-primitive "^1.2.0" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" + has "^1.0.3" + is-callable "^1.1.4" is-regex "^1.0.4" + object-keys "^1.0.12" -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: - is-callable "^1.1.1" + is-callable "^1.1.4" is-date-object "^1.0.1" - is-symbol "^1.0.1" + is-symbol "^1.0.2" -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.39" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" +es6-promise@^4.0.3: + version "4.2.6" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" + integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" + es6-promise "^4.0.3" escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-airbnb-base@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== dependencies: eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" -eslint-config-airbnb@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" +eslint-config-airbnb@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== dependencies: - eslint-config-airbnb-base "^12.1.0" + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" -eslint-import-resolver-node@^0.3.1: +eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" -eslint-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.0.0.tgz#d136619b5c684e36531ffc28c60a56e404608f5d" +eslint-loader@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68" + integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg== dependencies: loader-fs-cache "^1.0.0" loader-utils "^1.0.2" @@ -2294,182 +2648,247 @@ eslint-loader@^2.0.0: object-hash "^1.1.4" rimraf "^2.6.1" -eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" + integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== dependencies: debug "^2.6.8" - pkg-dir "^1.0.0" + pkg-dir "^2.0.0" -eslint-plugin-flowtype@^2.41.0: - version "2.46.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz#c4f81d580cd89c82bc3a85a1ccf4ae3a915143a4" +eslint-plugin-es@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" + integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== dependencies: - lodash "^4.15.0" + eslint-utils "^1.3.0" + regexpp "^2.0.1" -eslint-plugin-import@^2.8.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" +eslint-plugin-flowtype@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.4.2.tgz#55475e10b05fd714d60bceebbbed596cb8706b16" + integrity sha512-sv6O6fiN3dIwhU4qRxfcyIpbKGVvsxwIQ6vgBLudpQKjH1rEyEFEOjGzGEUBTQP9J8LdTZm37OjiqZ0ZeFOa6g== + dependencies: + lodash "^4.17.11" + +eslint-plugin-import@2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" + integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== dependencies: - builtin-modules "^1.1.1" contains-path "^0.1.0" - debug "^2.6.8" + debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" read-pkg-up "^2.0.0" + resolve "^1.9.0" -eslint-plugin-jsx-a11y@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" +eslint-plugin-jsx-a11y@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" + integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== dependencies: - aria-query "^0.7.0" + aria-query "^3.0.0" array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^2.0.0" - -eslint-plugin-react@^7.5.1: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" - dependencies: - doctrine "^2.0.2" - has "^1.0.1" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" + +eslint-plugin-node@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964" + integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w== + dependencies: + eslint-plugin-es "^1.3.1" + eslint-utils "^1.3.1" + ignore "^5.0.2" + minimatch "^3.0.4" + resolve "^1.8.1" + semver "^5.5.0" + +eslint-plugin-promise@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" + integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg== + +eslint-plugin-react@7.12.4: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" + integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= -eslint-scope@^3.7.1, eslint-scope@~3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^4.0.0, eslint-scope@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e" + integrity sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.0, eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^4.16.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" +eslint@5.15.1: + version "5.15.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.1.tgz#8266b089fd5391e0009a047050795b1d73664524" + integrity sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg== dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.2" + eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + inquirer "^6.2.2" + js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.11" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^7.0.0" progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" + regexpp "^2.0.1" + semver "^5.5.1" strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" -espree@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -esutils@^2.0.2: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" + original "^1.0.0" evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2479,15 +2898,23 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: - is-posix-bracket "^0.1.0" + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -2497,81 +2924,77 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: - fill-range "^2.1.0" + homedir-polyfill "^1.0.1" express@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== dependencies: - accepts "~1.3.4" + accepts "~1.3.5" array-flatten "1.1.1" - body-parser "1.18.2" + body-parser "1.18.3" content-disposition "0.5.2" content-type "~1.0.4" cookie "0.3.1" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" + depd "~1.1.2" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.0" + finalhandler "1.1.1" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.2" path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" + proxy-addr "~2.0.4" + qs "6.5.2" range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" + statuses "~1.4.0" + type-is "~1.6.16" utils-merge "1.0.1" vary "~1.1.2" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" + chardet "^0.7.0" + iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -2582,45 +3005,39 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" -faye-websocket@~0.11.0: +faye-websocket@~0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= dependencies: websocket-driver ">=0.5.1" -fbjs@^0.8.1, fbjs@^0.8.16: - version "0.8.16" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" +fbjs@^0.8.1: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2628,82 +3045,85 @@ fbjs@^0.8.1, fbjs@^0.8.16: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.9" + ua-parser-js "^0.7.18" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^2.0.1" -file-loader@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" +file-loader@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== dependencies: loader-utils "^1.0.2" - schema-utils "^0.4.5" + schema-utils "^1.0.0" -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.2" - statuses "~1.3.1" + statuses "~1.4.0" unpipe "~1.0.0" find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= dependencies: commondir "^1.0.1" mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" + make-dir "^2.0.0" + pkg-dir "^3.0.0" find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -2711,38 +3131,60 @@ find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + locate-path "^3.0.0" -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" -flow-bin-loader@^1.0.2: +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + +flow-bin-loader@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/flow-bin-loader/-/flow-bin-loader-1.0.3.tgz#1b95260437bea24786a5abc022ef3efa02df77c5" + integrity sha512-JgbydYGf7/Di8Jq4Az3+58g8lreabVdzI3IZQFICpQSH+yK8Uhgc1+Os5rnFBUfAQuhx3imUjpfOjaTLlz8M5A== -flow-bin@^0.63.1: - version "0.63.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.63.1.tgz#ab00067c197169a5fb5b4996c8f6927b06694828" +flow-bin@0.94.0: + version "0.94.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.94.0.tgz#b5d58fe7559705b73a18229f97edfc3ab6ffffcb" + integrity sha512-DYF7r9CJ/AksfmmB4+q+TyLMoeQPRnqtF1Pk7KY3zgfkB/nVuA3nXyzqgsIPIvnMSiFEXQcFK4z+iPxSLckZhQ== -flow-typed@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.3.0.tgz#0f8604faab60691b885024e16ec0e3256e3b680e" +flow-typed@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.5.1.tgz#0ff565cc94d2af8c557744ba364b6f14726a6b9f" + integrity sha1-D/VlzJTSr4xVd0S6NktvFHJqa58= dependencies: + "@octokit/rest" "^15.2.6" babel-polyfill "^6.26.0" colors "^1.1.2" fs-extra "^5.0.0" - github "0.2.4" glob "^7.1.2" got "^7.1.0" md5 "^2.1.0" @@ -2751,110 +3193,123 @@ flow-typed@^2.2.3: semver "^5.5.0" table "^4.0.2" through "^2.3.8" - unzip "^0.1.11" + unzipper "^0.8.11" which "^1.3.0" yargs "^4.2.0" -font-awesome@^4.3.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" -for-in@^1.0.1, for-in@^1.0.2: +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + dependencies: + debug "^3.2.6" + +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fp-ts@^1.0.0, fp-ts@^1.0.1: + version "1.14.4" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.14.4.tgz#df431e1bfe590f23ad418ca8c889880106a5008f" + integrity sha512-A20kqVBpV/VOpDmEDudb+FP/qOV+V/yEqHQQfHPHLHeX3alFM0JjX1cXNcU8+p8z5yeCkHFolKo7uJMRwUSMFA== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" + nan "^2.9.2" + node-pre-gyp "^0.10.0" -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -"fstream@>= 0.1.30 < 1": - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - dependencies: - graceful-fs "~3.0.2" - inherits "~2.0.0" - mkdirp "0.5" - rimraf "2" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: +fstream@~1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2866,56 +3321,39 @@ gauge@~2.7.3: wide-align "^1.1.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -github@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" - dependencies: - mime "^1.2.11" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2924,39 +3362,43 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.3.0: +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= dependencies: min-document "^2.19.0" process "~0.5.1" -globals@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" - -globals@^11.1.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" +globals@^11.1.0, globals@^11.7.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -2967,6 +3409,7 @@ globby@^6.1.0: got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== dependencies: decompress-response "^3.2.0" duplexer3 "^0.1.4" @@ -2983,66 +3426,70 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -graceful-fs@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -has-ansi@^2.0.0: +handle-thing@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + +handlebars@^4.0.11: + version "4.1.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" + integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== dependencies: - ansi-regex "^2.0.0" + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -3051,6 +3498,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -3059,198 +3507,252 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + minimalistic-assert "^1.0.1" hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - hoist-non-react-statics@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" +hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: - depd "1.1.1" + depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + version "0.5.0" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" + integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" + agent-base "4" + debug "3.1.0" -http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" +http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +http-proxy@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= hyphenate-style-name@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" + version "1.0.3" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -iconv-lite@0.4.19, iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@~0.4.13: +iconv-lite@0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" +icss-utils@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.0.tgz#339dbbffb9f8729a243b701e1c29d4cc58c52f0e" + integrity sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ== dependencies: - postcss "^6.0.1" + postcss "^7.0.14" ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== -ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: - pkg-dir "^2.0.0" + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.5.tgz#c663c548d6ce186fb33616a8ccb5d46e56bdbbf9" + integrity sha512-kOC8IUb8HSDMVcYrDVezCxpJkzSQWTAzf3olpKM6o9rM5zpojx23O0Fl8Wr4+qJ6ZbPEHqf1fdwev/DS7v7pmA== + +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" +indefinite-observable@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8" + integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA== dependencies: - repeating "^2.0.0" + symbol-observable "1.2.0" indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -3258,121 +3760,173 @@ inflight@^1.0.4: inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" +inquirer@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" + integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" + ansi-escapes "^3.2.0" + chalk "^2.4.2" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.11" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^6.4.0" string-width "^2.1.0" - strip-ansi "^4.0.0" + strip-ansi "^5.0.0" through "^2.3.6" -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" +inspectpack@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/inspectpack/-/inspectpack-4.1.2.tgz#b07dd10f1131c290d2076270470787d61b47097e" + integrity sha512-bd0iIr5P2xRMtjQQkPnUYJSNa3mUFYER/2eQOPAoXrWBnZXMeFVAgRt/Dny8XVdSkkFoNKhumPjjV9QgTDcVxQ== dependencies: - meow "^3.3.0" + chalk "^2.4.0" + io-ts "^1.0.5" + io-ts-reporters "^0.0.20" + pify "^3.0.0" + semver-compare "^1.0.0" + yargs "^11.0.0" -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" +internal-ip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.2.0.tgz#46e81b638d84c338e5c67e42b1a17db67d0814fa" + integrity sha512-ZY8Rk+hlvFeuMmG5uH1MXhhdeMntmIaxaInvAmzMq/SHV8rv4Kh+6GiQNNDQd0wZFrcO+FiTBo8lui/osKOyJw== + dependencies: + default-gateway "^4.0.1" + ipaddr.js "^1.9.0" -invariant@^2.2.0, invariant@^2.2.2: +interpret@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts-reporters@^0.0.20: + version "0.0.20" + resolved "https://registry.yarnpkg.com/io-ts-reporters/-/io-ts-reporters-0.0.20.tgz#2b8cbb6a2bc4562dae6917a3a413fa2c9851a644" + integrity sha512-ZGyPkto96U8exipqA915ZqxIJsaFLavgZIQOEgg4Pa8qgq1Hl9ZKBtN708ZXPzlAGR/jxofrD4QNT8SHowIDVA== + dependencies: + fp-ts "^1.0.1" + io-ts "^1.0.2" + +io-ts@^1.0.2, io-ts@^1.0.5: + version "1.8.2" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.8.2.tgz#4fe3878c147c9851604d36982ee6f64d3e6a4a1e" + integrity sha512-BvP7iC4bgum5e3Fh82xCUrKWt739osKjmQBMORGij2AOMfTmevj8SEqBhN8EeI0GEwIMHb2bXe4fuikN0lsTWg== + dependencies: + fp-ts "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" +ipaddr.js@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -3381,455 +3935,382 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= dependencies: is-extglob "^2.1.1" is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + has-symbols "^1.0.0" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -js-base64@^2.1.9: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" +js-beautify@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f" + integrity sha512-P0skmY4IDjfLiVrx+GLDeme8w5G0R1IGXgccVU5HP2VM3lRblH7qN2LTea5vZAxrDjpZBD0Jv+ahpjwVcbz/rw== + dependencies: + config-chain "^1.1.12" + editorconfig "^0.15.2" + glob "^7.1.3" + mkdirp "~0.5.0" + nopt "~4.0.1" -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.12.0: + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" + integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jss-camel-case@^6.0.0, jss-camel-case@^6.1.0: +jss-camel-case@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44" + integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ== dependencies: hyphenate-style-name "^1.0.2" -jss-compose@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" - dependencies: - warning "^3.0.0" - jss-default-unit@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" - -jss-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.1.0.tgz#b1ad74ec18631f34f65a2124fcfceb6400610e3d" - -jss-extend@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.2.0.tgz#4af09d0b72fb98ee229970f8ca852fec1ca2a8dc" - dependencies: - warning "^3.0.0" + integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg== jss-global@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" + integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q== jss-nested@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" + integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA== dependencies: warning "^3.0.0" -jss-preset-default@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.3.0.tgz#7bc91b0b282492557d36ed4e5c6d7c8cb3154bb8" - dependencies: - jss-camel-case "^6.1.0" - jss-compose "^5.0.0" - jss-default-unit "^8.0.2" - jss-expand "^5.1.0" - jss-extend "^6.2.0" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-template "^1.0.1" - jss-vendor-prefixer "^7.0.0" - jss-props-sort@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" - -jss-template@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.1.tgz#09aed9d86cc547b07f53ef355d7e1777f7da430a" - dependencies: - warning "^3.0.0" + integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g== jss-vendor-prefixer@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" + integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA== dependencies: css-vendor "^0.3.8" -jss@^9.3.2, jss@^9.3.3: - version "9.8.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.0.tgz#77830def563870103f8671ed31ce3a3d2f32aa2b" +jss@^9.8.7: + version "9.8.7" + resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05" + integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ== dependencies: is-in-browser "^1.1.3" symbol-observable "^1.1.0" warning "^3.0.0" -jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: +jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= dependencies: array-includes "^3.0.3" -keycode@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" - killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" - dependencies: - set-getter "^0.1.0" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -3840,6 +4321,7 @@ load-json-file@^1.0.0: load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -3849,168 +4331,148 @@ load-json-file@^2.0.0: loader-fs-cache@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" + integrity sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw= dependencies: find-cache-dir "^0.1.1" mkdirp "0.5.1" loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== dependencies: - big.js "^3.1.3" + big.js "^5.2.2" emojis-list "^2.0.0" - json5 "^0.5.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.3.0, lodash@~4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -lodash@^4.17.4, lodash@^4.2.0: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4, lodash@~4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po= -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" +lru-cache@^4.0.1, lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - pify "^3.0.0" + yallist "^3.0.2" + +macos-release@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.0.0.tgz#7dddf4caf79001a851eb4fba7fb6034f251276ab" + integrity sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A== + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" -"match-stream@>= 0.0.2 < 1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" - -material-ui-icons@^1.0.0-beta.17: - version "1.0.0-beta.35" - resolved "https://registry.yarnpkg.com/material-ui-icons/-/material-ui-icons-1.0.0-beta.35.tgz#f795fafa385918ef7c88ee382e5e5bf4401f008c" - dependencies: - recompose "^0.26.0" - -material-ui@^1.0.0-beta.30: - version "1.0.0-beta.35" - resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-1.0.0-beta.35.tgz#eeac6be307c0469943c7686e5c6bd4eaa6b1b563" - dependencies: - "@types/jss" "^9.3.0" - "@types/react-transition-group" "^2.0.6" - babel-runtime "^6.26.0" - brcast "^3.0.1" - classnames "^2.2.5" - deepmerge "^2.0.1" - dom-helpers "^3.2.1" - hoist-non-react-statics "^2.3.1" - jss "^9.3.3" - jss-camel-case "^6.0.0" - jss-default-unit "^8.0.2" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-vendor-prefixer "^7.0.0" - keycode "^2.1.9" - lodash "^4.2.0" - normalize-scroll-left "^0.1.2" - prop-types "^15.6.0" - react-event-listener "^0.5.1" - react-jss "^8.1.0" - react-popper "^0.8.0" - react-scrollbar-size "^2.0.2" - react-transition-group "^2.2.1" - recompose "^0.26.0" - scroll "^2.0.3" - warning "^3.0.0" - math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" md5@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= dependencies: charenc "~0.0.1" crypt "~0.0.1" @@ -4019,64 +4481,46 @@ md5@^2.1.0: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +mem@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" + integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4: - version "3.1.9" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -4090,93 +4534,178 @@ micromatch@^3.1.4: object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" - to-regex "^3.0.1" + to-regex "^3.0.2" miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +"mime-db@>= 1.38.0 < 2", mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" +mime-types@~2.1.17, mime-types@~2.1.18: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== dependencies: - mime-db "~1.33.0" + mime-db "~1.38.0" mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mime@^2.0.3, mime@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" + integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= dependencies: dom-walk "^0.1.0" -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +most@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/most/-/most-1.7.3.tgz#406c31a66d73aa16957816fdf96965e27df84f1a" + integrity sha512-mk68SM/ptK8WSo3l03raXcWy02Hl7jbzxVozMuvyYxohn4yteh2THhl3+XABF5cunWE8eXHAsLbv+RCJI5y+jg== + dependencies: + "@most/multicast" "^1.2.5" + "@most/prelude" "^1.4.0" + symbol-observable "^1.0.2" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= multicast-dns@^6.0.1: version "6.2.3" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== dependencies: dns-packet "^1.3.1" thunky "^1.0.2" @@ -4184,21 +4713,23 @@ multicast-dns@^6.0.1: mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.3.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" +nan@^2.9.2: + version "2.13.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.0.tgz#7bdfc27dd3c060c46e60b62c72b74012d1a4cd68" + integrity sha512-5DDQvN0luhXdut8SCwzm/ZuAX2W+fwhqNzfq7CZ+OJzQ6NwpcqmIGyLD1R8MEt7BeErzcsI0JLr4pND2pNp2Cw== nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -4206,36 +4737,62 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natives@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.1.tgz#011acce1f7cbd87f7ba6b3093d6cd9392be1c574" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= neo-async@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +neo-blessed@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/neo-blessed/-/neo-blessed-0.2.0.tgz#30f9495fdd104494402b62c6273a9c9b82de4f2b" + integrity sha512-C2kC4K+G2QnNQFXUIxTQvqmrdSIzGTX1ZRKeDW6ChmvPRw8rTkTEJzbEQHiHy06d36PCl/yMOCjquCRV8SpSQw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-fetch@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" + integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== + +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" + integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -4244,7 +4801,7 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" path-browserify "0.0.0" @@ -4258,165 +4815,233 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" + util "^0.11.0" vm-browserify "0.0.4" -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" -nopt@^4.0.1: +node-releases@^1.1.8: + version "1.1.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.10.tgz#5dbeb6bc7f4e9c85b899e2e7adcc0635c9b2adf7" + integrity sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ== + dependencies: + semver "^5.3.0" + +nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-scroll-left@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa" + integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg== -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-hash@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.3: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opn@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + version "5.4.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" + integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== dependencies: is-wsl "^1.1.0" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -4425,161 +5050,259 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: - url-parse "1.0.x" + url-parse "^1.4.3" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= dependencies: lcid "^1.0.0" os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.0.0.tgz#e1434dbfddb8e74b44c98b56797d951b7648a5d9" + integrity sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g== + dependencies: + macos-release "^2.0.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" + integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== + dependencies: + callsites "^3.0.0" parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" + safe-buffer "^5.1.1" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -4588,19 +5311,22 @@ path-type@^1.0.0: path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path@^0.12.7: version "0.12.7" resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= dependencies: process "^0.11.1" util "^0.10.3" pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -4608,55 +5334,68 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: find-up "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" -popper.js@^1.12.9: - version "1.12.9" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.9.tgz#0dfbc2dff96c451bb332edcfcfaaf566d331d5b3" +popper.js@^1.14.1: + version "1.14.7" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e" + integrity sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ== portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + version "1.0.20" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" + integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== dependencies: async "^1.5.2" debug "^2.2.0" @@ -4665,404 +5404,245 @@ portfinder@^1.0.9: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" - dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: +postcss-modules-extract-imports@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + postcss "^7.0.5" -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" +postcss-modules-local-by-default@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" + integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-value-parser "^3.3.1" -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" +postcss-modules-values@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" + integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== dependencies: icss-replace-symbols "^1.1.0" - postcss "^6.0.1" + postcss "^7.0.6" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" +postcss-selector-parser@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" + cssesc "^3.0.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" +postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" +postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.19" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" - dependencies: - chalk "^2.3.1" + chalk "^2.4.2" source-map "^0.6.1" - supports-color "^5.2.0" + supports-color "^6.1.0" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -private@^0.1.6, private@^0.1.8: +private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@^0.11.1, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" +prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +prop-types@~15.6.0: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== dependencies: - fbjs "^0.8.16" loose-envify "^1.3.1" object-assign "^4.1.1" -proxy-addr@~2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== dependencies: forwarded "~0.1.2" - ipaddr.js "1.6.0" + ipaddr.js "1.8.0" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" + safe-buffer "^5.1.2" -"pullstream@>= 0.4.1 < 1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" +qs@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" +querystringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" + integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg== -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" - -raf@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" -rafl@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" - dependencies: - global "~4.3.0" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -5070,114 +5650,116 @@ randomfill@^1.0.3: range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== dependencies: bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" + http-errors "1.6.3" + iconv-lite "0.4.23" unpipe "1.0.0" -rc@^1.1.7: - version "1.2.5" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.2.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.0.tgz#099f067dd5827ce36a29eaf9a6cdc7cbf6216b1e" +react-dom@16.8.4: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48" + integrity sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.4" + +react-event-listener@^0.6.2: + version "0.6.6" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a" + integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw== + dependencies: + "@babel/runtime" "^7.2.0" prop-types "^15.6.0" + warning "^4.0.1" -react-event-listener@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.3.tgz#a8b492596ad601865314fcc2c18cb87b6ce3876e" +react-hot-loader@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.8.0.tgz#0b7c7dd9407415e23eb8246fdd28b0b839f54cb6" + integrity sha512-HY9F0vITYSVmXhAR6tPkMk240nxmoH8+0rca9iO2B82KVguiCiBJkieS0Wb4CeSIzLWecYx3iOcq8dcbnp0bxA== dependencies: - babel-runtime "^6.26.0" - fbjs "^0.8.16" + fast-levenshtein "^2.0.6" + global "^4.3.0" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.11" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.0.2" + source-map "^0.7.3" + +react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" + integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== + +react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-resize-detector@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" + integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ== + dependencies: + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" prop-types "^15.6.0" - warning "^3.0.0" + resize-observer-polyfill "^1.5.0" -react-fa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-fa/-/react-fa-5.0.0.tgz#d571732856c6cb2c155c46daef018ba67a75b973" - dependencies: - font-awesome "^4.3.0" - prop-types "^15.5.8" - -react-jss@^8.1.0: - version "8.3.3" - resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.3.3.tgz#677a57569d3e4f5099fcdeafeddd8d2c62ab5977" - dependencies: - hoist-non-react-statics "^2.3.1" - jss "^9.3.2" - jss-preset-default "^4.3.0" - prop-types "^15.6.0" - theming "^1.3.0" - -react-popper@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.8.2.tgz#092095ff13933211d3856d9f325511ec3a42f12c" - dependencies: - popper.js "^1.12.9" - prop-types "^15.6.0" - -react-resize-detector@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-1.1.0.tgz#4a9831fa3caad32230478dd0185cbd2aa91a5ebf" - dependencies: - prop-types "^15.5.10" - -react-scrollbar-size@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754" - dependencies: - babel-runtime "^6.26.0" - prop-types "^15.6.0" - react-event-listener "^0.5.1" - stifle "^1.0.2" - -react-smooth@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.0.tgz#b29dbebddddb06d21b5b08962167fb9eac1897d8" +react-smooth@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.2.tgz#f7a2d932ece8db898646078c3c97f3e9533e0486" + integrity sha512-pIGzL1g9VGAsRsdZQokIK0vrCkcdKtnOnS1gyB2rrowdLy69lNSWoIjCTWAfgbiYvria8tm5hEZqj+jwXMkV4A== dependencies: lodash "~4.17.4" prop-types "^15.6.0" - raf "^3.2.0" - react-transition-group "^2.2.1" + raf "^3.4.0" + react-transition-group "^2.5.0" -react-transition-group@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" +react-transition-group@2.6.1, react-transition-group@^2.2.1, react-transition-group@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.6.1.tgz#abf4a95e2f13fb9ba83a970a896fedbc5c4856a2" + integrity sha512-9DHwCy0aOYEe35frlEN68N9ut/THDQBLnVoQuKTvzF4/s3tk7lqkefCqxK2Nv96fOh6JXk6tQtliygk6tl3bQA== dependencies: - chain-function "^1.0.0" - classnames "^2.2.5" - dom-helpers "^3.2.0" - loose-envify "^1.3.1" - prop-types "^15.5.8" - warning "^3.0.0" + dom-helpers "^3.3.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" -react@^16.2.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.4.0.tgz#402c2db83335336fba1962c08b98c6272617d585" +react@16.8.4: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.4.tgz#fdf7bd9ae53f03a9c4cd1a371432c206be1c4768" + integrity sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" + scheduler "^0.13.4" read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -5185,6 +5767,7 @@ read-pkg-up@^1.0.1: read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" @@ -5192,6 +5775,7 @@ read-pkg-up@^2.0.0: read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -5200,92 +5784,96 @@ read-pkg@^1.0.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" + string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.2.9: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" +readable-stream@^3.0.6: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" + integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" +readable-stream@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" - isarray "0.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" string_decoder "~0.10.x" + util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" -recharts-scale@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.3.2.tgz#dac7621714a4765d152cb2adbc30c73b831208c9" - -recharts@^1.0.0-beta.9: - version "1.0.0-beta.10" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.0.0-beta.10.tgz#d3cd15df6b7879d5968da3c942b5fcdaf2504fe1" +recharts-scale@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.2.tgz#b66315d985cd9b80d5f7d977a5aab9a305abc354" + integrity sha512-p/cKt7j17D1CImLgX2f5+6IXLbRHGUQkogIp06VUoci/XkhOQiGSzUrsD1uRmiI7jha4u8XNFOjkHkzzBPivMg== dependencies: - classnames "2.2.5" - core-js "2.5.1" - d3-interpolate "^1.1.5" - d3-scale "1.0.6" - d3-shape "1.2.0" - lodash "~4.17.4" - prop-types "^15.6.0" - react-resize-detector "1.1.0" - react-smooth "1.0.0" - recharts-scale "0.3.2" - reduce-css-calc "1.3.0" + decimal.js-light "^2.4.1" -recompose@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30" +recharts@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.5.0.tgz#ecb4f015cec5b1284294954b7906c7c2ec6e25be" + integrity sha512-bsKJRvh4NepPJlXoI4L9oRKhrv59W7fjs6qTqk6le9MFAywe8EYiW/t07RDQHBVIj6icb+UdSFsHxEo8c5AcTg== dependencies: + classnames "~2.2.5" + core-js "~2.5.1" + d3-interpolate "~1.3.0" + d3-scale "~2.1.0" + d3-shape "~1.2.0" + lodash "~4.17.5" + prop-types "~15.6.0" + react-resize-detector "~2.3.0" + react-smooth "~1.0.0" + recharts-scale "^0.4.2" + reduce-css-calc "~1.3.0" + +"recompose@0.28.0 - 0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" + integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== + dependencies: + "@babel/runtime" "^7.0.0" change-emitter "^0.1.2" fbjs "^0.8.1" hoist-non-react-statics "^2.3.1" + react-lifecycles-compat "^3.0.2" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6: +reduce-css-calc@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" @@ -5294,159 +5882,162 @@ reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6: reduce-function-call@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= dependencies: balanced-match "^0.4.2" -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerate-unicode-properties@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" + integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + +regenerator-transform@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" + integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" private "^0.1.6" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: +regexp-tree@^0.1.0: version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" + integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ== + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.1.3, regexpu-core@^4.2.0: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" -resolve-from@^1.0.0: +resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" +resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -5454,101 +6045,114 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" +rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: - hash-base "^2.0.0" + hash-base "^3.0.0" inherits "^2.0.1" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: - rx-lite "*" + aproba "^1.1.1" -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== + dependencies: + tslib "^1.9.0" -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@~1.2.1: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" +scheduler@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.4.tgz#8fef05e7a3580c76c0364d2df5e550e4c9140298" + integrity sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA== dependencies: - ajv "^5.0.0" + loose-envify "^1.1.0" + object-assign "^4.1.1" -schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" + ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -scroll@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" - dependencies: - rafl "~1.2.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + version "1.10.4" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" + integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== dependencies: - node-forge "0.7.1" + node-forge "0.7.5" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" - depd "~1.1.1" + depd "~1.1.2" destroy "~1.0.4" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -5557,11 +6161,17 @@ send@0.16.1: ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" - statuses "~1.3.1" + statuses "~1.4.0" + +serialize-javascript@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" + integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= dependencies: accepts "~1.3.4" batch "0.6.1" @@ -5571,32 +6181,25 @@ serve-index@^1.7.2: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== dependencies: - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.2" - send "0.16.1" + send "0.16.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - dependencies: - to-object-path "^0.3.0" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -5606,64 +6209,78 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" -"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.10" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== dependencies: is-fullwidth-code-point "^2.0.0" -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: - readable-stream "~1.0.31" + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -5672,12 +6289,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -5686,309 +6305,355 @@ snapdragon@^0.8.1: map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" - use "^2.0.0" + use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" +socket.io-client@2.2.0, socket.io-client@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" + integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA== dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.3.1" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b" + integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w== + dependencies: + debug "~4.1.0" + engine.io "~3.3.1" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.2.0" + socket.io-parser "~3.3.0" + +sockjs-client@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" + integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" json3 "^3.3.2" - url-parse "^1.1.8" + url-parse "^1.4.3" sockjs@0.3.19: version "0.3.19" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== dependencies: faye-websocket "^0.10.0" uuid "^3.0.1" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" +source-map-support@~0.5.10: + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== dependencies: - source-map "^0.5.6" + buffer-from "^1.0.0" + source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== + +spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -spdy-transport@^2.0.18: - version "2.0.20" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: - debug "^2.6.8" - detect-node "^2.0.3" + debug "^4.1.0" + detect-node "^2.0.4" hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" +spdy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" + integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" + debug "^4.1.0" + handle-thing "^2.0.0" http-deceiver "^1.2.7" - safe-buffer "^5.0.1" select-hose "^2.0.0" - spdy-transport "^2.0.18" + spdy-transport "^3.0.0" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" + figgy-pudding "^3.5.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2": +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stifle@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.0.4.tgz#8b3bcdf52419b0a9c79e35adadce50123c1d8e99" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + stream-http@^2.7.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.3.3" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@^1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== dependencies: safe-buffer "~5.1.0" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" + integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg== + dependencies: + ansi-regex "^4.1.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" +style-loader@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + schema-utils "^1.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -supports-color@^5.1.0, supports-color@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@^1.0.4, symbol-observable@^1.1.0: +symbol-observable@1.2.0, symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== table@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg== dependencies: ajv "^6.0.1" ajv-keywords "^3.0.0" @@ -5997,147 +6662,170 @@ table@^4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" + integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" -text-table@~0.2.0: +terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" + integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== + dependencies: + cacache "^11.0.2" + find-cache-dir "^2.0.0" + schema-utils "^1.0.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + terser "^3.16.1" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +terser@^3.16.1: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -theming@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - brcast "^3.0.1" - is-function "^1.0.1" - is-plain-object "^2.0.1" - prop-types "^15.5.8" + readable-stream "~2.3.6" + xtend "~4.0.1" through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - -time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + version "1.0.3" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= timers-browserify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== dependencies: setimmediate "^1.0.4" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex@^3.0.1: +to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" -type-is@~1.6.15: +type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== dependencies: media-typer "0.3.0" mime-types "~2.1.18" @@ -6145,39 +6833,48 @@ type-is@~1.6.15: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -ua-parser-js@^0.7.9: - version "0.7.18" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" +ua-parser-js@^0.7.18: + version "0.7.19" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" + integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ== -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" +uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" + commander "~2.17.1" + source-map "~0.6.1" -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -6187,119 +6884,179 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: - macaddress "^0.2.8" + unique-slug "^2.0.0" -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" +unique-slug@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" + integrity sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g== + dependencies: + os-name "^3.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" -unzip@^0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" +unzipper@^0.8.11: + version "0.8.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" + integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== dependencies: - binary ">= 0.3.0 < 1" - fstream ">= 0.1.30 < 1" - match-stream ">= 0.0.2 < 1" - pullstream ">= 0.4.1 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.1 < 2" + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "~1.0.10" + listenercount "~1.0.1" + readable-stream "~2.1.5" + setimmediate "~1.0.4" -upath@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +upath@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" +url-loader@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: prepend-http "^1.0.1" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" +url-parse@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" + integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg== dependencies: - querystringify "0.0.x" - requires-port "1.0.x" + querystringify "^2.0.0" + requires-port "^1.0.0" -url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" - dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" -use@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" - dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util@0.10.3, util@^0.10.3: +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.0, uuid@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-compile-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" + integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw== validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -6307,124 +7064,180 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= dependencies: loose-envify "^1.0.0" -watchpack@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" +warning@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" -webpack-dev-middleware@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" +webpack-cli@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.2.3.tgz#13653549adfd8ccd920ad7be1ef868bacc22e346" + integrity sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q== dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" + chalk "^2.4.1" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.0" + findup-sync "^2.0.0" + global-modules "^1.0.0" + import-local "^2.0.0" + interpret "^1.1.0" + loader-utils "^1.1.0" + supports-color "^5.5.0" + v8-compile-cache "^2.0.2" + yargs "^12.0.4" -webpack-dev-server@^2.11.1: - version "2.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" +webpack-dashboard@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack-dashboard/-/webpack-dashboard-3.0.0.tgz#14b2374841efd9b28d0368f07a38bc1af43970e1" + integrity sha512-OtqccZJLR9CPbn86p6iwXWrseh944AkNj0AzrNvC7j4x+yHjmX1dlDpyo1f35GwY6F9eBWpMffUoGeWrFjLNUA== + dependencies: + commander "^2.15.1" + cross-spawn "^6.0.5" + filesize "^3.6.1" + handlebars "^4.0.11" + inspectpack "^4.0.0" + most "^1.7.3" + neo-blessed "^0.2.0" + socket.io "^2.1.1" + socket.io-client "^2.1.1" + +webpack-dev-middleware@^3.5.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz#91f2531218a633a99189f7de36045a331a4b9cd4" + integrity sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw== + dependencies: + memory-fs "^0.4.1" + mime "^2.3.1" + range-parser "^1.0.3" + webpack-log "^2.0.0" + +webpack-dev-server@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz#1b45ce3ecfc55b6ebe5e36dab2777c02bc508c4e" + integrity sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw== dependencies: ansi-html "0.0.7" - array-includes "^3.0.3" bonjour "^3.5.0" chokidar "^2.0.0" compression "^1.5.2" connect-history-api-fallback "^1.3.0" - debug "^3.1.0" + debug "^4.1.1" del "^3.0.0" express "^4.16.2" html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^1.0.0" - internal-ip "1.2.0" + http-proxy-middleware "^0.19.1" + import-local "^2.0.0" + internal-ip "^4.2.0" ip "^1.1.5" killable "^1.0.0" loglevel "^1.4.1" opn "^5.1.0" portfinder "^1.0.9" + schema-utils "^1.0.0" selfsigned "^1.9.1" + semver "^5.6.0" serve-index "^1.7.2" sockjs "0.3.19" - sockjs-client "1.1.4" - spdy "^3.4.1" + sockjs-client "1.3.0" + spdy "^4.0.0" strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.5.1" + webpack-log "^2.0.0" + yargs "12.0.2" -webpack-sources@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" + integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== + dependencies: + lodash "^4.17.5" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^3.10.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" +webpack@4.29.6: + version "4.29.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" + integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" + micromatch "^3.1.8" mkdirp "~0.5.0" + neo-async "^2.5.0" node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= dependencies: http-parser-js ">=0.4.0" websocket-extensions ">=0.1.1" @@ -6432,54 +7245,70 @@ websocket-driver@>=0.5.1: websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + string-width "^1.0.2 || 2" window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +windows-release@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.1.0.tgz#8d4a7e266cbf5a233f6c717dac19ce00af36e12e" + integrity sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA== + dependencies: + execa "^0.10.0" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== + dependencies: + errno "~0.1.7" wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -6487,65 +7316,145 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" -xtend@^4.0.0: +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + dependencies: + async-limiter "~1.0.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= dependencies: camelcase "^3.0.0" lodash.assign "^4.0.6" -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs@12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^3.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^9.0.2" + +yargs@^12.0.4: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" yargs@^4.2.0: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= dependencies: cliui "^3.2.0" decamelize "^1.1.1" @@ -6562,29 +7471,7 @@ yargs@^4.2.0: y18n "^3.2.1" yargs-parser "^2.4.1" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/dashboard.go b/vendor/github.com/ethereum/go-ethereum/dashboard/dashboard.go index 3ba92ac7..d69a750f 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/dashboard.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/dashboard.go @@ -18,8 +18,10 @@ package dashboard //go:generate yarn --cwd ./assets install //go:generate yarn --cwd ./assets build -//go:generate go-bindata -nometadata -o assets.go -prefix assets -nocompress -pkg dashboard assets/index.html assets/bundle.js +//go:generate yarn --cwd ./assets js-beautify -f bundle.js.map -r -w 1 +//go:generate go-bindata -nometadata -o assets.go -prefix assets -nocompress -pkg dashboard assets/index.html assets/bundle.js assets/bundle.js.map //go:generate sh -c "sed 's#var _bundleJs#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" +//go:generate sh -c "sed 's#var _bundleJsMap#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" //go:generate sh -c "sed 's#var _indexHtml#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" //go:generate gofmt -w -s assets.go @@ -27,16 +29,13 @@ import ( "fmt" "net" "net/http" - "runtime" "sync" "sync/atomic" "time" "io" - "github.com/elastic/gosigar" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" @@ -45,31 +44,29 @@ import ( ) const ( - activeMemorySampleLimit = 200 // Maximum number of active memory data samples - virtualMemorySampleLimit = 200 // Maximum number of virtual memory data samples - networkIngressSampleLimit = 200 // Maximum number of network ingress data samples - networkEgressSampleLimit = 200 // Maximum number of network egress data samples - processCPUSampleLimit = 200 // Maximum number of process cpu data samples - systemCPUSampleLimit = 200 // Maximum number of system cpu data samples - diskReadSampleLimit = 200 // Maximum number of disk read data samples - diskWriteSampleLimit = 200 // Maximum number of disk write data samples + sampleLimit = 200 // Maximum number of data samples ) -var nextID uint32 // Next connection id - // Dashboard contains the dashboard internals. type Dashboard struct { - config *Config + config *Config // Configuration values for the dashboard - listener net.Listener - conns map[uint32]*client // Currently live websocket connections - history *Message - lock sync.RWMutex // Lock protecting the dashboard's internals + listener net.Listener // Network listener listening for dashboard clients + conns map[uint32]*client // Currently live websocket connections + nextConnID uint32 // Next connection id - logdir string + history *Message // Stored historical data + + lock sync.Mutex // Lock protecting the dashboard's internals + sysLock sync.RWMutex // Lock protecting the stored system data + peerLock sync.RWMutex // Lock protecting the stored peer data + logLock sync.RWMutex // Lock protecting the stored log data + + geodb *geoDB // geoip database instance for IP to geographical information conversions + logdir string // Directory containing the log files quit chan chan error // Channel used for graceful exit - wg sync.WaitGroup + wg sync.WaitGroup // Wait group used to close the data collector threads } // client represents active websocket connection with a remote browser. @@ -96,14 +93,14 @@ func New(config *Config, commit string, logdir string) *Dashboard { Version: fmt.Sprintf("v%d.%d.%d%s", params.VersionMajor, params.VersionMinor, params.VersionPatch, versionMeta), }, System: &SystemMessage{ - ActiveMemory: emptyChartEntries(now, activeMemorySampleLimit, config.Refresh), - VirtualMemory: emptyChartEntries(now, virtualMemorySampleLimit, config.Refresh), - NetworkIngress: emptyChartEntries(now, networkIngressSampleLimit, config.Refresh), - NetworkEgress: emptyChartEntries(now, networkEgressSampleLimit, config.Refresh), - ProcessCPU: emptyChartEntries(now, processCPUSampleLimit, config.Refresh), - SystemCPU: emptyChartEntries(now, systemCPUSampleLimit, config.Refresh), - DiskRead: emptyChartEntries(now, diskReadSampleLimit, config.Refresh), - DiskWrite: emptyChartEntries(now, diskWriteSampleLimit, config.Refresh), + ActiveMemory: emptyChartEntries(now, sampleLimit), + VirtualMemory: emptyChartEntries(now, sampleLimit), + NetworkIngress: emptyChartEntries(now, sampleLimit), + NetworkEgress: emptyChartEntries(now, sampleLimit), + ProcessCPU: emptyChartEntries(now, sampleLimit), + SystemCPU: emptyChartEntries(now, sampleLimit), + DiskRead: emptyChartEntries(now, sampleLimit), + DiskWrite: emptyChartEntries(now, sampleLimit), }, }, logdir: logdir, @@ -111,12 +108,10 @@ func New(config *Config, commit string, logdir string) *Dashboard { } // emptyChartEntries returns a ChartEntry array containing limit number of empty samples. -func emptyChartEntries(t time.Time, limit int, refresh time.Duration) ChartEntries { +func emptyChartEntries(t time.Time, limit int) ChartEntries { ce := make(ChartEntries, limit) for i := 0; i < limit; i++ { - ce[i] = &ChartEntry{ - Time: t.Add(-time.Duration(i) * refresh), - } + ce[i] = new(ChartEntry) } return ce } @@ -132,9 +127,10 @@ func (db *Dashboard) APIs() []rpc.API { return nil } func (db *Dashboard) Start(server *p2p.Server) error { log.Info("Starting dashboard") - db.wg.Add(2) - go db.collectData() + db.wg.Add(3) + go db.collectSystemData() go db.streamLogs() + go db.collectPeerData() http.HandleFunc("/", db.webHandler) http.Handle("/api", websocket.Handler(db.apiHandler)) @@ -160,7 +156,7 @@ func (db *Dashboard) Stop() error { } // Close the collectors. errc := make(chan error, 1) - for i := 0; i < 2; i++ { + for i := 0; i < 3; i++ { db.quit <- errc if err := <-errc; err != nil { errs = append(errs, err) @@ -206,7 +202,7 @@ func (db *Dashboard) webHandler(w http.ResponseWriter, r *http.Request) { // apiHandler handles requests for the dashboard. func (db *Dashboard) apiHandler(conn *websocket.Conn) { - id := atomic.AddUint32(&nextID, 1) + id := atomic.AddUint32(&db.nextConnID, 1) client := &client{ conn: conn, msg: make(chan *Message, 128), @@ -233,10 +229,21 @@ func (db *Dashboard) apiHandler(conn *websocket.Conn) { } }() - db.lock.Lock() // Send the past data. - client.msg <- deepcopy.Copy(db.history).(*Message) + db.sysLock.RLock() + db.peerLock.RLock() + db.logLock.RLock() + + h := deepcopy.Copy(db.history).(*Message) + + db.sysLock.RUnlock() + db.peerLock.RUnlock() + db.logLock.RUnlock() + + client.msg <- h + // Start tracking the connection and drop at connection loss. + db.lock.Lock() db.conns[id] = client db.lock.Unlock() defer func() { @@ -259,136 +266,6 @@ func (db *Dashboard) apiHandler(conn *websocket.Conn) { } } -// meterCollector returns a function, which retrieves a specific meter. -func meterCollector(name string) func() int64 { - if metric := metrics.DefaultRegistry.Get(name); metric != nil { - m := metric.(metrics.Meter) - return func() int64 { - return m.Count() - } - } - return func() int64 { - return 0 - } -} - -// collectData collects the required data to plot on the dashboard. -func (db *Dashboard) collectData() { - defer db.wg.Done() - - systemCPUUsage := gosigar.Cpu{} - systemCPUUsage.Get() - var ( - mem runtime.MemStats - - collectNetworkIngress = meterCollector("p2p/InboundTraffic") - collectNetworkEgress = meterCollector("p2p/OutboundTraffic") - collectDiskRead = meterCollector("eth/db/chaindata/disk/read") - collectDiskWrite = meterCollector("eth/db/chaindata/disk/write") - - prevNetworkIngress = collectNetworkIngress() - prevNetworkEgress = collectNetworkEgress() - prevProcessCPUTime = getProcessCPUTime() - prevSystemCPUUsage = systemCPUUsage - prevDiskRead = collectDiskRead() - prevDiskWrite = collectDiskWrite() - - frequency = float64(db.config.Refresh / time.Second) - numCPU = float64(runtime.NumCPU()) - ) - - for { - select { - case errc := <-db.quit: - errc <- nil - return - case <-time.After(db.config.Refresh): - systemCPUUsage.Get() - var ( - curNetworkIngress = collectNetworkIngress() - curNetworkEgress = collectNetworkEgress() - curProcessCPUTime = getProcessCPUTime() - curSystemCPUUsage = systemCPUUsage - curDiskRead = collectDiskRead() - curDiskWrite = collectDiskWrite() - - deltaNetworkIngress = float64(curNetworkIngress - prevNetworkIngress) - deltaNetworkEgress = float64(curNetworkEgress - prevNetworkEgress) - deltaProcessCPUTime = curProcessCPUTime - prevProcessCPUTime - deltaSystemCPUUsage = curSystemCPUUsage.Delta(prevSystemCPUUsage) - deltaDiskRead = curDiskRead - prevDiskRead - deltaDiskWrite = curDiskWrite - prevDiskWrite - ) - prevNetworkIngress = curNetworkIngress - prevNetworkEgress = curNetworkEgress - prevProcessCPUTime = curProcessCPUTime - prevSystemCPUUsage = curSystemCPUUsage - prevDiskRead = curDiskRead - prevDiskWrite = curDiskWrite - - now := time.Now() - - runtime.ReadMemStats(&mem) - activeMemory := &ChartEntry{ - Time: now, - Value: float64(mem.Alloc) / frequency, - } - virtualMemory := &ChartEntry{ - Time: now, - Value: float64(mem.Sys) / frequency, - } - networkIngress := &ChartEntry{ - Time: now, - Value: deltaNetworkIngress / frequency, - } - networkEgress := &ChartEntry{ - Time: now, - Value: deltaNetworkEgress / frequency, - } - processCPU := &ChartEntry{ - Time: now, - Value: deltaProcessCPUTime / frequency / numCPU * 100, - } - systemCPU := &ChartEntry{ - Time: now, - Value: float64(deltaSystemCPUUsage.Sys+deltaSystemCPUUsage.User) / frequency / numCPU, - } - diskRead := &ChartEntry{ - Time: now, - Value: float64(deltaDiskRead) / frequency, - } - diskWrite := &ChartEntry{ - Time: now, - Value: float64(deltaDiskWrite) / frequency, - } - sys := db.history.System - db.lock.Lock() - sys.ActiveMemory = append(sys.ActiveMemory[1:], activeMemory) - sys.VirtualMemory = append(sys.VirtualMemory[1:], virtualMemory) - sys.NetworkIngress = append(sys.NetworkIngress[1:], networkIngress) - sys.NetworkEgress = append(sys.NetworkEgress[1:], networkEgress) - sys.ProcessCPU = append(sys.ProcessCPU[1:], processCPU) - sys.SystemCPU = append(sys.SystemCPU[1:], systemCPU) - sys.DiskRead = append(sys.DiskRead[1:], diskRead) - sys.DiskWrite = append(sys.DiskWrite[1:], diskWrite) - db.lock.Unlock() - - db.sendToAll(&Message{ - System: &SystemMessage{ - ActiveMemory: ChartEntries{activeMemory}, - VirtualMemory: ChartEntries{virtualMemory}, - NetworkIngress: ChartEntries{networkIngress}, - NetworkEgress: ChartEntries{networkEgress}, - ProcessCPU: ChartEntries{processCPU}, - SystemCPU: ChartEntries{systemCPU}, - DiskRead: ChartEntries{diskRead}, - DiskWrite: ChartEntries{diskWrite}, - }, - }) - } - } -} - // sendToAll sends the given message to the active dashboards. func (db *Dashboard) sendToAll(msg *Message) { db.lock.Lock() diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/geoip.go b/vendor/github.com/ethereum/go-ethereum/dashboard/geoip.go new file mode 100644 index 00000000..ae10bbe8 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/geoip.go @@ -0,0 +1,98 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "net" + "time" + + "github.com/apilayer/freegeoip" +) + +// geoDBInfo contains all the geographical information we could extract based on an IP +// address. +type geoDBInfo struct { + Country struct { + Names struct { + English string `maxminddb:"en" json:"en,omitempty"` + } `maxminddb:"names" json:"names,omitempty"` + } `maxminddb:"country" json:"country,omitempty"` + City struct { + Names struct { + English string `maxminddb:"en" json:"en,omitempty"` + } `maxminddb:"names" json:"names,omitempty"` + } `maxminddb:"city" json:"city,omitempty"` + Location struct { + Latitude float64 `maxminddb:"latitude" json:"latitude,omitempty"` + Longitude float64 `maxminddb:"longitude" json:"longitude,omitempty"` + } `maxminddb:"location" json:"location,omitempty"` +} + +// geoLocation contains geographical information. +type geoLocation struct { + Country string `json:"country,omitempty"` + City string `json:"city,omitempty"` + Latitude float64 `json:"latitude,omitempty"` + Longitude float64 `json:"longitude,omitempty"` +} + +// geoDB represents a geoip database that can be queried for IP to geographical +// information conversions. +type geoDB struct { + geodb *freegeoip.DB +} + +// Open creates a new geoip database with an up-to-date database from the internet. +func openGeoDB() (*geoDB, error) { + // Initiate a geoip database to cross reference locations + db, err := freegeoip.OpenURL(freegeoip.MaxMindDB, 24*time.Hour, time.Hour) + if err != nil { + return nil, err + } + // Wait until the database is updated to the latest data + select { + case <-db.NotifyOpen(): + case err := <-db.NotifyError(): + return nil, err + } + // Assemble and return our custom wrapper + return &geoDB{geodb: db}, nil +} + +// Close terminates the database background updater. +func (db *geoDB) close() error { + db.geodb.Close() + return nil +} + +// Lookup converts an IP address to a geographical location. +func (db *geoDB) lookup(ip net.IP) *geoDBInfo { + result := new(geoDBInfo) + db.geodb.Lookup(ip, result) + return result +} + +// Location retrieves the geographical location of the given IP address. +func (db *geoDB) location(ip string) *geoLocation { + location := db.lookup(net.ParseIP(ip)) + return &geoLocation{ + Country: location.Country.Names.English, + City: location.City.Names.English, + Latitude: location.Location.Latitude, + Longitude: location.Location.Longitude, + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/log.go b/vendor/github.com/ethereum/go-ethereum/dashboard/log.go index 5d852d60..be773269 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/log.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/log.go @@ -94,13 +94,13 @@ func (db *Dashboard) handleLogRequest(r *LogsRequest, c *client) { // The last file is continuously updated, and its chunks are streamed, // so in order to avoid log record duplication on the client side, it is // handled differently. Its actual content is always saved in the history. - db.lock.Lock() + db.logLock.RLock() if db.history.Logs != nil { c.msg <- &Message{ - Logs: db.history.Logs, + Logs: deepcopy.Copy(db.history.Logs).(*LogsMessage), } } - db.lock.Unlock() + db.logLock.RUnlock() return case fileNames[idx] == r.Name: idx++ @@ -174,7 +174,7 @@ func (db *Dashboard) streamLogs() { log.Warn("Problem with file", "name", opened.Name(), "err", err) return } - db.lock.Lock() + db.logLock.Lock() db.history.Logs = &LogsMessage{ Source: &LogFile{ Name: fi.Name(), @@ -182,7 +182,7 @@ func (db *Dashboard) streamLogs() { }, Chunk: emptyChunk, } - db.lock.Unlock() + db.logLock.Unlock() watcher := make(chan notify.EventInfo, 10) if err := notify.Watch(db.logdir, watcher, notify.Create); err != nil { @@ -240,10 +240,10 @@ loop: log.Warn("Problem with file", "name", opened.Name(), "err", err) break loop } - db.lock.Lock() + db.logLock.Lock() db.history.Logs.Source.Name = fi.Name() db.history.Logs.Chunk = emptyChunk - db.lock.Unlock() + db.logLock.Unlock() case <-ticker.C: // Send log updates to the client. if opened == nil { log.Warn("The last log file is not opened") @@ -266,7 +266,7 @@ loop: var l *LogsMessage // Update the history. - db.lock.Lock() + db.logLock.Lock() if bytes.Equal(db.history.Logs.Chunk, emptyChunk) { db.history.Logs.Chunk = chunk l = deepcopy.Copy(db.history.Logs).(*LogsMessage) @@ -278,7 +278,7 @@ loop: db.history.Logs.Chunk = b l = &LogsMessage{Chunk: chunk} } - db.lock.Unlock() + db.logLock.Unlock() db.sendToAll(&Message{Logs: l}) case errc = <-db.quit: diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/message.go b/vendor/github.com/ethereum/go-ethereum/dashboard/message.go index 46856b9e..797b210f 100644 --- a/vendor/github.com/ethereum/go-ethereum/dashboard/message.go +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/message.go @@ -18,7 +18,6 @@ package dashboard import ( "encoding/json" - "time" ) type Message struct { @@ -34,8 +33,7 @@ type Message struct { type ChartEntries []*ChartEntry type ChartEntry struct { - Time time.Time `json:"time,omitempty"` - Value float64 `json:"value,omitempty"` + Value float64 `json:"value"` } type GeneralMessage struct { @@ -55,10 +53,14 @@ type TxPoolMessage struct { /* TODO (kurkomisi) */ } +// NetworkMessage contains information about the peers +// organized based on their IP address and node ID. type NetworkMessage struct { - /* TODO (kurkomisi) */ + Peers *peerContainer `json:"peers,omitempty"` // Peer tree. + Diff []*peerEvent `json:"diff,omitempty"` // Events that change the peer tree. } +// SystemMessage contains the metered system data samples. type SystemMessage struct { ActiveMemory ChartEntries `json:"activeMemory,omitempty"` VirtualMemory ChartEntries `json:"virtualMemory,omitempty"` @@ -70,7 +72,7 @@ type SystemMessage struct { DiskWrite ChartEntries `json:"diskWrite,omitempty"` } -// LogsMessage wraps up a log chunk. If Source isn't present, the chunk is a stream chunk. +// LogsMessage wraps up a log chunk. If 'Source' isn't present, the chunk is a stream chunk. type LogsMessage struct { Source *LogFile `json:"source,omitempty"` // Attributes of the log file. Chunk json.RawMessage `json:"chunk"` // Contains log records. @@ -87,6 +89,7 @@ type Request struct { Logs *LogsRequest `json:"logs,omitempty"` } +// LogsRequest contains the attributes of the log file the client wants to receive. type LogsRequest struct { Name string `json:"name"` // The request handler searches for log file based on this file name. Past bool `json:"past"` // Denotes whether the client wants the previous or the next file. diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/peers.go b/vendor/github.com/ethereum/go-ethereum/dashboard/peers.go new file mode 100644 index 00000000..e591bda7 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/peers.go @@ -0,0 +1,552 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "container/list" + "strings" + "time" + + "github.com/ethereum/go-ethereum/metrics" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" +) + +const ( + eventBufferLimit = 128 // Maximum number of buffered peer events. + knownPeerLimit = 100 // Maximum number of stored peers, which successfully made the handshake. + attemptLimit = 200 // Maximum number of stored peers, which failed to make the handshake. + + // eventLimit is the maximum number of the dashboard's custom peer events, + // that are collected between two metering period and sent to the clients + // as one message. + // TODO (kurkomisi): Limit the number of events. + eventLimit = knownPeerLimit << 2 +) + +// peerContainer contains information about the node's peers. This data structure +// maintains the metered peer data based on the different behaviours of the peers. +// +// Every peer has an IP address, and the peers that manage to make the handshake +// (known peers) have node IDs too. There can appear more peers with the same IP, +// therefore the peer container data structure is a tree consisting of a map of +// maps, where the first key groups the peers by IP, while the second one groups +// them by the node ID. The known peers can be active if their connection is still +// open, or inactive otherwise. The peers failing before the handshake (unknown +// peers) only have IP addresses, so their connection attempts are stored as part +// of the value of the outer map. +// +// Another criteria is to limit the number of metered peers so that +// they don't fill the memory. The selection order is based on the +// peers activity: the peers that are inactive for the longest time +// are thrown first. For the selection a fifo list is used which is +// linked to the bottom of the peer tree in a way that every activity +// of the peer pushes the peer to the end of the list, so the inactive +// ones come to the front. When a peer has some activity, it is removed +// from and reinserted into the list. When the length of the list reaches +// the limit, the first element is removed from the list, as well as from +// the tree. +// +// The active peers have priority over the inactive ones, therefore +// they have their own list. The separation makes it sure that the +// inactive peers are always removed before the active ones. +// +// The peers that don't manage to make handshake are not inserted into the list, +// only their connection attempts are appended to the array belonging to their IP. +// In order to keep the fifo principle, a super array contains the order of the +// attempts, and when the overall count reaches the limit, the earliest attempt is +// removed from the beginning of its array. +// +// This data structure makes it possible to marshal the peer +// history simply by passing it to the JSON marshaler. +type peerContainer struct { + // Bundles is the outer map using the peer's IP address as key. + Bundles map[string]*peerBundle `json:"bundles,omitempty"` + + activeCount int // Number of the still connected peers + + // inactivePeers contains the peers with closed connection in chronological order. + inactivePeers *list.List + + // attemptOrder is the super array containing the IP addresses, from which + // the peers attempted to connect then failed before/during the handshake. + // Its values are appended in chronological order, which means that the + // oldest attempt is at the beginning of the array. When the first element + // is removed, the first element of the related bundle's attempt array is + // removed too, ensuring that always the latest attempts are stored. + attemptOrder []string + + // geodb is the geoip database used to retrieve the peers' geographical location. + geodb *geoDB +} + +// newPeerContainer returns a new instance of the peer container. +func newPeerContainer(geodb *geoDB) *peerContainer { + return &peerContainer{ + Bundles: make(map[string]*peerBundle), + inactivePeers: list.New(), + attemptOrder: make([]string, 0, attemptLimit), + geodb: geodb, + } +} + +// bundle inserts a new peer bundle into the map, if the peer belonging +// to the given IP wasn't metered so far. In this case retrieves the location of +// the IP address from the database and creates a corresponding peer event. +// Returns the bundle belonging to the given IP and the events occurring during +// the initialization. +func (pc *peerContainer) bundle(ip string) (*peerBundle, []*peerEvent) { + var events []*peerEvent + if _, ok := pc.Bundles[ip]; !ok { + location := pc.geodb.location(ip) + events = append(events, &peerEvent{ + IP: ip, + Location: location, + }) + pc.Bundles[ip] = &peerBundle{ + Location: location, + KnownPeers: make(map[string]*knownPeer), + } + } + return pc.Bundles[ip], events +} + +// extendKnown handles the events of the successfully connected peers. +// Returns the events occurring during the extension. +func (pc *peerContainer) extendKnown(event *peerEvent) []*peerEvent { + bundle, events := pc.bundle(event.IP) + peer, peerEvents := bundle.knownPeer(event.IP, event.ID) + events = append(events, peerEvents...) + // Append the connect and the disconnect events to + // the corresponding arrays keeping the limit. + switch { + case event.Connected != nil: + peer.Connected = append(peer.Connected, event.Connected) + if first := len(peer.Connected) - sampleLimit; first > 0 { + peer.Connected = peer.Connected[first:] + } + peer.Active = true + events = append(events, &peerEvent{ + Activity: Active, + IP: peer.ip, + ID: peer.id, + }) + pc.activeCount++ + if peer.listElement != nil { + _ = pc.inactivePeers.Remove(peer.listElement) + peer.listElement = nil + } + case event.Disconnected != nil: + peer.Disconnected = append(peer.Disconnected, event.Disconnected) + if first := len(peer.Disconnected) - sampleLimit; first > 0 { + peer.Disconnected = peer.Disconnected[first:] + } + peer.Active = false + events = append(events, &peerEvent{ + Activity: Inactive, + IP: peer.ip, + ID: peer.id, + }) + pc.activeCount-- + if peer.listElement != nil { + // If the peer is already in the list, remove and reinsert it. + _ = pc.inactivePeers.Remove(peer.listElement) + } + // Insert the peer into the list. + peer.listElement = pc.inactivePeers.PushBack(peer) + } + for pc.inactivePeers.Len() > 0 && pc.activeCount+pc.inactivePeers.Len() > knownPeerLimit { + // While the count of the known peers is greater than the limit, + // remove the first element from the inactive peer list and from the map. + if removedPeer, ok := pc.inactivePeers.Remove(pc.inactivePeers.Front()).(*knownPeer); ok { + events = append(events, pc.removeKnown(removedPeer.ip, removedPeer.id)...) + } else { + log.Warn("Failed to parse the removed peer") + } + } + if pc.activeCount > knownPeerLimit { + log.Warn("Number of active peers is greater than the limit") + } + return events +} + +// handleAttempt handles the events of the peers failing before/during the handshake. +// Returns the events occurring during the extension. +func (pc *peerContainer) handleAttempt(event *peerEvent) []*peerEvent { + bundle, events := pc.bundle(event.IP) + bundle.Attempts = append(bundle.Attempts, &peerAttempt{ + Connected: *event.Connected, + Disconnected: *event.Disconnected, + }) + pc.attemptOrder = append(pc.attemptOrder, event.IP) + for len(pc.attemptOrder) > attemptLimit { + // While the length of the connection attempt order array is greater + // than the limit, remove the first element from the involved peer's + // array and also from the super array. + events = append(events, pc.removeAttempt(pc.attemptOrder[0])...) + pc.attemptOrder = pc.attemptOrder[1:] + } + return events +} + +// peerBundle contains the peers belonging to a given IP address. +type peerBundle struct { + // Location contains the geographical location based on the bundle's IP address. + Location *geoLocation `json:"location,omitempty"` + + // KnownPeers is the inner map of the metered peer + // maintainer data structure using the node ID as key. + KnownPeers map[string]*knownPeer `json:"knownPeers,omitempty"` + + // Attempts contains the failed connection attempts of the + // peers belonging to a given IP address in chronological order. + Attempts []*peerAttempt `json:"attempts,omitempty"` +} + +// removeKnown removes the known peer belonging to the +// given IP address and node ID from the peer tree. +func (pc *peerContainer) removeKnown(ip, id string) (events []*peerEvent) { + // TODO (kurkomisi): Remove peers that don't have traffic samples anymore. + if bundle, ok := pc.Bundles[ip]; ok { + if _, ok := bundle.KnownPeers[id]; ok { + events = append(events, &peerEvent{ + Remove: RemoveKnown, + IP: ip, + ID: id, + }) + delete(bundle.KnownPeers, id) + } else { + log.Warn("No peer to remove", "ip", ip, "id", id) + } + if len(bundle.KnownPeers) < 1 && len(bundle.Attempts) < 1 { + events = append(events, &peerEvent{ + Remove: RemoveBundle, + IP: ip, + }) + delete(pc.Bundles, ip) + } + } else { + log.Warn("No bundle to remove", "ip", ip) + } + return events +} + +// removeAttempt removes the peer attempt belonging to the +// given IP address and node ID from the peer tree. +func (pc *peerContainer) removeAttempt(ip string) (events []*peerEvent) { + if bundle, ok := pc.Bundles[ip]; ok { + if len(bundle.Attempts) > 0 { + events = append(events, &peerEvent{ + Remove: RemoveAttempt, + IP: ip, + }) + bundle.Attempts = bundle.Attempts[1:] + } + if len(bundle.Attempts) < 1 && len(bundle.KnownPeers) < 1 { + events = append(events, &peerEvent{ + Remove: RemoveBundle, + IP: ip, + }) + delete(pc.Bundles, ip) + } + } + return events +} + +// knownPeer inserts a new peer into the map, if the peer belonging +// to the given IP address and node ID wasn't metered so far. Returns the peer +// belonging to the given IP and ID as well as the events occurring during the +// initialization. +func (bundle *peerBundle) knownPeer(ip, id string) (*knownPeer, []*peerEvent) { + var events []*peerEvent + if _, ok := bundle.KnownPeers[id]; !ok { + now := time.Now() + ingress := emptyChartEntries(now, sampleLimit) + egress := emptyChartEntries(now, sampleLimit) + events = append(events, &peerEvent{ + IP: ip, + ID: id, + Ingress: append([]*ChartEntry{}, ingress...), + Egress: append([]*ChartEntry{}, egress...), + }) + bundle.KnownPeers[id] = &knownPeer{ + ip: ip, + id: id, + Ingress: ingress, + Egress: egress, + } + } + return bundle.KnownPeers[id], events +} + +// knownPeer contains the metered data of a particular peer. +type knownPeer struct { + // Connected contains the timestamps of the peer's connection events. + Connected []*time.Time `json:"connected,omitempty"` + + // Disconnected contains the timestamps of the peer's disconnection events. + Disconnected []*time.Time `json:"disconnected,omitempty"` + + // Ingress and Egress contain the peer's traffic samples, which are collected + // periodically from the metrics registry. + // + // A peer can connect multiple times, and we want to visualize the time + // passed between two connections, so after the first connection a 0 value + // is appended to the traffic arrays even if the peer is inactive until the + // peer is removed. + Ingress ChartEntries `json:"ingress,omitempty"` + Egress ChartEntries `json:"egress,omitempty"` + + Active bool `json:"active"` // Denotes if the peer is still connected. + + listElement *list.Element // Pointer to the peer element in the list. + ip, id string // The IP and the ID by which the peer can be accessed in the tree. + prevIngress float64 + prevEgress float64 +} + +// peerAttempt contains a failed peer connection attempt's attributes. +type peerAttempt struct { + // Connected contains the timestamp of the connection attempt's moment. + Connected time.Time `json:"connected"` + + // Disconnected contains the timestamp of the + // moment when the connection attempt failed. + Disconnected time.Time `json:"disconnected"` +} + +type RemovedPeerType string +type ActivityType string + +const ( + RemoveKnown RemovedPeerType = "known" + RemoveAttempt RemovedPeerType = "attempt" + RemoveBundle RemovedPeerType = "bundle" + + Active ActivityType = "active" + Inactive ActivityType = "inactive" +) + +// peerEvent contains the attributes of a peer event. +type peerEvent struct { + IP string `json:"ip,omitempty"` // IP address of the peer. + ID string `json:"id,omitempty"` // Node ID of the peer. + Remove RemovedPeerType `json:"remove,omitempty"` // Type of the peer that is to be removed. + Location *geoLocation `json:"location,omitempty"` // Geographical location of the peer. + Connected *time.Time `json:"connected,omitempty"` // Timestamp of the connection moment. + Disconnected *time.Time `json:"disconnected,omitempty"` // Timestamp of the disonnection moment. + Ingress ChartEntries `json:"ingress,omitempty"` // Ingress samples. + Egress ChartEntries `json:"egress,omitempty"` // Egress samples. + Activity ActivityType `json:"activity,omitempty"` // Connection status change. +} + +// trafficMap is a container for the periodically collected peer traffic. +type trafficMap map[string]map[string]float64 + +// insert inserts a new value to the traffic map. Overwrites +// the value at the given ip and id if that already exists. +func (m *trafficMap) insert(ip, id string, val float64) { + if _, ok := (*m)[ip]; !ok { + (*m)[ip] = make(map[string]float64) + } + (*m)[ip][id] = val +} + +// collectPeerData gathers data about the peers and sends it to the clients. +func (db *Dashboard) collectPeerData() { + defer db.wg.Done() + + // Open the geodb database for IP to geographical information conversions. + var err error + db.geodb, err = openGeoDB() + if err != nil { + log.Warn("Failed to open geodb", "err", err) + return + } + defer db.geodb.close() + + peerCh := make(chan p2p.MeteredPeerEvent, eventBufferLimit) // Peer event channel. + subPeer := p2p.SubscribeMeteredPeerEvent(peerCh) // Subscribe to peer events. + defer subPeer.Unsubscribe() // Unsubscribe at the end. + + ticker := time.NewTicker(db.config.Refresh) + defer ticker.Stop() + + type registryFunc func(name string, i interface{}) + type collectorFunc func(traffic *trafficMap) registryFunc + + // trafficCollector generates a function that can be passed to + // the prefixed peer registry in order to collect the metered + // traffic data from each peer meter. + trafficCollector := func(prefix string) collectorFunc { + // This part makes is possible to collect the + // traffic data into a map from outside. + return func(traffic *trafficMap) registryFunc { + // The function which can be passed to the registry. + return func(name string, i interface{}) { + if m, ok := i.(metrics.Meter); ok { + // The name of the meter has the format: / + if k := strings.Split(strings.TrimPrefix(name, prefix), "/"); len(k) == 2 { + traffic.insert(k[0], k[1], float64(m.Count())) + } else { + log.Warn("Invalid meter name", "name", name, "prefix", prefix) + } + } else { + log.Warn("Invalid meter type", "name", name) + } + } + } + } + collectIngress := trafficCollector(p2p.MetricsInboundTraffic + "/") + collectEgress := trafficCollector(p2p.MetricsOutboundTraffic + "/") + + peers := newPeerContainer(db.geodb) + db.peerLock.Lock() + db.history.Network = &NetworkMessage{ + Peers: peers, + } + db.peerLock.Unlock() + + // newPeerEvents contains peer events, which trigger operations that + // will be executed on the peer tree after a metering period. + newPeerEvents := make([]*peerEvent, 0, eventLimit) + ingress, egress := new(trafficMap), new(trafficMap) + *ingress, *egress = make(trafficMap), make(trafficMap) + + for { + select { + case event := <-peerCh: + now := time.Now() + switch event.Type { + case p2p.PeerConnected: + connected := now.Add(-event.Elapsed) + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: event.IP.String(), + ID: event.ID.String(), + Connected: &connected, + }) + case p2p.PeerDisconnected: + ip, id := event.IP.String(), event.ID.String() + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: ip, + ID: id, + Disconnected: &now, + }) + // The disconnect event comes with the last metered traffic count, + // because after the disconnection the peer's meter is removed + // from the registry. It can happen, that between two metering + // period the same peer disconnects multiple times, and appending + // all the samples to the traffic arrays would shift the metering, + // so only the last metering is stored, overwriting the previous one. + ingress.insert(ip, id, float64(event.Ingress)) + egress.insert(ip, id, float64(event.Egress)) + case p2p.PeerHandshakeFailed: + connected := now.Add(-event.Elapsed) + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: event.IP.String(), + Connected: &connected, + Disconnected: &now, + }) + default: + log.Error("Unknown metered peer event type", "type", event.Type) + } + case <-ticker.C: + // Collect the traffic samples from the registry. + p2p.PeerIngressRegistry.Each(collectIngress(ingress)) + p2p.PeerEgressRegistry.Each(collectEgress(egress)) + + // Protect 'peers', because it is part of the history. + db.peerLock.Lock() + + var diff []*peerEvent + for i := 0; i < len(newPeerEvents); i++ { + if newPeerEvents[i].IP == "" { + log.Warn("Peer event without IP", "event", *newPeerEvents[i]) + continue + } + diff = append(diff, newPeerEvents[i]) + // There are two main branches of peer events coming from the event + // feed, one belongs to the known peers, one to the unknown peers. + // If the event has node ID, it belongs to a known peer, otherwise + // to an unknown one, which is considered as connection attempt. + // + // The extension can produce additional peer events, such + // as remove, location and initial samples events. + if newPeerEvents[i].ID == "" { + diff = append(diff, peers.handleAttempt(newPeerEvents[i])...) + continue + } + diff = append(diff, peers.extendKnown(newPeerEvents[i])...) + } + // Update the peer tree using the traffic maps. + for ip, bundle := range peers.Bundles { + for id, peer := range bundle.KnownPeers { + // Value is 0 if the traffic map doesn't have the + // entry corresponding to the given IP and ID. + curIngress, curEgress := (*ingress)[ip][id], (*egress)[ip][id] + deltaIngress, deltaEgress := curIngress, curEgress + if deltaIngress >= peer.prevIngress { + deltaIngress -= peer.prevIngress + } + if deltaEgress >= peer.prevEgress { + deltaEgress -= peer.prevEgress + } + peer.prevIngress, peer.prevEgress = curIngress, curEgress + i := &ChartEntry{ + Value: deltaIngress, + } + e := &ChartEntry{ + Value: deltaEgress, + } + peer.Ingress = append(peer.Ingress, i) + peer.Egress = append(peer.Egress, e) + if first := len(peer.Ingress) - sampleLimit; first > 0 { + peer.Ingress = peer.Ingress[first:] + } + if first := len(peer.Egress) - sampleLimit; first > 0 { + peer.Egress = peer.Egress[first:] + } + // Creating the traffic sample events. + diff = append(diff, &peerEvent{ + IP: ip, + ID: id, + Ingress: ChartEntries{i}, + Egress: ChartEntries{e}, + }) + } + } + db.peerLock.Unlock() + + if len(diff) > 0 { + db.sendToAll(&Message{Network: &NetworkMessage{ + Diff: diff, + }}) + } + // Clear the traffic maps, and the event array, + // prepare them for the next metering. + *ingress, *egress = make(trafficMap), make(trafficMap) + newPeerEvents = newPeerEvents[:0] + case err := <-subPeer.Err(): + log.Warn("Peer subscription error", "err", err) + return + case errc := <-db.quit: + errc <- nil + return + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/dashboard/system.go b/vendor/github.com/ethereum/go-ethereum/dashboard/system.go new file mode 100644 index 00000000..a880c5a7 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/dashboard/system.go @@ -0,0 +1,146 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "runtime" + "time" + + "github.com/elastic/gosigar" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" +) + +// meterCollector returns a function, which retrieves the count of a specific meter. +func meterCollector(name string) func() int64 { + if meter := metrics.Get(name); meter != nil { + m := meter.(metrics.Meter) + return func() int64 { + return m.Count() + } + } + return func() int64 { + return 0 + } +} + +// collectSystemData gathers data about the system and sends it to the clients. +func (db *Dashboard) collectSystemData() { + defer db.wg.Done() + + systemCPUUsage := gosigar.Cpu{} + systemCPUUsage.Get() + var ( + mem runtime.MemStats + + collectNetworkIngress = meterCollector(p2p.MetricsInboundTraffic) + collectNetworkEgress = meterCollector(p2p.MetricsOutboundTraffic) + collectDiskRead = meterCollector("eth/db/chaindata/disk/read") + collectDiskWrite = meterCollector("eth/db/chaindata/disk/write") + + prevNetworkIngress = collectNetworkIngress() + prevNetworkEgress = collectNetworkEgress() + prevProcessCPUTime = getProcessCPUTime() + prevSystemCPUUsage = systemCPUUsage + prevDiskRead = collectDiskRead() + prevDiskWrite = collectDiskWrite() + + frequency = float64(db.config.Refresh / time.Second) + numCPU = float64(runtime.NumCPU()) + ) + + for { + select { + case errc := <-db.quit: + errc <- nil + return + case <-time.After(db.config.Refresh): + systemCPUUsage.Get() + var ( + curNetworkIngress = collectNetworkIngress() + curNetworkEgress = collectNetworkEgress() + curProcessCPUTime = getProcessCPUTime() + curSystemCPUUsage = systemCPUUsage + curDiskRead = collectDiskRead() + curDiskWrite = collectDiskWrite() + + deltaNetworkIngress = float64(curNetworkIngress - prevNetworkIngress) + deltaNetworkEgress = float64(curNetworkEgress - prevNetworkEgress) + deltaProcessCPUTime = curProcessCPUTime - prevProcessCPUTime + deltaSystemCPUUsage = curSystemCPUUsage.Delta(prevSystemCPUUsage) + deltaDiskRead = curDiskRead - prevDiskRead + deltaDiskWrite = curDiskWrite - prevDiskWrite + ) + prevNetworkIngress = curNetworkIngress + prevNetworkEgress = curNetworkEgress + prevProcessCPUTime = curProcessCPUTime + prevSystemCPUUsage = curSystemCPUUsage + prevDiskRead = curDiskRead + prevDiskWrite = curDiskWrite + + runtime.ReadMemStats(&mem) + activeMemory := &ChartEntry{ + Value: float64(mem.Alloc) / frequency, + } + virtualMemory := &ChartEntry{ + Value: float64(mem.Sys) / frequency, + } + networkIngress := &ChartEntry{ + Value: deltaNetworkIngress / frequency, + } + networkEgress := &ChartEntry{ + Value: deltaNetworkEgress / frequency, + } + processCPU := &ChartEntry{ + Value: deltaProcessCPUTime / frequency / numCPU * 100, + } + systemCPU := &ChartEntry{ + Value: float64(deltaSystemCPUUsage.Sys+deltaSystemCPUUsage.User) / frequency / numCPU, + } + diskRead := &ChartEntry{ + Value: float64(deltaDiskRead) / frequency, + } + diskWrite := &ChartEntry{ + Value: float64(deltaDiskWrite) / frequency, + } + db.sysLock.Lock() + sys := db.history.System + sys.ActiveMemory = append(sys.ActiveMemory[1:], activeMemory) + sys.VirtualMemory = append(sys.VirtualMemory[1:], virtualMemory) + sys.NetworkIngress = append(sys.NetworkIngress[1:], networkIngress) + sys.NetworkEgress = append(sys.NetworkEgress[1:], networkEgress) + sys.ProcessCPU = append(sys.ProcessCPU[1:], processCPU) + sys.SystemCPU = append(sys.SystemCPU[1:], systemCPU) + sys.DiskRead = append(sys.DiskRead[1:], diskRead) + sys.DiskWrite = append(sys.DiskWrite[1:], diskWrite) + db.sysLock.Unlock() + + db.sendToAll(&Message{ + System: &SystemMessage{ + ActiveMemory: ChartEntries{activeMemory}, + VirtualMemory: ChartEntries{virtualMemory}, + NetworkIngress: ChartEntries{networkIngress}, + NetworkEgress: ChartEntries{networkEgress}, + ProcessCPU: ChartEntries{processCPU}, + SystemCPU: ChartEntries{systemCPU}, + DiskRead: ChartEntries{diskRead}, + DiskWrite: ChartEntries{diskWrite}, + }, + }) + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/docs/audits/2017-04-25_Geth-audit_Truesec.pdf b/vendor/github.com/ethereum/go-ethereum/docs/audits/2017-04-25_Geth-audit_Truesec.pdf new file mode 100644 index 0000000000000000000000000000000000000000..702dc99567f3240a94fcfef5d2d8be44b0d167c5 GIT binary patch literal 124427 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

%C|-5`w-Zm|nrEd?zM z7VZXnJ;d1*xyz;Rl;=|L2I!B9##RFtPP-HepF8qj5#e=+0f%Q(=(33BvGLPsdnrB1 zAPs4h4TvfGpgc7oCasK-F}^>S;gC#GUA_7Gj{daZT;bFnu-Yv12TO5DwyJn4fy!LS zz^e;KmdGFlBuI9BYEeYqcEjv|!ElKN-pAoOwlx$^80Pb`Ro$lUknX%m^N7|7r!yie z0>}#ts0&PuO))@Q#jhqqHfv%qW>V89;VXdY7f|1o<9R%7#_NPHRl3 zO!Tlc1eGlXqd*U~hLbOpDfS%Or*=8*Y+Us_(6t&BCbV{VWRg=b+SWbBhmYxGIzo|P}LLbaJnk*|mJ&k1Zo8|jY`WbU$1|7J|v^pvgV zQONv4vrvG|M)j10nY|x@LMa2s1m2P5)4t=P$I zsy{@0i-F7Y2->F8G*JAllVnvRVv_0(lRpb8qRi>}0-tAqp8mh*3?t+J&z$-H`{99= zoq_HDl1^FI+3N|J;;m)3TnAl3!M|asW{{=RQF*eRKm2*XL_}aHAlv>}!`xv4wJr27 zB-d(dl;sn2l@qR=lck-;nEO@U4-vIu_7?`)iFOZr?U2#B^UGc-1QgLe{OkZ=!}?%f`MzS|S_vJ) zo@}qHot?XVw|p?0-70VUJ`Q_+e|FwglD7x!7nyHyzkD>^0TX~J1^AF}1jjF3R|%7r z-v4x+8A*btJK1*HfGU`UqmwtkMakFYP`6v(P7mj7*oM|WljAQU&Q!xY1F}a$vWm%o z4}xGmD!z->)>d21AyXGKQw=ohX(LMel$7Q6DZV{94qnX404m2D-pax97HegnoDX{v zn3&|Q=&7O4yPEH9S8b<1Dz`UB#NzxMr!<%_`=vN?EFV>OPBmiPPikI>KzH?@2@l`l zaj%=qAzDnJI-z}fNI1~-uPy?J2!^+hIgpO6O#gChRLSgAXYl_;eBk%{j>i2J+%+7c zo#2P^j3o5ylY7v;kht!<{z*!a$g zEw=rco!Sc6mzDbEBcSZWY@cg+daX}R6HxXgHy!O|Y^2CGN#*#nLn)hn6IuOu6W-?| zF?!!=1Je0$3rOHxzEoIP4e}@=^KHqkr>Tb`2@ghkaemf_`*nw3 z`~9v>`S!aypn$6Z-wY)RI36@GH%JV_r=10%v#tkeJEw*4ab-F4sx;Vz75ffm*vGM3 zdhMc|Eg@blI*=gRH8bPh#Ph@8mKp<1$$9)fwVD--f-lywRk<0W5RmPtR89% z1C|7c{zzg|ouBVW?3<v+B6-oiE2LEnAZxi7JZ{?5&n)QT5DDo!&j!3}9s!9j> z@S~s*?3{xr1ZIV58PR8%6!q=ZX^rH+$wjNFsOPg{1D>YLRzoZp7SIT3U&C&jlBg6x zQG5(M+N_**A1Cn=NGocDKJ~)&1L>esL#|F>uGe!0qd}B~nSV!FKf5$Au9;t1Au;Xl z|C)-bT+mEx_NOk(UJEKT<8g};q~rbb7Q%rLqz)G*yHSjUnNWdY5`%0f3*$tct}iPX z(J8Gxij8jU(L)cLSfK>|L~q{H_lgOW8qBZnbyj@c!1X#=q> zVPF}Zxo=&CR51kKEKyet846u{mt$8^X^W55O}RR1qT)yfTHCB1gy*oSbv z4^#U1o`2qTRfOb!6v(GAXxXA2-+;0{qB%+96UNC|A)L7;JME&XPU385uxt4vK{OQhD3f*FIv(OU=uKc+l73{Eb*ij}&Y?U=1{BSQ!oW^EvS_V1I_^KK=FY7f-R+rx zqUo(@K2xmHHXnuo(RL^0Rw@V9T(VxQG~hgpw->Vg*B%*-B>a`GPCn3eK54@ZfSb}-fw1ty@_pmAV}9HLY;&ySPk}aj$+y%?)AX4(EUJ@A;eWa zX`@h&JUDjoqnTTl!iS?jE)YiMf@qRGsQy{3;>^m&x}!jTVjA2QPp#WKcR#djRY8H# zKa-c4?{3MXga$LD-*LT+LEhg+$o1tOM~NNYl9d(11fcf|)QJiVRy zN@%b-O!kQ9R)rdmtl1!BP!n|!e)NLmX=*DYx7ksAJ!^zAAxFZY!J8}y$7u7{FrbrbI{N zgglscyXhluNisw0bx0D^IREHs3wx$*xg>2hDW!lVc)%&&!Rs@o5Of0Qm1ln|Wvl#Ib}5-tJpmJWFhsW#oL{9>osyOeEBcwvD*h0&UFnPCcxE7P`SJo( zxeK#!^K#D|GlP7S24P$}h|Ic;EyMH5TozufEKKE6v`a9v;`VOo8Zj2-L0)xg5NGLt z1A5H`2T0_bf&b+aZ-^K5pO*#*SVK@nATaPEqi3YFkZ6660qm=10D~K@U6+949N%Ai?i&rpE`D*3B zi`r^^W`_W!&8ZDx3luq(%_q}jdVFCl#8f(ZVLI$_G_=>@==eo&nqjy`Z7r*!Ts4

#rW7ck*D(TCon3>{%aas-^4(q!A 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 z

    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 literal 0 HcmV?d00001 diff --git a/vendor/github.com/ethereum/go-ethereum/docs/audits/2018-09-14_Clef-audit_NCC.pdf b/vendor/github.com/ethereum/go-ethereum/docs/audits/2018-09-14_Clef-audit_NCC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1a5c66f178af6dc73289a4575a0d982d411e664e GIT binary patch literal 755237 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 vxVb!Sgi7UMD_dDRb2Zsn#GLcQ2|IdZl6< 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%0A#+gYi9g9nm)QjA;=rVZweu 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 i-ff#rMWOrm~Ssg`tq$+ zyL>lOagLj1KcTW*yc%6xSD$_#WP%LOS;;B=m3gH=z< zS=k57)qY+T(~3)uyVuWv$#D~QgF1Y`rHki2#VyPOx$PKQ$A@U@pvC}36)Jv0on9~c znPh%CGa=Tn!0mzg8|)UTwf__AX732SnR1{eVqG|`ZB$kk1rV)exS_(?CMY>c&OW|3 z(rS3QWZWRgzVu;0y6_kLYyE{f-J9J*0z4Yjjo&^s2}jnS5C=5EhI%%=($R`TM@juN zAg<0Evc@8HI$!9{JP^PzGO-V+pNj)Tovn0VvAeMYBW_~HEA!jK?bNKYH5<4oPh@ja zbXyls#t#z5lUkJYdX|wY;T*4$JqrXR@_@byBegyNWOujYzBWfdQWq+i>h8=)6!FxlIda10 z*Lq$7MO$=PdV>9gP9f?@FHO9hiGaMwD0{_i=(qwZKa<$-cVBFs~V83V9e zjcbE)!78%d`FDd(Eep}8vTp&NZJLXf=?Q}>YxU9$n&^Ou?iLPJ@ob4OCgcG}cy25H z>wr@3ypOR_uP5#(PDN=J%5u#21Egw7-38=*Mg-(Z5@nNF8=@y(2k>fYUV>`?PFq!Z zz>r!V%gGzru9U1yf zOxSj0bFKnYoG}t~90lkLW{8Rv?<^gji7fJIcrMY02?>S4RSv~ZpccnzQ+U3e&P|NBftfH!nn0i zC)aU0HQoe_#|DhQF)&v^>ANiHnaCv|<6Qhg2Td1DAppmz#@F*e7XePCk`m{FHq_I@ z#7b?MI;0ajN6`V^9ewi*vc%3^GN8+i*N&`}{en63SY?QrbfG=WH!z zIip?(lG83;@YAuQky}FibM((o%0Dpl1)Z=UbgNS6?j}C<0465i?W7LW`gdLl6XpXt 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%0ARv$M-RxF5>ytPGZ66OPJ>CP!}vrUmbEo)vaVJ~ zbPMrrI>tPtgHJ>X!b3lD@zFxP6u}Qas+QdZeh%L6QKYp;9c$1&G z#6I}b7p!8&9Hh4T(ZnelWf*_-4eLUG z31yG}LXR15iEJzTfL`{aFq&oc*2K}fCt$TvzD_t@Nu+AaNdJzF`sYPTyY*+y&=~_FeBeUw{R(I3LhVv=VUTb1BTv| zw;RecZZGK7amZd<1o&+|T@vD}-eI!oHo;KaHQD1mJ{kQ+T~63i(e1D1F46Nn`!pl& zg84eL2dHgV?1R<7iJiE-p#4fJPmxu)rxZ!>;tJVMST}1eS+cX$&dc`1^ocu+Y98H? zx(husG^EE#Pz4*C?;3;wFtw)WTS6|~54kd=PH=r&HEvx+L?U1b(a&Fz64 z@1V`x1I_2hT-myzW;3nSpx2b3TN1kO)!OuJ$~$cJu%0^2)(7Bzv#EBP?E$@0PU=j! z>0)*v*{8>CnA+4=g~;r#x}X|xI?w}nBPBE+At|fFX!oh64gUP^j?6wpc!t@|C%3K& zE%phs%R%OrN9dJ|hru?f56G z>f>cm9}Yl#&TyORVc+tGyUor`Vb-;dF13j%OVvN&Oqkbw^E6V-(T&~k`yCqbKo}iZ z)oG+UbtH^WenPCc)V-?ZgIFdcgp1q!gzh_$I#oJ81kE^Mzd*$;=#FyW)tkLRzyw@Y zbvt24Ef=J#JF8xbbC0&{Sp>U51GB&hokQ1|A_4z7>`(ZQHAblGgf#0DI^HBu-cI=r z=w3Xj_#7(Zl&>W_L4VsDB~fHNUPN7#+3PS(z(o4(0cUEvj`=W6=DOqjSR)A@(z-!! z01{#wD?OV){JH-63E4Dgd!z8no-x%6qkXgP{0jN<0i02IK+wFl;H#AZy+fpfdU0RUj^TJZ!h{*> z9w-j6d!0wJ?~uUj{Rb8aP+5fxvX-~ptxXa%=Okoy`+~+wq5dAnk|Cd5f)l_Kg}RUv zWr)l@B5aU;3yTL+hLCj#n-K0N)Gd@c!3qwsIl7aO z!8|bZ1zl8!I`d&pwb2(y=thVaWGPW$7G^bfqyVQ>I4t%=Its31Z044saS1iYXh+zB zMnPfctIGD^+pzdg|Jui6LO!NR7U?{ zx6_!w5QKDZ(Y?Vh_a#H^d=s3Td)%dP@GPT?1>B9pspVoV^Cd@2x8?EeU8AO*&+5=q!ZR(XregXM0VWQ@Qmc zY->ST^apkJ6iw4Fa$V&ca=uYf-ep_O^}0y#pi_$Q33F@+>f+{t`*3Sq5bk~Vemu~* ztirnq3c9!Sn9#OzAVWONOFC%%U~BScdZ^d@vnfd!`aqv+m7Q8s@opd|!P}m{g&1$B zvHfs+b0pZk0&<_wE(Ep1t#sXZ<`T{-3zfED=5@f%hoC!|kUqMe&^aqq>aD7CvL@ov zpWO->-983-$##SdcU&Sqw-EU$9i$6!92(?l=!*7uwFxmqD)xl>N6t#NCUklejEEqd zN5&#@I~g>v>UWKoZz&#vCqy?&%ilz)&gs2{q+LYBNiKPM=X+-UlcQUH4ho-<}n16YN5;r!Bo81}MU?eAPW8 zus>%rXVuj{af9ShSU*wvXy;_8Fya<$1DG9L(7lZ#x;s9+g z1ChN6-XfwZFG%-tkuJGp3AV!j(#MJOykIr`GrkS0k4AW%0NXq75Y<>gr0FW0V3>sh z-SM%?eFu&9nA6q}?5R$k+6nW35tQc5(}W}0>xKN5&Xiw1pm89mStnPq>ScMKKu?kk zO}}ATQ^$n_Y@o~+j8a~-C>6WV942mKfmrddYa1`<1|#4+2?jlV7{z`yj~C3>?)rs& zIZcSG$uQOt=}-8_pav@fylz%y=-gtslFtYFt*a<=&A6(LZL^)+VKQp05cau_U(M5x zvqj>K960UsHR3QkM)PBgpUS>qeu}b|*x-s}=Q$+A#=l{6$whdR%WQI|V`toi-P!sD zKb3CPua=TU2@+z%-D+0453}&wK24Px>IBa1W>^`j3?Ewh3AI7g@3`a84PubMWGd_% z_UpDoPan31+`p2adyw1IvJn1Va;H|58c6sGZK_+bOkMHPS?;=+|L?!fe8HWp8OcKj)?gh4;rP;2<4C0#UTRYW-8IO+qy}P;IKcIHIyW z$>q8h_6e)@1g80AFFcEAP4XR9n8N|Wr~)-%mBKblLTuX`I^7{c)>t#_SrCGq7?@vQ zFv4;GOlpl4blW8f8lX2y`5I`gD&9a2Gv}N}*c0jxcO8A$ZPUnRsEhCoqnYa?P$&Au zkLTz%2`R=mG=>CqYKVmaV@Q6_&MUsYV1CT~oaVFcHDn!6b!kRlu!TOo6Lup#vRnTz z=u9cnR~`A*n+fDl_6tTeZv=umfjj8l8Dv7{)^FIp>!H+^qy8}L*@&+64f|vI>rf{G z(j^WPrj}gsxWo3{xpGNyZJ+gRUNAcj35rg@graCI`p`*AX2WFFcrZT(W$Es+jNjYO zkbb~+1)r{JR^1^Zdz>LlX2E=oHyG+zMd&pcu1H#}PZZucs3X+~81dRz&=*V`hzRU> zankeC-m??g8@5V~6DX`c0t+hA`JTFy{e(70!@sNBCG0?g$CqVSTwuR;IsqKh#e&Lw zk5Q2Qg!(72_xP3cj^A0%_y)Gh<_$aOF0z^#zEb)Hqgzh(A|316I>Kn>=O(KMG&H6% z6V`AErUlt0`0h$uh2`?O2=`M8DtfULJrIZ)Zr5PL*|ZXXH!B<|-6+9{zj!&7nS zc=IM;6rPZLLUsIxN@E&!<7>ppXgl0p>t zXfmwVzx+lj($L7Lz|@SdGKxcuf(v<*aA zj-XauR)MO29@C(#fE8wIXD!7Ltrvc^Frd4TOhP6pZ)iNpc=*=k2eUjP-Y&l*&Jq3& zwJCRY*WIPtT*>DX5j%vmvzhUY1YFoKYq>9|J0-+ToC3E+l90e8C5{(!gW0@DsC_09 z{5JnV_s~S7A29Xdl@S%5EjDmFda8GRdyqbllEx*2OgsECjz5YYkQlnu-L{>rm_X4* z_yI8}P~9>-s_?TWFf$4}r_659XY_zxj9GS91x>(y$$rBA*jzpaoySQdE|a&w{MdrD zd4$caT(El~s=pp5xV4rTMYyfIgY4bfOwlGDP@I$Ph%ykjEQzw}0R&cM1@kdj$}FpdWt~<#E>~J6Xx?KX7}! z4)hHf$b}O~KyzB32~&(f#cc?m5L;jAZdMI_3gUnmNvY$6P|VB?Oo#&&82W-OmpP}2 zvU+i_Yd5T<6Gqm&Q6-r?%RQapfKK1?)63GivBZRG?yi#?!czgwQ>2&d r2y&<+1 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∓6IPzlZpho!}#%yVv-E zN~35c(%^=f&rHZvmv0Y9dxpx=T`Ck$yEwT#k>di)Zu+il*KAF&k>lVm6t#@NOPdj$ z=|s!doojNR5Mv3u5#Y+UCAn*-L6nX9Eha)DophM39JT~u&LaB>vtJo18?Q!h3yFl8 z=x`?M4&8AD)dlpCjxS>Zv*SqLFd5amfa+aoWjE|+0!qq$LVFxk+{$6MPsrX$_iV*- z3g_4QTTpfRMj1+og!T!F@d=HVK;=05$|}Bq30Q8$c`?fkx}XdE5BI*(-P>jYQT(uP zn5^PwOQg6KcY2UkvfNKt!$YZ++l>si2-dabzFX`rFv;N_PRn1d2C?=ztkoSQAV}8CozK;STc?d8$&{Hi_97+uu_31)~@z)xti( z2yRxlEz4d_4(PF{{PHLs&^g-ti%ML(&tM`O6=wcOU?esncH)5C6_0-mHQUFcm2U={ zfJ3OxCycNuIbsYpNc@Cw9*7ex5VtdIu1N4WwA=@D7Z_Am$XY8oVnM>pDuIgIP(x`q zT%(EmoJr^z3jBp9bYCV^Z)C6ZPqwj;K;KsvkmQA!27=aBcSf>yL&{a=13AjE4er0? zI6L<=VVu(g+VlZ>4z0tJWGE+e+?MOs|8|fNmJD}e6ZBH^iSYKjoVZOr% zn4b!|p}Ngw*ohgLKwcDX^r?`X&d}w) zwv|(70MJ*k@_=(9$?b5J{-s&&Okn@(?80qM zk+xApIf;fgHx$C`x(^9G+4h3o-T;+n(o&ynZ?g!=Z+0`hp{9peI{H>~$9@y?+Y3ak z|CqITY5j!z5M`N=KrNWb6IvHk!VKTgwe_%bFfZ&I=Id|A9i=ZtD%{1QaObBsvP|#* z<_HD#qNhOu1uORhvRBa-&yYWzlX`7JL&3?7=Vo&4vkMW_>pU|AT%)N9s zf@bH&!;$@h(aqw8YBQ~LPyd^c$&yy)3H3?3xo+4!Nd$YI-i5GXe#|Rgp??(h@&rIEHecDHaJj9sFDztv9s&qWhoD4J?x8-68RXYyu?GZ>vhC z3dkhq<)*6yHlrO`t~FCj2)YL~!~TSZ#-MtEK&2Z&B7yt2BJP5GO@^@xP@Oj~_WZi0 zUg_?)kiMYB2%Iwp&}nK6lg87-euqe>-AUc6;2srmR88lAz9G5^!@la2PN>zv6wywl zpU~k5>cl|k|JE7_L>4moZ_ub0f>~ z&rv%PXl+VAVOz^wp(Q;P#=Ufvwh-Ss)k!gUD$j;1a|)_~iZ^Ua<57UgsP~1XTxKft zgdS?JT*j*V7FB*d7k%<$7mR9d^@n{=_T0b#_8dk^@d@2g4|TjK3pro&gn5N+n2+6A zAvZIa$*8tP;WkAwdWV!tE0_&9$tVeo9kBaSbIR=rb0$#dKf-y8%qb(>X)bq&YP^Eh z8q&j57wG*p_oe;-M;Fhwl|6?g?HR_`tizPDmvaSbT%hjAu(yGbKzSsi5A?g){=>p_ zi^UBqF#nmU+zEBZp^jN}7MWuGjWd=i+Awu6HyzBK#+0%r4fx*EFR~xdVO3&_g-+L; zuxnN3jq<54$!S7qa8+EF)`Y~7oG3n^>$_5Sq+dr0kBFYA>^s7C5YB~Y@K@QGBAYFv zLB`NKL@^!K$Tq}0?9NhQ$3*4p1J=8^mNoy=_2lQ+R}@_~jA}aaQg`o9>(QAD`H8;j zEO4x`g_6}2vYikW-T7=;wNlN(x8;x z6aCchFN}xm7tGg2W2Dl8%I=dJHiv0i4@j4>&}oU&J*NltY~k)u7i^=RdCTsQJr{e2 zXlDP6qHeZU6%sm7rLnw`daNzjJcwAeeTLIdFBnNR3&d|L*xfOFZNN?D6Q)1>8+V?U z9Q9hUGN>o_35`l=Y?qnPrDl}KtddtF7m8XjwTw7hlL@qH50rgEyN>~%RU+Q6Z9@Q5iAU(Nxzb(#A0;OlOw4eS}az z8o-8EM(K>>KlN2nzE3Hh$irCLg}z@;seL@o=qL&T{ znRLds&4d+P+;McW`Y}>!j!Qj`+zAaR z#-Sd2>sdGwa!Vv%pHO9Vk=t~&w`7Lt`~-Y2n5=s41nRY&Az?bk8`_|{ozSMs;KaaJ z-96@L0`FnTe!+b0j&rD&y-m53Kns@rgpL(Zr|CLKCNqwe4sr){5SJbMrZQ-ug&+Zw z@Pz0#BP!I17LcHeOv3ENJYgd&OqG^&LwS6a#_QJ$=Ewf%Pm_x8R%M*ohuvOE2|r=( z2ZEg^Xv&^(kc4F$OXQ9rEandan5;CU0 zU@kR-N-wK)FCCP9f<+h1k9}()a15qXV?!PONXYu<8xH$y4b=umJKr%-_Y>-(@!N#( ztBjAL=I5M<=-DlptmcM1etRa1SpR(Pwl#y7PxRZ?B6IsFg9Ol@o;AD}?JYZ{@ zPSfIZiyhqTC|CAI`6Xwb(x&j}08VFVRj`oa~Rz*Bs zP6GaJL@yMz5|wX|q0H`Jv!~H#<;ZfCCaY;mGx z&ER%GcShMrIUHT~3}5yLyC$XXXm&wkc=WdM1Lm*+6OfMMK=Hri9AVQk65LgH=(Zy1{U>1A1WOZh@G(WQjol7lc zzhJ)3CMkZKvaa;sRW_qIZp{NF&K*UQQCg*CPF84cdWi?jT0X@vg-%bl(^87D<9CQ= z>G+|}7(s%b8nu9L8Tu1un-n!To))dxJ`Q`XAiKkSosb_?TA3Ne!l8?wzk%y~lI%p$ z%wvdcEM?N}j3)Cyv6-V4+qgteu~gdpfpZa6adJ zwA>fW$N%j8EwBpLzL^kXt`T`c4X#D9_UgpTH$mHvMVkU$&_PIHZHUk{JtSl$;SQr4 zFQ7;r|BxTokck@~I-&j{)NyTKxA&94!E$xE;HVa=%MWd~(=@x^1&7)N8k!!V8XJAw z4?E)yXxY73aKP>s_+MNj%9<{ z%rTOL?JLXC!PZklTVh8QgG87;#{9BBA%zGLt6pwT zZIh4*C}YJ!Q7rr0pkdP%bABt&pODM>=>-!ct?^!(C>lS07gTFzcv2QU@l|jflzc)*Qyd=*jEdmIHMrIL3+^z~ z)Ci$3{GhVCW8dHylSaQjp!<`cvUZtl(tGp;NnmOw`vJX64XWO0rDwMZ3Gw~u>W-;_ zWRuF+gq-s4}y4!Q}FnYP;l7c1D;kig<^D!Rix|XO=){ z)aH`GihQ}w=eTl1rRicC?`;7x@_E|8=&;rEhO?%~V<02D-*=}M!Veg|JJUjz1x(x; zmpY<1j9$*ypso-VzNFocn0b~~-_Xv-GR6eJ@I@^o*CL#-++lvq>wTd*1FPcMePe>X zO{bX}xj{=oSVtbZlS-Bs5-)qfY?pyL^F&@surIs&z0xlj-Qov8r7%^dkD2dD=ZH02JjJ_ZV*#UQl5tbc_P-lV7Yh|L$KWv59MS71A6#+-=!5yNVx49(m|E8!+ z=+9-?d&5?QM}V3cZv;a+&S1rDnBVrIajE01BThT$UTBTe3sN`PQ$4FdUJR9L_6U;f zCv+Nuun8D@ZB(<02NU)UtDA1H6;Xr0ucL(taeQ9T0TQYQBvw}2Dq=ujcW8q?x@E!+ zoK*uZ&M_wF#k$q~fPd{fti4U&qF!`{+z(NW6vwI;uv75v28bAgvvd#NAl3cZ38CkFqbAT;|eT zhAui+HO~~x;9`sXgw8FYjuVE7(WN)RSil|j$A+CnoJ!B$Fb2*sP%lXRL!F}@h?`NG zijMR<^cfntR}F#f(j;U-@(xiAXv2j%27?5{942&xdO&Sw%6MKE<9nb>aUJ{?KrM{4 z&I4`{K7zRX|E{2nOV8Jm1bHMjAo*gg`4B&-LLu3GR2+=L8-WNTJ<~`weFeaCC9nn1b~HjO-UgHK229q;Cf@N5S%QVLzdByv`yln9d|kh!=i`{V_d0 zsI$JLpGLJYM;L$e1(Q|w0gQXu-0RX5=#~s~ zAqqHIIbeUx*Rh(_9Pndal0AB4#XXgQ&8p@EIPpO0Wt2^mdBNZAqhcyGCl?GYcS>%_lCg29r6%zxgH%9c8p4`3Dg>;7sC(g6)$F}H$hxnpcCXc7{)zeBPL zblVR-b9TGwfQ1|1Lh=(ip+(ZRq_cb8=X+$nV83-1Z?={*>^-7WQAzhg79v+{$i2HXikP_=C zD!rBcPlxV+X1YDZ!@Vs-9}rIkYoxg_V8c|vL?5O%Tg2&rpE#XzpHRn`#xgTyF3)hr zY8TO|zr(4{sP4(w>f)ssu>VQGm^-Bos1kp_Fh+#B*>d?+40as*>x8co#%}D!%+3wl2GH$OyQqz5_!hXmCG}u@UX~s+w8H z<>rLQx?uG(_TzHG(!@KL{hXmiz3rqT6qyb+8{WM_HjZpbkCD#I#I0nd}GrZAZ0{k8p2BM0n1tz1LotYpxHeIofcVk+u;jl&p6qv*9YB$ zjgf9PU+{B!<5Jv}X}MW(mivNHE%SJ&oefKO%&?R!@)yi1AymBL7K={?*oBPO$-ZH~ zwpG&~)Ab>LAXV(V?+0k7P*(dV;jwz8-+E=RA25SH!sv+AB_l5h^b*-Gh-w5A+MNws z$xZ@oSY=T8C+Nga>Fv-&6AZDE;NdC0zF@xg$g|Y0>`8a>Zf5MFZ)hBfa%`X(x_lG_o&wDi);s3 zWgl={ZUUxLopUnU+b(23U~avzWi9DB1&`+OCt)|Z8JK(~KuG(?y&YxR|8jk#$~{m?<39%CV>kdqRfWTE$>f3r5{y#%u-!jzD>_tdhyqeXp}Xg5|kx@0YS+pY@hgr zNv`A^R3cya8nRz7!e)^1keuv|)}Qe=SWLc_Uybw8Ba~Ye!+bG)oryCtbpz- zicJM?{xO%_;Mrg`!ykU5LW3A7%$F zzqa$keL!QELwIE3;WAF(Uo+# zBE0FBrX?ckshqqe0jo zEwf9Iwv!jM>p^7fR<^xP?2-8!2qiIRiVh1>R_?e?Sz^CrK4I&DW8JYp&>K_o{(-Qc zFpYoad5SZTVzryeJB()8(+(ADU1i!xK3qhD`-z;$+N8$arxSH8ctdsI49PqfHjKPg20@;Ad9Go2!|bBfPia*egN-V_`lRp+Ml&B=@~6iO;>R1$YpJ|o zcB4_|?e*lFerDZ&JL$Z`6lt!Eq9S(htQqxA5=;C*?YTr~rf(X4w++Teh5LXcL-lr) zHmqE~M?&joqg19-7nsKoBFpFmn7l@j15RH<%@N&M1cB;G+pu3d8%9`Hgp;qdYA18e z<`ZJ`ux6}AuYB4?NU&$3+5_bbJhX9`-Bp7y6C5({Fq(Onrqpo_QA+pQA)uvlz}yT( z9n;pE(Yydkf-CJvzhHjMBXkJ6sxu4g7;47SvQx@8=oyOAAn^ zCGzVIizK*~tuh-%w{%xmSGMlX3`xjj4E6)I+;+j_-Dy^Se3)3_+PlF17OJ>P)B%|` zXwF#!Sfk1TtumIRnDR8Ej&mgV@RPz%81A`K19ILNhkF|11)ERomBJ@*W5y^}bZLzq z2rg(|v|UYnjmZQr73HTc7{wChWF=%~g$`_GpALG!oN_=IdvGh=ho@9!isc0(%(u46 z9`_G+ic4iK7~Qg7gY-RmdMyogq8}Lc19pSw3OmqoEOeK3G`V-k*K~;xeM?APXvDKE z{tad$vRz5{-DRk>TT7tRLj6DHyfuZZP1vaZ19#&aac~d3g#4;?GJ5oVt?mw*PUoNis@RDYTD&24t zqjxH*mOl+L2`C)Jb#gW4L?GF6IgvZwXiIJsQ8ZN*n0ej-+)5|w_~RCBio`1${qlhEPt>AC0^PX+2{ehY zv)lCsoh?J83sjFBLq*$6QutUe;RahGbNEiRiKapK0gmLtP{{?eBNjN08FKXCks2TI z1-aKmVXntjnM8fu7-e}=l5OOLmdG@%c7LkRwKaBO#li(DZo~ezYq_mWBQ{^GE#lc& zn1bDE$Z?2M4+^ngBy zsIcjx6rA&Cm7BJOH*7u0$}ooy_CDgV!i^A3yOh0-^y%{7{0xv*SU?a09!am$Cj)HRAS$6}M96T&K) zvNrNA8qs7EvU+z9P`EkZeuJuw>7$)ibizCHFr&~9;qNcH1!&7j*l7`Ngl21?(M z62}aWNp$rOE9RJL1wG-1t7g=vK1;?S64u!s;y=XmPx$RfqgS!mJ!oozPAKd^Ra;PN zj_{N>)LgR!sPG(sn3wUCxA%-jE%}%9@MXpz8*c zkXISr&{v(MwjDzM;~-~36bC77P@Y~FrSHq!@XW_3e!v7)@xyC}WaoYXq~&_XLVs#O zpY#%@tw2t=z*zy+c|sS-xULs>jOItv`bdJGdtvX7FvQM3;r704xIKg-H&AH{W`zaV zRvzIg#2m#sAr~KOM_@-&b@6Isj3fz;bA_P~oWnbwrYSow2TS)wc-argwH6BVlC-kV z3?^HzU_aqR$gp{3&nhe5YtLZ^M%=)}Mkw{&7IS@_33Pwh57;o_yw(l*UpiIJFa?>9 zg>q{v%>_3CP3VzxOwe~Aet>RFu*n-*g zPLCVcf~^y6_qme-;Rkewu3ytSsyVy66qoe|j5BTYLUWq_*Q_34+jS*iX3SIZ2V@|? zV^cP*UD=EfV>@VUKft&#*qJe*IyA9E|7KhPYKICLy!Byg1C>sK11Jev{uBMyG$4D% zL(DqQf+WF03@m-18-Dz$b*>hJ6zB5lKk+_6L}JIm}m;i7j?1Lvd9tQ)zx%AB0Hb?r%<= zi4|wP2JQz+o8y-=gU8+M0*jk9RrG+lnxDWhK7JK(BvbFZ_ZgUMT5nR(M|KPYmnafjXh7)P`M#*3Iyf}ShMFovMv}Z#|bNI zvF8v9!d=wo>l4!CTi!`u}HJF=>ak2U1`7Rm*q8XG~Q%lH$z0IdP6 zZKNNNVaj4?-{jZ5$H@e4?vVY0e2pt(m=J2GH6~P?Yc-*tFvZHG$-W7@ZJY0%()|FZ zM#ouk&rjOna-1%RYM!-9yL0+m;j>*#|G0F@ncrG4n*Zxqs4CrE$yVSZd&aHH1W6F3&IAp#ry0z;Vl}@1Yp4kwXcfbz4kp+WJQ}rN za*&;HP&-SOZajblvK;mUx;}1(rg`Md5_nqE3GK3X;W-jWf+H)xb-}2XIW^Rdm(b_Z z>0Au|1JsPMXx@0bbmKB45ShHA{8YBhxgfuqM-HC*wSAZ~U3w5V=+p(+r<9@Rc3l!^ zMY5mJI3;Idu?sEqte~*>z<{mnPJ9ESnyO@CJ@Egb>)!Awv@3vB)DINgbXHc=tLLljDpbHBe`+3;x^>RpgOdB z3@px7ey$08-(P=1Y_aUqaQCkp5Dj~E+Yo;{>}|NP>*G_9sn9!|thU^14!3Ym8{LF& z=-6WQ*J8oG6Cy3%fvv$#!gjP)5>C051a7mn)dJdOe#aKxVQSQ!i78c&f^biT9`KV^D7B*+8|8Ew!5OFSFq-8mGN@y4q1SfM zDpdSHj_uTDb{9Z(E1x*C`xhitB1O~!bdI7T=@cF~Uoe?$U07Gc-FBxDR*{bbVr7*z zwi&vJ?B0a-9}g;p ze!$v!uHHzq2HQJCGk4L|>NG?`LiTfdnzgE&5HCyV z?VDslM-j}6z)HJde)?~`Bf3>fk-F*$9z8tSUogVE2o&<*FdLlWr`*M&nspLD&E;2{ z$~S{~3cS8H8)aMm8?NfCeauTL*3T2Nfj+sSl3V+^@R%QEC`en;VGYcWXg{Jj{^G1^K+p@Ql@^DX24VGC)5RnI{q!TIhy-Sow7H|FS+?0=6U;3GNUpH zzZl)Z{e*2TgfhqAa<117Jtp)(b%iI&h-fQD(bybCUod**=sKEU(_1E4-Xg(h5$q?_ zFSidZ_O_K@o*svLBfe!qK#8^2(z8YS4nHU4&65=9qHo=E2yW_rr# z-IkQ-k>73@#c~TFHI1)6?9PoySlN8SEbKs?DKn}Xq2uRPJ~wPewYVzNX1jB4gyvQd z8{$Ct+hcK&?s#48Qi=z(wxKT7y_8stN#R-+%em&jYZRWa)aq(1&aA_}I*AS94RurO zBpnV=F3RR!AFJ?zez({h6;>^zM|$yY>dZ+UW;~kF_S)>{sz{{GgNa`mnO-n&`!Psh zw^pU4mvCQwE7jo}x(lLz>H6YD$7Tn2~(Je%#U8U`*M^_Gf<3Kbi)PEa3R8xyzrQ$5(ffpL$JE|P zcUvRhr!66U!{$@}8|q@#DWV5v-0<#=Cv;M=`zz#p%i|RlwNTVbungXrFIozr|H&NV z1$l~3(S&Fwm-@vf&=bt%3EK*P<4#U4SwVnZ;~4f0TLaDzp)z`w-CJTzV3u-auKCaFV=BrakrS9xYBdco@EPAn^Bb&GWqQQQ)@l(*6r ztQ+cPfMzwy(kLdYCv=4dDs?#QX>QpBVon!IM&ldM$0oQ9*=Z*UabjN3(NpToG+2yj z`(n>T%WcDCG?!?RQHHsy@~ggvyLc?d2V|wk@FbCq%LnA^Mnb)jXr!w< z?rxkU=o?12Y*dFjCf9`}ehzn*fiFMygmc}XW~9pe>!cY&f;bOaP>_7hoG~z9=6CMX zuWZ_z)Dv34sM3q7q~ofYkkD;6F_=m2_$$rAL zMjg6g&*y9o8fgl1t59>@ra7#xI6}n*mUtjTU79)MS^)x2H9r4E%~*lCKu;;PhhCEy zp$FvD0)pnSnz`wy?hRB?@PKud#_6_XlUc7Al^Ymo3sz;<(OMKaHH+Grro-NX-q0|k znOaTcyUMkz!9I=@PL4k|7ZG|aw9>O(-QJ|hn%(OcVu@g1k!Yo*7V^w2ngc_hV#*Dd zw2EEo2ATO@Z_bRqAY0&|;vtRZZ7klW9rh>8E-9t2_B!MYLh2e}3$?Ag2XSSzW7x`B zn@i{HZrkq|M0Xr^-UdatMhu|OAe5OE`w%+dd4#9z*|<+{q3h{-v-O@l_&vWrFyaQz zv|dBi?|tmqo{rs<{e)c$T2nXZ+}|X-`$=Ti2fabt3r1yEvgdhC$UGnR1G--XgSLyx z^*1o)ZrBZ{+nNXR_wfNWt&4(I8o4{&qX`NSQf znw#Ik?!jJlA)yi5FZ`dMU`@UoD2Cm&TMEpJs{DGxey!=TG8VUC6mX1zKmLSns(JidzR&!^ZFwow1%1mz>0`&- zzZg1kaCO-zn&s+B`pXQ`Y)|rAC$RE9fOh~Xms)asapPNx=)a6cZ`fGw>OAa|(kLMt zZT$Lz5vG$Xl`3y0-TCIv@m1KLaN6ZuE|0j}BL+L02W7utzV1zfR}%?!JZb2xlalZe2lEZ<@v$p?X`at>?Xto#+xb`)#N*aKMmjs-KC`BJD)~Xz+O~}@QqrZ&IcgY3_^i*~}RbWOKQTvM-pQqM4`()l%-im7VJu;67p7A{8{b%+`DgjV7(|6Sn&1?4Wf0 zamp~WraO#kDHLyv8&x{N%dtAYJz%TD8*PTYvRQPlunnVG4i}QqiAK!%G7XVq%L{sI zmgUk11EA-17g{owSM~$uwQvKJtI*>K+VIPM!RVGtFQnERV&|~lJLN)~Q~CjCWSg69 z^XsWKI%LG<_AI`Re~oUnKEKDICc%zCC5?S~!5A-QlT)V_EZqh}nSyyD6-^IZrS6Xr zG@NqD-O_>4ETs;lE?P+%@J1{n`-!w`5GMjio!B`2+6dqsR+4})v zX;2(5x0i`Q9?k6%hkJ_`x!2Rp3J-iu9@PNLRAUk<$nZT0- zydK#v*j#G0tlQP&a^l1iuYoaToAl^9lN%*vm{JG9?+06f#lgz0k{4E351;0<$_Ty*BlvlUd5i#hhQ(? zhg~QBg1*5lWId>=`+f@vI*nmJVCvLRaJgp_c-Nvh-RJ5OA7_se&;TEB>oT{8dQqOj z4;Z(Y2n%t&)>S-gj37>L^0=F zae`f|fM8^V%_5!gE(Fn7Q;mRxrCcX?c5T5N8|xS*2_ zsZ3~x-Bk}mr~UC9)4D-}D8TWyDMY8GO-Lag&=C+SHC^eh8=14|%D`lFU{*Pxu7;8a zw!m}{g&)vWp2+GTXS-wPc7IKF;QH}EyE4@A&7nKkkdW#58+zIlDymg=uWU8}Gq1Q4 zIt_t}$FSHji6oHWvU6zf22*O-#bKsTL-k4OFrP4@xQ~Ca(@kOb{(`XUAzv^@(LFY_ zOq`xDzTfs1 z?gLt-l#(I(NFzX`wA|!}@LZ*M!Ec=+gpY~iTwiP9U%K=g(%AfX33m`M0ZXGU2TTWt z+Wzld&G{{`%-%h~FE8ZoIpCC`zdTi@ZF#}gmkalkOV3UbVJ%ibJbQZa}zLYmD0+G+{d2xX7SrD-@kx=vtce!(_zEoDVh`4KjnOj}r*Sk%fI=DEwP z`+B?auFWEC!4b0aI+DM@;D`7ViXXZM| zOXzeFPWKvRe?S~S4x#G+5_-joj&$b_B#@D?AJ8rWmBo)?*DoMJe^Tii&ezF`3y#BX zTPC#YL|gVJ%$f?+hGn4V{y!2lnExl7!x_>sIY_sL?kJkg5oq^sR+UWhV0MKd+);JG ztOgM_cKsprZwC$%{xXk;{eq#+Jy`W`Bx@^(r|Pi2p^v0VZJZ5yp&tJWkadrRZ?&^K z--JrOV5`&K4Ygqth1sP@(4qJVO2p3HYDe6bx7ON-@m2Q`mm4W$cX9*WRc4^q^9UPZlkRFB35+T)G%tV8qi2wFOQl~=xi|w4 zjAmF3AHi9r^3|X6n!RN6fQ|$P(qdMSoyVj|FeLMU`8t=j8l{~w{A}BCYf-qLF!oU4 zQ=cuP4_y^SN9%>=ramwAn(Co%5rlKA* z+wA%3y-qe2PJ-)jlYm3@6LeUG+E*ZD$1IYNmlRLv4Ld25x%yhV6K-b8FOh=2wUh8;E(ybaLK_;??q-&* zi|ypp-uZ%F$|to}g)^$jH;`Q|aR0@rgEXKLEA_Rv)Ws?Rud-2~LA#zF_oXvK}fwFzk%`vTMHJexPjafi^~Fj@Obv zk%ims0)hQlZw_y^Atj|bg5V8j)P2ERQG}D%z&z}^l#1`^7)n2&q1q@~%gdp9ql^5y zR{e&enY$(>twNa_j{R4Fm>Uk`{m`DeW3!)nqt9^goswW{&%JRLNGTxBwxB2bP z=Ah^5%w#6wE|{;E?o`RL9r-@5=bF`uTkxO8z!`hTyG^gxeLxKrLq6q>IUDIM8859# zL2j68NZ^L{fp=4OceV2U-)X!j)WAY*pulP@w<~9Nl%Gn>fu_2A zSKFOC3iD2?!gU~_8+sEGO#)JbRXmmoa{K_=uJfG0Xx47zR*iD!ju?ftUmVaU36azSIqimg3_+^R7iDDwk3gi~#le+%P_wSrIPIj*hCOdq*JR27aP zXa6l_XF|M@7vy+JgiS|-j$1A}gN)Ko$e0I}hBvz4J&F0X=)&D*H~5W1C+s4Kx?|%O)XP4hxghIQVWvo^qISaj^~VTyzWf30sOj!P{cwihgAqz?D1SUT8E~ z%wE-}YQ_iEIlyfKuDI+5g>KL#5n;!DH~go5;|skI(HD3TWG>y;m`>nstRJ9$ zs@yckvhyN*eku)%U5(gVe|f>^;oaIJyoKa#_Yr=FDAppG=o6S7bqKS0nMrpgZ-}Dp ztwaT<2;B%FojxD-C!7+q)>@rz6OXtyl>@py7GbM@x`l>>zjTt6I2&v>L>YP-&{1g0 zrCrKkmpT3Sggj~<>8Mb4!gtAP1~>L|5#@OcgsIO-?EymC0vi*`Af< zloR@bx-LROx>Jg^xE=E;#RJwx&N+L;`C=d6dmK20e!y0^6*`E|#RJfz3qAW2_m_?t;ZI0BO(JDkZv7&qQC)H$&__6=cEu68kpmOx-?F<& z;ReSd{u-0WhMd-!7YECJ!dCBG3nrb*j-qGT81x6R+mMs?V1ygvIBFOj?dZ&@pJ>>cB zn+Zm;OU1H>H!H?!9MRuT5Q;k5FFQvM!Dkha>myRO6}%X~mDx|2FnT!*;k z(VeQWUoc-A%!b_%e>HI#pM*Tt4f_G({Xpe}UD>DE<8&(giHsd8YPTylOqsw>$bCUH z!-;fMK@}XZ%J%xYJNp4!dPVp`^HU*Vb4RppIJ_lZAkE2*+_IsPGXvPh z_4oSBJ8Tc1{o}Ih#+U=;z9HKIpmL+flCFzILQEm-Pw17)xUpHQ`5`pjoZg{jZ$>W%;6IF- z32>!q4oHI|L_ynV-FVpB1lobz!2jLgmmLo(lc2KuCWi@GH>U|6u;%LWbi98;iHnkLXTRpx|FgAm4;R(99)Oh^l$vmMaM9;(uFhh1~0?&JLvmb^h{ zD8fCu`NUYHw;WHH_Cj#IvU#E@y3t70+!vetcAzyUoB*`;EuAfUrDN_M5W5=9=($SA z5XW-9{%xC^eVDR2w5$x?A$=66PEco_sMI99d>^@ZA ziY$8qWF%zmKr_{*F)%&>R5nSL-CMK$J|mAN_5nR7Bo!fLPvD7!PE+|tabKDxfh&F@&Cr!_HJl5U zeHure;y{%H>iqIGhn**%E`oeANHene>nC)6=McWSkQN*~-sVQlCzSYa_BY;!{VVN?yaNF&0F5JA23n z)VHx^E=%inP7|n66*(cpDAcRTdSiwO(;+U{Tsj&uL*D3NSFp)oP3dy*MT zPJ;KeTHqS?zOQn!2R#jYk$uCgD{!3rw((=U7LB$xzp6!rt^O6pCmPUl57vbT;lie`WG z^7-Wnrm0l2!aOOm519A|Omv49VjByu+eO+&`PN9IitPBo{zQ*z&(118pF6y3a zdWg(~@tmHB0`t(`>Tw^qHS&(y7i?wP$T?`YM?=r$nZRJ$0)N0S?I%a)_|sfw>f~9v zcF+sv>tXjcowB=WjPG*^I@NhXtpVrR`dB=459WkD(hlUHf~f7UWSB=4+M}9ZFd22f zC+uE{QB|_~U_vu`KsV;ePN|hW{y9I#l`%@cV1CReAz*i9Lw1Hn+pS0QJ`xpXq_y>s z5c__Ih{Hi}EQdNRlLVR_30anVAsst4ZzVuZ^I-Q?Wi1p%JnX2TnPutbrjY&PFQ3pc zjOr&y(TsSVls`rT3Ht$Cs#=J$yZgwWBe$|&FseBk+;uTb>aS7FavyN2#Je0SJdU3I zz&_w6@(Ci-j8-fL-2;y71oWu zY55t(B8ytbX7Pk|9Nhgh?BUJ@zka+>6mzi9I?iMcG7Xyq@2|;E9kA|>M;}IZNAeG! zFH!i0qiCcryJ5~Ke#W`DQZHzEGd3_3S9m6LH*P0%7xeiK;3YhZ8zih^nZeSVr;~4L z59+LI5iG0A>3tK@Pgv<*;811iA34DbcZ&^+T||?mLMZt%XHS9&jz|XTT44jTawxT( zlW4k2n$$vK8*gY6R`XS%-t0rd9~!aJFBsLb$^vy%@%GsHTIK^L2t%1Nu2pkAXxKgV zD*FZVQ%?G!&bz9LYlCnBIntldnLF%XtaerUO29hFenMw2I?FW_Dw~YvpnG&*aCD1w z{qjox#@*oioCcEpfDVyZd@TCPD&jElI^X7WP&BiXOT*R-vktS&?H7ijZm>Pn$Kn@v za^gx%WY<60(DfknoY^S9-7fn@LfKPgz-Z>R0t90L@Ga-{5)(P*>wbYct+!yLD z%9NU3WcE}p#80ut?-)eeVzQuYnA?M0_xS<3l^b?moKHqsl6J`z%N5K2g8GP-3mF`9h*|Rp)eHVrO+7LQpRBNAI z7?dF}?$n7qb_S6{7n98n68h~bav&QHqv4oPw`4?gUUgCJ4UxNn$TtrvmaPf8Es9APeCzr%d1 zEtFb=i?BZyBIgF_KySp)a+>a6j1bfWFiEgky`h^ZWN)LD&QGnkX>TZpuiP98(JM75 zZhtwy<%_gGAj%rvnsIoO368qu(w{rbx7;5syQ_p1ZLyo+l2E>WKzH0iW%^>1m9CrQ zi8HG54LwgJwVemLb8QpKy-{*$Dtjj9W9WOlP%wY0> z{n|+i27=s%&gyTSgP|pucK(wvRsnUUMlj2df8sY(as6IQ+>Ng zq#w}50Pa4y@=0Uzaugc?AKSJ9t6FCs>vmr1*l?MX*s`C{7Qk@T=~cuHyWLai3--rm zF5d_jbkC?O-6gFb;7la<-D9r7`*SX1%6`DkYS(kxN~hQvdAIZhqno=kpni_kLfPo5 zI~vuWD7@>U4Mo$qa1Xc=po%Y;Z~MDnjEAlNEMqxQY#|;nJ6V_t{?3%lQd6`Cv7^TW z)Cuw`@R8iw_0{a?v0>D5gMgxFZ)JDghlE~);w@-Ts3nHVFOT$@N^;DvxulCgUnS(s zotX#Cx9p7ap|7TOz&0&bna30v>GJy+Tuv%JVI9wUDwc`01v5i)N@c@lbiVD(19sh6 zRn?jJ0k*2$c~#AQ{aNXGPLi)T?AK^0l^-d)`J?kC&jtzDv-ivynHhaU{UPFW$tG0$3F~Ol`~|h< zgx|*1LUCJi;&I95Ld_+agv4B>mFa~BBzOR#W%7jm-B~!Xgsp4>YV5&Hfp3_veJoEZ zd8%|bN0N|Zw|srTMBRzE^-*%@9-4>UHlXwqYFnVvl`7r%Z`f;`FZloKdbh(mcAnYx z-BJ7@EZdSThq045`G;`Er~~XbWf5Nd$*2=0TUyG1^ ztnLk?n|G)|ol^<-uY0%uLzx8~faP9Rbh74sB9EMU+en}@3X6S8-Md-EE}Nv2c|*fR4@lo9T@LPW=ivxRuUR)7ts=M~DHIxwcwGC!d~Na72Z z&ze0cByjGe(#dIHe$3M!!h68gS0ngAvC5tWi5t#g6%M#f!}VYa>|D4}_5*77pk6Zt zuUj)=hR_>Ew>iV-J(>YCHJ zM#9HJ!j4Dp-3%9`PKi}8%_{ppYlQ%XcZwkWhJ0-ZjP}R{7YLEvxq8^^qrG8%i?xo) zC??gf6E{Qlj;fdsoR22B=5Xg=ftp+p#rP$Ld#PP9k&bmEA@l7MInjpZB?eO{Sbh^U zx)k9;DIt2jq{~svQyL^>QUfzxPx^wahyr=WZsn2wO@a>#r2r3TZQ?)7JOpuMzy#V( zRJmX^!v&VgkB#DH+sTf0&dT3l%z>j}$580FW?^r;y+V~xatKtI1%U8Wo6BIV$}^zHz1!ZB*_yY3aLj3+@BvrW)ACM<5h8nTW?47;y_SML@bX z-V$*UteqzzpBKzPYv)<)Y>ic%uh06mJ7pixJ>-F{O5$rZIywikACQY^6}BQLgvHtn z-G3na0dqqi>@Zb#cN+11?og85J5L{wHX)>rhn+bj3E6cP={v-#GK|c{5}|W_B;$(B zP+h3p8`*(CV^oaaO79v5^c$i%kfu@T-X=$auX=^uf#CsZaX=?rWzP$XBxFGj z+pO(=K;P5z>ovlqheM|&EB%Bz6;SEFm2T+X1UE{+4piI)t$*eW*ZAp?VH3s&Ip7~h za#uc=?wmVN+~m|#2oIzq##Cu3?iCSWql#*BLIwn>Scoc)doGU6^6)+j$t>`DZKigk;0%>db{>fjkp!+ys_qk`Sg;X`nNzq*8C~4mqVN-Pu_dy8T^+-CJPBQ3hy8>S zJ?vFgub}M!^;IIHLYEto8y-j?z%Kh7&&#%{9acEY$BN6T8tDccZ|J#B zAqtk=_lQaONN5ISPDr6aU7FKZfgVkb<~!;y&1Dg0%q0OLgqhn0=H%c&y-KOL^P@Oz znsB9eCnTQ-Y^>Z{fktt5o*3Pv4*I^Peb?A%94d=-hnP62NbUEz!$|fvPGC;d4g704 zDSegG?D5J;4)S(Fa-sAqGwj#Ok-9OgIag0CenE7E-CO5XM(-~n>MlpW;Li&CoYfHq z7~^q7kuhl*Zw}~U3evbO)Lf?{?*WZp8gy@T0apM|f`s2QN*>Vj9#B14S3RV)+F&}pQ%Epb36;+Re5*JB*;ff!X`_q<-&|KO6U zU2Eq+s4Q(B@WF32hD-tjm8zbQ-Xit#zl?H5c7@+Cn&q}8e|dRS*&c{)<0K!@y&MSh z<~cRTS#+lx33*!D5^i%5@hbqG&n)J)m4nTy|!;?!gm z*#Hw$SXWFRNiLRGoI;SO(FAtRHd9B*yt0h*xuu6wvAT{#sU;UQh=Fs&{i&`Yidm zYT=IolhXxjc{~qM_IL|O&u$^xShF@zH^ASXcmTgsX|YA3PzQPGxXk=iW#`rc6IzM~ zbY)rgiI0$Fm-$wez9ADFshGD)pCi4U^)eE3&{2B&6tJyl%mtYCDmjI+f!u(D9*kTS z%pEyVEE56!jaFA6{z%QS8{=gsVTNYdzJYA0ids|quEe+B6235d>T)}4r$ZKnQN1fkb~RC+^w0|v|4l4biRCnWHd!cVBz#4yaD zJsm=OLPCaQI>ZH|n)eJyUD@>h3UR_Y+LIm5Ph&?bJhxt;OCD%;??-;zHl}KGK+ENt zVb^hyz2psf;z8O({rTG2yNVC@0SyH}Wgs5eZW+*TYxR4>a$)j0n+;tAEW3Maq5m27 z6H@O|Cq$$54$kxL4@5o~LaUi4@0Cs8o8P86dCgPN zes0{<1GX5J$LzCleC;NU2s@x271XI9Wb5vcfRM0XFq&EKQYUHwyFM)mIiGQ)<)pmeVfenKbfQdg-P zm@y$v7zej57~Q<&OX|hl9-cKqPkE)r2f277@65$8uqnqf_%eukPRMqY z)Z`tp)A$EJ@(8wqm?! zlmu;q^>{!wx+#oK3F%lYwLH7e15oRwM&fc*1=T_cE+y!;S*(Y}?e9v zU}i|6M$nUu5t$0TkRe`oO>~ApNh#`eTV8(X=jz9T!IWdUjp2 zQg(EcenKl3VOJUE?jI5;JK1lTuX9tq)cUJ*kbdu$McEISjofbfSX+Z~V=)QX9oY}) zl|Lw>pV}h#mID*$RdS%DeKT*_8PXJtiiV%r%=+$Zk4NksChsn(LQT)UUIAu>akj z=Iu5W`=662HVW9am3}}U#FRQNIaXJTL_%g{fuRrd%(T>T`LMcGF4Kb-Vu=Z658bp>KAgSVf~|PC z59okKlN%QVdtYp+2$YqLm%i)9jP;i%S!)S8=Px1QRaZ|LPFR& z_~5U%yGF7Z**Pwqeqb|aJCadIDa_3-h z=|WaSBI;t#63I<>tmNx%%yd^(#yF2VRh5Lfprc#Fv29HD8|Ldv^IR2z^p@d)>U}sS zBb!@FxUE!S&i;M5g9KWU3C8`ufi!5T^tt)IZe*{&=4+mxmu{7K2TE<|oS8GhbxVJa zO85>^%5)Qki%Mr5IlaoLHSAedmR^{a2c$;J?pk?zCH4dM6S|3n9=*67*n?@Ba33%$ zq;Qjy3eSl!evL|i8x+lo5;;1nxjXubG--bI-*g9!hgb6nn#MN zO0L_o!3=vV<$_$w#Mj2MhrJGMZ(lZ}>97mtzR>>m%4nLSceOXCb+Hz7!H%4DSVec= zcu`pfPT4oeLW3bT8*5A51)2CoWe>c+W}(4#v|Bm}DT)8^mc88RK)%IeA;*ykIi+qm zyWBhMD0-{HU6R$U>|QMyRSUC-f#&oK%f)kx(JjX54QC)+*ORgc;&hpz-8DYgf&SQn zi7o*f{fF)yjL_rEd;_Z+cBi@|unD)jisfz{Ea-L?WVuva_AH{1kj9%u6ji%m&DmF7 zAH?MnP^XnG^#i(ZgRcz}jxs(x`zHamq~hb#Ny^kG(MTfkrJNYZ>T_giL0fBfp zHW$oYSWi`QfiwXiT8iuk%mp|ULR~oM?5IyLv3Q>m(1TsX}-c zN};=+Lc%H+pEtdcHWIWppgtJVluu8cNctu7YvP2w7*ijkIx{2tdz{Q7|8U+TD~=xQVdzbSLNC#-Hdk2rsq>Ma(V zTU6iSx_NO-7t%0rd`_69(k|Gq8?y7kjwzUUN}ke*@EtKiDT=+5W!AekAx+nOZt%;d zi%;Ab9_5fXnRJqEx=$F*W}0NQY1*O{ijz$S!+t_q7Y_XRc-ni4mH7apLfIGW*BCXZ zbLS4fo;MhYH%?>RAic12HYOEgj-2lEeN>0Mp>%MjNnLcZ4|gJyJG3^~jJnqAY_s+s zRkR3BA9XLjffBtRq{U)gg^ICt zRpWut1W(1L2hOzk2~kX0G(3Wh6Fq?L9E*gRIvg;eX+oKoaBVL5VRA*$>!(36j)-0^ zRQ4T0#=hsLT|ivWBBBQY=Q>^zY^WqqSSi8-()g8*kSTHfSPq$vlM_ERuod7yW|Vhz zP>&~(U{E2_cQ|2FuTq+3?zjp&y-N11`3C0eynuxC28gBGSV(Y7!#6NLji#%IqBGpy zk|np5@q|;3jhji=k}13ebHk{XO;BcRHAM{>IMX{m-VoO)hdARuhDdYZ*JE-o7|lFi z?k~6c*)!+t4#nefy`WAiHN+dqEyKKB-7~}FVn?p7%RDn!H>2jKTsgE%ZkSA_=c7pX znL*Dp>LkRkc|$!5aTGDeu)HB4ITfVNY&T|4?l!8hSqRRYcfcP+SUg-z)jdQ8<5ChwhFbyVT5PCz5 z5>%H9M>>AjB>3yD4HQNo1Bs;lw=qz69Ol>`n`PuL7o=+IXjMXW<3-Oi#fgTcaQ|&j9 zE+e%a4(=dk7%9F1`5k9na#H`JHlvRT2`!?>4qdg7ikmDu0TXPM2??~lA&pLIm(^gm zPDyY{)UR)dW`uHD@t$U?bh8KhuNXulK^yeJLaFqCvU{6@3A|RTxEtojeiK=PI%|B; zy=MNyegC$UH?*>enDtC1beDfg=*xsJ=(b9zbF};y(-e%m331||5Z#z)*l3}4DUJk> ziIC8s>@CXC6W7p#w%f8Z?)jbGnkl=na2}Gvvkgmo38n$ z{G5C!`GDRbMFF^7yjpw35((rcqHcKWh5s_X2a3|xVUH7ZqEsb^17_BVnvAOLM9cfbXr!Ss6%bCJ+DN^sRLh<5tsVPCU3{1z;w?DR_M2lPHPe|x-3+y{F_wUhmZ z`C1=BDrQJ!7~=6FOrV8+13j=0l_w<9+E~KZ_LD#n%6>vdcBpQ)sdR&?Cd4k`AY72F z;!QBWlS)u!lyU6E4`oD&GCMS?DV6;%OZWU7dn+T(Nx5`4BPe~~tlIMH8Y;gJ`9Rf- zeJ_(yzWUI$)OH|iL%yvkaUyh*$tDR|T6n_fm0$9}$jYX#XT$D@8R0v`-GMkK2l#Do zQ8pn1`xEl9-XitqsfXGcTv0~pd~XfCpdnbOpKR>144vvFYu-`%9kjYRXfZJq=arGp z^d#&zOxslprH@TzLTr_h5atcI5mm{Uqbi~YYJ$h9(Cdcz*2PMx^u@A&Sz&I}w>F)) z?@)_?gFOx@CZIUB{Y37G3?OG5McK$ycVJHMH8CM3*}qq63}LT#sFuL>X_><{xA4@ z9^!!>y*pWWAu9t{@2W~yI!%~i=7!0oYyMI(+@rSbhJ-1U&jaeZ;N!1$qInXsiy6Hy zlw9zhYlv%f^rWqlGp&I6fCQeT*7~?{Af?@HI^V$m`*4A8wJA#kJXLd{X!RFsDRE|U zcq;fuBp9nv>l11tp;CP<5myRG$W0Qk-;l2fk5XJXvoi$+YrI^ss}FTR%ULQ@YlRzb zjV>SY(BF`bAp4b1XS^ijZUA+;U~=lQIH=yjRn;}xI_Ame4s83D!E)x@1!scyWgz*6 z`PMz9QpZ+VAIZp{44QA4-zAEbTte11xw_<7@`gGexa>1#^5Z(^E+*BXyWyxN(RG<- z($JF$^r>jRL+>DzN`A|3sOSS1ezn;PRy8L%Y!A5DjZu-1D+^Kmfb>bJIE|B2?5zp8 zC=B)k>b6VOLFeZ%+Ezc`Q*k>ar^Ylxbw5+tz4N0#7xn|{S&p!>|FSK*Wh2rqlyBXC z0_`_(D4C6PB+ACU^ z@-4d@S_pG1s|gwhzNe>#zC$<3N^RI2c2CuqfR85o0loS|Y9}wyJtbuV*_Zu>(an2w zpxWUrb0*rl_%uagP0Scb_^7(@y^*sPn3;dtt6(w2UPfmy3b-f4s1*^+A8HjT?h2P_R$bQ49=GhCW9r>WgGsga67i2%7vqGpevnlpw z&Ett>PsX#A#jjgzj&#FrfWY~8n}pBfJm62q0Ort4RfavPd$C1???_Vyb0-Yu%+8<> z)+)VW>%iC^)J92Ur?^RAa89x8$Qr@)t{U&&yJ8{wp&?X7*)wnUe%hbjZFzI*C4(o6u_|O$fW!$E6dUQ0|#u(8nxt z1KQzT0JV&!P~L7SZ}pIX$>91Ar#GSR(A9OQ?sQdczYk{X+lKl>)S1k!N_+aBV17&H z4VvR$Qa$)EC4%>30u_)FIUob-rinWtOkge*=@*PSOuuFbP+lU41IANWZxmy z7ApS3s!>Xx1o~_=-4Q(&npgNt5!zaa^3q(xeZgkahA4IQA8&B<`^n~p+)X8oTB>ZE zP(OB+m|R>aKctThaZZImHh3!cSfB&Cqo%TxNlIt^vW=hM_99D5?+Xl=Kc! z&E}ck9`D-(oHp2hW(0acj1NRl0adui#JH&B%U7TH_=fo{{XnSRwpex-<4rKK3;Pq| zbEXlqdW_o#y9sn}xbZCB$VXBjdfi-^f7z;0h5D8IhB(WbDzXLjiW2$=HVK}6mVUrb z8w1pdL19NV9_HMA98Z|9y|Btcn|VNEkS5UlW!H6kK(ZyRa||pzAqf*EpBrR&ps=M* z0D!@y4Wfqzp0Kk5e016Ahn5Q?RU5K1)oLV2hBtvzg)ryZW);VXc11#N zgm^>OJD@uLl-*mBO_(Y24I|7A!&323%Ki`MMdLIyR&=eI@B_w4W6L%1G-Qlb*9vOU)AXw6?eg^hAU?8 zTe=v%b~H~!oQ#|hcgz0OUdoRS}y^NN;ldg{eUjhE3B_9L(f76zN1l( z6J^Ouud`t$qBc||UmNw6`-bF`=v7rQ2y6o|oQ2EFN=#PY-jIf(|66w}=bne#HMR3vZJWY~HkbXcz1W?B>g6_Tz*`2d&FkgSE8cnnrB~)D8O-=_Suv{wf zm-JC%?fEr!p&{)BwIgI~?J!|ULgktu`wdZzwGtg{squB(ixl0oaqa**kPV$;VVtr4 zyT)U}>~VF;r?AvfbnFGoRl3!bQw+cheqxoOe$KXK#!wq032C}7_+_9M>I{yIdyQ)3 z^<;FrAsNN`J8NZUaJ>K$GJA8UvF+sry>EhuoiD?hRbvZj5_ExxyJ4vAJ3+cH8kAkX zI|()z&jUT6?oV>Yy_Tud`kJtRVEjC?Gr@!fU6`i5Q2GkTJSQt1dLIbIG~M|nE&DJx zXoAa8@>JoV^n&|DrRzX82cCzJ`-Wk6QZ5y{R@rQz2X_GtM`}aPEg*W5rOeK-z*#?a zDz&4)x!!|cZoq=*h-%!xbH41~M~)k%k?T2N!#oVEwB+xg<$+b{gcWxCFbS@56e(>X zESsoi0&?1x7=>X?z@EiJ=L4q<+HbRYk;zwzj3l+9tVwK2fkOjJzyg<*0^$nz~L#^g| zOw<7*o;?$G-xPR4BgRncl;p zIYm$B2sZ~=o)E<$w!zA6sEY7|v8QjKwi9Y>A!N>qE39wq1%|B43)SPuQoDc7gkTpf zLf#Q$9?a>%ux8f<&|dk5S~iJG4GfjXDlm%JV@rU)uF#kx-*PxepepKoYxpfVno zo8wqY^ARSwJ)QN0noT>+aC=f4FU<%T%sb*zr616gP|+@hnV_Ey_X(ZpVl}9evb)2D z1f%>BPLVxfi46P0-AVfghC18_tY_;>Q%bZNm#j*r< z$b8}lPPTjMN0m-rw2M(?hu)GJ_HZ*=R(4vENVV2ee#Qng|1Cj02%&4;UXHQ@=K+}e zP7I_Hgdu_ONtvDGK4HF|s?k?TJ+9X#4~U^x*19E|QMTpf+&A~p9MF||EHk~z0ztat z8?7eg7ibe(aAJh(IRHjBf(X!a=8UgjFio&dhZ)7Sg}b*r2m0}X#t?v9KR3E~B-{jp z*?fIKgWgbGhOO$ponb;u8*6YobQp(N9~EgX(3(JvD;yYU13iW!b*W+p0BbSiKB3`e z`*HgN&WDE4;HL&9Q2K%i5z~(`3Tn zYbG|xWoU|;SgZz(E>D6lH^_d#Y=v^dvuthbA43{;F6>&z8+xB3a9uHj1=KfV3?sko z`a7ilA$EGjkF&i;ZzCJ43PX2o9Ozvnp)S+xWR?UUhnBuUl)&qT>YjHChD^}xNa)KK zFX&BVP@U41-80f8IQ!ybkkS^i{xD9R7C_GC9C~twpaarObPVZRox9`9U{`*SU{p}o zMlL<-ayD3n%A=aU<#w7%yD zbT$nf+fRa3%ytLT!+t>Pn`v|{9jb6;gm`>7FV=oSy)<`9jN&?TU~d?X>>YY~2rvsD!kINp#rwesC zER4kIo=!J4JbJS9)`2-#036psPZwnv3(2DF2V{XpVe1_etQ^%&Lf^i9!HJFNw>7JO z`|DY`K{`-z7t|;+LeSXDKD$+VVW2K(Y)K&&%RSqCjZE43u-Y*RUr_pjZr{-A&ENvN zu86K`xi^G=6B9X|A1Tf~V78T?$onm!t&7Tag2HUT31*P81`(|b^B5t@&f(V4rQ8Sn zqfMfuXnD<~H>sMyR|?NAngwY@9alVRC%Xp?qMO?#zJb5!os1&%?Q&bRCS<&&1s@PT zsZ%KQ2Wx;f6~hv!xCOakQL0;WDm|NUog!L@bS{ne4Zoc30r}0cb9Oi5ahwAz3|_9o z^989r;9_%!Ir#t{Usu)7VNTgT5P7wV8y<=WT zyBl_0MGRJ2i_&*U=|Y{G68v@MD^qF3fIl!!2qTJ43<*>H zzSD3)MyDc%VuiCYlPM!)<51r~+L*HDathdgRhm6d_5(WOm7O_PrQ0+KC#6t0;Y62u zAVZ%_aV9pvHd)&}37J;BpdFS8l&!k5nX-fX0*2@Iq%Jg*QQA>?y&BNjS3FiW{~nOz zLr^E^p-cGE4%UZ>kBg=dQ{8!r%H1;@8SP z!zWv&2@9DJ>lqmOf~e?^wKClmUR@}Eg`e;<^Yz(}nY-YtTw01@?+woCkuG6XcavCj zu|u$9o$1d5@=ADgnemow{mlxcD)){Y7yWj;As>23v1My0+&+XMJ}r* zLPYPNB}gRK7%8HRDZu)ZdixIIRw<~B3hw!w<`nJ=a+fev8nUt`k3{RMn5(RLsN;YY zK7nJ_k=>lh_l|mf*JHtc-L|scI&>`{x%`jJhW&v3F@v|0QwDUUqg|EVA$H7|NsUmK zDdbLXd&1<@dw8VcK~}goWtkAy%nI6|PiR10IptggE}aQ9Id!>VR9j8!s(v@L$Ucqb zfbI^H+GPyHdFVRQb+%s6s+Kx4ZTj34`{;f{bfd>&B`g?9w^?<6Aqn(rh3|-N4{45u z`P0UPSjylM_h@p#=FI7eD1lYi_}T`UUw4t+>K>LvYe>8^mve#5Bdd=2(-RcWSv&cfAdwFk5rL0wH8 zhXKg=T3Hv&FS(^&DrT;Qs0ZcOIJ#CYUH_d!GD2Kch~YwZK47bB^Edx8-$>rsuX zWb6OFAlHc)^4cNY*yK$vb zwv)YDnlFN-$>9Z);n;FiVfZP#2l~{lqtt;~;XV&C%y@lKMgPYY=pAZ58D;30!|paT z5;CiU{escV2(^}eDemP};M`fE@B>o35XTr(bIjpMAd=B+UND+vFCR`|M+J*GpZi#W zil5N>fxEXSK)2(XfWoq$uztlg0^(2avLA&CWl z!Pyy&>pmIvE=$;RFG4C|gWjVC)!BH9(SA%q-{)bZx?n0H(@E!#%Qdi0oo?P$dLzd# z(e1ps)=z@_EmLC)P8DQkHK%x`8$5JwT9@X87+Twd zMNl1Ww6$@9yPjY{gC5*n0>Rzg-45g6e{}toi%fKfPNl>NQ zeuw*2@C2JVKJ{V#R5hnv!nXNuDb#ygXcY_DDAta}7F*&F=|H*prKbZon$$S>pXb*g zJY>h{VLzSDJXmu^(O>5?KX!}tE@P3}9&=!r%d(I-5}#)jmW48%jfXhHi>tBV97 zYo%9|MEOvaU#a#7{TO$x8-M}z0idvHF;_*R&}VA)_@g(@eds@2)b?bwb9P2` zfm-iV{@T4BT^|T9TJq$r89o&hEdj(Q#L|=d&G1F(LN3aUZRBzue8$XLv~_&grLeafdHK^fGd{S0KHd*SbtdPUGibuL5#;eq;N6#v1M z^iJSHk9;6+#25PL-ZlNxDSaQQoUvk;Zu zzIBiM4WS*COT9&^IZNlh0REz}CoW zgx2<*3f7ua(&9}((bsj)m_^%@9*wum253dVn4$$w+?INkV1P3YR#7qCq=N^1?qGHZr3sULS;toS}Da<3eti?1maJcj7I2Z>8Q;~`8Bm%MO!EbJP zET4y^k=9ug9*OsHysi|V@eAh}&*lUpL0BYA>_W&}@Nr+CEHpx$c`f<*6bi>m)*5e( zEb5Fi4#swS!fj})Sbs=Pv8N2XHFwp2KPvBwF65$VMfVf6GHF3dL3HTkDU61#QUC0p z{r6V5Y4Rr0hKd%R(9kTK{=s|?$ag4;k@iF-`L|vvT=ySNywgZ#M!S6qA^~+?tx(&4 z?)QiBB4~_P=Xi7jt1`tGxIMhd%!vlFG#|>pId?}*r4`7R1?^l7X$M?RO@Cf zw%U&jBL}eAwU{^aArQDoIY_*PZV{I`c>1@2bhocC?oj?^actv!Uop0}dE~gG76Uh& zRHe>Qo59$XZU-UWc?-vUa1hR}hqLLcn&eL?caCaj>^SMgwC$=kaXfu)X$R{o*`sCl zrG~@xXaTio$6v~mE8oEK*~+=RBjh&Q#$9zYcC5GSEf__FiB9Gyd7#xS`|+ydSYoIQ?XXV$5N@75&45axO( zY}-Ty_?ar8tBu`R)Ja^@ixlIuv5tJXRA{Yr?n0ktvEKpT{u}Onx)>0shoeP%-;l`0 zSQnvUx5Hk@qq4lx!7+T@w`sON212_?$REEBs+2lAfuq^X`WCu|?HKSdk<(^0D#l_q zZiHiRe*I z3|3am2sx+V`UA$UUm|G3+66cONiJL3Dr!PXL>|2DSBQ%NYO5rTf#+1=b$~--Cd*x8 zDlk8F3gx$HxO^))B2&Y}2nDbBd`$z{2ii!LAKQt2>zn@W-Mnj%5HEsHx1si(sm_2m zdn#ZIhaG!#(aM=RT6XXhl&V8WSVsZ?1^%p7OO~gup_mBXeW8^vjtTE?Po+=S&!QIB8XSNx2zP2BKwy3FnA_i}&>gmE3jqu-jaOp-fn9`bzc}#UN4)PtwcfZG=7MfPw}gNPsYPxJ zzvVpcErh|W39o>a2wYzYP8UJh(SP4EHlT;Nm+dt-x5JzbkH``uz&Qcu{SKrdp)Qpy z&R#jQ*vZ^GM@h=dUnfqJu#F1dAhYZ4)}z&WbKJkJ-8kzEi$ST^wVAFy>A}DD!rD%H z2Gg;&1|sp;Qk=IHat;V8tZckQgO;OY@;ty8a!dUj6X2DG(y+tI@CY=yUGGQQ50CMj z5Ex&g!sBK5dsAf>>uVAouc8FilqHjC*|r(@wpOXfn=kkdGNe~0+Ds!4PJ(%!H6>%u zP0pD2oCLUN7V1fzW;u>CAxKSOCXe`KEl5j~Pc6R1=E^0!b+qsPIUT#!XfI-+vU+S;sOVjh-UbG6-qIVuf^R&Wj|IBTpSE?t@>J8T~dPC0(-&% z&-wePE{Jop-w!?lmZTIWb(JQg=Uwg6w19%SP#+x}46&B@_c(Ttr zUM}uAtYC4#`)UE$KpIaI=~-RLy?d015Y$h9yYJ|7##dkQ^B;V{E0WXVm?yf<_lDwv zc?fpmFKoAB&4wV22hFO0dLH|MmZRIs372(?ui4~0$74Q1ZPn+_MhcdVzT6J&!c_p3 zaR}G7E9?kq2enAJAQ5hZWJh(-YG&1AAW~_@^`nfk6b{nXS%SRiV=2NV94U=9WSSKlVCp;uhW{L7mAU!DS zI#`2nNUzi~c3c9Ta%a$SS&pxgvkyQk$WddL6sM5d{Nr~a1~r!0j<-4Ji#BxmZI)^$ z6brwmA)D+Cj6?6YcQ2FZ)g#AzdPi;%OqI;F1N>ZQ@0lL%0tKG(;`A{3_0w+>@LLqjxlf=hc)yWeMNpr%w=`8Ctd}Uw`mKjDdRIy6!%}9FndA~~!CwVL_4n$i52jr$Va*n}eq|+20tg#RDqRGbUR)u?%Xq8?8`&$t=rbGnC?p$C+@#y2V zjEf;>%K0kh1uHNnBHIT&%R^cIgaZslZ z@(ym*qhH*xULHBxstF|?9qj;CIYFTo?##ur{*TWP+?g{h+VRH-#*#z=xg$*SKEfQ} zUJ0+re04M+4Q`d7$t7J%auOy~z+nozy}0O{`>KLvzwHD;z@YZ@xkx)Hn-P)wigUPV zqb!tgZ#jt@;X7{Z+z_r4$DGTAFprB6)ZEXZ(6wl(vR%HoEjl(_n=u&(Rj_DLgSmOi z(|(0xsAYX9VsIhZJ_v+p3i_o_eV$4C<^Fy#P}5oDE7to*)>hFiFZ#vEuy}FwTX6h* z`@!(7sK6)CADAGKyuvbw<=NUc;H@KRUH=?$2mGswW-xvd~9P zl&k&-n3Kv@E0NK;FK79EQ@5`tDM*^?Ew=Kkm65-K1V*FSjV!MuW8M^C3&iUpQcj-3 z-gU(tbVJp}1npD-&^fjgr~=Trq>YE_d4J1QWYrlsSU{8)?R11@9PwR#Cy3F%FX{4!NAt8P4Qmp7PYe?kK2RFm0p;%kmkbuF1f-gz(>}nfmNkD8_(pWW^B^TwlT0s z0?@Eqz8~kOivR9Xv zG}Wz)8#82*l@&DqQkYRX!LVjYqCT~skWJI>roo#v<(o`+B`Us>R6Z?U9B%zL$|;I= zO7KO1h*;H?E5o@~$_(yrRdj#0bOf(~UX)Y*AKU9Si#~5_DS=cOE$@9p>B6Fe z^YPnZmm&7J8gUs`m?3 zfp@#cXNml!|D0CBB=yZ7wML(YuD+YkHtK^sD%jsfRxx(X;!IxlSQJL3Z9?o$@Gu;SIvj zcN8`P*D~WEL8Gi8GNmwoIHfT#_bl`F6Y0>Phv(LSU@Y5%_*1{kYW5q2>u6ZF6FUow3)j{RzjaZ) zs68!fX%MaZ0wN^rvY zdZQBjhe;ls=dj9R-Do=S=O>!G<9^ww?cYFfB9KoXZt46chQQ0Wc|$=%Mxx5pf(BnZ ze2xwH0ssEL7v$s}jma88`p$z8pA5(GV5Fws$_Yt522R;M(VX`;li%~B*hhg$=Z~$_ zHsvn^!o^-l>RrR+e?PH|$fX`0F6#jY?7bnhAA*KIT{f@998*1_V5Eh7dA`&N6$a(~ z%%O|%5+t-u-%FUfK0s@=hTuYCr?_q^pq}gksUV8#$EiUsl7COWd|;rG3F9K;7d}-j zY@)@|nOA#-94#53+$hGv^vF9?3p0z4W>>$P;oL? z!Lt$23C#6w;PD}qbTt-Vmk0&evEwt{4*Yu-rM2@!}wgAKJ00zDU(uS&X!49~)8ZIv;7O z2%XL5H_4>}?L$v9&<}TJ7A%$@O+m!coKz+;Sons}+?7Dy%t35~Zj^Zw)DAp>oGWm#yg)w`mt2N}wRI0AJ04&VLLZxoe`=0SL#ds_NX2_B-&Ao^cQ-DI2nqRf>O+{5qCSwTwP z=f5wJSdji0iVS)w;T`&~p<+73bO+d6tEJUgt)d`~PnjryWlwuj*&+CcwXd4K_R(-^ zI)+ncqS=f;zd)o4yPij%!{597EKj}MAS>mfVsbjl{skyTKU(!ym{*C;OYsP^StyzC zlRXc`N5EjjYKZji6y6iRh}X+8{f&=hN4`ic~(-C81x=CZ-2T>YGXpveIBql}&e{6rufm>E7ph>=?E)z~`uOY5G#F+~>qa}=B z2`jM?D5;2_GgEiw5bvJ`UOlQ670I;>4#rueK4rf!yD^A%8`vry9m1fxpq#Kf0Tgn8KTb^=^>QXrkfhL{YLtpO2C~Uxq=L3H8up0>4PGpy zAo72qij#v3VHP%hgO_Te z)y|+jM_U#aC0g1QEn9IAcl8chdcWj`@#SIVJqt3T8b@k@R!MRF--z>_)R-!a1#M6s zy=|Y7P7kET4V}lF%7}xunN%!=T}4=a0GOCwlG*tMDwEL$A}B}7VmlZ)l}v!FnP1cF z;eENCo+~es)}D?VUAuDY(m`-)Cw7oeUZrL+sPGMmBH6G?$JlTPT@~1_!$E)&VQ9xU z2_9oQkoqEc1*(fy=8O(~vN)BkX1Lrev?0Wa3Xy7K?}cpyG8NceI8;FcX#qDZ!|bs~ z=PmLJFebbKqx4z)il;GfYxEyv1_Y%ofj+pC0=XmQv?*E-Y!I7^H|=`HfU=h*Ga(PPbLHEyjLItR^}5zS)lhS z#|R;MfB{z3P+nZ*N0ZW#2m1(e&oxiiSO@vC7bS-Z;;JqQ#lHx=k3fN22$vl7piP4U z1jp!H^vWSx|Dn*qAKsv|gt&?t)^oyKtd|6ohE_P#`afuOoL>Bj0uQ(Hzvk`J7%eg+ z9ZHa%AlVJ#H>;n5*68CdP&@rn z*sIdx)wMa0Sb)l&KiyOupOA<<<73O!GYm#K7|O7ei{6%--XZUPUok`}dXiNK>8%!C z7`YmBp(lhtauu!r=#vJO5|S&N#@w!C`Q!znWc)SexD;PPx%<6~CstedcYymPas5dvlH#JLPSGXjZL3F7!ssm61zaD-cJHN->N7Du{tuI`wy`$99oZ~zx) zM31!CI^b!#p`aFUGU^G+8gg1i)8QP+>V47+N@pisXgH^dZ@od1sWDz z`2z)paV!uCX{eOBz{&#MjiBCd0moSd3qPM^BPGq*5y9R$Yo^w))86R%^^pXFIE1hh ze+CXJi*lvr1u9mbg+18K_cQzHK1fv6!B%IP6V52RDamrIjEc4vUG_FE!GCaOz`Fy6`b%-9-dn2=@8Z?{K1eZqwA> z?#oc@^*ZFDbm62;>`i-B&Kp&)NA(2!0*U{rr|4>D9tFbWAvh9fV_nJKm4BPY$eR^! z=@RI9x2~JehphoWp)=k=o;wqIsL01o=6n*Ur_@a5^b2Z$jlRb4U3IHPKmqNz(+BwH zh34GuLn9=*j{0w^L)58IO(Qc$(1N@*vHlEnuH=;zqrejz;)+n*oSenX)QeWT`4tJN zaI(o0Phel!5VsScnis@?-GO=*38VFjwD~vd_!1x2bj4h`5?Gmhh^iBcbqnY8G1Z!QCl6|!CY4` zvxr*a+d_B~SxIIZ0hb+d!8(4op>WlCOAx|S4DOvNtOUgz6n|i;6xt^>=J=oM+5yAC zs!_c66ObxFmdeH1RlMSg8xxzlbO=cvj0TCPD-)zvRr`Qr84TLQ(nXzu2y@)Au3nj& zZ~%xkDTC7l$$AB>!H1j5#I55sb+)$9UXIb3zt*Z*bl7~9g@Tqg*#vg8&HNcs0r7~~c7I$bRs zsBD&$VurLw_jGInRMA%oc&%jBI$mRJnLm^Jt4RCHCZNXVDV(ZT?uXl2ekkJQ6b0EE zBLafsUk?1iJ==9$Yl)Nf_bpvo#BI`05wHBc>Tj4O8VS?Xf2}7K*t2KDgGVFSLEkR* z$`4m*xN6;RjrCybi66ZCmS(cvk~_s~`d`IN{*k?FTu*z&$_~Sjg0(W)cpm_1S`BYh!1% zLe{pM&sCyq_0TAF4M&320HSs>2vnhlx5Bj;9ql;r6zv*Bu~u07T!8s8$>XmpE_dHN z?!uRuX%^{a9p5hlo%rSt$D2?1RA#fS$Zi?kn6Z7o4O&mgpXB?K+Vr;M6FY z+^%M3AuEBt7=}WdMz5WTxB>!sUV--#LpnQw>&%ip%Xg!9fC9p^oQFgj26k$w((bZ$ z!&Kj1N655s)OPI-lc!7U6|f~gny&JM3!m%$z-*54DdxlZZ#=g(ejJwF+}Be^;+c!& z@2qZmW!#YMj1q@%TPOttXIomdNY%ERC{5o}zPD9X-SL{C@5p-Hqi zNL|B_?6HEC-AB@zG~f3AGP7&UZ#epPlYj0o_{jwX@*m-82}k7|;#@7E>g~`Y++>7a zPQ5WsbLIL!=I~4fc1rV2%yey}D*lF6@p*!upB~+PK8W<&wU4lP^iqKo;s z>%$O=lHv_=(+th!(l_k#MHtg}-YPfTp82jx5&9>C4S$9Ag=QZZ&(c?{PL)_^ZA1|G z%yiBRdZJ%go$Q@%y_OJ(3AaUG1m2}^#hYuTiXT@|Alw{n&mj32J`rBjo402hqvPT| z0wmJVz7US>b{jTJVfSTd%Hv#%}`xT%(uxf$SS~o>L|0- zXLB)&@`RP((x58E+lz&}(40N;vAy7i3U>l%gs;$%;G&#;+CaeAo@##-XVeT@%ShdIVojU_5Fwvpc zaOJZS`g&eX&J5q>uP-TEVRRzHP;T3&Q75CD8S{h>Gz09OI?Ak&n?5uGiC#^6uXi^8 z7BY=@@t$j*MWE=dAVzz4f^=GPmgs=*3k>4|&s(j zC>ii-j+|--gdN2f7DRbNC9o%b9Z_+)iD;)-X#h&{f;u&5sS3_{7AgLj)zJMXsxE;$ z{d(kod7lMSYY+YkuvwR5n-{lR=ECG+F}?-9Gi#+RNaMMfF3jYrrxKl33q1q|VAwIY zjh7bJ9KHM3P(cc&v&qTrCdSAUfDHmxTbC5cIa;pMM;Uq45iHaL5wt$9aLFpJs8mgI zOlh^*dm{ovfmD4x_97uyBg4{pK6Re@s!@PMg-mH}0YjDaNJs^juIV6e0N885)O)_% zDU}@KfknRHeHpGGX`wFK9OZc7y(jSk>_YrFdwy2?CmzN5L zZe#v=2xPS2!pXTw-_gbLzFC;tgemWDE9Nv2!HepuPzW_0IGB$cykQ|CY$L zPwm8%WZzj!lEHgk3PHdvo42i&NHn)t^feRW{`{K+=p)=ZY<-0rU(vPJH=xXew4tCpi##!1eu(J(?~rE5uAm4)hd3WZ6R;47cgOH z{yP~4?#0^%sU?o?HE;WG+XNh@tU*uQTW}Ttp;6VOtYw>;?K+V7Ink#gTuSy&pvP#| zkR5F6NanhDcm?fNoRmnDdBGT@-~)a3b(PYK2?SejZ*aV3?vcorH`OUB?1&u-CChwY=#gwcr@pr%DlS!)Z03wJ zkoWG-$`2fiRS2HZCB8nQGS{2C4#we7?={znsn->CP1_>#_-lQtv+GXUu|da?qKkhk zwBMt2!fooNBq~zyyN(3iITJY9#tu{Ae$5z z8EJY11;Q$z0JA1A7(7?#{jpMAqGMrxAeHDn`osSvLf+l*f!_2Qkm=DLV>v)=wbnK4 zGAw36j(Fy$_^b55`EPls4Ywy;scqf=DqEUGA3UJyX=!lXR7=zrQnqEr1AA0{Xk#3* zO49b*ypS|aTGfZZ{?u2P4iT74;yGV2>_EoMSj77$E=T6NUV{MxfJeX`0r(QM2d^!i zjnOv_#m4KV2_tHcc&P8u6^1YCWyBR5w&bF}Gq9G)>`#_3gdI~LoGgI3K@-)k3TNW| zInp9hbt=~ES`w?G_5CUOKCEJtMnRL!I!HK={uPaC4b@8{Q_!CES2GGZ z6$`;4=DpNyC!x5Z0>Ikjo-Lto_Z!%fureH+$3tIDUt|)+CD~X7Q>+j5Mga4MIf>um zqOCLYP`<0I1h&@VtOkqIu3KhO|5a}NF?o`V zGx&E0NTZ76CKmrXX1UCv(HTn}At(m4ny5CR*sqA1(;pbiLbxOT)Oo?-s-nfa6OM6WpRlY7Hd+>mS6etS>xC>IwyUt= zqXt5ju`vp$y>Qs4(2L^e1~uxn%Kw4-?siVae-k`PDJr|tPL29lWn8TN;}upH#aXR& zr5ky(rQD+`cwOH<4Hi39HTC4{j`|XvY9i`lgI`?AafnY+&vYGKa)YOVbZ( zv);lEK^4VR0`lHY%2?{!NVX~}$ZWFGXhd!Ig@&6f`-N?KIOp%-E^OlIF)SZZ$~sg) zz9C7ZJt4_vw;^owl29g1@x39~&M1YguPL?2v24Jbpb4q8uk6F#waz=OpoQb*1N&JE zBM$>wa4|xU3vS$nR86F!!i82Fg>$0oB91=+uQmc|@7CqV`CP*DpPdlrko?Ers@CC~ z-v@g1v|k}L|0$>ZX|*cYX8A3v%56{u6>pcJvpOGz%p>85{Hrp+V&?Z2*@ZDrcCuYg+Wol=DG%zYhQ}?-XMcd5K3BF=2u!{?c zZAar#{}&~TWs@BOE)h_e39+Qngl3GA>1X$Oc>_EM{gL!=P|ox=-jO?4{ZZt#@Snj& zfnc^f6X6X0_RM&zi9HQH=;z?-Ax+N1B7nyLQ1=rrc~h!tP;nRVYHLSh{;vravH9|o zbhno9raJXn&_IqBL)l7(xNV&-uU%T_5zC4H_rj~#9MK=kYh_ya`x5!`d1e}&3n}$~ z$*3wi`aj_2#7;6?#7Wm}!iBiSy5mrP?n5a*ZS>o8SdIldUPuh3IVRSuy)bPP602Xv z{1e}kVYFBg_^qMwwlMz7I|z2ZO9o~Mf4&;f>jwWU)R@6;xc~vIz7*q-qkmo0{V)js ziq8OfJ|Mz9x_`>cMz7)G^1Fv@1=HV6^zzg&q7LLDPMp@qvhjR24E>%YCaY3`>{yMG&oFR4qWxrsYmJ5`!rpGEhrASh z|57s&s1gB98{a>|AJ;t^IH*$N3de`zNLoe1`U98YN0`2l{bTG3br0QpFQ|B{X|*IN zJ60u#$Z(3#u1cZwU5xI5{rOttJHI-V?s=EYuDn4^;fhJFkQ=0%pUNPQ!h-u-8)RLe z@5YF1AJ<#lw&;$&Y?;5bG_KDN$(n`m)21UW47?BK@-Dqd9?m|0jor z&=TUNiI@5p>fr)`iEr{)SG+V-9veZ5%?e(HwQl>Fsteix+W^Wnk@#-$=>C_|+}sh- z46e3K@@P1Z^@Ju3X*bfJ$UhQT>`o3hZC`yDHbWAoJ3b`S8GWK@Z>pg?x}8YvewY^N zRNs))&=S)e<^Jtd=rVDb=kC<_j$PMPUB&xz36!X^OtU|XrlZ`5veOUgG54jk6L-R& zyt#R=cx_zn9+0b-+kkhmXJf$eAi_|G)vAiTrs2q!Y~q#u+=0HDWF}|Ui*>%FQFr5y z_bOUyBHsSc6Tzhivt`C3HWLdlb>>WIeDE&})A0V$={g{Q@msEs+dU?F&V-H<-1cxWpj?x~c!s)SmD<-ZHZzhtp*&#Uqe~EF zTCV+(2b~7l-XC+ip0HGxo_?5mU^%Ks(-^0lOVF@x_Mxco&N0|X7K$h7Haf?KAs`z8 zc=w}+!9&5NZcC)c5rfUPTHpKirBoU~ElDdKd~aw?|K&7fBU9*onJ8#XeaA`QGe)M* z_IKnp&M-?idJZz`I|#09;^FkBSprT`XKvz-%RudGWNx~V^oF7u3>KX2;zys*nDuny zZk@j$c_^Y^edmVRP#dT)aCiB?-5cvd8dRCMe zMzG+9oA9NE;s!W?PXHSlSsP;2fLDOet_#s_h=zkBspZjNYB5AG?iGN0s5(H*3Jw!l z(*s_dUl-(FevF%rh8q}N@!jo*hQ`Ffy`J%nZ{#|<6y8|s6lNa#LNG1TQKzzoKn6y9Q#nj+Sp>_YI=iWlt2eGjeS&w!7Qk8h8t~k}(&n z5w(#Ccip0W!Um*+3jQkLFpzrWU-r4O4Wd=%P1H5VX%{*$$b91~1rBj{gZJU0)^xSm zHK%WKW(Y@7yV*po+Y*qe*x8VuHHas^9X(%mWkOs@m;b6;;WC8A&1_QXx}6@nZy`^t zr@1@bdS65&{e{ulT?SsRESe5t+r>Yg)VS)xXeiP}_-wvYp-9F#03R=h9f0kX_iqSZ zuQ-2G4T3CshyGtrJ2}5XRaMLn3Lj>m5g!)ZEouOgqjjqE#mcZ;&Omz3^Iou<=S6sa zw6`yN2l4~;67-oAXTp;ZHbhfHVd8@Oo@OkA$Xs-mQOjHO&oAuC6x5;iMQy2Y-6O_b z6y6gzgCVy>om>p)P$dw$^%RbQ6RdtlXs`3=0P>Q&H@QrC&|q0lR_ZQ9DfG~VeG|0no3`phj4xiImNI-n@1HmoPAKjg zrgj=tRbk0CbQEkAV;UwR6dUaQXke*a>O5lcM?*`!ry_-FC7RP91UEau9`>^Mra~lq zYfSXDCnZ5bJ?*_nnx#clsxm4_Z)o755~)}m|0rf!%eXUaS^i}Ir|f16^;ma0m2eB<1738LVaw{azjoUSg3zeSH*-w{ zC>}KB7;0_%`^cNXn+(KE{Uh}}p1vu20R@4oFh=I|+b9nWwA&}U43_jI0 zbz2x2qLz`wRz*#>Cz;u%4S(y;2^Wliks!NNznl>v^oFU-MM(V~S=Pixl-5i%LUA?^ z<1}bxl3BNW?DTjgi@(JkcIN}i%q#u1U%%`l*hX;%vLA1G&`Q4m6f)v6VhRqoMh z-TAzNUk$u*(VRl@-X(um_j={K{mrQLH7VFu5UlfUi5a5T8!^_rG`7&(9n0rjK|#9K z3%3cZFEIV8VC#5yOlQYiSEu)7GH=o$nC{2>zC{~9+!oS-G<6bBJ`oRS$v0p>6>KoQ zOHKL?3#{HwW_weMTL^h3adWXjev_(uHc-#-`2qT|fY{Lbu01V{QjZ6*MbyeRkYV5j zrH4_CBhQ(0@=F88s5oB0&SN((juKe>j8ZTxV$I$|TZh^tn4ToD^RSN0eZ2|?nkMcM zVzSOLj(muQLV2fiBBK@E4kMX^tc|A@UXLKL_5Se+*=VA`OS`+r)qM*m#Hq$-DDYw3 z9`^H5>x*8UxyX4l>OAV3wvX#gfh+k0l2yrdmb&FY7&Kr~rs;OP=lFm^&hAwiCtkL@ zz1WR(?c0E6fLdB|zL$m}rwtWnw^_6%KiKg}{2}rd!@V4R0>&p*6qi z4x#>y@&l8kg6IloIO|UiM*%N&nrT$8W+((reeeE>5KYWJnesN@nvGTS8!^QwYg!7= z#N|R6$)0<0$FrDMwPI$*dkc}!=2+T)F;S;AT&NxkDZ{=G9fNL zB1+G}H)=1C$BgjAHS9$2Dfidbkcph(onEB&FMML<6}5X5+j|t4Xv7SiJznF|4y;?q z)row1`$YyXnfO=ui){+}j;~HOB+^-|jC7h;Dk5tFw1vWEO zN3ljC-?A(*-}rlcwmB4T1GA0W-=tUNl15sCG6io?C|00cLgmfm(&br+H6oaf&v;ka zT0t)$iRqqXQhzKW6)zEAz>1OyT%k%RW2jpQ$&9m^!seFdVyl;^W$O{dBj4zUe+J~v z0J+2M1MgQSbl-0!kgJvvgDM=X5b($uYN3goRkTlZXWX_X(hbT)KCTC@a zC3`?t)0H^4E9vtJo`MZ+p+I{(TJFk0v}1H3thAI6Z95F5=o@_0GGm$cVuSS6Oxdq` z+9k?Ar2nB@$jT568|*G~+b9t#Qq8=dgbckXz~Ky2_f;~#f@#mQF?USV6XH^GEOXd` z1QXHc`N5`o$N3Sk^S6v>1Z~zoXD(XdooIST2b0exJ`!Pcm3(+jyA9T;x4xppItA1W z_BOM8g6A!gwFpPQ2=qMuXh*=nGo;B|RL%$dybwJCI>um?Aiy4;?+RIk{!tTT=Ecbg zVU_Tf6(q@>DeRBBer~A$(6PVM z9X<3?py+0NrU~hk>0#WalmwJ4DVQi1+nIoT`gJPoorz%xhFor22u=i*omn1u4$IHk z6&IJ_D@u#v%HLx+ToS+2ay*PA&I%8(*m4n^Xo03W#u@1pjl~mY*Hd+k9Z2y1gYC#U zv23>xbb4@6&-wtGRE@R_+3xu{JVsT>*}i$(OFTk|rG{w8!$D5;$66$cL0=zz6I-Hv zr(5n)M#0Uzv2X&FTZ@SHy<+Y=jf8|g&Cxp8O!b4a*!1}2^W*CC{WGDGkPOk(&cqqy zWNK*p-<7?Q6(S2ODUkHP3qC$32}>K0sS}fgjUmWX%+%Q4#FRvfo1LP8f8)6`}!WGCP9wxLf1DKm**Z( z3-~6^7nqR-6LnuG8zSsWex}D&9___P0;z+7lO{=8v7f!~LT_Jqb*gbkdI+p>HKx&} zgE}1)8!D@|yL2!^M2gaBw$?4{iJ^4cHc*LD@)|v;=5yL9)#ghMsn^)x?TEEx1#CaH zQTd6xYMQSt8?6Z>p1F$*2obKrOkmktQYH(<#bX6pqdC#>mLaP+#kEzfC=3W;DLtHS zW~#$|T;O+LR}=nt%y?|%CdW|NwYu4oZoQOeXXXscy+W>KrD~UC|JJv=~UfgQt;PwO+ z3_+y$&Gl#04SjZpu}+kAamx91go(JUfie0~?@3P|L`1^Z9}m%skD@&lcOpu$vd&k= zr`8qndtEl?RBj}C5Wkg`ApdvGS-Ji%HD_n$Wc~k&&OaJM!E5K{C;lNcXrb>fK@xR? ze{Fl-MIc}z?lv`u7L*?8x2+`^q4kZWg7$*by|#@72Qi|6CZh86u{pEj*L`k>NAd?= z^Lz99wp}J(Z|dW#R74$tk22T@azk{nSTez2H+BH;_dIXE_c+|W^^x^~mFdR(PUn5v zF^X>Y`B57=)cr|`W^UB-K7GMpr?h=;ws6s$d6U!i{&XS8GN29R@HP%l`gs={oX{cF z3|nh2NZj09cjAy}ru^}^f8^(jB?3!!{^mwGXPzhkNbNe}$Q8Icahtf<-cE`x4;v~i z_`px}Ek$$v{LmNtxOij|{4&Y{%8zO={matKX~{|Lc#N#)>&MFD9R#_3W-zmthXa3e zFIK#i)=j2F;8K|{NNPdv-SnK(u*ayxlukOvmf~JSEzI;oJ)jwvh6O5~7QsnA*J~(3 z(J~pKo@M~uvdJnE*UZ|1N>T&%k2-8cf67{r1nV{Op(zWB%8-0%&e)>f31>rvmshI8 z+;fAF8o^b^M!KGhS$f9IcHac88k}I`s=C^Do8Nz~+z1P6CIg|ehO|Zl-CiI4)5UEl zwH&AtlLM7{0K5$t^fqLu{+eX4&Y3dzO{SM^{o+J>3EGR~cUGJ+h4yfQn)ro1;bA(! zD(BvqL#1W)w;r{etuN1Nm+>z(g|e4E<{jG)cGhTTcRSS~sG&~``x#@oE>%#UkX}lP z-QcOUH4(lzrp^Jo&}c)y{flxzC+3aU0Smm2OPD5^>E%qK0j@x_jb9}4VN729>}p+p zywJB@wtq9Bh7&{`0ve0M6JcEJBy?J8FhI zO3+#LEyUqEtC(VxLG(A7KerodCQzoK750c|3PVk+fQ}8qGuUw6`t_nVMp+g(2IQK4 zj&Ei%x45q2Le_&~LLt4Jcv&hTmi*e>v7Hy4%oGg<-F#b2O=KsQhVMK}LAIs(-czXR zSz=ZNnJM1NJ6e}AX)jI@BGWP2AZop9n5KQN0~q<-I!;B1V;!#~&8wDBnCxHuOMQcb z7<$1${V7ALrj588J?e4<+_$=$_NwH}3;TO(w1uIK)eIqr#J+Kv(SPgv%HlB_#h8FSHegX zxe`kCVu+X$h@4|7ah@y0TX`f3cCf?gTmsDg{0W+X4xwFeL>sU~OLC;G?O7Xi?MR)y z_nzT6|0%ER_4OPw)Fs})bP(g4B3{g$x6y12)7nDd-{5_3fkhr0qZ=iG(MsGaL-`)uyqZ z1E>RS{lZy-=GmJ;mv(Dcx6mmjm(m=6Q5|lb4TMf0VnVimucaSw?vS0?Y&WbY%uc^h z2Kf9`YDGw-s+dfn>2+1+&cL_GjPraJ&oiBt! zlDgn(?qx-{Ft6XsibMPaO zF2OO{FpsH;MA>g)@&xr?lqZ0(GCJ!rnU)==G&1X3F&{wDK7XQH(zX)O9KcEPkGxX2 zd}F|16!}Ou{&FE&sSzf;vf57KC<)~AnxkJEIgY=36%95~tZFfwM-}bY!nQM>TB#7j zI-=inM)Iu75YZ19OoUMn3&=m7_p-f)=bqjr7b`yq8WlRCg%*Dca6SbXvng}NE0e%5 zIN&50=%fh~{SRaB7%NKDY>O`2YcJcjZQHhOdoSCzZQHhO+t%CX-JAQ)%XfdAPI{)1 zuFOulQ)5=u7}Yw3A6*7KlP4Mape;5pqX&Jg8DvgDQo0Z5*q7 zU;?W=jSZ94?4W-~nao;NVMSG@ejwZszMWCJ*nuCppX?Z{}0Yu7FrtMG+vf zOJxQ}oJ1u$X3!^gAu7|Xxmn)Qi~+?NWU2I3RH=xM!^IMwx&0FT7WmYw#4uss-SnVV z4C$&0*dtmLfo(=-Ij;vROnT3~;mP`B8N50|Al@mnp7Gy0jAEOT;_94@!to@sPeKaD zw~+z3HB*sF?|%M?gllMgL>b=njJdO3J#vfj3say-uH#xfUM}%-lCwj?w1U~ZWa9)Y zX!>1PE_FPm0XT^;;bHVR6~Hq#eN&<|c9@)%lMnr`3GMUP8VvS1S#ICa;)#Tws*s5;n`2R)V?lWfd@O zd8vj-V}`R(_#69@b}mR@RFigYI;w>;w9qf~Bm~dAXIx>rH6>BQVsFcy$ABD%JC@O8 zg7%PCW6+RMd8u>A`vWtoW7LG#PVegWG13VK4+PSO7CRmkgN0IFZTlFF<-+waWN2-m z^I{Z>8`~gT55AMt~13;sd(GCoV07!kR& z*H3^?>`{9)tLE7n11jQ1Me6gX7RxaQ_Ioaxu#em1gJ+x>w!5#tFm(s%i!J?@`6|4o zn#YZ4-8$-p`1Vo|Gb51=MK4#`eP#_HAAHFq#)Ey-No$0ZD4vQ0w46Kkx`~C??SUPX zWafa8(6WL%k$ZBqqp2NlRSlVuTYNT|zO!uy!olLsD?~-q=|$BJEdo_-9{mdEpiTqp zeM9coxvfc!It}t?umJwho*%VG0SV>se`6xzxxeMDulfcO<-5z5u8c$n7bv$aqE=Tx(Yg@F&rS72% z0MgZnz{V?%O7u74{>&GXFWuo(1Qq+WbS--=gFKuQO#0dZvb%m@GL^uX$H4EIadxH6 zqTE?I>trVbe(~YbPtG;6=! zAgAfnH72q+R=2$1wLQZ7Ikr;QNHd%lZ6(Q!4T7oknU)NPL7jC~!*K{Zw%=N=ZCqVS2bo57W+&{6W}R-=;zT-aM|SiO?PxW0syfOQXJAvb`&MLV-lnBEaj;H3I5<8^P>7;nL)nNDAI+i5M-j#r&(pF@>zNZt zLgWySb4YSwt1D?bwii=Tt+r6v9o8NBE+ZLF<`rig4aGl`npElt<1EW#IwJtBG+_x{ zaeC*SpL42no{W>kBhx@&-Y&Ba9sgt3~Pv9?6PX!By)!&k@*k1<3swSlpCJKcnx zj||?V(B>%?mu?imCDo*Uij~D)lR@c}HvDR00>oO_+8zbs47ur?k#NVXrsw~Op_rR< zi8f$Uf>#7`o&4c{DIYSH#WIBzB`3QD(hQE49gYpX4E9lf_ooka8iJpue}o3RcuYwi zL1l~=+2!^@J=bjFLlth(q~GCH0-9iiV$1D9u0*%#D(Kene)jL7XGXq{WspMc5021# zUCpbn68aQ%pwWnnbLstj^+5@@7F700&p62Bxc*(B&*vQHXk+wI8Zk)e`$SU~kpQ%jx2(+qOJKRPWpZF z%MCZjvpiRNY8VzqFtc(PxfxRJ(d)YB$+%IMKV$O(Ts_NNVH_8$ z%lPIlwrqy6<)}u|6z7Xybs<6@8Gk8p1E0S2Ch7jB^sM~ggVApVKUtB`e+BMQsZXmW-RB>lwzk&C6;CB=o%sl$(Q5fs_xhQUN! zazF!{D~;%LW-Yya34Iu*W>Eo|TZSRmQT|ISX>>R`MdA$%i{BeHs9x1{g(B>^AQG9n znMdV=l{8qQOP!#WHn91j!>pHv`QCg0wxzRTqYSe9?j4Ur+0g#3TkUN-yhpEV8xwRs zAOOIjlW?k5EhW+h2sK=yy#RXiLT4uH+?T-v1I^sbhn82PN?dME%@OdMZml?Y~ z_x<=n8^p`sQYL9t6?ko6QW7fw{J%r|nT6_-@jkd_}z| z?m0Q?ytEyz#+4~Bg^#vSbXnV5B%Y_qD%5t&K8stdVCfqw8zL!8n>B|Vln8k_p3YXn zDI(0quyl`x$(-G(R%>t~t#3NU-QymAe$g9p3KgXqk2zBl-V=4nSQA33ru~N|NeZ7x zqAPRH%M)*@8g^_PFs;i%13NEtDSe*XQcV5o!{8~=Y+;!;!TofMJ6Gzj*w(jw9gNvY z%B#NUg%uh_v{lK|87TiAY=8c>!rLB;PpI+VdCn&{dQOwx0Ifdrq1G?Yc^~8n9nt#YxQ`~9nzM5e7v1Pg%5q5HLh(uWs8*&J1bDMayODTysfExlp4mC6p5)mdn(Zq zQ9nB)f^RQnR9lC`J&d^_($c0ExMA!-lk8k1rs?7}P_YNT#kG&OEbj-`E^l z$Rph08kEo(Xuzt2w$IrtKG)-I zC;OK{8OVL@eFEmt{m$Q>(>bG$^0{5d+pU>d827P!l_w9m=jnWFy0KYhnX_YNwXPBdYQHq|sp?C<9HX5~1&`C@9k5Gf9zrOsX;UE-3@K*q0b;53o>nMF z3V#L~)QuJ^q|%S`b+d~qcjtC}Lekwp2~GBzspX^b#0@HR{j6O4$c^=!opRVG)NqOx zX$7vOFTIg;b@kF9t%_zi0W8lW|K?#KHKiQp6(^@aycO+1@V*AZx5pcb5mT^-t7dni zKn|3$qIL1B#Koo#&!MAr!X*bMu=->#1n?}jHN+sg^Y8+`%LjL!UA(%eNyN4` znb~c-xc$;@3JrAaU-w5cFsIv_7}T;GP7cc5A`7%WhQfI8K7vKxxE~jC)!fD@4MRi) zCQ&H@B2W9&;KHf%lNqD7{!Mq}67-vO+#0AjU+Uw)SF(4um_DZ8ykWL;QI6W!AHi|> zFGR5EABe%s$z+!MmrWVVMo>A}?_5Iwf;ixe`ahe=&`i5o$7l)}a=LcsY}YCQ6>P~0 z4W>>Z%L4KZ6(e5oi?J1aDl&hYKi8?XD6o(x3ZvF7cx7!#eLqT43*Xrr&np+(Tk$B; z|6I^^1ei%DXOzC3_fE#!*-kCx@l6N79_pRSzbk#DlH#(Wz*Y`B3z$(Na@_MWb*x_{ ze3+`u;I(0o(Mm6?N;c^_4=4`TS#adN118bx%0c#v4BIhZFrPtPiwBmR%h@{cg+_gz zZRP%+`vFconwR`%=#iP_e-e6RU}0eX@1e(G^>JHbHkj_yfAQw(_%a-NZ-@lQxJ}|7 zP>!a}oAx1yEGb_;Bnb&>7mpGfIr_TEngu}x?Ht_VoMe@fANAzCA50fd#aT(RMC6vm zOco8VQhu_FTPJNGSX~s@dKd4vH{&Haze>61(X&5N-&Tq^RW>sht$MDQzwcWqk0h0T z%lYP)%5%6&i4PRfwY^KXG6fYtOJ>i9Iyw+&%>vum%L1cSaI9x%OWT8ZZ2#0Z@!EL! z$*-v}4sS0HH@$44MO#j^A`4}Gx?;IkUg~-G+J1r;E)PGXji`MeyT%rrd=}y`S6l>3 z>TR?ko@}qLbKQC?a&L7FdN0Kajb`&fEUii(C)RF$Uc=52?b736!O?Hh{ zja+fer+9|!jm=Xr*0*A>X&MYLg) z-)9eqpszTW&A|8kwQ>6i&z2-bun(%4GHh@6oB7GQm-*WTjX|)nKHHV zRM)(2RT$sFzck~hHZ&V&8+`btdRkN0^0aKG0U*_8hayRg<2kX7%P6`gcsAP3lKFOK zcbHPgwfQIy&?MT~M9qfBnsPTA;^#?`aj|sf6oOBGsul#RvZLh~D(c=1f#HNZ8{77@ zg(bW+L0F#)gxIZtBg}9!&cvS~8=yJ)Q2NAu!(Cra3$(Ol~axMu-9bQrb1ery#B zQ^Mz48Jfo*1CWC~s!!*}7rttLWZsSjnAGYlQ}mpbt??qE*mNu0Sw$1g?dP{cg2G^* zWxEEs8$SN0XE!QLq|!;<<-J83#@k0H#XQs#&Nj1KW-c_gUiNvO=npE6H_8MCfV5E> zI>?EA7+j87WU$X%+^Dt0zgkVKQ+*1~b&}OC{$ix#bQwM0u5JL6wQ#A1Z11fnXI){z zpxbYjIT1!x`u>&VH7FLZVHMi3zJZOC7w{`wMbQoKf@bcAdY>dRA&*2`QYq{`N5fVg zIE(}>u!@VbuXP~$SXB8Tsv$^&2j`2NG*4x#t3FCcT|N%GR=-56ndBXzIPA^4M6ypD zm&*zUfggpw9Um)Di}o6ajEpJk+rru2m08W`oxqPj|Da9wGGbF-DW#iSloRpE17>V@xU zn>EzvX?JAThOta?b~vBzAqV%WLnAr}Fcc1C+}2mTrW0MTunhAD+EHTTnXbFZx%){5 z2fDZ2?yBRlT7u(b-F9c1?t=K$1*+5@;o3Sk=HDm8ex>Q zwtGPOYfL&4>0Hi3x3g5N99&}tnl_gkCptO!@_u#!RoEB$n!|tM=D%PY&s9yxt-+z{ za%zc7i48NY1MO^AI~ZU%dHDC?oT(qJqy{l|v@IHz3pFV#G8Kz+$`vB6Q-m#}Isu1H zR{^##)nm!F?Kzbzw)41l=)jw@DMaB9?n~09A4?6@Za0)YhN%-HBP{)wR1>LJNZqc# zff`x+0LPn*U#5Fa_A&vqk&mpW*G;bNQ#Hel7N|I{>)i%eIm^D+)jv2Rlb8``%Ysui z8lFLxpsL&nv)|X4^hFg`Jj!Lfjt2RrX%F7`IC>CS`6NkI**Z(!!IEkROy!ma}hmFQe548h4vBEUjwOxxR1k935hL|LHGS82%^zf{~Sl<-hxjX{J9DcBiYAjD{>Dqr$+*@ZC=_T*O$(yNlhCAwcYV;Q1ACer7rhpkar+= zZ%4!(4L7bGCgA%!6?X5Hjy*d(;5$`^Ff~KN_Rr@;)a&yF{0n^1m_NX$Bk(aEAD~o% z#AxCD)gp2yNDXje2vytHbuJ%7eiy@4)1MTe87RAdN-vtJB)?4yu~s=knA|0qC$o~7^O=)| zWnOeBG->m^?XRy$VG^-5C-4dR%vP z=Fw(AV{&Njg6koD7bd`SU338YZV85)cBH}=w~@}vrJUeK=biRD$eGqW#^Og(^ufky zq*#hOM2vTAioUDx{pQ57MOwLyxF8d*QO9+_%W-N|>hv2rBa&%caHfeBp>3xgi-of# z@fAdbvuBxT^mo}5p~g1pObbMGI_Z%WUC5nY$eaHv>!4Gz2&(bT-NK){wL|DgB#sxH zd7YVWT*1G0Qomo9H`XXNXV9JoVR!#|cf~Pl46Zug`bW+`hXab*x=`&#>&pl7ZS+K4 zi#1LR(=j;dyoF~O-%yxJO5r23h6v(N*e^@PZkodT6I%~&+`^P{sY*~_BSn7V1dF_y zVmsES2^AOT4$5l43>^Xxq|2Bl88gvul!LPT`-aMtf~|cl6XLZnMY3&Oo2*R;z8{(o z!ohfW$i#%|rTJ%_#YRsH9oNNo@awgNs=Gnvn7OHwMzd4X;&WoR9%6eMGQEFuIBT}* zBa5T>bcTksn9_trVzXRc(g`*~MbQy!krpf;5m&mzs19Ka;VXV;vDdiwVDmPN&`3E5 zcugP1^BIz=53(JRv*P1D`wZICM@BFDP*R8Fzw%mOxePXn8LN;SRI~ zWH}%#MnDU{f5-mtFBV0911qNZggFKJ8NiCm2&E7Jb3h|>69RN4+@wm4DQlamO6Q5e=v~xt3HGbCoyJ5~eKGoTSUilu6zdH~3k4juW!?ewh z1l40YzZU-9Rybx?+4HxgALAo-0s67pRaRui7_u?gFthf5dyQ;JN&M`u7TFca4{_yQL)WGQYVy!wdSvUs*<*hOulq~ z@x%|sv7^|i@?S|a>H;JN3tScd<9{P)*g@}|Jz*+;bkTGXO@CYIbn^7l;{x zJ%!8xJpV}gYfRDOzW(i~tB=+N5)r9&Fc#J61obpO+-3I7sjYoQC-FTV=%k&{4RVu&tji%U2A2|`^_`~y|pHQg;5s` zH*}TP1(c?!<{EHwEWFw{wNJd;C18C4=VeV%xaEuq2OkEC!oVtI7`tomf zn(CG9uRcez{u-EoB`#-+W2~Ozm?+%g(d7-R7GMj5kEYP8<{KCs=)$v2Ad_S&roJ18C&Ej zBF_SK$5(LDmg z{;6B2fFOIkLgBl8y;Liwo9oj%k8WS*2zKJ+rrg9Onq}*CGAg;lVTonb&hc5(7cLC{ zmOig6&bBz?AD&CFSaUl~dbVDT=?N%ZZq>>UZ}YY8yLa~{%CpIfz9$Rq${IsvlgqKv zMz63mBq;$4VO<)iK-vqu0)fv$IS4C0#bLcY7Z$a{T+mwF>=#{K#q92n1wz@Lj{s2- z{_Lp{h-rD4m8iWpz2Mj#4wF=OQ!{q#DXP(isL|X%n+hvGX9&!@G2}k?WQs-Z(@s)3 z@>-)|$Dd#f;jDiv^4(20&1FsGeifWyBQ73kSt78f{vjK9?1`)qfy<&}qclzJTsAa- z+Zi`e8#sK#eRp}ozzJ?~2xilRJn!|A?GMdexN1$TzVVrUhBN1L_N)Q0c@|(R?Ro}E zUu-)F#50zCQULM?ta6JH_rQ1AQ7oVvtW&P=R^lnf5xl*Rrqq&jg1w5`bRA$W`x;pW zP&y%WP_brK3gh3?S3ujr-KIdICn>6qpZ%Z3B->pCB`V@_tJn9x$Y4A51R+f2ya9XF z#pS4on@{yUKrQnDDL3_x&q*y0(AHe@Z{N{Hk3epBnndYXf!f9cK9}ufUT= zxzB*|-d%d_!Ya$5!pnmP95zK2pU1Uu{qNC6&4F6JUz5K8_*ZTA{|QoA|3~#y3>+*R z{~e?bYf9M>vBC7bs-3~BSH1%OO9*V}T-RpLcyV8As7MG!s#AZ*eNyM)m z&QFE?c|S)UNBo>2M!q9USG%KIyT|&RX+!Hb^7Vp8gT%VLbEq z(V2gojm=9iUbx?5@#3!6+2f?QXnVN2pUj09H1CB6iW%t}9XJKat=px*%3r2rkF-Bo z;GrB?N7N+2=6Uz=FWmfne#82Ft}hQCm}gxmu*Tk&)x0rA%;A(KtO7;cA!ZR&816qU zZ`MVmmOZbD3jv~;xHeJ5j+v`itOb6dyR@ekuj|kqW=cKQ^d2c-$S_vR`3KY;ii+*&U+acjs-IVwgGgE4Hx}AhRr8#CgI9Qz=wc*U&OoB%i9lhbaV+;x$s=~v z@2VU#GnvU$q(3$;n&111=)0+m2G3Jna9RQ`RRNF>Qg$-0OHO>tTCvD2ePK_umDnvF zY;6xq9j48e(Cs)Gd`R9C8qSasJE~^}DN_|COn3x7-=$AJE#BnS!386t%G5SXLnE4dR8 zecn&W9_?d5oYk7UTc=gAI|tjxfEF^TP=gZIe7Ku88~@9#Qu*W*j5Z{kcwI_rLV6Hd zaKE@Tt@(@-ZiF*$H;BNbow~e~g%Of+Kt$uEX{Lgb=8Br^a~-|-W-NyT5b8ZcMo95d zI`15lpitqKukv?VKVK9Z6V0DGF+048a?eEnkw7}=Zv&K6l-$X4E{M?!iJ~PAfs@M} z{FC(lkyS%w0KF=nbSb57X%xJV91fn-ie3OvhHl97H;m+;#+Ikdg~c7DtZ!E%8yq>6 zB;CIbWLs!^Vmv-LzG@Ismh$tq{^<|e!<0NJ?2B>!D|%t}j47fpAKl^b#JVimLFO>7 zJFx|dQ(3X;nC&0?5fo~2NpDRB27Odv)#|puwBhHR^zf}pTJvYLTdW_iH%F%UyR2C9 zX3W&9$=lrfc|_xkDe5!N$}ThjNu+klro$>$R?)MyD5wmzAa8AOk1`Bwb5IkNF;Rlo&H9u%+EbwtLj_~o=8xegu&o46X{8y|j*|=^Yz^o991ft1 zM^_8j0ai;KU1Vj~^>Y#`UpSH=?)4A&eQoXtwB4B^({mUwQe&vXYEH~O*S zXRwzMZP<{lmmP47zlzoCS~qs|TdshZ%RMyKKp z+bo~sJa`ravt`t%JhW zr;>63R81fL$OOo6$Ilsv6CTr4EXip#pk$oPnTY~j;6Nv#DO6qjghXO>7OgGzlG_40UM)<<>@9qLRmco^MV8PmU;mXv1Bcuve1$)E z+&@maec^k90;B4@>knDrEyI6;`PdZz=(Lfi9K>UX3-avt7<8d>VPFhDA2~Apk6&Rzcc+v zKKs*tYj3gBA?uZU2o~azlc$cgFuQSqBJm1~C}d#guE2BWb)M+!{upd{bv?7mqg1-^ zG}D59(+LID+!8Iq3&71;Lp+!D}Ws$r)%V^FagRqfuObt|kpamZyle-|~J{>5%IF6Dt*5d%)N&}0hZwW5RX#N5 zbu2}vwEv@i7$jQhhg5K*jXX}NLD@6S3Y%k@c!S~;D%1xY+RFeljS36}H{P;#z9M$( ztB&_$TI(r!Miu;Lg`-_+i%82p8=IIScgEreAW*K~2mBHp8t{KQdp5@ZQACQKo%O#v z`(};t1R^%L?pd`Xc=F6oBn5?ilM$SKEsu+nI|0Syi-R18SL~Bl8GnEjTL{ORMW+j)w!PWDRaY8OG%&zbnH?;eElK3rXXLvi`! zoLEVSwtdZH00(SmbQDpC&Dc8WSptx{-tGp;n7$u-#n-1emR(se-kL!*c3BGmoXUzd zx+z9JC}#R)a!cYGxxYETwZ@(Jj&F0Yq+A;;XxHUtQ_tm1^+>TyQ%g@%bMc}amecH6 zNjF|{m%s1t_Y8w^=QK5`zCw41v^ShQzmDHW&-G>p&}GpwSsnY<1uY&~;lrI8+@#HH z9_EVWl`Mbjzw;tX-}iU=KSy*J;lC-AeJ$0FVBb`#N$Fr5JY>tyV?D7Ba*Bi7 zqs%>D@-AITYzlAJ!<0f#ax6ICn8juNY1|dKZ#*Lxgdm)3>JT2W3k>;;tL-xyD20R-%N0ee z=MX|9Y1l>0fU%2s3hehH-FxjZt+`ma`exVKSk?#zfV40%EIRivJd&sTXsboNo?dh^}{Pn#A@fy1W*BKPZW702hY+PkZGfnP`#C}KmEUx7S+1_OaeqDd=AX0UTMUh^^)q$^BYY&#Y zJjrms=w3r6{^oGc)bO4%YsrW(i18>V7jm5_%5uzAGz1m?u`I?9C92_<0{rzRu(kYs z?Zl-!EY!R!7Mm`f4W|X6RwkA@veuP&+lYhR&sX zQ_`%i4FOVx9r||*uy4IoMIRa)Yyt;z;;dO+Ux%ZMSS;6OYL_y9*}vq6MAF=0<%6U^ zw_mqx_+S^K=z{;n9ecl|u(Rx}D6U2Pk}_B^q@KHjH|mb%Z&JEYTZ}~m2#Vcn7O!DI?XhOrX9F&Gs_rbZa5J6P}eVHI2M0WrBcc#>JD1BtTWvF zXpfrZRr*B?g4Fob%?whzlVe!dR%#--bF)jv$+eel1kVZ_zjhV2|EW@)zN)PBNU6sy zeb4I&=9CLAF%9Y6S@kPg-2~h}(wJeq2cVsHaD!*+;LeO*4Ahec{N;x!)U~&X1or`4 z-3JOt7I>8#tuY%?E~`|}qw{J)=@BAYRG~hB#iRwXm7&J4RjP3k=|F7AcXxF&|Ky+d zKjPT?r?FLu=uLQU@d+PiqJVwhHCIb7t%YaLl>kJ51xo8Qp=kO4eh5P?ElF3e$%zj| zfe!Fytd8E|mK2Y8q@dcZm3)lg#n%>>mnmnazk2I96do@gW<;G;Yitv+579c3*&GBG z>l751=KPkYl#uYC!dHFvWOhdY_+vk4qjojICigjizVj&SkI=M~_YG=u7QfpvZhTrt z;joynvWXNxeG~-v%^jqcP&8Cji>%AdqHY?XFt%y3gmveWH;=PiHm=*WtbBrTZALVr zCiY|{Z5^$a#QyFWTro70@m*Bd(B6J=zf5uzrK>etDV*nALjFZqY9g`$$?-Y*i96IP zY&a%5{#LjKDXm7^G~XAOhXQcSp&hwCQuyOiXdR`o>giXa|5qMHj8aN^jSlxd>>NHv z>mb0k{O~LRYo#<5F1BuqeSosDlAIZt61QS_ro0-!v8)DqxBXcoJmg})3;FpXKwqpu zr9j1;%=|Y`(&5}Py<4aL9ff+C1V%4F#&CHe=lua)stiXhXT&U%kayIc;eA;~2KDP4 zuNQb0<-q*^f;CwGKdkY;nRrZW^#3=Wp0bC%37xu}p{0qDGo6x)q4R&8i`qHb{J+D0 z-Nk316BM*_*P{Ptl7W>T>ff$ICu893XyLB)UrDxqSO06&p;I(*vU71XGI9FH2o!O5 z7E^NmM+f|OY(W2S5EA%j$H)NxA06<2ZU2W9m}R1*V2i^5@%2i<4#)x)$RQewz(a8^ z_A&qRqd2PTr6$>gXHGwu#_(CHoUywL|8cK+eyE4YWNT?0T@C(S!ll5$8P~9hFQaPV zPY#SpP5MNLXiyvdH`6O$j+oL4f@76Afs;L%^OX}op5;SyZ)FDenm5?G*Bw;+y-CD^ zG!wdk8&lXZ?@v+)W--jm4RMDh+yynJiKE+qhrYj1cK=Negw87a#73fXNV)L<(ddX1 zZyRHHCjf6z)nSt?CON92c&jj5aM2|UWzRqpEjx@V4#fFN%|Uo|wkk6USkXSZ!ARX^c+WU^mZz=xh|%y@&MOGu(0gs!#XV%Pjb68(2$Ob4DR^#D}Yicc`CiF$A3-k8H)Kp*T6ErS--6hmVaDS zm$M3olR8=3r6aq?8&5|PB=mj)(Y`-^th!QjkNH*s^Bw;4b7B7@)Za|LfuVaj5rWoO=2zdFXuv zhOcdORNMQ@*xJkUySK;s8!(;%j`)3!xklYf+xra{3(o%v?VV%c($-f0C8UGnU246O z;c#S?q~FO2^2fV2a~FZ3pc+GyqLk(Bc=PZ4FzxKaxf@r(%o=qES>55WiMo-hEv6z4da3pbi6NQ5olFDY8)s1$OlPH zKMkGKSbJ*^^{@Qp`=ePJ`9Kkd_{UdMPy`ZY_Wx4fEz*F88m550lSj@GVc!9$1`28GDgoVy+Y!BOF2rLB75=}OmJe)orZyYRlfF0r2@I3i)o4V*UKfjLZk z-01|4I%N`tcNG}jj2P)fu0RgQBCJ4pQJ=6FH^UIh3nK@w;dcn$kyoiuhu6&x=vRv% zGGdTRnlBv4AD+1-i2NCWsUx}r=Nn0p>c=6x0Y-IQ-66IlTMDUh9ZS-I0u(8n14ZP= zjbN=-Gvb3b?G(}&8xpDxsR_T~ghPOW9EAU{)OHHm)={Gi%ks$Lw1Qmza6IRscsYuN9*F>OndsH=Q!l%}>0 zIk*8k?RZ!$xxpmwwnx42xH*iW*0>NOE$>DA6wN{!M2b9tdTDY4l0kFowmjRgeyQoT za1xuJVq`{j1G4-LB9d{&4qm`NNj-mqTwMWgd zG}z>FrbyIp1DmefcW0?p&+1y# ze`N~fpx9}4gCv@pIh`|VN~9f)@e}c`4CX)Y(wdLHC)2UX2?Z-cbU6bt?l!Tsu@dTS zGFpfcK0z#x*cm0B3bhGB!6OKr!UziW|0QYh~`@OaLVhX_G569 zUh~Gfjtf+tw!8gtu7cB_HoSYV5y$!D>{AG_Jk4WCB-7nQYyuWf+-iuKna-Xxx}o*k zvivb6F`SXfuU1DnjZAHrMi)Kp+Lbtle5jwwDN1u$=OEFpM2b0P)Uq)n?_^1^*0)Vu z-&)HROjB@@=9BUm8Vl)aAP(q8FjQ|kG<*`zM@+ZSJLz)?1-5GgGX8GZYShMGUp_=n zM35jq`d*hY*1mB4wNe!~&J(-j%#xHP7!fqC2)Ow)Km(pa=^@_I^W<8UZ-{#=6ugEA zz~X<>>d@_@i>im8UPZA2`2ANt4Q{LGA`%~d@Uo9DAT8*zAdhi76=Q@s8YAvV0JLRB z3M+y}69xXDIa4Onb0E!+Hg3!HWZCCLfY)Mhh(BaX`ikC;;FsCT5itnt8bQ%DB6e%% zAwFLZJ)_V}8%9K4fam6nEX>d-(2^AnJ&~EzT-ZvLQMfUYph;Aeo_!%l>kZe7&AM9! zw!PwaSC90bAFJq>bdP)j3CVa2kuf`7k^NLnDOrRJD`=naC_4T@bnCVzW{a&*P~-g| zAt=P#t0!&JlTqN&I97j%0z9ZJ&XC03{U|4=2hrqU-xrh#>cexPa29~kC>ZAN{owSF%6G7#z(9eDL!nyjHo}nm+iS0 z*e#DOok9;#73nZ#sJYx}o&<3Ebu63fp42bvmuwO67k zhnL$MI%r&*@)`6g+{sk#Ov%(9vWP`cnl?C`6CE%UE4?JZU%g1YkLzh-lh;cx7FeXK z6$^yc8FG;Rlui~C37Dfh)WUAnq8N2k(MWTbTdtNHWvIyg#J*Pz3NOs>c_^GzTqhys>%cl~iQD+R6AIzKlZc`@)Inl6fBNt83 zvq+iyC@gzr;%oglr3fx8`ttbLOI8N6tTKi|n=mvV=I4t-{eM_dircRMcAzw$gl$bYuovC6;Nr)`&2}F;8z*=LnpgKF*}8 zD0u1*#a?=fxOXRvlzCBfNB1b|zOb;hDo9ltWhX~6R|u*+YT-Z|Z8r;d$uZ@kUu^R~ zE(Xk}%R%_uC^P&}s(kC33jyK1NXZBelp}5`crXAc*f{x&v5(CT_O=pr(A&%)I$}*x z-acfwaL`c(3iY^LPGwQX z#5@ulf#axbbXmdFmeuSuh^}s!q?oQbdBsYei#oWdQP_2IV{F5fmz!{PVI|UYExPJ+ zVepoeQ97-Z$CwPs0Qn?hU6mLZEij-H#F!ihDKpp@nffGejUSh(sVo`zxN2QAqOJ08 za3{xk{gOK!gL#a0z~#UZ<0ohTP3nmu^qzjP-3hJFmPHKKajl)RqC0!O<$%mALkL~B z-{M9jauOlg%{76pf^|>wy34O=E8pd+si{rE0n3l0CWTQgc#VIZ7o$7x}0H z>`LnrOj0wi;&^Yu0brmG{Ihc=AaD3IwptOTqa@tq``ltNZ9xp#l#aZMNC3&g}2fo1;T+z$pBSCve}vJQ znHm3ox#Df?$r$YRe;B>&5L00F;u`=gunTQ16M2`_>+Jm8)qhQ5h2!XzNTEo$T=^TF z?k{njS4VLIc|;L8Z;__2<`LlnU%PwqPvr5F$2-Nhl*;ZgAKqfF%BX&-A5HrQ&zH<^ z@Av5FWUcR~RlD~W8LI54qBww>)nqQ8?`mqV_t(S>^G|+Ww4VRdXSZd&ckkDo(TAtZ zUXN66EPW?;JL|WQw#vt4mwMqWkDWonq{4ATT<+sRDhzvIG;ea2Tjl&@>Z2o|@x<6I zSzFhr-&=3or=9wjg+@07?p}(XVi1gabny#h=>QIZV5xA*JN-l7z4{z2US#R6IX@BQE_e|nu{ zG9(eQ-jbudhISnN2B9d%B-4w0cuF{Bd*nl@hHdwHR%4%B}4;1=YpnMr2 zVxk~PmIe9q3wPL>lva_;{kmCR!kEiFE+u4q2(luQo2jxCCM}F|CT%{AShRMtEq1l` zln>Vy_8cwpqU2dbTF#zva*74c3I z`;%aYb7}VsGG);KBayCgnkOYCM1D{hy@ab26Cf+X@gD&z znN9PmNBZVet0&TCW%AVxAa4FU@ev3;!ytVId&<8=1maFAgjX^ra0$}rWV-g6{d^2C zh>TYrzVcYb$7Lqs`a-e6V;vlAh?@xZHA|?XoN!*VQ8YG4jZ-;u8*`=%>f%M$s}X8UQIttzCg` zP2b#mTW1Bl^6>QdK_jm97j(s&R0Fe6#gDv`5Mh_4^sYpOw8;w5_cqB&Tx&L~gJhJ* znH|MIGipW5mDoyWB5zN=y&ov+n|QL*j*@yzK;=|dUEON7NFYpRZ?c-lb9`qzn(l90 zG_<_72+@5wwYFxjk=Cj6V9B82>TdoY#=a>y6llvbw(Z>5wr$?nwrx8%wr$(CZQHh! zNl(qkyqd0>{y)F_)Lv^Z(Cm=6Ee)QCs3;#rkit!t5jEf&*hb}OQ7|`V{KP!BsyM(_ z2Z2?GIu4dw`3T3QD)Uo|7TU&DZW*C?(-s-wljQUbr)K(A-df%xWzFcxNKeaF+cUVQ ztu`dfP2>lvSv#>dugkTu!j=XYSUV=kZV_SotstV61S=o-<-E5CC}R^DZrzR+EeL8m zLXxU*CcQ=E!O$q?^iWR}A<|Dnni<3v6B(3YLP#X}pz5q`_EAt#FOFi!h)pTf5tx>J zE0uRGLDVXpw8x5s!1iBo1}LzQnN?7wHVHs@$}TDlKx$g()r0aEzMrr+! zpx@qZMM)po!J=*age8iwpHvI{$+Aw(^KIMD?yvF0j+2^*ru2?Bi)OY1Wd}an36Gy(LzFm5ZTPzH~tI<=;4j+A60)r-V4?R_3G#EY{@xH zeBzbUjKK#C@KPyR*5@X%Ei64spdhx|0WMtKdtk}@mkVxJC$2dq19~&OpK|%*+2Lp* zrN$PSCdn!P8a(;=7-%W{z`G=L>_%j-SRc(7DF9e)xZ2B9b0vSu^zC5+n0vonq7-N9 z41CIm+O19uKpD3@s}e-M9(KH{AwWbI8y@zu&j{8Q0^rPE|s=|+`r z*H!kpCn)Tz4yg`C>a?8m=U(QD5t&-pr8Zbl7&4xn$js1FJ~;_@ZWPIGBzDw=u|%XO z3nvzf7-B@=|zRQM$q(v1tk> z-$U<~)=w@^l1U~{y(hyUXzAv1X8xV-^4N&pUe`*x{!a2VxUmTNs!@9#Yx7qDy*I-U zhkTlm*m(^|qzPPT2B=d97=Dn{wruFFb&`!VBLDW)6sc0=r0ttrn!ML+4SgPa>W?V$ zzk?O&(h2%YVAA-Ds+y?1U#S|4qp^t=he~qEx&wXkxthKK)>HAU9(CNJQWz|D7entN zYQtINUbN~W*Kf7*7F(X(8dD%te+g6_P19-Hwz)V3Fo$;5U(X8MB4-yDE)4k8zr!`t zFc_PQGc7cwW~x`kXiAu8vcOQlMp=MK!(P55c+HSicfeL(XH9n)5YAI%@j&XZ-NtzJ zx8{f?6e}m(btQGUMt_y;&1=a-K1Q6VCl2(aqp2^t|ZBV8SG!xH+M z6*f~$jDGElp812UAUJNOlWa=|?G-+wz#9~Jf| z39IBHgWVP?00WN#r!W`Obs)oif@H6bT`9gZKxZej-BEV7u+}qy6zP(=gU(wKv@oQSVHl=^I>uIxKmczRiJe$#zp5Ko3Dni+r zAdYh*HW$sLx>i;6CvBTo`Km1A&#)q*Nz9Yh<2^VuN@USYrtD12GjXtJo6uTXr$tn= z)FiFxw^c?B{#j$zlN(e>A*Bp>_~m&Ng5%ejI0fyAiIiN<_{y!;I-oj~pM*bqq`z3s ze$o_t3m`=fh{2a#`~kSZ5?+{&cNQx>f&~~%l%WR%=aE^bw1-#b$!?_Eb(TB{&&1X4Lz@Qr4$2 z?NR?2YV+-!)rdPbP&bAaf?3aKf=os)1ko=Kk>AS-964*kIgl|Dd9Ie6k7g2voQn1; z@hr_~wvPZ@dw3G)O=h>u!lAGa5RC#=2F$%K%VF`>@BL#%w6*s_#w>l`E~6p7?Ak}l zRhWNc*Nkj}xjwlz3~1xF@s<1tX4+wG0?)NEoPo1ziznEGhpS#@Z&;L%Tn@~Y8*;_@ z;qtrBT6e4E%Yv9bjv#Ql?y~Swg>LJ3$OYqX40JEu!+m1Vs81ZaTvTmnk1(PxXAjgI z5P=6Y@EL?#sIQAjQ&ky1j}(_o@tg>DDEy7Vl!e3DsL&BSIpgFs+swJTh7$?7W@mlA z@=`f&Y0^P}V>v zDvsjiBCPDFFkuGQ{TTX2105}-KGaPPK6 z_avRo<@JwrmTM*VcI;Zc`6cggwNG37dsDc~gFvxEjH6JnafI3nYSdgunE6;&kK=8+TCm9Ht&y|i?+Q)P zTT~}<5ASBUlWSL*_D7bE2DHzTk3$_hObaFme4KV0)p)B0KeW#dgW`^Lzt&b|MY&_s z6&}7tD)h#cb>DSfs;8KC5O-ADflJq#taC@!XsgPfsq2(RGTarI@y3LLf2Z&NEQ_W5 ztu6!>?U~w%Rv2uKvv)kwtfG~t7Q9!H5~=4A)=8yC&G5N1fU-^PH$gDC6p3OK#;BU^HTK5@>8+LSSGZH87G+xjNF2RI*Vo7;t_uE?Gx43Fko|gq5R731thjmRwp40bc zz_h=z=yLB@kG7o>o(Rh3IWc$>)NGnE)7qgnf!h}64=SUQl>b9gRZeuHrdcIpJR*&w zs3CzODjZ_U_< z+Y*4O`G7X`>zyZFAmjQg*185P53)gAA@t2I3Y$Rs*3Alcr_OZCD@o!;!QOK?yrXq1 z>(J}4N*!xEJ(xh%RQi7A7i`bRsY-8W8KZS*pc3d{D+ocSWwgAXKrnt-A5|#|3f@nv zXYG&#D|wqoGmWBZk<-$x`lnptY=}8f>d$J`cTu#USFdomo61#O?Rs(Kw{lp245!5P zX|4-e-4GT0%dQM3zNMsI63?Vw_R4=y00hkn7Ypru*f9Ju{a+5;BnREi>ngsvN??F=u#@<+fXvCW2g73 zKK9b{%JvlShV|c2GXEp_J{v3J|9v$rQl79uWhY_?Z)FPqTJUm>)>}OjW8Fi z&*L8m*g5IGw4WygA;!Ddt}jKO6V{ z&-usQ?fn!L{Rn>h>Qp^HKXw5OzRmPX$$_tq&AY0gCK+khTh?lt=EE6W2~YpluA|Y# zXzS3YaueQ2Vpdg}&38CtRRx(q-j}^QpyuxsaHjS7_@C&Nxn%>&KVZ<1OW_JeVJjxLqIqyPwQgZ zn`^1)Z{5GlFlMp#4Y^4VGAP1=1#Y&-VdFkR^KKO|okDvbS<}^vOt9-n-ur8|{@oHg z`-@3~dAvuJO&02BB=d@Y%7cMHdvI=)K$d6i{#6_&H`>~ATR(%;xuZ3R1$oU4T7KGC$TPb*xX?lj5ZU7zv+7Z>Dcqz<P{XT_qI-XXhq~4MK{Ba9U>3 zi>G&t2e`Z7UvKs2F#H>_xP`V@H16~~T6T;#Gy-espUwMMP5JZrr}W**b%%d z18-QAD=;NeN!V~!y(7>Q3UK(VDZcQno7l*@t*-*e>~snPeqb^J;IAWRVU6K?u$ODa$Rrl>bxph$$CCr z0dGA&segQ5Uq&u&ejdTQyguPsWJlJ?AyjWJMs~KNu4?do_kOhpdGRv3;*TGidQG3L zpO21joajzB<2z!9aH$uU`1cm$rePLSh@#sCAnR)YfBGEPKB2+@t)q)j4b-x#Gz^cM8xDy!V6~ux0CB(W)#NPQpZF4( zG!4g2l>FnbkrjVO3xlboEy;f(#IQ#1;cW2I(Td!BZ~WB0eHei^Ce$U33ND0S87gXu zb({5pE%N?8lb}dQav&?}q}}=Z`O9TC!lAVTup_o|yHtN_=fIPe-Y;g%k5?H3KRq4A z$a4kR!}mS|@nky}-|_YZ0nl}E^UDws$;0o60r&)sEN@VzH|>F??@K3ijMu^5Jj~$x z2vZa(VXH;$BP*Jae=SOEl*f&zvF%xT7R|E-ys0ly%8Yz3kto;qj%&R$9)fo$lReWe;Z z7On^K8pM_i-Thv?4W;=W4sB#0fIeB)TCR+#hzI~BiyTeR(_)GxMj;s7n`n2|t~4%$ zOp44`Q%)bnQKSEc6C6Ty0ns)C-_b0><^Elb%yeM$poWl}^b)OnO0=P%|B2>>8#Ed| zOc*s+L$8fxlcfvY%$^cTDq3iYgt zK#q>7r}KQ6H`EEH0ghto$#@`P)NI5D*>T0XH0(Gz=rU_C4! zyW*X@N&AOe$DcZ9ay>o3^$#-LerPz<++!&U{Na|`r50&Bfq;?4(&mGPR*g-9@{MfS z(lV|veKD^4&}^<&d$2q0v95ZEmkf`ns%0O2ow8m4n@+{UPE_Ke%o})aUPU;|*pQ|$ ztun_faNnon0*WF54&FUVx*S0+h2z1HvC@EG8j^2Dv;We>5$-=Ymq&~?$wwN5Pcux$~g&c&k~ zA8H7`ZP(6Is)F${RBNLY$C}cbCNNV;JED|ro^P;!G$GHY`k3??uziVI9^*lV`= zR4k@C47s$KTPbzR%?27ddzh?G9WAb+UEhUL@?9wvwvBhkUieh>vDw!Rsmy@bCTf+L z(2yjZ{y28MRb;5*-CxHC4r@_myI;cksC{qnrX-0gV|ch*!zl?2eT_9QnQM`Di^j9Xc$Jz2a!AyPz}Uw2xca|1INqKy?oUOn98RH6kkqbLrWRBd zAM4H4K0>}hIVH{5cW&u(npk{&QF-={IIM4yn0oO%1R#}~x59NrKEipfk$tx{6XM1f z&{}YgudMwY_Q|$;3CG+DGnO}N#Or64JmT0Pg@W8^1%;-)^Q|_IZE;LP>{o?myIS0v^Kj-kf|2rDz}?gD;+A9 zI#YfRJ!Tk)IA;yjlqbrYJT`<=*%TFZmGX^br=uHga|J=-2GVvr!nE; z;NhT2oKxQe>|9JF`(Ph;GBXx^v5hbp=(=7mf);KCEj2Q+Yj0+BZ#LcLmRF7DC85Ms8cWVrI|J%LNjw{+ zZ?uM?1VySJO~Z*!r1PHlbp~D18*71K!X~yc26jOW1WK-B62pk9DT;r3S9@#l*^!+q z$l2{dK>Ap!1)Qv-+htcd9Pjp!HH_hmI2~ zRlAWO%GoU4b&&3_S5boEYY^(J57|T=c{Kqjl$K#cA3VnjFgl43Vy-)y5A*p^LiVf+ zd!Y~xL^h-^EX;=_z)>BlZ8YFeIf)Npt}mR0`1nCEe6uRrH~-uu{+sFc$TX$P%#w>f zCqaiPqO%q&{vPq+EZTE`ue=KDTc~i4z4UkU{<72ri+0#KA6IwSxg5{BkM#(z0I16< zt)*J_!mt<}TRxd;doQDvi$zXLaK4zOeNQ||D7~GQZaQP>Usc|*Z@hp!0QGs`P|(=v*Ib88C9Z6d;dBm z&{iDFf8H(eZ$ydL6|PYm&rr1jlLKvC<@8W&DWwx^4$om9HcL*57QJWAKt z70-zZu;jj)xN8BG;IE~$2~n^x8CmsWkl@{~NqY#|8U^3xbplefTX{yLxFpko`Iy_=pH9;fU;fY&vqTq@f_Z{2? zytbA>C|fr4%N!|9jqky|3ZJ%btLOXj^O-o|=3bep-EfE@zzM&}VD6(El_~C_*x^@R zzlIC<(#3v{e>1SzTHDG(WUE@&dBZuOm0vZIRdm|rN<_Y8|G0s;!vJra86U!>g`Dv?Qt#?Lr+${M{P1T->BfM{YiV~qI& zP)_`5fxP!O42B7+Q*Htdx;MQtAHm3aCZKYb0QvWg$?qGafKQp?{!W1Jp0wH)`zYCN zwb|*n()S4E9mlWX^6NCH#C`bk-t{GFjPl;|$-Qzcs%E>Wh12&fi;2}|HQDYQP5jWw zH%d6p`|Y$z;4~)aciDYvn}Zs}ZAz%NR6j2&s;kYts4v#X;e(ZzAz`S9f&tddNuA*Y zmCcA23!j}_LAxW#va=bp|%m0tSPtK9-*J#O#%RW5X;g7yYIBchFvzhS)o(pIX`G3T?b%K z&Wb=sR8@M_f3AIt9kEmYJ1oieYeM+{))6r>GX95z{YYafo~Q-3`-I{hbn*B{F3FOz z?!YR^Heqt=D6m*89mnPB@;!D1o*#%<{3)`rBReoFJx+rk`Ohn$aA0h5OoR@~=NSps ztLntF{u_jEuSclu%x&{}=I8wm=-SH>?sw1I%)?vF&W{Y;Ob=omE)^iuFPhxo+lhKC zIjKSUbyzN0wWAc==o(ZUjU1Ka?A?Q$Z}(laRl=dKr1*|j_`e`5r4vc&G=Q90#m3!s z6Z7R6C}j}I6ND_S9W9u1pc|e~zHl{fF5rKuw)zs>AJmH`8O&+&nJ3BDsT*oj(EV>L z*&6_~{d$a#zj*(m8}VOQa!*^NQMJV2ouq+U&zZx21@Ql1Nj0s=D36{`smc<$oG+{| zhcI{NZmeey`Z82K&ujbIawJGSc#UKyKX+)*iE)mUG%9QTH;ufrbTnHQf!<&1Y2Glv$SGHd<6h2!Pr^4cBg zr;JEO-(CE~EVuW(ZoAx9U;tF6AaQOkOWT1hOIVSrc$j()XzXYXA$9aSswTg={*=;( zg@xti<(jo%2x(LTmz@@JIes$9{3_8P4G!Z_6#>!Ux~AWFt;nS{B-tqeKNHAEAi5z@ zA#)%4Z`Xj$_GyDQD5^=eH3JP=swr#`9tWq%c^}gUDoSsQ zBUEd^nhpImW;%C*HGQrpgFn+Uj|3}>a`!*J3pcCpjm2l~D~e&3jqzY#hgsm(LAEA+ zGhE>s{Xp`zh~z4pim)27FAV^!(=IKZQpAv*Bp$fxKa&yk zu;5>fg7DeSWa)^)9FRF}rO&u$r@858MP%`5mbqDX>7KlAfYoo_bM|^{;@~j7&CK!d zvbn2A_KvI}&CpClxVmh0b+e{fS11{fRburnyIG?bF+}hzTRRw0Dh}ptD|yU>Chg$B zTjd?GHze~Ok>HKKx7s-+zz;3N{J;t*#qz>%Mg?U0kd08+2w`fO*;X+tE{R-|nAjz2)4NkFb&#S&)-{@F5fDL1C9aGJ|)zd*UB@$<67T$TcQkj|rZ}mr5 ztK!G~sw0-g_NS|@>5pi6M5sGhoC?Pmf+yC36Kdj^59>A|?IwY2ej1eBsOJL5XEb}? zoTcDgbh+Jmj~5cJl2@j=&kM2N`uC0NAn|}0UZr*2Xu3r(j7s;893>S(uK&myUCF5w z2OSjRR2s&RDn{+XQ6*YzhYYEYipY1zQ`yl&>-nvMcSJWSJMLOFwDPs+4sG4|v7Xg2usnx0dZo~ZTgsPqB@hoQ%c{gRWO1~a_*eXf=+Ja3LMBw1 zG_eiCu}hO(jE>|Lp*U!DD)`W@6g;=Q$rR>JiVLgcTNtn!F<)Rp+u}O%`->5qD zD*%rGRFEn14G>RL)U3c5mD{KT`zq=QE?KNMY~hq7=A6Gcc)xYFxQ8}^7of%HtgN@z z-hT9a!Y8TQ!2dTZ55xbAK4)b8k2bz8Y_WKvw!3Q8Mewj-Hbh+9d*r&7xZ~zJaMlhE z^r%8i+~*GQ3)T+y27S zf-6*x7W>9bA;B=Mh z-JLY5{6*CtKEMetuc1FlYd^yiGZ7GsV1AlC6qwL@G=fD55DWs))+y4_bbOzWFLDlV z7rp@XD19ZLv_b-^BE4ST$Pfsu2@jh35sVSYDs(w$*n%DJEBA7uGdX;R!CE@ZMv1&y z=-48ncZHd^Z|_ejWE9Tv^E!o2l)hlkU!PtI;~9)WHgBJ04--i%4U%tc*mpi|yyhtw z{GK#D#~nJy9m9)t^s4)e-QBw#)t2mXOi-Ea>kl>fKGROGA{6>scVR02N#(hM-EjY=V`SR`joMn|73^Zg}EFwhQ2b>|#uqUUJBa?BA65xB@n%cV1 z#Yynw6-{>{)`;Up4q&$}gUS?37Y}2r@}ix8OlRJn z6v!<*DKowM+E&KddinlPj~E5KYz6Cmcw@EVF}zoyQWV?-)cWVaza#&REtN`MBw&1I zQfZy^-cU2Ym%gIHN@Gr=^KZ?Ex!p=IP#%5TR>yLaFkT7ZY%}0eZk0KZ_=~X7KV7_> zA_Kz&F=mob&$3H>f6z6`|QWR7ahv0T5~dM!F6?17*pDJ{{8C8M$x8d z?DH~S&DmAw9Fx+JeTIgBHW8|S3gQbb;>gKWX9g6qsvt}erFIsV6?m6`9;vovo)%uO zm;8W3JQa7D5|GJ{O*B9|1!)L`Xm^%W2JecDQX5$wIV`y(cW�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

    lO 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 z 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 0 { + config.TrieCleanCache += config.TrieDirtyCache + config.TrieDirtyCache = 0 + } + log.Info("Allocated trie memory caches", "clean", common.StorageSize(config.TrieCleanCache)*1024*1024, "dirty", common.StorageSize(config.TrieDirtyCache)*1024*1024) + // Assemble the Ethereum object - chainDb, err := CreateDB(ctx, config, "chaindata") + chainDb, err := ctx.OpenDatabase("chaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/") if err != nil { return nil, err } @@ -127,7 +133,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { eth := &Ethereum{ config: config, chainDb: chainDb, - chainConfig: chainConfig, eventMux: ctx.EventMux, accountManager: ctx.AccountManager, engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.MinerNotify, config.MinerNoverify, chainDb), @@ -139,16 +144,20 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms), } - log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId) + bcVersion := rawdb.ReadDatabaseVersion(chainDb) + var dbVer = "" + if bcVersion != nil { + dbVer = fmt.Sprintf("%d", *bcVersion) + } + log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId, "dbversion", dbVer) if !config.SkipBcVersionCheck { - bcVersion := rawdb.ReadDatabaseVersion(chainDb) if bcVersion != nil && *bcVersion > core.BlockChainVersion { return nil, fmt.Errorf("database version is v%d, Geth %s only supports v%d", *bcVersion, params.VersionWithMeta, core.BlockChainVersion) - } else if bcVersion != nil && *bcVersion < core.BlockChainVersion { - log.Warn("Upgrade blockchain database version", "from", *bcVersion, "to", core.BlockChainVersion) + } else if bcVersion == nil || *bcVersion < core.BlockChainVersion { + log.Warn("Upgrade blockchain database version", "from", dbVer, "to", core.BlockChainVersion) + rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } - rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } var ( vmConfig = vm.Config{ @@ -158,7 +167,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { } cacheConfig = &core.CacheConfig{Disabled: config.NoPruning, TrieCleanLimit: config.TrieCleanCache, TrieDirtyLimit: config.TrieDirtyCache, TrieTimeLimit: config.TrieTimeout} ) - eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, eth.chainConfig, eth.engine, vmConfig, eth.shouldPreserve) + eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, chainConfig, eth.engine, vmConfig, eth.shouldPreserve) if err != nil { return nil, err } @@ -173,13 +182,13 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if config.TxPool.Journal != "" { config.TxPool.Journal = ctx.ResolvePath(config.TxPool.Journal) } - eth.txPool = core.NewTxPool(config.TxPool, eth.chainConfig, eth.blockchain) + eth.txPool = core.NewTxPool(config.TxPool, chainConfig, eth.blockchain) - if eth.protocolManager, err = NewProtocolManager(eth.chainConfig, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, config.Whitelist); err != nil { + if eth.protocolManager, err = NewProtocolManager(chainConfig, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, config.Whitelist); err != nil { return nil, err } - eth.miner = miner.New(eth, eth.chainConfig, eth.EventMux(), eth.engine, config.MinerRecommit, config.MinerGasFloor, config.MinerGasCeil, eth.isLocalBlock) + eth.miner = miner.New(eth, chainConfig, eth.EventMux(), eth.engine, config.MinerRecommit, config.MinerGasFloor, config.MinerGasCeil, eth.isLocalBlock) eth.miner.SetExtra(makeExtraData(config.MinerExtraData)) eth.APIBackend = &EthAPIBackend{eth, nil} @@ -209,18 +218,6 @@ func makeExtraData(extra []byte) []byte { return extra } -// CreateDB creates the chain database. -func CreateDB(ctx *node.ServiceContext, config *Config, name string) (ethdb.Database, error) { - db, err := ctx.OpenDatabase(name, config.DatabaseCache, config.DatabaseHandles) - if err != nil { - return nil, err - } - if db, ok := db.(*ethdb.LDBDatabase); ok { - db.Meter("eth/db/chaindata/") - } - return db, nil -} - // CreateConsensusEngine creates the required type of consensus engine instance for an Ethereum service func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainConfig, config *ethash.Config, notify []string, noverify bool, db ethdb.Database) consensus.Engine { // If proof-of-authority is requested, set it up @@ -257,6 +254,10 @@ func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainCo func (s *Ethereum) APIs() []rpc.API { apis := ethapi.GetAPIs(s.APIBackend) + // Append any APIs exposed explicitly by the les server + if s.lesServer != nil { + apis = append(apis, s.lesServer.APIs()...) + } // Append any APIs exposed explicitly by the consensus engine apis = append(apis, s.engine.APIs(s.BlockChain())...) @@ -299,7 +300,7 @@ func (s *Ethereum) APIs() []rpc.API { }, { Namespace: "debug", Version: "1.0", - Service: NewPrivateDebugAPI(s.chainConfig, s), + Service: NewPrivateDebugAPI(s), }, { Namespace: "net", Version: "1.0", @@ -434,7 +435,7 @@ func (s *Ethereum) StartMining(threads int) error { log.Error("Etherbase account unavailable locally", "err", err) return fmt.Errorf("signer missing: %v", err) } - clique.Authorize(eb, wallet.SignHash) + clique.Authorize(eb, wallet.SignData) } // If mining is started, we can disable the transaction rejection mechanism // introduced to speed sync times. diff --git a/vendor/github.com/ethereum/go-ethereum/eth/bloombits.go b/vendor/github.com/ethereum/go-ethereum/eth/bloombits.go index c7bb5614..9a31997d 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/bloombits.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/bloombits.go @@ -102,7 +102,7 @@ func NewBloomIndexer(db ethdb.Database, size, confirms uint64) *core.ChainIndexe db: db, size: size, } - table := ethdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) + table := rawdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) return core.NewChainIndexer(db, table, backend, size, confirms, bloomThrottling, "bloombits") } diff --git a/vendor/github.com/ethereum/go-ethereum/eth/config.go b/vendor/github.com/ethereum/go-ethereum/eth/config.go index 7c041d1a..1bbe326d 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/config.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/config.go @@ -68,8 +68,15 @@ func init() { home = user.HomeDir } } - if runtime.GOOS == "windows" { - DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "AppData", "Ethash") + if runtime.GOOS == "darwin" { + DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "Library", "Ethash") + } else if runtime.GOOS == "windows" { + localappdata := os.Getenv("LOCALAPPDATA") + if localappdata != "" { + DefaultConfig.Ethash.DatasetDir = filepath.Join(localappdata, "Ethash") + } else { + DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "AppData", "Local", "Ethash") + } } else { DefaultConfig.Ethash.DatasetDir = filepath.Join(home, ".ethash") } @@ -91,16 +98,23 @@ type Config struct { Whitelist map[uint64]common.Hash `toml:"-"` // Light client options - LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests - LightPeers int `toml:",omitempty"` // Maximum number of LES client peers + LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests + LightBandwidthIn int `toml:",omitempty"` // Incoming bandwidth limit for light servers + LightBandwidthOut int `toml:",omitempty"` // Outgoing bandwidth limit for light servers + LightPeers int `toml:",omitempty"` // Maximum number of LES client peers + OnlyAnnounce bool // Maximum number of LES client peers + + // Ultra Light client options + ULC *ULCConfig `toml:",omitempty"` // Database options SkipBcVersionCheck bool `toml:"-"` DatabaseHandles int `toml:"-"` DatabaseCache int - TrieCleanCache int - TrieDirtyCache int - TrieTimeout time.Duration + + TrieCleanCache int + TrieDirtyCache int + TrieTimeout time.Duration // Mining-related options Etherbase common.Address `toml:",omitempty"` diff --git a/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader.go b/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader.go index 4db689f7..d926d7aa 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader.go @@ -415,7 +415,8 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I if err != nil { d.mux.Post(FailedEvent{err}) } else { - d.mux.Post(DoneEvent{}) + latest := d.lightchain.CurrentHeader() + d.mux.Post(DoneEvent{latest}) } }() if p.version < 62 { @@ -664,30 +665,32 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) localHeight = d.lightchain.CurrentHeader().Number.Uint64() } p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight) + + // Recap floor value for binary search if localHeight >= MaxForkAncestry { // We're above the max reorg threshold, find the earliest fork point floor = int64(localHeight - MaxForkAncestry) - - // If we're doing a light sync, ensure the floor doesn't go below the CHT, as - // all headers before that point will be missing. - if d.mode == LightSync { - // If we dont know the current CHT position, find it - if d.genesis == 0 { - header := d.lightchain.CurrentHeader() - for header != nil { - d.genesis = header.Number.Uint64() - if floor >= int64(d.genesis)-1 { - break - } - header = d.lightchain.GetHeaderByHash(header.ParentHash) + } + // If we're doing a light sync, ensure the floor doesn't go below the CHT, as + // all headers before that point will be missing. + if d.mode == LightSync { + // If we dont know the current CHT position, find it + if d.genesis == 0 { + header := d.lightchain.CurrentHeader() + for header != nil { + d.genesis = header.Number.Uint64() + if floor >= int64(d.genesis)-1 { + break } - } - // We already know the "genesis" block number, cap floor to that - if floor < int64(d.genesis)-1 { - floor = int64(d.genesis) - 1 + header = d.lightchain.GetHeaderByHash(header.ParentHash) } } + // We already know the "genesis" block number, cap floor to that + if floor < int64(d.genesis)-1 { + floor = int64(d.genesis) - 1 + } } + from, count, skip, max := calculateRequestSpan(remoteHeight, localHeight) p.log.Trace("Span searching for common ancestor", "count", count, "from", from, "skip", skip) @@ -718,7 +721,7 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) } // Make sure the peer's reply conforms to the request for i, header := range headers { - expectNumber := from + int64(i)*int64((skip+1)) + expectNumber := from + int64(i)*int64(skip+1) if number := header.Number.Int64(); number != expectNumber { p.log.Warn("Head headers broke chain ordering", "index", i, "requested", expectNumber, "received", number) return 0, errInvalidChain @@ -1369,7 +1372,6 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er } // Otherwise split the chunk of headers into batches and process them gotHeaders = true - for len(headers) > 0 { // Terminate if something failed in between processing chunks select { @@ -1432,7 +1434,6 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er headers = headers[limit:] origin += uint64(limit) } - // Update the highest block number we know if a higher one is found. d.syncStatsLock.Lock() if d.syncStatsChainHeight < origin { diff --git a/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader_test.go b/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader_test.go index 1a42965d..bee6438b 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/downloader/downloader_test.go @@ -28,6 +28,7 @@ import ( ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -71,8 +72,9 @@ func newTester() *downloadTester { ownReceipts: map[common.Hash]types.Receipts{testGenesis.Hash(): nil}, ownChainTd: map[common.Hash]*big.Int{testGenesis.Hash(): testGenesis.Difficulty()}, } - tester.stateDb = ethdb.NewMemDatabase() + tester.stateDb = rawdb.NewMemoryDatabase() tester.stateDb.Put(testGenesis.Root().Bytes(), []byte{0x00}) + tester.downloader = New(FullSync, tester.stateDb, new(event.TypeMux), tester, nil, tester.dropPeer) return tester } @@ -185,7 +187,7 @@ func (dl *downloadTester) CurrentFastBlock() *types.Block { func (dl *downloadTester) FastSyncCommitHead(hash common.Hash) error { // For now only check that the state trie is correct if block := dl.GetBlockByHash(hash); block != nil { - _, err := trie.NewSecure(block.Root(), trie.NewDatabase(dl.stateDb), 0) + _, err := trie.NewSecure(block.Root(), trie.NewDatabase(dl.stateDb)) return err } return fmt.Errorf("non existent block: %x", hash[:4]) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/downloader/events.go b/vendor/github.com/ethereum/go-ethereum/eth/downloader/events.go index 64905b8f..25255a3a 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/downloader/events.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/downloader/events.go @@ -16,6 +16,10 @@ package downloader -type DoneEvent struct{} +import "github.com/ethereum/go-ethereum/core/types" + +type DoneEvent struct { + Latest *types.Header +} type StartEvent struct{} type FailedEvent struct{ Err error } diff --git a/vendor/github.com/ethereum/go-ethereum/eth/downloader/statesync.go b/vendor/github.com/ethereum/go-ethereum/eth/downloader/statesync.go index 0675a91c..f294600b 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/downloader/statesync.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/downloader/statesync.go @@ -310,7 +310,13 @@ func (s *stateSync) loop() (err error) { // 2 items are the minimum requested, if even that times out, we've no use of // this peer at the moment. log.Warn("Stalling state sync, dropping peer", "peer", req.peer.id) - s.d.dropPeer(req.peer.id) + if s.d.dropPeer == nil { + // The dropPeer method is nil when `--copydb` is used for a local copy. + // Timeouts can occur if e.g. compaction hits at the wrong time, and can be ignored + req.peer.log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", req.peer.id) + } else { + s.d.dropPeer(req.peer.id) + } } // Process all the received blobs and check for stale delivery delivered, err := s.process(req) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/downloader/testchain_test.go b/vendor/github.com/ethereum/go-ethereum/eth/downloader/testchain_test.go index 0b5a2142..4ae342dc 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/downloader/testchain_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/downloader/testchain_test.go @@ -24,9 +24,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -34,7 +34,7 @@ import ( var ( testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddress = crypto.PubkeyToAddress(testKey.PublicKey) - testDB = ethdb.NewMemDatabase() + testDB = rawdb.NewMemoryDatabase() testGenesis = core.GenesisBlockForTesting(testDB, testAddress, big.NewInt(1000000000)) ) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher.go b/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher.go index f0b5e806..94f05f96 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher.go @@ -110,7 +110,6 @@ type Fetcher struct { notify chan *announce inject chan *inject - blockFilter chan chan []*types.Block headerFilter chan chan *headerFilterTask bodyFilter chan chan *bodyFilterTask @@ -150,7 +149,6 @@ func New(getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBloc return &Fetcher{ notify: make(chan *announce), inject: make(chan *inject), - blockFilter: make(chan chan []*types.Block), headerFilter: make(chan chan *headerFilterTask), bodyFilter: make(chan chan *bodyFilterTask), done: make(chan common.Hash), diff --git a/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher_test.go b/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher_test.go index 3d4f0d1e..83172c53 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/fetcher/fetcher_test.go @@ -27,14 +27,14 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddress = crypto.PubkeyToAddress(testKey.PublicKey) genesis = core.GenesisBlockForTesting(testdb, testAddress, big.NewInt(1000000000)) @@ -244,7 +244,7 @@ func verifyImportEvent(t *testing.T, imported chan *types.Block, arrive bool) { select { case <-imported: t.Fatalf("import invoked") - case <-time.After(10 * time.Millisecond): + case <-time.After(20 * time.Millisecond): } } } diff --git a/vendor/github.com/ethereum/go-ethereum/eth/filters/bench_test.go b/vendor/github.com/ethereum/go-ethereum/eth/filters/bench_test.go index c5f681e0..434e6a44 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/filters/bench_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/filters/bench_test.go @@ -17,7 +17,6 @@ package filters import ( - "bytes" "context" "fmt" "testing" @@ -67,7 +66,7 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { benchDataDir := node.DefaultDataDir() + "/geth/chaindata" fmt.Println("Running bloombits benchmark section size:", sectionSize) - db, err := ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } @@ -129,7 +128,7 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { for i := 0; i < benchFilterCnt; i++ { if i%20 == 0 { db.Close() - db, _ = ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + db, _ = rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") backend = &testBackend{mux, db, cnt, new(event.Feed), new(event.Feed), new(event.Feed), new(event.Feed)} } var addr common.Address @@ -146,37 +145,21 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { db.Close() } -func forEachKey(db ethdb.Database, startPrefix, endPrefix []byte, fn func(key []byte)) { - it := db.(*ethdb.LDBDatabase).NewIterator() - it.Seek(startPrefix) - for it.Valid() { - key := it.Key() - cmpLen := len(key) - if len(endPrefix) < cmpLen { - cmpLen = len(endPrefix) - } - if bytes.Compare(key[:cmpLen], endPrefix) == 1 { - break - } - fn(common.CopyBytes(key)) - it.Next() - } - it.Release() -} - var bloomBitsPrefix = []byte("bloomBits-") func clearBloomBits(db ethdb.Database) { fmt.Println("Clearing bloombits data...") - forEachKey(db, bloomBitsPrefix, bloomBitsPrefix, func(key []byte) { - db.Delete(key) - }) + it := db.NewIteratorWithPrefix(bloomBitsPrefix) + for it.Next() { + db.Delete(it.Key()) + } + it.Release() } func BenchmarkNoBloomBits(b *testing.B) { benchDataDir := node.DefaultDataDir() + "/geth/chaindata" fmt.Println("Running benchmark without bloombits") - db, err := ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } diff --git a/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_system_test.go b/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_system_test.go index e71080b1..e0c2a6a9 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_system_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_system_test.go @@ -161,7 +161,7 @@ func TestBlockSubscription(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -218,7 +218,7 @@ func TestPendingTxFilter(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -278,7 +278,7 @@ func TestPendingTxFilter(t *testing.T) { func TestLogFilterCreation(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -327,7 +327,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -354,7 +354,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { func TestInvalidGetLogsRequest(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -384,7 +384,7 @@ func TestLogFilter(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -503,7 +503,7 @@ func TestPendingLogsSubscription(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_test.go b/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_test.go index 396a03d6..96d27bcf 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/filters/filter_test.go @@ -29,7 +29,6 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/params" ) @@ -51,7 +50,7 @@ func BenchmarkFilters(b *testing.B) { defer os.RemoveAll(dir) var ( - db, _ = ethdb.NewLDBDatabase(dir, 0, 0) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") mux = new(event.TypeMux) txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) @@ -110,7 +109,7 @@ func TestFilters(t *testing.T) { defer os.RemoveAll(dir) var ( - db, _ = ethdb.NewLDBDatabase(dir, 0, 0) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") mux = new(event.TypeMux) txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/gen_config.go b/vendor/github.com/ethereum/go-ethereum/eth/gen_config.go index 2777aa9e..30ff8b6e 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/gen_config.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/gen_config.go @@ -23,10 +23,14 @@ func (c Config) MarshalTOML() (interface{}, error) { NetworkId uint64 SyncMode downloader.SyncMode NoPruning bool - LightServ int `toml:",omitempty"` - LightPeers int `toml:",omitempty"` - SkipBcVersionCheck bool `toml:"-"` - DatabaseHandles int `toml:"-"` + LightServ int `toml:",omitempty"` + LightBandwidthIn int `toml:",omitempty"` + LightBandwidthOut int `toml:",omitempty"` + LightPeers int `toml:",omitempty"` + OnlyAnnounce bool + ULC *ULCConfig `toml:",omitempty"` + SkipBcVersionCheck bool `toml:"-"` + DatabaseHandles int `toml:"-"` DatabaseCache int TrieCleanCache int TrieDirtyCache int @@ -53,7 +57,11 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.SyncMode = c.SyncMode enc.NoPruning = c.NoPruning enc.LightServ = c.LightServ + enc.LightBandwidthIn = c.LightBandwidthIn + enc.LightBandwidthOut = c.LightBandwidthOut enc.LightPeers = c.LightPeers + enc.OnlyAnnounce = c.OnlyAnnounce + enc.ULC = c.ULC enc.SkipBcVersionCheck = c.SkipBcVersionCheck enc.DatabaseHandles = c.DatabaseHandles enc.DatabaseCache = c.DatabaseCache @@ -71,6 +79,7 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.Ethash = c.Ethash enc.TxPool = c.TxPool enc.GPO = c.GPO + enc.EnablePreimageRecording = c.EnablePreimageRecording enc.DocRoot = c.DocRoot enc.EWASMInterpreter = c.EWASMInterpreter @@ -85,10 +94,14 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { NetworkId *uint64 SyncMode *downloader.SyncMode NoPruning *bool - LightServ *int `toml:",omitempty"` - LightPeers *int `toml:",omitempty"` - SkipBcVersionCheck *bool `toml:"-"` - DatabaseHandles *int `toml:"-"` + LightServ *int `toml:",omitempty"` + LightBandwidthIn *int `toml:",omitempty"` + LightBandwidthOut *int `toml:",omitempty"` + LightPeers *int `toml:",omitempty"` + OnlyAnnounce *bool + ULC *ULCConfig `toml:",omitempty"` + SkipBcVersionCheck *bool `toml:"-"` + DatabaseHandles *int `toml:"-"` DatabaseCache *int TrieCleanCache *int TrieDirtyCache *int @@ -128,9 +141,21 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.LightServ != nil { c.LightServ = *dec.LightServ } + if dec.LightBandwidthIn != nil { + c.LightBandwidthIn = *dec.LightBandwidthIn + } + if dec.LightBandwidthOut != nil { + c.LightBandwidthOut = *dec.LightBandwidthOut + } if dec.LightPeers != nil { c.LightPeers = *dec.LightPeers } + if dec.OnlyAnnounce != nil { + c.OnlyAnnounce = *dec.OnlyAnnounce + } + if dec.ULC != nil { + c.ULC = dec.ULC + } if dec.SkipBcVersionCheck != nil { c.SkipBcVersionCheck = *dec.SkipBcVersionCheck } diff --git a/vendor/github.com/ethereum/go-ethereum/eth/handler_test.go b/vendor/github.com/ethereum/go-ethereum/eth/handler_test.go index 9fffd958..7028d8d0 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/handler_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/handler_test.go @@ -27,12 +27,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" @@ -344,11 +344,15 @@ func testGetNodeData(t *testing.T, protocol int) { // Fetch for now the entire chain db hashes := []common.Hash{} - for _, key := range db.Keys() { - if len(key) == len(common.Hash{}) { + + it := db.NewIterator() + for it.Next() { + if key := it.Key(); len(key) == common.HashLength { hashes = append(hashes, common.BytesToHash(key)) } } + it.Release() + p2p.Send(peer.app, 0x0d, hashes) msg, err := peer.app.ReadMsg() if err != nil { @@ -367,7 +371,7 @@ func testGetNodeData(t *testing.T, protocol int) { t.Errorf("data hash mismatch: have %x, want %x", hash, want) } } - statedb := ethdb.NewMemDatabase() + statedb := rawdb.NewMemoryDatabase() for i := 0; i < len(data); i++ { statedb.Put(hashes[i].Bytes(), data[i]) } @@ -469,7 +473,7 @@ func testDAOChallenge(t *testing.T, localForked, remoteForked bool, timeout bool var ( evmux = new(event.TypeMux) pow = ethash.NewFaker() - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() config = ¶ms.ChainConfig{DAOForkBlock: big.NewInt(1), DAOForkSupport: localForked} gspec = &core.Genesis{Config: config} genesis = gspec.MustCommit(db) @@ -550,7 +554,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) { var ( evmux = new(event.TypeMux) pow = ethash.NewFaker() - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() config = ¶ms.ChainConfig{} gspec = &core.Genesis{Config: config} genesis = gspec.MustCommit(db) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/helper_test.go b/vendor/github.com/ethereum/go-ethereum/eth/helper_test.go index b18a02ba..e91429b8 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/helper_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/helper_test.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -49,11 +50,11 @@ var ( // newTestProtocolManager creates a new protocol manager for testing purposes, // with the given number of blocks already known, and potential notification // channels for different events. -func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, *ethdb.MemDatabase, error) { +func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, ethdb.Database, error) { var ( evmux = new(event.TypeMux) engine = ethash.NewFaker() - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = &core.Genesis{ Config: params.TestChainConfig, Alloc: core.GenesisAlloc{testBank: {Balance: big.NewInt(1000000)}}, @@ -78,7 +79,7 @@ func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func // with the given number of blocks already known, and potential notification // channels for different events. In case of an error, the constructor force- // fails the test. -func newTestProtocolManagerMust(t *testing.T, mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, *ethdb.MemDatabase) { +func newTestProtocolManagerMust(t *testing.T, mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, ethdb.Database) { pm, db, err := newTestProtocolManager(mode, blocks, generator, newtx) if err != nil { t.Fatalf("Failed to create protocol manager: %v", err) diff --git a/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json b/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json index b8a4cdd2..d1c8ac91 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json +++ b/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json @@ -65,7 +65,7 @@ "value": "0x0" } ], - "error": "invalid jump destination (PUSH1) 0", + "error": "evm: invalid jump destination", "from": "0xe4a13bc304682a903e9472f469c33801dd18d9e8", "gas": "0x435c8", "gasUsed": "0x435c8", diff --git a/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_throw.json b/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_throw.json index 60d4d107..d66f1ffa 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_throw.json +++ b/vendor/github.com/ethereum/go-ethereum/eth/tracers/testdata/call_tracer_throw.json @@ -50,7 +50,7 @@ }, "input": "0xf88b8206668504a817c8008303d09094c212e03b9e060e36facad5fd8f4435412ca22e6b80a451a34eb8000000000000000000000000000000000000000000000027fad02094277c000029a0692a3b4e7b2842f8dd7832e712c21e09f451f416c8976d5b8d02e8c0c2b4bea9a07645e90fc421b63dd755767fd93d3c03b4ec0c4d8fafa059558d08cf11d59750", "result": { - "error": "invalid jump destination (PUSH1) 2", + "error": "evm: invalid jump destination", "from": "0x70c9217d814985faef62b124420f8dfbddd96433", "gas": "0x37b38", "gasUsed": "0x37b38", diff --git a/vendor/github.com/ethereum/go-ethereum/eth/tracers/tracers_test.go b/vendor/github.com/ethereum/go-ethereum/eth/tracers/tracers_test.go index b435b169..69eb80a5 100644 --- a/vendor/github.com/ethereum/go-ethereum/eth/tracers/tracers_test.go +++ b/vendor/github.com/ethereum/go-ethereum/eth/tracers/tracers_test.go @@ -31,10 +31,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/tests" @@ -121,7 +121,7 @@ type callTracerTest struct { } func TestPrestateTracerCreate2(t *testing.T) { - unsigned_tx := types.NewTransaction(1, common.HexToAddress("0x00000000000000000000000000000000deadbeef"), + unsignedTx := types.NewTransaction(1, common.HexToAddress("0x00000000000000000000000000000000deadbeef"), new(big.Int), 5000000, big.NewInt(1), []byte{}) privateKeyECDSA, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader) @@ -129,7 +129,7 @@ func TestPrestateTracerCreate2(t *testing.T) { t.Fatalf("err %v", err) } signer := types.NewEIP155Signer(big.NewInt(1)) - tx, err := types.SignTx(unsigned_tx, signer, privateKeyECDSA) + tx, err := types.SignTx(unsignedTx, signer, privateKeyECDSA) if err != nil { t.Fatalf("err %v", err) } @@ -155,6 +155,7 @@ func TestPrestateTracerCreate2(t *testing.T) { GasPrice: big.NewInt(1), } alloc := core.GenesisAlloc{} + // The code pushes 'deadbeef' into memory, then the other params, and calls CREATE2, then returns // the address alloc[common.HexToAddress("0x00000000000000000000000000000000deadbeef")] = core.GenesisAccount{ @@ -167,7 +168,8 @@ func TestPrestateTracerCreate2(t *testing.T) { Code: []byte{}, Balance: big.NewInt(500000000000000), } - statedb := tests.MakePreState(ethdb.NewMemDatabase(), alloc) + statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc) + // Create the tracer, the EVM environment and run it tracer, err := New("prestateTracer") if err != nil { @@ -240,7 +242,7 @@ func TestCallTracer(t *testing.T) { GasLimit: uint64(test.Context.GasLimit), GasPrice: tx.GasPrice(), } - statedb := tests.MakePreState(ethdb.NewMemDatabase(), test.Genesis.Alloc) + statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc) // Create the tracer, the EVM environment and run it tracer, err := New("callTracer") diff --git a/vendor/github.com/ethereum/go-ethereum/eth/ulc_config.go b/vendor/github.com/ethereum/go-ethereum/eth/ulc_config.go new file mode 100644 index 00000000..effa6da2 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/eth/ulc_config.go @@ -0,0 +1,9 @@ +package eth + +const DefaultULCMinTrustedFraction = 75 + +// ULCConfig is a Ultra Light client options. +type ULCConfig struct { + TrustedServers []string `toml:",omitempty"` // A list of trusted servers + MinTrustedFraction int `toml:",omitempty"` // Minimum percentage of connected trusted servers to validate trusted (1-100) +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/.gitignore b/vendor/github.com/ethereum/go-ethereum/ethdb/.gitignore deleted file mode 100644 index f725d58d..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. -# -# If you find yourself ignoring temporary files generated by your text editor -# or operating system, you probably want to add a global ignore instead: -# git config --global core.excludesfile ~/.gitignore_global - -/tmp -*/**/*un~ -*un~ -.DS_Store -*/**/.DS_Store - diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/interface.go b/vendor/github.com/ethereum/go-ethereum/ethdb/batch.go similarity index 53% rename from vendor/github.com/ethereum/go-ethereum/ethdb/interface.go rename to vendor/github.com/ethereum/go-ethereum/ethdb/batch.go index af135577..a9c40635 100644 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/interface.go +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/batch.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -16,37 +16,31 @@ package ethdb -// Code using batches should try to add this much data to the batch. -// The value was determined empirically. +// IdealBatchSize defines the size of the data batches should ideally add in one +// write. const IdealBatchSize = 100 * 1024 -// Putter wraps the database write operation supported by both batches and regular databases. -type Putter interface { - Put(key []byte, value []byte) error +// Batch is a write-only database that commits changes to its host database +// when Write is called. A batch cannot be used concurrently. +type Batch interface { + Writer + + // ValueSize retrieves the amount of data queued up for writing. + ValueSize() int + + // Write flushes any accumulated data to disk. + Write() error + + // Reset resets the batch for reuse. + Reset() + + // Replay replays the batch contents. + Replay(w Writer) error } -// Deleter wraps the database delete operation supported by both batches and regular databases. -type Deleter interface { - Delete(key []byte) error -} - -// Database wraps all database operations. All methods are safe for concurrent use. -type Database interface { - Putter - Deleter - Get(key []byte) ([]byte, error) - Has(key []byte) (bool, error) - Close() +// Batcher wraps the NewBatch method of a backing data store. +type Batcher interface { + // NewBatch creates a write-only database that buffers changes to its host db + // until a final write is called. NewBatch() Batch } - -// Batch is a write-only database that commits changes to its host database -// when Write is called. Batch cannot be used concurrently. -type Batch interface { - Putter - Deleter - ValueSize() int // amount of data in the batch - Write() error - // Reset resets the batch for reuse - Reset() -} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/database.go b/vendor/github.com/ethereum/go-ethereum/ethdb/database.go index 6c62d6a3..bab99aed 100644 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/database.go +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/database.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,371 +14,67 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !js - +// Package ethdb defines the interfaces for an Ethereum data store. package ethdb -import ( - "fmt" - "strconv" - "strings" - "sync" - "time" +import "io" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/filter" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) +// Reader wraps the Has and Get method of a backing data store. +type Reader interface { + // Has retrieves if a key is present in the key-value data store. + Has(key []byte) (bool, error) -const ( - writePauseWarningThrottler = 1 * time.Minute -) - -var OpenFileLimit = 64 - -type LDBDatabase struct { - fn string // filename for reporting - db *leveldb.DB // LevelDB instance - - compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction - compReadMeter metrics.Meter // Meter for measuring the data read during compaction - compWriteMeter metrics.Meter // Meter for measuring the data written during compaction - writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction - writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction - diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read - diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written - - quitLock sync.Mutex // Mutex protecting the quit channel access - quitChan chan chan error // Quit channel to stop the metrics collection before closing the database - - log log.Logger // Contextual logger tracking the database path + // Get retrieves the given key if it's present in the key-value data store. + Get(key []byte) ([]byte, error) } -// NewLDBDatabase returns a LevelDB wrapped object. -func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error) { - logger := log.New("database", file) +// Writer wraps the Put method of a backing data store. +type Writer interface { + // Put inserts the given value into the key-value data store. + Put(key []byte, value []byte) error - // Ensure we have some minimal caching and file guarantees - if cache < 16 { - cache = 16 - } - if handles < 16 { - handles = 16 - } - logger.Info("Allocated cache and file handles", "cache", cache, "handles", handles) - - // Open the db and recover any potential corruptions - db, err := leveldb.OpenFile(file, &opt.Options{ - OpenFilesCacheCapacity: handles, - BlockCacheCapacity: cache / 2 * opt.MiB, - WriteBuffer: cache / 4 * opt.MiB, // Two of these are used internally - Filter: filter.NewBloomFilter(10), - }) - if _, corrupted := err.(*errors.ErrCorrupted); corrupted { - db, err = leveldb.RecoverFile(file, nil) - } - // (Re)check for errors and abort if opening of the db failed - if err != nil { - return nil, err - } - return &LDBDatabase{ - fn: file, - db: db, - log: logger, - }, nil + // Delete removes the key from the key-value data store. + Delete(key []byte) error } -// Path returns the path to the database directory. -func (db *LDBDatabase) Path() string { - return db.fn +// Stater wraps the Stat method of a backing data store. +type Stater interface { + // Stat returns a particular internal stat of the database. + Stat(property string) (string, error) } -// Put puts the given key / value to the queue -func (db *LDBDatabase) Put(key []byte, value []byte) error { - return db.db.Put(key, value, nil) +// Compacter wraps the Compact method of a backing data store. +type Compacter interface { + // Compact flattens the underlying data store for the given key range. In essence, + // deleted and overwritten versions are discarded, and the data is rearranged to + // reduce the cost of operations needed to access them. + // + // A nil start is treated as a key before all keys in the data store; a nil limit + // is treated as a key after all keys in the data store. If both is nil then it + // will compact entire data store. + Compact(start []byte, limit []byte) error } -func (db *LDBDatabase) Has(key []byte) (bool, error) { - return db.db.Has(key, nil) +// KeyValueStore contains all the methods required to allow handling different +// key-value data stores backing the high level database. +type KeyValueStore interface { + Reader + Writer + Batcher + Iteratee + Stater + Compacter + io.Closer } -// Get returns the given key if it's present. -func (db *LDBDatabase) Get(key []byte) ([]byte, error) { - dat, err := db.db.Get(key, nil) - if err != nil { - return nil, err - } - return dat, nil -} - -// Delete deletes the key from the queue and database -func (db *LDBDatabase) Delete(key []byte) error { - return db.db.Delete(key, nil) -} - -func (db *LDBDatabase) NewIterator() iterator.Iterator { - return db.db.NewIterator(nil, nil) -} - -// NewIteratorWithPrefix returns a iterator to iterate over subset of database content with a particular prefix. -func (db *LDBDatabase) NewIteratorWithPrefix(prefix []byte) iterator.Iterator { - return db.db.NewIterator(util.BytesPrefix(prefix), nil) -} - -func (db *LDBDatabase) Close() { - // Stop the metrics collection to avoid internal database races - db.quitLock.Lock() - defer db.quitLock.Unlock() - - if db.quitChan != nil { - errc := make(chan error) - db.quitChan <- errc - if err := <-errc; err != nil { - db.log.Error("Metrics collection failed", "err", err) - } - db.quitChan = nil - } - err := db.db.Close() - if err == nil { - db.log.Info("Database closed") - } else { - db.log.Error("Failed to close database", "err", err) - } -} - -func (db *LDBDatabase) LDB() *leveldb.DB { - return db.db -} - -// Meter configures the database metrics collectors and -func (db *LDBDatabase) Meter(prefix string) { - // Initialize all the metrics collector at the requested prefix - db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil) - db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil) - db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil) - db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil) - db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil) - db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil) - db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil) - - // Create a quit channel for the periodic collector and run it - db.quitLock.Lock() - db.quitChan = make(chan chan error) - db.quitLock.Unlock() - - go db.meter(3 * time.Second) -} - -// meter periodically retrieves internal leveldb counters and reports them to -// the metrics subsystem. -// -// This is how a stats table look like (currently): -// Compactions -// Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB) -// -------+------------+---------------+---------------+---------------+--------------- -// 0 | 0 | 0.00000 | 1.27969 | 0.00000 | 12.31098 -// 1 | 85 | 109.27913 | 28.09293 | 213.92493 | 214.26294 -// 2 | 523 | 1000.37159 | 7.26059 | 66.86342 | 66.77884 -// 3 | 570 | 1113.18458 | 0.00000 | 0.00000 | 0.00000 -// -// This is how the write delay look like (currently): -// DelayN:5 Delay:406.604657ms Paused: false -// -// This is how the iostats look like (currently): -// Read(MB):3895.04860 Write(MB):3654.64712 -func (db *LDBDatabase) meter(refresh time.Duration) { - // Create the counters to store current and previous compaction values - compactions := make([][]float64, 2) - for i := 0; i < 2; i++ { - compactions[i] = make([]float64, 3) - } - // Create storage for iostats. - var iostats [2]float64 - - // Create storage and warning log tracer for write delay. - var ( - delaystats [2]int64 - lastWritePaused time.Time - ) - - var ( - errc chan error - merr error - ) - - // Iterate ad infinitum and collect the stats - for i := 1; errc == nil && merr == nil; i++ { - // Retrieve the database stats - stats, err := db.db.GetProperty("leveldb.stats") - if err != nil { - db.log.Error("Failed to read database stats", "err", err) - merr = err - continue - } - // Find the compaction table, skip the header - lines := strings.Split(stats, "\n") - for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { - lines = lines[1:] - } - if len(lines) <= 3 { - db.log.Error("Compaction table not found") - merr = errors.New("compaction table not found") - continue - } - lines = lines[3:] - - // Iterate over all the table rows, and accumulate the entries - for j := 0; j < len(compactions[i%2]); j++ { - compactions[i%2][j] = 0 - } - for _, line := range lines { - parts := strings.Split(line, "|") - if len(parts) != 6 { - break - } - for idx, counter := range parts[3:] { - value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) - if err != nil { - db.log.Error("Compaction entry parsing failed", "err", err) - merr = err - continue - } - compactions[i%2][idx] += value - } - } - // Update all the requested meters - if db.compTimeMeter != nil { - db.compTimeMeter.Mark(int64((compactions[i%2][0] - compactions[(i-1)%2][0]) * 1000 * 1000 * 1000)) - } - if db.compReadMeter != nil { - db.compReadMeter.Mark(int64((compactions[i%2][1] - compactions[(i-1)%2][1]) * 1024 * 1024)) - } - if db.compWriteMeter != nil { - db.compWriteMeter.Mark(int64((compactions[i%2][2] - compactions[(i-1)%2][2]) * 1024 * 1024)) - } - - // Retrieve the write delay statistic - writedelay, err := db.db.GetProperty("leveldb.writedelay") - if err != nil { - db.log.Error("Failed to read database write delay statistic", "err", err) - merr = err - continue - } - var ( - delayN int64 - delayDuration string - duration time.Duration - paused bool - ) - if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { - db.log.Error("Write delay statistic not found") - merr = err - continue - } - duration, err = time.ParseDuration(delayDuration) - if err != nil { - db.log.Error("Failed to parse delay duration", "err", err) - merr = err - continue - } - if db.writeDelayNMeter != nil { - db.writeDelayNMeter.Mark(delayN - delaystats[0]) - } - if db.writeDelayMeter != nil { - db.writeDelayMeter.Mark(duration.Nanoseconds() - delaystats[1]) - } - // If a warning that db is performing compaction has been displayed, any subsequent - // warnings will be withheld for one minute not to overwhelm the user. - if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 && - time.Now().After(lastWritePaused.Add(writePauseWarningThrottler)) { - db.log.Warn("Database compacting, degraded performance") - lastWritePaused = time.Now() - } - delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() - - // Retrieve the database iostats. - ioStats, err := db.db.GetProperty("leveldb.iostats") - if err != nil { - db.log.Error("Failed to read database iostats", "err", err) - merr = err - continue - } - var nRead, nWrite float64 - parts := strings.Split(ioStats, " ") - if len(parts) < 2 { - db.log.Error("Bad syntax of ioStats", "ioStats", ioStats) - merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) - continue - } - if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { - db.log.Error("Bad syntax of read entry", "entry", parts[0]) - merr = err - continue - } - if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { - db.log.Error("Bad syntax of write entry", "entry", parts[1]) - merr = err - continue - } - if db.diskReadMeter != nil { - db.diskReadMeter.Mark(int64((nRead - iostats[0]) * 1024 * 1024)) - } - if db.diskWriteMeter != nil { - db.diskWriteMeter.Mark(int64((nWrite - iostats[1]) * 1024 * 1024)) - } - iostats[0], iostats[1] = nRead, nWrite - - // Sleep a bit, then repeat the stats collection - select { - case errc = <-db.quitChan: - // Quit requesting, stop hammering the database - case <-time.After(refresh): - // Timeout, gather a new set of stats - } - } - - if errc == nil { - errc = <-db.quitChan - } - errc <- merr -} - -func (db *LDBDatabase) NewBatch() Batch { - return &ldbBatch{db: db.db, b: new(leveldb.Batch)} -} - -type ldbBatch struct { - db *leveldb.DB - b *leveldb.Batch - size int -} - -func (b *ldbBatch) Put(key, value []byte) error { - b.b.Put(key, value) - b.size += len(value) - return nil -} - -func (b *ldbBatch) Delete(key []byte) error { - b.b.Delete(key) - b.size += 1 - return nil -} - -func (b *ldbBatch) Write() error { - return b.db.Write(b.b, nil) -} - -func (b *ldbBatch) ValueSize() int { - return b.size -} - -func (b *ldbBatch) Reset() { - b.b.Reset() - b.size = 0 +// Database contains all the methods required by the high level database to not +// only access the key-value data store but also the chain freezer. +type Database interface { + Reader + Writer + Batcher + Iteratee + Stater + Compacter + io.Closer } diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/database_js.go b/vendor/github.com/ethereum/go-ethereum/ethdb/database_js.go deleted file mode 100644 index ba6eeb5a..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/database_js.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build js - -package ethdb - -import ( - "errors" -) - -var errNotSupported = errors.New("ethdb: not supported") - -type LDBDatabase struct { -} - -// NewLDBDatabase returns a LevelDB wrapped object. -func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error) { - return nil, errNotSupported -} - -// Path returns the path to the database directory. -func (db *LDBDatabase) Path() string { - return "" -} - -// Put puts the given key / value to the queue -func (db *LDBDatabase) Put(key []byte, value []byte) error { - return errNotSupported -} - -func (db *LDBDatabase) Has(key []byte) (bool, error) { - return false, errNotSupported -} - -// Get returns the given key if it's present. -func (db *LDBDatabase) Get(key []byte) ([]byte, error) { - return nil, errNotSupported -} - -// Delete deletes the key from the queue and database -func (db *LDBDatabase) Delete(key []byte) error { - return errNotSupported -} - -func (db *LDBDatabase) Close() { -} - -// Meter configures the database metrics collectors and -func (db *LDBDatabase) Meter(prefix string) { -} - -func (db *LDBDatabase) NewBatch() Batch { - return nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/database_test.go b/vendor/github.com/ethereum/go-ethereum/ethdb/database_test.go deleted file mode 100644 index 382fedbf..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/database_test.go +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !js - -package ethdb_test - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "strconv" - "sync" - "testing" - - "github.com/ethereum/go-ethereum/ethdb" -) - -func newTestLDB() (*ethdb.LDBDatabase, func()) { - dirname, err := ioutil.TempDir(os.TempDir(), "ethdb_test_") - if err != nil { - panic("failed to create test file: " + err.Error()) - } - db, err := ethdb.NewLDBDatabase(dirname, 0, 0) - if err != nil { - panic("failed to create test database: " + err.Error()) - } - - return db, func() { - db.Close() - os.RemoveAll(dirname) - } -} - -var test_values = []string{"", "a", "1251", "\x00123\x00"} - -func TestLDB_PutGet(t *testing.T) { - db, remove := newTestLDB() - defer remove() - testPutGet(db, t) -} - -func TestMemoryDB_PutGet(t *testing.T) { - testPutGet(ethdb.NewMemDatabase(), t) -} - -func testPutGet(db ethdb.Database, t *testing.T) { - t.Parallel() - - for _, k := range test_values { - err := db.Put([]byte(k), nil) - if err != nil { - t.Fatalf("put failed: %v", err) - } - } - - for _, k := range test_values { - data, err := db.Get([]byte(k)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if len(data) != 0 { - t.Fatalf("get returned wrong result, got %q expected nil", string(data)) - } - } - - _, err := db.Get([]byte("non-exist-key")) - if err == nil { - t.Fatalf("expect to return a not found error") - } - - for _, v := range test_values { - err := db.Put([]byte(v), []byte(v)) - if err != nil { - t.Fatalf("put failed: %v", err) - } - } - - for _, v := range test_values { - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte(v)) { - t.Fatalf("get returned wrong result, got %q expected %q", string(data), v) - } - } - - for _, v := range test_values { - err := db.Put([]byte(v), []byte("?")) - if err != nil { - t.Fatalf("put override failed: %v", err) - } - } - - for _, v := range test_values { - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte("?")) { - t.Fatalf("get returned wrong result, got %q expected ?", string(data)) - } - } - - for _, v := range test_values { - orig, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - orig[0] = byte(0xff) - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte("?")) { - t.Fatalf("get returned wrong result, got %q expected ?", string(data)) - } - } - - for _, v := range test_values { - err := db.Delete([]byte(v)) - if err != nil { - t.Fatalf("delete %q failed: %v", v, err) - } - } - - for _, v := range test_values { - _, err := db.Get([]byte(v)) - if err == nil { - t.Fatalf("got deleted value %q", v) - } - } -} - -func TestLDB_ParallelPutGet(t *testing.T) { - db, remove := newTestLDB() - defer remove() - testParallelPutGet(db, t) -} - -func TestMemoryDB_ParallelPutGet(t *testing.T) { - testParallelPutGet(ethdb.NewMemDatabase(), t) -} - -func testParallelPutGet(db ethdb.Database, t *testing.T) { - const n = 8 - var pending sync.WaitGroup - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - err := db.Put([]byte(key), []byte("v"+key)) - if err != nil { - panic("put failed: " + err.Error()) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - data, err := db.Get([]byte(key)) - if err != nil { - panic("get failed: " + err.Error()) - } - if !bytes.Equal(data, []byte("v"+key)) { - panic(fmt.Sprintf("get failed, got %q expected %q", []byte(data), []byte("v"+key))) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - err := db.Delete([]byte(key)) - if err != nil { - panic("delete failed: " + err.Error()) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - _, err := db.Get([]byte(key)) - if err == nil { - panic("get succeeded") - } - }(strconv.Itoa(i)) - } - pending.Wait() -} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/iterator.go b/vendor/github.com/ethereum/go-ethereum/ethdb/iterator.go new file mode 100644 index 00000000..f3cee7ec --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/iterator.go @@ -0,0 +1,61 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethdb + +// Iterator iterates over a database's key/value pairs in ascending key order. +// +// When it encounters an error any seek will return false and will yield no key/ +// value pairs. The error can be queried by calling the Error method. Calling +// Release is still necessary. +// +// An iterator must be released after use, but it is not necessary to read an +// iterator until exhaustion. An iterator is not safe for concurrent use, but it +// is safe to use multiple iterators concurrently. +type Iterator interface { + // Next moves the iterator to the next key/value pair. It returns whether the + // iterator is exhausted. + Next() bool + + // Error returns any accumulated error. Exhausting all the key/value pairs + // is not considered to be an error. + Error() error + + // Key returns the key of the current key/value pair, or nil if done. The caller + // should not modify the contents of the returned slice, and its contents may + // change on the next call to Next. + Key() []byte + + // Value returns the value of the current key/value pair, or nil if done. The + // caller should not modify the contents of the returned slice, and its contents + // may change on the next call to Next. + Value() []byte + + // Release releases associated resources. Release should always succeed and can + // be called multiple times without causing error. + Release() +} + +// Iteratee wraps the NewIterator methods of a backing data store. +type Iteratee interface { + // NewIterator creates a binary-alphabetical iterator over the entire keyspace + // contained within the key-value database. + NewIterator() Iterator + + // NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset + // of database content with a particular key prefix. + NewIteratorWithPrefix(prefix []byte) Iterator +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/leveldb/leveldb.go b/vendor/github.com/ethereum/go-ethereum/ethdb/leveldb/leveldb.go new file mode 100644 index 00000000..f437cb97 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/leveldb/leveldb.go @@ -0,0 +1,447 @@ +// Copyright 2014 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// +build !js + +// Package leveldb implements the key-value database layer based on LevelDB. +package leveldb + +import ( + "fmt" + "strconv" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/errors" + "github.com/syndtr/goleveldb/leveldb/filter" + "github.com/syndtr/goleveldb/leveldb/opt" + "github.com/syndtr/goleveldb/leveldb/util" +) + +const ( + // degradationWarnInterval specifies how often warning should be printed if the + // leveldb database cannot keep up with requested writes. + degradationWarnInterval = time.Minute + + // minCache is the minimum amount of memory in megabytes to allocate to leveldb + // read and write caching, split half and half. + minCache = 16 + + // minHandles is the minimum number of files handles to allocate to the open + // database files. + minHandles = 16 + + // metricsGatheringInterval specifies the interval to retrieve leveldb database + // compaction, io and pause stats to report to the user. + metricsGatheringInterval = 3 * time.Second +) + +// Database is a persistent key-value store. Apart from basic data storage +// functionality it also supports batch writes and iterating over the keyspace in +// binary-alphabetical order. +type Database struct { + fn string // filename for reporting + db *leveldb.DB // LevelDB instance + + compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction + compReadMeter metrics.Meter // Meter for measuring the data read during compaction + compWriteMeter metrics.Meter // Meter for measuring the data written during compaction + writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction + writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction + diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read + diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written + + quitLock sync.Mutex // Mutex protecting the quit channel access + quitChan chan chan error // Quit channel to stop the metrics collection before closing the database + + log log.Logger // Contextual logger tracking the database path +} + +// New returns a wrapped LevelDB object. The namespace is the prefix that the +// metrics reporting should use for surfacing internal stats. +func New(file string, cache int, handles int, namespace string) (*Database, error) { + // Ensure we have some minimal caching and file guarantees + if cache < minCache { + cache = minCache + } + if handles < minHandles { + handles = minHandles + } + logger := log.New("database", file) + logger.Info("Allocated cache and file handles", "cache", common.StorageSize(cache*1024*1024), "handles", handles) + + // Open the db and recover any potential corruptions + db, err := leveldb.OpenFile(file, &opt.Options{ + OpenFilesCacheCapacity: handles, + BlockCacheCapacity: cache / 2 * opt.MiB, + WriteBuffer: cache / 4 * opt.MiB, // Two of these are used internally + Filter: filter.NewBloomFilter(10), + }) + if _, corrupted := err.(*errors.ErrCorrupted); corrupted { + db, err = leveldb.RecoverFile(file, nil) + } + if err != nil { + return nil, err + } + // Assemble the wrapper with all the registered metrics + ldb := &Database{ + fn: file, + db: db, + log: logger, + quitChan: make(chan chan error), + } + ldb.compTimeMeter = metrics.NewRegisteredMeter(namespace+"compact/time", nil) + ldb.compReadMeter = metrics.NewRegisteredMeter(namespace+"compact/input", nil) + ldb.compWriteMeter = metrics.NewRegisteredMeter(namespace+"compact/output", nil) + ldb.diskReadMeter = metrics.NewRegisteredMeter(namespace+"disk/read", nil) + ldb.diskWriteMeter = metrics.NewRegisteredMeter(namespace+"disk/write", nil) + ldb.writeDelayMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/duration", nil) + ldb.writeDelayNMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/counter", nil) + + // Start up the metrics gathering and return + go ldb.meter(metricsGatheringInterval) + return ldb, nil +} + +// Close stops the metrics collection, flushes any pending data to disk and closes +// all io accesses to the underlying key-value store. +func (db *Database) Close() error { + db.quitLock.Lock() + defer db.quitLock.Unlock() + + if db.quitChan != nil { + errc := make(chan error) + db.quitChan <- errc + if err := <-errc; err != nil { + db.log.Error("Metrics collection failed", "err", err) + } + db.quitChan = nil + } + return db.db.Close() +} + +// Has retrieves if a key is present in the key-value store. +func (db *Database) Has(key []byte) (bool, error) { + return db.db.Has(key, nil) +} + +// Get retrieves the given key if it's present in the key-value store. +func (db *Database) Get(key []byte) ([]byte, error) { + dat, err := db.db.Get(key, nil) + if err != nil { + return nil, err + } + return dat, nil +} + +// Put inserts the given value into the key-value store. +func (db *Database) Put(key []byte, value []byte) error { + return db.db.Put(key, value, nil) +} + +// Delete removes the key from the key-value store. +func (db *Database) Delete(key []byte) error { + return db.db.Delete(key, nil) +} + +// NewBatch creates a write-only key-value store that buffers changes to its host +// database until a final write is called. +func (db *Database) NewBatch() ethdb.Batch { + return &batch{ + db: db.db, + b: new(leveldb.Batch), + } +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the leveldb database. +func (db *Database) NewIterator() ethdb.Iterator { + return db.NewIteratorWithPrefix(nil) +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + return db.db.NewIterator(util.BytesPrefix(prefix), nil) +} + +// Stat returns a particular internal stat of the database. +func (db *Database) Stat(property string) (string, error) { + return db.db.GetProperty(property) +} + +// Compact flattens the underlying data store for the given key range. In essence, +// deleted and overwritten versions are discarded, and the data is rearranged to +// reduce the cost of operations needed to access them. +// +// A nil start is treated as a key before all keys in the data store; a nil limit +// is treated as a key after all keys in the data store. If both is nil then it +// will compact entire data store. +func (db *Database) Compact(start []byte, limit []byte) error { + return db.db.CompactRange(util.Range{Start: start, Limit: limit}) +} + +// Path returns the path to the database directory. +func (db *Database) Path() string { + return db.fn +} + +// meter periodically retrieves internal leveldb counters and reports them to +// the metrics subsystem. +// +// This is how a LevelDB stats table looks like (currently): +// Compactions +// Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB) +// -------+------------+---------------+---------------+---------------+--------------- +// 0 | 0 | 0.00000 | 1.27969 | 0.00000 | 12.31098 +// 1 | 85 | 109.27913 | 28.09293 | 213.92493 | 214.26294 +// 2 | 523 | 1000.37159 | 7.26059 | 66.86342 | 66.77884 +// 3 | 570 | 1113.18458 | 0.00000 | 0.00000 | 0.00000 +// +// This is how the write delay look like (currently): +// DelayN:5 Delay:406.604657ms Paused: false +// +// This is how the iostats look like (currently): +// Read(MB):3895.04860 Write(MB):3654.64712 +func (db *Database) meter(refresh time.Duration) { + // Create the counters to store current and previous compaction values + compactions := make([][]float64, 2) + for i := 0; i < 2; i++ { + compactions[i] = make([]float64, 3) + } + // Create storage for iostats. + var iostats [2]float64 + + // Create storage and warning log tracer for write delay. + var ( + delaystats [2]int64 + lastWritePaused time.Time + ) + + var ( + errc chan error + merr error + ) + + // Iterate ad infinitum and collect the stats + for i := 1; errc == nil && merr == nil; i++ { + // Retrieve the database stats + stats, err := db.db.GetProperty("leveldb.stats") + if err != nil { + db.log.Error("Failed to read database stats", "err", err) + merr = err + continue + } + // Find the compaction table, skip the header + lines := strings.Split(stats, "\n") + for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { + lines = lines[1:] + } + if len(lines) <= 3 { + db.log.Error("Compaction leveldbTable not found") + merr = errors.New("compaction leveldbTable not found") + continue + } + lines = lines[3:] + + // Iterate over all the leveldbTable rows, and accumulate the entries + for j := 0; j < len(compactions[i%2]); j++ { + compactions[i%2][j] = 0 + } + for _, line := range lines { + parts := strings.Split(line, "|") + if len(parts) != 6 { + break + } + for idx, counter := range parts[3:] { + value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) + if err != nil { + db.log.Error("Compaction entry parsing failed", "err", err) + merr = err + continue + } + compactions[i%2][idx] += value + } + } + // Update all the requested meters + if db.compTimeMeter != nil { + db.compTimeMeter.Mark(int64((compactions[i%2][0] - compactions[(i-1)%2][0]) * 1000 * 1000 * 1000)) + } + if db.compReadMeter != nil { + db.compReadMeter.Mark(int64((compactions[i%2][1] - compactions[(i-1)%2][1]) * 1024 * 1024)) + } + if db.compWriteMeter != nil { + db.compWriteMeter.Mark(int64((compactions[i%2][2] - compactions[(i-1)%2][2]) * 1024 * 1024)) + } + + // Retrieve the write delay statistic + writedelay, err := db.db.GetProperty("leveldb.writedelay") + if err != nil { + db.log.Error("Failed to read database write delay statistic", "err", err) + merr = err + continue + } + var ( + delayN int64 + delayDuration string + duration time.Duration + paused bool + ) + if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { + db.log.Error("Write delay statistic not found") + merr = err + continue + } + duration, err = time.ParseDuration(delayDuration) + if err != nil { + db.log.Error("Failed to parse delay duration", "err", err) + merr = err + continue + } + if db.writeDelayNMeter != nil { + db.writeDelayNMeter.Mark(delayN - delaystats[0]) + } + if db.writeDelayMeter != nil { + db.writeDelayMeter.Mark(duration.Nanoseconds() - delaystats[1]) + } + // If a warning that db is performing compaction has been displayed, any subsequent + // warnings will be withheld for one minute not to overwhelm the user. + if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 && + time.Now().After(lastWritePaused.Add(degradationWarnInterval)) { + db.log.Warn("Database compacting, degraded performance") + lastWritePaused = time.Now() + } + delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() + + // Retrieve the database iostats. + ioStats, err := db.db.GetProperty("leveldb.iostats") + if err != nil { + db.log.Error("Failed to read database iostats", "err", err) + merr = err + continue + } + var nRead, nWrite float64 + parts := strings.Split(ioStats, " ") + if len(parts) < 2 { + db.log.Error("Bad syntax of ioStats", "ioStats", ioStats) + merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) + continue + } + if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { + db.log.Error("Bad syntax of read entry", "entry", parts[0]) + merr = err + continue + } + if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { + db.log.Error("Bad syntax of write entry", "entry", parts[1]) + merr = err + continue + } + if db.diskReadMeter != nil { + db.diskReadMeter.Mark(int64((nRead - iostats[0]) * 1024 * 1024)) + } + if db.diskWriteMeter != nil { + db.diskWriteMeter.Mark(int64((nWrite - iostats[1]) * 1024 * 1024)) + } + iostats[0], iostats[1] = nRead, nWrite + + // Sleep a bit, then repeat the stats collection + select { + case errc = <-db.quitChan: + // Quit requesting, stop hammering the database + case <-time.After(refresh): + // Timeout, gather a new set of stats + } + } + + if errc == nil { + errc = <-db.quitChan + } + errc <- merr +} + +// batch is a write-only leveldb batch that commits changes to its host database +// when Write is called. A batch cannot be used concurrently. +type batch struct { + db *leveldb.DB + b *leveldb.Batch + size int +} + +// Put inserts the given value into the batch for later committing. +func (b *batch) Put(key, value []byte) error { + b.b.Put(key, value) + b.size += len(value) + return nil +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *batch) Delete(key []byte) error { + b.b.Delete(key) + b.size++ + return nil +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *batch) ValueSize() int { + return b.size +} + +// Write flushes any accumulated data to disk. +func (b *batch) Write() error { + return b.db.Write(b.b, nil) +} + +// Reset resets the batch for reuse. +func (b *batch) Reset() { + b.b.Reset() + b.size = 0 +} + +// Replay replays the batch contents. +func (b *batch) Replay(w ethdb.Writer) error { + return b.b.Replay(&replayer{writer: w}) +} + +// replayer is a small wrapper to implement the correct replay methods. +type replayer struct { + writer ethdb.Writer + failure error +} + +// Put inserts the given value into the key-value data store. +func (r *replayer) Put(key, value []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Put(key, value) +} + +// Delete removes the key from the key-value data store. +func (r *replayer) Delete(key []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Delete(key) +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/memory_database.go b/vendor/github.com/ethereum/go-ethereum/ethdb/memory_database.go deleted file mode 100644 index 727f2f7c..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/memory_database.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -import ( - "errors" - "sync" - - "github.com/ethereum/go-ethereum/common" -) - -/* - * This is a test memory database. Do not use for any production it does not get persisted - */ -type MemDatabase struct { - db map[string][]byte - lock sync.RWMutex -} - -func NewMemDatabase() *MemDatabase { - return &MemDatabase{ - db: make(map[string][]byte), - } -} - -func NewMemDatabaseWithCap(size int) *MemDatabase { - return &MemDatabase{ - db: make(map[string][]byte, size), - } -} - -func (db *MemDatabase) Put(key []byte, value []byte) error { - db.lock.Lock() - defer db.lock.Unlock() - - db.db[string(key)] = common.CopyBytes(value) - return nil -} - -func (db *MemDatabase) Has(key []byte) (bool, error) { - db.lock.RLock() - defer db.lock.RUnlock() - - _, ok := db.db[string(key)] - return ok, nil -} - -func (db *MemDatabase) Get(key []byte) ([]byte, error) { - db.lock.RLock() - defer db.lock.RUnlock() - - if entry, ok := db.db[string(key)]; ok { - return common.CopyBytes(entry), nil - } - return nil, errors.New("not found") -} - -func (db *MemDatabase) Keys() [][]byte { - db.lock.RLock() - defer db.lock.RUnlock() - - keys := [][]byte{} - for key := range db.db { - keys = append(keys, []byte(key)) - } - return keys -} - -func (db *MemDatabase) Delete(key []byte) error { - db.lock.Lock() - defer db.lock.Unlock() - - delete(db.db, string(key)) - return nil -} - -func (db *MemDatabase) Close() {} - -func (db *MemDatabase) NewBatch() Batch { - return &memBatch{db: db} -} - -func (db *MemDatabase) Len() int { return len(db.db) } - -type kv struct { - k, v []byte - del bool -} - -type memBatch struct { - db *MemDatabase - writes []kv - size int -} - -func (b *memBatch) Put(key, value []byte) error { - b.writes = append(b.writes, kv{common.CopyBytes(key), common.CopyBytes(value), false}) - b.size += len(value) - return nil -} - -func (b *memBatch) Delete(key []byte) error { - b.writes = append(b.writes, kv{common.CopyBytes(key), nil, true}) - b.size += 1 - return nil -} - -func (b *memBatch) Write() error { - b.db.lock.Lock() - defer b.db.lock.Unlock() - - for _, kv := range b.writes { - if kv.del { - delete(b.db.db, string(kv.k)) - continue - } - b.db.db[string(kv.k)] = kv.v - } - return nil -} - -func (b *memBatch) ValueSize() int { - return b.size -} - -func (b *memBatch) Reset() { - b.writes = b.writes[:0] - b.size = 0 -} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb.go b/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb.go new file mode 100644 index 00000000..5c3f7e22 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb.go @@ -0,0 +1,314 @@ +// Copyright 2014 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package memorydb implements the key-value database layer based on memory maps. +package memorydb + +import ( + "errors" + "sort" + "strings" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" +) + +var ( + // errMemorydbClosed is returned if a memory database was already closed at the + // invocation of a data access operation. + errMemorydbClosed = errors.New("database closed") + + // errMemorydbNotFound is returned if a key is requested that is not found in + // the provided memory database. + errMemorydbNotFound = errors.New("not found") +) + +// Database is an ephemeral key-value store. Apart from basic data storage +// functionality it also supports batch writes and iterating over the keyspace in +// binary-alphabetical order. +type Database struct { + db map[string][]byte + lock sync.RWMutex +} + +// New returns a wrapped map with all the required database interface methods +// implemented. +func New() *Database { + return &Database{ + db: make(map[string][]byte), + } +} + +// NewWithCap returns a wrapped map pre-allocated to the provided capcity with +// all the required database interface methods implemented. +func NewWithCap(size int) *Database { + return &Database{ + db: make(map[string][]byte, size), + } +} + +// Close deallocates the internal map and ensures any consecutive data access op +// failes with an error. +func (db *Database) Close() error { + db.lock.Lock() + defer db.lock.Unlock() + + db.db = nil + return nil +} + +// Has retrieves if a key is present in the key-value store. +func (db *Database) Has(key []byte) (bool, error) { + db.lock.RLock() + defer db.lock.RUnlock() + + if db.db == nil { + return false, errMemorydbClosed + } + _, ok := db.db[string(key)] + return ok, nil +} + +// Get retrieves the given key if it's present in the key-value store. +func (db *Database) Get(key []byte) ([]byte, error) { + db.lock.RLock() + defer db.lock.RUnlock() + + if db.db == nil { + return nil, errMemorydbClosed + } + if entry, ok := db.db[string(key)]; ok { + return common.CopyBytes(entry), nil + } + return nil, errMemorydbNotFound +} + +// Put inserts the given value into the key-value store. +func (db *Database) Put(key []byte, value []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + if db.db == nil { + return errMemorydbClosed + } + db.db[string(key)] = common.CopyBytes(value) + return nil +} + +// Delete removes the key from the key-value store. +func (db *Database) Delete(key []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + if db.db == nil { + return errMemorydbClosed + } + delete(db.db, string(key)) + return nil +} + +// NewBatch creates a write-only key-value store that buffers changes to its host +// database until a final write is called. +func (db *Database) NewBatch() ethdb.Batch { + return &batch{ + db: db, + } +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the memory database. +func (db *Database) NewIterator() ethdb.Iterator { + return db.NewIteratorWithPrefix(nil) +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + db.lock.RLock() + defer db.lock.RUnlock() + + var ( + pr = string(prefix) + keys = make([]string, 0, len(db.db)) + values = make([][]byte, 0, len(db.db)) + ) + // Collect the keys from the memory database corresponding to the given prefix + for key := range db.db { + if strings.HasPrefix(key, pr) { + keys = append(keys, key) + } + } + // Sort the items and retrieve the associated values + sort.Strings(keys) + for _, key := range keys { + values = append(values, db.db[key]) + } + return &iterator{ + keys: keys, + values: values, + } +} + +// Stat returns a particular internal stat of the database. +func (db *Database) Stat(property string) (string, error) { + return "", errors.New("unknown property") +} + +// Compact is not supported on a memory database. +func (db *Database) Compact(start []byte, limit []byte) error { + return errors.New("unsupported operation") +} + +// Len returns the number of entries currently present in the memory database. +// +// Note, this method is only used for testing (i.e. not public in general) and +// does not have explicit checks for closed-ness to allow simpler testing code. +func (db *Database) Len() int { + db.lock.RLock() + defer db.lock.RUnlock() + + return len(db.db) +} + +// keyvalue is a key-value tuple tagged with a deletion field to allow creating +// memory-database write batches. +type keyvalue struct { + key []byte + value []byte + delete bool +} + +// batch is a write-only memory batch that commits changes to its host +// database when Write is called. A batch cannot be used concurrently. +type batch struct { + db *Database + writes []keyvalue + size int +} + +// Put inserts the given value into the batch for later committing. +func (b *batch) Put(key, value []byte) error { + b.writes = append(b.writes, keyvalue{common.CopyBytes(key), common.CopyBytes(value), false}) + b.size += len(value) + return nil +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *batch) Delete(key []byte) error { + b.writes = append(b.writes, keyvalue{common.CopyBytes(key), nil, true}) + b.size += 1 + return nil +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *batch) ValueSize() int { + return b.size +} + +// Write flushes any accumulated data to the memory database. +func (b *batch) Write() error { + b.db.lock.Lock() + defer b.db.lock.Unlock() + + for _, keyvalue := range b.writes { + if keyvalue.delete { + delete(b.db.db, string(keyvalue.key)) + continue + } + b.db.db[string(keyvalue.key)] = keyvalue.value + } + return nil +} + +// Reset resets the batch for reuse. +func (b *batch) Reset() { + b.writes = b.writes[:0] + b.size = 0 +} + +// Replay replays the batch contents. +func (b *batch) Replay(w ethdb.Writer) error { + for _, keyvalue := range b.writes { + if keyvalue.delete { + if err := w.Delete(keyvalue.key); err != nil { + return err + } + continue + } + if err := w.Put(keyvalue.key, keyvalue.value); err != nil { + return err + } + } + return nil +} + +// iterator can walk over the (potentially partial) keyspace of a memory key +// value store. Internally it is a deep copy of the entire iterated state, +// sorted by keys. +type iterator struct { + inited bool + keys []string + values [][]byte +} + +// Next moves the iterator to the next key/value pair. It returns whether the +// iterator is exhausted. +func (it *iterator) Next() bool { + // If the iterator was not yet initialized, do it now + if !it.inited { + it.inited = true + return len(it.keys) > 0 + } + // Iterator already initialize, advance it + if len(it.keys) > 0 { + it.keys = it.keys[1:] + it.values = it.values[1:] + } + return len(it.keys) > 0 +} + +// Error returns any accumulated error. Exhausting all the key/value pairs +// is not considered to be an error. A memory iterator cannot encounter errors. +func (it *iterator) Error() error { + return nil +} + +// Key returns the key of the current key/value pair, or nil if done. The caller +// should not modify the contents of the returned slice, and its contents may +// change on the next call to Next. +func (it *iterator) Key() []byte { + if len(it.keys) > 0 { + return []byte(it.keys[0]) + } + return nil +} + +// Value returns the value of the current key/value pair, or nil if done. The +// caller should not modify the contents of the returned slice, and its contents +// may change on the next call to Next. +func (it *iterator) Value() []byte { + if len(it.values) > 0 { + return it.values[0] + } + return nil +} + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (it *iterator) Release() { + it.keys, it.values = nil, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb_test.go b/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb_test.go new file mode 100644 index 00000000..4210a0f7 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/ethdb/memorydb/memorydb_test.go @@ -0,0 +1,100 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package memorydb + +import ( + "bytes" + "testing" +) + +// Tests that key-value iteration on top of a memory database works. +func TestMemoryDBIterator(t *testing.T) { + tests := []struct { + content map[string]string + prefix string + order []string + }{ + // Empty databases should be iterable + {map[string]string{}, "", nil}, + {map[string]string{}, "non-existent-prefix", nil}, + + // Single-item databases should be iterable + {map[string]string{"key": "val"}, "", []string{"key"}}, + {map[string]string{"key": "val"}, "k", []string{"key"}}, + {map[string]string{"key": "val"}, "l", nil}, + + // Multi-item databases should be fully iterable + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "", + []string{"k1", "k2", "k3", "k4", "k5"}, + }, + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "k", + []string{"k1", "k2", "k3", "k4", "k5"}, + }, + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "l", + nil, + }, + // Multi-item databases should be prefix-iterable + { + map[string]string{ + "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", + "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", + }, + "ka", + []string{"ka1", "ka2", "ka3", "ka4", "ka5"}, + }, + { + map[string]string{ + "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", + "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", + }, + "kc", + nil, + }, + } + for i, tt := range tests { + // Create the key-value data store + db := New() + for key, val := range tt.content { + if err := db.Put([]byte(key), []byte(val)); err != nil { + t.Fatalf("test %d: failed to insert item %s:%s into database: %v", i, key, val, err) + } + } + // Iterate over the database with the given configs and verify the results + it, idx := db.NewIteratorWithPrefix([]byte(tt.prefix)), 0 + for it.Next() { + if !bytes.Equal(it.Key(), []byte(tt.order[idx])) { + t.Errorf("test %d: item %d: key mismatch: have %s, want %s", i, idx, string(it.Key()), tt.order[idx]) + } + if !bytes.Equal(it.Value(), []byte(tt.content[tt.order[idx]])) { + t.Errorf("test %d: item %d: value mismatch: have %s, want %s", i, idx, string(it.Value()), tt.content[tt.order[idx]]) + } + idx++ + } + if err := it.Error(); err != nil { + t.Errorf("test %d: iteration failed: %v", i, err) + } + if idx != len(tt.order) { + t.Errorf("test %d: iteration terminated prematurely: have %d, want %d", i, idx, len(tt.order)) + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/table.go b/vendor/github.com/ethereum/go-ethereum/ethdb/table.go deleted file mode 100644 index 28069c07..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/table.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -type table struct { - db Database - prefix string -} - -// NewTable returns a Database object that prefixes all keys with a given -// string. -func NewTable(db Database, prefix string) Database { - return &table{ - db: db, - prefix: prefix, - } -} - -func (dt *table) Put(key []byte, value []byte) error { - return dt.db.Put(append([]byte(dt.prefix), key...), value) -} - -func (dt *table) Has(key []byte) (bool, error) { - return dt.db.Has(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Get(key []byte) ([]byte, error) { - return dt.db.Get(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Delete(key []byte) error { - return dt.db.Delete(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Close() { - // Do nothing; don't close the underlying DB. -} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/table_batch.go b/vendor/github.com/ethereum/go-ethereum/ethdb/table_batch.go deleted file mode 100644 index ae83e79c..00000000 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/table_batch.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -type tableBatch struct { - batch Batch - prefix string -} - -// NewTableBatch returns a Batch object which prefixes all keys with a given string. -func NewTableBatch(db Database, prefix string) Batch { - return &tableBatch{db.NewBatch(), prefix} -} - -func (dt *table) NewBatch() Batch { - return &tableBatch{dt.db.NewBatch(), dt.prefix} -} - -func (tb *tableBatch) Put(key, value []byte) error { - return tb.batch.Put(append([]byte(tb.prefix), key...), value) -} - -func (tb *tableBatch) Delete(key []byte) error { - return tb.batch.Delete(append([]byte(tb.prefix), key...)) -} - -func (tb *tableBatch) Write() error { - return tb.batch.Write() -} - -func (tb *tableBatch) ValueSize() int { - return tb.batch.ValueSize() -} - -func (tb *tableBatch) Reset() { - tb.batch.Reset() -} diff --git a/vendor/github.com/ethereum/go-ethereum/graphql/graphiql.go b/vendor/github.com/ethereum/go-ethereum/graphql/graphiql.go new file mode 100644 index 00000000..6d9dda3e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/graphql/graphiql.go @@ -0,0 +1,95 @@ +// The MIT License (MIT) +// +// Copyright (c) 2016 Muhammed Thanish +// +// 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. + +package graphql + +import ( + "bytes" + "fmt" + "net/http" +) + +// GraphiQL is an in-browser IDE for exploring GraphiQL APIs. +// This handler returns GraphiQL when requested. +// +// For more information, see https://github.com/graphql/graphiql. +type GraphiQL struct{} + +func respond(w http.ResponseWriter, body []byte, code int) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") + w.WriteHeader(code) + _, _ = w.Write(body) +} + +func errorJSON(msg string) []byte { + buf := bytes.Buffer{} + fmt.Fprintf(&buf, `{"error": "%s"}`, msg) + return buf.Bytes() +} + +func (h GraphiQL) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + respond(w, errorJSON("only GET requests are supported"), http.StatusMethodNotAllowed) + return + } + + w.Write(graphiql) +} + +var graphiql = []byte(` + + + + + + + + + + +

    Loading...
    + + + +`) diff --git a/vendor/github.com/ethereum/go-ethereum/graphql/graphql.go b/vendor/github.com/ethereum/go-ethereum/graphql/graphql.go new file mode 100644 index 00000000..b16f93e4 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/graphql/graphql.go @@ -0,0 +1,1233 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package graphql provides a GraphQL interface to Ethereum node data. +package graphql + +import ( + "context" + "errors" + "fmt" + "net" + "net/http" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + graphqlgo "github.com/graph-gophers/graphql-go" + "github.com/graph-gophers/graphql-go/relay" +) + +var OnlyOnMainChainError = errors.New("This operation is only available for blocks on the canonical chain.") +var BlockInvariantError = errors.New("Block objects must be instantiated with at least one of num or hash.") + +// Account represents an Ethereum account at a particular block. +type Account struct { + backend *eth.EthAPIBackend + address common.Address + blockNumber rpc.BlockNumber +} + +// getState fetches the StateDB object for an account. +func (a *Account) getState(ctx context.Context) (*state.StateDB, error) { + state, _, err := a.backend.StateAndHeaderByNumber(ctx, a.blockNumber) + return state, err +} + +func (a *Account) Address(ctx context.Context) (common.Address, error) { + return a.address, nil +} + +func (a *Account) Balance(ctx context.Context) (hexutil.Big, error) { + state, err := a.getState(ctx) + if err != nil { + return hexutil.Big{}, err + } + + return hexutil.Big(*state.GetBalance(a.address)), nil +} + +func (a *Account) TransactionCount(ctx context.Context) (hexutil.Uint64, error) { + state, err := a.getState(ctx) + if err != nil { + return 0, err + } + + return hexutil.Uint64(state.GetNonce(a.address)), nil +} + +func (a *Account) Code(ctx context.Context) (hexutil.Bytes, error) { + state, err := a.getState(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + + return hexutil.Bytes(state.GetCode(a.address)), nil +} + +func (a *Account) Storage(ctx context.Context, args struct{ Slot common.Hash }) (common.Hash, error) { + state, err := a.getState(ctx) + if err != nil { + return common.Hash{}, err + } + + return state.GetState(a.address, args.Slot), nil +} + +// Log represents an individual log message. All arguments are mandatory. +type Log struct { + backend *eth.EthAPIBackend + transaction *Transaction + log *types.Log +} + +func (l *Log) Transaction(ctx context.Context) *Transaction { + return l.transaction +} + +func (l *Log) Account(ctx context.Context, args BlockNumberArgs) *Account { + return &Account{ + backend: l.backend, + address: l.log.Address, + blockNumber: args.Number(), + } +} + +func (l *Log) Index(ctx context.Context) int32 { + return int32(l.log.Index) +} + +func (l *Log) Topics(ctx context.Context) []common.Hash { + return l.log.Topics +} + +func (l *Log) Data(ctx context.Context) hexutil.Bytes { + return hexutil.Bytes(l.log.Data) +} + +// Transaction represents an Ethereum transaction. +// backend and hash are mandatory; all others will be fetched when required. +type Transaction struct { + backend *eth.EthAPIBackend + hash common.Hash + tx *types.Transaction + block *Block + index uint64 +} + +// resolve returns the internal transaction object, fetching it if needed. +func (t *Transaction) resolve(ctx context.Context) (*types.Transaction, error) { + if t.tx == nil { + tx, blockHash, _, index := rawdb.ReadTransaction(t.backend.ChainDb(), t.hash) + if tx != nil { + t.tx = tx + t.block = &Block{ + backend: t.backend, + hash: blockHash, + canonical: unknown, + } + t.index = index + } else { + t.tx = t.backend.GetPoolTransaction(t.hash) + } + } + return t.tx, nil +} + +func (tx *Transaction) Hash(ctx context.Context) common.Hash { + return tx.hash +} + +func (t *Transaction) InputData(ctx context.Context) (hexutil.Bytes, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(tx.Data()), nil +} + +func (t *Transaction) Gas(ctx context.Context) (hexutil.Uint64, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return 0, err + } + return hexutil.Uint64(tx.Gas()), nil +} + +func (t *Transaction) GasPrice(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + return hexutil.Big(*tx.GasPrice()), nil +} + +func (t *Transaction) Value(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + return hexutil.Big(*tx.Value()), nil +} + +func (t *Transaction) Nonce(ctx context.Context) (hexutil.Uint64, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return 0, err + } + return hexutil.Uint64(tx.Nonce()), nil +} + +func (t *Transaction) To(ctx context.Context, args BlockNumberArgs) (*Account, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + + to := tx.To() + if to == nil { + return nil, nil + } + + return &Account{ + backend: t.backend, + address: *to, + blockNumber: args.Number(), + }, nil +} + +func (t *Transaction) From(ctx context.Context, args BlockNumberArgs) (*Account, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + + var signer types.Signer = types.FrontierSigner{} + if tx.Protected() { + signer = types.NewEIP155Signer(tx.ChainId()) + } + from, _ := types.Sender(signer, tx) + + return &Account{ + backend: t.backend, + address: from, + blockNumber: args.Number(), + }, nil +} + +func (t *Transaction) Block(ctx context.Context) (*Block, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + return t.block, nil +} + +func (t *Transaction) Index(ctx context.Context) (*int32, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + if t.block == nil { + return nil, nil + } + index := int32(t.index) + return &index, nil +} + +// getReceipt returns the receipt associated with this transaction, if any. +func (t *Transaction) getReceipt(ctx context.Context) (*types.Receipt, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + + if t.block == nil { + return nil, nil + } + + receipts, err := t.block.resolveReceipts(ctx) + if err != nil { + return nil, err + } + + return receipts[t.index], nil +} + +func (t *Transaction) Status(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + + ret := hexutil.Uint64(receipt.Status) + return &ret, nil +} + +func (t *Transaction) GasUsed(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + + ret := hexutil.Uint64(receipt.GasUsed) + return &ret, nil +} + +func (t *Transaction) CumulativeGasUsed(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + + ret := hexutil.Uint64(receipt.CumulativeGasUsed) + return &ret, nil +} + +func (t *Transaction) CreatedContract(ctx context.Context, args BlockNumberArgs) (*Account, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil || receipt.ContractAddress == (common.Address{}) { + return nil, err + } + + return &Account{ + backend: t.backend, + address: receipt.ContractAddress, + blockNumber: args.Number(), + }, nil +} + +func (t *Transaction) Logs(ctx context.Context) (*[]*Log, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + + ret := make([]*Log, 0, len(receipt.Logs)) + for _, log := range receipt.Logs { + ret = append(ret, &Log{ + backend: t.backend, + transaction: t, + log: log, + }) + } + return &ret, nil +} + +type BlockType int + +const ( + unknown BlockType = iota + isCanonical + notCanonical +) + +// Block represents an Ethereum block. +// backend, and either num or hash are mandatory. All other fields are lazily fetched +// when required. +type Block struct { + backend *eth.EthAPIBackend + num *rpc.BlockNumber + hash common.Hash + header *types.Header + block *types.Block + receipts []*types.Receipt + canonical BlockType // Indicates if this block is on the main chain or not. +} + +func (b *Block) onMainChain(ctx context.Context) error { + if b.canonical == unknown { + header, err := b.resolveHeader(ctx) + if err != nil { + return err + } + canonHeader, err := b.backend.HeaderByNumber(ctx, rpc.BlockNumber(header.Number.Uint64())) + if err != nil { + return err + } + if header.Hash() == canonHeader.Hash() { + b.canonical = isCanonical + } else { + b.canonical = notCanonical + } + } + if b.canonical != isCanonical { + return OnlyOnMainChainError + } + return nil +} + +// resolve returns the internal Block object representing this block, fetching +// it if necessary. +func (b *Block) resolve(ctx context.Context) (*types.Block, error) { + if b.block != nil { + return b.block, nil + } + + var err error + if b.hash != (common.Hash{}) { + b.block, err = b.backend.GetBlock(ctx, b.hash) + } else { + b.block, err = b.backend.BlockByNumber(ctx, *b.num) + } + if b.block != nil { + b.header = b.block.Header() + } + return b.block, err +} + +// resolveHeader returns the internal Header object for this block, fetching it +// if necessary. Call this function instead of `resolve` unless you need the +// additional data (transactions and uncles). +func (b *Block) resolveHeader(ctx context.Context) (*types.Header, error) { + if b.num == nil && b.hash == (common.Hash{}) { + return nil, BlockInvariantError + } + + if b.header == nil { + if _, err := b.resolve(ctx); err != nil { + return nil, err + } + } + return b.header, nil +} + +// resolveReceipts returns the list of receipts for this block, fetching them +// if necessary. +func (b *Block) resolveReceipts(ctx context.Context) ([]*types.Receipt, error) { + if b.receipts == nil { + hash := b.hash + if hash == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + hash = header.Hash() + } + + receipts, err := b.backend.GetReceipts(ctx, hash) + if err != nil { + return nil, err + } + b.receipts = []*types.Receipt(receipts) + } + return b.receipts, nil +} + +func (b *Block) Number(ctx context.Context) (hexutil.Uint64, error) { + if b.num == nil || *b.num == rpc.LatestBlockNumber { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + num := rpc.BlockNumber(header.Number.Uint64()) + b.num = &num + } + return hexutil.Uint64(*b.num), nil +} + +func (b *Block) Hash(ctx context.Context) (common.Hash, error) { + if b.hash == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + b.hash = header.Hash() + } + return b.hash, nil +} + +func (b *Block) GasLimit(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(header.GasLimit), nil +} + +func (b *Block) GasUsed(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(header.GasUsed), nil +} + +func (b *Block) Parent(ctx context.Context) (*Block, error) { + // If the block hasn't been fetched, and we'll need it, fetch it. + if b.num == nil && b.hash != (common.Hash{}) && b.header == nil { + if _, err := b.resolve(ctx); err != nil { + return nil, err + } + } + + if b.header != nil && b.block.NumberU64() > 0 { + num := rpc.BlockNumber(b.header.Number.Uint64() - 1) + return &Block{ + backend: b.backend, + num: &num, + hash: b.header.ParentHash, + canonical: unknown, + }, nil + } + if b.num != nil && *b.num != 0 { + num := *b.num - 1 + return &Block{ + backend: b.backend, + num: &num, + canonical: isCanonical, + }, nil + } + return nil, nil +} + +func (b *Block) Difficulty(ctx context.Context) (hexutil.Big, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Big{}, err + } + return hexutil.Big(*header.Difficulty), nil +} + +func (b *Block) Timestamp(ctx context.Context) (hexutil.Big, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Big{}, err + } + return hexutil.Big(*header.Time), nil +} + +func (b *Block) Nonce(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Nonce[:]), nil +} + +func (b *Block) MixHash(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.MixDigest, nil +} + +func (b *Block) TransactionsRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.TxHash, nil +} + +func (b *Block) StateRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.Root, nil +} + +func (b *Block) ReceiptsRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.ReceiptHash, nil +} + +func (b *Block) OmmerHash(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.UncleHash, nil +} + +func (b *Block) OmmerCount(ctx context.Context) (*int32, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + count := int32(len(block.Uncles())) + return &count, err +} + +func (b *Block) Ommers(ctx context.Context) (*[]*Block, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + + ret := make([]*Block, 0, len(block.Uncles())) + for _, uncle := range block.Uncles() { + blockNumber := rpc.BlockNumber(uncle.Number.Uint64()) + ret = append(ret, &Block{ + backend: b.backend, + num: &blockNumber, + hash: uncle.Hash(), + header: uncle, + canonical: notCanonical, + }) + } + return &ret, nil +} + +func (b *Block) ExtraData(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Extra), nil +} + +func (b *Block) LogsBloom(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Bloom.Bytes()), nil +} + +func (b *Block) TotalDifficulty(ctx context.Context) (hexutil.Big, error) { + h := b.hash + if h == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Big{}, err + } + h = header.Hash() + } + + return hexutil.Big(*b.backend.GetTd(h)), nil +} + +// BlockNumberArgs encapsulates arguments to accessors that specify a block number. +type BlockNumberArgs struct { + Block *hexutil.Uint64 +} + +// Number returns the provided block number, or rpc.LatestBlockNumber if none +// was provided. +func (a BlockNumberArgs) Number() rpc.BlockNumber { + if a.Block != nil { + return rpc.BlockNumber(*a.Block) + } + return rpc.LatestBlockNumber +} + +func (b *Block) Miner(ctx context.Context, args BlockNumberArgs) (*Account, error) { + block, err := b.resolve(ctx) + if err != nil { + return nil, err + } + + return &Account{ + backend: b.backend, + address: block.Coinbase(), + blockNumber: args.Number(), + }, nil +} + +func (b *Block) TransactionCount(ctx context.Context) (*int32, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + count := int32(len(block.Transactions())) + return &count, err +} + +func (b *Block) Transactions(ctx context.Context) (*[]*Transaction, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + + ret := make([]*Transaction, 0, len(block.Transactions())) + for i, tx := range block.Transactions() { + ret = append(ret, &Transaction{ + backend: b.backend, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(i), + }) + } + return &ret, nil +} + +func (b *Block) TransactionAt(ctx context.Context, args struct{ Index int32 }) (*Transaction, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + + txes := block.Transactions() + if args.Index < 0 || int(args.Index) >= len(txes) { + return nil, nil + } + + tx := txes[args.Index] + return &Transaction{ + backend: b.backend, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(args.Index), + }, nil +} + +func (b *Block) OmmerAt(ctx context.Context, args struct{ Index int32 }) (*Block, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + + uncles := block.Uncles() + if args.Index < 0 || int(args.Index) >= len(uncles) { + return nil, nil + } + + uncle := uncles[args.Index] + blockNumber := rpc.BlockNumber(uncle.Number.Uint64()) + return &Block{ + backend: b.backend, + num: &blockNumber, + hash: uncle.Hash(), + header: uncle, + canonical: notCanonical, + }, nil +} + +// BlockFilterCriteria encapsulates criteria passed to a `logs` accessor inside +// a block. +type BlockFilterCriteria struct { + Addresses *[]common.Address // restricts matches to events created by specific contracts + + // The Topic list restricts matches to particular event topics. Each event has a list + // of topics. Topics matches a prefix of that list. An empty element slice matches any + // topic. Non-empty elements represent an alternative that matches any of the + // contained topics. + // + // Examples: + // {} or nil matches any topic list + // {{A}} matches topic A in first position + // {{}, {B}} matches any topic in first position, B in second position + // {{A}, {B}} matches topic A in first position, B in second position + // {{A, B}}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + Topics *[][]common.Hash +} + +// runFilter accepts a filter and executes it, returning all its results as +// `Log` objects. +func runFilter(ctx context.Context, be *eth.EthAPIBackend, filter *filters.Filter) ([]*Log, error) { + logs, err := filter.Logs(ctx) + if err != nil || logs == nil { + return nil, err + } + + ret := make([]*Log, 0, len(logs)) + for _, log := range logs { + ret = append(ret, &Log{ + backend: be, + transaction: &Transaction{backend: be, hash: log.TxHash}, + log: log, + }) + } + return ret, nil +} + +func (b *Block) Logs(ctx context.Context, args struct{ Filter BlockFilterCriteria }) ([]*Log, error) { + var addresses []common.Address + if args.Filter.Addresses != nil { + addresses = *args.Filter.Addresses + } + + var topics [][]common.Hash + if args.Filter.Topics != nil { + topics = *args.Filter.Topics + } + + hash := b.hash + if hash == (common.Hash{}) { + block, err := b.resolve(ctx) + if err != nil { + return nil, err + } + hash = block.Hash() + } + + // Construct the range filter + filter := filters.NewBlockFilter(b.backend, hash, addresses, topics) + + // Run the filter and return all the logs + return runFilter(ctx, b.backend, filter) +} + +func (b *Block) Account(ctx context.Context, args struct { + Address common.Address +}) (*Account, error) { + err := b.onMainChain(ctx) + if err != nil { + return nil, err + } + + if b.num == nil { + _, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + } + + return &Account{ + backend: b.backend, + address: args.Address, + blockNumber: *b.num, + }, nil +} + +// CallData encapsulates arguments to `call` or `estimateGas`. +// All arguments are optional. +type CallData struct { + From *common.Address // The Ethereum address the call is from. + To *common.Address // The Ethereum address the call is to. + Gas *hexutil.Uint64 // The amount of gas provided for the call. + GasPrice *hexutil.Big // The price of each unit of gas, in wei. + Value *hexutil.Big // The value sent along with the call. + Data *hexutil.Bytes // Any data sent with the call. +} + +// CallResult encapsulates the result of an invocation of the `call` accessor. +type CallResult struct { + data hexutil.Bytes // The return data from the call + gasUsed hexutil.Uint64 // The amount of gas used + status hexutil.Uint64 // The return status of the call - 0 for failure or 1 for success. +} + +func (c *CallResult) Data() hexutil.Bytes { + return c.data +} + +func (c *CallResult) GasUsed() hexutil.Uint64 { + return c.gasUsed +} + +func (c *CallResult) Status() hexutil.Uint64 { + return c.status +} + +func (b *Block) Call(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (*CallResult, error) { + err := b.onMainChain(ctx) + if err != nil { + return nil, err + } + + if b.num == nil { + _, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + } + + result, gas, failed, err := ethapi.DoCall(ctx, b.backend, args.Data, *b.num, vm.Config{}, 5*time.Second) + status := hexutil.Uint64(1) + if failed { + status = 0 + } + return &CallResult{ + data: hexutil.Bytes(result), + gasUsed: hexutil.Uint64(gas), + status: status, + }, err +} + +func (b *Block) EstimateGas(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (hexutil.Uint64, error) { + err := b.onMainChain(ctx) + if err != nil { + return hexutil.Uint64(0), err + } + + if b.num == nil { + _, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Uint64(0), err + } + } + + gas, err := ethapi.DoEstimateGas(ctx, b.backend, args.Data, *b.num) + return gas, err +} + +type Pending struct { + backend *eth.EthAPIBackend +} + +func (p *Pending) TransactionCount(ctx context.Context) (int32, error) { + txs, err := p.backend.GetPoolTransactions() + return int32(len(txs)), err +} + +func (p *Pending) Transactions(ctx context.Context) (*[]*Transaction, error) { + txs, err := p.backend.GetPoolTransactions() + if err != nil { + return nil, err + } + + ret := make([]*Transaction, 0, len(txs)) + for i, tx := range txs { + ret = append(ret, &Transaction{ + backend: p.backend, + hash: tx.Hash(), + tx: tx, + index: uint64(i), + }) + } + return &ret, nil +} + +func (p *Pending) Account(ctx context.Context, args struct { + Address common.Address +}) *Account { + return &Account{ + backend: p.backend, + address: args.Address, + blockNumber: rpc.PendingBlockNumber, + } +} + +func (p *Pending) Call(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (*CallResult, error) { + result, gas, failed, err := ethapi.DoCall(ctx, p.backend, args.Data, rpc.PendingBlockNumber, vm.Config{}, 5*time.Second) + status := hexutil.Uint64(1) + if failed { + status = 0 + } + return &CallResult{ + data: hexutil.Bytes(result), + gasUsed: hexutil.Uint64(gas), + status: status, + }, err +} + +func (p *Pending) EstimateGas(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (hexutil.Uint64, error) { + return ethapi.DoEstimateGas(ctx, p.backend, args.Data, rpc.PendingBlockNumber) +} + +// Resolver is the top-level object in the GraphQL hierarchy. +type Resolver struct { + backend *eth.EthAPIBackend +} + +func (r *Resolver) Block(ctx context.Context, args struct { + Number *hexutil.Uint64 + Hash *common.Hash +}) (*Block, error) { + var block *Block + if args.Number != nil { + num := rpc.BlockNumber(uint64(*args.Number)) + block = &Block{ + backend: r.backend, + num: &num, + canonical: isCanonical, + } + } else if args.Hash != nil { + block = &Block{ + backend: r.backend, + hash: *args.Hash, + canonical: unknown, + } + } else { + num := rpc.LatestBlockNumber + block = &Block{ + backend: r.backend, + num: &num, + canonical: isCanonical, + } + } + + // Resolve the block; if it doesn't exist, return nil. + b, err := block.resolve(ctx) + if err != nil { + return nil, err + } else if b == nil { + return nil, nil + } + return block, nil +} + +func (r *Resolver) Blocks(ctx context.Context, args struct { + From hexutil.Uint64 + To *hexutil.Uint64 +}) ([]*Block, error) { + from := rpc.BlockNumber(args.From) + + var to rpc.BlockNumber + if args.To != nil { + to = rpc.BlockNumber(*args.To) + } else { + to = rpc.BlockNumber(r.backend.CurrentBlock().Number().Int64()) + } + + if to < from { + return []*Block{}, nil + } + + ret := make([]*Block, 0, to-from+1) + for i := from; i <= to; i++ { + num := i + ret = append(ret, &Block{ + backend: r.backend, + num: &num, + canonical: isCanonical, + }) + } + return ret, nil +} + +func (r *Resolver) Pending(ctx context.Context) *Pending { + return &Pending{r.backend} +} + +func (r *Resolver) Transaction(ctx context.Context, args struct{ Hash common.Hash }) (*Transaction, error) { + tx := &Transaction{ + backend: r.backend, + hash: args.Hash, + } + + // Resolve the transaction; if it doesn't exist, return nil. + t, err := tx.resolve(ctx) + if err != nil { + return nil, err + } else if t == nil { + return nil, nil + } + return tx, nil +} + +func (r *Resolver) SendRawTransaction(ctx context.Context, args struct{ Data hexutil.Bytes }) (common.Hash, error) { + tx := new(types.Transaction) + if err := rlp.DecodeBytes(args.Data, tx); err != nil { + return common.Hash{}, err + } + hash, err := ethapi.SubmitTransaction(ctx, r.backend, tx) + return hash, err +} + +// FilterCriteria encapsulates the arguments to `logs` on the root resolver object. +type FilterCriteria struct { + FromBlock *hexutil.Uint64 // beginning of the queried range, nil means genesis block + ToBlock *hexutil.Uint64 // end of the range, nil means latest block + Addresses *[]common.Address // restricts matches to events created by specific contracts + + // The Topic list restricts matches to particular event topics. Each event has a list + // of topics. Topics matches a prefix of that list. An empty element slice matches any + // topic. Non-empty elements represent an alternative that matches any of the + // contained topics. + // + // Examples: + // {} or nil matches any topic list + // {{A}} matches topic A in first position + // {{}, {B}} matches any topic in first position, B in second position + // {{A}, {B}} matches topic A in first position, B in second position + // {{A, B}}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + Topics *[][]common.Hash +} + +func (r *Resolver) Logs(ctx context.Context, args struct{ Filter FilterCriteria }) ([]*Log, error) { + // Convert the RPC block numbers into internal representations + begin := rpc.LatestBlockNumber.Int64() + if args.Filter.FromBlock != nil { + begin = int64(*args.Filter.FromBlock) + } + end := rpc.LatestBlockNumber.Int64() + if args.Filter.ToBlock != nil { + end = int64(*args.Filter.ToBlock) + } + + var addresses []common.Address + if args.Filter.Addresses != nil { + addresses = *args.Filter.Addresses + } + + var topics [][]common.Hash + if args.Filter.Topics != nil { + topics = *args.Filter.Topics + } + + // Construct the range filter + filter := filters.NewRangeFilter(filters.Backend(r.backend), begin, end, addresses, topics) + + return runFilter(ctx, r.backend, filter) +} + +func (r *Resolver) GasPrice(ctx context.Context) (hexutil.Big, error) { + price, err := r.backend.SuggestPrice(ctx) + return hexutil.Big(*price), err +} + +func (r *Resolver) ProtocolVersion(ctx context.Context) (int32, error) { + return int32(r.backend.ProtocolVersion()), nil +} + +// SyncState represents the synchronisation status returned from the `syncing` accessor. +type SyncState struct { + progress ethereum.SyncProgress +} + +func (s *SyncState) StartingBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.StartingBlock) +} + +func (s *SyncState) CurrentBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.CurrentBlock) +} + +func (s *SyncState) HighestBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HighestBlock) +} + +func (s *SyncState) PulledStates() *hexutil.Uint64 { + ret := hexutil.Uint64(s.progress.PulledStates) + return &ret +} + +func (s *SyncState) KnownStates() *hexutil.Uint64 { + ret := hexutil.Uint64(s.progress.KnownStates) + return &ret +} + +// Syncing returns false in case the node is currently not syncing with the network. It can be up to date or has not +// yet received the latest block headers from its pears. In case it is synchronizing: +// - startingBlock: block number this node started to synchronise from +// - currentBlock: block number this node is currently importing +// - highestBlock: block number of the highest block header this node has received from peers +// - pulledStates: number of state entries processed until now +// - knownStates: number of known state entries that still need to be pulled +func (r *Resolver) Syncing() (*SyncState, error) { + progress := r.backend.Downloader().Progress() + + // Return not syncing if the synchronisation already completed + if progress.CurrentBlock >= progress.HighestBlock { + return nil, nil + } + // Otherwise gather the block sync stats + return &SyncState{progress}, nil +} + +// NewHandler returns a new `http.Handler` that will answer GraphQL queries. +// It additionally exports an interactive query browser on the / endpoint. +func NewHandler(be *eth.EthAPIBackend) (http.Handler, error) { + q := Resolver{be} + + s, err := graphqlgo.ParseSchema(schema, &q) + if err != nil { + return nil, err + } + h := &relay.Handler{Schema: s} + + mux := http.NewServeMux() + mux.Handle("/", GraphiQL{}) + mux.Handle("/graphql", h) + mux.Handle("/graphql/", h) + return mux, nil +} + +// Service encapsulates a GraphQL service. +type Service struct { + endpoint string // The host:port endpoint for this service. + cors []string // Allowed CORS domains + vhosts []string // Recognised vhosts + timeouts rpc.HTTPTimeouts // Timeout settings for HTTP requests. + backend *eth.EthAPIBackend // The backend that queries will operate onn. + handler http.Handler // The `http.Handler` used to answer queries. + listener net.Listener // The listening socket. +} + +// Protocols returns the list of protocols exported by this service. +func (s *Service) Protocols() []p2p.Protocol { return nil } + +// APIs returns the list of APIs exported by this service. +func (s *Service) APIs() []rpc.API { return nil } + +// Start is called after all services have been constructed and the networking +// layer was also initialized to spawn any goroutines required by the service. +func (s *Service) Start(server *p2p.Server) error { + var err error + s.handler, err = NewHandler(s.backend) + if err != nil { + return err + } + + if s.listener, err = net.Listen("tcp", s.endpoint); err != nil { + return err + } + + go rpc.NewHTTPServer(s.cors, s.vhosts, s.timeouts, s.handler).Serve(s.listener) + log.Info("GraphQL endpoint opened", "url", fmt.Sprintf("http://%s", s.endpoint)) + return nil +} + +// Stop terminates all goroutines belonging to the service, blocking until they +// are all terminated. +func (s *Service) Stop() error { + if s.listener != nil { + s.listener.Close() + s.listener = nil + log.Info("GraphQL endpoint closed", "url", fmt.Sprintf("http://%s", s.endpoint)) + } + return nil +} + +// NewService constructs a new service instance. +func NewService(backend *eth.EthAPIBackend, endpoint string, cors, vhosts []string, timeouts rpc.HTTPTimeouts) (*Service, error) { + return &Service{ + endpoint: endpoint, + cors: cors, + vhosts: vhosts, + timeouts: timeouts, + backend: backend, + }, nil +} + +// RegisterGraphQLService is a utility function to construct a new service and register it against a node. +func RegisterGraphQLService(stack *node.Node, endpoint string, cors, vhosts []string, timeouts rpc.HTTPTimeouts) error { + return stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { + var ethereum *eth.Ethereum + if err := ctx.Service(ðereum); err != nil { + return nil, err + } + return NewService(ethereum.APIBackend, endpoint, cors, vhosts, timeouts) + }) +} diff --git a/vendor/github.com/ethereum/go-ethereum/ethdb/database_js_test.go b/vendor/github.com/ethereum/go-ethereum/graphql/graphql_test.go similarity index 72% rename from vendor/github.com/ethereum/go-ethereum/ethdb/database_js_test.go rename to vendor/github.com/ethereum/go-ethereum/graphql/graphql_test.go index b4c12ae0..d6341839 100644 --- a/vendor/github.com/ethereum/go-ethereum/ethdb/database_js_test.go +++ b/vendor/github.com/ethereum/go-ethereum/graphql/graphql_test.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,12 +14,16 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build js - -package ethdb_test +package graphql import ( - "github.com/ethereum/go-ethereum/ethdb" + "testing" ) -var _ ethdb.Database = ðdb.LDBDatabase{} +func TestBuildSchema(t *testing.T) { + // Make sure the schema can be parsed and matched up to the object model. + _, err := NewHandler(nil) + if err != nil { + t.Errorf("Could not construct GraphQL handler: %v", err) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/graphql/schema.go b/vendor/github.com/ethereum/go-ethereum/graphql/schema.go new file mode 100644 index 00000000..e266e429 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/graphql/schema.go @@ -0,0 +1,320 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package graphql + +const schema string = ` + # Bytes32 is a 32 byte binary string, represented as 0x-prefixed hexadecimal. + scalar Bytes32 + # Address is a 20 byte Ethereum address, represented as 0x-prefixed hexadecimal. + scalar Address + # Bytes is an arbitrary length binary string, represented as 0x-prefixed hexadecimal. + # An empty byte string is represented as '0x'. Byte strings must have an even number of hexadecimal nybbles. + scalar Bytes + # BigInt is a large integer. Input is accepted as either a JSON number or as a string. + # Strings may be either decimal or 0x-prefixed hexadecimal. Output values are all + # 0x-prefixed hexadecimal. + scalar BigInt + # Long is a 64 bit unsigned integer. + scalar Long + + schema { + query: Query + mutation: Mutation + } + + # Account is an Ethereum account at a particular block. + type Account { + # Address is the address owning the account. + address: Address! + # Balance is the balance of the account, in wei. + balance: BigInt! + # TransactionCount is the number of transactions sent from this account, + # or in the case of a contract, the number of contracts created. Otherwise + # known as the nonce. + transactionCount: Long! + # Code contains the smart contract code for this account, if the account + # is a (non-self-destructed) contract. + code: Bytes! + # Storage provides access to the storage of a contract account, indexed + # by its 32 byte slot identifier. + storage(slot: Bytes32!): Bytes32! + } + + # Log is an Ethereum event log. + type Log { + # Index is the index of this log in the block. + index: Int! + # Account is the account which generated this log - this will always + # be a contract account. + account(block: Long): Account! + # Topics is a list of 0-4 indexed topics for the log. + topics: [Bytes32!]! + # Data is unindexed data for this log. + data: Bytes! + # Transaction is the transaction that generated this log entry. + transaction: Transaction! + } + + # Transaction is an Ethereum transaction. + type Transaction { + # Hash is the hash of this transaction. + hash: Bytes32! + # Nonce is the nonce of the account this transaction was generated with. + nonce: Long! + # Index is the index of this transaction in the parent block. This will + # be null if the transaction has not yet been mined. + index: Int + # From is the account that sent this transaction - this will always be + # an externally owned account. + from(block: Long): Account! + # To is the account the transaction was sent to. This is null for + # contract-creating transactions. + to(block: Long): Account + # Value is the value, in wei, sent along with this transaction. + value: BigInt! + # GasPrice is the price offered to miners for gas, in wei per unit. + gasPrice: BigInt! + # Gas is the maximum amount of gas this transaction can consume. + gas: Long! + # InputData is the data supplied to the target of the transaction. + inputData: Bytes! + # Block is the block this transaction was mined in. This will be null if + # the transaction has not yet been mined. + block: Block + + # Status is the return status of the transaction. This will be 1 if the + # transaction succeeded, or 0 if it failed (due to a revert, or due to + # running out of gas). If the transaction has not yet been mined, this + # field will be null. + status: Long + # GasUsed is the amount of gas that was used processing this transaction. + # If the transaction has not yet been mined, this field will be null. + gasUsed: Long + # CumulativeGasUsed is the total gas used in the block up to and including + # this transaction. If the transaction has not yet been mined, this field + # will be null. + cumulativeGasUsed: Long + # CreatedContract is the account that was created by a contract creation + # transaction. If the transaction was not a contract creation transaction, + # or it has not yet been mined, this field will be null. + createdContract(block: Long): Account + # Logs is a list of log entries emitted by this transaction. If the + # transaction has not yet been mined, this field will be null. + logs: [Log!] + } + + # BlockFilterCriteria encapsulates log filter criteria for a filter applied + # to a single block. + input BlockFilterCriteria { + # Addresses is list of addresses that are of interest. If this list is + # empty, results will not be filtered by address. + addresses: [Address!] + # Topics list restricts matches to particular event topics. Each event has a list + # of topics. Topics matches a prefix of that list. An empty element array matches any + # topic. Non-empty elements represent an alternative that matches any of the + # contained topics. + # + # Examples: + # - [] or nil matches any topic list + # - [[A]] matches topic A in first position + # - [[], [B]] matches any topic in first position, B in second position + # - [[A], [B]] matches topic A in first position, B in second position + # - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position + topics: [[Bytes32!]!] + } + + # Block is an Ethereum block. + type Block { + # Number is the number of this block, starting at 0 for the genesis block. + number: Long! + # Hash is the block hash of this block. + hash: Bytes32! + # Parent is the parent block of this block. + parent: Block + # Nonce is the block nonce, an 8 byte sequence determined by the miner. + nonce: Bytes! + # TransactionsRoot is the keccak256 hash of the root of the trie of transactions in this block. + transactionsRoot: Bytes32! + # TransactionCount is the number of transactions in this block. if + # transactions are not available for this block, this field will be null. + transactionCount: Int + # StateRoot is the keccak256 hash of the state trie after this block was processed. + stateRoot: Bytes32! + # ReceiptsRoot is the keccak256 hash of the trie of transaction receipts in this block. + receiptsRoot: Bytes32! + # Miner is the account that mined this block. + miner(block: Long): Account! + # ExtraData is an arbitrary data field supplied by the miner. + extraData: Bytes! + # GasLimit is the maximum amount of gas that was available to transactions in this block. + gasLimit: Long! + # GasUsed is the amount of gas that was used executing transactions in this block. + gasUsed: Long! + # Timestamp is the unix timestamp at which this block was mined. + timestamp: BigInt! + # LogsBloom is a bloom filter that can be used to check if a block may + # contain log entries matching a filter. + logsBloom: Bytes! + # MixHash is the hash that was used as an input to the PoW process. + mixHash: Bytes32! + # Difficulty is a measure of the difficulty of mining this block. + difficulty: BigInt! + # TotalDifficulty is the sum of all difficulty values up to and including + # this block. + totalDifficulty: BigInt! + # OmmerCount is the number of ommers (AKA uncles) associated with this + # block. If ommers are unavailable, this field will be null. + ommerCount: Int + # Ommers is a list of ommer (AKA uncle) blocks associated with this block. + # If ommers are unavailable, this field will be null. Depending on your + # node, the transactions, transactionAt, transactionCount, ommers, + # ommerCount and ommerAt fields may not be available on any ommer blocks. + ommers: [Block] + # OmmerAt returns the ommer (AKA uncle) at the specified index. If ommers + # are unavailable, or the index is out of bounds, this field will be null. + ommerAt(index: Int!): Block + # OmmerHash is the keccak256 hash of all the ommers (AKA uncles) + # associated with this block. + ommerHash: Bytes32! + # Transactions is a list of transactions associated with this block. If + # transactions are unavailable for this block, this field will be null. + transactions: [Transaction!] + # TransactionAt returns the transaction at the specified index. If + # transactions are unavailable for this block, or if the index is out of + # bounds, this field will be null. + transactionAt(index: Int!): Transaction + # Logs returns a filtered set of logs from this block. + logs(filter: BlockFilterCriteria!): [Log!]! + # Account fetches an Ethereum account at the current block's state. + account(address: Address!): Account! + # Call executes a local call operation at the current block's state. + call(data: CallData!): CallResult + # EstimateGas estimates the amount of gas that will be required for + # successful execution of a transaction at the current block's state. + estimateGas(data: CallData!): Long! + } + + # CallData represents the data associated with a local contract call. + # All fields are optional. + input CallData { + # From is the address making the call. + from: Address + # To is the address the call is sent to. + to: Address + # Gas is the amount of gas sent with the call. + gas: Long + # GasPrice is the price, in wei, offered for each unit of gas. + gasPrice: BigInt + # Value is the value, in wei, sent along with the call. + value: BigInt + # Data is the data sent to the callee. + data: Bytes + } + + # CallResult is the result of a local call operation. + type CallResult { + # Data is the return data of the called contract. + data: Bytes! + # GasUsed is the amount of gas used by the call, after any refunds. + gasUsed: Long! + # Status is the result of the call - 1 for success or 0 for failure. + status: Long! + } + + # FilterCriteria encapsulates log filter criteria for searching log entries. + input FilterCriteria { + # FromBlock is the block at which to start searching, inclusive. Defaults + # to the latest block if not supplied. + fromBlock: Long + # ToBlock is the block at which to stop searching, inclusive. Defaults + # to the latest block if not supplied. + toBlock: Long + # Addresses is a list of addresses that are of interest. If this list is + # empty, results will not be filtered by address. + addresses: [Address!] + # Topics list restricts matches to particular event topics. Each event has a list + # of topics. Topics matches a prefix of that list. An empty element array matches any + # topic. Non-empty elements represent an alternative that matches any of the + # contained topics. + # + # Examples: + # - [] or nil matches any topic list + # - [[A]] matches topic A in first position + # - [[], [B]] matches any topic in first position, B in second position + # - [[A], [B]] matches topic A in first position, B in second position + # - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position + topics: [[Bytes32!]!] + } + + # SyncState contains the current synchronisation state of the client. + type SyncState{ + # StartingBlock is the block number at which synchronisation started. + startingBlock: Long! + # CurrentBlock is the point at which synchronisation has presently reached. + currentBlock: Long! + # HighestBlock is the latest known block number. + highestBlock: Long! + # PulledStates is the number of state entries fetched so far, or null + # if this is not known or not relevant. + pulledStates: Long + # KnownStates is the number of states the node knows of so far, or null + # if this is not known or not relevant. + knownStates: Long + } + + # Pending represents the current pending state. + type Pending { + # TransactionCount is the number of transactions in the pending state. + transactionCount: Int! + # Transactions is a list of transactions in the current pending state. + transactions: [Transaction!] + # Account fetches an Ethereum account for the pending state. + account(address: Address!): Account! + # Call executes a local call operation for the pending state. + call(data: CallData!): CallResult + # EstimateGas estimates the amount of gas that will be required for + # successful execution of a transaction for the pending state. + estimateGas(data: CallData!): Long! + } + + type Query { + # Block fetches an Ethereum block by number or by hash. If neither is + # supplied, the most recent known block is returned. + block(number: Long, hash: Bytes32): Block + # Blocks returns all the blocks between two numbers, inclusive. If + # to is not supplied, it defaults to the most recent known block. + blocks(from: Long!, to: Long): [Block!]! + # Pending returns the current pending state. + pending: Pending! + # Transaction returns a transaction specified by its hash. + transaction(hash: Bytes32!): Transaction + # Logs returns log entries matching the provided filter. + logs(filter: FilterCriteria!): [Log!]! + # GasPrice returns the node's estimate of a gas price sufficient to + # ensure a transaction is mined in a timely fashion. + gasPrice: BigInt! + # ProtocolVersion returns the current wire protocol version number. + protocolVersion: Int! + # Syncing returns information on the current synchronisation state. + syncing: SyncState + } + + type Mutation { + # SendRawTransaction sends an RLP-encoded transaction to the network. + sendRawTransaction(data: Bytes!): Bytes32! + } +` diff --git a/vendor/github.com/ethereum/go-ethereum/interfaces.go b/vendor/github.com/ethereum/go-ethereum/interfaces.go index be783440..1ff31f96 100644 --- a/vendor/github.com/ethereum/go-ethereum/interfaces.go +++ b/vendor/github.com/ethereum/go-ethereum/interfaces.go @@ -144,9 +144,9 @@ type FilterQuery struct { // Examples: // {} or nil matches any topic list // {{A}} matches topic A in first position - // {{}, {B}} matches any topic in first position, B in second position - // {{A}, {B}} matches topic A in first position, B in second position - // {{A, B}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + // {{}, {B}} matches any topic in first position AND B in second position + // {{A}, {B}} matches topic A in first position AND B in second position + // {{A, B}, {C, D}} matches topic (A OR B) in first position AND (C OR D) in second position Topics [][]common.Hash } diff --git a/vendor/github.com/ethereum/go-ethereum/internal/build/util.go b/vendor/github.com/ethereum/go-ethereum/internal/build/util.go index a41ecfbe..319c0f2d 100644 --- a/vendor/github.com/ethereum/go-ethereum/internal/build/util.go +++ b/vendor/github.com/ethereum/go-ethereum/internal/build/util.go @@ -143,9 +143,9 @@ func CopyFile(dst, src string, mode os.FileMode) { // so that go commands executed by build use the same version of Go as the 'host' that runs // build code. e.g. // -// /usr/lib/go-1.11/bin/go run build/ci.go ... +// /usr/lib/go-1.12.1/bin/go run build/ci.go ... // -// runs using go 1.11 and invokes go 1.11 tools from the same GOROOT. This is also important +// runs using go 1.12.1 and invokes go 1.12.1 tools from the same GOROOT. This is also important // because runtime.Version checks on the host should match the tools that are run. func GoTool(tool string, args ...string) *exec.Cmd { args = append([]string{tool}, args...) diff --git a/vendor/github.com/ethereum/go-ethereum/internal/ethapi/api.go b/vendor/github.com/ethereum/go-ethereum/internal/ethapi/api.go index 73b629bd..e85e6d20 100644 --- a/vendor/github.com/ethereum/go-ethereum/internal/ethapi/api.go +++ b/vendor/github.com/ethereum/go-ethereum/internal/ethapi/api.go @@ -31,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" @@ -43,7 +44,6 @@ import ( "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/util" ) const ( @@ -217,7 +217,7 @@ func NewPrivateAccountAPI(b Backend, nonceLock *AddrLocker) *PrivateAccountAPI { } } -// ListAccounts will return a list of addresses for accounts this node manages. +// listAccounts will return a list of addresses for accounts this node manages. func (s *PrivateAccountAPI) ListAccounts() []common.Address { addresses := make([]common.Address, 0) // return [] instead of nil if empty for _, wallet := range s.am.Wallets() { @@ -356,11 +356,7 @@ func (s *PrivateAccountAPI) signTransaction(ctx context.Context, args *SendTxArg // Assemble the transaction and sign with the wallet tx := args.toTransaction() - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - return wallet.SignTxWithPassphrase(account, passwd, tx, chainID) + return wallet.SignTxWithPassphrase(account, passwd, tx, s.b.ChainConfig().ChainID) } // SendTransaction will create a transaction from the given arguments and @@ -378,7 +374,7 @@ func (s *PrivateAccountAPI) SendTransaction(ctx context.Context, args SendTxArgs log.Warn("Failed transaction send attempt", "from", args.From, "to", args.To, "value", args.Value.ToInt(), "err", err) return common.Hash{}, err } - return submitTransaction(ctx, s.b, signed) + return SubmitTransaction(ctx, s.b, signed) } // SignTransaction will create a transaction from the given arguments and @@ -409,18 +405,6 @@ func (s *PrivateAccountAPI) SignTransaction(ctx context.Context, args SendTxArgs return &SignTransactionResult{data, signed}, nil } -// signHash is a helper function that calculates a hash for the given message that can be -// safely used to calculate a signature from. -// -// The hash is calulcated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). -// -// This gives context to the signed message and prevents signing of transactions. -func signHash(data []byte) []byte { - msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - return crypto.Keccak256([]byte(msg)) -} - // Sign calculates an Ethereum ECDSA signature for: // keccack256("\x19Ethereum Signed Message:\n" + len(message) + message)) // @@ -439,7 +423,7 @@ func (s *PrivateAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr c return nil, err } // Assemble sign the data with the wallet - signature, err := wallet.SignHashWithPassphrase(account, passwd, signHash(data)) + signature, err := wallet.SignTextWithPassphrase(account, passwd, data) if err != nil { log.Warn("Failed data sign attempt", "address", addr, "err", err) return nil, err @@ -467,7 +451,7 @@ func (s *PrivateAccountAPI) EcRecover(ctx context.Context, data, sig hexutil.Byt } sig[64] -= 27 // Transform yellow paper V from 27/28 to 0/1 - rpk, err := crypto.SigToPub(signHash(data), sig) + rpk, err := crypto.SigToPub(accounts.TextHash(data), sig) if err != nil { return common.Address{}, err } @@ -675,41 +659,54 @@ func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.A // CallArgs represents the arguments for a call. type CallArgs struct { - From common.Address `json:"from"` + From *common.Address `json:"from"` To *common.Address `json:"to"` - Gas hexutil.Uint64 `json:"gas"` - GasPrice hexutil.Big `json:"gasPrice"` - Value hexutil.Big `json:"value"` - Data hexutil.Bytes `json:"data"` + Gas *hexutil.Uint64 `json:"gas"` + GasPrice *hexutil.Big `json:"gasPrice"` + Value *hexutil.Big `json:"value"` + Data *hexutil.Bytes `json:"data"` } -func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr rpc.BlockNumber, timeout time.Duration) ([]byte, uint64, bool, error) { +func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumber, vmCfg vm.Config, timeout time.Duration) ([]byte, uint64, bool, error) { defer func(start time.Time) { log.Debug("Executing EVM call finished", "runtime", time.Since(start)) }(time.Now()) - state, header, err := s.b.StateAndHeaderByNumber(ctx, blockNr) + state, header, err := b.StateAndHeaderByNumber(ctx, blockNr) if state == nil || err != nil { return nil, 0, false, err } // Set sender address or use a default if none specified - addr := args.From - if addr == (common.Address{}) { - if wallets := s.b.AccountManager().Wallets(); len(wallets) > 0 { + var addr common.Address + if args.From == nil { + if wallets := b.AccountManager().Wallets(); len(wallets) > 0 { if accounts := wallets[0].Accounts(); len(accounts) > 0 { addr = accounts[0].Address } } + } else { + addr = *args.From } // Set default gas & gas price if none were set - gas, gasPrice := uint64(args.Gas), args.GasPrice.ToInt() - if gas == 0 { - gas = math.MaxUint64 / 2 + gas := uint64(math.MaxUint64 / 2) + if args.Gas != nil { + gas = uint64(*args.Gas) } - if gasPrice.Sign() == 0 { - gasPrice = new(big.Int).SetUint64(defaultGasPrice) + gasPrice := new(big.Int).SetUint64(defaultGasPrice) + if args.GasPrice != nil { + gasPrice = args.GasPrice.ToInt() + } + + value := new(big.Int) + if args.Value != nil { + value = args.Value.ToInt() + } + + var data []byte + if args.Data != nil { + data = []byte(*args.Data) } // Create new call message - msg := types.NewMessage(addr, args.To, 0, args.Value.ToInt(), gas, gasPrice, args.Data, false) + msg := types.NewMessage(addr, args.To, 0, value, gas, gasPrice, data, false) // Setup context so it may be cancelled the call has completed // or, in case of unmetered gas, setup a context with a timeout. @@ -724,7 +721,7 @@ func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr defer cancel() // Get a new instance of the EVM. - evm, vmError, err := s.b.GetEVM(ctx, msg, state, header) + evm, vmError, err := b.GetEVM(ctx, msg, state, header) if err != nil { return nil, 0, false, err } @@ -748,24 +745,22 @@ func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr // Call executes the given transaction on the state for the given block number. // It doesn't make and changes in the state/blockchain and is useful to execute and retrieve values. func (s *PublicBlockChainAPI) Call(ctx context.Context, args CallArgs, blockNr rpc.BlockNumber) (hexutil.Bytes, error) { - result, _, _, err := s.doCall(ctx, args, blockNr, 5*time.Second) + result, _, _, err := DoCall(ctx, s.b, args, blockNr, vm.Config{}, 5*time.Second) return (hexutil.Bytes)(result), err } -// EstimateGas returns an estimate of the amount of gas needed to execute the -// given transaction against the current pending block. -func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (hexutil.Uint64, error) { +func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumber) (hexutil.Uint64, error) { // Binary search the gas requirement, as it may be higher than the amount used var ( lo uint64 = params.TxGas - 1 hi uint64 cap uint64 ) - if uint64(args.Gas) >= params.TxGas { - hi = uint64(args.Gas) + if args.Gas != nil && uint64(*args.Gas) >= params.TxGas { + hi = uint64(*args.Gas) } else { - // Retrieve the current pending block to act as the gas ceiling - block, err := s.b.BlockByNumber(ctx, rpc.PendingBlockNumber) + // Retrieve the block to act as the gas ceiling + block, err := b.BlockByNumber(ctx, blockNr) if err != nil { return 0, err } @@ -775,9 +770,9 @@ func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (h // Create a helper to check if a gas allowance results in an executable transaction executable := func(gas uint64) bool { - args.Gas = hexutil.Uint64(gas) + args.Gas = (*hexutil.Uint64)(&gas) - _, _, failed, err := s.doCall(ctx, args, rpc.PendingBlockNumber, 0) + _, _, failed, err := DoCall(ctx, b, args, rpc.PendingBlockNumber, vm.Config{}, 0) if err != nil || failed { return false } @@ -801,6 +796,12 @@ func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (h return hexutil.Uint64(hi), nil } +// EstimateGas returns an estimate of the amount of gas needed to execute the +// given transaction against the current pending block. +func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (hexutil.Uint64, error) { + return DoEstimateGas(ctx, s.b, args, rpc.PendingBlockNumber) +} + // ExecutionResult groups all structured logs emitted by the EVM // while replaying a transaction in debug mode as well as transaction // execution status, the amount of gas used and the return value @@ -825,7 +826,7 @@ type StructLogRes struct { Storage *map[string]string `json:"storage,omitempty"` } -// formatLogs formats EVM returned structured logs for json output +// FormatLogs formats EVM returned structured logs for json output func FormatLogs(logs []vm.StructLog) []StructLogRes { formatted := make([]StructLogRes, len(logs)) for index, trace := range logs { @@ -1181,11 +1182,7 @@ func (s *PublicTransactionPoolAPI) sign(addr common.Address, tx *types.Transacti return nil, err } // Request the wallet to sign the transaction - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - return wallet.SignTx(account, tx, chainID) + return wallet.SignTx(account, tx, s.b.ChainConfig().ChainID) } // SendTxArgs represents the arguments to sumbit a new transaction into the transaction pool. @@ -1256,8 +1253,8 @@ func (args *SendTxArgs) toTransaction() *types.Transaction { return types.NewTransaction(uint64(*args.Nonce), *args.To, (*big.Int)(args.Value), uint64(*args.Gas), (*big.Int)(args.GasPrice), input) } -// submitTransaction is a helper function that submits tx to txPool and logs a message. -func submitTransaction(ctx context.Context, b Backend, tx *types.Transaction) (common.Hash, error) { +// SubmitTransaction is a helper function that submits tx to txPool and logs a message. +func SubmitTransaction(ctx context.Context, b Backend, tx *types.Transaction) (common.Hash, error) { if err := b.SendTx(ctx, tx); err != nil { return common.Hash{}, err } @@ -1301,15 +1298,11 @@ func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args Sen // Assemble the transaction and sign with the wallet tx := args.toTransaction() - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - signed, err := wallet.SignTx(account, tx, chainID) + signed, err := wallet.SignTx(account, tx, s.b.ChainConfig().ChainID) if err != nil { return common.Hash{}, err } - return submitTransaction(ctx, s.b, signed) + return SubmitTransaction(ctx, s.b, signed) } // SendRawTransaction will add the signed transaction to the transaction pool. @@ -1319,7 +1312,7 @@ func (s *PublicTransactionPoolAPI) SendRawTransaction(ctx context.Context, encod if err := rlp.DecodeBytes(encodedTx, tx); err != nil { return common.Hash{}, err } - return submitTransaction(ctx, s.b, tx) + return SubmitTransaction(ctx, s.b, tx) } // Sign calculates an ECDSA signature for: @@ -1340,7 +1333,7 @@ func (s *PublicTransactionPoolAPI) Sign(addr common.Address, data hexutil.Bytes) return nil, err } // Sign the requested hash with the wallet - signature, err := wallet.SignHash(account, signHash(data)) + signature, err := wallet.SignText(account, data) if err == nil { signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper } @@ -1476,6 +1469,45 @@ func (api *PublicDebugAPI) GetBlockRlp(ctx context.Context, number uint64) (stri return fmt.Sprintf("%x", encoded), nil } +// TestSignCliqueBlock fetches the given block number, and attempts to sign it as a clique header with the +// given address, returning the address of the recovered signature +// +// This is a temporary method to debug the externalsigner integration, +// TODO: Remove this method when the integration is mature +func (api *PublicDebugAPI) TestSignCliqueBlock(ctx context.Context, address common.Address, number uint64) (common.Address, error) { + block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) + if block == nil { + return common.Address{}, fmt.Errorf("block #%d not found", number) + } + header := block.Header() + header.Extra = make([]byte, 32+65) + encoded := clique.CliqueRLP(header) + + // Look up the wallet containing the requested signer + account := accounts.Account{Address: address} + wallet, err := api.b.AccountManager().Find(account) + if err != nil { + return common.Address{}, err + } + + signature, err := wallet.SignData(account, accounts.MimetypeClique, encoded) + if err != nil { + return common.Address{}, err + } + sealHash := clique.SealHash(header).Bytes() + log.Info("test signing of clique block", + "Sealhash", fmt.Sprintf("%x", sealHash), + "signature", fmt.Sprintf("%x", signature)) + pubkey, err := crypto.Ecrecover(sealHash, signature) + if err != nil { + return common.Address{}, err + } + var signer common.Address + copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) + + return signer, nil +} + // PrintBlock retrieves a block and returns its pretty printed form. func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) { block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) @@ -1523,16 +1555,9 @@ func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) { } func (api *PrivateDebugAPI) ChaindbCompact() error { - ldb, ok := api.b.ChainDb().(interface { - LDB() *leveldb.DB - }) - if !ok { - return fmt.Errorf("chaindbCompact does not work for memory databases") - } for b := byte(0); b < 255; b++ { log.Info("Compacting chain database", "range", fmt.Sprintf("0x%0.2X-0x%0.2X", b, b+1)) - err := ldb.LDB().CompactRange(util.Range{Start: []byte{b}, Limit: []byte{b + 1}}) - if err != nil { + if err := api.b.ChainDb().Compact([]byte{b}, []byte{b + 1}); err != nil { log.Error("Database compaction failed", "err", err) return err } diff --git a/vendor/github.com/ethereum/go-ethereum/internal/jsre/jsre.go b/vendor/github.com/ethereum/go-ethereum/internal/jsre/jsre.go index 4c7664f1..1b3528a0 100644 --- a/vendor/github.com/ethereum/go-ethereum/internal/jsre/jsre.go +++ b/vendor/github.com/ethereum/go-ethereum/internal/jsre/jsre.go @@ -32,8 +32,8 @@ import ( ) var ( - BigNumber_JS = deps.MustAsset("bignumber.js") - Web3_JS = deps.MustAsset("web3.js") + BignumberJs = deps.MustAsset("bignumber.js") + Web3Js = deps.MustAsset("web3.js") ) /* diff --git a/vendor/github.com/ethereum/go-ethereum/internal/web3ext/web3ext.go b/vendor/github.com/ethereum/go-ethereum/internal/web3ext/web3ext.go index 6b98c8b7..e1577fe2 100644 --- a/vendor/github.com/ethereum/go-ethereum/internal/web3ext/web3ext.go +++ b/vendor/github.com/ethereum/go-ethereum/internal/web3ext/web3ext.go @@ -18,23 +18,23 @@ package web3ext var Modules = map[string]string{ - "accounting": Accounting_JS, - "admin": Admin_JS, - "chequebook": Chequebook_JS, - "clique": Clique_JS, - "ethash": Ethash_JS, - "debug": Debug_JS, - "eth": Eth_JS, - "miner": Miner_JS, - "net": Net_JS, - "personal": Personal_JS, - "rpc": RPC_JS, - "shh": Shh_JS, - "swarmfs": SWARMFS_JS, - "txpool": TxPool_JS, + "accounting": AccountingJs, + "admin": AdminJs, + "chequebook": ChequebookJs, + "clique": CliqueJs, + "ethash": EthashJs, + "debug": DebugJs, + "eth": EthJs, + "miner": MinerJs, + "net": NetJs, + "personal": PersonalJs, + "rpc": RpcJs, + "shh": ShhJs, + "swarmfs": SwarmfsJs, + "txpool": TxpoolJs, } -const Chequebook_JS = ` +const ChequebookJs = ` web3._extend({ property: 'chequebook', methods: [ @@ -65,7 +65,7 @@ web3._extend({ }); ` -const Clique_JS = ` +const CliqueJs = ` web3._extend({ property: 'clique', methods: [ @@ -111,7 +111,7 @@ web3._extend({ }); ` -const Ethash_JS = ` +const EthashJs = ` web3._extend({ property: 'ethash', methods: [ @@ -139,7 +139,7 @@ web3._extend({ }); ` -const Admin_JS = ` +const AdminJs = ` web3._extend({ property: 'admin', methods: [ @@ -217,7 +217,7 @@ web3._extend({ }); ` -const Debug_JS = ` +const DebugJs = ` web3._extend({ property: 'debug', methods: [ @@ -231,6 +231,12 @@ web3._extend({ call: 'debug_getBlockRlp', params: 1 }), + new web3._extend.Method({ + name: 'testSignCliqueBlock', + call: 'debug_testSignCliqueBlock', + params: 2, + inputFormatters: [web3._extend.formatters.inputAddressFormatter, null], + }), new web3._extend.Method({ name: 'setHead', call: 'debug_setHead', @@ -448,7 +454,7 @@ web3._extend({ }); ` -const Eth_JS = ` +const EthJs = ` web3._extend({ property: 'eth', methods: [ @@ -518,7 +524,7 @@ web3._extend({ }); ` -const Miner_JS = ` +const MinerJs = ` web3._extend({ property: 'miner', methods: [ @@ -563,7 +569,7 @@ web3._extend({ }); ` -const Net_JS = ` +const NetJs = ` web3._extend({ property: 'net', methods: [], @@ -576,7 +582,7 @@ web3._extend({ }); ` -const Personal_JS = ` +const PersonalJs = ` web3._extend({ property: 'personal', methods: [ @@ -622,7 +628,7 @@ web3._extend({ }) ` -const RPC_JS = ` +const RpcJs = ` web3._extend({ property: 'rpc', methods: [], @@ -635,7 +641,7 @@ web3._extend({ }); ` -const Shh_JS = ` +const ShhJs = ` web3._extend({ property: 'shh', methods: [ @@ -655,7 +661,7 @@ web3._extend({ }); ` -const SWARMFS_JS = ` +const SwarmfsJs = ` web3._extend({ property: 'swarmfs', methods: @@ -679,7 +685,7 @@ web3._extend({ }); ` -const TxPool_JS = ` +const TxpoolJs = ` web3._extend({ property: 'txpool', methods: [], @@ -706,7 +712,7 @@ web3._extend({ }); ` -const Accounting_JS = ` +const AccountingJs = ` web3._extend({ property: 'accounting', methods: [ diff --git a/vendor/github.com/ethereum/go-ethereum/les/api.go b/vendor/github.com/ethereum/go-ethereum/les/api.go new file mode 100644 index 00000000..a933cbd0 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/api.go @@ -0,0 +1,454 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "context" + "errors" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rpc" +) + +var ( + ErrMinCap = errors.New("capacity too small") + ErrTotalCap = errors.New("total capacity exceeded") + ErrUnknownBenchmarkType = errors.New("unknown benchmark type") + + dropCapacityDelay = time.Second // delay applied to decreasing capacity changes +) + +// PrivateLightServerAPI provides an API to access the LES light server. +// It offers only methods that operate on public data that is freely available to anyone. +type PrivateLightServerAPI struct { + server *LesServer +} + +// NewPrivateLightServerAPI creates a new LES light server API. +func NewPrivateLightServerAPI(server *LesServer) *PrivateLightServerAPI { + return &PrivateLightServerAPI{ + server: server, + } +} + +// TotalCapacity queries total available capacity for all clients +func (api *PrivateLightServerAPI) TotalCapacity() hexutil.Uint64 { + return hexutil.Uint64(api.server.priorityClientPool.totalCapacity()) +} + +// SubscribeTotalCapacity subscribes to changed total capacity events. +// If onlyUnderrun is true then notification is sent only if the total capacity +// drops under the total capacity of connected priority clients. +// +// Note: actually applying decreasing total capacity values is delayed while the +// notification is sent instantly. This allows lowering the capacity of a priority client +// or choosing which one to drop before the system drops some of them automatically. +func (api *PrivateLightServerAPI) SubscribeTotalCapacity(ctx context.Context, onlyUnderrun bool) (*rpc.Subscription, error) { + notifier, supported := rpc.NotifierFromContext(ctx) + if !supported { + return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported + } + rpcSub := notifier.CreateSubscription() + api.server.priorityClientPool.subscribeTotalCapacity(&tcSubscription{notifier, rpcSub, onlyUnderrun}) + return rpcSub, nil +} + +type ( + // tcSubscription represents a total capacity subscription + tcSubscription struct { + notifier *rpc.Notifier + rpcSub *rpc.Subscription + onlyUnderrun bool + } + tcSubs map[*tcSubscription]struct{} +) + +// send sends a changed total capacity event to the subscribers +func (s tcSubs) send(tc uint64, underrun bool) { + for sub := range s { + select { + case <-sub.rpcSub.Err(): + delete(s, sub) + case <-sub.notifier.Closed(): + delete(s, sub) + default: + if underrun || !sub.onlyUnderrun { + sub.notifier.Notify(sub.rpcSub.ID, tc) + } + } + } +} + +// MinimumCapacity queries minimum assignable capacity for a single client +func (api *PrivateLightServerAPI) MinimumCapacity() hexutil.Uint64 { + return hexutil.Uint64(minCapacity) +} + +// FreeClientCapacity queries the capacity provided for free clients +func (api *PrivateLightServerAPI) FreeClientCapacity() hexutil.Uint64 { + return hexutil.Uint64(api.server.freeClientCap) +} + +// SetClientCapacity sets the priority capacity assigned to a given client. +// If the assigned capacity is bigger than zero then connection is always +// guaranteed. The sum of capacity assigned to priority clients can not exceed +// the total available capacity. +// +// Note: assigned capacity can be changed while the client is connected with +// immediate effect. +func (api *PrivateLightServerAPI) SetClientCapacity(id enode.ID, cap uint64) error { + if cap != 0 && cap < minCapacity { + return ErrMinCap + } + return api.server.priorityClientPool.setClientCapacity(id, cap) +} + +// GetClientCapacity returns the capacity assigned to a given client +func (api *PrivateLightServerAPI) GetClientCapacity(id enode.ID) hexutil.Uint64 { + api.server.priorityClientPool.lock.Lock() + defer api.server.priorityClientPool.lock.Unlock() + + return hexutil.Uint64(api.server.priorityClientPool.clients[id].cap) +} + +// clientPool is implemented by both the free and priority client pools +type clientPool interface { + peerSetNotify + setLimits(count int, totalCap uint64) +} + +// priorityClientPool stores information about prioritized clients +type priorityClientPool struct { + lock sync.Mutex + child clientPool + ps *peerSet + clients map[enode.ID]priorityClientInfo + totalCap, totalCapAnnounced uint64 + totalConnectedCap, freeClientCap uint64 + maxPeers, priorityCount int + + subs tcSubs + updateSchedule []scheduledUpdate + scheduleCounter uint64 +} + +// scheduledUpdate represents a delayed total capacity update +type scheduledUpdate struct { + time mclock.AbsTime + totalCap, id uint64 +} + +// priorityClientInfo entries exist for all prioritized clients and currently connected non-priority clients +type priorityClientInfo struct { + cap uint64 // zero for non-priority clients + connected bool + peer *peer +} + +// newPriorityClientPool creates a new priority client pool +func newPriorityClientPool(freeClientCap uint64, ps *peerSet, child clientPool) *priorityClientPool { + return &priorityClientPool{ + clients: make(map[enode.ID]priorityClientInfo), + freeClientCap: freeClientCap, + ps: ps, + child: child, + } +} + +// registerPeer is called when a new client is connected. If the client has no +// priority assigned then it is passed to the child pool which may either keep it +// or disconnect it. +// +// Note: priorityClientPool also stores a record about free clients while they are +// connected in order to be able to assign priority to them later. +func (v *priorityClientPool) registerPeer(p *peer) { + v.lock.Lock() + defer v.lock.Unlock() + + id := p.ID() + c := v.clients[id] + if c.connected { + return + } + if c.cap == 0 && v.child != nil { + v.child.registerPeer(p) + } + if c.cap != 0 && v.totalConnectedCap+c.cap > v.totalCap { + go v.ps.Unregister(p.id) + return + } + + c.connected = true + c.peer = p + v.clients[id] = c + if c.cap != 0 { + v.priorityCount++ + v.totalConnectedCap += c.cap + if v.child != nil { + v.child.setLimits(v.maxPeers-v.priorityCount, v.totalCap-v.totalConnectedCap) + } + p.updateCapacity(c.cap) + } +} + +// unregisterPeer is called when a client is disconnected. If the client has no +// priority assigned then it is also removed from the child pool. +func (v *priorityClientPool) unregisterPeer(p *peer) { + v.lock.Lock() + defer v.lock.Unlock() + + id := p.ID() + c := v.clients[id] + if !c.connected { + return + } + if c.cap != 0 { + c.connected = false + v.clients[id] = c + v.priorityCount-- + v.totalConnectedCap -= c.cap + if v.child != nil { + v.child.setLimits(v.maxPeers-v.priorityCount, v.totalCap-v.totalConnectedCap) + } + } else { + if v.child != nil { + v.child.unregisterPeer(p) + } + delete(v.clients, id) + } +} + +// setLimits updates the allowed peer count and total capacity of the priority +// client pool. Since the free client pool is a child of the priority pool the +// remaining peer count and capacity is assigned to the free pool by calling its +// own setLimits function. +// +// Note: a decreasing change of the total capacity is applied with a delay. +func (v *priorityClientPool) setLimits(count int, totalCap uint64) { + v.lock.Lock() + defer v.lock.Unlock() + + v.totalCapAnnounced = totalCap + if totalCap > v.totalCap { + v.setLimitsNow(count, totalCap) + v.subs.send(totalCap, false) + return + } + v.setLimitsNow(count, v.totalCap) + if totalCap < v.totalCap { + v.subs.send(totalCap, totalCap < v.totalConnectedCap) + for i, s := range v.updateSchedule { + if totalCap >= s.totalCap { + s.totalCap = totalCap + v.updateSchedule = v.updateSchedule[:i+1] + return + } + } + v.updateSchedule = append(v.updateSchedule, scheduledUpdate{time: mclock.Now() + mclock.AbsTime(dropCapacityDelay), totalCap: totalCap}) + if len(v.updateSchedule) == 1 { + v.scheduleCounter++ + id := v.scheduleCounter + v.updateSchedule[0].id = id + time.AfterFunc(dropCapacityDelay, func() { v.checkUpdate(id) }) + } + } else { + v.updateSchedule = nil + } +} + +// checkUpdate performs the next scheduled update if possible and schedules +// the one after that +func (v *priorityClientPool) checkUpdate(id uint64) { + v.lock.Lock() + defer v.lock.Unlock() + + if len(v.updateSchedule) == 0 || v.updateSchedule[0].id != id { + return + } + v.setLimitsNow(v.maxPeers, v.updateSchedule[0].totalCap) + v.updateSchedule = v.updateSchedule[1:] + if len(v.updateSchedule) != 0 { + v.scheduleCounter++ + id := v.scheduleCounter + v.updateSchedule[0].id = id + dt := time.Duration(v.updateSchedule[0].time - mclock.Now()) + time.AfterFunc(dt, func() { v.checkUpdate(id) }) + } +} + +// setLimits updates the allowed peer count and total capacity immediately +func (v *priorityClientPool) setLimitsNow(count int, totalCap uint64) { + if v.priorityCount > count || v.totalConnectedCap > totalCap { + for id, c := range v.clients { + if c.connected { + c.connected = false + v.totalConnectedCap -= c.cap + v.priorityCount-- + v.clients[id] = c + go v.ps.Unregister(c.peer.id) + if v.priorityCount <= count && v.totalConnectedCap <= totalCap { + break + } + } + } + } + v.maxPeers = count + v.totalCap = totalCap + if v.child != nil { + v.child.setLimits(v.maxPeers-v.priorityCount, v.totalCap-v.totalConnectedCap) + } +} + +// totalCapacity queries total available capacity for all clients +func (v *priorityClientPool) totalCapacity() uint64 { + v.lock.Lock() + defer v.lock.Unlock() + + return v.totalCapAnnounced +} + +// subscribeTotalCapacity subscribes to changed total capacity events +func (v *priorityClientPool) subscribeTotalCapacity(sub *tcSubscription) { + v.lock.Lock() + defer v.lock.Unlock() + + v.subs[sub] = struct{}{} +} + +// setClientCapacity sets the priority capacity assigned to a given client +func (v *priorityClientPool) setClientCapacity(id enode.ID, cap uint64) error { + v.lock.Lock() + defer v.lock.Unlock() + + c := v.clients[id] + if c.cap == cap { + return nil + } + if c.connected { + if v.totalConnectedCap+cap > v.totalCap+c.cap { + return ErrTotalCap + } + if c.cap == 0 { + if v.child != nil { + v.child.unregisterPeer(c.peer) + } + v.priorityCount++ + } + if cap == 0 { + v.priorityCount-- + } + v.totalConnectedCap += cap - c.cap + if v.child != nil { + v.child.setLimits(v.maxPeers-v.priorityCount, v.totalCap-v.totalConnectedCap) + } + if cap == 0 { + if v.child != nil { + v.child.registerPeer(c.peer) + } + c.peer.updateCapacity(v.freeClientCap) + } else { + c.peer.updateCapacity(cap) + } + } + if cap != 0 || c.connected { + c.cap = cap + v.clients[id] = c + } else { + delete(v.clients, id) + } + return nil +} + +// Benchmark runs a request performance benchmark with a given set of measurement setups +// in multiple passes specified by passCount. The measurement time for each setup in each +// pass is specified in milliseconds by length. +// +// Note: measurement time is adjusted for each pass depending on the previous ones. +// Therefore a controlled total measurement time is achievable in multiple passes. +func (api *PrivateLightServerAPI) Benchmark(setups []map[string]interface{}, passCount, length int) ([]map[string]interface{}, error) { + benchmarks := make([]requestBenchmark, len(setups)) + for i, setup := range setups { + if t, ok := setup["type"].(string); ok { + getInt := func(field string, def int) int { + if value, ok := setup[field].(float64); ok { + return int(value) + } + return def + } + getBool := func(field string, def bool) bool { + if value, ok := setup[field].(bool); ok { + return value + } + return def + } + switch t { + case "header": + benchmarks[i] = &benchmarkBlockHeaders{ + amount: getInt("amount", 1), + skip: getInt("skip", 1), + byHash: getBool("byHash", false), + reverse: getBool("reverse", false), + } + case "body": + benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: false} + case "receipts": + benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: true} + case "proof": + benchmarks[i] = &benchmarkProofsOrCode{code: false} + case "code": + benchmarks[i] = &benchmarkProofsOrCode{code: true} + case "cht": + benchmarks[i] = &benchmarkHelperTrie{ + bloom: false, + reqCount: getInt("amount", 1), + } + case "bloom": + benchmarks[i] = &benchmarkHelperTrie{ + bloom: true, + reqCount: getInt("amount", 1), + } + case "txSend": + benchmarks[i] = &benchmarkTxSend{} + case "txStatus": + benchmarks[i] = &benchmarkTxStatus{} + default: + return nil, ErrUnknownBenchmarkType + } + } else { + return nil, ErrUnknownBenchmarkType + } + } + rs := api.server.protocolManager.runBenchmark(benchmarks, passCount, time.Millisecond*time.Duration(length)) + result := make([]map[string]interface{}, len(setups)) + for i, r := range rs { + res := make(map[string]interface{}) + if r.err == nil { + res["totalCount"] = r.totalCount + res["avgTime"] = r.avgTime + res["maxInSize"] = r.maxInSize + res["maxOutSize"] = r.maxOutSize + } else { + res["error"] = r.err.Error() + } + result[i] = res + } + return result, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/api_test.go b/vendor/github.com/ethereum/go-ethereum/les/api_test.go new file mode 100644 index 00000000..cec94596 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/api_test.go @@ -0,0 +1,525 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "context" + "errors" + "flag" + "fmt" + "io/ioutil" + "math/rand" + "os" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/rpc" + colorable "github.com/mattn/go-colorable" +) + +/* +This test is not meant to be a part of the automatic testing process because it +runs for a long time and also requires a large database in order to do a meaningful +request performance test. When testServerDataDir is empty, the test is skipped. +*/ + +const ( + testServerDataDir = "" // should always be empty on the master branch + testServerCapacity = 200 + testMaxClients = 10 + testTolerance = 0.1 + minRelCap = 0.2 +) + +func TestCapacityAPI3(t *testing.T) { + testCapacityAPI(t, 3) +} + +func TestCapacityAPI6(t *testing.T) { + testCapacityAPI(t, 6) +} + +func TestCapacityAPI10(t *testing.T) { + testCapacityAPI(t, 10) +} + +// testCapacityAPI runs an end-to-end simulation test connecting one server with +// a given number of clients. It sets different priority capacities to all clients +// except a randomly selected one which runs in free client mode. All clients send +// similar requests at the maximum allowed rate and the test verifies whether the +// ratio of processed requests is close enough to the ratio of assigned capacities. +// Running multiple rounds with different settings ensures that changing capacity +// while connected and going back and forth between free and priority mode with +// the supplied API calls is also thoroughly tested. +func testCapacityAPI(t *testing.T, clientCount int) { + if testServerDataDir == "" { + // Skip test if no data dir specified + return + } + + for !testSim(t, 1, clientCount, []string{testServerDataDir}, nil, func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool { + if len(servers) != 1 { + t.Fatalf("Invalid number of servers: %d", len(servers)) + } + server := servers[0] + + clientRpcClients := make([]*rpc.Client, len(clients)) + + serverRpcClient, err := server.Client() + if err != nil { + t.Fatalf("Failed to obtain rpc client: %v", err) + } + headNum, headHash := getHead(ctx, t, serverRpcClient) + totalCap := getTotalCap(ctx, t, serverRpcClient) + minCap := getMinCap(ctx, t, serverRpcClient) + testCap := totalCap * 3 / 4 + fmt.Printf("Server testCap: %d minCap: %d head number: %d head hash: %064x\n", testCap, minCap, headNum, headHash) + reqMinCap := uint64(float64(testCap) * minRelCap / (minRelCap + float64(len(clients)-1))) + if minCap > reqMinCap { + t.Fatalf("Minimum client capacity (%d) bigger than required minimum for this test (%d)", minCap, reqMinCap) + } + + freeIdx := rand.Intn(len(clients)) + freeCap := getFreeCap(ctx, t, serverRpcClient) + + for i, client := range clients { + var err error + clientRpcClients[i], err = client.Client() + if err != nil { + t.Fatalf("Failed to obtain rpc client: %v", err) + } + + fmt.Println("connecting client", i) + if i != freeIdx { + setCapacity(ctx, t, serverRpcClient, client.ID(), testCap/uint64(len(clients))) + } + net.Connect(client.ID(), server.ID()) + + for { + select { + case <-ctx.Done(): + t.Fatalf("Timeout") + default: + } + num, hash := getHead(ctx, t, clientRpcClients[i]) + if num == headNum && hash == headHash { + fmt.Println("client", i, "synced") + break + } + time.Sleep(time.Millisecond * 200) + } + } + + var wg sync.WaitGroup + stop := make(chan struct{}) + + reqCount := make([]uint64, len(clientRpcClients)) + + for i, c := range clientRpcClients { + wg.Add(1) + i, c := i, c + go func() { + queue := make(chan struct{}, 100) + var count uint64 + for { + select { + case queue <- struct{}{}: + select { + case <-stop: + wg.Done() + return + case <-ctx.Done(): + wg.Done() + return + default: + wg.Add(1) + go func() { + ok := testRequest(ctx, t, c) + wg.Done() + <-queue + if ok { + count++ + atomic.StoreUint64(&reqCount[i], count) + } + }() + } + case <-stop: + wg.Done() + return + case <-ctx.Done(): + wg.Done() + return + } + } + }() + } + + processedSince := func(start []uint64) []uint64 { + res := make([]uint64, len(reqCount)) + for i := range reqCount { + res[i] = atomic.LoadUint64(&reqCount[i]) + if start != nil { + res[i] -= start[i] + } + } + return res + } + + weights := make([]float64, len(clients)) + for c := 0; c < 5; c++ { + setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), freeCap) + freeIdx = rand.Intn(len(clients)) + var sum float64 + for i := range clients { + if i == freeIdx { + weights[i] = 0 + } else { + weights[i] = rand.Float64()*(1-minRelCap) + minRelCap + } + sum += weights[i] + } + for i, client := range clients { + weights[i] *= float64(testCap-freeCap-100) / sum + capacity := uint64(weights[i]) + if i != freeIdx && capacity < getCapacity(ctx, t, serverRpcClient, client.ID()) { + setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) + } + } + setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), 0) + for i, client := range clients { + capacity := uint64(weights[i]) + if i != freeIdx && capacity > getCapacity(ctx, t, serverRpcClient, client.ID()) { + setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) + } + } + weights[freeIdx] = float64(freeCap) + for i := range clients { + weights[i] /= float64(testCap) + } + + time.Sleep(flowcontrol.DecParamDelay) + fmt.Println("Starting measurement") + fmt.Printf("Relative weights:") + for i := range clients { + fmt.Printf(" %f", weights[i]) + } + fmt.Println() + start := processedSince(nil) + for { + select { + case <-ctx.Done(): + t.Fatalf("Timeout") + default: + } + + totalCap = getTotalCap(ctx, t, serverRpcClient) + if totalCap < testCap { + fmt.Println("Total capacity underrun") + close(stop) + wg.Wait() + return false + } + + processed := processedSince(start) + var avg uint64 + fmt.Printf("Processed") + for i, p := range processed { + fmt.Printf(" %d", p) + processed[i] = uint64(float64(p) / weights[i]) + avg += processed[i] + } + avg /= uint64(len(processed)) + + if avg >= 10000 { + var maxDev float64 + for _, p := range processed { + dev := float64(int64(p-avg)) / float64(avg) + fmt.Printf(" %7.4f", dev) + if dev < 0 { + dev = -dev + } + if dev > maxDev { + maxDev = dev + } + } + fmt.Printf(" max deviation: %f totalCap: %d\n", maxDev, totalCap) + if maxDev <= testTolerance { + fmt.Println("success") + break + } + } else { + fmt.Println() + } + time.Sleep(time.Millisecond * 200) + } + } + + close(stop) + wg.Wait() + + for i, count := range reqCount { + fmt.Println("client", i, "processed", count) + } + return true + }) { + fmt.Println("restarting test") + } +} + +func getHead(ctx context.Context, t *testing.T, client *rpc.Client) (uint64, common.Hash) { + res := make(map[string]interface{}) + if err := client.CallContext(ctx, &res, "eth_getBlockByNumber", "latest", false); err != nil { + t.Fatalf("Failed to obtain head block: %v", err) + } + numStr, ok := res["number"].(string) + if !ok { + t.Fatalf("RPC block number field invalid") + } + num, err := hexutil.DecodeUint64(numStr) + if err != nil { + t.Fatalf("Failed to decode RPC block number: %v", err) + } + hashStr, ok := res["hash"].(string) + if !ok { + t.Fatalf("RPC block number field invalid") + } + hash := common.HexToHash(hashStr) + return num, hash +} + +func testRequest(ctx context.Context, t *testing.T, client *rpc.Client) bool { + //res := make(map[string]interface{}) + var res string + var addr common.Address + rand.Read(addr[:]) + c, _ := context.WithTimeout(ctx, time.Second*12) + // if err := client.CallContext(ctx, &res, "eth_getProof", addr, nil, "latest"); err != nil { + err := client.CallContext(c, &res, "eth_getBalance", addr, "latest") + if err != nil { + fmt.Println("request error:", err) + } + return err == nil +} + +func setCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID, cap uint64) { + if err := server.CallContext(ctx, nil, "les_setClientCapacity", clientID, cap); err != nil { + t.Fatalf("Failed to set client capacity: %v", err) + } +} + +func getCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID) uint64 { + var s string + if err := server.CallContext(ctx, &s, "les_getClientCapacity", clientID); err != nil { + t.Fatalf("Failed to get client capacity: %v", err) + } + cap, err := hexutil.DecodeUint64(s) + if err != nil { + t.Fatalf("Failed to decode client capacity: %v", err) + } + return cap +} + +func getTotalCap(ctx context.Context, t *testing.T, server *rpc.Client) uint64 { + var s string + if err := server.CallContext(ctx, &s, "les_totalCapacity"); err != nil { + t.Fatalf("Failed to query total capacity: %v", err) + } + total, err := hexutil.DecodeUint64(s) + if err != nil { + t.Fatalf("Failed to decode total capacity: %v", err) + } + return total +} + +func getMinCap(ctx context.Context, t *testing.T, server *rpc.Client) uint64 { + var s string + if err := server.CallContext(ctx, &s, "les_minimumCapacity"); err != nil { + t.Fatalf("Failed to query minimum capacity: %v", err) + } + min, err := hexutil.DecodeUint64(s) + if err != nil { + t.Fatalf("Failed to decode minimum capacity: %v", err) + } + return min +} + +func getFreeCap(ctx context.Context, t *testing.T, server *rpc.Client) uint64 { + var s string + if err := server.CallContext(ctx, &s, "les_freeClientCapacity"); err != nil { + t.Fatalf("Failed to query free client capacity: %v", err) + } + free, err := hexutil.DecodeUint64(s) + if err != nil { + t.Fatalf("Failed to decode free client capacity: %v", err) + } + return free +} + +func init() { + flag.Parse() + // register the Delivery service which will run as a devp2p + // protocol when using the exec adapter + adapters.RegisterServices(services) + + log.PrintOrigins(true) + log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) +} + +var ( + adapter = flag.String("adapter", "exec", "type of simulation: sim|socket|exec|docker") + loglevel = flag.Int("loglevel", 0, "verbosity of logs") + nodes = flag.Int("nodes", 0, "number of nodes") +) + +var services = adapters.Services{ + "lesclient": newLesClientService, + "lesserver": newLesServerService, +} + +func NewNetwork() (*simulations.Network, func(), error) { + adapter, adapterTeardown, err := NewAdapter(*adapter, services) + if err != nil { + return nil, adapterTeardown, err + } + defaultService := "streamer" + net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ + ID: "0", + DefaultService: defaultService, + }) + teardown := func() { + adapterTeardown() + net.Shutdown() + } + + return net, teardown, nil +} + +func NewAdapter(adapterType string, services adapters.Services) (adapter adapters.NodeAdapter, teardown func(), err error) { + teardown = func() {} + switch adapterType { + case "sim": + adapter = adapters.NewSimAdapter(services) + // case "socket": + // adapter = adapters.NewSocketAdapter(services) + case "exec": + baseDir, err0 := ioutil.TempDir("", "les-test") + if err0 != nil { + return nil, teardown, err0 + } + teardown = func() { os.RemoveAll(baseDir) } + adapter = adapters.NewExecAdapter(baseDir) + /*case "docker": + adapter, err = adapters.NewDockerAdapter() + if err != nil { + return nil, teardown, err + }*/ + default: + return nil, teardown, errors.New("adapter needs to be one of sim, socket, exec, docker") + } + return adapter, teardown, nil +} + +func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir []string, test func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool) bool { + net, teardown, err := NewNetwork() + defer teardown() + if err != nil { + t.Fatalf("Failed to create network: %v", err) + } + timeout := 1800 * time.Second + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + servers := make([]*simulations.Node, serverCount) + clients := make([]*simulations.Node, clientCount) + + for i := range clients { + clientconf := adapters.RandomNodeConfig() + clientconf.Services = []string{"lesclient"} + if len(clientDir) == clientCount { + clientconf.DataDir = clientDir[i] + } + client, err := net.NewNodeWithConfig(clientconf) + if err != nil { + t.Fatalf("Failed to create client: %v", err) + } + clients[i] = client + } + + for i := range servers { + serverconf := adapters.RandomNodeConfig() + serverconf.Services = []string{"lesserver"} + if len(serverDir) == serverCount { + serverconf.DataDir = serverDir[i] + } + server, err := net.NewNodeWithConfig(serverconf) + if err != nil { + t.Fatalf("Failed to create server: %v", err) + } + servers[i] = server + } + + for _, client := range clients { + if err := net.Start(client.ID()); err != nil { + t.Fatalf("Failed to start client node: %v", err) + } + } + for _, server := range servers { + if err := net.Start(server.ID()); err != nil { + t.Fatalf("Failed to start server node: %v", err) + } + } + + return test(ctx, net, servers, clients) +} + +func newLesClientService(ctx *adapters.ServiceContext) (node.Service, error) { + config := eth.DefaultConfig + config.SyncMode = downloader.LightSync + config.Ethash.PowMode = ethash.ModeFake + return New(ctx.NodeContext, &config) +} + +func newLesServerService(ctx *adapters.ServiceContext) (node.Service, error) { + config := eth.DefaultConfig + config.SyncMode = downloader.FullSync + config.LightServ = testServerCapacity + config.LightPeers = testMaxClients + ethereum, err := eth.New(ctx.NodeContext, &config) + if err != nil { + return nil, err + } + + server, err := NewLesServer(ethereum, &config) + if err != nil { + return nil, err + } + ethereum.AddLesServer(server) + return ethereum, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/backend.go b/vendor/github.com/ethereum/go-ethereum/les/backend.go index d0db7101..bc4d0f21 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/backend.go +++ b/vendor/github.com/ethereum/go-ethereum/les/backend.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" @@ -78,7 +79,7 @@ type LightEthereum struct { } func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { - chainDb, err := eth.CreateDB(ctx, config, "lightchaindata") + chainDb, err := ctx.OpenDatabase("lightchaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/") if err != nil { return nil, err } @@ -100,7 +101,7 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { chainConfig: chainConfig, eventMux: ctx.EventMux, peers: peers, - reqDist: newRequestDistributor(peers, quitSync), + reqDist: newRequestDistributor(peers, quitSync, &mclock.System{}), accountManager: ctx.AccountManager, engine: eth.CreateConsensusEngine(ctx, chainConfig, &config.Ethash, nil, false, chainDb), shutdownChan: make(chan bool), @@ -109,8 +110,12 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { bloomIndexer: eth.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), } + var trustedNodes []string + if leth.config.ULC != nil { + trustedNodes = leth.config.ULC.TrustedServers + } leth.relay = NewLesTxRelay(peers, leth.reqDist) - leth.serverPool = newServerPool(chainDb, quitSync, &leth.wg) + leth.serverPool = newServerPool(chainDb, quitSync, &leth.wg, trustedNodes) leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool) leth.odr = NewLesOdr(chainDb, light.DefaultClientIndexerConfig, leth.retriever) @@ -136,10 +141,33 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { } leth.txPool = light.NewTxPool(leth.chainConfig, leth.blockchain, leth.relay) - if leth.protocolManager, err = NewProtocolManager(leth.chainConfig, light.DefaultClientIndexerConfig, true, config.NetworkId, leth.eventMux, leth.engine, leth.peers, leth.blockchain, nil, chainDb, leth.odr, leth.relay, leth.serverPool, quitSync, &leth.wg); err != nil { + + if leth.protocolManager, err = NewProtocolManager( + leth.chainConfig, + light.DefaultClientIndexerConfig, + true, + config.NetworkId, + leth.eventMux, + leth.engine, + leth.peers, + leth.blockchain, + nil, + chainDb, + leth.odr, + leth.relay, + leth.serverPool, + quitSync, + &leth.wg, + config.ULC); err != nil { return nil, err } + + if leth.protocolManager.isULCEnabled() { + log.Warn("Ultra light client is enabled", "trustedNodes", len(leth.protocolManager.ulc.trustedKeys), "minTrustedFraction", leth.protocolManager.ulc.minTrustedFraction) + leth.blockchain.DisableCheckFreq() + } leth.ApiBackend = &LesApiBackend{leth, nil} + gpoParams := config.GPO if gpoParams.Default == nil { gpoParams.Default = config.MinerGasPrice diff --git a/vendor/github.com/ethereum/go-ethereum/les/benchmark.go b/vendor/github.com/ethereum/go-ethereum/les/benchmark.go new file mode 100644 index 00000000..cb302c6e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/benchmark.go @@ -0,0 +1,353 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "fmt" + "math/big" + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// requestBenchmark is an interface for different randomized request generators +type requestBenchmark interface { + // init initializes the generator for generating the given number of randomized requests + init(pm *ProtocolManager, count int) error + // request initiates sending a single request to the given peer + request(peer *peer, index int) error +} + +// benchmarkBlockHeaders implements requestBenchmark +type benchmarkBlockHeaders struct { + amount, skip int + reverse, byHash bool + offset, randMax int64 + hashes []common.Hash +} + +func (b *benchmarkBlockHeaders) init(pm *ProtocolManager, count int) error { + d := int64(b.amount-1) * int64(b.skip+1) + b.offset = 0 + b.randMax = pm.blockchain.CurrentHeader().Number.Int64() + 1 - d + if b.randMax < 0 { + return fmt.Errorf("chain is too short") + } + if b.reverse { + b.offset = d + } + if b.byHash { + b.hashes = make([]common.Hash, count) + for i := range b.hashes { + b.hashes[i] = rawdb.ReadCanonicalHash(pm.chainDb, uint64(b.offset+rand.Int63n(b.randMax))) + } + } + return nil +} + +func (b *benchmarkBlockHeaders) request(peer *peer, index int) error { + if b.byHash { + return peer.RequestHeadersByHash(0, 0, b.hashes[index], b.amount, b.skip, b.reverse) + } else { + return peer.RequestHeadersByNumber(0, 0, uint64(b.offset+rand.Int63n(b.randMax)), b.amount, b.skip, b.reverse) + } +} + +// benchmarkBodiesOrReceipts implements requestBenchmark +type benchmarkBodiesOrReceipts struct { + receipts bool + hashes []common.Hash +} + +func (b *benchmarkBodiesOrReceipts) init(pm *ProtocolManager, count int) error { + randMax := pm.blockchain.CurrentHeader().Number.Int64() + 1 + b.hashes = make([]common.Hash, count) + for i := range b.hashes { + b.hashes[i] = rawdb.ReadCanonicalHash(pm.chainDb, uint64(rand.Int63n(randMax))) + } + return nil +} + +func (b *benchmarkBodiesOrReceipts) request(peer *peer, index int) error { + if b.receipts { + return peer.RequestReceipts(0, 0, []common.Hash{b.hashes[index]}) + } else { + return peer.RequestBodies(0, 0, []common.Hash{b.hashes[index]}) + } +} + +// benchmarkProofsOrCode implements requestBenchmark +type benchmarkProofsOrCode struct { + code bool + headHash common.Hash +} + +func (b *benchmarkProofsOrCode) init(pm *ProtocolManager, count int) error { + b.headHash = pm.blockchain.CurrentHeader().Hash() + return nil +} + +func (b *benchmarkProofsOrCode) request(peer *peer, index int) error { + key := make([]byte, 32) + rand.Read(key) + if b.code { + return peer.RequestCode(0, 0, []CodeReq{{BHash: b.headHash, AccKey: key}}) + } else { + return peer.RequestProofs(0, 0, []ProofReq{{BHash: b.headHash, Key: key}}) + } +} + +// benchmarkHelperTrie implements requestBenchmark +type benchmarkHelperTrie struct { + bloom bool + reqCount int + sectionCount, headNum uint64 +} + +func (b *benchmarkHelperTrie) init(pm *ProtocolManager, count int) error { + if b.bloom { + b.sectionCount, b.headNum, _ = pm.server.bloomTrieIndexer.Sections() + } else { + b.sectionCount, _, _ = pm.server.chtIndexer.Sections() + b.sectionCount /= (params.CHTFrequencyClient / params.CHTFrequencyServer) + b.headNum = b.sectionCount*params.CHTFrequencyClient - 1 + } + if b.sectionCount == 0 { + return fmt.Errorf("no processed sections available") + } + return nil +} + +func (b *benchmarkHelperTrie) request(peer *peer, index int) error { + reqs := make([]HelperTrieReq, b.reqCount) + + if b.bloom { + bitIdx := uint16(rand.Intn(2048)) + for i := range reqs { + key := make([]byte, 10) + binary.BigEndian.PutUint16(key[:2], bitIdx) + binary.BigEndian.PutUint64(key[2:], uint64(rand.Int63n(int64(b.sectionCount)))) + reqs[i] = HelperTrieReq{Type: htBloomBits, TrieIdx: b.sectionCount - 1, Key: key} + } + } else { + for i := range reqs { + key := make([]byte, 8) + binary.BigEndian.PutUint64(key[:], uint64(rand.Int63n(int64(b.headNum)))) + reqs[i] = HelperTrieReq{Type: htCanonical, TrieIdx: b.sectionCount - 1, Key: key, AuxReq: auxHeader} + } + } + + return peer.RequestHelperTrieProofs(0, 0, reqs) +} + +// benchmarkTxSend implements requestBenchmark +type benchmarkTxSend struct { + txs types.Transactions +} + +func (b *benchmarkTxSend) init(pm *ProtocolManager, count int) error { + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + signer := types.NewEIP155Signer(big.NewInt(18)) + b.txs = make(types.Transactions, count) + + for i := range b.txs { + data := make([]byte, txSizeCostLimit) + rand.Read(data) + tx, err := types.SignTx(types.NewTransaction(0, addr, new(big.Int), 0, new(big.Int), data), signer, key) + if err != nil { + panic(err) + } + b.txs[i] = tx + } + return nil +} + +func (b *benchmarkTxSend) request(peer *peer, index int) error { + enc, _ := rlp.EncodeToBytes(types.Transactions{b.txs[index]}) + return peer.SendTxs(0, 0, enc) +} + +// benchmarkTxStatus implements requestBenchmark +type benchmarkTxStatus struct{} + +func (b *benchmarkTxStatus) init(pm *ProtocolManager, count int) error { + return nil +} + +func (b *benchmarkTxStatus) request(peer *peer, index int) error { + var hash common.Hash + rand.Read(hash[:]) + return peer.RequestTxStatus(0, 0, []common.Hash{hash}) +} + +// benchmarkSetup stores measurement data for a single benchmark type +type benchmarkSetup struct { + req requestBenchmark + totalCount int + totalTime, avgTime time.Duration + maxInSize, maxOutSize uint32 + err error +} + +// runBenchmark runs a benchmark cycle for all benchmark types in the specified +// number of passes +func (pm *ProtocolManager) runBenchmark(benchmarks []requestBenchmark, passCount int, targetTime time.Duration) []*benchmarkSetup { + setup := make([]*benchmarkSetup, len(benchmarks)) + for i, b := range benchmarks { + setup[i] = &benchmarkSetup{req: b} + } + for i := 0; i < passCount; i++ { + log.Info("Running benchmark", "pass", i+1, "total", passCount) + todo := make([]*benchmarkSetup, len(benchmarks)) + copy(todo, setup) + for len(todo) > 0 { + // select a random element + index := rand.Intn(len(todo)) + next := todo[index] + todo[index] = todo[len(todo)-1] + todo = todo[:len(todo)-1] + + if next.err == nil { + // calculate request count + count := 50 + if next.totalTime > 0 { + count = int(uint64(next.totalCount) * uint64(targetTime) / uint64(next.totalTime)) + } + if err := pm.measure(next, count); err != nil { + next.err = err + } + } + } + } + log.Info("Benchmark completed") + + for _, s := range setup { + if s.err == nil { + s.avgTime = s.totalTime / time.Duration(s.totalCount) + } + } + return setup +} + +// meteredPipe implements p2p.MsgReadWriter and remembers the largest single +// message size sent through the pipe +type meteredPipe struct { + rw p2p.MsgReadWriter + maxSize uint32 +} + +func (m *meteredPipe) ReadMsg() (p2p.Msg, error) { + return m.rw.ReadMsg() +} + +func (m *meteredPipe) WriteMsg(msg p2p.Msg) error { + if msg.Size > m.maxSize { + m.maxSize = msg.Size + } + return m.rw.WriteMsg(msg) +} + +// measure runs a benchmark for a single type in a single pass, with the given +// number of requests +func (pm *ProtocolManager) measure(setup *benchmarkSetup, count int) error { + clientPipe, serverPipe := p2p.MsgPipe() + clientMeteredPipe := &meteredPipe{rw: clientPipe} + serverMeteredPipe := &meteredPipe{rw: serverPipe} + var id enode.ID + rand.Read(id[:]) + clientPeer := pm.newPeer(lpv2, NetworkId, p2p.NewPeer(id, "client", nil), clientMeteredPipe) + serverPeer := pm.newPeer(lpv2, NetworkId, p2p.NewPeer(id, "server", nil), serverMeteredPipe) + serverPeer.sendQueue = newExecQueue(count) + serverPeer.announceType = announceTypeNone + serverPeer.fcCosts = make(requestCostTable) + c := &requestCosts{} + for code := range requests { + serverPeer.fcCosts[code] = c + } + serverPeer.fcParams = flowcontrol.ServerParams{BufLimit: 1, MinRecharge: 1} + serverPeer.fcClient = flowcontrol.NewClientNode(pm.server.fcManager, serverPeer.fcParams) + defer serverPeer.fcClient.Disconnect() + + if err := setup.req.init(pm, count); err != nil { + return err + } + + errCh := make(chan error, 10) + start := mclock.Now() + + go func() { + for i := 0; i < count; i++ { + if err := setup.req.request(clientPeer, i); err != nil { + errCh <- err + return + } + } + }() + go func() { + for i := 0; i < count; i++ { + if err := pm.handleMsg(serverPeer); err != nil { + errCh <- err + return + } + } + }() + go func() { + for i := 0; i < count; i++ { + msg, err := clientPipe.ReadMsg() + if err != nil { + errCh <- err + return + } + var i interface{} + msg.Decode(&i) + } + // at this point we can be sure that the other two + // goroutines finished successfully too + close(errCh) + }() + select { + case err := <-errCh: + if err != nil { + return err + } + case <-pm.quitSync: + clientPipe.Close() + serverPipe.Close() + return fmt.Errorf("Benchmark cancelled") + } + + setup.totalTime += time.Duration(mclock.Now() - start) + setup.totalCount += count + setup.maxInSize = clientMeteredPipe.maxSize + setup.maxOutSize = serverMeteredPipe.maxSize + clientPipe.Close() + serverPipe.Close() + return nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/costtracker.go b/vendor/github.com/ethereum/go-ethereum/les/costtracker.go new file mode 100644 index 00000000..69531937 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/costtracker.go @@ -0,0 +1,388 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more detailct. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "math" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" +) + +const makeCostStats = false // make request cost statistics during operation + +var ( + // average request cost estimates based on serving time + reqAvgTimeCost = requestCostTable{ + GetBlockHeadersMsg: {150000, 30000}, + GetBlockBodiesMsg: {0, 700000}, + GetReceiptsMsg: {0, 1000000}, + GetCodeMsg: {0, 450000}, + GetProofsV1Msg: {0, 600000}, + GetProofsV2Msg: {0, 600000}, + GetHeaderProofsMsg: {0, 1000000}, + GetHelperTrieProofsMsg: {0, 1000000}, + SendTxMsg: {0, 450000}, + SendTxV2Msg: {0, 450000}, + GetTxStatusMsg: {0, 250000}, + } + // maximum incoming message size estimates + reqMaxInSize = requestCostTable{ + GetBlockHeadersMsg: {40, 0}, + GetBlockBodiesMsg: {0, 40}, + GetReceiptsMsg: {0, 40}, + GetCodeMsg: {0, 80}, + GetProofsV1Msg: {0, 80}, + GetProofsV2Msg: {0, 80}, + GetHeaderProofsMsg: {0, 20}, + GetHelperTrieProofsMsg: {0, 20}, + SendTxMsg: {0, 66000}, + SendTxV2Msg: {0, 66000}, + GetTxStatusMsg: {0, 50}, + } + // maximum outgoing message size estimates + reqMaxOutSize = requestCostTable{ + GetBlockHeadersMsg: {0, 556}, + GetBlockBodiesMsg: {0, 100000}, + GetReceiptsMsg: {0, 200000}, + GetCodeMsg: {0, 50000}, + GetProofsV1Msg: {0, 4000}, + GetProofsV2Msg: {0, 4000}, + GetHeaderProofsMsg: {0, 4000}, + GetHelperTrieProofsMsg: {0, 4000}, + SendTxMsg: {0, 0}, + SendTxV2Msg: {0, 100}, + GetTxStatusMsg: {0, 100}, + } + minBufLimit = uint64(50000000 * maxCostFactor) // minimum buffer limit allowed for a client + minCapacity = (minBufLimit-1)/bufLimitRatio + 1 // minimum capacity allowed for a client +) + +const ( + maxCostFactor = 2 // ratio of maximum and average cost estimates + gfInitWeight = time.Second * 10 + gfMaxWeight = time.Hour + gfUsageThreshold = 0.5 + gfUsageTC = time.Second + gfDbKey = "_globalCostFactor" +) + +// costTracker is responsible for calculating costs and cost estimates on the +// server side. It continuously updates the global cost factor which is defined +// as the number of cost units per nanosecond of serving time in a single thread. +// It is based on statistics collected during serving requests in high-load periods +// and practically acts as a one-dimension request price scaling factor over the +// pre-defined cost estimate table. Instead of scaling the cost values, the real +// value of cost units is changed by applying the factor to the serving times. This +// is more convenient because the changes in the cost factor can be applied immediately +// without always notifying the clients about the changed cost tables. +type costTracker struct { + db ethdb.Database + stopCh chan chan struct{} + + inSizeFactor, outSizeFactor float64 + gf, utilTarget float64 + + gfUpdateCh chan gfUpdate + gfLock sync.RWMutex + totalRechargeCh chan uint64 + + stats map[uint64][]uint64 +} + +// newCostTracker creates a cost tracker and loads the cost factor statistics from the database +func newCostTracker(db ethdb.Database, config *eth.Config) *costTracker { + utilTarget := float64(config.LightServ) * flowcontrol.FixedPointMultiplier / 100 + ct := &costTracker{ + db: db, + stopCh: make(chan chan struct{}), + utilTarget: utilTarget, + } + if config.LightBandwidthIn > 0 { + ct.inSizeFactor = utilTarget / float64(config.LightBandwidthIn) + } + if config.LightBandwidthOut > 0 { + ct.outSizeFactor = utilTarget / float64(config.LightBandwidthOut) + } + if makeCostStats { + ct.stats = make(map[uint64][]uint64) + for code := range reqAvgTimeCost { + ct.stats[code] = make([]uint64, 10) + } + } + ct.gfLoop() + return ct +} + +// stop stops the cost tracker and saves the cost factor statistics to the database +func (ct *costTracker) stop() { + stopCh := make(chan struct{}) + ct.stopCh <- stopCh + <-stopCh + if makeCostStats { + ct.printStats() + } +} + +// makeCostList returns upper cost estimates based on the hardcoded cost estimate +// tables and the optionally specified incoming/outgoing bandwidth limits +func (ct *costTracker) makeCostList() RequestCostList { + maxCost := func(avgTime, inSize, outSize uint64) uint64 { + globalFactor := ct.globalFactor() + + cost := avgTime * maxCostFactor + inSizeCost := uint64(float64(inSize) * ct.inSizeFactor * globalFactor * maxCostFactor) + if inSizeCost > cost { + cost = inSizeCost + } + outSizeCost := uint64(float64(outSize) * ct.outSizeFactor * globalFactor * maxCostFactor) + if outSizeCost > cost { + cost = outSizeCost + } + return cost + } + var list RequestCostList + for code, data := range reqAvgTimeCost { + list = append(list, requestCostListItem{ + MsgCode: code, + BaseCost: maxCost(data.baseCost, reqMaxInSize[code].baseCost, reqMaxOutSize[code].baseCost), + ReqCost: maxCost(data.reqCost, reqMaxInSize[code].reqCost, reqMaxOutSize[code].reqCost), + }) + } + return list +} + +type gfUpdate struct { + avgTime, servingTime float64 +} + +// gfLoop starts an event loop which updates the global cost factor which is +// calculated as a weighted average of the average estimate / serving time ratio. +// The applied weight equals the serving time if gfUsage is over a threshold, +// zero otherwise. gfUsage is the recent average serving time per time unit in +// an exponential moving window. This ensures that statistics are collected only +// under high-load circumstances where the measured serving times are relevant. +// The total recharge parameter of the flow control system which controls the +// total allowed serving time per second but nominated in cost units, should +// also be scaled with the cost factor and is also updated by this loop. +func (ct *costTracker) gfLoop() { + var gfUsage, gfSum, gfWeight float64 + lastUpdate := mclock.Now() + expUpdate := lastUpdate + + data, _ := ct.db.Get([]byte(gfDbKey)) + if len(data) == 16 { + gfSum = math.Float64frombits(binary.BigEndian.Uint64(data[0:8])) + gfWeight = math.Float64frombits(binary.BigEndian.Uint64(data[8:16])) + } + if gfWeight < float64(gfInitWeight) { + gfSum = float64(gfInitWeight) + gfWeight = float64(gfInitWeight) + } + gf := gfSum / gfWeight + ct.gf = gf + ct.gfUpdateCh = make(chan gfUpdate, 100) + + go func() { + for { + select { + case r := <-ct.gfUpdateCh: + now := mclock.Now() + max := r.servingTime * gf + if r.avgTime > max { + max = r.avgTime + } + dt := float64(now - expUpdate) + expUpdate = now + gfUsage = gfUsage*math.Exp(-dt/float64(gfUsageTC)) + max*1000000/float64(gfUsageTC) + + if gfUsage >= gfUsageThreshold*ct.utilTarget*gf { + gfSum += r.avgTime + gfWeight += r.servingTime + if time.Duration(now-lastUpdate) > time.Second { + gf = gfSum / gfWeight + if gfWeight >= float64(gfMaxWeight) { + gfSum = gf * float64(gfMaxWeight) + gfWeight = float64(gfMaxWeight) + } + lastUpdate = now + ct.gfLock.Lock() + ct.gf = gf + ch := ct.totalRechargeCh + ct.gfLock.Unlock() + if ch != nil { + select { + case ct.totalRechargeCh <- uint64(ct.utilTarget * gf): + default: + } + } + log.Debug("global cost factor updated", "gf", gf, "weight", time.Duration(gfWeight)) + } + } + case stopCh := <-ct.stopCh: + var data [16]byte + binary.BigEndian.PutUint64(data[0:8], math.Float64bits(gfSum)) + binary.BigEndian.PutUint64(data[8:16], math.Float64bits(gfWeight)) + ct.db.Put([]byte(gfDbKey), data[:]) + log.Debug("global cost factor saved", "sum", time.Duration(gfSum), "weight", time.Duration(gfWeight)) + close(stopCh) + return + } + } + }() +} + +// globalFactor returns the current value of the global cost factor +func (ct *costTracker) globalFactor() float64 { + ct.gfLock.RLock() + defer ct.gfLock.RUnlock() + + return ct.gf +} + +// totalRecharge returns the current total recharge parameter which is used by +// flowcontrol.ClientManager and is scaled by the global cost factor +func (ct *costTracker) totalRecharge() uint64 { + ct.gfLock.RLock() + defer ct.gfLock.RUnlock() + + return uint64(ct.gf * ct.utilTarget) +} + +// subscribeTotalRecharge returns all future updates to the total recharge value +// through a channel and also returns the current value +func (ct *costTracker) subscribeTotalRecharge(ch chan uint64) uint64 { + ct.gfLock.Lock() + defer ct.gfLock.Unlock() + + ct.totalRechargeCh = ch + return uint64(ct.gf * ct.utilTarget) +} + +// updateStats updates the global cost factor and (if enabled) the real cost vs. +// average estimate statistics +func (ct *costTracker) updateStats(code, amount, servingTime, realCost uint64) { + avg := reqAvgTimeCost[code] + avgTime := avg.baseCost + amount*avg.reqCost + select { + case ct.gfUpdateCh <- gfUpdate{float64(avgTime), float64(servingTime)}: + default: + } + if makeCostStats { + realCost <<= 4 + l := 0 + for l < 9 && realCost > avgTime { + l++ + realCost >>= 1 + } + atomic.AddUint64(&ct.stats[code][l], 1) + } +} + +// realCost calculates the final cost of a request based on actual serving time, +// incoming and outgoing message size +// +// Note: message size is only taken into account if bandwidth limitation is applied +// and the cost based on either message size is greater than the cost based on +// serving time. A maximum of the three costs is applied instead of their sum +// because the three limited resources (serving thread time and i/o bandwidth) can +// also be maxed out simultaneously. +func (ct *costTracker) realCost(servingTime uint64, inSize, outSize uint32) uint64 { + cost := float64(servingTime) + inSizeCost := float64(inSize) * ct.inSizeFactor + if inSizeCost > cost { + cost = inSizeCost + } + outSizeCost := float64(outSize) * ct.outSizeFactor + if outSizeCost > cost { + cost = outSizeCost + } + return uint64(cost * ct.globalFactor()) +} + +// printStats prints the distribution of real request cost relative to the average estimates +func (ct *costTracker) printStats() { + if ct.stats == nil { + return + } + for code, arr := range ct.stats { + log.Info("Request cost statistics", "code", code, "1/16", arr[0], "1/8", arr[1], "1/4", arr[2], "1/2", arr[3], "1", arr[4], "2", arr[5], "4", arr[6], "8", arr[7], "16", arr[8], ">16", arr[9]) + } +} + +type ( + // requestCostTable assigns a cost estimate function to each request type + // which is a linear function of the requested amount + // (cost = baseCost + reqCost * amount) + requestCostTable map[uint64]*requestCosts + requestCosts struct { + baseCost, reqCost uint64 + } + + // RequestCostList is a list representation of request costs which is used for + // database storage and communication through the network + RequestCostList []requestCostListItem + requestCostListItem struct { + MsgCode, BaseCost, ReqCost uint64 + } +) + +// getCost calculates the estimated cost for a given request type and amount +func (table requestCostTable) getCost(code, amount uint64) uint64 { + costs := table[code] + return costs.baseCost + amount*costs.reqCost +} + +// decode converts a cost list to a cost table +func (list RequestCostList) decode() requestCostTable { + table := make(requestCostTable) + for _, e := range list { + table[e.MsgCode] = &requestCosts{ + baseCost: e.BaseCost, + reqCost: e.ReqCost, + } + } + return table +} + +// testCostList returns a dummy request cost list used by tests +func testCostList() RequestCostList { + cl := make(RequestCostList, len(reqAvgTimeCost)) + var max uint64 + for code := range reqAvgTimeCost { + if code > max { + max = code + } + } + i := 0 + for code := uint64(0); code <= max; code++ { + if _, ok := reqAvgTimeCost[code]; ok { + cl[i].MsgCode = code + cl[i].BaseCost = 0 + cl[i].ReqCost = 0 + i++ + } + } + return cl +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/distributor.go b/vendor/github.com/ethereum/go-ethereum/les/distributor.go index f90765b6..1de267f2 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/distributor.go +++ b/vendor/github.com/ethereum/go-ethereum/les/distributor.go @@ -14,20 +14,21 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( "container/list" "sync" "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) // requestDistributor implements a mechanism that distributes requests to // suitable peers, obeying flow control rules and prioritizing them in creation // order (even when a resend is necessary). type requestDistributor struct { + clock mclock.Clock reqQueue *list.List lastReqOrder uint64 peers map[distPeer]struct{} @@ -67,8 +68,9 @@ type distReq struct { } // newRequestDistributor creates a new request distributor -func newRequestDistributor(peers *peerSet, stopChn chan struct{}) *requestDistributor { +func newRequestDistributor(peers *peerSet, stopChn chan struct{}, clock mclock.Clock) *requestDistributor { d := &requestDistributor{ + clock: clock, reqQueue: list.New(), loopChn: make(chan struct{}, 2), stopChn: stopChn, @@ -148,7 +150,7 @@ func (d *requestDistributor) loop() { wait = distMaxWait } go func() { - time.Sleep(wait) + d.clock.Sleep(wait) d.loopChn <- struct{}{} }() break loop diff --git a/vendor/github.com/ethereum/go-ethereum/les/distributor_test.go b/vendor/github.com/ethereum/go-ethereum/les/distributor_test.go index 8c7621f2..d2247212 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/distributor_test.go +++ b/vendor/github.com/ethereum/go-ethereum/les/distributor_test.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( @@ -23,6 +21,8 @@ import ( "sync" "testing" "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) type testDistReq struct { @@ -121,7 +121,7 @@ func testRequestDistributor(t *testing.T, resend bool) { stop := make(chan struct{}) defer close(stop) - dist := newRequestDistributor(nil, stop) + dist := newRequestDistributor(nil, stop, &mclock.System{}) var peers [testDistPeerCount]*testDistPeer for i := range peers { peers[i] = &testDistPeer{} diff --git a/vendor/github.com/ethereum/go-ethereum/les/fetcher.go b/vendor/github.com/ethereum/go-ethereum/les/fetcher.go index 2615f69d..057552f5 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/fetcher.go +++ b/vendor/github.com/ethereum/go-ethereum/les/fetcher.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -43,7 +42,7 @@ const ( type lightFetcher struct { pm *ProtocolManager odr *LesOdr - chain *light.LightChain + chain lightChain lock sync.Mutex // lock protects access to the fetcher's internal state variables except sent requests maxConfirmedTd *big.Int @@ -52,11 +51,19 @@ type lightFetcher struct { syncing bool syncDone chan *peer - reqMu sync.RWMutex // reqMu protects access to sent header fetch requests - requested map[uint64]fetchRequest - deliverChn chan fetchResponse - timeoutChn chan uint64 - requestChn chan bool // true if initiated from outside + reqMu sync.RWMutex // reqMu protects access to sent header fetch requests + requested map[uint64]fetchRequest + deliverChn chan fetchResponse + timeoutChn chan uint64 + requestChn chan bool // true if initiated from outside + lastTrustedHeader *types.Header +} + +// lightChain extends the BlockChain interface by locking. +type lightChain interface { + BlockChain + LockChain() + UnlockChain() } // fetcherPeerInfo holds fetcher-specific information about each active peer @@ -145,6 +152,7 @@ func (f *lightFetcher) syncLoop() { reqID uint64 syncing bool ) + if !f.syncing && !(newAnnounce && s) { rq, reqID, syncing = f.nextRequest() } @@ -227,7 +235,6 @@ func (f *lightFetcher) registerPeer(p *peer) { f.lock.Lock() defer f.lock.Unlock() - f.peers[p] = &fetcherPeerInfo{nodeByHash: make(map[common.Hash]*fetcherTreeNode)} } @@ -280,8 +287,10 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { fp.nodeCnt = 0 fp.nodeByHash = make(map[common.Hash]*fetcherTreeNode) } + // check if the node count is too high to add new nodes, discard oldest ones if necessary if n != nil { - // check if the node count is too high to add new nodes, discard oldest ones if necessary + // n is now the reorg common ancestor, add a new branch of nodes + // check if the node count is too high to add new nodes locked := false for uint64(fp.nodeCnt)+head.Number-n.number > maxNodeCount && fp.root != nil { if !locked { @@ -325,6 +334,7 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { fp.nodeByHash[n.hash] = n } } + if n == nil { // could not find reorg common ancestor or had to delete entire tree, a new root and a resync is needed if fp.root != nil { @@ -411,25 +421,13 @@ func (f *lightFetcher) requestedID(reqID uint64) bool { // to be downloaded starting from the head backwards is also returned func (f *lightFetcher) nextRequest() (*distReq, uint64, bool) { var ( - bestHash common.Hash - bestAmount uint64 + bestHash common.Hash + bestAmount uint64 + bestTd *big.Int + bestSyncing bool ) - bestTd := f.maxConfirmedTd - bestSyncing := false + bestHash, bestAmount, bestTd, bestSyncing = f.findBestRequest() - for p, fp := range f.peers { - for hash, n := range fp.nodeByHash { - if !f.checkKnownNode(p, n) && !n.requested && (bestTd == nil || n.td.Cmp(bestTd) >= 0) { - amount := f.requestAmount(p, n) - if bestTd == nil || n.td.Cmp(bestTd) > 0 || amount < bestAmount { - bestHash = hash - bestAmount = amount - bestTd = n.td - bestSyncing = fp.bestConfirmed == nil || fp.root == nil || !f.checkKnownNode(p, fp.root) - } - } - } - } if bestTd == f.maxConfirmedTd { return nil, 0, false } @@ -437,74 +435,142 @@ func (f *lightFetcher) nextRequest() (*distReq, uint64, bool) { var rq *distReq reqID := genReqID() if bestSyncing { - rq = &distReq{ - getCost: func(dp distPeer) uint64 { - return 0 - }, - canSend: func(dp distPeer) bool { - p := dp.(*peer) - f.lock.Lock() - defer f.lock.Unlock() - - fp := f.peers[p] - return fp != nil && fp.nodeByHash[bestHash] != nil - }, - request: func(dp distPeer) func() { - go func() { - p := dp.(*peer) - p.Log().Debug("Synchronisation started") - f.pm.synchronise(p) - f.syncDone <- p - }() - return nil - }, - } + rq = f.newFetcherDistReqForSync(bestHash) } else { - rq = &distReq{ - getCost: func(dp distPeer) uint64 { - p := dp.(*peer) - return p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) - }, - canSend: func(dp distPeer) bool { - p := dp.(*peer) - f.lock.Lock() - defer f.lock.Unlock() - - fp := f.peers[p] - if fp == nil { - return false - } - n := fp.nodeByHash[bestHash] - return n != nil && !n.requested - }, - request: func(dp distPeer) func() { - p := dp.(*peer) - f.lock.Lock() - fp := f.peers[p] - if fp != nil { - n := fp.nodeByHash[bestHash] - if n != nil { - n.requested = true - } - } - f.lock.Unlock() - - cost := p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) - p.fcServer.QueueRequest(reqID, cost) - f.reqMu.Lock() - f.requested[reqID] = fetchRequest{hash: bestHash, amount: bestAmount, peer: p, sent: mclock.Now()} - f.reqMu.Unlock() - go func() { - time.Sleep(hardRequestTimeout) - f.timeoutChn <- reqID - }() - return func() { p.RequestHeadersByHash(reqID, cost, bestHash, int(bestAmount), 0, true) } - }, - } + rq = f.newFetcherDistReq(bestHash, reqID, bestAmount) } return rq, reqID, bestSyncing } +// findBestRequest finds the best head to request that has been announced by but not yet requested from a known peer. +// It also returns the announced Td (which should be verified after fetching the head), +// the necessary amount to request and whether a downloader sync is necessary instead of a normal header request. +func (f *lightFetcher) findBestRequest() (bestHash common.Hash, bestAmount uint64, bestTd *big.Int, bestSyncing bool) { + bestTd = f.maxConfirmedTd + bestSyncing = false + + for p, fp := range f.peers { + for hash, n := range fp.nodeByHash { + if f.checkKnownNode(p, n) || n.requested { + continue + } + + //if ulc mode is disabled, isTrustedHash returns true + amount := f.requestAmount(p, n) + if (bestTd == nil || n.td.Cmp(bestTd) > 0 || amount < bestAmount) && (f.isTrustedHash(hash) || f.maxConfirmedTd.Int64() == 0) { + bestHash = hash + bestTd = n.td + bestAmount = amount + bestSyncing = fp.bestConfirmed == nil || fp.root == nil || !f.checkKnownNode(p, fp.root) + } + } + } + return +} + +// isTrustedHash checks if the block can be trusted by the minimum trusted fraction. +func (f *lightFetcher) isTrustedHash(hash common.Hash) bool { + if !f.pm.isULCEnabled() { + return true + } + + var numAgreed int + for p, fp := range f.peers { + if !p.isTrusted { + continue + } + if _, ok := fp.nodeByHash[hash]; !ok { + continue + } + + numAgreed++ + } + + return 100*numAgreed/len(f.pm.ulc.trustedKeys) >= f.pm.ulc.minTrustedFraction +} + +func (f *lightFetcher) newFetcherDistReqForSync(bestHash common.Hash) *distReq { + return &distReq{ + getCost: func(dp distPeer) uint64 { + return 0 + }, + canSend: func(dp distPeer) bool { + p := dp.(*peer) + f.lock.Lock() + defer f.lock.Unlock() + + if p.isOnlyAnnounce { + return false + } + + fp := f.peers[p] + return fp != nil && fp.nodeByHash[bestHash] != nil + }, + request: func(dp distPeer) func() { + if f.pm.isULCEnabled() { + //keep last trusted header before sync + f.setLastTrustedHeader(f.chain.CurrentHeader()) + } + go func() { + p := dp.(*peer) + p.Log().Debug("Synchronisation started") + f.pm.synchronise(p) + f.syncDone <- p + }() + return nil + }, + } +} + +// newFetcherDistReq creates a new request for the distributor. +func (f *lightFetcher) newFetcherDistReq(bestHash common.Hash, reqID uint64, bestAmount uint64) *distReq { + return &distReq{ + getCost: func(dp distPeer) uint64 { + p := dp.(*peer) + return p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) + }, + canSend: func(dp distPeer) bool { + p := dp.(*peer) + f.lock.Lock() + defer f.lock.Unlock() + + if p.isOnlyAnnounce { + return false + } + + fp := f.peers[p] + if fp == nil { + return false + } + n := fp.nodeByHash[bestHash] + return n != nil && !n.requested + }, + request: func(dp distPeer) func() { + p := dp.(*peer) + f.lock.Lock() + fp := f.peers[p] + if fp != nil { + n := fp.nodeByHash[bestHash] + if n != nil { + n.requested = true + } + } + f.lock.Unlock() + + cost := p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) + p.fcServer.QueuedRequest(reqID, cost) + f.reqMu.Lock() + f.requested[reqID] = fetchRequest{hash: bestHash, amount: bestAmount, peer: p, sent: mclock.Now()} + f.reqMu.Unlock() + go func() { + time.Sleep(hardRequestTimeout) + f.timeoutChn <- reqID + }() + return func() { p.RequestHeadersByHash(reqID, cost, bestHash, int(bestAmount), 0, true) } + }, + } +} + // deliverHeaders delivers header download request responses for processing func (f *lightFetcher) deliverHeaders(peer *peer, reqID uint64, headers []*types.Header) { f.deliverChn <- fetchResponse{reqID: reqID, headers: headers, peer: peer} @@ -520,6 +586,7 @@ func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) boo for i, header := range resp.headers { headers[int(req.amount)-1-i] = header } + if _, err := f.chain.InsertHeaderChain(headers, 1); err != nil { if err == consensus.ErrFutureBlock { return true @@ -544,6 +611,7 @@ func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) boo // downloaded and validated batch or headers func (f *lightFetcher) newHeaders(headers []*types.Header, tds []*big.Int) { var maxTd *big.Int + for p, fp := range f.peers { if !f.checkAnnouncedHeaders(fp, headers, tds) { p.Log().Debug("Inconsistent announcement") @@ -553,6 +621,7 @@ func (f *lightFetcher) newHeaders(headers []*types.Header, tds []*big.Int) { maxTd = fp.confirmedTd } } + if maxTd != nil { f.updateMaxConfirmedTd(maxTd) } @@ -640,22 +709,72 @@ func (f *lightFetcher) checkSyncedHeaders(p *peer) { p.Log().Debug("Unknown peer to check sync headers") return } + n := fp.lastAnnounced var td *big.Int + + var h *types.Header + if f.pm.isULCEnabled() { + var unapprovedHashes []common.Hash + // Overwrite last announced for ULC mode + h, unapprovedHashes = f.lastTrustedTreeNode(p) + //rollback untrusted blocks + f.chain.Rollback(unapprovedHashes) + //overwrite to last trusted + n = fp.nodeByHash[h.Hash()] + } + + //find last valid block for n != nil { if td = f.chain.GetTd(n.hash, n.number); td != nil { break } n = n.parent } - // now n is the latest downloaded header after syncing + + // Now n is the latest downloaded/approved header after syncing if n == nil { p.Log().Debug("Synchronisation failed") go f.pm.removePeer(p.id) - } else { - header := f.chain.GetHeader(n.hash, n.number) - f.newHeaders([]*types.Header{header}, []*big.Int{td}) + return } + header := f.chain.GetHeader(n.hash, n.number) + f.newHeaders([]*types.Header{header}, []*big.Int{td}) +} + +// lastTrustedTreeNode return last approved treeNode and a list of unapproved hashes +func (f *lightFetcher) lastTrustedTreeNode(p *peer) (*types.Header, []common.Hash) { + unapprovedHashes := make([]common.Hash, 0) + current := f.chain.CurrentHeader() + + if f.lastTrustedHeader == nil { + return current, unapprovedHashes + } + + canonical := f.chain.CurrentHeader() + if canonical.Number.Uint64() > f.lastTrustedHeader.Number.Uint64() { + canonical = f.chain.GetHeaderByNumber(f.lastTrustedHeader.Number.Uint64()) + } + commonAncestor := rawdb.FindCommonAncestor(f.pm.chainDb, canonical, f.lastTrustedHeader) + if commonAncestor == nil { + log.Error("Common ancestor of last trusted header and canonical header is nil", "canonical hash", canonical.Hash(), "trusted hash", f.lastTrustedHeader.Hash()) + return current, unapprovedHashes + } + + for current.Hash() == commonAncestor.Hash() { + if f.isTrustedHash(current.Hash()) { + break + } + unapprovedHashes = append(unapprovedHashes, current.Hash()) + current = f.chain.GetHeader(current.ParentHash, current.Number.Uint64()-1) + } + return current, unapprovedHashes +} + +func (f *lightFetcher) setLastTrustedHeader(h *types.Header) { + f.lock.Lock() + defer f.lock.Unlock() + f.lastTrustedHeader = h } // checkKnownNode checks if a block tree node is known (downloaded and validated) @@ -747,6 +866,7 @@ func (f *lightFetcher) updateMaxConfirmedTd(td *big.Int) { if f.lastUpdateStats != nil { f.lastUpdateStats.next = newEntry } + f.lastUpdateStats = newEntry for p := range f.peers { f.checkUpdateStats(p, newEntry) @@ -769,6 +889,7 @@ func (f *lightFetcher) checkUpdateStats(p *peer, newEntry *updateStatsEntry) { p.Log().Debug("Unknown peer to check update stats") return } + if newEntry != nil && fp.firstUpdateStats == nil { fp.firstUpdateStats = newEntry } diff --git a/vendor/github.com/ethereum/go-ethereum/les/fetcher_test.go b/vendor/github.com/ethereum/go-ethereum/les/fetcher_test.go new file mode 100644 index 00000000..cc678c8c --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/fetcher_test.go @@ -0,0 +1,152 @@ +package les + +import ( + "math/big" + "testing" + + "net" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestFetcherULCPeerSelector(t *testing.T) { + id1 := newNodeID(t).ID() + id2 := newNodeID(t).ID() + id3 := newNodeID(t).ID() + id4 := newNodeID(t).ID() + + ftn1 := &fetcherTreeNode{ + hash: common.HexToHash("1"), + td: big.NewInt(1), + } + ftn2 := &fetcherTreeNode{ + hash: common.HexToHash("2"), + td: big.NewInt(2), + parent: ftn1, + } + ftn3 := &fetcherTreeNode{ + hash: common.HexToHash("3"), + td: big.NewInt(3), + parent: ftn2, + } + lf := lightFetcher{ + pm: &ProtocolManager{ + ulc: &ulc{ + trustedKeys: map[string]struct{}{ + id1.String(): {}, + id2.String(): {}, + id3.String(): {}, + id4.String(): {}, + }, + minTrustedFraction: 70, + }, + }, + maxConfirmedTd: ftn1.td, + + peers: map[*peer]*fetcherPeerInfo{ + { + id: "peer1", + Peer: p2p.NewPeer(id1, "peer1", []p2p.Cap{}), + isTrusted: true, + }: { + nodeByHash: map[common.Hash]*fetcherTreeNode{ + ftn1.hash: ftn1, + ftn2.hash: ftn2, + }, + }, + { + Peer: p2p.NewPeer(id2, "peer2", []p2p.Cap{}), + id: "peer2", + isTrusted: true, + }: { + nodeByHash: map[common.Hash]*fetcherTreeNode{ + ftn1.hash: ftn1, + ftn2.hash: ftn2, + }, + }, + { + id: "peer3", + Peer: p2p.NewPeer(id3, "peer3", []p2p.Cap{}), + isTrusted: true, + }: { + nodeByHash: map[common.Hash]*fetcherTreeNode{ + ftn1.hash: ftn1, + ftn2.hash: ftn2, + ftn3.hash: ftn3, + }, + }, + { + id: "peer4", + Peer: p2p.NewPeer(id4, "peer4", []p2p.Cap{}), + isTrusted: true, + }: { + nodeByHash: map[common.Hash]*fetcherTreeNode{ + ftn1.hash: ftn1, + }, + }, + }, + chain: &lightChainStub{ + tds: map[common.Hash]*big.Int{}, + headers: map[common.Hash]*types.Header{ + ftn1.hash: {}, + ftn2.hash: {}, + ftn3.hash: {}, + }, + }, + } + bestHash, bestAmount, bestTD, sync := lf.findBestRequest() + + if bestTD == nil { + t.Fatal("Empty result") + } + + if bestTD.Cmp(ftn2.td) != 0 { + t.Fatal("bad td", bestTD) + } + if bestHash != ftn2.hash { + t.Fatal("bad hash", bestTD) + } + + _, _ = bestAmount, sync +} + +type lightChainStub struct { + BlockChain + tds map[common.Hash]*big.Int + headers map[common.Hash]*types.Header + insertHeaderChainAssertFunc func(chain []*types.Header, checkFreq int) (int, error) +} + +func (l *lightChainStub) GetHeader(hash common.Hash, number uint64) *types.Header { + if h, ok := l.headers[hash]; ok { + return h + } + + return nil +} + +func (l *lightChainStub) LockChain() {} +func (l *lightChainStub) UnlockChain() {} + +func (l *lightChainStub) GetTd(hash common.Hash, number uint64) *big.Int { + if td, ok := l.tds[hash]; ok { + return td + } + return nil +} + +func (l *lightChainStub) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { + return l.insertHeaderChainAssertFunc(chain, checkFreq) +} + +func newNodeID(t *testing.T) *enode.Node { + key, err := crypto.GenerateKey() + if err != nil { + t.Fatal("generate key err:", err) + } + return enode.NewV4(&key.PublicKey, net.IP{}, 35000, 35000) +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/control.go b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/control.go index 8ef4ba51..c03f673b 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/control.go +++ b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/control.go @@ -18,166 +18,339 @@ package flowcontrol import ( + "fmt" "sync" "time" "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/log" ) -const fcTimeConst = time.Millisecond +const ( + // fcTimeConst is the time constant applied for MinRecharge during linear + // buffer recharge period + fcTimeConst = time.Millisecond + // DecParamDelay is applied at server side when decreasing capacity in order to + // avoid a buffer underrun error due to requests sent by the client before + // receiving the capacity update announcement + DecParamDelay = time.Second * 2 + // keepLogs is the duration of keeping logs; logging is not used if zero + keepLogs = 0 +) +// ServerParams are the flow control parameters specified by a server for a client +// +// Note: a server can assign different amounts of capacity to each client by giving +// different parameters to them. type ServerParams struct { BufLimit, MinRecharge uint64 } -type ClientNode struct { - params *ServerParams - bufValue uint64 - lastTime mclock.AbsTime - lock sync.Mutex - cm *ClientManager - cmNode *cmNode +// scheduledUpdate represents a delayed flow control parameter update +type scheduledUpdate struct { + time mclock.AbsTime + params ServerParams } -func NewClientNode(cm *ClientManager, params *ServerParams) *ClientNode { +// ClientNode is the flow control system's representation of a client +// (used in server mode only) +type ClientNode struct { + params ServerParams + bufValue uint64 + lastTime mclock.AbsTime + updateSchedule []scheduledUpdate + sumCost uint64 // sum of req costs received from this client + accepted map[uint64]uint64 // value = sumCost after accepting the given req + lock sync.Mutex + cm *ClientManager + log *logger + cmNodeFields +} + +// NewClientNode returns a new ClientNode +func NewClientNode(cm *ClientManager, params ServerParams) *ClientNode { node := &ClientNode{ cm: cm, params: params, bufValue: params.BufLimit, - lastTime: mclock.Now(), + lastTime: cm.clock.Now(), + accepted: make(map[uint64]uint64), } - node.cmNode = cm.addNode(node) + if keepLogs > 0 { + node.log = newLogger(keepLogs) + } + cm.connect(node) return node } -func (peer *ClientNode) Remove(cm *ClientManager) { - cm.removeNode(peer.cmNode) +// Disconnect should be called when a client is disconnected +func (node *ClientNode) Disconnect() { + node.cm.disconnect(node) } -func (peer *ClientNode) recalcBV(time mclock.AbsTime) { - dt := uint64(time - peer.lastTime) - if time < peer.lastTime { +// update recalculates the buffer value at a specified time while also performing +// scheduled flow control parameter updates if necessary +func (node *ClientNode) update(now mclock.AbsTime) { + for len(node.updateSchedule) > 0 && node.updateSchedule[0].time <= now { + node.recalcBV(node.updateSchedule[0].time) + node.updateParams(node.updateSchedule[0].params, now) + node.updateSchedule = node.updateSchedule[1:] + } + node.recalcBV(now) +} + +// recalcBV recalculates the buffer value at a specified time +func (node *ClientNode) recalcBV(now mclock.AbsTime) { + dt := uint64(now - node.lastTime) + if now < node.lastTime { dt = 0 } - peer.bufValue += peer.params.MinRecharge * dt / uint64(fcTimeConst) - if peer.bufValue > peer.params.BufLimit { - peer.bufValue = peer.params.BufLimit + node.bufValue += node.params.MinRecharge * dt / uint64(fcTimeConst) + if node.bufValue > node.params.BufLimit { + node.bufValue = node.params.BufLimit } - peer.lastTime = time + if node.log != nil { + node.log.add(now, fmt.Sprintf("updated bv=%d MRR=%d BufLimit=%d", node.bufValue, node.params.MinRecharge, node.params.BufLimit)) + } + node.lastTime = now } -func (peer *ClientNode) AcceptRequest() (uint64, bool) { - peer.lock.Lock() - defer peer.lock.Unlock() +// UpdateParams updates the flow control parameters of a client node +func (node *ClientNode) UpdateParams(params ServerParams) { + node.lock.Lock() + defer node.lock.Unlock() - time := mclock.Now() - peer.recalcBV(time) - return peer.bufValue, peer.cm.accept(peer.cmNode, time) -} - -func (peer *ClientNode) RequestProcessed(cost uint64) (bv, realCost uint64) { - peer.lock.Lock() - defer peer.lock.Unlock() - - time := mclock.Now() - peer.recalcBV(time) - peer.bufValue -= cost - rcValue, rcost := peer.cm.processed(peer.cmNode, time) - if rcValue < peer.params.BufLimit { - bv := peer.params.BufLimit - rcValue - if bv > peer.bufValue { - peer.bufValue = bv + now := node.cm.clock.Now() + node.update(now) + if params.MinRecharge >= node.params.MinRecharge { + node.updateSchedule = nil + node.updateParams(params, now) + } else { + for i, s := range node.updateSchedule { + if params.MinRecharge >= s.params.MinRecharge { + s.params = params + node.updateSchedule = node.updateSchedule[:i+1] + return + } } + node.updateSchedule = append(node.updateSchedule, scheduledUpdate{time: now + mclock.AbsTime(DecParamDelay), params: params}) } - return peer.bufValue, rcost } +// updateParams updates the flow control parameters of the node +func (node *ClientNode) updateParams(params ServerParams, now mclock.AbsTime) { + diff := params.BufLimit - node.params.BufLimit + if int64(diff) > 0 { + node.bufValue += diff + } else if node.bufValue > params.BufLimit { + node.bufValue = params.BufLimit + } + node.cm.updateParams(node, params, now) +} + +// AcceptRequest returns whether a new request can be accepted and the missing +// buffer amount if it was rejected due to a buffer underrun. If accepted, maxCost +// is deducted from the flow control buffer. +func (node *ClientNode) AcceptRequest(reqID, index, maxCost uint64) (accepted bool, bufShort uint64, priority int64) { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.cm.clock.Now() + node.update(now) + if maxCost > node.bufValue { + if node.log != nil { + node.log.add(now, fmt.Sprintf("rejected reqID=%d bv=%d maxCost=%d", reqID, node.bufValue, maxCost)) + node.log.dump(now) + } + return false, maxCost - node.bufValue, 0 + } + node.bufValue -= maxCost + node.sumCost += maxCost + if node.log != nil { + node.log.add(now, fmt.Sprintf("accepted reqID=%d bv=%d maxCost=%d sumCost=%d", reqID, node.bufValue, maxCost, node.sumCost)) + } + node.accepted[index] = node.sumCost + return true, 0, node.cm.accepted(node, maxCost, now) +} + +// RequestProcessed should be called when the request has been processed +func (node *ClientNode) RequestProcessed(reqID, index, maxCost, realCost uint64) (bv uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.cm.clock.Now() + node.update(now) + node.cm.processed(node, maxCost, realCost, now) + bv = node.bufValue + node.sumCost - node.accepted[index] + if node.log != nil { + node.log.add(now, fmt.Sprintf("processed reqID=%d bv=%d maxCost=%d realCost=%d sumCost=%d oldSumCost=%d reportedBV=%d", reqID, node.bufValue, maxCost, realCost, node.sumCost, node.accepted[index], bv)) + } + delete(node.accepted, index) + return +} + +// ServerNode is the flow control system's representation of a server +// (used in client mode only) type ServerNode struct { + clock mclock.Clock bufEstimate uint64 + bufRecharge bool lastTime mclock.AbsTime - params *ServerParams + params ServerParams sumCost uint64 // sum of req costs sent to this server pending map[uint64]uint64 // value = sumCost after sending the given req + log *logger lock sync.RWMutex } -func NewServerNode(params *ServerParams) *ServerNode { - return &ServerNode{ +// NewServerNode returns a new ServerNode +func NewServerNode(params ServerParams, clock mclock.Clock) *ServerNode { + node := &ServerNode{ + clock: clock, bufEstimate: params.BufLimit, - lastTime: mclock.Now(), + bufRecharge: false, + lastTime: clock.Now(), params: params, pending: make(map[uint64]uint64), } + if keepLogs > 0 { + node.log = newLogger(keepLogs) + } + return node } -func (peer *ServerNode) recalcBLE(time mclock.AbsTime) { - dt := uint64(time - peer.lastTime) - if time < peer.lastTime { - dt = 0 +// UpdateParams updates the flow control parameters of the node +func (node *ServerNode) UpdateParams(params ServerParams) { + node.lock.Lock() + defer node.lock.Unlock() + + node.recalcBLE(mclock.Now()) + if params.BufLimit > node.params.BufLimit { + node.bufEstimate += params.BufLimit - node.params.BufLimit + } else { + if node.bufEstimate > params.BufLimit { + node.bufEstimate = params.BufLimit + } } - peer.bufEstimate += peer.params.MinRecharge * dt / uint64(fcTimeConst) - if peer.bufEstimate > peer.params.BufLimit { - peer.bufEstimate = peer.params.BufLimit + node.params = params +} + +// recalcBLE recalculates the lowest estimate for the client's buffer value at +// the given server at the specified time +func (node *ServerNode) recalcBLE(now mclock.AbsTime) { + if now < node.lastTime { + return + } + if node.bufRecharge { + dt := uint64(now - node.lastTime) + node.bufEstimate += node.params.MinRecharge * dt / uint64(fcTimeConst) + if node.bufEstimate >= node.params.BufLimit { + node.bufEstimate = node.params.BufLimit + node.bufRecharge = false + } + } + node.lastTime = now + if node.log != nil { + node.log.add(now, fmt.Sprintf("updated bufEst=%d MRR=%d BufLimit=%d", node.bufEstimate, node.params.MinRecharge, node.params.BufLimit)) } - peer.lastTime = time } // safetyMargin is added to the flow control waiting time when estimated buffer value is low const safetyMargin = time.Millisecond -func (peer *ServerNode) canSend(maxCost uint64) (time.Duration, float64) { - peer.recalcBLE(mclock.Now()) - maxCost += uint64(safetyMargin) * peer.params.MinRecharge / uint64(fcTimeConst) - if maxCost > peer.params.BufLimit { - maxCost = peer.params.BufLimit - } - if peer.bufEstimate >= maxCost { - return 0, float64(peer.bufEstimate-maxCost) / float64(peer.params.BufLimit) - } - return time.Duration((maxCost - peer.bufEstimate) * uint64(fcTimeConst) / peer.params.MinRecharge), 0 -} - // CanSend returns the minimum waiting time required before sending a request // with the given maximum estimated cost. Second return value is the relative // estimated buffer level after sending the request (divided by BufLimit). -func (peer *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { - peer.lock.RLock() - defer peer.lock.RUnlock() +func (node *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { + node.lock.RLock() + defer node.lock.RUnlock() - return peer.canSend(maxCost) -} - -// QueueRequest should be called when the request has been assigned to the given -// server node, before putting it in the send queue. It is mandatory that requests -// are sent in the same order as the QueueRequest calls are made. -func (peer *ServerNode) QueueRequest(reqID, maxCost uint64) { - peer.lock.Lock() - defer peer.lock.Unlock() - - peer.bufEstimate -= maxCost - peer.sumCost += maxCost - peer.pending[reqID] = peer.sumCost -} - -// GotReply adjusts estimated buffer value according to the value included in -// the latest request reply. -func (peer *ServerNode) GotReply(reqID, bv uint64) { - - peer.lock.Lock() - defer peer.lock.Unlock() - - if bv > peer.params.BufLimit { - bv = peer.params.BufLimit + now := node.clock.Now() + node.recalcBLE(now) + maxCost += uint64(safetyMargin) * node.params.MinRecharge / uint64(fcTimeConst) + if maxCost > node.params.BufLimit { + maxCost = node.params.BufLimit } - sc, ok := peer.pending[reqID] + if node.bufEstimate >= maxCost { + relBuf := float64(node.bufEstimate-maxCost) / float64(node.params.BufLimit) + if node.log != nil { + node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d true relBuf=%f", node.bufEstimate, maxCost, relBuf)) + } + return 0, relBuf + } + timeLeft := time.Duration((maxCost - node.bufEstimate) * uint64(fcTimeConst) / node.params.MinRecharge) + if node.log != nil { + node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d false timeLeft=%v", node.bufEstimate, maxCost, timeLeft)) + } + return timeLeft, 0 +} + +// QueuedRequest should be called when the request has been assigned to the given +// server node, before putting it in the send queue. It is mandatory that requests +// are sent in the same order as the QueuedRequest calls are made. +func (node *ServerNode) QueuedRequest(reqID, maxCost uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.clock.Now() + node.recalcBLE(now) + // Note: we do not know when requests actually arrive to the server so bufRecharge + // is not turned on here if buffer was full; in this case it is going to be turned + // on by the first reply's bufValue feedback + if node.bufEstimate >= maxCost { + node.bufEstimate -= maxCost + } else { + log.Error("Queued request with insufficient buffer estimate") + node.bufEstimate = 0 + } + node.sumCost += maxCost + node.pending[reqID] = node.sumCost + if node.log != nil { + node.log.add(now, fmt.Sprintf("queued reqID=%d bufEst=%d maxCost=%d sumCost=%d", reqID, node.bufEstimate, maxCost, node.sumCost)) + } +} + +// ReceivedReply adjusts estimated buffer value according to the value included in +// the latest request reply. +func (node *ServerNode) ReceivedReply(reqID, bv uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.clock.Now() + node.recalcBLE(now) + if bv > node.params.BufLimit { + bv = node.params.BufLimit + } + sc, ok := node.pending[reqID] if !ok { return } - delete(peer.pending, reqID) - cc := peer.sumCost - sc - peer.bufEstimate = 0 + delete(node.pending, reqID) + cc := node.sumCost - sc + newEstimate := uint64(0) if bv > cc { - peer.bufEstimate = bv - cc + newEstimate = bv - cc + } + if newEstimate > node.bufEstimate { + // Note: we never reduce the buffer estimate based on the reported value because + // this can only happen because of the delayed delivery of the latest reply. + // The lowest estimate based on the previous reply can still be considered valid. + node.bufEstimate = newEstimate + } + + node.bufRecharge = node.bufEstimate < node.params.BufLimit + node.lastTime = now + if node.log != nil { + node.log.add(now, fmt.Sprintf("received reqID=%d bufEst=%d reportedBv=%d sumCost=%d oldSumCost=%d", reqID, node.bufEstimate, bv, node.sumCost, sc)) + } +} + +// DumpLogs dumps the event log if logging is used +func (node *ServerNode) DumpLogs() { + node.lock.Lock() + defer node.lock.Unlock() + + if node.log != nil { + node.log.dump(node.clock.Now()) } - peer.lastTime = mclock.Now() } diff --git a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/logger.go b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/logger.go new file mode 100644 index 00000000..fcd1285a --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/logger.go @@ -0,0 +1,65 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flowcontrol + +import ( + "fmt" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +// logger collects events in string format and discards events older than the +// "keep" parameter +type logger struct { + events map[uint64]logEvent + writePtr, delPtr uint64 + keep time.Duration +} + +// logEvent describes a single event +type logEvent struct { + time mclock.AbsTime + event string +} + +// newLogger creates a new logger +func newLogger(keep time.Duration) *logger { + return &logger{ + events: make(map[uint64]logEvent), + keep: keep, + } +} + +// add adds a new event and discards old events if possible +func (l *logger) add(now mclock.AbsTime, event string) { + keepAfter := now - mclock.AbsTime(l.keep) + for l.delPtr < l.writePtr && l.events[l.delPtr].time <= keepAfter { + delete(l.events, l.delPtr) + l.delPtr++ + } + l.events[l.writePtr] = logEvent{now, event} + l.writePtr++ +} + +// dump prints all stored events +func (l *logger) dump(now mclock.AbsTime) { + for i := l.delPtr; i < l.writePtr; i++ { + e := l.events[i] + fmt.Println(time.Duration(e.time-now), e.event) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager.go b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager.go index 28cc6f0f..532e6a40 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager.go +++ b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,211 +14,388 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package flowcontrol implements a client side flow control mechanism package flowcontrol import ( + "fmt" + "math" "sync" "time" "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" ) -const rcConst = 1000000 - -type cmNode struct { - node *ClientNode - lastUpdate mclock.AbsTime - serving, recharging bool - rcWeight uint64 - rcValue, rcDelta, startValue int64 - finishRecharge mclock.AbsTime +// cmNodeFields are ClientNode fields used by the client manager +// Note: these fields are locked by the client manager's mutex +type cmNodeFields struct { + corrBufValue int64 // buffer value adjusted with the extra recharge amount + rcLastIntValue int64 // past recharge integrator value when corrBufValue was last updated + rcFullIntValue int64 // future recharge integrator value when corrBufValue will reach maximum + queueIndex int // position in the recharge queue (-1 if not queued) } -func (node *cmNode) update(time mclock.AbsTime) { - dt := int64(time - node.lastUpdate) - node.rcValue += node.rcDelta * dt / rcConst - node.lastUpdate = time - if node.recharging && time >= node.finishRecharge { - node.recharging = false - node.rcDelta = 0 - node.rcValue = 0 - } -} +// FixedPointMultiplier is applied to the recharge integrator and the recharge curve. +// +// Note: fixed point arithmetic is required for the integrator because it is a +// constantly increasing value that can wrap around int64 limits (which behavior is +// also supported by the priority queue). A floating point value would gradually lose +// precision in this application. +// The recharge curve and all recharge values are encoded as fixed point because +// sumRecharge is frequently updated by adding or subtracting individual recharge +// values and perfect precision is required. +const FixedPointMultiplier = 1000000 -func (node *cmNode) set(serving bool, simReqCnt, sumWeight uint64) { - if node.serving && !serving { - node.recharging = true - sumWeight += node.rcWeight - } - node.serving = serving - if node.recharging && serving { - node.recharging = false - sumWeight -= node.rcWeight - } - - node.rcDelta = 0 - if serving { - node.rcDelta = int64(rcConst / simReqCnt) - } - if node.recharging { - node.rcDelta = -int64(node.node.cm.rcRecharge * node.rcWeight / sumWeight) - node.finishRecharge = node.lastUpdate + mclock.AbsTime(node.rcValue*rcConst/(-node.rcDelta)) - } -} +var ( + capFactorDropTC = 1 / float64(time.Second*10) // time constant for dropping the capacity factor + capFactorRaiseTC = 1 / float64(time.Hour) // time constant for raising the capacity factor + capFactorRaiseThreshold = 0.75 // connected / total capacity ratio threshold for raising the capacity factor +) +// ClientManager controls the capacity assigned to the clients of a server. +// Since ServerParams guarantee a safe lower estimate for processable requests +// even in case of all clients being active, ClientManager calculates a +// corrigated buffer value and usually allows a higher remaining buffer value +// to be returned with each reply. type ClientManager struct { - lock sync.Mutex - nodes map[*cmNode]struct{} - simReqCnt, sumWeight, rcSumValue uint64 - maxSimReq, maxRcSum uint64 - rcRecharge uint64 - resumeQueue chan chan bool - time mclock.AbsTime + clock mclock.Clock + lock sync.Mutex + enabledCh chan struct{} + + curve PieceWiseLinear + sumRecharge, totalRecharge, totalConnected uint64 + capLogFactor, totalCapacity float64 + capLastUpdate mclock.AbsTime + totalCapacityCh chan uint64 + + // recharge integrator is increasing in each moment with a rate of + // (totalRecharge / sumRecharge)*FixedPointMultiplier or 0 if sumRecharge==0 + rcLastUpdate mclock.AbsTime // last time the recharge integrator was updated + rcLastIntValue int64 // last updated value of the recharge integrator + // recharge queue is a priority queue with currently recharging client nodes + // as elements. The priority value is rcFullIntValue which allows to quickly + // determine which client will first finish recharge. + rcQueue *prque.Prque } -func NewClientManager(rcTarget, maxSimReq, maxRcSum uint64) *ClientManager { +// NewClientManager returns a new client manager. +// Client manager enhances flow control performance by allowing client buffers +// to recharge quicker than the minimum guaranteed recharge rate if possible. +// The sum of all minimum recharge rates (sumRecharge) is updated each time +// a clients starts or finishes buffer recharging. Then an adjusted total +// recharge rate is calculated using a piecewise linear recharge curve: +// +// totalRecharge = curve(sumRecharge) +// (totalRecharge >= sumRecharge is enforced) +// +// Then the "bonus" buffer recharge is distributed between currently recharging +// clients proportionally to their minimum recharge rates. +// +// Note: total recharge is proportional to the average number of parallel running +// serving threads. A recharge value of 1000000 corresponds to one thread in average. +// The maximum number of allowed serving threads should always be considerably +// higher than the targeted average number. +// +// Note 2: although it is possible to specify a curve allowing the total target +// recharge starting from zero sumRecharge, it makes sense to add a linear ramp +// starting from zero in order to not let a single low-priority client use up +// the entire server capacity and thus ensure quick availability for others at +// any moment. +func NewClientManager(curve PieceWiseLinear, clock mclock.Clock) *ClientManager { cm := &ClientManager{ - nodes: make(map[*cmNode]struct{}), - resumeQueue: make(chan chan bool), - rcRecharge: rcConst * rcConst / (100*rcConst/rcTarget - rcConst), - maxSimReq: maxSimReq, - maxRcSum: maxRcSum, + clock: clock, + rcQueue: prque.New(func(a interface{}, i int) { a.(*ClientNode).queueIndex = i }), + capLastUpdate: clock.Now(), + } + if curve != nil { + cm.SetRechargeCurve(curve) } - go cm.queueProc() return cm } -func (self *ClientManager) Stop() { - self.lock.Lock() - defer self.lock.Unlock() +// SetRechargeCurve updates the recharge curve +func (cm *ClientManager) SetRechargeCurve(curve PieceWiseLinear) { + cm.lock.Lock() + defer cm.lock.Unlock() - // signal any waiting accept routines to return false - self.nodes = make(map[*cmNode]struct{}) - close(self.resumeQueue) -} - -func (self *ClientManager) addNode(cnode *ClientNode) *cmNode { - time := mclock.Now() - node := &cmNode{ - node: cnode, - lastUpdate: time, - finishRecharge: time, - rcWeight: 1, + now := cm.clock.Now() + cm.updateRecharge(now) + cm.updateCapFactor(now, false) + cm.curve = curve + if len(curve) > 0 { + cm.totalRecharge = curve[len(curve)-1].Y + } else { + cm.totalRecharge = 0 } - self.lock.Lock() - defer self.lock.Unlock() - - self.nodes[node] = struct{}{} - self.update(mclock.Now()) - return node + cm.refreshCapacity() } -func (self *ClientManager) removeNode(node *cmNode) { - self.lock.Lock() - defer self.lock.Unlock() +// connect should be called when a client is connected, before passing it to any +// other ClientManager function +func (cm *ClientManager) connect(node *ClientNode) { + cm.lock.Lock() + defer cm.lock.Unlock() - time := mclock.Now() - self.stop(node, time) - delete(self.nodes, node) - self.update(time) + now := cm.clock.Now() + cm.updateRecharge(now) + node.corrBufValue = int64(node.params.BufLimit) + node.rcLastIntValue = cm.rcLastIntValue + node.queueIndex = -1 + cm.updateCapFactor(now, true) + cm.totalConnected += node.params.MinRecharge } -// recalc sumWeight -func (self *ClientManager) updateNodes(time mclock.AbsTime) (rce bool) { - var sumWeight, rcSum uint64 - for node := range self.nodes { - rc := node.recharging - node.update(time) - if rc && !node.recharging { - rce = true - } - if node.recharging { - sumWeight += node.rcWeight - } - rcSum += uint64(node.rcValue) +// disconnect should be called when a client is disconnected +func (cm *ClientManager) disconnect(node *ClientNode) { + cm.lock.Lock() + defer cm.lock.Unlock() + + now := cm.clock.Now() + cm.updateRecharge(cm.clock.Now()) + cm.updateCapFactor(now, true) + cm.totalConnected -= node.params.MinRecharge +} + +// accepted is called when a request with given maximum cost is accepted. +// It returns a priority indicator for the request which is used to determine placement +// in the serving queue. Older requests have higher priority by default. If the client +// is almost out of buffer, request priority is reduced. +func (cm *ClientManager) accepted(node *ClientNode, maxCost uint64, now mclock.AbsTime) (priority int64) { + cm.lock.Lock() + defer cm.lock.Unlock() + + cm.updateNodeRc(node, -int64(maxCost), &node.params, now) + rcTime := (node.params.BufLimit - uint64(node.corrBufValue)) * FixedPointMultiplier / node.params.MinRecharge + return -int64(now) - int64(rcTime) +} + +// processed updates the client buffer according to actual request cost after +// serving has been finished. +// +// Note: processed should always be called for all accepted requests +func (cm *ClientManager) processed(node *ClientNode, maxCost, realCost uint64, now mclock.AbsTime) { + cm.lock.Lock() + defer cm.lock.Unlock() + + if realCost > maxCost { + realCost = maxCost + } + cm.updateNodeRc(node, int64(maxCost-realCost), &node.params, now) + if uint64(node.corrBufValue) > node.bufValue { + if node.log != nil { + node.log.add(now, fmt.Sprintf("corrected bv=%d oldBv=%d", node.corrBufValue, node.bufValue)) + } + node.bufValue = uint64(node.corrBufValue) } - self.sumWeight = sumWeight - self.rcSumValue = rcSum - return } -func (self *ClientManager) update(time mclock.AbsTime) { - for { - firstTime := time - for node := range self.nodes { - if node.recharging && node.finishRecharge < firstTime { - firstTime = node.finishRecharge - } +// updateParams updates the flow control parameters of a client node +func (cm *ClientManager) updateParams(node *ClientNode, params ServerParams, now mclock.AbsTime) { + cm.lock.Lock() + defer cm.lock.Unlock() + + cm.updateRecharge(now) + cm.updateCapFactor(now, true) + cm.totalConnected += params.MinRecharge - node.params.MinRecharge + cm.updateNodeRc(node, 0, ¶ms, now) +} + +// updateRecharge updates the recharge integrator and checks the recharge queue +// for nodes with recently filled buffers +func (cm *ClientManager) updateRecharge(now mclock.AbsTime) { + lastUpdate := cm.rcLastUpdate + cm.rcLastUpdate = now + // updating is done in multiple steps if node buffers are filled and sumRecharge + // is decreased before the given target time + for cm.sumRecharge > 0 { + bonusRatio := cm.curve.ValueAt(cm.sumRecharge) / float64(cm.sumRecharge) + if bonusRatio < 1 { + bonusRatio = 1 } - if self.updateNodes(firstTime) { - for node := range self.nodes { - if node.recharging { - node.set(node.serving, self.simReqCnt, self.sumWeight) - } - } - } else { - self.time = time + dt := now - lastUpdate + // fetch the client that finishes first + rcqNode := cm.rcQueue.PopItem().(*ClientNode) // if sumRecharge > 0 then the queue cannot be empty + // check whether it has already finished + dtNext := mclock.AbsTime(float64(rcqNode.rcFullIntValue-cm.rcLastIntValue) / bonusRatio) + if dt < dtNext { + // not finished yet, put it back, update integrator according + // to current bonusRatio and return + cm.rcQueue.Push(rcqNode, -rcqNode.rcFullIntValue) + cm.rcLastIntValue += int64(bonusRatio * float64(dt)) return } + lastUpdate += dtNext + // finished recharging, update corrBufValue and sumRecharge if necessary and do next step + if rcqNode.corrBufValue < int64(rcqNode.params.BufLimit) { + rcqNode.corrBufValue = int64(rcqNode.params.BufLimit) + cm.updateCapFactor(lastUpdate, true) + cm.sumRecharge -= rcqNode.params.MinRecharge + } + cm.rcLastIntValue = rcqNode.rcFullIntValue } } -func (self *ClientManager) canStartReq() bool { - return self.simReqCnt < self.maxSimReq && self.rcSumValue < self.maxRcSum +// updateNodeRc updates a node's corrBufValue and adds an external correction value. +// It also adds or removes the rcQueue entry and updates ServerParams and sumRecharge if necessary. +func (cm *ClientManager) updateNodeRc(node *ClientNode, bvc int64, params *ServerParams, now mclock.AbsTime) { + cm.updateRecharge(now) + wasFull := true + if node.corrBufValue != int64(node.params.BufLimit) { + wasFull = false + node.corrBufValue += (cm.rcLastIntValue - node.rcLastIntValue) * int64(node.params.MinRecharge) / FixedPointMultiplier + if node.corrBufValue > int64(node.params.BufLimit) { + node.corrBufValue = int64(node.params.BufLimit) + } + node.rcLastIntValue = cm.rcLastIntValue + } + node.corrBufValue += bvc + if node.corrBufValue < 0 { + node.corrBufValue = 0 + } + diff := int64(params.BufLimit - node.params.BufLimit) + if diff > 0 { + node.corrBufValue += diff + } + isFull := false + if node.corrBufValue >= int64(params.BufLimit) { + node.corrBufValue = int64(params.BufLimit) + isFull = true + } + sumRecharge := cm.sumRecharge + if !wasFull { + sumRecharge -= node.params.MinRecharge + } + if params != &node.params { + node.params = *params + } + if !isFull { + sumRecharge += node.params.MinRecharge + if node.queueIndex != -1 { + cm.rcQueue.Remove(node.queueIndex) + } + node.rcLastIntValue = cm.rcLastIntValue + node.rcFullIntValue = cm.rcLastIntValue + (int64(node.params.BufLimit)-node.corrBufValue)*FixedPointMultiplier/int64(node.params.MinRecharge) + cm.rcQueue.Push(node, -node.rcFullIntValue) + } + if sumRecharge != cm.sumRecharge { + cm.updateCapFactor(now, true) + cm.sumRecharge = sumRecharge + } + } -func (self *ClientManager) queueProc() { - for rc := range self.resumeQueue { - for { - time.Sleep(time.Millisecond * 10) - self.lock.Lock() - self.update(mclock.Now()) - cs := self.canStartReq() - self.lock.Unlock() - if cs { - break +// updateCapFactor updates the total capacity factor. The capacity factor allows +// the total capacity of the system to go over the allowed total recharge value +// if the sum of momentarily recharging clients only exceeds the total recharge +// allowance in a very small fraction of time. +// The capacity factor is dropped quickly (with a small time constant) if sumRecharge +// exceeds totalRecharge. It is raised slowly (with a large time constant) if most +// of the total capacity is used by connected clients (totalConnected is larger than +// totalCapacity*capFactorRaiseThreshold) and sumRecharge stays under +// totalRecharge*totalConnected/totalCapacity. +func (cm *ClientManager) updateCapFactor(now mclock.AbsTime, refresh bool) { + if cm.totalRecharge == 0 { + return + } + dt := now - cm.capLastUpdate + cm.capLastUpdate = now + + var d float64 + if cm.sumRecharge > cm.totalRecharge { + d = (1 - float64(cm.sumRecharge)/float64(cm.totalRecharge)) * capFactorDropTC + } else { + totalConnected := float64(cm.totalConnected) + var connRatio float64 + if totalConnected < cm.totalCapacity { + connRatio = totalConnected / cm.totalCapacity + } else { + connRatio = 1 + } + if connRatio > capFactorRaiseThreshold { + sumRecharge := float64(cm.sumRecharge) + limit := float64(cm.totalRecharge) * connRatio + if sumRecharge < limit { + d = (1 - sumRecharge/limit) * (connRatio - capFactorRaiseThreshold) * (1 / (1 - capFactorRaiseThreshold)) * capFactorRaiseTC } } - close(rc) } -} - -func (self *ClientManager) accept(node *cmNode, time mclock.AbsTime) bool { - self.lock.Lock() - defer self.lock.Unlock() - - self.update(time) - if !self.canStartReq() { - resume := make(chan bool) - self.lock.Unlock() - self.resumeQueue <- resume - <-resume - self.lock.Lock() - if _, ok := self.nodes[node]; !ok { - return false // reject if node has been removed or manager has been stopped + if d != 0 { + cm.capLogFactor += d * float64(dt) + if cm.capLogFactor < 0 { + cm.capLogFactor = 0 + } + if refresh { + cm.refreshCapacity() } } - self.simReqCnt++ - node.set(true, self.simReqCnt, self.sumWeight) - node.startValue = node.rcValue - self.update(self.time) - return true } -func (self *ClientManager) stop(node *cmNode, time mclock.AbsTime) { - if node.serving { - self.update(time) - self.simReqCnt-- - node.set(false, self.simReqCnt, self.sumWeight) - self.update(time) +// refreshCapacity recalculates the total capacity value and sends an update to the subscription +// channel if the relative change of the value since the last update is more than 0.1 percent +func (cm *ClientManager) refreshCapacity() { + totalCapacity := float64(cm.totalRecharge) * math.Exp(cm.capLogFactor) + if totalCapacity >= cm.totalCapacity*0.999 && totalCapacity <= cm.totalCapacity*1.001 { + return + } + cm.totalCapacity = totalCapacity + if cm.totalCapacityCh != nil { + select { + case cm.totalCapacityCh <- uint64(cm.totalCapacity): + default: + } } } -func (self *ClientManager) processed(node *cmNode, time mclock.AbsTime) (rcValue, rcCost uint64) { - self.lock.Lock() - defer self.lock.Unlock() +// SubscribeTotalCapacity returns all future updates to the total capacity value +// through a channel and also returns the current value +func (cm *ClientManager) SubscribeTotalCapacity(ch chan uint64) uint64 { + cm.lock.Lock() + defer cm.lock.Unlock() - self.stop(node, time) - return uint64(node.rcValue), uint64(node.rcValue - node.startValue) + cm.totalCapacityCh = ch + return uint64(cm.totalCapacity) +} + +// PieceWiseLinear is used to describe recharge curves +type PieceWiseLinear []struct{ X, Y uint64 } + +// ValueAt returns the curve's value at a given point +func (pwl PieceWiseLinear) ValueAt(x uint64) float64 { + l := 0 + h := len(pwl) + if h == 0 { + return 0 + } + for h != l { + m := (l + h) / 2 + if x > pwl[m].X { + l = m + 1 + } else { + h = m + } + } + if l == 0 { + return float64(pwl[0].Y) + } + l-- + if h == len(pwl) { + return float64(pwl[l].Y) + } + dx := pwl[h].X - pwl[l].X + if dx < 1 { + return float64(pwl[l].Y) + } + return float64(pwl[l].Y) + float64(pwl[h].Y-pwl[l].Y)*float64(x-pwl[l].X)/float64(dx) +} + +// Valid returns true if the X coordinates of the curve points are non-strictly monotonic +func (pwl PieceWiseLinear) Valid() bool { + var lastX uint64 + for _, i := range pwl { + if i.X < lastX { + return false + } + lastX = i.X + } + return true } diff --git a/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager_test.go b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager_test.go new file mode 100644 index 00000000..4e7746d4 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/flowcontrol/manager_test.go @@ -0,0 +1,123 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flowcontrol + +import ( + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +type testNode struct { + node *ClientNode + bufLimit, capacity uint64 + waitUntil mclock.AbsTime + index, totalCost uint64 +} + +const ( + testMaxCost = 1000000 + testLength = 100000 +) + +// testConstantTotalCapacity simulates multiple request sender nodes and verifies +// whether the total amount of served requests matches the expected value based on +// the total capacity and the duration of the test. +// Some nodes are sending requests occasionally so that their buffer should regularly +// reach the maximum while other nodes (the "max capacity nodes") are sending at the +// maximum permitted rate. The max capacity nodes are changed multiple times during +// a single test. +func TestConstantTotalCapacity(t *testing.T) { + testConstantTotalCapacity(t, 10, 1, 0) + testConstantTotalCapacity(t, 10, 1, 1) + testConstantTotalCapacity(t, 30, 1, 0) + testConstantTotalCapacity(t, 30, 2, 3) + testConstantTotalCapacity(t, 100, 1, 0) + testConstantTotalCapacity(t, 100, 3, 5) + testConstantTotalCapacity(t, 100, 5, 10) +} + +func testConstantTotalCapacity(t *testing.T, nodeCount, maxCapacityNodes, randomSend int) { + clock := &mclock.Simulated{} + nodes := make([]*testNode, nodeCount) + var totalCapacity uint64 + for i := range nodes { + nodes[i] = &testNode{capacity: uint64(50000 + rand.Intn(100000))} + totalCapacity += nodes[i].capacity + } + m := NewClientManager(PieceWiseLinear{{0, totalCapacity}}, clock) + for _, n := range nodes { + n.bufLimit = n.capacity * 6000 //uint64(2000+rand.Intn(10000)) + n.node = NewClientNode(m, ServerParams{BufLimit: n.bufLimit, MinRecharge: n.capacity}) + } + maxNodes := make([]int, maxCapacityNodes) + for i := range maxNodes { + // we don't care if some indexes are selected multiple times + // in that case we have fewer max nodes + maxNodes[i] = rand.Intn(nodeCount) + } + + for i := 0; i < testLength; i++ { + now := clock.Now() + for _, idx := range maxNodes { + for nodes[idx].send(t, now) { + } + } + if rand.Intn(testLength) < maxCapacityNodes*3 { + maxNodes[rand.Intn(maxCapacityNodes)] = rand.Intn(nodeCount) + } + + sendCount := randomSend + for sendCount > 0 { + if nodes[rand.Intn(nodeCount)].send(t, now) { + sendCount-- + } + } + + clock.Run(time.Millisecond) + } + + var totalCost uint64 + for _, n := range nodes { + totalCost += n.totalCost + } + ratio := float64(totalCost) / float64(totalCapacity) / testLength + if ratio < 0.98 || ratio > 1.02 { + t.Errorf("totalCost/totalCapacity/testLength ratio incorrect (expected: 1, got: %f)", ratio) + } + +} + +func (n *testNode) send(t *testing.T, now mclock.AbsTime) bool { + if now < n.waitUntil { + return false + } + n.index++ + if ok, _, _ := n.node.AcceptRequest(0, n.index, testMaxCost); !ok { + t.Fatalf("Rejected request after expected waiting time has passed") + } + rcost := uint64(rand.Int63n(testMaxCost)) + bv := n.node.RequestProcessed(0, n.index, testMaxCost, rcost) + if bv < testMaxCost { + n.waitUntil = now + mclock.AbsTime((testMaxCost-bv)*1001000/n.capacity) + } + //n.waitUntil = now + mclock.AbsTime(float64(testMaxCost)*1001000/float64(n.capacity)*(1-float64(bv)/float64(n.bufLimit))) + n.totalCost += rcost + return true +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/freeclient.go b/vendor/github.com/ethereum/go-ethereum/les/freeclient.go index 5ee607be..d859337c 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/freeclient.go +++ b/vendor/github.com/ethereum/go-ethereum/les/freeclient.go @@ -14,12 +14,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( "io" "math" + "net" "sync" "time" @@ -44,12 +44,14 @@ import ( // value for the client. Currently the LES protocol manager uses IP addresses // (without port address) to identify clients. type freeClientPool struct { - db ethdb.Database - lock sync.Mutex - clock mclock.Clock - closed bool + db ethdb.Database + lock sync.Mutex + clock mclock.Clock + closed bool + removePeer func(string) connectedLimit, totalLimit int + freeClientCap uint64 addressMap map[string]*freeClientPoolEntry connPool, disconnPool *prque.Prque @@ -64,15 +66,16 @@ const ( ) // newFreeClientPool creates a new free client pool -func newFreeClientPool(db ethdb.Database, connectedLimit, totalLimit int, clock mclock.Clock) *freeClientPool { +func newFreeClientPool(db ethdb.Database, freeClientCap uint64, totalLimit int, clock mclock.Clock, removePeer func(string)) *freeClientPool { pool := &freeClientPool{ - db: db, - clock: clock, - addressMap: make(map[string]*freeClientPoolEntry), - connPool: prque.New(poolSetIndex), - disconnPool: prque.New(poolSetIndex), - connectedLimit: connectedLimit, - totalLimit: totalLimit, + db: db, + clock: clock, + addressMap: make(map[string]*freeClientPoolEntry), + connPool: prque.New(poolSetIndex), + disconnPool: prque.New(poolSetIndex), + freeClientCap: freeClientCap, + totalLimit: totalLimit, + removePeer: removePeer, } pool.loadFromDb() return pool @@ -85,22 +88,34 @@ func (f *freeClientPool) stop() { f.lock.Unlock() } +// registerPeer implements clientPool +func (f *freeClientPool) registerPeer(p *peer) { + if addr, ok := p.RemoteAddr().(*net.TCPAddr); ok { + if !f.connect(addr.IP.String(), p.id) { + f.removePeer(p.id) + } + } +} + // connect should be called after a successful handshake. If the connection was // rejected, there is no need to call disconnect. -// -// Note: the disconnectFn callback should not block. -func (f *freeClientPool) connect(address string, disconnectFn func()) bool { +func (f *freeClientPool) connect(address, id string) bool { f.lock.Lock() defer f.lock.Unlock() if f.closed { return false } + + if f.connectedLimit == 0 { + log.Debug("Client rejected", "address", address) + return false + } e := f.addressMap[address] now := f.clock.Now() var recentUsage int64 if e == nil { - e = &freeClientPoolEntry{address: address, index: -1} + e = &freeClientPoolEntry{address: address, index: -1, id: id} f.addressMap[address] = e } else { if e.connected { @@ -115,12 +130,7 @@ func (f *freeClientPool) connect(address string, disconnectFn func()) bool { i := f.connPool.PopItem().(*freeClientPoolEntry) if e.linUsage+int64(connectedBias)-i.linUsage < 0 { // kick it out and accept the new client - f.connPool.Remove(i.index) - f.calcLogUsage(i, now) - i.connected = false - f.disconnPool.Push(i, -i.logUsage) - log.Debug("Client kicked out", "address", i.address) - i.disconnectFn() + f.dropClient(i, now) } else { // keep the old client and reject the new one f.connPool.Push(i, i.linUsage) @@ -130,7 +140,7 @@ func (f *freeClientPool) connect(address string, disconnectFn func()) bool { } f.disconnPool.Remove(e.index) e.connected = true - e.disconnectFn = disconnectFn + e.id = id f.connPool.Push(e, e.linUsage) if f.connPool.Size()+f.disconnPool.Size() > f.totalLimit { f.disconnPool.Pop() @@ -139,6 +149,13 @@ func (f *freeClientPool) connect(address string, disconnectFn func()) bool { return true } +// unregisterPeer implements clientPool +func (f *freeClientPool) unregisterPeer(p *peer) { + if addr, ok := p.RemoteAddr().(*net.TCPAddr); ok { + f.disconnect(addr.IP.String()) + } +} + // disconnect should be called when a connection is terminated. If the disconnection // was initiated by the pool itself using disconnectFn then calling disconnect is // not necessary but permitted. @@ -163,6 +180,34 @@ func (f *freeClientPool) disconnect(address string) { log.Debug("Client disconnected", "address", address) } +// setConnLimit sets the maximum number of free client slots and also drops +// some peers if necessary +func (f *freeClientPool) setLimits(count int, totalCap uint64) { + f.lock.Lock() + defer f.lock.Unlock() + + f.connectedLimit = int(totalCap / f.freeClientCap) + if count < f.connectedLimit { + f.connectedLimit = count + } + now := mclock.Now() + for f.connPool.Size() > f.connectedLimit { + i := f.connPool.PopItem().(*freeClientPoolEntry) + f.dropClient(i, now) + } +} + +// dropClient disconnects a client and also moves it from the connected to the +// disconnected pool +func (f *freeClientPool) dropClient(i *freeClientPoolEntry, now mclock.AbsTime) { + f.connPool.Remove(i.index) + f.calcLogUsage(i, now) + i.connected = false + f.disconnPool.Push(i, -i.logUsage) + log.Debug("Client kicked out", "address", i.address) + f.removePeer(i.id) +} + // logOffset calculates the time-dependent offset for the logarithmic // representation of recent usage func (f *freeClientPool) logOffset(now mclock.AbsTime) int64 { @@ -245,7 +290,7 @@ func (f *freeClientPool) saveToDb() { // even though they are close to each other at any time they may wrap around int64 // limits over time. Comparison should be performed accordingly. type freeClientPoolEntry struct { - address string + address, id string connected bool disconnectFn func() linUsage, logUsage int64 diff --git a/vendor/github.com/ethereum/go-ethereum/les/freeclient_test.go b/vendor/github.com/ethereum/go-ethereum/les/freeclient_test.go index e95abc7a..19182226 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/freeclient_test.go +++ b/vendor/github.com/ethereum/go-ethereum/les/freeclient_test.go @@ -14,18 +14,17 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( "fmt" "math/rand" + "strconv" "testing" "time" "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/core/rawdb" ) func TestFreeClientPoolL10C100(t *testing.T) { @@ -44,32 +43,38 @@ const testFreeClientPoolTicks = 500000 func testFreeClientPool(t *testing.T, connLimit, clientCount int) { var ( - clock mclock.Simulated - db = ethdb.NewMemDatabase() - pool = newFreeClientPool(db, connLimit, 10000, &clock) - connected = make([]bool, clientCount) - connTicks = make([]int, clientCount) - disconnCh = make(chan int, clientCount) - ) - peerId := func(i int) string { - return fmt.Sprintf("test peer #%d", i) - } - disconnFn := func(i int) func() { - return func() { + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + connected = make([]bool, clientCount) + connTicks = make([]int, clientCount) + disconnCh = make(chan int, clientCount) + peerAddress = func(i int) string { + return fmt.Sprintf("addr #%d", i) + } + peerId = func(i int) string { + return fmt.Sprintf("id #%d", i) + } + disconnFn = func(id string) { + i, err := strconv.Atoi(id[4:]) + if err != nil { + panic(err) + } disconnCh <- i } - } + pool = newFreeClientPool(db, 1, 10000, &clock, disconnFn) + ) + pool.setLimits(connLimit, uint64(connLimit)) // pool should accept new peers up to its connected limit for i := 0; i < connLimit; i++ { - if pool.connect(peerId(i), disconnFn(i)) { + if pool.connect(peerAddress(i), peerId(i)) { connected[i] = true } else { t.Fatalf("Test peer #%d rejected", i) } } // since all accepted peers are new and should not be kicked out, the next one should be rejected - if pool.connect(peerId(connLimit), disconnFn(connLimit)) { + if pool.connect(peerAddress(connLimit), peerId(connLimit)) { connected[connLimit] = true t.Fatalf("Peer accepted over connected limit") } @@ -80,11 +85,11 @@ func testFreeClientPool(t *testing.T, connLimit, clientCount int) { i := rand.Intn(clientCount) if connected[i] { - pool.disconnect(peerId(i)) + pool.disconnect(peerAddress(i)) connected[i] = false connTicks[i] += tickCounter } else { - if pool.connect(peerId(i), disconnFn(i)) { + if pool.connect(peerAddress(i), peerId(i)) { connected[i] = true connTicks[i] -= tickCounter } @@ -93,7 +98,7 @@ func testFreeClientPool(t *testing.T, connLimit, clientCount int) { for { select { case i := <-disconnCh: - pool.disconnect(peerId(i)) + pool.disconnect(peerAddress(i)) if connected[i] { connTicks[i] += tickCounter connected[i] = false @@ -119,20 +124,21 @@ func testFreeClientPool(t *testing.T, connLimit, clientCount int) { } // a previously unknown peer should be accepted now - if !pool.connect("newPeer", func() {}) { + if !pool.connect("newAddr", "newId") { t.Fatalf("Previously unknown peer rejected") } // close and restart pool pool.stop() - pool = newFreeClientPool(db, connLimit, 10000, &clock) + pool = newFreeClientPool(db, 1, 10000, &clock, disconnFn) + pool.setLimits(connLimit, uint64(connLimit)) // try connecting all known peers (connLimit should be filled up) for i := 0; i < clientCount; i++ { - pool.connect(peerId(i), func() {}) + pool.connect(peerAddress(i), peerId(i)) } // expect pool to remember known nodes and kick out one of them to accept a new one - if !pool.connect("newPeer2", func() {}) { + if !pool.connect("newAddr2", "newId2") { t.Errorf("Previously unknown peer rejected after restarting pool") } pool.stop() diff --git a/vendor/github.com/ethereum/go-ethereum/les/handler.go b/vendor/github.com/ethereum/go-ethereum/les/handler.go index 19ccbcd2..7c290b71 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/handler.go +++ b/vendor/github.com/ethereum/go-ethereum/les/handler.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -22,17 +21,16 @@ import ( "encoding/json" "fmt" "math/big" - "net" "sync" "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -74,7 +72,7 @@ type BlockChain interface { GetHeaderByHash(hash common.Hash) *types.Header CurrentHeader() *types.Header GetTd(hash common.Hash, number uint64) *big.Int - State() (*state.StateDB, error) + StateCache() state.Database InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) Rollback(chain []common.Hash) GetHeaderByNumber(number uint64) *types.Header @@ -89,21 +87,21 @@ type txPool interface { } type ProtocolManager struct { - lightSync bool - txpool txPool - txrelay *LesTxRelay - networkId uint64 - chainConfig *params.ChainConfig - iConfig *light.IndexerConfig - blockchain BlockChain - chainDb ethdb.Database - odr *LesOdr - server *LesServer - serverPool *serverPool - clientPool *freeClientPool - lesTopic discv5.Topic - reqDist *requestDistributor - retriever *retrieveManager + lightSync bool + txpool txPool + txrelay *LesTxRelay + networkId uint64 + chainConfig *params.ChainConfig + iConfig *light.IndexerConfig + blockchain BlockChain + chainDb ethdb.Database + odr *LesOdr + server *LesServer + serverPool *serverPool + lesTopic discv5.Topic + reqDist *requestDistributor + retriever *retrieveManager + servingQueue *servingQueue downloader *downloader.Downloader fetcher *lightFetcher @@ -119,12 +117,29 @@ type ProtocolManager struct { // wait group is used for graceful shutdowns during downloading // and processing - wg *sync.WaitGroup + wg *sync.WaitGroup + ulc *ulc } // NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable // with the ethereum network. -func NewProtocolManager(chainConfig *params.ChainConfig, indexerConfig *light.IndexerConfig, lightSync bool, networkId uint64, mux *event.TypeMux, engine consensus.Engine, peers *peerSet, blockchain BlockChain, txpool txPool, chainDb ethdb.Database, odr *LesOdr, txrelay *LesTxRelay, serverPool *serverPool, quitSync chan struct{}, wg *sync.WaitGroup) (*ProtocolManager, error) { +func NewProtocolManager( + chainConfig *params.ChainConfig, + indexerConfig *light.IndexerConfig, + lightSync bool, + networkId uint64, + mux *event.TypeMux, + engine consensus.Engine, + peers *peerSet, + blockchain BlockChain, + txpool txPool, + chainDb ethdb.Database, + odr *LesOdr, + txrelay *LesTxRelay, + serverPool *serverPool, + quitSync chan struct{}, + wg *sync.WaitGroup, + ulcConfig *eth.ULCConfig) (*ProtocolManager, error) { // Create the protocol manager with the base fields manager := &ProtocolManager{ lightSync: lightSync, @@ -147,6 +162,12 @@ func NewProtocolManager(chainConfig *params.ChainConfig, indexerConfig *light.In if odr != nil { manager.retriever = odr.retriever manager.reqDist = odr.retriever.dist + } else { + manager.servingQueue = newServingQueue(int64(time.Millisecond * 10)) + } + + if ulcConfig != nil { + manager.ulc = newULC(ulcConfig) } removePeer := manager.removePeer @@ -159,7 +180,6 @@ func NewProtocolManager(chainConfig *params.ChainConfig, indexerConfig *light.In manager.peers.notify((*downloaderPeerNotify)(manager)) manager.fetcher = newLightFetcher(manager) } - return manager, nil } @@ -170,11 +190,9 @@ func (pm *ProtocolManager) removePeer(id string) { func (pm *ProtocolManager) Start(maxPeers int) { pm.maxPeers = maxPeers - if pm.lightSync { go pm.syncer() } else { - pm.clientPool = newFreeClientPool(pm.chainDb, maxPeers, 10000, mclock.System{}) go func() { for range pm.newPeerCh { } @@ -192,8 +210,9 @@ func (pm *ProtocolManager) Stop() { pm.noMorePeers <- struct{}{} close(pm.quitSync) // quits syncer, fetcher - if pm.clientPool != nil { - pm.clientPool.stop() + + if pm.servingQueue != nil { + pm.servingQueue.stop() } // Disconnect existing sessions. @@ -234,7 +253,11 @@ func (pm *ProtocolManager) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWrit } func (pm *ProtocolManager) newPeer(pv int, nv uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - return newPeer(pv, nv, p, newMeteredMsgWriter(rw)) + var isTrusted bool + if pm.isULCEnabled() { + isTrusted = pm.ulc.isTrusted(p.ID()) + } + return newPeer(pv, nv, isTrusted, p, newMeteredMsgWriter(rw)) } // handle is the callback invoked to manage the life cycle of a les peer. When @@ -260,33 +283,23 @@ func (pm *ProtocolManager) handle(p *peer) error { p.Log().Debug("Light Ethereum handshake failed", "err", err) return err } - - if !pm.lightSync && !p.Peer.Info().Network.Trusted { - addr, ok := p.RemoteAddr().(*net.TCPAddr) - // test peer address is not a tcp address, don't use client pool if can not typecast - if ok { - id := addr.IP.String() - if !pm.clientPool.connect(id, func() { go pm.removePeer(p.id) }) { - return p2p.DiscTooManyPeers - } - defer pm.clientPool.disconnect(id) - } + if p.fcClient != nil { + defer p.fcClient.Disconnect() } if rw, ok := p.rw.(*meteredMsgReadWriter); ok { rw.Init(p.version) } + // Register the peer locally if err := pm.peers.Register(p); err != nil { p.Log().Error("Light Ethereum peer registration failed", "err", err) return err } defer func() { - if pm.server != nil && pm.server.fcManager != nil && p.fcClient != nil { - p.fcClient.Remove(pm.server.fcManager) - } pm.removePeer(p.id) }() + // Register the peer in the downloader. If the downloader considers it banned, we disconnect if pm.lightSync { p.lock.Lock() @@ -301,34 +314,26 @@ func (pm *ProtocolManager) handle(p *peer) error { } } - stop := make(chan struct{}) - defer close(stop) - go func() { - // new block announce loop - for { - select { - case announce := <-p.announceChn: - p.SendAnnounce(announce) - case <-stop: - return - } - } - }() - // main loop. handle incoming messages. for { if err := pm.handleMsg(p); err != nil { p.Log().Debug("Light Ethereum message handling failed", "err", err) + if p.fcServer != nil { + p.fcServer.DumpLogs() + } return err } } } -var reqList = []uint64{GetBlockHeadersMsg, GetBlockBodiesMsg, GetCodeMsg, GetReceiptsMsg, GetProofsV1Msg, SendTxMsg, SendTxV2Msg, GetTxStatusMsg, GetHeaderProofsMsg, GetProofsV2Msg, GetHelperTrieProofsMsg} - // handleMsg is invoked whenever an inbound message is received from a remote // peer. The remote connection is torn down upon returning any error. func (pm *ProtocolManager) handleMsg(p *peer) error { + select { + case err := <-p.errCh: + return err + default: + } // Read the next message from the remote peer, and ensure it's fully consumed msg, err := p.rw.ReadMsg() if err != nil { @@ -336,22 +341,31 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) - costs := p.fcCosts[msg.Code] - reject := func(reqCnt, maxCnt uint64) bool { + p.responseCount++ + responseCount := p.responseCount + var ( + maxCost uint64 + task *servingTask + ) + + accept := func(reqID, reqCnt, maxCnt uint64) bool { + if reqCnt == 0 { + return false + } if p.fcClient == nil || reqCnt > maxCnt { - return true + return false } - bufValue, _ := p.fcClient.AcceptRequest() - cost := costs.baseCost + reqCnt*costs.reqCost - if cost > pm.server.defParams.BufLimit { - cost = pm.server.defParams.BufLimit + maxCost = p.fcCosts.getCost(msg.Code, reqCnt) + + if accepted, bufShort, servingPriority := p.fcClient.AcceptRequest(reqID, responseCount, maxCost); !accepted { + if bufShort > 0 { + p.Log().Error("Request came too early", "remaining", common.PrettyDuration(time.Duration(bufShort*1000000/p.fcParams.MinRecharge))) + } + return false + } else { + task = pm.servingQueue.newTask(servingPriority) } - if cost > bufValue { - recharge := time.Duration((cost - bufValue) * 1000000 / pm.server.defParams.MinRecharge) - p.Log().Error("Request came too early", "recharge", common.PrettyDuration(recharge)) - return true - } - return false + return task.start() } if msg.Size > ProtocolMaxMsgSize { @@ -361,6 +375,34 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { var deliverMsg *Msg + sendResponse := func(reqID, amount uint64, reply *reply, servingTime uint64) { + p.responseLock.Lock() + defer p.responseLock.Unlock() + + var replySize uint32 + if reply != nil { + replySize = reply.size() + } + var realCost uint64 + if pm.server.costTracker != nil { + realCost = pm.server.costTracker.realCost(servingTime, msg.Size, replySize) + pm.server.costTracker.updateStats(msg.Code, amount, servingTime, realCost) + } else { + realCost = maxCost + } + bv := p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) + if reply != nil { + p.queueSend(func() { + if err := reply.send(bv); err != nil { + select { + case p.errCh <- err: + default: + } + } + }) + } + } + // Handle the message depending on its contents switch msg.Code { case StatusMsg: @@ -371,26 +413,33 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Block header query, collect the requested headers and reply case AnnounceMsg: p.Log().Trace("Received announce message") - if p.requestAnnounceType == announceTypeNone { - return errResp(ErrUnexpectedResponse, "") - } - var req announceData if err := msg.Decode(&req); err != nil { return errResp(ErrDecode, "%v: %v", msg, err) } - if p.requestAnnounceType == announceTypeSigned { - if err := req.checkSignature(p.ID()); err != nil { - p.Log().Trace("Invalid announcement signature", "err", err) - return err - } - p.Log().Trace("Valid announcement signature") + update, size := req.Update.decode() + if p.rejectUpdate(size) { + return errResp(ErrRequestRejected, "") } + p.updateFlowControl(update) - p.Log().Trace("Announce message content", "number", req.Number, "hash", req.Hash, "td", req.Td, "reorg", req.ReorgDepth) - if pm.fetcher != nil { - pm.fetcher.announce(p, &req) + if req.Hash != (common.Hash{}) { + if p.announceType == announceTypeNone { + return errResp(ErrUnexpectedResponse, "") + } + if p.announceType == announceTypeSigned { + if err := req.checkSignature(p.ID(), update); err != nil { + p.Log().Trace("Invalid announcement signature", "err", err) + return err + } + p.Log().Trace("Valid announcement signature") + } + + p.Log().Trace("Announce message content", "number", req.Number, "hash", req.Hash, "td", req.Td, "reorg", req.ReorgDepth) + if pm.fetcher != nil { + pm.fetcher.announce(p, &req) + } } case GetBlockHeadersMsg: @@ -405,93 +454,94 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } query := req.Query - if reject(query.Amount, MaxHeaderFetch) { + if !accept(req.ReqID, query.Amount, MaxHeaderFetch) { return errResp(ErrRequestRejected, "") } + go func() { + hashMode := query.Origin.Hash != (common.Hash{}) + first := true + maxNonCanonical := uint64(100) - hashMode := query.Origin.Hash != (common.Hash{}) - first := true - maxNonCanonical := uint64(100) - - // Gather headers until the fetch or network limits is reached - var ( - bytes common.StorageSize - headers []*types.Header - unknown bool - ) - for !unknown && len(headers) < int(query.Amount) && bytes < softResponseLimit { - // Retrieve the next header satisfying the query - var origin *types.Header - if hashMode { - if first { - first = false - origin = pm.blockchain.GetHeaderByHash(query.Origin.Hash) - if origin != nil { - query.Origin.Number = origin.Number.Uint64() + // Gather headers until the fetch or network limits is reached + var ( + bytes common.StorageSize + headers []*types.Header + unknown bool + ) + for !unknown && len(headers) < int(query.Amount) && bytes < softResponseLimit { + if !first && !task.waitOrStop() { + return + } + // Retrieve the next header satisfying the query + var origin *types.Header + if hashMode { + if first { + origin = pm.blockchain.GetHeaderByHash(query.Origin.Hash) + if origin != nil { + query.Origin.Number = origin.Number.Uint64() + } + } else { + origin = pm.blockchain.GetHeader(query.Origin.Hash, query.Origin.Number) } } else { - origin = pm.blockchain.GetHeader(query.Origin.Hash, query.Origin.Number) + origin = pm.blockchain.GetHeaderByNumber(query.Origin.Number) } - } else { - origin = pm.blockchain.GetHeaderByNumber(query.Origin.Number) - } - if origin == nil { - break - } - headers = append(headers, origin) - bytes += estHeaderRlpSize + if origin == nil { + break + } + headers = append(headers, origin) + bytes += estHeaderRlpSize - // Advance to the next header of the query - switch { - case hashMode && query.Reverse: - // Hash based traversal towards the genesis block - ancestor := query.Skip + 1 - if ancestor == 0 { - unknown = true - } else { - query.Origin.Hash, query.Origin.Number = pm.blockchain.GetAncestor(query.Origin.Hash, query.Origin.Number, ancestor, &maxNonCanonical) - unknown = (query.Origin.Hash == common.Hash{}) - } - case hashMode && !query.Reverse: - // Hash based traversal towards the leaf block - var ( - current = origin.Number.Uint64() - next = current + query.Skip + 1 - ) - if next <= current { - infos, _ := json.MarshalIndent(p.Peer.Info(), "", " ") - p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", query.Skip, "next", next, "attacker", infos) - unknown = true - } else { - if header := pm.blockchain.GetHeaderByNumber(next); header != nil { - nextHash := header.Hash() - expOldHash, _ := pm.blockchain.GetAncestor(nextHash, next, query.Skip+1, &maxNonCanonical) - if expOldHash == query.Origin.Hash { - query.Origin.Hash, query.Origin.Number = nextHash, next + // Advance to the next header of the query + switch { + case hashMode && query.Reverse: + // Hash based traversal towards the genesis block + ancestor := query.Skip + 1 + if ancestor == 0 { + unknown = true + } else { + query.Origin.Hash, query.Origin.Number = pm.blockchain.GetAncestor(query.Origin.Hash, query.Origin.Number, ancestor, &maxNonCanonical) + unknown = (query.Origin.Hash == common.Hash{}) + } + case hashMode && !query.Reverse: + // Hash based traversal towards the leaf block + var ( + current = origin.Number.Uint64() + next = current + query.Skip + 1 + ) + if next <= current { + infos, _ := json.MarshalIndent(p.Peer.Info(), "", " ") + p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", query.Skip, "next", next, "attacker", infos) + unknown = true + } else { + if header := pm.blockchain.GetHeaderByNumber(next); header != nil { + nextHash := header.Hash() + expOldHash, _ := pm.blockchain.GetAncestor(nextHash, next, query.Skip+1, &maxNonCanonical) + if expOldHash == query.Origin.Hash { + query.Origin.Hash, query.Origin.Number = nextHash, next + } else { + unknown = true + } } else { unknown = true } + } + case query.Reverse: + // Number based traversal towards the genesis block + if query.Origin.Number >= query.Skip+1 { + query.Origin.Number -= query.Skip + 1 } else { unknown = true } - } - case query.Reverse: - // Number based traversal towards the genesis block - if query.Origin.Number >= query.Skip+1 { - query.Origin.Number -= query.Skip + 1 - } else { - unknown = true - } - case !query.Reverse: - // Number based traversal towards the leaf block - query.Origin.Number += query.Skip + 1 + case !query.Reverse: + // Number based traversal towards the leaf block + query.Origin.Number += query.Skip + 1 + } + first = false } - } - - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + query.Amount*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, query.Amount, rcost) - return p.SendBlockHeaders(req.ReqID, bv, headers) + sendResponse(req.ReqID, query.Amount, p.ReplyBlockHeaders(req.ReqID, headers), task.done()) + }() case BlockHeadersMsg: if pm.downloader == nil { @@ -507,7 +557,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) if pm.fetcher != nil && pm.fetcher.requestedID(resp.ReqID) { pm.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers) } else { @@ -533,24 +583,27 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { bodies []rlp.RawValue ) reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxBodyFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxBodyFetch) { return errResp(ErrRequestRejected, "") } - for _, hash := range req.Hashes { - if bytes >= softResponseLimit { - break - } - // Retrieve the requested block body, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { - if data := rawdb.ReadBodyRLP(pm.chainDb, hash, *number); len(data) != 0 { - bodies = append(bodies, data) - bytes += len(data) + go func() { + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + return + } + if bytes >= softResponseLimit { + break + } + // Retrieve the requested block body, stopping if enough was found + if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { + if data := rawdb.ReadBodyRLP(pm.chainDb, hash, *number); len(data) != 0 { + bodies = append(bodies, data) + bytes += len(data) + } } } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendBlockBodiesRLP(req.ReqID, bv, bodies) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyBlockBodiesRLP(req.ReqID, bodies), task.done()) + }() case BlockBodiesMsg: if pm.odr == nil { @@ -566,7 +619,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgBlockBodies, ReqID: resp.ReqID, @@ -589,33 +642,45 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { data [][]byte ) reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxCodeFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxCodeFetch) { return errResp(ErrRequestRejected, "") } - for _, req := range req.Reqs { - // Retrieve the requested state entry, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, err := pm.blockchain.State() - if err != nil { - continue - } - account, err := pm.getAccount(statedb, header.Root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - code, _ := statedb.Database().TrieDB().Node(common.BytesToHash(account.CodeHash)) + go func() { + for i, req := range req.Reqs { + if i != 0 && !task.waitOrStop() { + return + } + // Look up the root hash belonging to the request + number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash) + if number == nil { + p.Log().Warn("Failed to retrieve block num for code", "hash", req.BHash) + continue + } + header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number) + if header == nil { + p.Log().Warn("Failed to retrieve header for code", "block", *number, "hash", req.BHash) + continue + } + triedb := pm.blockchain.StateCache().TrieDB() - data = append(data, code) - if bytes += len(code); bytes >= softResponseLimit { - break - } + account, err := pm.getAccount(triedb, header.Root, common.BytesToHash(req.AccKey)) + if err != nil { + p.Log().Warn("Failed to retrieve account for code", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "err", err) + continue + } + code, err := triedb.Node(common.BytesToHash(account.CodeHash)) + if err != nil { + p.Log().Warn("Failed to retrieve account code", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "codehash", common.BytesToHash(account.CodeHash), "err", err) + continue + } + // Accumulate the code and abort if enough data was retrieved + data = append(data, code) + if bytes += len(code); bytes >= softResponseLimit { + break } } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendCode(req.ReqID, bv, data) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyCode(req.ReqID, data), task.done()) + }() case CodeMsg: if pm.odr == nil { @@ -631,7 +696,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgCode, ReqID: resp.ReqID, @@ -654,34 +719,37 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { receipts []rlp.RawValue ) reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxReceiptFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxReceiptFetch) { return errResp(ErrRequestRejected, "") } - for _, hash := range req.Hashes { - if bytes >= softResponseLimit { - break - } - // Retrieve the requested block's receipts, skipping if unknown to us - var results types.Receipts - if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { - results = rawdb.ReadReceipts(pm.chainDb, hash, *number) - } - if results == nil { - if header := pm.blockchain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { - continue + go func() { + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + return + } + if bytes >= softResponseLimit { + break + } + // Retrieve the requested block's receipts, skipping if unknown to us + var results types.Receipts + if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { + results = rawdb.ReadReceipts(pm.chainDb, hash, *number) + } + if results == nil { + if header := pm.blockchain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { + continue + } + } + // If known, encode and queue for response packet + if encoded, err := rlp.EncodeToBytes(results); err != nil { + log.Error("Failed to encode receipt", "err", err) + } else { + receipts = append(receipts, encoded) + bytes += len(encoded) } } - // If known, encode and queue for response packet - if encoded, err := rlp.EncodeToBytes(results); err != nil { - log.Error("Failed to encode receipt", "err", err) - } else { - receipts = append(receipts, encoded) - bytes += len(encoded) - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendReceiptsRLP(req.ReqID, bv, receipts) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyReceiptsRLP(req.ReqID, receipts), task.done()) + }() case ReceiptsMsg: if pm.odr == nil { @@ -697,7 +765,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgReceipts, ReqID: resp.ReqID, @@ -720,42 +788,63 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { proofs proofsData ) reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxProofsFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) { return errResp(ErrRequestRejected, "") } - for _, req := range req.Reqs { - // Retrieve the requested state entry, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, err := pm.blockchain.State() - if err != nil { + go func() { + for i, req := range req.Reqs { + if i != 0 && !task.waitOrStop() { + return + } + // Look up the root hash belonging to the request + number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash) + if number == nil { + p.Log().Warn("Failed to retrieve block num for proof", "hash", req.BHash) + continue + } + header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number) + if header == nil { + p.Log().Warn("Failed to retrieve header for proof", "block", *number, "hash", req.BHash) + continue + } + // Open the account or storage trie for the request + statedb := pm.blockchain.StateCache() + + var trie state.Trie + switch len(req.AccKey) { + case 0: + // No account key specified, open an account trie + trie, err = statedb.OpenTrie(header.Root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "root", header.Root, "err", err) continue } - var trie state.Trie - if len(req.AccKey) > 0 { - account, err := pm.getAccount(statedb, header.Root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - trie, _ = statedb.Database().OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) - } else { - trie, _ = statedb.Database().OpenTrie(header.Root) + default: + // Account key specified, open a storage trie + account, err := pm.getAccount(statedb.TrieDB(), header.Root, common.BytesToHash(req.AccKey)) + if err != nil { + p.Log().Warn("Failed to retrieve account for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "err", err) + continue } - if trie != nil { - var proof light.NodeList - trie.Prove(req.Key, 0, &proof) - - proofs = append(proofs, proof) - if bytes += proof.DataSize(); bytes >= softResponseLimit { - break - } + trie, err = statedb.OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "root", account.Root, "err", err) + continue } } + // Prove the user's request from the account or stroage trie + var proof light.NodeList + if err := trie.Prove(req.Key, 0, &proof); err != nil { + p.Log().Warn("Failed to prove state request", "block", header.Number, "hash", header.Hash(), "err", err) + continue + } + proofs = append(proofs, proof) + if bytes += proof.DataSize(); bytes >= softResponseLimit { + break + } } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendProofs(req.ReqID, bv, proofs) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyProofs(req.ReqID, proofs), task.done()) + }() case GetProofsV2Msg: p.Log().Trace("Received les/2 proofs request") @@ -770,54 +859,73 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Gather state data until the fetch or network limits is reached var ( lastBHash common.Hash - statedb *state.StateDB root common.Hash ) reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxProofsFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) { return errResp(ErrRequestRejected, "") } + go func() { + nodes := light.NewNodeSet() - nodes := light.NewNodeSet() + for i, req := range req.Reqs { + if i != 0 && !task.waitOrStop() { + return + } + // Look up the root hash belonging to the request + var ( + number *uint64 + header *types.Header + trie state.Trie + ) + if req.BHash != lastBHash { + root, lastBHash = common.Hash{}, req.BHash - for _, req := range req.Reqs { - // Look up the state belonging to the request - if statedb == nil || req.BHash != lastBHash { - statedb, root, lastBHash = nil, common.Hash{}, req.BHash + if number = rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number == nil { + p.Log().Warn("Failed to retrieve block num for proof", "hash", req.BHash) + continue + } + if header = rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header == nil { + p.Log().Warn("Failed to retrieve header for proof", "block", *number, "hash", req.BHash) + continue + } + root = header.Root + } + // Open the account or storage trie for the request + statedb := pm.blockchain.StateCache() - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, _ = pm.blockchain.State() - root = header.Root + switch len(req.AccKey) { + case 0: + // No account key specified, open an account trie + trie, err = statedb.OpenTrie(root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "root", root, "err", err) + continue + } + default: + // Account key specified, open a storage trie + account, err := pm.getAccount(statedb.TrieDB(), root, common.BytesToHash(req.AccKey)) + if err != nil { + p.Log().Warn("Failed to retrieve account for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "err", err) + continue + } + trie, err = statedb.OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(req.AccKey), "root", account.Root, "err", err) + continue } } - } - if statedb == nil { - continue - } - // Pull the account or storage trie of the request - var trie state.Trie - if len(req.AccKey) > 0 { - account, err := pm.getAccount(statedb, root, common.BytesToHash(req.AccKey)) - if err != nil { + // Prove the user's request from the account or stroage trie + if err := trie.Prove(req.Key, req.FromLevel, nodes); err != nil { + p.Log().Warn("Failed to prove state request", "block", header.Number, "hash", header.Hash(), "err", err) continue } - trie, _ = statedb.Database().OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) - } else { - trie, _ = statedb.Database().OpenTrie(root) + if nodes.DataSize() >= softResponseLimit { + break + } } - if trie == nil { - continue - } - // Prove the user's request from the account or stroage trie - trie.Prove(req.Key, req.FromLevel, nodes) - if nodes.DataSize() >= softResponseLimit { - break - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendProofsV2(req.ReqID, bv, nodes.NodeList()) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyProofsV2(req.ReqID, nodes.NodeList()), task.done()) + }() case ProofsV1Msg: if pm.odr == nil { @@ -833,7 +941,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgProofsV1, ReqID: resp.ReqID, @@ -854,7 +962,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgProofsV2, ReqID: resp.ReqID, @@ -877,34 +985,37 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { proofs []ChtResp ) reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxHelperTrieProofsFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxHelperTrieProofsFetch) { return errResp(ErrRequestRejected, "") } - trieDb := trie.NewDatabase(ethdb.NewTable(pm.chainDb, light.ChtTablePrefix)) - for _, req := range req.Reqs { - if header := pm.blockchain.GetHeaderByNumber(req.BlockNum); header != nil { - sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, req.ChtNum*pm.iConfig.ChtSize-1) - if root := light.GetChtRoot(pm.chainDb, req.ChtNum-1, sectionHead); root != (common.Hash{}) { - trie, err := trie.New(root, trieDb) - if err != nil { - continue - } - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], req.BlockNum) + go func() { + trieDb := trie.NewDatabase(rawdb.NewTable(pm.chainDb, light.ChtTablePrefix)) + for i, req := range req.Reqs { + if i != 0 && !task.waitOrStop() { + return + } + if header := pm.blockchain.GetHeaderByNumber(req.BlockNum); header != nil { + sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, req.ChtNum*pm.iConfig.ChtSize-1) + if root := light.GetChtRoot(pm.chainDb, req.ChtNum-1, sectionHead); root != (common.Hash{}) { + trie, err := trie.New(root, trieDb) + if err != nil { + continue + } + var encNumber [8]byte + binary.BigEndian.PutUint64(encNumber[:], req.BlockNum) - var proof light.NodeList - trie.Prove(encNumber[:], 0, &proof) + var proof light.NodeList + trie.Prove(encNumber[:], 0, &proof) - proofs = append(proofs, ChtResp{Header: header, Proof: proof}) - if bytes += proof.DataSize() + estHeaderRlpSize; bytes >= softResponseLimit { - break + proofs = append(proofs, ChtResp{Header: header, Proof: proof}) + if bytes += proof.DataSize() + estHeaderRlpSize; bytes >= softResponseLimit { + break + } } } } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendHeaderProofs(req.ReqID, bv, proofs) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyHeaderProofs(req.ReqID, proofs), task.done()) + }() case GetHelperTrieProofsMsg: p.Log().Trace("Received helper trie proof request") @@ -922,50 +1033,53 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { auxData [][]byte ) reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxHelperTrieProofsFetch) { + if !accept(req.ReqID, uint64(reqCnt), MaxHelperTrieProofsFetch) { return errResp(ErrRequestRejected, "") } + go func() { - var ( - lastIdx uint64 - lastType uint - root common.Hash - auxTrie *trie.Trie - ) - nodes := light.NewNodeSet() - for _, req := range req.Reqs { - if auxTrie == nil || req.Type != lastType || req.TrieIdx != lastIdx { - auxTrie, lastType, lastIdx = nil, req.Type, req.TrieIdx + var ( + lastIdx uint64 + lastType uint + root common.Hash + auxTrie *trie.Trie + ) + nodes := light.NewNodeSet() + for i, req := range req.Reqs { + if i != 0 && !task.waitOrStop() { + return + } + if auxTrie == nil || req.Type != lastType || req.TrieIdx != lastIdx { + auxTrie, lastType, lastIdx = nil, req.Type, req.TrieIdx - var prefix string - if root, prefix = pm.getHelperTrie(req.Type, req.TrieIdx); root != (common.Hash{}) { - auxTrie, _ = trie.New(root, trie.NewDatabase(ethdb.NewTable(pm.chainDb, prefix))) + var prefix string + if root, prefix = pm.getHelperTrie(req.Type, req.TrieIdx); root != (common.Hash{}) { + auxTrie, _ = trie.New(root, trie.NewDatabase(rawdb.NewTable(pm.chainDb, prefix))) + } } - } - if req.AuxReq == auxRoot { - var data []byte - if root != (common.Hash{}) { - data = root[:] - } - auxData = append(auxData, data) - auxBytes += len(data) - } else { - if auxTrie != nil { - auxTrie.Prove(req.Key, req.FromLevel, nodes) - } - if req.AuxReq != 0 { - data := pm.getHelperTrieAuxData(req) + if req.AuxReq == auxRoot { + var data []byte + if root != (common.Hash{}) { + data = root[:] + } auxData = append(auxData, data) auxBytes += len(data) + } else { + if auxTrie != nil { + auxTrie.Prove(req.Key, req.FromLevel, nodes) + } + if req.AuxReq != 0 { + data := pm.getHelperTrieAuxData(req) + auxData = append(auxData, data) + auxBytes += len(data) + } + } + if nodes.DataSize()+auxBytes >= softResponseLimit { + break } } - if nodes.DataSize()+auxBytes >= softResponseLimit { - break - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendHelperTrieProofs(req.ReqID, bv, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyHelperTrieProofs(req.ReqID, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}), task.done()) + }() case HeaderProofsMsg: if pm.odr == nil { @@ -980,7 +1094,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&resp); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgHeaderProofs, ReqID: resp.ReqID, @@ -1001,7 +1115,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) deliverMsg = &Msg{ MsgType: MsgHelperTrieProofs, ReqID: resp.ReqID, @@ -1018,13 +1132,18 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } reqCnt := len(txs) - if reject(uint64(reqCnt), MaxTxSend) { + if !accept(0, uint64(reqCnt), MaxTxSend) { return errResp(ErrRequestRejected, "") } - pm.txpool.AddRemotes(txs) - - _, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) + go func() { + for i, tx := range txs { + if i != 0 && !task.waitOrStop() { + return + } + pm.txpool.AddRemotes([]*types.Transaction{tx}) + } + sendResponse(0, uint64(reqCnt), nil, task.done()) + }() case SendTxV2Msg: if pm.txpool == nil { @@ -1039,29 +1158,27 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } reqCnt := len(req.Txs) - if reject(uint64(reqCnt), MaxTxSend) { + if !accept(req.ReqID, uint64(reqCnt), MaxTxSend) { return errResp(ErrRequestRejected, "") } - - hashes := make([]common.Hash, len(req.Txs)) - for i, tx := range req.Txs { - hashes[i] = tx.Hash() - } - stats := pm.txStatus(hashes) - for i, stat := range stats { - if stat.Status == core.TxStatusUnknown { - if errs := pm.txpool.AddRemotes([]*types.Transaction{req.Txs[i]}); errs[0] != nil { - stats[i].Error = errs[0].Error() - continue + go func() { + stats := make([]txStatus, len(req.Txs)) + for i, tx := range req.Txs { + if i != 0 && !task.waitOrStop() { + return + } + hash := tx.Hash() + stats[i] = pm.txStatus(hash) + if stats[i].Status == core.TxStatusUnknown { + if errs := pm.txpool.AddRemotes([]*types.Transaction{tx}); errs[0] != nil { + stats[i].Error = errs[0].Error() + continue + } + stats[i] = pm.txStatus(hash) } - stats[i] = pm.txStatus([]common.Hash{hashes[i]})[0] } - } - - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - - return p.SendTxStatus(req.ReqID, bv, stats) + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyTxStatus(req.ReqID, stats), task.done()) + }() case GetTxStatusMsg: if pm.txpool == nil { @@ -1076,13 +1193,19 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxTxStatus) { + if !accept(req.ReqID, uint64(reqCnt), MaxTxStatus) { return errResp(ErrRequestRejected, "") } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - - return p.SendTxStatus(req.ReqID, bv, pm.txStatus(req.Hashes)) + go func() { + stats := make([]txStatus, len(req.Hashes)) + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + return + } + stats[i] = pm.txStatus(hash) + } + sendResponse(req.ReqID, uint64(reqCnt), p.ReplyTxStatus(req.ReqID, stats), task.done()) + }() case TxStatusMsg: if pm.odr == nil { @@ -1098,7 +1221,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { return errResp(ErrDecode, "msg %v: %v", msg, err) } - p.fcServer.GotReply(resp.ReqID, resp.BV) + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) default: p.Log().Trace("Received unknown message", "code", msg.Code) @@ -1118,8 +1241,8 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } // getAccount retrieves an account from the state based at root. -func (pm *ProtocolManager) getAccount(statedb *state.StateDB, root, hash common.Hash) (state.Account, error) { - trie, err := trie.New(root, statedb.Database().TrieDB()) +func (pm *ProtocolManager) getAccount(triedb *trie.Database, root, hash common.Hash) (state.Account, error) { + trie, err := trie.New(root, triedb) if err != nil { return state.Account{}, err } @@ -1158,21 +1281,25 @@ func (pm *ProtocolManager) getHelperTrieAuxData(req HelperTrieReq) []byte { return nil } -func (pm *ProtocolManager) txStatus(hashes []common.Hash) []txStatus { - stats := make([]txStatus, len(hashes)) - for i, stat := range pm.txpool.Status(hashes) { - // Save the status we've got from the transaction pool - stats[i].Status = stat - - // If the transaction is unknown to the pool, try looking it up locally - if stat == core.TxStatusUnknown { - if block, number, index := rawdb.ReadTxLookupEntry(pm.chainDb, hashes[i]); block != (common.Hash{}) { - stats[i].Status = core.TxStatusIncluded - stats[i].Lookup = &rawdb.TxLookupEntry{BlockHash: block, BlockIndex: number, Index: index} - } +func (pm *ProtocolManager) txStatus(hash common.Hash) txStatus { + var stat txStatus + stat.Status = pm.txpool.Status([]common.Hash{hash})[0] + // If the transaction is unknown to the pool, try looking it up locally + if stat.Status == core.TxStatusUnknown { + if tx, blockHash, blockNumber, txIndex := rawdb.ReadTransaction(pm.chainDb, hash); tx != nil { + stat.Status = core.TxStatusIncluded + stat.Lookup = &rawdb.LegacyTxLookupEntry{BlockHash: blockHash, BlockIndex: blockNumber, Index: txIndex} } } - return stats + return stat +} + +// isULCEnabled returns true if we can use ULC +func (pm *ProtocolManager) isULCEnabled() bool { + if pm.ulc == nil || len(pm.ulc.trustedKeys) == 0 { + return false + } + return true } // downloaderPeerNotify implements peerSetNotify @@ -1200,7 +1327,7 @@ func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, s request: func(dp distPeer) func() { peer := dp.(*peer) cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) - peer.fcServer.QueueRequest(reqID, cost) + peer.fcServer.QueuedRequest(reqID, cost) return func() { peer.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse) } }, } @@ -1224,7 +1351,7 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip request: func(dp distPeer) func() { peer := dp.(*peer) cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) - peer.fcServer.QueueRequest(reqID, cost) + peer.fcServer.QueuedRequest(reqID, cost) return func() { peer.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse) } }, } diff --git a/vendor/github.com/ethereum/go-ethereum/les/handler_test.go b/vendor/github.com/ethereum/go-ethereum/les/handler_test.go index 43be7f41..5cf31b8f 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/handler_test.go +++ b/vendor/github.com/ethereum/go-ethereum/les/handler_test.go @@ -30,7 +30,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" @@ -405,7 +404,7 @@ func testGetCHTProofs(t *testing.T, protocol int) { switch protocol { case 1: root := light.GetChtRoot(server.db, 0, bc.GetHeaderByNumber(frequency-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.ChtTablePrefix))) + trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.ChtTablePrefix))) var proof light.NodeList trie.Prove(key, 0, &proof) @@ -413,7 +412,7 @@ func testGetCHTProofs(t *testing.T, protocol int) { case 2: root := light.GetChtRoot(server.db, (frequency/config.ChtSize)-1, bc.GetHeaderByNumber(frequency-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.ChtTablePrefix))) + trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.ChtTablePrefix))) trie.Prove(key, 0, &proofsV2.Proofs) } // Assemble the requests for the different protocols @@ -480,7 +479,7 @@ func TestGetBloombitsProofs(t *testing.T) { var proofs HelperTrieResps root := light.GetBloomTrieRoot(server.db, 0, bc.GetHeaderByNumber(config.BloomTrieSize-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.BloomTrieTablePrefix))) + trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.BloomTrieTablePrefix))) trie.Prove(key, 0, &proofs.Proofs) // Send the proof request and verify the response @@ -493,8 +492,8 @@ func TestGetBloombitsProofs(t *testing.T) { } func TestTransactionStatusLes2(t *testing.T) { - db := ethdb.NewMemDatabase() - pm := newTestProtocolManagerMust(t, false, 0, nil, nil, nil, db) + db := rawdb.NewMemoryDatabase() + pm := newTestProtocolManagerMust(t, false, 0, nil, nil, nil, db, nil) chain := pm.blockchain.(*core.BlockChain) config := core.DefaultTxPoolConfig config.Journal = "" @@ -559,8 +558,8 @@ func TestTransactionStatusLes2(t *testing.T) { // check if their status is included now block1hash := rawdb.ReadCanonicalHash(db, 1) - test(tx1, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.TxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 0}}) - test(tx2, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.TxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 1}}) + test(tx1, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 0}}) + test(tx2, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 1}}) // create a reorg that rolls them back gchain, _ = core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), db, 2, func(i int, block *core.BlockGen) {}) diff --git a/vendor/github.com/ethereum/go-ethereum/les/helper_test.go b/vendor/github.com/ethereum/go-ethereum/les/helper_test.go index b46d41f1..020c69e1 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/helper_test.go +++ b/vendor/github.com/ethereum/go-ethereum/les/helper_test.go @@ -27,8 +27,10 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -133,20 +135,10 @@ func testIndexers(db ethdb.Database, odr light.OdrBackend, iConfig *light.Indexe return chtIndexer, bloomIndexer, bloomTrieIndexer } -func testRCL() RequestCostList { - cl := make(RequestCostList, len(reqList)) - for i, code := range reqList { - cl[i].MsgCode = code - cl[i].BaseCost = 0 - cl[i].ReqCost = 0 - } - return cl -} - // newTestProtocolManager creates a new protocol manager for testing purposes, // with the given number of blocks already known, potential notification // channels for different events and relative chain indexers array. -func newTestProtocolManager(lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database) (*ProtocolManager, error) { +func newTestProtocolManager(lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database, ulcConfig *eth.ULCConfig) (*ProtocolManager, error) { var ( evmux = new(event.TypeMux) engine = ethash.NewFaker() @@ -176,21 +168,21 @@ func newTestProtocolManager(lightSync bool, blocks int, generator func(int, *cor if lightSync { indexConfig = light.TestClientIndexerConfig } - pm, err := NewProtocolManager(gspec.Config, indexConfig, lightSync, NetworkId, evmux, engine, peers, chain, nil, db, odr, nil, nil, make(chan struct{}), new(sync.WaitGroup)) + pm, err := NewProtocolManager(gspec.Config, indexConfig, lightSync, NetworkId, evmux, engine, peers, chain, nil, db, odr, nil, nil, make(chan struct{}), new(sync.WaitGroup), ulcConfig) if err != nil { return nil, err } if !lightSync { srv := &LesServer{lesCommons: lesCommons{protocolManager: pm}} pm.server = srv + pm.servingQueue.setThreads(4) - srv.defParams = &flowcontrol.ServerParams{ + srv.defParams = flowcontrol.ServerParams{ BufLimit: testBufLimit, MinRecharge: 1, } - srv.fcManager = flowcontrol.NewClientManager(50, 10, 1000000000) - srv.fcCostStats = newCostStats(nil) + srv.fcManager = flowcontrol.NewClientManager(nil, &mclock.System{}) } pm.Start(1000) return pm, nil @@ -200,8 +192,8 @@ func newTestProtocolManager(lightSync bool, blocks int, generator func(int, *cor // with the given number of blocks already known, potential notification // channels for different events and relative chain indexers array. In case of an error, the constructor force- // fails the test. -func newTestProtocolManagerMust(t *testing.T, lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database) *ProtocolManager { - pm, err := newTestProtocolManager(lightSync, blocks, generator, odr, peers, db) +func newTestProtocolManagerMust(t *testing.T, lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database, ulcConfig *eth.ULCConfig) *ProtocolManager { + pm, err := newTestProtocolManager(lightSync, blocks, generator, odr, peers, db, ulcConfig) if err != nil { t.Fatalf("Failed to create protocol manager: %v", err) } @@ -304,7 +296,7 @@ func (p *testPeer) handshake(t *testing.T, td *big.Int, head common.Hash, headNu expList = expList.add("txRelay", nil) expList = expList.add("flowControl/BL", testBufLimit) expList = expList.add("flowControl/MRR", uint64(1)) - expList = expList.add("flowControl/MRC", testRCL()) + expList = expList.add("flowControl/MRC", testCostList()) if err := p2p.ExpectMsg(p.app, StatusMsg, expList); err != nil { t.Fatalf("status recv: %v", err) @@ -313,7 +305,7 @@ func (p *testPeer) handshake(t *testing.T, td *big.Int, head common.Hash, headNu t.Fatalf("status send: %v", err) } - p.fcServerParams = &flowcontrol.ServerParams{ + p.fcParams = flowcontrol.ServerParams{ BufLimit: testBufLimit, MinRecharge: 1, } @@ -340,10 +332,10 @@ type TestEntity struct { // newServerEnv creates a server testing environment with a connected test peer for testing purpose. func newServerEnv(t *testing.T, blocks int, protocol int, waitIndexers func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer)) (*TestEntity, func()) { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() cIndexer, bIndexer, btIndexer := testIndexers(db, nil, light.TestServerIndexerConfig) - pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, nil, db) + pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, nil, db, nil) peer, _ := newTestPeer(t, "peer", protocol, pm, true) cIndexer.Start(pm.blockchain.(*core.BlockChain)) @@ -372,10 +364,10 @@ func newServerEnv(t *testing.T, blocks int, protocol int, waitIndexers func(*cor // newClientServerEnv creates a client/server arch environment with a connected les server and light client pair // for testing purpose. func newClientServerEnv(t *testing.T, blocks int, protocol int, waitIndexers func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer), newPeer bool) (*TestEntity, *TestEntity, func()) { - db, ldb := ethdb.NewMemDatabase(), ethdb.NewMemDatabase() + db, ldb := rawdb.NewMemoryDatabase(), rawdb.NewMemoryDatabase() peers, lPeers := newPeerSet(), newPeerSet() - dist := newRequestDistributor(lPeers, make(chan struct{})) + dist := newRequestDistributor(lPeers, make(chan struct{}), &mclock.System{}) rm := newRetrieveManager(lPeers, dist, nil) odr := NewLesOdr(ldb, light.TestClientIndexerConfig, rm) @@ -383,8 +375,8 @@ func newClientServerEnv(t *testing.T, blocks int, protocol int, waitIndexers fun lcIndexer, lbIndexer, lbtIndexer := testIndexers(ldb, odr, light.TestClientIndexerConfig) odr.SetIndexers(lcIndexer, lbtIndexer, lbIndexer) - pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, peers, db) - lpm := newTestProtocolManagerMust(t, true, 0, nil, odr, lPeers, ldb) + pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, peers, db, nil) + lpm := newTestProtocolManagerMust(t, true, 0, nil, odr, lPeers, ldb, nil) startIndexers := func(clientMode bool, pm *ProtocolManager) { if clientMode { diff --git a/vendor/github.com/ethereum/go-ethereum/les/odr.go b/vendor/github.com/ethereum/go-ethereum/les/odr.go index 9def05a6..5d98c66a 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/odr.go +++ b/vendor/github.com/ethereum/go-ethereum/les/odr.go @@ -109,12 +109,15 @@ func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err erro }, canSend: func(dp distPeer) bool { p := dp.(*peer) - return lreq.CanSend(p) + if !p.isOnlyAnnounce { + return lreq.CanSend(p) + } + return false }, request: func(dp distPeer) func() { p := dp.(*peer) cost := lreq.GetCost(p) - p.fcServer.QueueRequest(reqID, cost) + p.fcServer.QueuedRequest(reqID, cost) return func() { lreq.Request(reqID, p) } }, } diff --git a/vendor/github.com/ethereum/go-ethereum/les/odr_requests.go b/vendor/github.com/ethereum/go-ethereum/les/odr_requests.go index 0f2e5dd9..6bd4a293 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/odr_requests.go +++ b/vendor/github.com/ethereum/go-ethereum/les/odr_requests.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( @@ -560,7 +558,7 @@ func (r *BloomRequest) Validate(db ethdb.Database, msg *Msg) error { // readTraceDB stores the keys of database reads. We use this to check that received node // sets contain only the trie nodes necessary to make proofs pass. type readTraceDB struct { - db trie.DatabaseReader + db ethdb.Reader reads map[string]struct{} } diff --git a/vendor/github.com/ethereum/go-ethereum/les/peer.go b/vendor/github.com/ethereum/go-ethereum/les/peer.go index 678384f0..0c15add9 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/peer.go +++ b/vendor/github.com/ethereum/go-ethereum/les/peer.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -25,6 +24,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/les/flowcontrol" @@ -42,6 +42,17 @@ var ( const maxResponseErrors = 50 // number of invalid responses tolerated (makes the protocol less brittle but still avoids spam) +// capacity limitation for parameter updates +const ( + allowedUpdateBytes = 100000 // initial/maximum allowed update size + allowedUpdateRate = time.Millisecond * 10 // time constant for recharging one byte of allowance +) + +// if the total encoded size of a sent transaction batch is over txSizeCostLimit +// per transaction then the request cost is calculated as proportional to the +// encoded size instead of the transaction count +const txSizeCostLimit = 0x10000 + const ( announceTypeNone = iota announceTypeSimple @@ -56,39 +67,69 @@ type peer struct { version int // Protocol version negotiated network uint64 // Network ID being on - announceType, requestAnnounceType uint64 + announceType uint64 id string headInfo *announceData lock sync.RWMutex - announceChn chan announceData - sendQueue *execQueue + sendQueue *execQueue + + errCh chan error + // responseLock ensures that responses are queued in the same order as + // RequestProcessed is called + responseLock sync.Mutex + responseCount uint64 poolEntry *poolEntry hasBlock func(common.Hash, uint64, bool) bool responseErrors int + updateCounter uint64 + updateTime mclock.AbsTime - fcClient *flowcontrol.ClientNode // nil if the peer is server only - fcServer *flowcontrol.ServerNode // nil if the peer is client only - fcServerParams *flowcontrol.ServerParams - fcCosts requestCostTable + fcClient *flowcontrol.ClientNode // nil if the peer is server only + fcServer *flowcontrol.ServerNode // nil if the peer is client only + fcParams flowcontrol.ServerParams + fcCosts requestCostTable + + isTrusted bool + isOnlyAnnounce bool } -func newPeer(version int, network uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - id := p.ID() - +func newPeer(version int, network uint64, isTrusted bool, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { return &peer{ - Peer: p, - rw: rw, - version: version, - network: network, - id: fmt.Sprintf("%x", id[:8]), - announceChn: make(chan announceData, 20), + Peer: p, + rw: rw, + version: version, + network: network, + id: fmt.Sprintf("%x", p.ID().Bytes()), + isTrusted: isTrusted, + errCh: make(chan error, 1), } } +// rejectUpdate returns true if a parameter update has to be rejected because +// the size and/or rate of updates exceed the capacity limitation +func (p *peer) rejectUpdate(size uint64) bool { + now := mclock.Now() + if p.updateCounter == 0 { + p.updateTime = now + } else { + dt := now - p.updateTime + r := uint64(dt / mclock.AbsTime(allowedUpdateRate)) + if p.updateCounter > r { + p.updateCounter -= r + p.updateTime += mclock.AbsTime(allowedUpdateRate * time.Duration(r)) + } else { + p.updateCounter = 0 + p.updateTime = now + } + } + p.updateCounter += size + return p.updateCounter > allowedUpdateBytes +} + func (p *peer) canQueue() bool { return p.sendQueue.canQueue() } @@ -143,6 +184,20 @@ func (p *peer) waitBefore(maxCost uint64) (time.Duration, float64) { return p.fcServer.CanSend(maxCost) } +// updateCapacity updates the request serving capacity assigned to a given client +// and also sends an announcement about the updated flow control parameters +func (p *peer) updateCapacity(cap uint64) { + p.responseLock.Lock() + defer p.responseLock.Unlock() + + p.fcParams = flowcontrol.ServerParams{MinRecharge: cap, BufLimit: cap * bufLimitRatio} + p.fcClient.UpdateParams(p.fcParams) + var kvList keyValueList + kvList = kvList.add("flowControl/MRR", cap) + kvList = kvList.add("flowControl/BL", cap*bufLimitRatio) + p.queueSend(func() { p.SendAnnounce(announceData{Update: kvList}) }) +} + func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) error { type req struct { ReqID uint64 @@ -151,12 +206,27 @@ func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) return p2p.Send(w, msgcode, req{reqID, data}) } -func sendResponse(w p2p.MsgWriter, msgcode, reqID, bv uint64, data interface{}) error { +// reply struct represents a reply with the actual data already RLP encoded and +// only the bv (buffer value) missing. This allows the serving mechanism to +// calculate the bv value which depends on the data size before sending the reply. +type reply struct { + w p2p.MsgWriter + msgcode, reqID uint64 + data rlp.RawValue +} + +// send sends the reply with the calculated buffer value +func (r *reply) send(bv uint64) error { type resp struct { ReqID, BV uint64 - Data interface{} + Data rlp.RawValue } - return p2p.Send(w, msgcode, resp{reqID, bv, data}) + return p2p.Send(r.w, r.msgcode, resp{r.reqID, bv, r.data}) +} + +// size returns the RLP encoded size of the message data +func (r *reply) size() uint32 { + return uint32(len(r.data)) } func (p *peer) GetRequestCost(msgcode uint64, amount int) uint64 { @@ -164,8 +234,34 @@ func (p *peer) GetRequestCost(msgcode uint64, amount int) uint64 { defer p.lock.RUnlock() cost := p.fcCosts[msgcode].baseCost + p.fcCosts[msgcode].reqCost*uint64(amount) - if cost > p.fcServerParams.BufLimit { - cost = p.fcServerParams.BufLimit + if cost > p.fcParams.BufLimit { + cost = p.fcParams.BufLimit + } + return cost +} + +func (p *peer) GetTxRelayCost(amount, size int) uint64 { + p.lock.RLock() + defer p.lock.RUnlock() + + var msgcode uint64 + switch p.version { + case lpv1: + msgcode = SendTxMsg + case lpv2: + msgcode = SendTxV2Msg + default: + panic(nil) + } + + cost := p.fcCosts[msgcode].baseCost + p.fcCosts[msgcode].reqCost*uint64(amount) + sizeCost := p.fcCosts[msgcode].baseCost + p.fcCosts[msgcode].reqCost*uint64(size)/txSizeCostLimit + if sizeCost > cost { + cost = sizeCost + } + + if cost > p.fcParams.BufLimit { + cost = p.fcParams.BufLimit } return cost } @@ -184,52 +280,61 @@ func (p *peer) SendAnnounce(request announceData) error { return p2p.Send(p.rw, AnnounceMsg, request) } -// SendBlockHeaders sends a batch of block headers to the remote peer. -func (p *peer) SendBlockHeaders(reqID, bv uint64, headers []*types.Header) error { - return sendResponse(p.rw, BlockHeadersMsg, reqID, bv, headers) +// ReplyBlockHeaders creates a reply with a batch of block headers +func (p *peer) ReplyBlockHeaders(reqID uint64, headers []*types.Header) *reply { + data, _ := rlp.EncodeToBytes(headers) + return &reply{p.rw, BlockHeadersMsg, reqID, data} } -// SendBlockBodiesRLP sends a batch of block contents to the remote peer from +// ReplyBlockBodiesRLP creates a reply with a batch of block contents from // an already RLP encoded format. -func (p *peer) SendBlockBodiesRLP(reqID, bv uint64, bodies []rlp.RawValue) error { - return sendResponse(p.rw, BlockBodiesMsg, reqID, bv, bodies) +func (p *peer) ReplyBlockBodiesRLP(reqID uint64, bodies []rlp.RawValue) *reply { + data, _ := rlp.EncodeToBytes(bodies) + return &reply{p.rw, BlockBodiesMsg, reqID, data} } -// SendCodeRLP sends a batch of arbitrary internal data, corresponding to the +// ReplyCode creates a reply with a batch of arbitrary internal data, corresponding to the // hashes requested. -func (p *peer) SendCode(reqID, bv uint64, data [][]byte) error { - return sendResponse(p.rw, CodeMsg, reqID, bv, data) +func (p *peer) ReplyCode(reqID uint64, codes [][]byte) *reply { + data, _ := rlp.EncodeToBytes(codes) + return &reply{p.rw, CodeMsg, reqID, data} } -// SendReceiptsRLP sends a batch of transaction receipts, corresponding to the +// ReplyReceiptsRLP creates a reply with a batch of transaction receipts, corresponding to the // ones requested from an already RLP encoded format. -func (p *peer) SendReceiptsRLP(reqID, bv uint64, receipts []rlp.RawValue) error { - return sendResponse(p.rw, ReceiptsMsg, reqID, bv, receipts) +func (p *peer) ReplyReceiptsRLP(reqID uint64, receipts []rlp.RawValue) *reply { + data, _ := rlp.EncodeToBytes(receipts) + return &reply{p.rw, ReceiptsMsg, reqID, data} } -// SendProofs sends a batch of legacy LES/1 merkle proofs, corresponding to the ones requested. -func (p *peer) SendProofs(reqID, bv uint64, proofs proofsData) error { - return sendResponse(p.rw, ProofsV1Msg, reqID, bv, proofs) +// ReplyProofs creates a reply with a batch of legacy LES/1 merkle proofs, corresponding to the ones requested. +func (p *peer) ReplyProofs(reqID uint64, proofs proofsData) *reply { + data, _ := rlp.EncodeToBytes(proofs) + return &reply{p.rw, ProofsV1Msg, reqID, data} } -// SendProofsV2 sends a batch of merkle proofs, corresponding to the ones requested. -func (p *peer) SendProofsV2(reqID, bv uint64, proofs light.NodeList) error { - return sendResponse(p.rw, ProofsV2Msg, reqID, bv, proofs) +// ReplyProofsV2 creates a reply with a batch of merkle proofs, corresponding to the ones requested. +func (p *peer) ReplyProofsV2(reqID uint64, proofs light.NodeList) *reply { + data, _ := rlp.EncodeToBytes(proofs) + return &reply{p.rw, ProofsV2Msg, reqID, data} } -// SendHeaderProofs sends a batch of legacy LES/1 header proofs, corresponding to the ones requested. -func (p *peer) SendHeaderProofs(reqID, bv uint64, proofs []ChtResp) error { - return sendResponse(p.rw, HeaderProofsMsg, reqID, bv, proofs) +// ReplyHeaderProofs creates a reply with a batch of legacy LES/1 header proofs, corresponding to the ones requested. +func (p *peer) ReplyHeaderProofs(reqID uint64, proofs []ChtResp) *reply { + data, _ := rlp.EncodeToBytes(proofs) + return &reply{p.rw, HeaderProofsMsg, reqID, data} } -// SendHelperTrieProofs sends a batch of HelperTrie proofs, corresponding to the ones requested. -func (p *peer) SendHelperTrieProofs(reqID, bv uint64, resp HelperTrieResps) error { - return sendResponse(p.rw, HelperTrieProofsMsg, reqID, bv, resp) +// ReplyHelperTrieProofs creates a reply with a batch of HelperTrie proofs, corresponding to the ones requested. +func (p *peer) ReplyHelperTrieProofs(reqID uint64, resp HelperTrieResps) *reply { + data, _ := rlp.EncodeToBytes(resp) + return &reply{p.rw, HelperTrieProofsMsg, reqID, data} } -// SendTxStatus sends a batch of transaction status records, corresponding to the ones requested. -func (p *peer) SendTxStatus(reqID, bv uint64, stats []txStatus) error { - return sendResponse(p.rw, TxStatusMsg, reqID, bv, stats) +// ReplyTxStatus creates a reply with a batch of transaction status records, corresponding to the ones requested. +func (p *peer) ReplyTxStatus(reqID uint64, stats []txStatus) *reply { + data, _ := rlp.EncodeToBytes(stats) + return &reply{p.rw, TxStatusMsg, reqID, data} } // RequestHeadersByHash fetches a batch of blocks' headers corresponding to the @@ -307,9 +412,9 @@ func (p *peer) RequestTxStatus(reqID, cost uint64, txHashes []common.Hash) error return sendRequest(p.rw, GetTxStatusMsg, reqID, cost, txHashes) } -// SendTxStatus sends a batch of transactions to be added to the remote transaction pool. -func (p *peer) SendTxs(reqID, cost uint64, txs types.Transactions) error { - p.Log().Debug("Fetching batch of transactions", "count", len(txs)) +// SendTxStatus creates a reply with a batch of transactions to be added to the remote transaction pool. +func (p *peer) SendTxs(reqID, cost uint64, txs rlp.RawValue) error { + p.Log().Debug("Sending batch of transactions", "size", len(txs)) switch p.version { case lpv1: return p2p.Send(p.rw, SendTxMsg, txs) // old message format does not include reqID @@ -340,12 +445,14 @@ func (l keyValueList) add(key string, val interface{}) keyValueList { return append(l, entry) } -func (l keyValueList) decode() keyValueMap { +func (l keyValueList) decode() (keyValueMap, uint64) { m := make(keyValueMap) + var size uint64 for _, entry := range l { m[entry.Key] = entry.Value + size += uint64(len(entry.Key)) + uint64(len(entry.Value)) + 8 } - return m + return m, size } func (m keyValueMap) get(key string, val interface{}) error { @@ -401,24 +508,41 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis send = send.add("headNum", headNum) send = send.add("genesisHash", genesis) if server != nil { - send = send.add("serveHeaders", nil) - send = send.add("serveChainSince", uint64(0)) - send = send.add("serveStateSince", uint64(0)) - send = send.add("txRelay", nil) + if !server.onlyAnnounce { + //only announce server. It sends only announse requests + send = send.add("serveHeaders", nil) + send = send.add("serveChainSince", uint64(0)) + send = send.add("serveStateSince", uint64(0)) + send = send.add("txRelay", nil) + } send = send.add("flowControl/BL", server.defParams.BufLimit) send = send.add("flowControl/MRR", server.defParams.MinRecharge) - list := server.fcCostStats.getCurrentList() - send = send.add("flowControl/MRC", list) - p.fcCosts = list.decode() + var costList RequestCostList + if server.costTracker != nil { + costList = server.costTracker.makeCostList() + } else { + costList = testCostList() + } + send = send.add("flowControl/MRC", costList) + p.fcCosts = costList.decode() + p.fcParams = server.defParams } else { - p.requestAnnounceType = announceTypeSimple // set to default until "very light" client mode is implemented - send = send.add("announceType", p.requestAnnounceType) + //on client node + p.announceType = announceTypeSimple + if p.isTrusted { + p.announceType = announceTypeSigned + } + send = send.add("announceType", p.announceType) } + recvList, err := p.sendReceiveHandshake(send) if err != nil { return err } - recv := recvList.decode() + recv, size := recvList.decode() + if p.rejectUpdate(size) { + return errResp(ErrRequestRejected, "") + } var rGenesis, rHash common.Hash var rVersion, rNetwork, rNum uint64 @@ -452,26 +576,34 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis if int(rVersion) != p.version { return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", rVersion, p.version) } + if server != nil { // until we have a proper peer connectivity API, allow LES connection to other servers /*if recv.get("serveStateSince", nil) == nil { return errResp(ErrUselessPeer, "wanted client, got server") }*/ if recv.get("announceType", &p.announceType) != nil { + //set default announceType on server side p.announceType = announceTypeSimple } p.fcClient = flowcontrol.NewClientNode(server.fcManager, server.defParams) } else { + //mark OnlyAnnounce server if "serveHeaders", "serveChainSince", "serveStateSince" or "txRelay" fields don't exist if recv.get("serveChainSince", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot serve chain") + p.isOnlyAnnounce = true } if recv.get("serveStateSince", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot serve state") + p.isOnlyAnnounce = true } if recv.get("txRelay", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot relay transactions") + p.isOnlyAnnounce = true } - params := &flowcontrol.ServerParams{} + + if p.isOnlyAnnounce && !p.isTrusted { + return errResp(ErrUselessPeer, "peer cannot serve requests") + } + + var params flowcontrol.ServerParams if err := recv.get("flowControl/BL", ¶ms.BufLimit); err != nil { return err } @@ -482,15 +614,38 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis if err := recv.get("flowControl/MRC", &MRC); err != nil { return err } - p.fcServerParams = params - p.fcServer = flowcontrol.NewServerNode(params) + p.fcParams = params + p.fcServer = flowcontrol.NewServerNode(params, &mclock.System{}) p.fcCosts = MRC.decode() } - p.headInfo = &announceData{Td: rTd, Hash: rHash, Number: rNum} return nil } +// updateFlowControl updates the flow control parameters belonging to the server +// node if the announced key/value set contains relevant fields +func (p *peer) updateFlowControl(update keyValueMap) { + if p.fcServer == nil { + return + } + params := p.fcParams + updateParams := false + if update.get("flowControl/BL", ¶ms.BufLimit) == nil { + updateParams = true + } + if update.get("flowControl/MRR", ¶ms.MinRecharge) == nil { + updateParams = true + } + if updateParams { + p.fcParams = params + p.fcServer.UpdateParams(params) + } + var MRC RequestCostList + if update.get("flowControl/MRC", &MRC) == nil { + p.fcCosts = MRC.decode() + } +} + // String implements fmt.Stringer. func (p *peer) String() string { return fmt.Sprintf("Peer %s [%s]", p.id, @@ -576,8 +731,10 @@ func (ps *peerSet) Unregister(id string) error { for _, n := range peers { n.unregisterPeer(p) } + p.sendQueue.quit() p.Peer.Disconnect(p2p.DiscUselessPeer) + return nil } } diff --git a/vendor/github.com/ethereum/go-ethereum/les/peer_test.go b/vendor/github.com/ethereum/go-ethereum/les/peer_test.go new file mode 100644 index 00000000..8b12dd29 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/peer_test.go @@ -0,0 +1,290 @@ +package les + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + test_networkid = 10 + protocol_version = 2123 +) + +var ( + hash = common.HexToHash("some string") + genesis = common.HexToHash("genesis hash") + headNum = uint64(1234) + td = big.NewInt(123) +) + +//ulc connects to trusted peer and send announceType=announceTypeSigned +func TestPeerHandshakeSetAnnounceTypeToAnnounceTypeSignedForTrustedPeer(t *testing.T) { + id := newNodeID(t).ID() + + //peer to connect(on ulc side) + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + isTrusted: true, + rw: &rwStub{ + WriteHook: func(recvList keyValueList) { + //checking that ulc sends to peer allowedRequests=onlyAnnounceRequests and announceType = announceTypeSigned + recv, _ := recvList.decode() + var reqType uint64 + + err := recv.get("announceType", &reqType) + if err != nil { + t.Fatal(err) + } + + if reqType != announceTypeSigned { + t.Fatal("Expected announceTypeSigned") + } + }, + ReadHook: func(l keyValueList) keyValueList { + l = l.add("serveHeaders", nil) + l = l.add("serveChainSince", uint64(0)) + l = l.add("serveStateSince", uint64(0)) + l = l.add("txRelay", nil) + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + + return l + }, + }, + network: test_networkid, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatalf("Handshake error: %s", err) + } + + if p.announceType != announceTypeSigned { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeAnnounceTypeSignedForTrustedPeersPeerNotInTrusted(t *testing.T) { + id := newNodeID(t).ID() + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + rw: &rwStub{ + WriteHook: func(recvList keyValueList) { + //checking that ulc sends to peer allowedRequests=noRequests and announceType != announceTypeSigned + recv, _ := recvList.decode() + var reqType uint64 + + err := recv.get("announceType", &reqType) + if err != nil { + t.Fatal(err) + } + + if reqType == announceTypeSigned { + t.Fatal("Expected not announceTypeSigned") + } + }, + ReadHook: func(l keyValueList) keyValueList { + l = l.add("serveHeaders", nil) + l = l.add("serveChainSince", uint64(0)) + l = l.add("serveStateSince", uint64(0)) + l = l.add("txRelay", nil) + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + + return l + }, + }, + network: test_networkid, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatal(err) + } + if p.announceType == announceTypeSigned { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeDefaultAllRequests(t *testing.T) { + id := newNodeID(t).ID() + + s := generateLesServer() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("announceType", uint64(announceTypeSigned)) + l = l.add("allowedRequests", uint64(0)) + + return l + }, + }, + network: test_networkid, + } + + err := p.Handshake(td, hash, headNum, genesis, s) + if err != nil { + t.Fatal(err) + } + + if p.isOnlyAnnounce { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeServerSendOnlyAnnounceRequestsHeaders(t *testing.T) { + id := newNodeID(t).ID() + + s := generateLesServer() + s.onlyAnnounce = true + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("announceType", uint64(announceTypeSigned)) + + return l + }, + WriteHook: func(l keyValueList) { + for _, v := range l { + if v.Key == "serveHeaders" || + v.Key == "serveChainSince" || + v.Key == "serveStateSince" || + v.Key == "txRelay" { + t.Fatalf("%v exists", v.Key) + } + } + }, + }, + network: test_networkid, + } + + err := p.Handshake(td, hash, headNum, genesis, s) + if err != nil { + t.Fatal(err) + } +} +func TestPeerHandshakeClientReceiveOnlyAnnounceRequestsHeaders(t *testing.T) { + id := newNodeID(t).ID() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + + l = l.add("announceType", uint64(announceTypeSigned)) + + return l + }, + }, + network: test_networkid, + isTrusted: true, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatal(err) + } + + if !p.isOnlyAnnounce { + t.Fatal("isOnlyAnnounce must be true") + } +} + +func TestPeerHandshakeClientReturnErrorOnUselessPeer(t *testing.T) { + id := newNodeID(t).ID() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocol_version, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + + l = l.add("announceType", uint64(announceTypeSigned)) + + return l + }, + }, + network: test_networkid, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err == nil { + t.FailNow() + } +} + +func generateLesServer() *LesServer { + s := &LesServer{ + defParams: flowcontrol.ServerParams{ + BufLimit: uint64(300000000), + MinRecharge: uint64(50000), + }, + fcManager: flowcontrol.NewClientManager(nil, &mclock.System{}), + } + return s +} + +type rwStub struct { + ReadHook func(l keyValueList) keyValueList + WriteHook func(l keyValueList) +} + +func (s *rwStub) ReadMsg() (p2p.Msg, error) { + payload := keyValueList{} + payload = payload.add("protocolVersion", uint64(protocol_version)) + payload = payload.add("networkId", uint64(test_networkid)) + payload = payload.add("headTd", td) + payload = payload.add("headHash", hash) + payload = payload.add("headNum", headNum) + payload = payload.add("genesisHash", genesis) + + if s.ReadHook != nil { + payload = s.ReadHook(payload) + } + + size, p, err := rlp.EncodeToReader(payload) + if err != nil { + return p2p.Msg{}, err + } + + return p2p.Msg{ + Size: uint32(size), + Payload: p, + }, nil +} + +func (s *rwStub) WriteMsg(m p2p.Msg) error { + recvList := keyValueList{} + if err := m.Decode(&recvList); err != nil { + return err + } + + if s.WriteHook != nil { + s.WriteHook(recvList) + } + + return nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/protocol.go b/vendor/github.com/ethereum/go-ethereum/les/protocol.go index 0b24f5ae..65395ac0 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/protocol.go +++ b/vendor/github.com/ethereum/go-ethereum/les/protocol.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -81,6 +80,25 @@ const ( TxStatusMsg = 0x15 ) +type requestInfo struct { + name string + maxCount uint64 +} + +var requests = map[uint64]requestInfo{ + GetBlockHeadersMsg: {"GetBlockHeaders", MaxHeaderFetch}, + GetBlockBodiesMsg: {"GetBlockBodies", MaxBodyFetch}, + GetReceiptsMsg: {"GetReceipts", MaxReceiptFetch}, + GetProofsV1Msg: {"GetProofsV1", MaxProofsFetch}, + GetCodeMsg: {"GetCode", MaxCodeFetch}, + SendTxMsg: {"SendTx", MaxTxSend}, + GetHeaderProofsMsg: {"GetHeaderProofs", MaxHelperTrieProofsFetch}, + GetProofsV2Msg: {"GetProofsV2", MaxProofsFetch}, + GetHelperTrieProofsMsg: {"GetHelperTrieProofs", MaxHelperTrieProofsFetch}, + SendTxV2Msg: {"SendTxV2", MaxTxSend}, + GetTxStatusMsg: {"GetTxStatus", MaxTxStatus}, +} + type errCode int const ( @@ -146,9 +164,9 @@ func (a *announceData) sign(privKey *ecdsa.PrivateKey) { } // checkSignature verifies if the block announcement has a valid signature by the given pubKey -func (a *announceData) checkSignature(id enode.ID) error { +func (a *announceData) checkSignature(id enode.ID, update keyValueMap) error { var sig []byte - if err := a.Update.decode().get("sign", &sig); err != nil { + if err := update.get("sign", &sig); err != nil { return err } rlp, _ := rlp.EncodeToBytes(announceBlock{a.Hash, a.Number, a.Td}) @@ -221,6 +239,6 @@ type proofsData [][]rlp.RawValue type txStatus struct { Status core.TxStatus - Lookup *rawdb.TxLookupEntry `rlp:"nil"` + Lookup *rawdb.LegacyTxLookupEntry `rlp:"nil"` Error string } diff --git a/vendor/github.com/ethereum/go-ethereum/les/randselect.go b/vendor/github.com/ethereum/go-ethereum/les/randselect.go index 1cc1d3d3..8efe0c94 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/randselect.go +++ b/vendor/github.com/ethereum/go-ethereum/les/randselect.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( diff --git a/vendor/github.com/ethereum/go-ethereum/les/retrieve.go b/vendor/github.com/ethereum/go-ethereum/les/retrieve.go index d77cfea7..dd9d1459 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/retrieve.go +++ b/vendor/github.com/ethereum/go-ethereum/les/retrieve.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( diff --git a/vendor/github.com/ethereum/go-ethereum/les/server.go b/vendor/github.com/ethereum/go-ethereum/les/server.go index 2fa0456d..3716685e 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/server.go +++ b/vendor/github.com/ethereum/go-ethereum/les/server.go @@ -14,44 +14,67 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( "crypto/ecdsa" - "encoding/binary" - "math" "sync" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/les/flowcontrol" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discv5" "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) +const bufLimitRatio = 6000 // fixed bufLimit/MRR ratio + type LesServer struct { lesCommons - fcManager *flowcontrol.ClientManager // nil if our node is client only - fcCostStats *requestCostStats - defParams *flowcontrol.ServerParams - lesTopics []discv5.Topic - privateKey *ecdsa.PrivateKey - quitSync chan struct{} + fcManager *flowcontrol.ClientManager // nil if our node is client only + costTracker *costTracker + defParams flowcontrol.ServerParams + lesTopics []discv5.Topic + privateKey *ecdsa.PrivateKey + quitSync chan struct{} + onlyAnnounce bool + + thcNormal, thcBlockProcessing int // serving thread count for normal operation and block processing mode + + maxPeers int + freeClientCap uint64 + freeClientPool *freeClientPool + priorityClientPool *priorityClientPool } func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { quitSync := make(chan struct{}) - pm, err := NewProtocolManager(eth.BlockChain().Config(), light.DefaultServerIndexerConfig, false, config.NetworkId, eth.EventMux(), eth.Engine(), newPeerSet(), eth.BlockChain(), eth.TxPool(), eth.ChainDb(), nil, nil, nil, quitSync, new(sync.WaitGroup)) + pm, err := NewProtocolManager( + eth.BlockChain().Config(), + light.DefaultServerIndexerConfig, + false, + config.NetworkId, + eth.EventMux(), + eth.Engine(), + newPeerSet(), + eth.BlockChain(), + eth.TxPool(), + eth.ChainDb(), + nil, + nil, + nil, + quitSync, + new(sync.WaitGroup), + config.ULC) if err != nil { return nil, err } @@ -70,11 +93,20 @@ func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { bloomTrieIndexer: light.NewBloomTrieIndexer(eth.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency), protocolManager: pm, }, - quitSync: quitSync, - lesTopics: lesTopics, + costTracker: newCostTracker(eth.ChainDb(), config), + quitSync: quitSync, + lesTopics: lesTopics, + onlyAnnounce: config.OnlyAnnounce, } logger := log.New() + pm.server = srv + srv.thcNormal = config.LightServ * 4 / 100 + if srv.thcNormal < 4 { + srv.thcNormal = 4 + } + srv.thcBlockProcessing = config.LightServ/100 + 1 + srv.fcManager = flowcontrol.NewClientManager(nil, &mclock.System{}) chtV1SectionCount, _, _ := srv.chtIndexer.Sections() // indexer still uses LES/1 4k section size for backwards server compatibility chtV2SectionCount := chtV1SectionCount / (params.CHTFrequencyClient / params.CHTFrequencyServer) @@ -96,23 +128,92 @@ func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { } srv.chtIndexer.Start(eth.BlockChain()) - pm.server = srv - - srv.defParams = &flowcontrol.ServerParams{ - BufLimit: 300000000, - MinRecharge: 50000, - } - srv.fcManager = flowcontrol.NewClientManager(uint64(config.LightServ), 10, 1000000000) - srv.fcCostStats = newCostStats(eth.ChainDb()) return srv, nil } +func (s *LesServer) APIs() []rpc.API { + return []rpc.API{ + { + Namespace: "les", + Version: "1.0", + Service: NewPrivateLightServerAPI(s), + Public: false, + }, + } +} + +// startEventLoop starts an event handler loop that updates the recharge curve of +// the client manager and adjusts the client pool's size according to the total +// capacity updates coming from the client manager +func (s *LesServer) startEventLoop() { + s.protocolManager.wg.Add(1) + + var processing bool + blockProcFeed := make(chan bool, 100) + s.protocolManager.blockchain.(*core.BlockChain).SubscribeBlockProcessingEvent(blockProcFeed) + totalRechargeCh := make(chan uint64, 100) + totalRecharge := s.costTracker.subscribeTotalRecharge(totalRechargeCh) + totalCapacityCh := make(chan uint64, 100) + updateRecharge := func() { + if processing { + s.protocolManager.servingQueue.setThreads(s.thcBlockProcessing) + s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge, totalRecharge}}) + } else { + s.protocolManager.servingQueue.setThreads(s.thcNormal) + s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge / 10, totalRecharge}, {totalRecharge, totalRecharge}}) + } + } + updateRecharge() + totalCapacity := s.fcManager.SubscribeTotalCapacity(totalCapacityCh) + s.priorityClientPool.setLimits(s.maxPeers, totalCapacity) + + go func() { + for { + select { + case processing = <-blockProcFeed: + updateRecharge() + case totalRecharge = <-totalRechargeCh: + updateRecharge() + case totalCapacity = <-totalCapacityCh: + s.priorityClientPool.setLimits(s.maxPeers, totalCapacity) + case <-s.protocolManager.quitSync: + s.protocolManager.wg.Done() + return + } + } + }() +} + func (s *LesServer) Protocols() []p2p.Protocol { return s.makeProtocols(ServerProtocolVersions) } // Start starts the LES server func (s *LesServer) Start(srvr *p2p.Server) { + s.maxPeers = s.config.LightPeers + totalRecharge := s.costTracker.totalRecharge() + if s.maxPeers > 0 { + s.freeClientCap = minCapacity //totalRecharge / uint64(s.maxPeers) + if s.freeClientCap < minCapacity { + s.freeClientCap = minCapacity + } + if s.freeClientCap > 0 { + s.defParams = flowcontrol.ServerParams{ + BufLimit: s.freeClientCap * bufLimitRatio, + MinRecharge: s.freeClientCap, + } + } + } + freePeers := int(totalRecharge / s.freeClientCap) + if freePeers < s.maxPeers { + log.Warn("Light peer count limited", "specified", s.maxPeers, "allowed", freePeers) + } + + s.freeClientPool = newFreeClientPool(s.chainDb, s.freeClientCap, 10000, mclock.System{}, func(id string) { go s.protocolManager.removePeer(id) }) + s.priorityClientPool = newPriorityClientPool(s.freeClientCap, s.protocolManager.peers, s.freeClientPool) + + s.protocolManager.peers.notify(s.priorityClientPool) + s.startEventLoop() s.protocolManager.Start(s.config.LightPeers) if srvr.DiscV5 != nil { for _, topic := range s.lesTopics { @@ -138,187 +239,14 @@ func (s *LesServer) SetBloomBitsIndexer(bloomIndexer *core.ChainIndexer) { func (s *LesServer) Stop() { s.chtIndexer.Close() // bloom trie indexer is closed by parent bloombits indexer - s.fcCostStats.store() - s.fcManager.Stop() go func() { <-s.protocolManager.noMorePeers }() + s.freeClientPool.stop() + s.costTracker.stop() s.protocolManager.Stop() } -type requestCosts struct { - baseCost, reqCost uint64 -} - -type requestCostTable map[uint64]*requestCosts - -type RequestCostList []struct { - MsgCode, BaseCost, ReqCost uint64 -} - -func (list RequestCostList) decode() requestCostTable { - table := make(requestCostTable) - for _, e := range list { - table[e.MsgCode] = &requestCosts{ - baseCost: e.BaseCost, - reqCost: e.ReqCost, - } - } - return table -} - -type linReg struct { - sumX, sumY, sumXX, sumXY float64 - cnt uint64 -} - -const linRegMaxCnt = 100000 - -func (l *linReg) add(x, y float64) { - if l.cnt >= linRegMaxCnt { - sub := float64(l.cnt+1-linRegMaxCnt) / linRegMaxCnt - l.sumX -= l.sumX * sub - l.sumY -= l.sumY * sub - l.sumXX -= l.sumXX * sub - l.sumXY -= l.sumXY * sub - l.cnt = linRegMaxCnt - 1 - } - l.cnt++ - l.sumX += x - l.sumY += y - l.sumXX += x * x - l.sumXY += x * y -} - -func (l *linReg) calc() (b, m float64) { - if l.cnt == 0 { - return 0, 0 - } - cnt := float64(l.cnt) - d := cnt*l.sumXX - l.sumX*l.sumX - if d < 0.001 { - return l.sumY / cnt, 0 - } - m = (cnt*l.sumXY - l.sumX*l.sumY) / d - b = (l.sumY / cnt) - (m * l.sumX / cnt) - return b, m -} - -func (l *linReg) toBytes() []byte { - var arr [40]byte - binary.BigEndian.PutUint64(arr[0:8], math.Float64bits(l.sumX)) - binary.BigEndian.PutUint64(arr[8:16], math.Float64bits(l.sumY)) - binary.BigEndian.PutUint64(arr[16:24], math.Float64bits(l.sumXX)) - binary.BigEndian.PutUint64(arr[24:32], math.Float64bits(l.sumXY)) - binary.BigEndian.PutUint64(arr[32:40], l.cnt) - return arr[:] -} - -func linRegFromBytes(data []byte) *linReg { - if len(data) != 40 { - return nil - } - l := &linReg{} - l.sumX = math.Float64frombits(binary.BigEndian.Uint64(data[0:8])) - l.sumY = math.Float64frombits(binary.BigEndian.Uint64(data[8:16])) - l.sumXX = math.Float64frombits(binary.BigEndian.Uint64(data[16:24])) - l.sumXY = math.Float64frombits(binary.BigEndian.Uint64(data[24:32])) - l.cnt = binary.BigEndian.Uint64(data[32:40]) - return l -} - -type requestCostStats struct { - lock sync.RWMutex - db ethdb.Database - stats map[uint64]*linReg -} - -type requestCostStatsRlp []struct { - MsgCode uint64 - Data []byte -} - -var rcStatsKey = []byte("_requestCostStats") - -func newCostStats(db ethdb.Database) *requestCostStats { - stats := make(map[uint64]*linReg) - for _, code := range reqList { - stats[code] = &linReg{cnt: 100} - } - - if db != nil { - data, err := db.Get(rcStatsKey) - var statsRlp requestCostStatsRlp - if err == nil { - err = rlp.DecodeBytes(data, &statsRlp) - } - if err == nil { - for _, r := range statsRlp { - if stats[r.MsgCode] != nil { - if l := linRegFromBytes(r.Data); l != nil { - stats[r.MsgCode] = l - } - } - } - } - } - - return &requestCostStats{ - db: db, - stats: stats, - } -} - -func (s *requestCostStats) store() { - s.lock.Lock() - defer s.lock.Unlock() - - statsRlp := make(requestCostStatsRlp, len(reqList)) - for i, code := range reqList { - statsRlp[i].MsgCode = code - statsRlp[i].Data = s.stats[code].toBytes() - } - - if data, err := rlp.EncodeToBytes(statsRlp); err == nil { - s.db.Put(rcStatsKey, data) - } -} - -func (s *requestCostStats) getCurrentList() RequestCostList { - s.lock.Lock() - defer s.lock.Unlock() - - list := make(RequestCostList, len(reqList)) - //fmt.Println("RequestCostList") - for idx, code := range reqList { - b, m := s.stats[code].calc() - //fmt.Println(code, s.stats[code].cnt, b/1000000, m/1000000) - if m < 0 { - b += m - m = 0 - } - if b < 0 { - b = 0 - } - - list[idx].MsgCode = code - list[idx].BaseCost = uint64(b * 2) - list[idx].ReqCost = uint64(m * 2) - } - return list -} - -func (s *requestCostStats) update(msgCode, reqCnt, cost uint64) { - s.lock.Lock() - defer s.lock.Unlock() - - c, ok := s.stats[msgCode] - if !ok || reqCnt == 0 { - return - } - c.add(float64(reqCnt), float64(cost)) -} - func (pm *ProtocolManager) blockLoop() { pm.wg.Add(1) headCh := make(chan core.ChainHeadEvent, 10) @@ -352,27 +280,17 @@ func (pm *ProtocolManager) blockLoop() { ) for _, p := range peers { + p := p switch p.announceType { - case announceTypeSimple: - select { - case p.announceChn <- announce: - default: - pm.removePeer(p.id) - } - + p.queueSend(func() { p.SendAnnounce(announce) }) case announceTypeSigned: if !signed { signedAnnounce = announce signedAnnounce.sign(pm.server.privateKey) signed = true } - - select { - case p.announceChn <- signedAnnounce: - default: - pm.removePeer(p.id) - } + p.queueSend(func() { p.SendAnnounce(signedAnnounce) }) } } } diff --git a/vendor/github.com/ethereum/go-ethereum/les/serverpool.go b/vendor/github.com/ethereum/go-ethereum/les/serverpool.go index 52b54b37..668f39c5 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/serverpool.go +++ b/vendor/github.com/ethereum/go-ethereum/les/serverpool.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -126,22 +125,22 @@ type serverPool struct { discNodes chan *enode.Node discLookups chan bool + trustedNodes map[enode.ID]*enode.Node entries map[enode.ID]*poolEntry timeout, enableRetry chan *poolEntry adjustStats chan poolStatAdjust - connCh chan *connReq - disconnCh chan *disconnReq - registerCh chan *registerReq - knownQueue, newQueue poolEntryQueue knownSelect, newSelect *weightedRandomSelect knownSelected, newSelected int fastDiscover bool + connCh chan *connReq + disconnCh chan *disconnReq + registerCh chan *registerReq } // newServerPool creates a new serverPool instance -func newServerPool(db ethdb.Database, quit chan struct{}, wg *sync.WaitGroup) *serverPool { +func newServerPool(db ethdb.Database, quit chan struct{}, wg *sync.WaitGroup, trustedNodes []string) *serverPool { pool := &serverPool{ db: db, quit: quit, @@ -156,7 +155,9 @@ func newServerPool(db ethdb.Database, quit chan struct{}, wg *sync.WaitGroup) *s knownSelect: newWeightedRandomSelect(), newSelect: newWeightedRandomSelect(), fastDiscover: true, + trustedNodes: parseTrustedNodes(trustedNodes), } + pool.knownQueue = newPoolEntryQueue(maxKnownEntries, pool.removeEntry) pool.newQueue = newPoolEntryQueue(maxNewEntries, pool.removeEntry) return pool @@ -168,6 +169,7 @@ func (pool *serverPool) start(server *p2p.Server, topic discv5.Topic) { pool.dbKey = append([]byte("serverPool/"), []byte(topic)...) pool.wg.Add(1) pool.loadNodes() + pool.connectToTrustedNodes() if pool.server.DiscV5 != nil { pool.discSetPeriod = make(chan time.Duration, 1) @@ -337,8 +339,10 @@ func (pool *serverPool) eventLoop() { } case node := <-pool.discNodes: - entry := pool.findOrNewNode(node) - pool.updateCheckDial(entry) + if pool.trustedNodes[node.ID()] == nil { + entry := pool.findOrNewNode(node) + pool.updateCheckDial(entry) + } case conv := <-pool.discLookups: if conv { @@ -355,29 +359,34 @@ func (pool *serverPool) eventLoop() { } case req := <-pool.connCh: - // Handle peer connection requests. - entry := pool.entries[req.p.ID()] - if entry == nil { - entry = pool.findOrNewNode(req.node) - } - if entry.state == psConnected || entry.state == psRegistered { + if pool.trustedNodes[req.p.ID()] != nil { + // ignore trusted nodes req.result <- nil - continue + } else { + // Handle peer connection requests. + entry := pool.entries[req.p.ID()] + if entry == nil { + entry = pool.findOrNewNode(req.node) + } + if entry.state == psConnected || entry.state == psRegistered { + req.result <- nil + continue + } + pool.connWg.Add(1) + entry.peer = req.p + entry.state = psConnected + addr := &poolEntryAddress{ + ip: req.node.IP(), + port: uint16(req.node.TCP()), + lastSeen: mclock.Now(), + } + entry.lastConnected = addr + entry.addr = make(map[string]*poolEntryAddress) + entry.addr[addr.strKey()] = addr + entry.addrSelect = *newWeightedRandomSelect() + entry.addrSelect.update(addr) + req.result <- entry } - pool.connWg.Add(1) - entry.peer = req.p - entry.state = psConnected - addr := &poolEntryAddress{ - ip: req.node.IP(), - port: uint16(req.node.TCP()), - lastSeen: mclock.Now(), - } - entry.lastConnected = addr - entry.addr = make(map[string]*poolEntryAddress) - entry.addr[addr.strKey()] = addr - entry.addrSelect = *newWeightedRandomSelect() - entry.addrSelect.update(addr) - req.result <- entry case req := <-pool.registerCh: // Handle peer registration requests. @@ -470,11 +479,42 @@ func (pool *serverPool) loadNodes() { "response", fmt.Sprintf("%v/%v", time.Duration(e.responseStats.avg), e.responseStats.weight), "timeout", fmt.Sprintf("%v/%v", e.timeoutStats.avg, e.timeoutStats.weight)) pool.entries[e.node.ID()] = e - pool.knownQueue.setLatest(e) - pool.knownSelect.update((*knownEntry)(e)) + if pool.trustedNodes[e.node.ID()] == nil { + pool.knownQueue.setLatest(e) + pool.knownSelect.update((*knownEntry)(e)) + } } } +// connectToTrustedNodes adds trusted server nodes as static trusted peers. +// +// Note: trusted nodes are not handled by the server pool logic, they are not +// added to either the known or new selection pools. They are connected/reconnected +// by p2p.Server whenever possible. +func (pool *serverPool) connectToTrustedNodes() { + //connect to trusted nodes + for _, node := range pool.trustedNodes { + pool.server.AddTrustedPeer(node) + pool.server.AddPeer(node) + log.Debug("Added trusted node", "id", node.ID().String()) + } +} + +// parseTrustedNodes returns valid and parsed enodes +func parseTrustedNodes(trustedNodes []string) map[enode.ID]*enode.Node { + nodes := make(map[enode.ID]*enode.Node) + + for _, node := range trustedNodes { + node, err := enode.ParseV4(node) + if err != nil { + log.Warn("Trusted node URL invalid", "enode", node, "err", err) + continue + } + nodes[node.ID()] = node + } + return nodes +} + // saveNodes saves known nodes and their statistics into the database. Nodes are // ordered from least to most recently connected. func (pool *serverPool) saveNodes() { diff --git a/vendor/github.com/ethereum/go-ethereum/les/servingqueue.go b/vendor/github.com/ethereum/go-ethereum/les/servingqueue.go new file mode 100644 index 00000000..2438fdfe --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/servingqueue.go @@ -0,0 +1,261 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "sync" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" +) + +// servingQueue allows running tasks in a limited number of threads and puts the +// waiting tasks in a priority queue +type servingQueue struct { + tokenCh chan runToken + queueAddCh, queueBestCh chan *servingTask + stopThreadCh, quit chan struct{} + setThreadsCh chan int + + wg sync.WaitGroup + threadCount int // number of currently running threads + queue *prque.Prque // priority queue for waiting or suspended tasks + best *servingTask // the highest priority task (not included in the queue) + suspendBias int64 // priority bias against suspending an already running task +} + +// servingTask represents a request serving task. Tasks can be implemented to +// run in multiple steps, allowing the serving queue to suspend execution between +// steps if higher priority tasks are entered. The creator of the task should +// set the following fields: +// +// - priority: greater value means higher priority; values can wrap around the int64 range +// - run: execute a single step; return true if finished +// - after: executed after run finishes or returns an error, receives the total serving time +type servingTask struct { + sq *servingQueue + servingTime uint64 + priority int64 + biasAdded bool + token runToken + tokenCh chan runToken +} + +// runToken received by servingTask.start allows the task to run. Closing the +// channel by servingTask.stop signals the thread controller to allow a new task +// to start running. +type runToken chan struct{} + +// start blocks until the task can start and returns true if it is allowed to run. +// Returning false means that the task should be cancelled. +func (t *servingTask) start() bool { + select { + case t.token = <-t.sq.tokenCh: + default: + t.tokenCh = make(chan runToken, 1) + select { + case t.sq.queueAddCh <- t: + case <-t.sq.quit: + return false + } + select { + case t.token = <-t.tokenCh: + case <-t.sq.quit: + return false + } + } + if t.token == nil { + return false + } + t.servingTime -= uint64(mclock.Now()) + return true +} + +// done signals the thread controller about the task being finished and returns +// the total serving time of the task in nanoseconds. +func (t *servingTask) done() uint64 { + t.servingTime += uint64(mclock.Now()) + close(t.token) + return t.servingTime +} + +// waitOrStop can be called during the execution of the task. It blocks if there +// is a higher priority task waiting (a bias is applied in favor of the currently +// running task). Returning true means that the execution can be resumed. False +// means the task should be cancelled. +func (t *servingTask) waitOrStop() bool { + t.done() + if !t.biasAdded { + t.priority += t.sq.suspendBias + t.biasAdded = true + } + return t.start() +} + +// newServingQueue returns a new servingQueue +func newServingQueue(suspendBias int64) *servingQueue { + sq := &servingQueue{ + queue: prque.New(nil), + suspendBias: suspendBias, + tokenCh: make(chan runToken), + queueAddCh: make(chan *servingTask, 100), + queueBestCh: make(chan *servingTask), + stopThreadCh: make(chan struct{}), + quit: make(chan struct{}), + setThreadsCh: make(chan int, 10), + } + sq.wg.Add(2) + go sq.queueLoop() + go sq.threadCountLoop() + return sq +} + +// newTask creates a new task with the given priority +func (sq *servingQueue) newTask(priority int64) *servingTask { + return &servingTask{ + sq: sq, + priority: priority, + } +} + +// threadController is started in multiple goroutines and controls the execution +// of tasks. The number of active thread controllers equals the allowed number of +// concurrently running threads. It tries to fetch the highest priority queued +// task first. If there are no queued tasks waiting then it can directly catch +// run tokens from the token channel and allow the corresponding tasks to run +// without entering the priority queue. +func (sq *servingQueue) threadController() { + for { + token := make(runToken) + select { + case best := <-sq.queueBestCh: + best.tokenCh <- token + default: + select { + case best := <-sq.queueBestCh: + best.tokenCh <- token + case sq.tokenCh <- token: + case <-sq.stopThreadCh: + sq.wg.Done() + return + case <-sq.quit: + sq.wg.Done() + return + } + } + <-token + select { + case <-sq.stopThreadCh: + sq.wg.Done() + return + case <-sq.quit: + sq.wg.Done() + return + default: + } + } +} + +// addTask inserts a task into the priority queue +func (sq *servingQueue) addTask(task *servingTask) { + if sq.best == nil { + sq.best = task + } else if task.priority > sq.best.priority { + sq.queue.Push(sq.best, sq.best.priority) + sq.best = task + return + } else { + sq.queue.Push(task, task.priority) + } +} + +// queueLoop is an event loop running in a goroutine. It receives tasks from queueAddCh +// and always tries to send the highest priority task to queueBestCh. Successfully sent +// tasks are removed from the queue. +func (sq *servingQueue) queueLoop() { + for { + if sq.best != nil { + select { + case task := <-sq.queueAddCh: + sq.addTask(task) + case sq.queueBestCh <- sq.best: + if sq.queue.Size() == 0 { + sq.best = nil + } else { + sq.best, _ = sq.queue.PopItem().(*servingTask) + } + case <-sq.quit: + sq.wg.Done() + return + } + } else { + select { + case task := <-sq.queueAddCh: + sq.addTask(task) + case <-sq.quit: + sq.wg.Done() + return + } + } + } +} + +// threadCountLoop is an event loop running in a goroutine. It adjusts the number +// of active thread controller goroutines. +func (sq *servingQueue) threadCountLoop() { + var threadCountTarget int + for { + for threadCountTarget > sq.threadCount { + sq.wg.Add(1) + go sq.threadController() + sq.threadCount++ + } + if threadCountTarget < sq.threadCount { + select { + case threadCountTarget = <-sq.setThreadsCh: + case sq.stopThreadCh <- struct{}{}: + sq.threadCount-- + case <-sq.quit: + sq.wg.Done() + return + } + } else { + select { + case threadCountTarget = <-sq.setThreadsCh: + case <-sq.quit: + sq.wg.Done() + return + } + } + } +} + +// setThreads sets the allowed processing thread count, suspending tasks as soon as +// possible if necessary. +func (sq *servingQueue) setThreads(threadCount int) { + select { + case sq.setThreadsCh <- threadCount: + case <-sq.quit: + return + } +} + +// stop stops task processing as soon as possible and shuts down the serving queue. +func (sq *servingQueue) stop() { + close(sq.quit) + sq.wg.Wait() +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/txrelay.go b/vendor/github.com/ethereum/go-ethereum/les/txrelay.go index 7a02cc83..a790bbec 100644 --- a/vendor/github.com/ethereum/go-ethereum/les/txrelay.go +++ b/vendor/github.com/ethereum/go-ethereum/les/txrelay.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" ) type ltrInfo struct { @@ -113,21 +114,22 @@ func (self *LesTxRelay) send(txs types.Transactions, count int) { for p, list := range sendTo { pp := p ll := list + enc, _ := rlp.EncodeToBytes(ll) reqID := genReqID() rq := &distReq{ getCost: func(dp distPeer) uint64 { peer := dp.(*peer) - return peer.GetRequestCost(SendTxMsg, len(ll)) + return peer.GetTxRelayCost(len(ll), len(enc)) }, canSend: func(dp distPeer) bool { - return dp.(*peer) == pp + return !dp.(*peer).isOnlyAnnounce && dp.(*peer) == pp }, request: func(dp distPeer) func() { peer := dp.(*peer) - cost := peer.GetRequestCost(SendTxMsg, len(ll)) - peer.fcServer.QueueRequest(reqID, cost) - return func() { peer.SendTxs(reqID, cost, ll) } + cost := peer.GetTxRelayCost(len(ll), len(enc)) + peer.fcServer.QueuedRequest(reqID, cost) + return func() { peer.SendTxs(reqID, cost, enc) } }, } self.reqDist.queue(rq) diff --git a/vendor/github.com/ethereum/go-ethereum/les/ulc.go b/vendor/github.com/ethereum/go-ethereum/les/ulc.go new file mode 100644 index 00000000..d9f7dc76 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/ulc.go @@ -0,0 +1,39 @@ +package les + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +type ulc struct { + trustedKeys map[string]struct{} + minTrustedFraction int +} + +func newULC(ulcConfig *eth.ULCConfig) *ulc { + if ulcConfig == nil { + return nil + } + + m := make(map[string]struct{}, len(ulcConfig.TrustedServers)) + for _, id := range ulcConfig.TrustedServers { + node, err := enode.ParseV4(id) + if err != nil { + fmt.Println("node:", id, " err:", err) + continue + } + m[node.ID().String()] = struct{}{} + } + + return &ulc{m, ulcConfig.MinTrustedFraction} +} + +func (u *ulc) isTrusted(p enode.ID) bool { + if u.trustedKeys == nil { + return false + } + _, ok := u.trustedKeys[p.String()] + return ok +} diff --git a/vendor/github.com/ethereum/go-ethereum/les/ulc_test.go b/vendor/github.com/ethereum/go-ethereum/les/ulc_test.go new file mode 100644 index 00000000..81986fa1 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/les/ulc_test.go @@ -0,0 +1,238 @@ +package les + +import ( + "crypto/ecdsa" + "fmt" + "math/big" + "net" + "reflect" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestULCSyncWithOnePeer(t *testing.T) { + f := newFullPeerPair(t, 1, 4, testChainGen) + ulcConfig := ð.ULCConfig{ + MinTrustedFraction: 100, + TrustedServers: []string{f.Node.String()}, + } + + l := newLightPeer(t, ulcConfig) + + if reflect.DeepEqual(f.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Hash()) { + t.Fatal("blocks are equal") + } + + _, _, err := connectPeers(f, l, 2) + if err != nil { + t.Fatal(err) + } + + l.PM.fetcher.lock.Lock() + l.PM.fetcher.nextRequest() + l.PM.fetcher.lock.Unlock() + + if !reflect.DeepEqual(f.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Hash()) { + t.Fatal("sync doesn't work") + } +} + +func TestULCReceiveAnnounce(t *testing.T) { + f := newFullPeerPair(t, 1, 4, testChainGen) + ulcConfig := ð.ULCConfig{ + MinTrustedFraction: 100, + TrustedServers: []string{f.Node.String()}, + } + + l := newLightPeer(t, ulcConfig) + fPeer, lPeer, err := connectPeers(f, l, 2) + if err != nil { + t.Fatal(err) + } + + l.PM.synchronise(fPeer) + + //check that the sync is finished correctly + if !reflect.DeepEqual(f.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Hash()) { + t.Fatal("sync doesn't work") + } + + l.PM.peers.lock.Lock() + if len(l.PM.peers.peers) == 0 { + t.Fatal("peer list should not be empty") + } + l.PM.peers.lock.Unlock() + + time.Sleep(time.Second) + //send a signed announce message(payload doesn't matter) + td := f.PM.blockchain.GetTd(l.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Number.Uint64()) + announce := announceData{ + Number: l.PM.blockchain.CurrentHeader().Number.Uint64() + 1, + Td: td.Add(td, big.NewInt(1)), + } + announce.sign(f.Key) + lPeer.SendAnnounce(announce) +} + +func TestULCShouldNotSyncWithTwoPeersOneHaveEmptyChain(t *testing.T) { + f1 := newFullPeerPair(t, 1, 4, testChainGen) + f2 := newFullPeerPair(t, 2, 0, nil) + ulcConf := &ulc{minTrustedFraction: 100, trustedKeys: make(map[string]struct{})} + ulcConf.trustedKeys[f1.Node.ID().String()] = struct{}{} + ulcConf.trustedKeys[f2.Node.ID().String()] = struct{}{} + ulcConfig := ð.ULCConfig{ + MinTrustedFraction: 100, + TrustedServers: []string{f1.Node.String(), f2.Node.String()}, + } + l := newLightPeer(t, ulcConfig) + l.PM.ulc.minTrustedFraction = 100 + + _, _, err := connectPeers(f1, l, 2) + if err != nil { + t.Fatal(err) + } + _, _, err = connectPeers(f2, l, 2) + if err != nil { + t.Fatal(err) + } + + l.PM.fetcher.lock.Lock() + l.PM.fetcher.nextRequest() + l.PM.fetcher.lock.Unlock() + + if reflect.DeepEqual(f2.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Hash()) { + t.Fatal("Incorrect hash: second peer has empty chain") + } +} + +func TestULCShouldNotSyncWithThreePeersOneHaveEmptyChain(t *testing.T) { + f1 := newFullPeerPair(t, 1, 3, testChainGen) + f2 := newFullPeerPair(t, 2, 4, testChainGen) + f3 := newFullPeerPair(t, 3, 0, nil) + + ulcConfig := ð.ULCConfig{ + MinTrustedFraction: 60, + TrustedServers: []string{f1.Node.String(), f2.Node.String(), f3.Node.String()}, + } + + l := newLightPeer(t, ulcConfig) + _, _, err := connectPeers(f1, l, 2) + if err != nil { + t.Fatal(err) + } + + _, _, err = connectPeers(f2, l, 2) + if err != nil { + t.Fatal(err) + } + + _, _, err = connectPeers(f3, l, 2) + if err != nil { + t.Fatal(err) + } + + l.PM.fetcher.lock.Lock() + l.PM.fetcher.nextRequest() + l.PM.fetcher.lock.Unlock() + + if !reflect.DeepEqual(f1.PM.blockchain.CurrentHeader().Hash(), l.PM.blockchain.CurrentHeader().Hash()) { + t.Fatal("Incorrect hash") + } +} + +type pairPeer struct { + Name string + Node *enode.Node + PM *ProtocolManager + Key *ecdsa.PrivateKey +} + +func connectPeers(full, light pairPeer, version int) (*peer, *peer, error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() + + peerLight := full.PM.newPeer(version, NetworkId, p2p.NewPeer(light.Node.ID(), light.Name, nil), net) + peerFull := light.PM.newPeer(version, NetworkId, p2p.NewPeer(full.Node.ID(), full.Name, nil), app) + + // Start the peerLight on a new thread + errc1 := make(chan error, 1) + errc2 := make(chan error, 1) + go func() { + select { + case light.PM.newPeerCh <- peerFull: + errc1 <- light.PM.handle(peerFull) + case <-light.PM.quitSync: + errc1 <- p2p.DiscQuitting + } + }() + go func() { + select { + case full.PM.newPeerCh <- peerLight: + errc2 <- full.PM.handle(peerLight) + case <-full.PM.quitSync: + errc2 <- p2p.DiscQuitting + } + }() + + select { + case <-time.After(time.Millisecond * 100): + case err := <-errc1: + return nil, nil, fmt.Errorf("peerLight handshake error: %v", err) + case err := <-errc2: + return nil, nil, fmt.Errorf("peerFull handshake error: %v", err) + } + + return peerFull, peerLight, nil +} + +// newFullPeerPair creates node with full sync mode +func newFullPeerPair(t *testing.T, index int, numberOfblocks int, chainGen func(int, *core.BlockGen)) pairPeer { + db := rawdb.NewMemoryDatabase() + + pmFull := newTestProtocolManagerMust(t, false, numberOfblocks, chainGen, nil, nil, db, nil) + + peerPairFull := pairPeer{ + Name: "full node", + PM: pmFull, + } + key, err := crypto.GenerateKey() + if err != nil { + t.Fatal("generate key err:", err) + } + peerPairFull.Key = key + peerPairFull.Node = enode.NewV4(&key.PublicKey, net.ParseIP("127.0.0.1"), 35000, 35000) + return peerPairFull +} + +// newLightPeer creates node with light sync mode +func newLightPeer(t *testing.T, ulcConfig *eth.ULCConfig) pairPeer { + peers := newPeerSet() + dist := newRequestDistributor(peers, make(chan struct{}), &mclock.System{}) + rm := newRetrieveManager(peers, dist, nil) + ldb := rawdb.NewMemoryDatabase() + + odr := NewLesOdr(ldb, light.DefaultClientIndexerConfig, rm) + + pmLight := newTestProtocolManagerMust(t, true, 0, nil, odr, peers, ldb, ulcConfig) + peerPairLight := pairPeer{ + Name: "ulc node", + PM: pmLight, + } + + key, err := crypto.GenerateKey() + if err != nil { + t.Fatal("generate key err:", err) + } + peerPairLight.Key = key + peerPairLight.Node = enode.NewV4(&key.PublicKey, net.IP{}, 35000, 35000) + return peerPairLight +} diff --git a/vendor/github.com/ethereum/go-ethereum/light/lightchain.go b/vendor/github.com/ethereum/go-ethereum/light/lightchain.go index 8e2734c2..38f1f634 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/lightchain.go +++ b/vendor/github.com/ethereum/go-ethereum/light/lightchain.go @@ -14,6 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +// Package light implements on-demand retrieval capable state and chain objects +// for the Ethereum Light Client. package light import ( @@ -35,7 +37,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "github.com/hashicorp/golang-lru" + lru "github.com/hashicorp/golang-lru" ) var ( @@ -50,6 +52,7 @@ type LightChain struct { hc *core.HeaderChain indexerConfig *IndexerConfig chainDb ethdb.Database + engine consensus.Engine odr OdrBackend chainFeed event.Feed chainSideFeed event.Feed @@ -57,20 +60,18 @@ type LightChain struct { scope event.SubscriptionScope genesisBlock *types.Block - mu sync.RWMutex - chainmu sync.RWMutex - bodyCache *lru.Cache // Cache for the most recent block bodies bodyRLPCache *lru.Cache // Cache for the most recent block bodies in RLP encoded format blockCache *lru.Cache // Cache for the most recent entire blocks + chainmu sync.RWMutex // protects header inserts quit chan struct{} - running int32 // running must be called automically - // procInterrupt must be atomically called - procInterrupt int32 // interrupt signaler for block processing - wg sync.WaitGroup + wg sync.WaitGroup - engine consensus.Engine + // Atomic boolean switches: + running int32 // whether LightChain is running or stopped + procInterrupt int32 // interrupts chain insert + disableCheckFreq int32 // disables header verification } // NewLightChain returns a fully initialised light chain using information @@ -118,45 +119,45 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus. } // addTrustedCheckpoint adds a trusted checkpoint to the blockchain -func (self *LightChain) addTrustedCheckpoint(cp *params.TrustedCheckpoint) { - if self.odr.ChtIndexer() != nil { - StoreChtRoot(self.chainDb, cp.SectionIndex, cp.SectionHead, cp.CHTRoot) - self.odr.ChtIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) +func (lc *LightChain) addTrustedCheckpoint(cp *params.TrustedCheckpoint) { + if lc.odr.ChtIndexer() != nil { + StoreChtRoot(lc.chainDb, cp.SectionIndex, cp.SectionHead, cp.CHTRoot) + lc.odr.ChtIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - if self.odr.BloomTrieIndexer() != nil { - StoreBloomTrieRoot(self.chainDb, cp.SectionIndex, cp.SectionHead, cp.BloomRoot) - self.odr.BloomTrieIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) + if lc.odr.BloomTrieIndexer() != nil { + StoreBloomTrieRoot(lc.chainDb, cp.SectionIndex, cp.SectionHead, cp.BloomRoot) + lc.odr.BloomTrieIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - if self.odr.BloomIndexer() != nil { - self.odr.BloomIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) + if lc.odr.BloomIndexer() != nil { + lc.odr.BloomIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - log.Info("Added trusted checkpoint", "chain", cp.Name, "block", (cp.SectionIndex+1)*self.indexerConfig.ChtSize-1, "hash", cp.SectionHead) + log.Info("Added trusted checkpoint", "chain", cp.Name, "block", (cp.SectionIndex+1)*lc.indexerConfig.ChtSize-1, "hash", cp.SectionHead) } -func (self *LightChain) getProcInterrupt() bool { - return atomic.LoadInt32(&self.procInterrupt) == 1 +func (lc *LightChain) getProcInterrupt() bool { + return atomic.LoadInt32(&lc.procInterrupt) == 1 } // Odr returns the ODR backend of the chain -func (self *LightChain) Odr() OdrBackend { - return self.odr +func (lc *LightChain) Odr() OdrBackend { + return lc.odr } // loadLastState loads the last known chain state from the database. This method // assumes that the chain manager mutex is held. -func (self *LightChain) loadLastState() error { - if head := rawdb.ReadHeadHeaderHash(self.chainDb); head == (common.Hash{}) { +func (lc *LightChain) loadLastState() error { + if head := rawdb.ReadHeadHeaderHash(lc.chainDb); head == (common.Hash{}) { // Corrupt or empty database, init from scratch - self.Reset() + lc.Reset() } else { - if header := self.GetHeaderByHash(head); header != nil { - self.hc.SetCurrentHeader(header) + if header := lc.GetHeaderByHash(head); header != nil { + lc.hc.SetCurrentHeader(header) } } // Issue a status log and return - header := self.hc.CurrentHeader() - headerTd := self.GetTd(header.Hash(), header.Number.Uint64()) + header := lc.hc.CurrentHeader() + headerTd := lc.GetTd(header.Hash(), header.Number.Uint64()) log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0))) return nil @@ -164,181 +165,180 @@ func (self *LightChain) loadLastState() error { // SetHead rewinds the local chain to a new head. Everything above the new // head will be deleted and the new one set. -func (bc *LightChain) SetHead(head uint64) { - bc.mu.Lock() - defer bc.mu.Unlock() +func (lc *LightChain) SetHead(head uint64) { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() - bc.hc.SetHead(head, nil) - bc.loadLastState() + lc.hc.SetHead(head, nil) + lc.loadLastState() } // GasLimit returns the gas limit of the current HEAD block. -func (self *LightChain) GasLimit() uint64 { - return self.hc.CurrentHeader().GasLimit +func (lc *LightChain) GasLimit() uint64 { + return lc.hc.CurrentHeader().GasLimit } // Reset purges the entire blockchain, restoring it to its genesis state. -func (bc *LightChain) Reset() { - bc.ResetWithGenesisBlock(bc.genesisBlock) +func (lc *LightChain) Reset() { + lc.ResetWithGenesisBlock(lc.genesisBlock) } // ResetWithGenesisBlock purges the entire blockchain, restoring it to the // specified genesis state. -func (bc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { +func (lc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { // Dump the entire block chain and purge the caches - bc.SetHead(0) + lc.SetHead(0) - bc.mu.Lock() - defer bc.mu.Unlock() + lc.chainmu.Lock() + defer lc.chainmu.Unlock() // Prepare the genesis block and reinitialise the chain - rawdb.WriteTd(bc.chainDb, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) - rawdb.WriteBlock(bc.chainDb, genesis) + rawdb.WriteTd(lc.chainDb, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) + rawdb.WriteBlock(lc.chainDb, genesis) - bc.genesisBlock = genesis - bc.hc.SetGenesis(bc.genesisBlock.Header()) - bc.hc.SetCurrentHeader(bc.genesisBlock.Header()) + lc.genesisBlock = genesis + lc.hc.SetGenesis(lc.genesisBlock.Header()) + lc.hc.SetCurrentHeader(lc.genesisBlock.Header()) } // Accessors // Engine retrieves the light chain's consensus engine. -func (bc *LightChain) Engine() consensus.Engine { return bc.engine } +func (lc *LightChain) Engine() consensus.Engine { return lc.engine } // Genesis returns the genesis block -func (bc *LightChain) Genesis() *types.Block { - return bc.genesisBlock +func (lc *LightChain) Genesis() *types.Block { + return lc.genesisBlock } -// State returns a new mutable state based on the current HEAD block. -func (bc *LightChain) State() (*state.StateDB, error) { - return nil, errors.New("not implemented, needs client/server interface split") +func (lc *LightChain) StateCache() state.Database { + panic("not implemented") } // GetBody retrieves a block body (transactions and uncles) from the database // or ODR service by hash, caching it if found. -func (self *LightChain) GetBody(ctx context.Context, hash common.Hash) (*types.Body, error) { +func (lc *LightChain) GetBody(ctx context.Context, hash common.Hash) (*types.Body, error) { // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := self.bodyCache.Get(hash); ok { + if cached, ok := lc.bodyCache.Get(hash); ok { body := cached.(*types.Body) return body, nil } - number := self.hc.GetBlockNumber(hash) + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - body, err := GetBody(ctx, self.odr, hash, *number) + body, err := GetBody(ctx, lc.odr, hash, *number) if err != nil { return nil, err } // Cache the found body for next time and return - self.bodyCache.Add(hash, body) + lc.bodyCache.Add(hash, body) return body, nil } // GetBodyRLP retrieves a block body in RLP encoding from the database or // ODR service by hash, caching it if found. -func (self *LightChain) GetBodyRLP(ctx context.Context, hash common.Hash) (rlp.RawValue, error) { +func (lc *LightChain) GetBodyRLP(ctx context.Context, hash common.Hash) (rlp.RawValue, error) { // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := self.bodyRLPCache.Get(hash); ok { + if cached, ok := lc.bodyRLPCache.Get(hash); ok { return cached.(rlp.RawValue), nil } - number := self.hc.GetBlockNumber(hash) + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - body, err := GetBodyRLP(ctx, self.odr, hash, *number) + body, err := GetBodyRLP(ctx, lc.odr, hash, *number) if err != nil { return nil, err } // Cache the found body for next time and return - self.bodyRLPCache.Add(hash, body) + lc.bodyRLPCache.Add(hash, body) return body, nil } // HasBlock checks if a block is fully present in the database or not, caching // it if present. -func (bc *LightChain) HasBlock(hash common.Hash, number uint64) bool { - blk, _ := bc.GetBlock(NoOdr, hash, number) +func (lc *LightChain) HasBlock(hash common.Hash, number uint64) bool { + blk, _ := lc.GetBlock(NoOdr, hash, number) return blk != nil } // GetBlock retrieves a block from the database or ODR service by hash and number, // caching it if found. -func (self *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) { +func (lc *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) { // Short circuit if the block's already in the cache, retrieve otherwise - if block, ok := self.blockCache.Get(hash); ok { + if block, ok := lc.blockCache.Get(hash); ok { return block.(*types.Block), nil } - block, err := GetBlock(ctx, self.odr, hash, number) + block, err := GetBlock(ctx, lc.odr, hash, number) if err != nil { return nil, err } // Cache the found block for next time and return - self.blockCache.Add(block.Hash(), block) + lc.blockCache.Add(block.Hash(), block) return block, nil } // GetBlockByHash retrieves a block from the database or ODR service by hash, // caching it if found. -func (self *LightChain) GetBlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - number := self.hc.GetBlockNumber(hash) +func (lc *LightChain) GetBlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - return self.GetBlock(ctx, hash, *number) + return lc.GetBlock(ctx, hash, *number) } // GetBlockByNumber retrieves a block from the database or ODR service by // number, caching it (associated with its hash) if found. -func (self *LightChain) GetBlockByNumber(ctx context.Context, number uint64) (*types.Block, error) { - hash, err := GetCanonicalHash(ctx, self.odr, number) +func (lc *LightChain) GetBlockByNumber(ctx context.Context, number uint64) (*types.Block, error) { + hash, err := GetCanonicalHash(ctx, lc.odr, number) if hash == (common.Hash{}) || err != nil { return nil, err } - return self.GetBlock(ctx, hash, number) + return lc.GetBlock(ctx, hash, number) } // Stop stops the blockchain service. If any imports are currently in progress // it will abort them using the procInterrupt. -func (bc *LightChain) Stop() { - if !atomic.CompareAndSwapInt32(&bc.running, 0, 1) { +func (lc *LightChain) Stop() { + if !atomic.CompareAndSwapInt32(&lc.running, 0, 1) { return } - close(bc.quit) - atomic.StoreInt32(&bc.procInterrupt, 1) + close(lc.quit) + atomic.StoreInt32(&lc.procInterrupt, 1) - bc.wg.Wait() + lc.wg.Wait() log.Info("Blockchain manager stopped") } // Rollback is designed to remove a chain of links from the database that aren't // certain enough to be valid. -func (self *LightChain) Rollback(chain []common.Hash) { - self.mu.Lock() - defer self.mu.Unlock() +func (lc *LightChain) Rollback(chain []common.Hash) { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() for i := len(chain) - 1; i >= 0; i-- { hash := chain[i] - if head := self.hc.CurrentHeader(); head.Hash() == hash { - self.hc.SetCurrentHeader(self.GetHeader(head.ParentHash, head.Number.Uint64()-1)) + if head := lc.hc.CurrentHeader(); head.Hash() == hash { + lc.hc.SetCurrentHeader(lc.GetHeader(head.ParentHash, head.Number.Uint64()-1)) } } } // postChainEvents iterates over the events generated by a chain insertion and // posts them into the event feed. -func (self *LightChain) postChainEvents(events []interface{}) { +func (lc *LightChain) postChainEvents(events []interface{}) { for _, event := range events { switch ev := event.(type) { case core.ChainEvent: - if self.CurrentHeader().Hash() == ev.Hash { - self.chainHeadFeed.Send(core.ChainHeadEvent{Block: ev.Block}) + if lc.CurrentHeader().Hash() == ev.Hash { + lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: ev.Block}) } - self.chainFeed.Send(ev) + lc.chainFeed.Send(ev) case core.ChainSideEvent: - self.chainSideFeed.Send(ev) + lc.chainSideFeed.Send(ev) } } } @@ -354,28 +354,25 @@ func (self *LightChain) postChainEvents(events []interface{}) { // // In the case of a light chain, InsertHeaderChain also creates and posts light // chain events when necessary. -func (self *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { +func (lc *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { + if atomic.LoadInt32(&lc.disableCheckFreq) == 1 { + checkFreq = 0 + } start := time.Now() - if i, err := self.hc.ValidateHeaderChain(chain, checkFreq); err != nil { + if i, err := lc.hc.ValidateHeaderChain(chain, checkFreq); err != nil { return i, err } // Make sure only one thread manipulates the chain at once - self.chainmu.Lock() - defer func() { - self.chainmu.Unlock() - time.Sleep(time.Millisecond * 10) // ugly hack; do not hog chain lock in case syncing is CPU-limited by validation - }() + lc.chainmu.Lock() + defer lc.chainmu.Unlock() - self.wg.Add(1) - defer self.wg.Done() + lc.wg.Add(1) + defer lc.wg.Done() var events []interface{} whFunc := func(header *types.Header) error { - self.mu.Lock() - defer self.mu.Unlock() - - status, err := self.hc.WriteHeader(header) + status, err := lc.hc.WriteHeader(header) switch status { case core.CanonStatTy: @@ -388,51 +385,51 @@ func (self *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) } return err } - i, err := self.hc.InsertHeaderChain(chain, whFunc, start) - self.postChainEvents(events) + i, err := lc.hc.InsertHeaderChain(chain, whFunc, start) + lc.postChainEvents(events) return i, err } // CurrentHeader retrieves the current head header of the canonical chain. The // header is retrieved from the HeaderChain's internal cache. -func (self *LightChain) CurrentHeader() *types.Header { - return self.hc.CurrentHeader() +func (lc *LightChain) CurrentHeader() *types.Header { + return lc.hc.CurrentHeader() } // GetTd retrieves a block's total difficulty in the canonical chain from the // database by hash and number, caching it if found. -func (self *LightChain) GetTd(hash common.Hash, number uint64) *big.Int { - return self.hc.GetTd(hash, number) +func (lc *LightChain) GetTd(hash common.Hash, number uint64) *big.Int { + return lc.hc.GetTd(hash, number) } // GetTdByHash retrieves a block's total difficulty in the canonical chain from the // database by hash, caching it if found. -func (self *LightChain) GetTdByHash(hash common.Hash) *big.Int { - return self.hc.GetTdByHash(hash) +func (lc *LightChain) GetTdByHash(hash common.Hash) *big.Int { + return lc.hc.GetTdByHash(hash) } // GetHeader retrieves a block header from the database by hash and number, // caching it if found. -func (self *LightChain) GetHeader(hash common.Hash, number uint64) *types.Header { - return self.hc.GetHeader(hash, number) +func (lc *LightChain) GetHeader(hash common.Hash, number uint64) *types.Header { + return lc.hc.GetHeader(hash, number) } // GetHeaderByHash retrieves a block header from the database by hash, caching it if // found. -func (self *LightChain) GetHeaderByHash(hash common.Hash) *types.Header { - return self.hc.GetHeaderByHash(hash) +func (lc *LightChain) GetHeaderByHash(hash common.Hash) *types.Header { + return lc.hc.GetHeaderByHash(hash) } // HasHeader checks if a block header is present in the database or not, caching // it if present. -func (bc *LightChain) HasHeader(hash common.Hash, number uint64) bool { - return bc.hc.HasHeader(hash, number) +func (lc *LightChain) HasHeader(hash common.Hash, number uint64) bool { + return lc.hc.HasHeader(hash, number) } // GetBlockHashesFromHash retrieves a number of block hashes starting at a given // hash, fetching towards the genesis block. -func (self *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { - return self.hc.GetBlockHashesFromHash(hash, max) +func (lc *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { + return lc.hc.GetBlockHashesFromHash(hash, max) } // GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or @@ -440,56 +437,56 @@ func (self *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []c // number of blocks to be individually checked before we reach the canonical chain. // // Note: ancestor == 0 returns the same block, 1 returns its parent and so on. -func (bc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - bc.chainmu.Lock() - defer bc.chainmu.Unlock() +func (lc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { + lc.chainmu.RLock() + defer lc.chainmu.RUnlock() - return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) + return lc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) } // GetHeaderByNumber retrieves a block header from the database by number, // caching it (associated with its hash) if found. -func (self *LightChain) GetHeaderByNumber(number uint64) *types.Header { - return self.hc.GetHeaderByNumber(number) +func (lc *LightChain) GetHeaderByNumber(number uint64) *types.Header { + return lc.hc.GetHeaderByNumber(number) } // GetHeaderByNumberOdr retrieves a block header from the database or network // by number, caching it (associated with its hash) if found. -func (self *LightChain) GetHeaderByNumberOdr(ctx context.Context, number uint64) (*types.Header, error) { - if header := self.hc.GetHeaderByNumber(number); header != nil { +func (lc *LightChain) GetHeaderByNumberOdr(ctx context.Context, number uint64) (*types.Header, error) { + if header := lc.hc.GetHeaderByNumber(number); header != nil { return header, nil } - return GetHeaderByNumber(ctx, self.odr, number) + return GetHeaderByNumber(ctx, lc.odr, number) } // Config retrieves the header chain's chain configuration. -func (self *LightChain) Config() *params.ChainConfig { return self.hc.Config() } +func (lc *LightChain) Config() *params.ChainConfig { return lc.hc.Config() } -func (self *LightChain) SyncCht(ctx context.Context) bool { +func (lc *LightChain) SyncCht(ctx context.Context) bool { // If we don't have a CHT indexer, abort - if self.odr.ChtIndexer() == nil { + if lc.odr.ChtIndexer() == nil { return false } // Ensure the remote CHT head is ahead of us - head := self.CurrentHeader().Number.Uint64() - sections, _, _ := self.odr.ChtIndexer().Sections() + head := lc.CurrentHeader().Number.Uint64() + sections, _, _ := lc.odr.ChtIndexer().Sections() - latest := sections*self.indexerConfig.ChtSize - 1 - if clique := self.hc.Config().Clique; clique != nil { + latest := sections*lc.indexerConfig.ChtSize - 1 + if clique := lc.hc.Config().Clique; clique != nil { latest -= latest % clique.Epoch // epoch snapshot for clique } if head >= latest { return false } // Retrieve the latest useful header and update to it - if header, err := GetHeaderByNumber(ctx, self.odr, latest); header != nil && err == nil { - self.mu.Lock() - defer self.mu.Unlock() + if header, err := GetHeaderByNumber(ctx, lc.odr, latest); header != nil && err == nil { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() // Ensure the chain didn't move past the latest block while retrieving it - if self.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() { + if lc.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() { log.Info("Updated latest header based on CHT", "number", header.Number, "hash", header.Hash(), "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0))) - self.hc.SetCurrentHeader(header) + lc.hc.SetCurrentHeader(header) } return true } @@ -498,38 +495,48 @@ func (self *LightChain) SyncCht(ctx context.Context) bool { // LockChain locks the chain mutex for reading so that multiple canonical hashes can be // retrieved while it is guaranteed that they belong to the same version of the chain -func (self *LightChain) LockChain() { - self.chainmu.RLock() +func (lc *LightChain) LockChain() { + lc.chainmu.RLock() } // UnlockChain unlocks the chain mutex -func (self *LightChain) UnlockChain() { - self.chainmu.RUnlock() +func (lc *LightChain) UnlockChain() { + lc.chainmu.RUnlock() } // SubscribeChainEvent registers a subscription of ChainEvent. -func (self *LightChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { - return self.scope.Track(self.chainFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { + return lc.scope.Track(lc.chainFeed.Subscribe(ch)) } // SubscribeChainHeadEvent registers a subscription of ChainHeadEvent. -func (self *LightChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { - return self.scope.Track(self.chainHeadFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { + return lc.scope.Track(lc.chainHeadFeed.Subscribe(ch)) } // SubscribeChainSideEvent registers a subscription of ChainSideEvent. -func (self *LightChain) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { - return self.scope.Track(self.chainSideFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { + return lc.scope.Track(lc.chainSideFeed.Subscribe(ch)) } // SubscribeLogsEvent implements the interface of filters.Backend // LightChain does not send logs events, so return an empty subscription. -func (self *LightChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { - return self.scope.Track(new(event.Feed).Subscribe(ch)) +func (lc *LightChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { + return lc.scope.Track(new(event.Feed).Subscribe(ch)) } // SubscribeRemovedLogsEvent implements the interface of filters.Backend // LightChain does not send core.RemovedLogsEvent, so return an empty subscription. -func (self *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { - return self.scope.Track(new(event.Feed).Subscribe(ch)) +func (lc *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { + return lc.scope.Track(new(event.Feed).Subscribe(ch)) +} + +// DisableCheckFreq disables header validation. This is used for ultralight mode. +func (lc *LightChain) DisableCheckFreq() { + atomic.StoreInt32(&lc.disableCheckFreq, 1) +} + +// EnableCheckFreq enables header validation. +func (lc *LightChain) EnableCheckFreq() { + atomic.StoreInt32(&lc.disableCheckFreq, 0) } diff --git a/vendor/github.com/ethereum/go-ethereum/light/lightchain_test.go b/vendor/github.com/ethereum/go-ethereum/light/lightchain_test.go index d45c0656..58ea9304 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/lightchain_test.go +++ b/vendor/github.com/ethereum/go-ethereum/light/lightchain_test.go @@ -52,7 +52,7 @@ func makeHeaderChain(parent *types.Header, n int, db ethdb.Database, seed int) [ // chain. Depending on the full flag, if creates either a full block chain or a // header only chain. func newCanonical(n int) (ethdb.Database, *LightChain, error) { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := core.Genesis{Config: params.TestChainConfig} genesis := gspec.MustCommit(db) blockchain, _ := NewLightChain(&dummyOdr{db: db, indexerConfig: TestClientIndexerConfig}, gspec.Config, ethash.NewFaker()) @@ -69,7 +69,7 @@ func newCanonical(n int) (ethdb.Database, *LightChain, error) { // newTestLightChain creates a LightChain that doesn't validate anything. func newTestLightChain() *LightChain { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := &core.Genesis{ Difficulty: big.NewInt(1), Config: params.TestChainConfig, @@ -122,10 +122,10 @@ func testHeaderChainImport(chain []*types.Header, lightchain *LightChain) error return err } // Manually insert the header into the database, but don't reorganize (allows subsequent testing) - lightchain.mu.Lock() + lightchain.chainmu.Lock() rawdb.WriteTd(lightchain.chainDb, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, lightchain.GetTdByHash(header.ParentHash))) rawdb.WriteHeader(lightchain.chainDb, header) - lightchain.mu.Unlock() + lightchain.chainmu.Unlock() } return nil } diff --git a/vendor/github.com/ethereum/go-ethereum/light/nodeset.go b/vendor/github.com/ethereum/go-ethereum/light/nodeset.go index 6f25219c..a8bf4f6c 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/nodeset.go +++ b/vendor/github.com/ethereum/go-ethereum/light/nodeset.go @@ -60,6 +60,15 @@ func (db *NodeSet) Put(key []byte, value []byte) error { return nil } +// Delete removes a node from the set +func (db *NodeSet) Delete(key []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + delete(db.nodes, string(key)) + return nil +} + // Get returns a stored node func (db *NodeSet) Get(key []byte) ([]byte, error) { db.lock.RLock() @@ -106,7 +115,7 @@ func (db *NodeSet) NodeList() NodeList { } // Store writes the contents of the set to the given database -func (db *NodeSet) Store(target ethdb.Putter) { +func (db *NodeSet) Store(target ethdb.Writer) { db.lock.RLock() defer db.lock.RUnlock() @@ -115,11 +124,11 @@ func (db *NodeSet) Store(target ethdb.Putter) { } } -// NodeList stores an ordered list of trie nodes. It implements ethdb.Putter. +// NodeList stores an ordered list of trie nodes. It implements ethdb.Writer. type NodeList []rlp.RawValue // Store writes the contents of the list to the given database -func (n NodeList) Store(db ethdb.Putter) { +func (n NodeList) Store(db ethdb.Writer) { for _, node := range n { db.Put(crypto.Keccak256(node), node) } @@ -138,6 +147,11 @@ func (n *NodeList) Put(key []byte, value []byte) error { return nil } +// Delete panics as there's no reason to remove a node from the list. +func (n *NodeList) Delete(key []byte) error { + panic("not supported") +} + // DataSize returns the aggregated data size of nodes in the list func (n NodeList) DataSize() int { var size int diff --git a/vendor/github.com/ethereum/go-ethereum/light/odr.go b/vendor/github.com/ethereum/go-ethereum/light/odr.go index 900be054..95f1948e 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/odr.go +++ b/vendor/github.com/ethereum/go-ethereum/light/odr.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package light import ( diff --git a/vendor/github.com/ethereum/go-ethereum/light/odr_test.go b/vendor/github.com/ethereum/go-ethereum/light/odr_test.go index 3da7b305..c1762c43 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/odr_test.go +++ b/vendor/github.com/ethereum/go-ethereum/light/odr_test.go @@ -250,8 +250,8 @@ func testChainGen(i int, block *core.BlockGen) { func testChainOdr(t *testing.T, protocol int, fn odrTestFn) { var ( - sdb = ethdb.NewMemDatabase() - ldb = ethdb.NewMemDatabase() + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(sdb) ) diff --git a/vendor/github.com/ethereum/go-ethereum/light/odr_util.go b/vendor/github.com/ethereum/go-ethereum/light/odr_util.go index 073f0d64..00103a76 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/odr_util.go +++ b/vendor/github.com/ethereum/go-ethereum/light/odr_util.go @@ -28,7 +28,7 @@ import ( "github.com/ethereum/go-ethereum/rlp" ) -var sha3_nil = crypto.Keccak256Hash(nil) +var sha3Nil = crypto.Keccak256Hash(nil) func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*types.Header, error) { db := odr.Database() diff --git a/vendor/github.com/ethereum/go-ethereum/light/postprocess.go b/vendor/github.com/ethereum/go-ethereum/light/postprocess.go index dd1b74a7..2030782b 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/postprocess.go +++ b/vendor/github.com/ethereum/go-ethereum/light/postprocess.go @@ -154,7 +154,7 @@ type ChtIndexerBackend struct { // NewChtIndexer creates a Cht chain indexer func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64) *core.ChainIndexer { - trieTable := ethdb.NewTable(db, ChtTablePrefix) + trieTable := rawdb.NewTable(db, ChtTablePrefix) backend := &ChtIndexerBackend{ diskdb: db, odr: odr, @@ -162,7 +162,7 @@ func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64) *co triedb: trie.NewDatabaseWithCache(trieTable, 1), // Use a tiny cache only to keep memory down sectionSize: size, } - return core.NewChainIndexer(db, ethdb.NewTable(db, "chtIndex-"), backend, size, confirms, time.Millisecond*100, "cht") + return core.NewChainIndexer(db, rawdb.NewTable(db, "chtIndex-"), backend, size, confirms, time.Millisecond*100, "cht") } // fetchMissingNodes tries to retrieve the last entry of the latest trusted CHT from the @@ -276,7 +276,7 @@ type BloomTrieIndexerBackend struct { // NewBloomTrieIndexer creates a BloomTrie chain indexer func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uint64) *core.ChainIndexer { - trieTable := ethdb.NewTable(db, BloomTrieTablePrefix) + trieTable := rawdb.NewTable(db, BloomTrieTablePrefix) backend := &BloomTrieIndexerBackend{ diskdb: db, odr: odr, @@ -287,7 +287,7 @@ func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uin } backend.bloomTrieRatio = size / parentSize backend.sectionHeads = make([]common.Hash, backend.bloomTrieRatio) - return core.NewChainIndexer(db, ethdb.NewTable(db, "bltIndex-"), backend, size, 0, time.Millisecond*100, "bloomtrie") + return core.NewChainIndexer(db, rawdb.NewTable(db, "bltIndex-"), backend, size, 0, time.Millisecond*100, "bloomtrie") } // fetchMissingNodes tries to retrieve the last entries of the latest trusted bloom trie from the diff --git a/vendor/github.com/ethereum/go-ethereum/light/trie.go b/vendor/github.com/ethereum/go-ethereum/light/trie.go index ab4e18b4..27abb1dc 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/trie.go +++ b/vendor/github.com/ethereum/go-ethereum/light/trie.go @@ -67,7 +67,7 @@ func (db *odrDatabase) CopyTrie(t state.Trie) state.Trie { } func (db *odrDatabase) ContractCode(addrHash, codeHash common.Hash) ([]byte, error) { - if codeHash == sha3_nil { + if codeHash == sha3Nil { return nil, nil } if code, err := db.backend.Database().Get(codeHash[:]); err == nil { @@ -141,7 +141,7 @@ func (t *odrTrie) GetKey(sha []byte) []byte { return nil } -func (t *odrTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *odrTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Writer) error { return errors.New("not implemented, needs client/server interface split") } diff --git a/vendor/github.com/ethereum/go-ethereum/light/trie_test.go b/vendor/github.com/ethereum/go-ethereum/light/trie_test.go index 5b5fce31..4919f896 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/trie_test.go +++ b/vendor/github.com/ethereum/go-ethereum/light/trie_test.go @@ -25,17 +25,17 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" ) func TestNodeIterator(t *testing.T) { var ( - fulldb = ethdb.NewMemDatabase() - lightdb = ethdb.NewMemDatabase() + fulldb = rawdb.NewMemoryDatabase() + lightdb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(fulldb) ) diff --git a/vendor/github.com/ethereum/go-ethereum/light/txpool.go b/vendor/github.com/ethereum/go-ethereum/light/txpool.go index 767a797b..e945ef2e 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/txpool.go +++ b/vendor/github.com/ethereum/go-ethereum/light/txpool.go @@ -390,81 +390,81 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error // add validates a new transaction and sets its state pending if processable. // It also updates the locally stored nonce if necessary. -func (self *TxPool) add(ctx context.Context, tx *types.Transaction) error { +func (pool *TxPool) add(ctx context.Context, tx *types.Transaction) error { hash := tx.Hash() - if self.pending[hash] != nil { + if pool.pending[hash] != nil { return fmt.Errorf("Known transaction (%x)", hash[:4]) } - err := self.validateTx(ctx, tx) + err := pool.validateTx(ctx, tx) if err != nil { return err } - if _, ok := self.pending[hash]; !ok { - self.pending[hash] = tx + if _, ok := pool.pending[hash]; !ok { + pool.pending[hash] = tx nonce := tx.Nonce() + 1 - addr, _ := types.Sender(self.signer, tx) - if nonce > self.nonce[addr] { - self.nonce[addr] = nonce + addr, _ := types.Sender(pool.signer, tx) + if nonce > pool.nonce[addr] { + pool.nonce[addr] = nonce } // Notify the subscribers. This event is posted in a goroutine // because it's possible that somewhere during the post "Remove transaction" // gets called which will then wait for the global tx pool lock and deadlock. - go self.txFeed.Send(core.NewTxsEvent{Txs: types.Transactions{tx}}) + go pool.txFeed.Send(core.NewTxsEvent{Txs: types.Transactions{tx}}) } // Print a log message if low enough level is set - log.Debug("Pooled new transaction", "hash", hash, "from", log.Lazy{Fn: func() common.Address { from, _ := types.Sender(self.signer, tx); return from }}, "to", tx.To()) + log.Debug("Pooled new transaction", "hash", hash, "from", log.Lazy{Fn: func() common.Address { from, _ := types.Sender(pool.signer, tx); return from }}, "to", tx.To()) return nil } // Add adds a transaction to the pool if valid and passes it to the tx relay // backend -func (self *TxPool) Add(ctx context.Context, tx *types.Transaction) error { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) Add(ctx context.Context, tx *types.Transaction) error { + pool.mu.Lock() + defer pool.mu.Unlock() data, err := rlp.EncodeToBytes(tx) if err != nil { return err } - if err := self.add(ctx, tx); err != nil { + if err := pool.add(ctx, tx); err != nil { return err } //fmt.Println("Send", tx.Hash()) - self.relay.Send(types.Transactions{tx}) + pool.relay.Send(types.Transactions{tx}) - self.chainDb.Put(tx.Hash().Bytes(), data) + pool.chainDb.Put(tx.Hash().Bytes(), data) return nil } // AddTransactions adds all valid transactions to the pool and passes them to // the tx relay backend -func (self *TxPool) AddBatch(ctx context.Context, txs []*types.Transaction) { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) AddBatch(ctx context.Context, txs []*types.Transaction) { + pool.mu.Lock() + defer pool.mu.Unlock() var sendTx types.Transactions for _, tx := range txs { - if err := self.add(ctx, tx); err == nil { + if err := pool.add(ctx, tx); err == nil { sendTx = append(sendTx, tx) } } if len(sendTx) > 0 { - self.relay.Send(sendTx) + pool.relay.Send(sendTx) } } // GetTransaction returns a transaction if it is contained in the pool // and nil otherwise. -func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction { +func (pool *TxPool) GetTransaction(hash common.Hash) *types.Transaction { // check the txs first - if tx, ok := tp.pending[hash]; ok { + if tx, ok := pool.pending[hash]; ok { return tx } return nil @@ -472,13 +472,13 @@ func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction { // GetTransactions returns all currently processable transactions. // The returned slice may be modified by the caller. -func (self *TxPool) GetTransactions() (txs types.Transactions, err error) { - self.mu.RLock() - defer self.mu.RUnlock() +func (pool *TxPool) GetTransactions() (txs types.Transactions, err error) { + pool.mu.RLock() + defer pool.mu.RUnlock() - txs = make(types.Transactions, len(self.pending)) + txs = make(types.Transactions, len(pool.pending)) i := 0 - for _, tx := range self.pending { + for _, tx := range pool.pending { txs[i] = tx i++ } @@ -487,14 +487,14 @@ func (self *TxPool) GetTransactions() (txs types.Transactions, err error) { // Content retrieves the data content of the transaction pool, returning all the // pending as well as queued transactions, grouped by account and nonce. -func (self *TxPool) Content() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) { - self.mu.RLock() - defer self.mu.RUnlock() +func (pool *TxPool) Content() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) { + pool.mu.RLock() + defer pool.mu.RUnlock() // Retrieve all the pending transactions and sort by account and by nonce pending := make(map[common.Address]types.Transactions) - for _, tx := range self.pending { - account, _ := types.Sender(self.signer, tx) + for _, tx := range pool.pending { + account, _ := types.Sender(pool.signer, tx) pending[account] = append(pending[account], tx) } // There are no queued transactions in a light pool, just return an empty map @@ -503,20 +503,20 @@ func (self *TxPool) Content() (map[common.Address]types.Transactions, map[common } // RemoveTransactions removes all given transactions from the pool. -func (self *TxPool) RemoveTransactions(txs types.Transactions) { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) RemoveTransactions(txs types.Transactions) { + pool.mu.Lock() + defer pool.mu.Unlock() var hashes []common.Hash - batch := self.chainDb.NewBatch() + batch := pool.chainDb.NewBatch() for _, tx := range txs { hash := tx.Hash() - delete(self.pending, hash) + delete(pool.pending, hash) batch.Delete(hash.Bytes()) hashes = append(hashes, hash) } batch.Write() - self.relay.Discard(hashes) + pool.relay.Discard(hashes) } // RemoveTx removes the transaction with the given hash from the pool. diff --git a/vendor/github.com/ethereum/go-ethereum/light/txpool_test.go b/vendor/github.com/ethereum/go-ethereum/light/txpool_test.go index ce77573e..4f446c6c 100644 --- a/vendor/github.com/ethereum/go-ethereum/light/txpool_test.go +++ b/vendor/github.com/ethereum/go-ethereum/light/txpool_test.go @@ -26,9 +26,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -81,8 +81,8 @@ func TestTxPool(t *testing.T) { } var ( - sdb = ethdb.NewMemDatabase() - ldb = ethdb.NewMemDatabase() + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(sdb) ) diff --git a/vendor/github.com/ethereum/go-ethereum/metrics/influxdb/influxdb.go b/vendor/github.com/ethereum/go-ethereum/metrics/influxdb/influxdb.go index c4ef9272..6619915f 100644 --- a/vendor/github.com/ethereum/go-ethereum/metrics/influxdb/influxdb.go +++ b/vendor/github.com/ethereum/go-ethereum/metrics/influxdb/influxdb.go @@ -91,6 +91,7 @@ func (r *reporter) makeClient() (err error) { URL: r.url, Username: r.username, Password: r.password, + Timeout: 10 * time.Second, }) return diff --git a/vendor/github.com/ethereum/go-ethereum/metrics/metrics.go b/vendor/github.com/ethereum/go-ethereum/metrics/metrics.go index 2a2b804e..8ae7aec4 100644 --- a/vendor/github.com/ethereum/go-ethereum/metrics/metrics.go +++ b/vendor/github.com/ethereum/go-ethereum/metrics/metrics.go @@ -15,24 +15,41 @@ import ( ) // Enabled is checked by the constructor functions for all of the -// standard metrics. If it is true, the metric returned is a stub. +// standard metrics. If it is true, the metric returned is a stub. // // This global kill-switch helps quantify the observer effect and makes // for less cluttered pprof profiles. -var Enabled bool = false +var Enabled = false -// MetricsEnabledFlag is the CLI flag name to use to enable metrics collections. -const MetricsEnabledFlag = "metrics" -const DashboardEnabledFlag = "dashboard" +// EnabledExpensive is a soft-flag meant for external packages to check if costly +// metrics gathering is allowed or not. The goal is to separate standard metrics +// for health monitoring and debug metrics that might impact runtime performance. +var EnabledExpensive = false + +// enablerFlags is the CLI flag names to use to enable metrics collections. +var enablerFlags = []string{"metrics", "dashboard"} + +// expensiveEnablerFlags is the CLI flag names to use to enable metrics collections. +var expensiveEnablerFlags = []string{"metrics.expensive"} // Init enables or disables the metrics system. Since we need this to run before // any other code gets to create meters and timers, we'll actually do an ugly hack // and peek into the command line args for the metrics flag. func init() { for _, arg := range os.Args { - if flag := strings.TrimLeft(arg, "-"); flag == MetricsEnabledFlag || flag == DashboardEnabledFlag { - log.Info("Enabling metrics collection") - Enabled = true + flag := strings.TrimLeft(arg, "-") + + for _, enabler := range enablerFlags { + if !Enabled && flag == enabler { + log.Info("Enabling metrics collection") + Enabled = true + } + } + for _, enabler := range expensiveEnablerFlags { + if !EnabledExpensive && flag == enabler { + log.Info("Enabling expensive metrics collection") + EnabledExpensive = true + } } } } diff --git a/vendor/github.com/ethereum/go-ethereum/metrics/opentsdb.go b/vendor/github.com/ethereum/go-ethereum/metrics/opentsdb.go index df7f152e..3fde5545 100644 --- a/vendor/github.com/ethereum/go-ethereum/metrics/opentsdb.go +++ b/vendor/github.com/ethereum/go-ethereum/metrics/opentsdb.go @@ -10,7 +10,7 @@ import ( "time" ) -var shortHostName string = "" +var shortHostName = "" // OpenTSDBConfig provides a container with configuration parameters for // the OpenTSDB exporter diff --git a/vendor/github.com/ethereum/go-ethereum/miner/stress_clique.go b/vendor/github.com/ethereum/go-ethereum/miner/stress_clique.go index 7e19975a..8a355a4d 100644 --- a/vendor/github.com/ethereum/go-ethereum/miner/stress_clique.go +++ b/vendor/github.com/ethereum/go-ethereum/miner/stress_clique.go @@ -69,7 +69,7 @@ func main() { if err != nil { panic(err) } - defer node.Stop() + defer node.Close() for node.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) diff --git a/vendor/github.com/ethereum/go-ethereum/miner/stress_ethash.go b/vendor/github.com/ethereum/go-ethereum/miner/stress_ethash.go index 044ca9a2..040af9fb 100644 --- a/vendor/github.com/ethereum/go-ethereum/miner/stress_ethash.go +++ b/vendor/github.com/ethereum/go-ethereum/miner/stress_ethash.go @@ -69,7 +69,7 @@ func main() { if err != nil { panic(err) } - defer node.Stop() + defer node.Close() for node.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) diff --git a/vendor/github.com/ethereum/go-ethereum/miner/worker.go b/vendor/github.com/ethereum/go-ethereum/miner/worker.go index 48473796..80c1771b 100644 --- a/vendor/github.com/ethereum/go-ethereum/miner/worker.go +++ b/vendor/github.com/ethereum/go-ethereum/miner/worker.go @@ -566,6 +566,11 @@ func (w *worker) resultLoop() { logs []*types.Log ) for i, receipt := range task.receipts { + // add block location fields + receipt.BlockHash = hash + receipt.BlockNumber = block.Number() + receipt.TransactionIndex = uint(i) + receipts[i] = new(types.Receipt) *receipts[i] = *receipt // Update the block hash in all logs since it is now available and not when the diff --git a/vendor/github.com/ethereum/go-ethereum/miner/worker_test.go b/vendor/github.com/ethereum/go-ethereum/miner/worker_test.go index 7c8f167a..99a671ae 100644 --- a/vendor/github.com/ethereum/go-ethereum/miner/worker_test.go +++ b/vendor/github.com/ethereum/go-ethereum/miner/worker_test.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -79,7 +80,7 @@ type testWorkerBackend struct { func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, n int) *testWorkerBackend { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = core.Genesis{ Config: chainConfig, Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, @@ -142,7 +143,7 @@ func TestPendingStateAndBlockEthash(t *testing.T) { testPendingStateAndBlock(t, ethashChainConfig, ethash.NewFaker()) } func TestPendingStateAndBlockClique(t *testing.T) { - testPendingStateAndBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testPendingStateAndBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testPendingStateAndBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -174,7 +175,7 @@ func TestEmptyWorkEthash(t *testing.T) { testEmptyWork(t, ethashChainConfig, ethash.NewFaker()) } func TestEmptyWorkClique(t *testing.T) { - testEmptyWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testEmptyWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -224,7 +225,7 @@ func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consens for i := 0; i < 2; i += 1 { select { case <-taskCh: - case <-time.NewTimer(time.Second).C: + case <-time.NewTimer(2 * time.Second).C: t.Error("new task timeout") } } @@ -291,7 +292,7 @@ func TestRegenerateMiningBlockEthash(t *testing.T) { } func TestRegenerateMiningBlockClique(t *testing.T) { - testRegenerateMiningBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testRegenerateMiningBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testRegenerateMiningBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -356,7 +357,7 @@ func TestAdjustIntervalEthash(t *testing.T) { } func TestAdjustIntervalClique(t *testing.T) { - testAdjustInterval(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testAdjustInterval(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { diff --git a/vendor/github.com/ethereum/go-ethereum/mobile/geth.go b/vendor/github.com/ethereum/go-ethereum/mobile/geth.go index e3e2e905..fba3e571 100644 --- a/vendor/github.com/ethereum/go-ethereum/mobile/geth.go +++ b/vendor/github.com/ethereum/go-ethereum/mobile/geth.go @@ -76,6 +76,9 @@ type NodeConfig struct { // Listening address of pprof server. PprofAddress string + + // Ultra Light client options + ULC *eth.ULCConfig } // defaultNodeConfig contains the default node configuration values to use if all @@ -131,6 +134,7 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { MaxPeers: config.MaxPeers, }, } + rawStack, err := node.New(nodeConf) if err != nil { return nil, err @@ -188,6 +192,12 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { return &Node{rawStack}, nil } +// Close terminates a running node along with all it's services, tearing internal +// state doen too. It's not possible to restart a closed node. +func (n *Node) Close() error { + return n.node.Close() +} + // Start creates a live P2P node and starts running it. func (n *Node) Start() error { return n.node.Start() diff --git a/vendor/github.com/ethereum/go-ethereum/mobile/types.go b/vendor/github.com/ethereum/go-ethereum/mobile/types.go index 443d07ea..1a0389cb 100644 --- a/vendor/github.com/ethereum/go-ethereum/mobile/types.go +++ b/vendor/github.com/ethereum/go-ethereum/mobile/types.go @@ -197,8 +197,18 @@ type Transaction struct { tx *types.Transaction } -// NewTransaction creates a new transaction with the given properties. +// NewContractCreation creates a new transaction for deploying a new contract with +// the given properties. +func NewContractCreation(nonce int64, amount *BigInt, gasLimit int64, gasPrice *BigInt, data []byte) *Transaction { + return &Transaction{types.NewContractCreation(uint64(nonce), amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} +} + +// NewTransaction creates a new transaction with the given properties. Contracts +// can be created by transacting with a nil recipient. func NewTransaction(nonce int64, to *Address, amount *BigInt, gasLimit int64, gasPrice *BigInt, data []byte) *Transaction { + if to == nil { + return &Transaction{types.NewContractCreation(uint64(nonce), amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} + } return &Transaction{types.NewTransaction(uint64(nonce), to.address, amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} } diff --git a/vendor/github.com/ethereum/go-ethereum/node/config.go b/vendor/github.com/ethereum/go-ethereum/node/config.go index 7b32a590..2f871e47 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/config.go +++ b/vendor/github.com/ethereum/go-ethereum/node/config.go @@ -27,6 +27,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/external" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/common" @@ -80,6 +81,9 @@ type Config struct { // is created by New and destroyed when the node is stopped. KeyStoreDir string `toml:",omitempty"` + // ExternalSigner specifies an external URI for a clef-type signer + ExternalSigner string `toml:"omitempty"` + // UseLightweightKDF lowers the memory and CPU requirements of the key store // scrypt KDF at the expense of security. UseLightweightKDF bool `toml:",omitempty"` @@ -102,6 +106,29 @@ type Config struct { // for ephemeral nodes). HTTPPort int `toml:",omitempty"` + // GraphQLHost is the host interface on which to start the GraphQL server. If this + // field is empty, no GraphQL API endpoint will be started. + GraphQLHost string `toml:",omitempty"` + + // GraphQLPort is the TCP port number on which to start the GraphQL server. The + // default zero value is/ valid and will pick a port number randomly (useful + // for ephemeral nodes). + GraphQLPort int `toml:",omitempty"` + + // GraphQLCors is the Cross-Origin Resource Sharing header to send to requesting + // clients. Please be aware that CORS is a browser enforced security, it's fully + // useless for custom HTTP clients. + GraphQLCors []string `toml:",omitempty"` + + // GraphQLVirtualHosts is the list of virtual hostnames which are allowed on incoming requests. + // This is by default {'localhost'}. Using this prevents attacks like + // DNS rebinding, which bypasses SOP by simply masquerading as being within the same + // origin. These attacks do not utilize CORS, since they are not cross-domain. + // By explicitly checking the Host-header, the server will not allow requests + // made against the server with a malicious host domain. + // Requests using ip address directly are not affected + GraphQLVirtualHosts []string `toml:",omitempty"` + // HTTPCors is the Cross-Origin Resource Sharing header to send to requesting // clients. Please be aware that CORS is a browser enforced security, it's fully // useless for custom HTTP clients. @@ -213,6 +240,15 @@ func (c *Config) HTTPEndpoint() string { return fmt.Sprintf("%s:%d", c.HTTPHost, c.HTTPPort) } +// GraphQLEndpoint resolves a GraphQL endpoint based on the configured host interface +// and port parameters. +func (c *Config) GraphQLEndpoint() string { + if c.GraphQLHost == "" { + return "" + } + return fmt.Sprintf("%s:%d", c.GraphQLHost, c.GraphQLPort) +} + // DefaultHTTPEndpoint returns the HTTP endpoint used by default. func DefaultHTTPEndpoint() string { config := &Config{HTTPHost: DefaultHTTPHost, HTTPPort: DefaultHTTPPort} @@ -430,23 +466,37 @@ func makeAccountManager(conf *Config) (*accounts.Manager, string, error) { return nil, "", err } // Assemble the account manager and supported backends - backends := []accounts.Backend{ - keystore.NewKeyStore(keydir, scryptN, scryptP), - } - if !conf.NoUSB { - // Start a USB hub for Ledger hardware wallets - if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + var backends []accounts.Backend + if len(conf.ExternalSigner) > 0 { + log.Info("Using external signer", "url", conf.ExternalSigner) + if extapi, err := external.NewExternalBackend(conf.ExternalSigner); err == nil { + backends = append(backends, extapi) } else { - backends = append(backends, ledgerhub) - } - // Start a USB hub for Trezor hardware wallets - if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) - } else { - backends = append(backends, trezorhub) + log.Info("Error configuring external signer", "error", err) } } + if len(backends) == 0 { + // For now, we're using EITHER external signer OR local signers. + // If/when we implement some form of lockfile for USB and keystore wallets, + // we can have both, but it's very confusing for the user to see the same + // accounts in both externally and locally, plus very racey. + backends = append(backends, keystore.NewKeyStore(keydir, scryptN, scryptP)) + if !conf.NoUSB { + // Start a USB hub for Ledger hardware wallets + if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + } else { + backends = append(backends, ledgerhub) + } + // Start a USB hub for Trezor hardware wallets + if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + } + } + } + return accounts.NewManager(backends...), ephemeral, nil } diff --git a/vendor/github.com/ethereum/go-ethereum/node/config_test.go b/vendor/github.com/ethereum/go-ethereum/node/config_test.go index b81d3d61..00c24a23 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/config_test.go +++ b/vendor/github.com/ethereum/go-ethereum/node/config_test.go @@ -38,14 +38,22 @@ func TestDatadirCreation(t *testing.T) { } defer os.RemoveAll(dir) - if _, err := New(&Config{DataDir: dir}); err != nil { + node, err := New(&Config{DataDir: dir}) + if err != nil { t.Fatalf("failed to create stack with existing datadir: %v", err) } + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } // Generate a long non-existing datadir path and check that it gets created by a node dir = filepath.Join(dir, "a", "b", "c", "d", "e", "f") - if _, err := New(&Config{DataDir: dir}); err != nil { + node, err = New(&Config{DataDir: dir}) + if err != nil { t.Fatalf("failed to create stack with creatable datadir: %v", err) } + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } if _, err := os.Stat(dir); err != nil { t.Fatalf("freshly created datadir not accessible: %v", err) } @@ -57,8 +65,12 @@ func TestDatadirCreation(t *testing.T) { defer os.Remove(file.Name()) dir = filepath.Join(file.Name(), "invalid/path") - if _, err := New(&Config{DataDir: dir}); err == nil { + node, err = New(&Config{DataDir: dir}) + if err == nil { t.Fatalf("protocol stack created with an invalid datadir") + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } } } diff --git a/vendor/github.com/ethereum/go-ethereum/node/defaults.go b/vendor/github.com/ethereum/go-ethereum/node/defaults.go index c1376dba..71e76334 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/defaults.go +++ b/vendor/github.com/ethereum/go-ethereum/node/defaults.go @@ -28,10 +28,12 @@ import ( ) const ( - DefaultHTTPHost = "localhost" // Default host interface for the HTTP RPC server - DefaultHTTPPort = 8545 // Default TCP port for the HTTP RPC server - DefaultWSHost = "localhost" // Default host interface for the websocket RPC server - DefaultWSPort = 8546 // Default TCP port for the websocket RPC server + DefaultHTTPHost = "localhost" // Default host interface for the HTTP RPC server + DefaultHTTPPort = 8545 // Default TCP port for the HTTP RPC server + DefaultWSHost = "localhost" // Default host interface for the websocket RPC server + DefaultWSPort = 8546 // Default TCP port for the websocket RPC server + DefaultGraphQLHost = "localhost" // Default host interface for the GraphQL server + DefaultGraphQLPort = 8547 // Default TCP port for the GraphQL server ) // DefaultConfig contains reasonable default settings. @@ -56,11 +58,20 @@ func DefaultDataDir() string { // Try to place the data folder in the user's home dir home := homeDir() if home != "" { - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": return filepath.Join(home, "Library", "Ethereum") - } else if runtime.GOOS == "windows" { - return filepath.Join(home, "AppData", "Roaming", "Ethereum") - } else { + case "windows": + // We used to put everything in %HOME%\AppData\Roaming, but this caused + // problems with non-typical setups. If this fallback location exists and + // is non-empty, use it, otherwise DTRT and check %LOCALAPPDATA%. + fallback := filepath.Join(home, "AppData", "Roaming", "Ethereum") + appdata := windowsAppData() + if appdata == "" || isNonEmptyDir(fallback) { + return fallback + } + return filepath.Join(appdata, "Ethereum") + default: return filepath.Join(home, ".ethereum") } } @@ -68,6 +79,27 @@ func DefaultDataDir() string { return "" } +func windowsAppData() string { + v := os.Getenv("LOCALAPPDATA") + if v == "" { + // Windows XP and below don't have LocalAppData. Crash here because + // we don't support Windows XP and undefining the variable will cause + // other issues. + panic("environment variable LocalAppData is undefined") + } + return v +} + +func isNonEmptyDir(dir string) bool { + f, err := os.Open(dir) + if err != nil { + return false + } + names, _ := f.Readdir(1) + f.Close() + return len(names) > 0 +} + func homeDir() string { if home := os.Getenv("HOME"); home != "" { return home diff --git a/vendor/github.com/ethereum/go-ethereum/node/node.go b/vendor/github.com/ethereum/go-ethereum/node/node.go index c35a5097..bd031bd0 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/node.go +++ b/vendor/github.com/ethereum/go-ethereum/node/node.go @@ -27,6 +27,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/internal/debug" @@ -121,6 +122,29 @@ func New(conf *Config) (*Node, error) { }, nil } +// Close stops the Node and releases resources acquired in +// Node constructor New. +func (n *Node) Close() error { + var errs []error + + // Terminate all subsystems and collect any errors + if err := n.Stop(); err != nil && err != ErrNodeStopped { + errs = append(errs, err) + } + if err := n.accman.Close(); err != nil { + errs = append(errs, err) + } + // Report any errors that might have occurred + switch len(errs) { + case 0: + return nil + case 1: + return errs[0] + default: + return fmt.Errorf("%v", errs) + } +} + // Register injects a new service into the node's stack. The service created by // the passed constructor must be unique in its type with regard to sibling ones. func (n *Node) Register(constructor ServiceConstructor) error { @@ -197,7 +221,7 @@ func (n *Node) Start() error { return convertFileLockError(err) } // Start each of the services - started := []reflect.Type{} + var started []reflect.Type for kind, service := range services { // Start the next service, stopping all previous upon failure if err := service.Start(running); err != nil { @@ -578,11 +602,11 @@ func (n *Node) EventMux() *event.TypeMux { // OpenDatabase opens an existing database with the given name (or creates one if no // previous can be found) from within the node's instance directory. If the node is // ephemeral, a memory database is returned. -func (n *Node) OpenDatabase(name string, cache, handles int) (ethdb.Database, error) { +func (n *Node) OpenDatabase(name string, cache, handles int, namespace string) (ethdb.Database, error) { if n.config.DataDir == "" { - return ethdb.NewMemDatabase(), nil + return rawdb.NewMemoryDatabase(), nil } - return ethdb.NewLDBDatabase(n.config.ResolvePath(name), cache, handles) + return rawdb.NewLevelDBDatabase(n.config.ResolvePath(name), cache, handles, namespace) } // ResolvePath returns the absolute path of a resource in the instance directory. diff --git a/vendor/github.com/ethereum/go-ethereum/node/node_example_test.go b/vendor/github.com/ethereum/go-ethereum/node/node_example_test.go index ee06f406..57b18855 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/node_example_test.go +++ b/vendor/github.com/ethereum/go-ethereum/node/node_example_test.go @@ -46,6 +46,8 @@ func ExampleService() { if err != nil { log.Fatalf("Failed to create network node: %v", err) } + defer stack.Close() + // Create and register a simple network service. This is done through the definition // of a node.ServiceConstructor that will instantiate a node.Service. The reason for // the factory method approach is to support service restarts without relying on the diff --git a/vendor/github.com/ethereum/go-ethereum/node/node_test.go b/vendor/github.com/ethereum/go-ethereum/node/node_test.go index f833cd68..c464771c 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/node_test.go +++ b/vendor/github.com/ethereum/go-ethereum/node/node_test.go @@ -46,6 +46,8 @@ func TestNodeLifeCycle(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Ensure that a stopped node can be stopped again for i := 0; i < 3; i++ { if err := stack.Stop(); err != ErrNodeStopped { @@ -88,6 +90,8 @@ func TestNodeUsedDataDir(t *testing.T) { if err != nil { t.Fatalf("failed to create original protocol stack: %v", err) } + defer original.Close() + if err := original.Start(); err != nil { t.Fatalf("failed to start original protocol stack: %v", err) } @@ -98,6 +102,8 @@ func TestNodeUsedDataDir(t *testing.T) { if err != nil { t.Fatalf("failed to create duplicate protocol stack: %v", err) } + defer duplicate.Close() + if err := duplicate.Start(); err != ErrDatadirUsed { t.Fatalf("duplicate datadir failure mismatch: have %v, want %v", err, ErrDatadirUsed) } @@ -109,6 +115,8 @@ func TestServiceRegistry(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of unique services and ensure they start successfully services := []ServiceConstructor{NewNoopServiceA, NewNoopServiceB, NewNoopServiceC} for i, constructor := range services { @@ -141,6 +149,8 @@ func TestServiceLifeCycle(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of life-cycle instrumented services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -191,6 +201,8 @@ func TestServiceRestarts(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Define a service that does not support restarts var ( running bool @@ -239,6 +251,8 @@ func TestServiceConstructionAbortion(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Define a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -286,6 +300,8 @@ func TestServiceStartupAbortion(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -339,6 +355,8 @@ func TestServiceTerminationGuarantee(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -414,6 +432,8 @@ func TestServiceRetrieval(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + if err := stack.Register(NewNoopService); err != nil { t.Fatalf("noop service registration failed: %v", err) } @@ -449,6 +469,8 @@ func TestProtocolGather(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of services with some configured number of protocols services := map[string]struct { Count int @@ -505,6 +527,8 @@ func TestAPIGather(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of services with some configured APIs calls := make(chan string, 1) makeAPI := func(result string) *OneMethodAPI { diff --git a/vendor/github.com/ethereum/go-ethereum/node/service.go b/vendor/github.com/ethereum/go-ethereum/node/service.go index 6a96d9b1..4f6cb667 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/service.go +++ b/vendor/github.com/ethereum/go-ethereum/node/service.go @@ -20,6 +20,7 @@ import ( "reflect" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/p2p" @@ -39,11 +40,11 @@ type ServiceContext struct { // OpenDatabase opens an existing database with the given name (or creates one // if no previous can be found) from within the node's data directory. If the // node is an ephemeral one, a memory database is returned. -func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int) (ethdb.Database, error) { +func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int, namespace string) (ethdb.Database, error) { if ctx.config.DataDir == "" { - return ethdb.NewMemDatabase(), nil + return rawdb.NewMemoryDatabase(), nil } - db, err := ethdb.NewLDBDatabase(ctx.config.ResolvePath(name), cache, handles) + db, err := rawdb.NewLevelDBDatabase(ctx.config.ResolvePath(name), cache, handles, namespace) if err != nil { return nil, err } diff --git a/vendor/github.com/ethereum/go-ethereum/node/service_test.go b/vendor/github.com/ethereum/go-ethereum/node/service_test.go index a7ae439e..63004a51 100644 --- a/vendor/github.com/ethereum/go-ethereum/node/service_test.go +++ b/vendor/github.com/ethereum/go-ethereum/node/service_test.go @@ -39,7 +39,7 @@ func TestContextDatabases(t *testing.T) { } // Request the opening/creation of a database and ensure it persists to disk ctx := &ServiceContext{config: &Config{Name: "unit-test", DataDir: dir}} - db, err := ctx.OpenDatabase("persistent", 0, 0) + db, err := ctx.OpenDatabase("persistent", 0, 0, "") if err != nil { t.Fatalf("failed to open persistent database: %v", err) } @@ -50,7 +50,7 @@ func TestContextDatabases(t *testing.T) { } // Request th opening/creation of an ephemeral database and ensure it's not persisted ctx = &ServiceContext{config: &Config{DataDir: ""}} - db, err = ctx.OpenDatabase("ephemeral", 0, 0) + db, err = ctx.OpenDatabase("ephemeral", 0, 0, "") if err != nil { t.Fatalf("failed to open ephemeral database: %v", err) } @@ -67,6 +67,7 @@ func TestContextServices(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() // Define a verifier that ensures a NoopA is before it and NoopB after verifier := func(ctx *ServiceContext) (Service, error) { var objA *NoopServiceA diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_test.go index b5622e3a..233687d7 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_test.go @@ -624,6 +624,8 @@ func (tn *preminedTestnet) findnode(toid enode.ID, toaddr *net.UDPAddr, target e func (*preminedTestnet) close() {} func (*preminedTestnet) ping(toid enode.ID, toaddr *net.UDPAddr) error { return nil } +var _ = (*preminedTestnet).mine // avoid linter warning about mine being dead code. + // mine generates a testnet struct literal with nodes at // various distances to the given target. func (tn *preminedTestnet) mine(target encPubkey) { diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_util_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_util_test.go index e61c9e6f..f4dbc25a 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_util_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/discover/table_util_test.go @@ -17,7 +17,6 @@ package discover import ( - "crypto/ecdsa" "encoding/hex" "fmt" "math/rand" @@ -167,11 +166,3 @@ func hexEncPubkey(h string) (ret encPubkey) { copy(ret[:], b) return ret } - -func hexPubkey(h string) *ecdsa.PublicKey { - k, err := decodePubkey(hexEncPubkey(h)) - if err != nil { - panic(err) - } - return k -} diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/discover/udp.go b/vendor/github.com/ethereum/go-ethereum/p2p/discover/udp.go index df9a3065..e386af36 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/discover/udp.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/discover/udp.go @@ -54,6 +54,11 @@ const ( ntpFailureThreshold = 32 // Continuous timeouts after which to check NTP ntpWarningCooldown = 10 * time.Minute // Minimum amount of time to pass before repeating NTP warning driftThreshold = 10 * time.Second // Allowed clock drift before warning user + + // Discovery packets are defined to be no larger than 1280 bytes. + // Packets larger than this size will be cut at the end and treated + // as invalid because their hash won't match. + maxPacketSize = 1280 ) // RPC packet types @@ -496,7 +501,7 @@ var ( headSpace = make([]byte, headSize) // Neighbors replies are sent across multiple packets to - // stay below the 1280 byte limit. We compute the maximum number + // stay below the packet size limit. We compute the maximum number // of entries by stuffing a packet until it grows too large. maxNeighbors int ) @@ -511,7 +516,7 @@ func init() { // If this ever happens, it will be caught by the unit tests. panic("cannot encode: " + err.Error()) } - if headSize+size+1 >= 1280 { + if headSize+size+1 >= maxPacketSize { maxNeighbors = n break } @@ -562,10 +567,7 @@ func (t *udp) readLoop(unhandled chan<- ReadPacket) { defer close(unhandled) } - // Discovery packets are defined to be no larger than 1280 bytes. - // Packets larger than this size will be cut at the end and treated - // as invalid because their hash won't match. - buf := make([]byte, 1280) + buf := make([]byte, maxPacketSize) for { nbytes, from, err := t.conn.ReadFromUDP(buf) if netutil.IsTemporaryError(err) { @@ -715,7 +717,7 @@ func (req *findnode) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []by t.tab.mutex.Unlock() // Send neighbors in chunks with at most maxNeighbors per packet - // to stay below the 1280 byte limit. + // to stay below the packet size limit. p := neighbors{Expiration: uint64(time.Now().Add(expiration).Unix())} var sent bool for _, n := range closest { diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb.go b/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb.go index 9353b155..a43e6386 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb.go @@ -57,7 +57,7 @@ const ( const ( dbNodeExpiration = 24 * time.Hour // Time after which an unseen node should be dropped. dbCleanupCycle = time.Hour // Time period for running the expiration task. - dbVersion = 8 + dbVersion = 9 ) var zeroIP = make(net.IP, 16) @@ -380,12 +380,12 @@ func (db *DB) UpdateFindFails(id ID, ip net.IP, fails int) error { // LocalSeq retrieves the local record sequence counter. func (db *DB) localSeq(id ID) uint64 { - return db.fetchUint64(nodeItemKey(id, zeroIP, dbLocalSeq)) + return db.fetchUint64(localItemKey(id, dbLocalSeq)) } // storeLocalSeq stores the local record sequence counter. func (db *DB) storeLocalSeq(id ID, n uint64) { - db.storeUint64(nodeItemKey(id, zeroIP, dbLocalSeq), n) + db.storeUint64(localItemKey(id, dbLocalSeq), n) } // QuerySeeds retrieves random nodes to be used as potential seed nodes diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb_test.go index 341b61a2..21283524 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/enode/nodedb_test.go @@ -71,7 +71,7 @@ func TestDBNodeItemKey(t *testing.T) { if id != keytestID { t.Errorf("splitNodeItemKey returned wrong ID: %v", id) } - if !bytes.Equal(ip, wantIP) { + if !ip.Equal(wantIP) { t.Errorf("splitNodeItemKey returned wrong IP: %v", ip) } if field != wantField { diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/metrics.go b/vendor/github.com/ethereum/go-ethereum/p2p/metrics.go index 8df82bb0..2b1ad6df 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/metrics.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/metrics.go @@ -161,6 +161,7 @@ func (c *meteredConn) Write(b []byte) (n int, err error) { // the ingress and the egress traffic registries using the peer's IP and node ID, // also emits connect event. func (c *meteredConn) handshakeDone(id enode.ID) { + // TODO (kurkomisi): use the node URL instead of the pure node ID. (the String() method of *Node) if atomic.AddInt32(&meteredPeerCount, 1) >= MeteredPeerLimit { // Don't register the peer in the traffic registries. atomic.AddInt32(&meteredPeerCount, -1) diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/accounting_simulation_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/accounting_simulation_test.go index e90a1d81..464b5989 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/accounting_simulation_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/accounting_simulation_test.go @@ -159,8 +159,9 @@ func TestAccountingSimulation(t *testing.T) { // (n entries in the array will not be filled - // the balance of a node with itself) type matrix struct { - n int //number of nodes - m []int64 //array of balances + n int //number of nodes + m []int64 //array of balances + lock sync.Mutex } // create a new matrix @@ -177,7 +178,9 @@ func (m *matrix) add(i, j int, v int64) error { // i * number of nodes + remote node mi := i*m.n + j // register that balance + m.lock.Lock() m.m[mi] += v + m.lock.Unlock() return nil } diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol.go b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol.go index bf879b98..1600a11f 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol.go @@ -386,10 +386,12 @@ func (p *Peer) handleIncoming(handle func(ctx context.Context, msg interface{}) // * the dialing peer needs to send the handshake first and then waits for remote // * the listening peer waits for the remote handshake and then sends it // returns the remote handshake and an error -func (p *Peer) Handshake(ctx context.Context, hs interface{}, verify func(interface{}) error) (rhs interface{}, err error) { +func (p *Peer) Handshake(ctx context.Context, hs interface{}, verify func(interface{}) error) (interface{}, error) { if _, ok := p.spec.GetCode(hs); !ok { return nil, errorf(ErrHandshake, "unknown handshake message type: %T", hs) } + + var rhs interface{} errc := make(chan error, 2) handle := func(ctx context.Context, msg interface{}) error { rhs = msg @@ -412,6 +414,7 @@ func (p *Peer) Handshake(ctx context.Context, hs interface{}, verify func(interf }() for i := 0; i < 2; i++ { + var err error select { case err = <-errc: case <-ctx.Done(): diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol_test.go index 4bc1e547..9ac76ea2 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/protocol_test.go @@ -21,11 +21,13 @@ import ( "context" "errors" "fmt" + "sync" "testing" "time" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/simulations/adapters" @@ -143,8 +145,11 @@ func newProtocol(pp *p2ptest.TestPeerPool) func(*p2p.Peer, p2p.MsgReadWriter) er } func protocolTester(pp *p2ptest.TestPeerPool) *p2ptest.ProtocolTester { - conf := adapters.RandomNodeConfig() - return p2ptest.NewProtocolTester(conf.ID, 2, newProtocol(pp)) + prvkey, err := crypto.GenerateKey() + if err != nil { + panic(err) + } + return p2ptest.NewProtocolTester(prvkey, 2, newProtocol(pp)) } func protoHandshakeExchange(id enode.ID, proto *protoHandshake) []p2ptest.Exchange { @@ -172,8 +177,11 @@ func protoHandshakeExchange(id enode.ID, proto *protoHandshake) []p2ptest.Exchan } func runProtoHandshake(t *testing.T, proto *protoHandshake, errs ...error) { + t.Helper() pp := p2ptest.NewTestPeerPool() s := protocolTester(pp) + defer s.Stop() + // TODO: make this more than one handshake node := s.Nodes[0] if err := s.TestExchanges(protoHandshakeExchange(node.ID(), proto)...); err != nil { @@ -195,6 +203,7 @@ type dummyHook struct { send bool err error waitC chan struct{} + mu sync.Mutex } type dummyMsg struct { @@ -202,6 +211,9 @@ type dummyMsg struct { } func (d *dummyHook) Send(peer *Peer, size uint32, msg interface{}) error { + d.mu.Lock() + defer d.mu.Unlock() + d.peer = peer d.size = size d.msg = msg @@ -210,6 +222,9 @@ func (d *dummyHook) Send(peer *Peer, size uint32, msg interface{}) error { } func (d *dummyHook) Receive(peer *Peer, size uint32, msg interface{}) error { + d.mu.Lock() + defer d.mu.Unlock() + d.peer = peer d.size = size d.msg = msg @@ -249,9 +264,12 @@ func TestProtocolHook(t *testing.T) { return peer.Run(handle) } - conf := adapters.RandomNodeConfig() - tester := p2ptest.NewProtocolTester(conf.ID, 2, runFunc) - err := tester.TestExchanges(p2ptest.Exchange{ + prvkey, err := crypto.GenerateKey() + if err != nil { + panic(err) + } + tester := p2ptest.NewProtocolTester(prvkey, 2, runFunc) + err = tester.TestExchanges(p2ptest.Exchange{ Expects: []p2ptest.Expect{ { Code: 0, @@ -263,18 +281,23 @@ func TestProtocolHook(t *testing.T) { if err != nil { t.Fatal(err) } + testHook.mu.Lock() if testHook.msg == nil || testHook.msg.(*dummyMsg).Content != "handshake" { t.Fatal("Expected msg to be set, but it is not") } if !testHook.send { t.Fatal("Expected a send message, but it is not") } - if testHook.peer == nil || testHook.peer.ID() != tester.Nodes[0].ID() { - t.Fatal("Expected peer ID to be set correctly, but it is not") + if testHook.peer == nil { + t.Fatal("Expected peer to be set, is nil") + } + if peerId := testHook.peer.ID(); peerId != tester.Nodes[0].ID() && peerId != tester.Nodes[1].ID() { + t.Fatalf("Expected peer ID to be set correctly, but it is not (got %v, exp %v or %v", peerId, tester.Nodes[0].ID(), tester.Nodes[1].ID()) } if testHook.size != 11 { //11 is the length of the encoded message t.Fatalf("Expected size to be %d, but it is %d ", 1, testHook.size) } + testHook.mu.Unlock() err = tester.TestExchanges(p2ptest.Exchange{ Triggers: []p2ptest.Trigger{ @@ -291,6 +314,8 @@ func TestProtocolHook(t *testing.T) { if err != nil { t.Fatal(err) } + + testHook.mu.Lock() if testHook.msg == nil || testHook.msg.(*dummyMsg).Content != "response" { t.Fatal("Expected msg to be set, but it is not") } @@ -303,6 +328,7 @@ func TestProtocolHook(t *testing.T) { if testHook.size != 10 { //11 is the length of the encoded message t.Fatalf("Expected size to be %d, but it is %d ", 1, testHook.size) } + testHook.mu.Unlock() testHook.err = fmt.Errorf("dummy error") err = tester.TestExchanges(p2ptest.Exchange{ @@ -322,7 +348,6 @@ func TestProtocolHook(t *testing.T) { if err != nil { t.Fatalf("Expected a specific disconnect error, but got different one: %v", err) } - } //We need to test that if the hook is not defined, then message infrastructure @@ -339,16 +364,19 @@ func TestNoHook(t *testing.T) { ctx := context.TODO() msg := &perBytesMsgSenderPays{Content: "testBalance"} //send a message - err := peer.Send(ctx, msg) - if err != nil { + + if err := peer.Send(ctx, msg); err != nil { t.Fatal(err) } //simulate receiving a message rw.msg = msg - peer.handleIncoming(func(ctx context.Context, msg interface{}) error { + handler := func(ctx context.Context, msg interface{}) error { return nil - }) - //all should just work and not result in any error + } + + if err := peer.handleIncoming(handler); err != nil { + t.Fatal(err) + } } func TestProtoHandshakeVersionMismatch(t *testing.T) { @@ -388,8 +416,11 @@ func moduleHandshakeExchange(id enode.ID, resp uint) []p2ptest.Exchange { } func runModuleHandshake(t *testing.T, resp uint, errs ...error) { + t.Helper() pp := p2ptest.NewTestPeerPool() s := protocolTester(pp) + defer s.Stop() + node := s.Nodes[0] if err := s.TestExchanges(protoHandshakeExchange(node.ID(), &protoHandshake{42, "420"})...); err != nil { t.Fatal(err) @@ -468,8 +499,10 @@ func testMultiPeerSetup(a, b enode.ID) []p2ptest.Exchange { } func runMultiplePeers(t *testing.T, peer int, errs ...error) { + t.Helper() pp := p2ptest.NewTestPeerPool() s := protocolTester(pp) + defer s.Stop() if err := s.TestExchanges(testMultiPeerSetup(s.Nodes[0].ID(), s.Nodes[1].ID())...); err != nil { t.Fatal(err) @@ -539,14 +572,14 @@ WAIT: } } -func XTestMultiplePeersDropSelf(t *testing.T) { +func TestMultiplePeersDropSelf(t *testing.T) { runMultiplePeers(t, 0, fmt.Errorf("subprotocol error"), fmt.Errorf("Message handler error: (msg code 3): dropped"), ) } -func XTestMultiplePeersDropOther(t *testing.T) { +func TestMultiplePeersDropOther(t *testing.T) { runMultiplePeers(t, 1, fmt.Errorf("Message handler error: (msg code 3): dropped"), fmt.Errorf("subprotocol error"), diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter.go b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter.go index 215d4fe3..9612b4a4 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter.go @@ -36,6 +36,13 @@ type AccountingMetrics struct { //for a graceful cleanup func (am *AccountingMetrics) Close() { close(am.reporter.quit) + // wait for reporter loop to finish saving metrics + // before reporter database is closed + select { + case <-time.After(10 * time.Second): + log.Error("accounting metrics reporter timeout") + case <-am.reporter.done: + } am.reporter.db.Close() } @@ -46,6 +53,7 @@ type reporter struct { interval time.Duration //duration at which the reporter will persist metrics db *leveldb.DB //the actual DB quit chan struct{} //quit the reporter loop + done chan struct{} //signal that reporter loop is done } //NewMetricsDB creates a new LevelDB instance used to persist metrics defined @@ -92,6 +100,7 @@ func NewAccountingMetrics(r metrics.Registry, d time.Duration, path string) *Acc interval: d, db: db, quit: make(chan struct{}), + done: make(chan struct{}), } //run the go routine @@ -106,6 +115,9 @@ func NewAccountingMetrics(r metrics.Registry, d time.Duration, path string) *Acc //run is the goroutine which periodically sends the metrics to the configured LevelDB func (r *reporter) run() { + // signal that the reporter loop is done + defer close(r.done) + intervalTicker := time.NewTicker(r.interval) for { @@ -121,6 +133,9 @@ func (r *reporter) run() { } case <-r.quit: //graceful shutdown + if err := r.save(); err != nil { + log.Error("unable to send metrics to LevelDB", "err", err) + } return } } diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter_test.go index c5c025d2..9b0da09b 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/protocols/reporter_test.go @@ -39,7 +39,7 @@ func TestReporter(t *testing.T) { //setup the metrics log.Debug("Setting up metrics first time") - reportInterval := 5 * time.Millisecond + reportInterval := 2 * time.Millisecond metrics := SetupAccountingMetrics(reportInterval, filepath.Join(dir, "test.db")) log.Debug("Done.") diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/exec.go b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/exec.go index 9b588db1..106b179e 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/exec.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/exec.go @@ -92,12 +92,20 @@ func (e *ExecAdapter) NewNode(config *NodeConfig) (Node, error) { return nil, fmt.Errorf("error creating node directory: %s", err) } + err := config.initDummyEnode() + if err != nil { + return nil, err + } // generate the config conf := &execNodeConfig{ Stack: node.DefaultConfig, Node: config, } - conf.Stack.DataDir = filepath.Join(dir, "data") + if config.DataDir != "" { + conf.Stack.DataDir = config.DataDir + } else { + conf.Stack.DataDir = filepath.Join(dir, "data") + } conf.Stack.WSHost = "127.0.0.1" conf.Stack.WSPort = 0 conf.Stack.WSOrigins = []string{"*"} @@ -403,6 +411,13 @@ func startExecNodeStack() (*node.Node, error) { if err := json.Unmarshal([]byte(confEnv), &conf); err != nil { return nil, fmt.Errorf("error decoding %s: %v", envNodeConfig, err) } + + // create enode record + nodeTcpConn, err := net.ResolveTCPAddr("tcp", conf.Stack.P2P.ListenAddr) + if nodeTcpConn.IP == nil { + nodeTcpConn.IP = net.IPv4(127, 0, 0, 1) + } + conf.Node.initEnode(nodeTcpConn.IP, nodeTcpConn.Port, nodeTcpConn.Port) conf.Stack.P2P.PrivateKey = conf.Node.PrivateKey conf.Stack.Logger = log.New("node.id", conf.Node.ID.String()) diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/inproc.go b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/inproc.go index eada9579..c1cf23a1 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/inproc.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/inproc.go @@ -71,8 +71,13 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { s.mtx.Lock() defer s.mtx.Unlock() - // check a node with the ID doesn't already exist id := config.ID + // verify that the node has a private key in the config + if config.PrivateKey == nil { + return nil, fmt.Errorf("node is missing private key: %s", id) + } + + // check a node with the ID doesn't already exist if _, exists := s.nodes[id]; exists { return nil, fmt.Errorf("node already exists: %s", id) } @@ -87,6 +92,11 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { } } + err := config.initDummyEnode() + if err != nil { + return nil, err + } + n, err := node.New(&node.Config{ P2P: p2p.Config{ PrivateKey: config.PrivateKey, @@ -172,6 +182,12 @@ type SimNode struct { registerOnce sync.Once } +// Close closes the underlaying node.Node to release +// acquired resources. +func (sn *SimNode) Close() error { + return sn.node.Close() +} + // Addr returns the node's discovery address func (sn *SimNode) Addr() []byte { return []byte(sn.Node().String()) diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/types.go b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/types.go index 6681726e..f65ce7b6 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/types.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/adapters/types.go @@ -27,9 +27,11 @@ import ( "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rpc" ) @@ -90,12 +92,21 @@ type NodeConfig struct { // Name is a human friendly name for the node like "node01" Name string + // Use an existing database instead of a temporary one if non-empty + DataDir string + // Services are the names of the services which should be run when // starting the node (for SimNodes it should be the names of services // contained in SimAdapter.services, for other nodes it should be // services registered by calling the RegisterService function) Services []string + // Enode + node *enode.Node + + // ENR Record with entries to overwrite + Record enr.Record + // function to sanction or prevent suggesting a peer Reachable func(id enode.ID) bool @@ -165,26 +176,27 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) error { // Node returns the node descriptor represented by the config. func (n *NodeConfig) Node() *enode.Node { - return enode.NewV4(&n.PrivateKey.PublicKey, net.IP{127, 0, 0, 1}, int(n.Port), int(n.Port)) + return n.node } // RandomNodeConfig returns node configuration with a randomly generated ID and // PrivateKey func RandomNodeConfig() *NodeConfig { - key, err := crypto.GenerateKey() + prvkey, err := crypto.GenerateKey() if err != nil { panic("unable to generate key") } - id := enode.PubkeyToIDV4(&key.PublicKey) port, err := assignTCPPort() if err != nil { panic("unable to assign tcp port") } + + enodId := enode.PubkeyToIDV4(&prvkey.PublicKey) return &NodeConfig{ - ID: id, - Name: fmt.Sprintf("node_%s", id.String()), - PrivateKey: key, + PrivateKey: prvkey, + ID: enodId, + Name: fmt.Sprintf("node_%s", enodId.String()), Port: port, EnableMsgEvents: true, } @@ -254,3 +266,30 @@ func RegisterServices(services Services) { os.Exit(0) } } + +// adds the host part to the configuration's ENR, signs it +// creates and the corresponding enode object to the configuration +func (n *NodeConfig) initEnode(ip net.IP, tcpport int, udpport int) error { + enrIp := enr.IP(ip) + n.Record.Set(&enrIp) + enrTcpPort := enr.TCP(tcpport) + n.Record.Set(&enrTcpPort) + enrUdpPort := enr.UDP(udpport) + n.Record.Set(&enrUdpPort) + + err := enode.SignV4(&n.Record, n.PrivateKey) + if err != nil { + return fmt.Errorf("unable to generate ENR: %v", err) + } + nod, err := enode.New(enode.V4ID{}, &n.Record) + if err != nil { + return fmt.Errorf("unable to create enode: %v", err) + } + log.Trace("simnode new", "record", n.Record) + n.node = nod + return nil +} + +func (n *NodeConfig) initDummyEnode() error { + return n.initEnode(net.IPv4(127, 0, 0, 1), 0, 0) +} diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network.go b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network.go index 2049a510..f03c953e 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "math/rand" "sync" "time" @@ -596,6 +597,12 @@ func (net *Network) Shutdown() { if err := node.Stop(); err != nil { log.Warn("Can't stop node", "id", node.ID(), "err", err) } + // If the node has the close method, call it. + if closer, ok := node.Node.(io.Closer); ok { + if err := closer.Close(); err != nil { + log.Warn("Can't close node", "id", node.ID(), "err", err) + } + } } close(net.quitc) } @@ -833,7 +840,8 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn return snap, nil } -var snapshotLoadTimeout = 120 * time.Second +// longrunning tests may need a longer timeout +var snapshotLoadTimeout = 900 * time.Second // Load loads a network snapshot func (net *Network) Load(snap *Snapshot) error { diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network_test.go b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network_test.go index 8b644ffb..01cd1000 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network_test.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/simulations/network_test.go @@ -193,7 +193,7 @@ OUTER: connEventCount = nodeCount -OUTER_TWO: +OuterTwo: for { select { case <-ctx.Done(): @@ -211,7 +211,7 @@ OUTER_TWO: connEventCount-- log.Debug("ev", "count", connEventCount) if connEventCount == 0 { - break OUTER_TWO + break OuterTwo } } } diff --git a/vendor/github.com/ethereum/go-ethereum/p2p/testing/protocoltester.go b/vendor/github.com/ethereum/go-ethereum/p2p/testing/protocoltester.go index cbd8ce6f..1e1752af 100644 --- a/vendor/github.com/ethereum/go-ethereum/p2p/testing/protocoltester.go +++ b/vendor/github.com/ethereum/go-ethereum/p2p/testing/protocoltester.go @@ -25,6 +25,7 @@ package testing import ( "bytes" + "crypto/ecdsa" "fmt" "io" "io/ioutil" @@ -51,7 +52,7 @@ type ProtocolTester struct { // NewProtocolTester constructs a new ProtocolTester // it takes as argument the pivot node id, the number of dummy peers and the // protocol run function called on a peer connection by the p2p server -func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { +func NewProtocolTester(prvkey *ecdsa.PrivateKey, nodeCount int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { services := adapters.Services{ "test": func(ctx *adapters.ServiceContext) (node.Service, error) { return &testNode{run}, nil @@ -62,23 +63,30 @@ func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter } adapter := adapters.NewSimAdapter(services) net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{}) - if _, err := net.NewNodeWithConfig(&adapters.NodeConfig{ - ID: id, + nodeConfig := &adapters.NodeConfig{ + PrivateKey: prvkey, EnableMsgEvents: true, Services: []string{"test"}, - }); err != nil { + } + if _, err := net.NewNodeWithConfig(nodeConfig); err != nil { panic(err.Error()) } - if err := net.Start(id); err != nil { + if err := net.Start(nodeConfig.ID); err != nil { panic(err.Error()) } - node := net.GetNode(id).Node.(*adapters.SimNode) - peers := make([]*adapters.NodeConfig, n) - nodes := make([]*enode.Node, n) - for i := 0; i < n; i++ { + node := net.GetNode(nodeConfig.ID).Node.(*adapters.SimNode) + peers := make([]*adapters.NodeConfig, nodeCount) + nodes := make([]*enode.Node, nodeCount) + for i := 0; i < nodeCount; i++ { peers[i] = adapters.RandomNodeConfig() peers[i].Services = []string{"mock"} + if _, err := net.NewNodeWithConfig(peers[i]); err != nil { + panic(fmt.Sprintf("error initializing peer %v: %v", peers[i].ID, err)) + } + if err := net.Start(peers[i].ID); err != nil { + panic(fmt.Sprintf("error starting peer %v: %v", peers[i].ID, err)) + } nodes[i] = peers[i].Node() } events := make(chan *p2p.PeerEvent, 1000) @@ -94,28 +102,20 @@ func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter network: net, } - self.Connect(id, peers...) + self.Connect(nodeConfig.ID, peers...) return self } // Stop stops the p2p server -func (t *ProtocolTester) Stop() error { +func (t *ProtocolTester) Stop() { t.Server.Stop() - return nil } // Connect brings up the remote peer node and connects it using the // p2p/simulations network connection with the in memory network adapter func (t *ProtocolTester) Connect(selfID enode.ID, peers ...*adapters.NodeConfig) { for _, peer := range peers { - log.Trace(fmt.Sprintf("start node %v", peer.ID)) - if _, err := t.network.NewNodeWithConfig(peer); err != nil { - panic(fmt.Sprintf("error starting peer %v: %v", peer.ID, err)) - } - if err := t.network.Start(peer.ID); err != nil { - panic(fmt.Sprintf("error starting peer %v: %v", peer.ID, err)) - } log.Trace(fmt.Sprintf("connect to %v", peer.ID)) if err := t.network.Connect(selfID, peer.ID); err != nil { panic(fmt.Sprintf("error connecting to peer %v: %v", peer.ID, err)) diff --git a/vendor/github.com/ethereum/go-ethereum/params/protocol_params.go b/vendor/github.com/ethereum/go-ethereum/params/protocol_params.go index c8b6609a..14750f6a 100644 --- a/vendor/github.com/ethereum/go-ethereum/params/protocol_params.go +++ b/vendor/github.com/ethereum/go-ethereum/params/protocol_params.go @@ -52,7 +52,7 @@ const ( NetSstoreResetRefund uint64 = 4800 // Once per SSTORE operation for resetting to the original non-zero value NetSstoreResetClearRefund uint64 = 19800 // Once per SSTORE operation for resetting to the original zero value - JumpdestGas uint64 = 1 // Refunded gas, once per SSTORE operation if the zeroness changes to zero. + JumpdestGas uint64 = 1 // Once per JUMPDEST operation. EpochDuration uint64 = 30000 // Duration between proof-of-work epochs. CallGas uint64 = 40 // Once per CALL operation & message call transaction. CreateDataGas uint64 = 200 // diff --git a/vendor/github.com/ethereum/go-ethereum/params/version.go b/vendor/github.com/ethereum/go-ethereum/params/version.go index e3815aaf..d3954e0b 100644 --- a/vendor/github.com/ethereum/go-ethereum/params/version.go +++ b/vendor/github.com/ethereum/go-ethereum/params/version.go @@ -21,10 +21,10 @@ import ( ) const ( - VersionMajor = 1 // Major version component of the current release - VersionMinor = 8 // Minor version component of the current release - VersionPatch = 23 // Patch version component of the current release - VersionMeta = "stable" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 9 // Minor version component of the current release + VersionPatch = 0 // Patch version component of the current release + VersionMeta = "unstable" // Version metadata to append to the version string ) // Version holds the textual version string. diff --git a/vendor/github.com/ethereum/go-ethereum/rlp/decode.go b/vendor/github.com/ethereum/go-ethereum/rlp/decode.go index dbbe5995..e638c01e 100644 --- a/vendor/github.com/ethereum/go-ethereum/rlp/decode.go +++ b/vendor/github.com/ethereum/go-ethereum/rlp/decode.go @@ -26,6 +26,7 @@ import ( "math/big" "reflect" "strings" + "sync" ) var ( @@ -48,6 +49,10 @@ var ( errUintOverflow = errors.New("rlp: uint overflow") errNoPointer = errors.New("rlp: interface given to Decode must be a pointer") errDecodeIntoNil = errors.New("rlp: pointer given to Decode must not be nil") + + streamPool = sync.Pool{ + New: func() interface{} { return new(Stream) }, + } ) // Decoder is implemented by types that require custom RLP @@ -126,17 +131,24 @@ type Decoder interface { // // NewStream(r, limit).Decode(val) func Decode(r io.Reader, val interface{}) error { - // TODO: this could use a Stream from a pool. - return NewStream(r, 0).Decode(val) + stream := streamPool.Get().(*Stream) + defer streamPool.Put(stream) + + stream.Reset(r, 0) + return stream.Decode(val) } // DecodeBytes parses RLP data from b into val. // Please see the documentation of Decode for the decoding rules. // The input must contain exactly one value and no trailing data. func DecodeBytes(b []byte, val interface{}) error { - // TODO: this could use a Stream from a pool. r := bytes.NewReader(b) - if err := NewStream(r, uint64(len(b))).Decode(val); err != nil { + + stream := streamPool.Get().(*Stream) + defer streamPool.Put(stream) + + stream.Reset(r, uint64(len(b))) + if err := stream.Decode(val); err != nil { return err } if r.Len() > 0 { @@ -853,6 +865,7 @@ func (s *Stream) Reset(r io.Reader, inputLimit uint64) { if s.uintbuf == nil { s.uintbuf = make([]byte, 8) } + s.byteval = 0 } // Kind returns the kind and size of the next value in the diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/client.go b/vendor/github.com/ethereum/go-ethereum/rpc/client.go index 6254c95f..02029dc8 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/client.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/client.go @@ -18,17 +18,13 @@ package rpc import ( "bytes" - "container/list" "context" "encoding/json" "errors" "fmt" - "net" "net/url" "reflect" "strconv" - "strings" - "sync" "sync/atomic" "time" @@ -39,13 +35,14 @@ var ( ErrClientQuit = errors.New("client is closed") ErrNoResult = errors.New("no result in JSON-RPC response") ErrSubscriptionQueueOverflow = errors.New("subscription queue overflow") + errClientReconnected = errors.New("client reconnected") + errDead = errors.New("connection lost") ) const ( // Timeouts tcpKeepAliveInterval = 30 * time.Second - defaultDialTimeout = 10 * time.Second // used when dialing if the context has no deadline - defaultWriteTimeout = 10 * time.Second // used for calls if the context has no deadline + defaultDialTimeout = 10 * time.Second // used if context has no deadline subscribeTimeout = 5 * time.Second // overall timeout eth_subscribe, rpc_modules calls ) @@ -76,56 +73,57 @@ type BatchElem struct { Error error } -// A value of this type can a JSON-RPC request, notification, successful response or -// error response. Which one it is depends on the fields. -type jsonrpcMessage struct { - Version string `json:"jsonrpc"` - ID json.RawMessage `json:"id,omitempty"` - Method string `json:"method,omitempty"` - Params json.RawMessage `json:"params,omitempty"` - Error *jsonError `json:"error,omitempty"` - Result json.RawMessage `json:"result,omitempty"` -} - -func (msg *jsonrpcMessage) isNotification() bool { - return msg.ID == nil && msg.Method != "" -} - -func (msg *jsonrpcMessage) isResponse() bool { - return msg.hasValidID() && msg.Method == "" && len(msg.Params) == 0 -} - -func (msg *jsonrpcMessage) hasValidID() bool { - return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '[' -} - -func (msg *jsonrpcMessage) String() string { - b, _ := json.Marshal(msg) - return string(b) -} - // Client represents a connection to an RPC server. type Client struct { - idCounter uint32 - connectFunc func(ctx context.Context) (net.Conn, error) - isHTTP bool + idgen func() ID // for subscriptions + isHTTP bool + services *serviceRegistry - // writeConn is only safe to access outside dispatch, with the - // write lock held. The write lock is taken by sending on - // requestOp and released by sending on sendDone. - writeConn net.Conn + idCounter uint32 + + // This function, if non-nil, is called when the connection is lost. + reconnectFunc reconnectFunc + + // writeConn is used for writing to the connection on the caller's goroutine. It should + // only be accessed outside of dispatch, with the write lock held. The write lock is + // taken by sending on requestOp and released by sending on sendDone. + writeConn jsonWriter // for dispatch close chan struct{} - closing chan struct{} // closed when client is quitting - didClose chan struct{} // closed when client quits - reconnected chan net.Conn // where write/reconnect sends the new connection - readErr chan error // errors from read - readResp chan []*jsonrpcMessage // valid messages from read - requestOp chan *requestOp // for registering response IDs - sendDone chan error // signals write completion, releases write lock - respWait map[string]*requestOp // active requests - subs map[string]*ClientSubscription // active subscriptions + closing chan struct{} // closed when client is quitting + didClose chan struct{} // closed when client quits + reconnected chan ServerCodec // where write/reconnect sends the new connection + readOp chan readOp // read messages + readErr chan error // errors from read + reqInit chan *requestOp // register response IDs, takes write lock + reqSent chan error // signals write completion, releases write lock + reqTimeout chan *requestOp // removes response IDs when call timeout expires +} + +type reconnectFunc func(ctx context.Context) (ServerCodec, error) + +type clientContextKey struct{} + +type clientConn struct { + codec ServerCodec + handler *handler +} + +func (c *Client) newClientConn(conn ServerCodec) *clientConn { + ctx := context.WithValue(context.Background(), clientContextKey{}, c) + handler := newHandler(ctx, conn, c.idgen, c.services) + return &clientConn{conn, handler} +} + +func (cc *clientConn) close(err error, inflightReq *requestOp) { + cc.handler.close(err, inflightReq) + cc.codec.Close() +} + +type readOp struct { + msgs []*jsonrpcMessage + batch bool } type requestOp struct { @@ -135,9 +133,14 @@ type requestOp struct { sub *ClientSubscription // only set for EthSubscribe requests } -func (op *requestOp) wait(ctx context.Context) (*jsonrpcMessage, error) { +func (op *requestOp) wait(ctx context.Context, c *Client) (*jsonrpcMessage, error) { select { case <-ctx.Done(): + // Send the timeout to dispatch so it can remove the request IDs. + select { + case c.reqTimeout <- op: + case <-c.closing: + } return nil, ctx.Err() case resp := <-op.resp: return resp, op.err @@ -181,36 +184,57 @@ func DialContext(ctx context.Context, rawurl string) (*Client, error) { } } -func newClient(initctx context.Context, connectFunc func(context.Context) (net.Conn, error)) (*Client, error) { - conn, err := connectFunc(initctx) +// Client retrieves the client from the context, if any. This can be used to perform +// 'reverse calls' in a handler method. +func ClientFromContext(ctx context.Context) (*Client, bool) { + client, ok := ctx.Value(clientContextKey{}).(*Client) + return client, ok +} + +func newClient(initctx context.Context, connect reconnectFunc) (*Client, error) { + conn, err := connect(initctx) if err != nil { return nil, err } + c := initClient(conn, randomIDGenerator(), new(serviceRegistry)) + c.reconnectFunc = connect + return c, nil +} + +func initClient(conn ServerCodec, idgen func() ID, services *serviceRegistry) *Client { _, isHTTP := conn.(*httpConn) c := &Client{ - writeConn: conn, + idgen: idgen, isHTTP: isHTTP, - connectFunc: connectFunc, + services: services, + writeConn: conn, close: make(chan struct{}), closing: make(chan struct{}), didClose: make(chan struct{}), - reconnected: make(chan net.Conn), + reconnected: make(chan ServerCodec), + readOp: make(chan readOp), readErr: make(chan error), - readResp: make(chan []*jsonrpcMessage), - requestOp: make(chan *requestOp), - sendDone: make(chan error, 1), - respWait: make(map[string]*requestOp), - subs: make(map[string]*ClientSubscription), + reqInit: make(chan *requestOp), + reqSent: make(chan error, 1), + reqTimeout: make(chan *requestOp), } if !isHTTP { go c.dispatch(conn) } - return c, nil + return c +} + +// RegisterName creates a service for the given receiver type under the given name. When no +// methods on the given receiver match the criteria to be either a RPC method or a +// subscription an error is returned. Otherwise a new service is created and added to the +// service collection this client provides to the server. +func (c *Client) RegisterName(name string, receiver interface{}) error { + return c.services.registerName(name, receiver) } func (c *Client) nextID() json.RawMessage { id := atomic.AddUint32(&c.idCounter, 1) - return []byte(strconv.FormatUint(uint64(id), 10)) + return strconv.AppendUint(nil, uint64(id), 10) } // SupportedModules calls the rpc_modules method, retrieving the list of @@ -267,7 +291,7 @@ func (c *Client) CallContext(ctx context.Context, result interface{}, method str } // dispatch has accepted the request and will close the channel when it quits. - switch resp, err := op.wait(ctx); { + switch resp, err := op.wait(ctx, c); { case err != nil: return err case resp.Error != nil: @@ -325,7 +349,7 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { // Wait for all responses to come back. for n := 0; n < len(b) && err == nil; n++ { var resp *jsonrpcMessage - resp, err = op.wait(ctx) + resp, err = op.wait(ctx, c) if err != nil { break } @@ -352,6 +376,22 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { return err } +// Notify sends a notification, i.e. a method call that doesn't expect a response. +func (c *Client) Notify(ctx context.Context, method string, args ...interface{}) error { + op := new(requestOp) + msg, err := c.newMessage(method, args...) + if err != nil { + return err + } + msg.ID = nil + + if c.isHTTP { + return c.sendHTTP(ctx, op, msg) + } else { + return c.send(ctx, op, msg) + } +} + // EthSubscribe registers a subscripion under the "eth" namespace. func (c *Client) EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) { return c.Subscribe(ctx, "eth", channel, args...) @@ -402,30 +442,30 @@ func (c *Client) Subscribe(ctx context.Context, namespace string, channel interf if err := c.send(ctx, op, msg); err != nil { return nil, err } - if _, err := op.wait(ctx); err != nil { + if _, err := op.wait(ctx, c); err != nil { return nil, err } return op.sub, nil } func (c *Client) newMessage(method string, paramsIn ...interface{}) (*jsonrpcMessage, error) { - params, err := json.Marshal(paramsIn) - if err != nil { - return nil, err + msg := &jsonrpcMessage{Version: vsn, ID: c.nextID(), Method: method} + if paramsIn != nil { // prevent sending "params":null + var err error + if msg.Params, err = json.Marshal(paramsIn); err != nil { + return nil, err + } } - return &jsonrpcMessage{Version: "2.0", ID: c.nextID(), Method: method, Params: params}, nil + return msg, nil } // send registers op with the dispatch loop, then sends msg on the connection. // if sending fails, op is deregistered. func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error { select { - case c.requestOp <- op: - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("sending ", msg) - }}) + case c.reqInit <- op: err := c.write(ctx, msg) - c.sendDone <- err + c.reqSent <- err return err case <-ctx.Done(): // This can happen if the client is overloaded or unable to keep up with @@ -433,25 +473,17 @@ func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error return ctx.Err() case <-c.closing: return ErrClientQuit - case <-c.didClose: - return ErrClientQuit } } func (c *Client) write(ctx context.Context, msg interface{}) error { - deadline, ok := ctx.Deadline() - if !ok { - deadline = time.Now().Add(defaultWriteTimeout) - } // The previous write failed. Try to establish a new connection. if c.writeConn == nil { if err := c.reconnect(ctx); err != nil { return err } } - c.writeConn.SetWriteDeadline(deadline) - err := json.NewEncoder(c.writeConn).Encode(msg) - c.writeConn.SetWriteDeadline(time.Time{}) + err := c.writeConn.Write(ctx, msg) if err != nil { c.writeConn = nil } @@ -459,9 +491,18 @@ func (c *Client) write(ctx context.Context, msg interface{}) error { } func (c *Client) reconnect(ctx context.Context) error { - newconn, err := c.connectFunc(ctx) + if c.reconnectFunc == nil { + return errDead + } + + if _, ok := ctx.Deadline(); !ok { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, defaultDialTimeout) + defer cancel() + } + newconn, err := c.reconnectFunc(ctx) if err != nil { - log.Trace(fmt.Sprintf("reconnect failed: %v", err)) + log.Trace("RPC client reconnect failed", "err", err) return err } select { @@ -477,322 +518,107 @@ func (c *Client) reconnect(ctx context.Context) error { // dispatch is the main loop of the client. // It sends read messages to waiting calls to Call and BatchCall // and subscription notifications to registered subscriptions. -func (c *Client) dispatch(conn net.Conn) { - // Spawn the initial read loop. - go c.read(conn) - +func (c *Client) dispatch(codec ServerCodec) { var ( - lastOp *requestOp // tracks last send operation - requestOpLock = c.requestOp // nil while the send lock is held - reading = true // if true, a read loop is running + lastOp *requestOp // tracks last send operation + reqInitLock = c.reqInit // nil while the send lock is held + conn = c.newClientConn(codec) + reading = true ) - defer close(c.didClose) defer func() { close(c.closing) - c.closeRequestOps(ErrClientQuit) - conn.Close() if reading { - // Empty read channels until read is dead. - for { - select { - case <-c.readResp: - case <-c.readErr: - return - } - } + conn.close(ErrClientQuit, nil) + c.drainRead() } + close(c.didClose) }() + // Spawn the initial read loop. + go c.read(codec) + for { select { case <-c.close: return - // Read path. - case batch := <-c.readResp: - for _, msg := range batch { - switch { - case msg.isNotification(): - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: notification ", msg) - }}) - c.handleNotification(msg) - case msg.isResponse(): - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: response ", msg) - }}) - c.handleResponse(msg) - default: - log.Debug("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: dropping weird message", msg) - }}) - // TODO: maybe close - } + // Read path: + case op := <-c.readOp: + if op.batch { + conn.handler.handleBatch(op.msgs) + } else { + conn.handler.handleMsg(op.msgs[0]) } case err := <-c.readErr: - log.Debug("<-readErr", "err", err) - c.closeRequestOps(err) - conn.Close() + conn.handler.log.Debug("RPC connection read error", "err", err) + conn.close(err, lastOp) reading = false - case newconn := <-c.reconnected: - log.Debug("<-reconnected", "reading", reading, "remote", conn.RemoteAddr()) + // Reconnect: + case newcodec := <-c.reconnected: + log.Debug("RPC client reconnected", "reading", reading, "conn", newcodec.RemoteAddr()) if reading { - // Wait for the previous read loop to exit. This is a rare case. - conn.Close() - <-c.readErr + // Wait for the previous read loop to exit. This is a rare case which + // happens if this loop isn't notified in time after the connection breaks. + // In those cases the caller will notice first and reconnect. Closing the + // handler terminates all waiting requests (closing op.resp) except for + // lastOp, which will be transferred to the new handler. + conn.close(errClientReconnected, lastOp) + c.drainRead() } - go c.read(newconn) + go c.read(newcodec) reading = true - conn = newconn + conn = c.newClientConn(newcodec) + // Re-register the in-flight request on the new handler + // because that's where it will be sent. + conn.handler.addRequestOp(lastOp) - // Send path. - case op := <-requestOpLock: - // Stop listening for further send ops until the current one is done. - requestOpLock = nil + // Send path: + case op := <-reqInitLock: + // Stop listening for further requests until the current one has been sent. + reqInitLock = nil lastOp = op - for _, id := range op.ids { - c.respWait[string(id)] = op - } + conn.handler.addRequestOp(op) - case err := <-c.sendDone: + case err := <-c.reqSent: if err != nil { - // Remove response handlers for the last send. We remove those here - // because the error is already handled in Call or BatchCall. When the - // read loop goes down, it will signal all other current operations. - for _, id := range lastOp.ids { - delete(c.respWait, string(id)) - } + // Remove response handlers for the last send. When the read loop + // goes down, it will signal all other current operations. + conn.handler.removeRequestOp(lastOp) } - // Listen for send ops again. - requestOpLock = c.requestOp + // Let the next request in. + reqInitLock = c.reqInit lastOp = nil + + case op := <-c.reqTimeout: + conn.handler.removeRequestOp(op) } } } -// closeRequestOps unblocks pending send ops and active subscriptions. -func (c *Client) closeRequestOps(err error) { - didClose := make(map[*requestOp]bool) - - for id, op := range c.respWait { - // Remove the op so that later calls will not close op.resp again. - delete(c.respWait, id) - - if !didClose[op] { - op.err = err - close(op.resp) - didClose[op] = true - } - } - for id, sub := range c.subs { - delete(c.subs, id) - sub.quitWithError(err, false) - } -} - -func (c *Client) handleNotification(msg *jsonrpcMessage) { - if !strings.HasSuffix(msg.Method, notificationMethodSuffix) { - log.Debug("dropping non-subscription message", "msg", msg) - return - } - var subResult struct { - ID string `json:"subscription"` - Result json.RawMessage `json:"result"` - } - if err := json.Unmarshal(msg.Params, &subResult); err != nil { - log.Debug("dropping invalid subscription message", "msg", msg) - return - } - if c.subs[subResult.ID] != nil { - c.subs[subResult.ID].deliver(subResult.Result) - } -} - -func (c *Client) handleResponse(msg *jsonrpcMessage) { - op := c.respWait[string(msg.ID)] - if op == nil { - log.Debug("unsolicited response", "msg", msg) - return - } - delete(c.respWait, string(msg.ID)) - // For normal responses, just forward the reply to Call/BatchCall. - if op.sub == nil { - op.resp <- msg - return - } - // For subscription responses, start the subscription if the server - // indicates success. EthSubscribe gets unblocked in either case through - // the op.resp channel. - defer close(op.resp) - if msg.Error != nil { - op.err = msg.Error - return - } - if op.err = json.Unmarshal(msg.Result, &op.sub.subid); op.err == nil { - go op.sub.start() - c.subs[op.sub.subid] = op.sub - } -} - -// Reading happens on a dedicated goroutine. - -func (c *Client) read(conn net.Conn) error { - var ( - buf json.RawMessage - dec = json.NewDecoder(conn) - ) - readMessage := func() (rs []*jsonrpcMessage, err error) { - buf = buf[:0] - if err = dec.Decode(&buf); err != nil { - return nil, err - } - if isBatch(buf) { - err = json.Unmarshal(buf, &rs) - } else { - rs = make([]*jsonrpcMessage, 1) - err = json.Unmarshal(buf, &rs[0]) - } - return rs, err - } - +// drainRead drops read messages until an error occurs. +func (c *Client) drainRead() { for { - resp, err := readMessage() + select { + case <-c.readOp: + case <-c.readErr: + return + } + } +} + +// read decodes RPC messages from a codec, feeding them into dispatch. +func (c *Client) read(codec ServerCodec) { + for { + msgs, batch, err := codec.Read() + if _, ok := err.(*json.SyntaxError); ok { + codec.Write(context.Background(), errorMessage(&parseError{err.Error()})) + } if err != nil { c.readErr <- err - return err + return } - c.readResp <- resp + c.readOp <- readOp{msgs, batch} } } - -// Subscriptions. - -// A ClientSubscription represents a subscription established through EthSubscribe. -type ClientSubscription struct { - client *Client - etype reflect.Type - channel reflect.Value - namespace string - subid string - in chan json.RawMessage - - quitOnce sync.Once // ensures quit is closed once - quit chan struct{} // quit is closed when the subscription exits - errOnce sync.Once // ensures err is closed once - err chan error -} - -func newClientSubscription(c *Client, namespace string, channel reflect.Value) *ClientSubscription { - sub := &ClientSubscription{ - client: c, - namespace: namespace, - etype: channel.Type().Elem(), - channel: channel, - quit: make(chan struct{}), - err: make(chan error, 1), - in: make(chan json.RawMessage), - } - return sub -} - -// Err returns the subscription error channel. The intended use of Err is to schedule -// resubscription when the client connection is closed unexpectedly. -// -// The error channel receives a value when the subscription has ended due -// to an error. The received error is nil if Close has been called -// on the underlying client and no other error has occurred. -// -// The error channel is closed when Unsubscribe is called on the subscription. -func (sub *ClientSubscription) Err() <-chan error { - return sub.err -} - -// Unsubscribe unsubscribes the notification and closes the error channel. -// It can safely be called more than once. -func (sub *ClientSubscription) Unsubscribe() { - sub.quitWithError(nil, true) - sub.errOnce.Do(func() { close(sub.err) }) -} - -func (sub *ClientSubscription) quitWithError(err error, unsubscribeServer bool) { - sub.quitOnce.Do(func() { - // The dispatch loop won't be able to execute the unsubscribe call - // if it is blocked on deliver. Close sub.quit first because it - // unblocks deliver. - close(sub.quit) - if unsubscribeServer { - sub.requestUnsubscribe() - } - if err != nil { - if err == ErrClientQuit { - err = nil // Adhere to subscription semantics. - } - sub.err <- err - } - }) -} - -func (sub *ClientSubscription) deliver(result json.RawMessage) (ok bool) { - select { - case sub.in <- result: - return true - case <-sub.quit: - return false - } -} - -func (sub *ClientSubscription) start() { - sub.quitWithError(sub.forward()) -} - -func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { - cases := []reflect.SelectCase{ - {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.quit)}, - {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.in)}, - {Dir: reflect.SelectSend, Chan: sub.channel}, - } - buffer := list.New() - defer buffer.Init() - for { - var chosen int - var recv reflect.Value - if buffer.Len() == 0 { - // Idle, omit send case. - chosen, recv, _ = reflect.Select(cases[:2]) - } else { - // Non-empty buffer, send the first queued item. - cases[2].Send = reflect.ValueOf(buffer.Front().Value) - chosen, recv, _ = reflect.Select(cases) - } - - switch chosen { - case 0: // <-sub.quit - return nil, false - case 1: // <-sub.in - val, err := sub.unmarshal(recv.Interface().(json.RawMessage)) - if err != nil { - return err, true - } - if buffer.Len() == maxClientSubscriptionBuffer { - return ErrSubscriptionQueueOverflow, true - } - buffer.PushBack(val) - case 2: // sub.channel<- - cases[2].Send = reflect.Value{} // Don't hold onto the value. - buffer.Remove(buffer.Front()) - } - } -} - -func (sub *ClientSubscription) unmarshal(result json.RawMessage) (interface{}, error) { - val := reflect.New(sub.etype) - err := json.Unmarshal(result, val.Interface()) - return val.Elem().Interface(), err -} - -func (sub *ClientSubscription) requestUnsubscribe() error { - var result interface{} - return sub.client.Call(&result, sub.namespace+unsubscribeMethodSuffix, sub.subid) -} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/client_test.go b/vendor/github.com/ethereum/go-ethereum/rpc/client_test.go index a8195c0a..80fe29f8 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/client_test.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/client_test.go @@ -35,13 +35,13 @@ import ( ) func TestClientRequest(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() var resp Result - if err := client.Call(&resp, "service_echo", "hello", 10, &Args{"world"}); err != nil { + if err := client.Call(&resp, "test_echo", "hello", 10, &Args{"world"}); err != nil { t.Fatal(err) } if !reflect.DeepEqual(resp, Result{"hello", 10, &Args{"world"}}) { @@ -50,19 +50,19 @@ func TestClientRequest(t *testing.T) { } func TestClientBatchRequest(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() batch := []BatchElem{ { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello", 10, &Args{"world"}}, Result: new(Result), }, { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello2", 11, &Args{"world"}}, Result: new(Result), }, @@ -77,12 +77,12 @@ func TestClientBatchRequest(t *testing.T) { } wantResult := []BatchElem{ { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello", 10, &Args{"world"}}, Result: &Result{"hello", 10, &Args{"world"}}, }, { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello2", 11, &Args{"world"}}, Result: &Result{"hello2", 11, &Args{"world"}}, }, @@ -90,7 +90,7 @@ func TestClientBatchRequest(t *testing.T) { Method: "no_such_method", Args: []interface{}{1, 2, 3}, Result: new(int), - Error: &jsonError{Code: -32601, Message: "The method no_such_method_ does not exist/is not available"}, + Error: &jsonError{Code: -32601, Message: "the method no_such_method does not exist/is not available"}, }, } if !reflect.DeepEqual(batch, wantResult) { @@ -98,6 +98,17 @@ func TestClientBatchRequest(t *testing.T) { } } +func TestClientNotify(t *testing.T) { + server := newTestServer() + defer server.Stop() + client := DialInProc(server) + defer client.Close() + + if err := client.Notify(context.Background(), "test_echo", "hello", 10, &Args{"world"}); err != nil { + t.Fatal(err) + } +} + // func TestClientCancelInproc(t *testing.T) { testClientCancel("inproc", t) } func TestClientCancelWebsocket(t *testing.T) { testClientCancel("ws", t) } func TestClientCancelHTTP(t *testing.T) { testClientCancel("http", t) } @@ -106,7 +117,12 @@ func TestClientCancelIPC(t *testing.T) { testClientCancel("ipc", t) } // This test checks that requests made through CallContext can be canceled by canceling // the context. func testClientCancel(transport string, t *testing.T) { - server := newTestServer("service", new(Service)) + // These tests take a lot of time, run them all at once. + // You probably want to run with -parallel 1 or comment out + // the call to t.Parallel if you enable the logging. + t.Parallel() + + server := newTestServer() defer server.Stop() // What we want to achieve is that the context gets canceled @@ -142,11 +158,6 @@ func testClientCancel(transport string, t *testing.T) { panic("unknown transport: " + transport) } - // These tests take a lot of time, run them all at once. - // You probably want to run with -parallel 1 or comment out - // the call to t.Parallel if you enable the logging. - t.Parallel() - // The actual test starts here. var ( wg sync.WaitGroup @@ -174,7 +185,8 @@ func testClientCancel(transport string, t *testing.T) { } // Now perform a call with the context. // The key thing here is that no call will ever complete successfully. - err := client.CallContext(ctx, nil, "service_sleep", 2*maxContextCancelTimeout) + sleepTime := maxContextCancelTimeout + 20*time.Millisecond + err := client.CallContext(ctx, nil, "test_sleep", sleepTime) if err != nil { log.Debug(fmt.Sprint("got expected error:", err)) } else { @@ -191,7 +203,7 @@ func testClientCancel(transport string, t *testing.T) { } func TestClientSubscribeInvalidArg(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() @@ -221,14 +233,14 @@ func TestClientSubscribeInvalidArg(t *testing.T) { } func TestClientSubscribe(t *testing.T) { - server := newTestServer("eth", new(NotificationTestService)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() nc := make(chan int) count := 10 - sub, err := client.EthSubscribe(context.Background(), nc, "someSubscription", count, 0) + sub, err := client.Subscribe(context.Background(), "nftest", nc, "someSubscription", count, 0) if err != nil { t.Fatal("can't subscribe:", err) } @@ -251,46 +263,17 @@ func TestClientSubscribe(t *testing.T) { } } -func TestClientSubscribeCustomNamespace(t *testing.T) { - namespace := "custom" - server := newTestServer(namespace, new(NotificationTestService)) - defer server.Stop() - client := DialInProc(server) - defer client.Close() - - nc := make(chan int) - count := 10 - sub, err := client.Subscribe(context.Background(), namespace, nc, "someSubscription", count, 0) - if err != nil { - t.Fatal("can't subscribe:", err) - } - for i := 0; i < count; i++ { - if val := <-nc; val != i { - t.Fatalf("value mismatch: got %d, want %d", val, i) - } - } - - sub.Unsubscribe() - select { - case v := <-nc: - t.Fatal("received value after unsubscribe:", v) - case err := <-sub.Err(): - if err != nil { - t.Fatalf("Err returned a non-nil error after explicit unsubscribe: %q", err) - } - case <-time.After(1 * time.Second): - t.Fatalf("subscription not closed within 1s after unsubscribe") - } -} - -// In this test, the connection drops while EthSubscribe is -// waiting for a response. +// In this test, the connection drops while Subscribe is waiting for a response. func TestClientSubscribeClose(t *testing.T) { - service := &NotificationTestService{ + server := newTestServer() + service := ¬ificationTestService{ gotHangSubscriptionReq: make(chan struct{}), unblockHangSubscription: make(chan struct{}), } - server := newTestServer("eth", service) + if err := server.RegisterName("nftest2", service); err != nil { + t.Fatal(err) + } + defer server.Stop() client := DialInProc(server) defer client.Close() @@ -302,7 +285,7 @@ func TestClientSubscribeClose(t *testing.T) { err error ) go func() { - sub, err = client.EthSubscribe(context.Background(), nc, "hangSubscription", 999) + sub, err = client.Subscribe(context.Background(), "nftest2", nc, "hangSubscription", 999) errc <- err }() @@ -313,27 +296,26 @@ func TestClientSubscribeClose(t *testing.T) { select { case err := <-errc: if err == nil { - t.Errorf("EthSubscribe returned nil error after Close") + t.Errorf("Subscribe returned nil error after Close") } if sub != nil { - t.Error("EthSubscribe returned non-nil subscription after Close") + t.Error("Subscribe returned non-nil subscription after Close") } case <-time.After(1 * time.Second): - t.Fatalf("EthSubscribe did not return within 1s after Close") + t.Fatalf("Subscribe did not return within 1s after Close") } } // This test reproduces https://github.com/ethereum/go-ethereum/issues/17837 where the // client hangs during shutdown when Unsubscribe races with Client.Close. func TestClientCloseUnsubscribeRace(t *testing.T) { - service := &NotificationTestService{} - server := newTestServer("eth", service) + server := newTestServer() defer server.Stop() for i := 0; i < 20; i++ { client := DialInProc(server) nc := make(chan int) - sub, err := client.EthSubscribe(context.Background(), nc, "someSubscription", 3, 1) + sub, err := client.Subscribe(context.Background(), "nftest", nc, "someSubscription", 3, 1) if err != nil { t.Fatal(err) } @@ -350,7 +332,7 @@ func TestClientCloseUnsubscribeRace(t *testing.T) { // This test checks that Client doesn't lock up when a single subscriber // doesn't read subscription events. func TestClientNotificationStorm(t *testing.T) { - server := newTestServer("eth", new(NotificationTestService)) + server := newTestServer() defer server.Stop() doTest := func(count int, wantError bool) { @@ -362,7 +344,7 @@ func TestClientNotificationStorm(t *testing.T) { // Subscribe on the server. It will start sending many notifications // very quickly. nc := make(chan int) - sub, err := client.EthSubscribe(ctx, nc, "someSubscription", count, 0) + sub, err := client.Subscribe(ctx, "nftest", nc, "someSubscription", count, 0) if err != nil { t.Fatal("can't subscribe:", err) } @@ -384,7 +366,7 @@ func TestClientNotificationStorm(t *testing.T) { return } var r int - err := client.CallContext(ctx, &r, "eth_echo", i) + err := client.CallContext(ctx, &r, "nftest_echo", i) if err != nil { if !wantError { t.Fatalf("(%d/%d) call error: %v", i, count, err) @@ -399,7 +381,7 @@ func TestClientNotificationStorm(t *testing.T) { } func TestClientHTTP(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client, hs := httpTestClient(server, "http", nil) @@ -416,7 +398,7 @@ func TestClientHTTP(t *testing.T) { for i := range results { i := i go func() { - errc <- client.Call(&results[i], "service_echo", + errc <- client.Call(&results[i], "test_echo", wantResult.String, wantResult.Int, wantResult.Args) }() } @@ -445,16 +427,16 @@ func TestClientHTTP(t *testing.T) { func TestClientReconnect(t *testing.T) { startServer := func(addr string) (*Server, net.Listener) { - srv := newTestServer("service", new(Service)) + srv := newTestServer() l, err := net.Listen("tcp", addr) if err != nil { - t.Fatal(err) + t.Fatal("can't listen:", err) } go http.Serve(l, srv.WebsocketHandler([]string{"*"})) return srv, l } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) defer cancel() // Start a server and corresponding client. @@ -466,21 +448,22 @@ func TestClientReconnect(t *testing.T) { // Perform a call. This should work because the server is up. var resp Result - if err := client.CallContext(ctx, &resp, "service_echo", "", 1, nil); err != nil { + if err := client.CallContext(ctx, &resp, "test_echo", "", 1, nil); err != nil { t.Fatal(err) } - // Shut down the server and try calling again. It shouldn't work. + // Shut down the server and allow for some cool down time so we can listen on the same + // address again. l1.Close() s1.Stop() - if err := client.CallContext(ctx, &resp, "service_echo", "", 2, nil); err == nil { + time.Sleep(2 * time.Second) + + // Try calling again. It shouldn't work. + if err := client.CallContext(ctx, &resp, "test_echo", "", 2, nil); err == nil { t.Error("successful call while the server is down") t.Logf("resp: %#v", resp) } - // Allow for some cool down time so we can listen on the same address again. - time.Sleep(2 * time.Second) - // Start it up again and call again. The connection should be reestablished. // We spawn multiple calls here to check whether this hangs somehow. s2, l2 := startServer(l1.Addr().String()) @@ -493,7 +476,7 @@ func TestClientReconnect(t *testing.T) { go func() { <-start var resp Result - errors <- client.CallContext(ctx, &resp, "service_echo", "", 3, nil) + errors <- client.CallContext(ctx, &resp, "test_echo", "", 3, nil) }() } close(start) @@ -503,20 +486,12 @@ func TestClientReconnect(t *testing.T) { errcount++ } } - t.Log("err:", err) + t.Logf("%d errors, last error: %v", errcount, err) if errcount > 1 { t.Errorf("expected one error after disconnect, got %d", errcount) } } -func newTestServer(serviceName string, service interface{}) *Server { - server := NewServer() - if err := server.RegisterName(serviceName, service); err != nil { - panic(err) - } - return server -} - func httpTestClient(srv *Server, transport string, fl *flakeyListener) (*Client, *httptest.Server) { // Create the HTTP server. var hs *httptest.Server diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/doc.go b/vendor/github.com/ethereum/go-ethereum/rpc/doc.go index c60381b5..e5840c32 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/doc.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/doc.go @@ -15,43 +15,49 @@ // along with the go-ethereum library. If not, see . /* -Package rpc provides access to the exported methods of an object across a network -or other I/O connection. After creating a server instance objects can be registered, -making it visible from the outside. Exported methods that follow specific -conventions can be called remotely. It also has support for the publish/subscribe -pattern. + +Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports. + +It provides access to the exported methods of an object across a network or other I/O +connection. After creating a server or client instance, objects can be registered to make +them visible as 'services'. Exported methods that follow specific conventions can be +called remotely. It also has support for the publish/subscribe pattern. + +RPC Methods Methods that satisfy the following criteria are made available for remote access: - - object must be exported + - method must be exported - method returns 0, 1 (response or error) or 2 (response and error) values - method argument(s) must be exported or builtin types - method returned value(s) must be exported or builtin types An example method: + func (s *CalcService) Add(a, b int) (int, error) -When the returned error isn't nil the returned integer is ignored and the error is -sent back to the client. Otherwise the returned integer is sent back to the client. +When the returned error isn't nil the returned integer is ignored and the error is sent +back to the client. Otherwise the returned integer is sent back to the client. -Optional arguments are supported by accepting pointer values as arguments. E.g. -if we want to do the addition in an optional finite field we can accept a mod -argument as pointer value. +Optional arguments are supported by accepting pointer values as arguments. E.g. if we want +to do the addition in an optional finite field we can accept a mod argument as pointer +value. - func (s *CalService) Add(a, b int, mod *int) (int, error) + func (s *CalcService) Add(a, b int, mod *int) (int, error) -This RPC method can be called with 2 integers and a null value as third argument. -In that case the mod argument will be nil. Or it can be called with 3 integers, -in that case mod will be pointing to the given third argument. Since the optional -argument is the last argument the RPC package will also accept 2 integers as -arguments. It will pass the mod argument as nil to the RPC method. +This RPC method can be called with 2 integers and a null value as third argument. In that +case the mod argument will be nil. Or it can be called with 3 integers, in that case mod +will be pointing to the given third argument. Since the optional argument is the last +argument the RPC package will also accept 2 integers as arguments. It will pass the mod +argument as nil to the RPC method. -The server offers the ServeCodec method which accepts a ServerCodec instance. It will -read requests from the codec, process the request and sends the response back to the -client using the codec. The server can execute requests concurrently. Responses -can be sent back to the client out of order. +The server offers the ServeCodec method which accepts a ServerCodec instance. It will read +requests from the codec, process the request and sends the response back to the client +using the codec. The server can execute requests concurrently. Responses can be sent back +to the client out of order. An example server which uses the JSON codec: + type CalculatorService struct {} func (s *CalculatorService) Add(a, b int) int { @@ -73,26 +79,40 @@ An example server which uses the JSON codec: for { c, _ := l.AcceptUnix() codec := v2.NewJSONCodec(c) - go server.ServeCodec(codec) + go server.ServeCodec(codec, 0) } +Subscriptions + The package also supports the publish subscribe pattern through the use of subscriptions. -A method that is considered eligible for notifications must satisfy the following criteria: - - object must be exported +A method that is considered eligible for notifications must satisfy the following +criteria: + - method must be exported - first method argument type must be context.Context - method argument(s) must be exported or builtin types - - method must return the tuple Subscription, error + - method must have return types (rpc.Subscription, error) An example method: - func (s *BlockChainService) NewBlocks(ctx context.Context) (Subscription, error) { + + func (s *BlockChainService) NewBlocks(ctx context.Context) (rpc.Subscription, error) { ... } -Subscriptions are deleted when: - - the user sends an unsubscribe request - - the connection which was used to create the subscription is closed. This can be initiated - by the client and server. The server will close the connection on a write error or when - the queue of buffered notifications gets too big. +When the service containing the subscription method is registered to the server, for +example under the "blockchain" namespace, a subscription is created by calling the +"blockchain_subscribe" method. + +Subscriptions are deleted when the user sends an unsubscribe request or when the +connection which was used to create the subscription is closed. This can be initiated by +the client and server. The server will close the connection for any write error. + +For more information about subscriptions, see https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB. + +Reverse Calls + +In any method handler, an instance of rpc.Client can be accessed through the +ClientFromContext method. Using this client instance, server-to-client method calls can be +performed on the RPC connection. */ package rpc diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/errors.go b/vendor/github.com/ethereum/go-ethereum/rpc/errors.go index 9cf9dc60..c3aa826c 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/errors.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/errors.go @@ -18,18 +18,31 @@ package rpc import "fmt" -// request is for an unknown service -type methodNotFoundError struct { - service string - method string -} +const defaultErrorCode = -32000 + +type methodNotFoundError struct{ method string } func (e *methodNotFoundError) ErrorCode() int { return -32601 } func (e *methodNotFoundError) Error() string { - return fmt.Sprintf("The method %s%s%s does not exist/is not available", e.service, serviceMethodSeparator, e.method) + return fmt.Sprintf("the method %s does not exist/is not available", e.method) } +type subscriptionNotFoundError struct{ namespace, subscription string } + +func (e *subscriptionNotFoundError) ErrorCode() int { return -32601 } + +func (e *subscriptionNotFoundError) Error() string { + return fmt.Sprintf("no %q subscription in %s namespace", e.subscription, e.namespace) +} + +// Invalid JSON was received by the server. +type parseError struct{ message string } + +func (e *parseError) ErrorCode() int { return -32700 } + +func (e *parseError) Error() string { return e.message } + // received message isn't a valid request type invalidRequestError struct{ message string } @@ -50,17 +63,3 @@ type invalidParamsError struct{ message string } func (e *invalidParamsError) ErrorCode() int { return -32602 } func (e *invalidParamsError) Error() string { return e.message } - -// logic error, callback returned an error -type callbackError struct{ message string } - -func (e *callbackError) ErrorCode() int { return -32000 } - -func (e *callbackError) Error() string { return e.message } - -// issued when a request is received after the server is issued to stop. -type shutdownError struct{} - -func (e *shutdownError) ErrorCode() int { return -32000 } - -func (e *shutdownError) Error() string { return "server is shutting down" } diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/handler.go b/vendor/github.com/ethereum/go-ethereum/rpc/handler.go new file mode 100644 index 00000000..bc03ef25 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/handler.go @@ -0,0 +1,397 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "encoding/json" + "reflect" + "strconv" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/log" +) + +// handler handles JSON-RPC messages. There is one handler per connection. Note that +// handler is not safe for concurrent use. Message handling never blocks indefinitely +// because RPCs are processed on background goroutines launched by handler. +// +// The entry points for incoming messages are: +// +// h.handleMsg(message) +// h.handleBatch(message) +// +// Outgoing calls use the requestOp struct. Register the request before sending it +// on the connection: +// +// op := &requestOp{ids: ...} +// h.addRequestOp(op) +// +// Now send the request, then wait for the reply to be delivered through handleMsg: +// +// if err := op.wait(...); err != nil { +// h.removeRequestOp(op) // timeout, etc. +// } +// +type handler struct { + reg *serviceRegistry + unsubscribeCb *callback + idgen func() ID // subscription ID generator + respWait map[string]*requestOp // active client requests + clientSubs map[string]*ClientSubscription // active client subscriptions + callWG sync.WaitGroup // pending call goroutines + rootCtx context.Context // canceled by close() + cancelRoot func() // cancel function for rootCtx + conn jsonWriter // where responses will be sent + log log.Logger + allowSubscribe bool + + subLock sync.Mutex + serverSubs map[ID]*Subscription +} + +type callProc struct { + ctx context.Context + notifiers []*Notifier +} + +func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg *serviceRegistry) *handler { + rootCtx, cancelRoot := context.WithCancel(connCtx) + h := &handler{ + reg: reg, + idgen: idgen, + conn: conn, + respWait: make(map[string]*requestOp), + clientSubs: make(map[string]*ClientSubscription), + rootCtx: rootCtx, + cancelRoot: cancelRoot, + allowSubscribe: true, + serverSubs: make(map[ID]*Subscription), + log: log.Root(), + } + if conn.RemoteAddr() != "" { + h.log = h.log.New("conn", conn.RemoteAddr()) + } + h.unsubscribeCb = newCallback(reflect.Value{}, reflect.ValueOf(h.unsubscribe)) + return h +} + +// handleBatch executes all messages in a batch and returns the responses. +func (h *handler) handleBatch(msgs []*jsonrpcMessage) { + // Emit error response for empty batches: + if len(msgs) == 0 { + h.startCallProc(func(cp *callProc) { + h.conn.Write(cp.ctx, errorMessage(&invalidRequestError{"empty batch"})) + }) + return + } + + // Handle non-call messages first: + calls := make([]*jsonrpcMessage, 0, len(msgs)) + for _, msg := range msgs { + if handled := h.handleImmediate(msg); !handled { + calls = append(calls, msg) + } + } + if len(calls) == 0 { + return + } + // Process calls on a goroutine because they may block indefinitely: + h.startCallProc(func(cp *callProc) { + answers := make([]*jsonrpcMessage, 0, len(msgs)) + for _, msg := range calls { + if answer := h.handleCallMsg(cp, msg); answer != nil { + answers = append(answers, answer) + } + } + h.addSubscriptions(cp.notifiers) + if len(answers) > 0 { + h.conn.Write(cp.ctx, answers) + } + for _, n := range cp.notifiers { + n.activate() + } + }) +} + +// handleMsg handles a single message. +func (h *handler) handleMsg(msg *jsonrpcMessage) { + if ok := h.handleImmediate(msg); ok { + return + } + h.startCallProc(func(cp *callProc) { + answer := h.handleCallMsg(cp, msg) + h.addSubscriptions(cp.notifiers) + if answer != nil { + h.conn.Write(cp.ctx, answer) + } + for _, n := range cp.notifiers { + n.activate() + } + }) +} + +// close cancels all requests except for inflightReq and waits for +// call goroutines to shut down. +func (h *handler) close(err error, inflightReq *requestOp) { + h.cancelAllRequests(err, inflightReq) + h.cancelRoot() + h.callWG.Wait() + h.cancelServerSubscriptions(err) +} + +// addRequestOp registers a request operation. +func (h *handler) addRequestOp(op *requestOp) { + for _, id := range op.ids { + h.respWait[string(id)] = op + } +} + +// removeRequestOps stops waiting for the given request IDs. +func (h *handler) removeRequestOp(op *requestOp) { + for _, id := range op.ids { + delete(h.respWait, string(id)) + } +} + +// cancelAllRequests unblocks and removes pending requests and active subscriptions. +func (h *handler) cancelAllRequests(err error, inflightReq *requestOp) { + didClose := make(map[*requestOp]bool) + if inflightReq != nil { + didClose[inflightReq] = true + } + + for id, op := range h.respWait { + // Remove the op so that later calls will not close op.resp again. + delete(h.respWait, id) + + if !didClose[op] { + op.err = err + close(op.resp) + didClose[op] = true + } + } + for id, sub := range h.clientSubs { + delete(h.clientSubs, id) + sub.quitWithError(err, false) + } +} + +func (h *handler) addSubscriptions(nn []*Notifier) { + h.subLock.Lock() + defer h.subLock.Unlock() + + for _, n := range nn { + if sub := n.takeSubscription(); sub != nil { + h.serverSubs[sub.ID] = sub + } + } +} + +// cancelServerSubscriptions removes all subscriptions and closes their error channels. +func (h *handler) cancelServerSubscriptions(err error) { + h.subLock.Lock() + defer h.subLock.Unlock() + + for id, s := range h.serverSubs { + s.err <- err + close(s.err) + delete(h.serverSubs, id) + } +} + +// startCallProc runs fn in a new goroutine and starts tracking it in the h.calls wait group. +func (h *handler) startCallProc(fn func(*callProc)) { + h.callWG.Add(1) + go func() { + ctx, cancel := context.WithCancel(h.rootCtx) + defer h.callWG.Done() + defer cancel() + fn(&callProc{ctx: ctx}) + }() +} + +// handleImmediate executes non-call messages. It returns false if the message is a +// call or requires a reply. +func (h *handler) handleImmediate(msg *jsonrpcMessage) bool { + start := time.Now() + switch { + case msg.isNotification(): + if strings.HasSuffix(msg.Method, notificationMethodSuffix) { + h.handleSubscriptionResult(msg) + return true + } + return false + case msg.isResponse(): + h.handleResponse(msg) + h.log.Trace("Handled RPC response", "reqid", idForLog{msg.ID}, "t", time.Since(start)) + return true + default: + return false + } +} + +// handleSubscriptionResult processes subscription notifications. +func (h *handler) handleSubscriptionResult(msg *jsonrpcMessage) { + var result subscriptionResult + if err := json.Unmarshal(msg.Params, &result); err != nil { + h.log.Debug("Dropping invalid subscription message") + return + } + if h.clientSubs[result.ID] != nil { + h.clientSubs[result.ID].deliver(result.Result) + } +} + +// handleResponse processes method call responses. +func (h *handler) handleResponse(msg *jsonrpcMessage) { + op := h.respWait[string(msg.ID)] + if op == nil { + h.log.Debug("Unsolicited RPC response", "reqid", idForLog{msg.ID}) + return + } + delete(h.respWait, string(msg.ID)) + // For normal responses, just forward the reply to Call/BatchCall. + if op.sub == nil { + op.resp <- msg + return + } + // For subscription responses, start the subscription if the server + // indicates success. EthSubscribe gets unblocked in either case through + // the op.resp channel. + defer close(op.resp) + if msg.Error != nil { + op.err = msg.Error + return + } + if op.err = json.Unmarshal(msg.Result, &op.sub.subid); op.err == nil { + go op.sub.start() + h.clientSubs[op.sub.subid] = op.sub + } +} + +// handleCallMsg executes a call message and returns the answer. +func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + start := time.Now() + switch { + case msg.isNotification(): + h.handleCall(ctx, msg) + h.log.Debug("Served "+msg.Method, "t", time.Since(start)) + return nil + case msg.isCall(): + resp := h.handleCall(ctx, msg) + if resp.Error != nil { + h.log.Info("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message) + } else { + h.log.Debug("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start)) + } + return resp + case msg.hasValidID(): + return msg.errorResponse(&invalidRequestError{"invalid request"}) + default: + return errorMessage(&invalidRequestError{"invalid request"}) + } +} + +// handleCall processes method calls. +func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + if msg.isSubscribe() { + return h.handleSubscribe(cp, msg) + } + var callb *callback + if msg.isUnsubscribe() { + callb = h.unsubscribeCb + } else { + callb = h.reg.callback(msg.Method) + } + if callb == nil { + return msg.errorResponse(&methodNotFoundError{method: msg.Method}) + } + args, err := parsePositionalArguments(msg.Params, callb.argTypes) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + + return h.runMethod(cp.ctx, msg, callb, args) +} + +// handleSubscribe processes *_subscribe method calls. +func (h *handler) handleSubscribe(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + if !h.allowSubscribe { + return msg.errorResponse(ErrNotificationsUnsupported) + } + + // Subscription method name is first argument. + name, err := parseSubscriptionName(msg.Params) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + namespace := msg.namespace() + callb := h.reg.subscription(namespace, name) + if callb == nil { + return msg.errorResponse(&subscriptionNotFoundError{namespace, name}) + } + + // Parse subscription name arg too, but remove it before calling the callback. + argTypes := append([]reflect.Type{stringType}, callb.argTypes...) + args, err := parsePositionalArguments(msg.Params, argTypes) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + args = args[1:] + + // Install notifier in context so the subscription handler can find it. + n := &Notifier{h: h, namespace: namespace} + cp.notifiers = append(cp.notifiers, n) + ctx := context.WithValue(cp.ctx, notifierKey{}, n) + + return h.runMethod(ctx, msg, callb, args) +} + +// runMethod runs the Go callback for an RPC method. +func (h *handler) runMethod(ctx context.Context, msg *jsonrpcMessage, callb *callback, args []reflect.Value) *jsonrpcMessage { + result, err := callb.call(ctx, msg.Method, args) + if err != nil { + return msg.errorResponse(err) + } + return msg.response(result) +} + +// unsubscribe is the callback function for all *_unsubscribe calls. +func (h *handler) unsubscribe(ctx context.Context, id ID) (bool, error) { + h.subLock.Lock() + defer h.subLock.Unlock() + + s := h.serverSubs[id] + if s == nil { + return false, ErrSubscriptionNotFound + } + close(s.err) + delete(h.serverSubs, id) + return true, nil +} + +type idForLog struct{ json.RawMessage } + +func (id idForLog) String() string { + if s, err := strconv.Unquote(string(id.RawMessage)); err == nil { + return s + } + return string(id.RawMessage) +} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/http.go b/vendor/github.com/ethereum/go-ethereum/rpc/http.go index 674166fb..518b3b87 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/http.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/http.go @@ -37,38 +37,39 @@ import ( const ( maxRequestContentLength = 1024 * 512 + contentType = "application/json" ) -var ( - // https://www.jsonrpc.org/historical/json-rpc-over-http.html#id13 - acceptedContentTypes = []string{"application/json", "application/json-rpc", "application/jsonrequest"} - contentType = acceptedContentTypes[0] - nullAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:0") -) +// https://www.jsonrpc.org/historical/json-rpc-over-http.html#id13 +var acceptedContentTypes = []string{contentType, "application/json-rpc", "application/jsonrequest"} type httpConn struct { client *http.Client req *http.Request closeOnce sync.Once - closed chan struct{} + closed chan interface{} } // httpConn is treated specially by Client. -func (hc *httpConn) LocalAddr() net.Addr { return nullAddr } -func (hc *httpConn) RemoteAddr() net.Addr { return nullAddr } -func (hc *httpConn) SetReadDeadline(time.Time) error { return nil } -func (hc *httpConn) SetWriteDeadline(time.Time) error { return nil } -func (hc *httpConn) SetDeadline(time.Time) error { return nil } -func (hc *httpConn) Write([]byte) (int, error) { panic("Write called") } - -func (hc *httpConn) Read(b []byte) (int, error) { - <-hc.closed - return 0, io.EOF +func (hc *httpConn) Write(context.Context, interface{}) error { + panic("Write called on httpConn") } -func (hc *httpConn) Close() error { +func (hc *httpConn) RemoteAddr() string { + return hc.req.URL.String() +} + +func (hc *httpConn) Read() ([]*jsonrpcMessage, bool, error) { + <-hc.closed + return nil, false, io.EOF +} + +func (hc *httpConn) Close() { hc.closeOnce.Do(func() { close(hc.closed) }) - return nil +} + +func (hc *httpConn) Closed() <-chan interface{} { + return hc.closed } // HTTPTimeouts represents the configuration params for the HTTP RPC server. @@ -114,8 +115,8 @@ func DialHTTPWithClient(endpoint string, client *http.Client) (*Client, error) { req.Header.Set("Accept", contentType) initctx := context.Background() - return newClient(initctx, func(context.Context) (net.Conn, error) { - return &httpConn{client: client, req: req, closed: make(chan struct{})}, nil + return newClient(initctx, func(context.Context) (ServerCodec, error) { + return &httpConn{client: client, req: req, closed: make(chan interface{})}, nil }) } @@ -184,21 +185,34 @@ func (hc *httpConn) doRequest(ctx context.Context, msg interface{}) (io.ReadClos return resp.Body, nil } -// httpReadWriteNopCloser wraps a io.Reader and io.Writer with a NOP Close method. -type httpReadWriteNopCloser struct { +// httpServerConn turns a HTTP connection into a Conn. +type httpServerConn struct { io.Reader io.Writer + r *http.Request } -// Close does nothing and returns always nil -func (t *httpReadWriteNopCloser) Close() error { - return nil +func newHTTPServerConn(r *http.Request, w http.ResponseWriter) ServerCodec { + body := io.LimitReader(r.Body, maxRequestContentLength) + conn := &httpServerConn{Reader: body, Writer: w, r: r} + return NewJSONCodec(conn) } +// Close does nothing and always returns nil. +func (t *httpServerConn) Close() error { return nil } + +// RemoteAddr returns the peer address of the underlying connection. +func (t *httpServerConn) RemoteAddr() string { + return t.r.RemoteAddr +} + +// SetWriteDeadline does nothing and always returns nil. +func (t *httpServerConn) SetWriteDeadline(time.Time) error { return nil } + // NewHTTPServer creates a new HTTP RPC server around an API provider. // // Deprecated: Server implements http.Handler -func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv *Server) *http.Server { +func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv http.Handler) *http.Server { // Wrap the CORS-handler within a host-handler handler := newCorsHandler(srv, cors) handler = newVHostHandler(vhosts, handler) @@ -226,7 +240,7 @@ func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv *S } // ServeHTTP serves JSON-RPC requests over HTTP. -func (srv *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Permit dumb empty requests for remote health-checks (AWS) if r.Method == http.MethodGet && r.ContentLength == 0 && r.URL.RawQuery == "" { return @@ -249,12 +263,10 @@ func (srv *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx = context.WithValue(ctx, "Origin", origin) } - body := io.LimitReader(r.Body, maxRequestContentLength) - codec := NewJSONCodec(&httpReadWriteNopCloser{body, w}) - defer codec.Close() - w.Header().Set("content-type", contentType) - srv.ServeSingleRequest(ctx, codec, OptionMethodInvocation) + codec := newHTTPServerConn(r, w) + defer codec.Close() + s.serveSingleRequest(ctx, codec) } // validateRequest returns a non-zero response code and error message if the @@ -284,7 +296,7 @@ func validateRequest(r *http.Request) (int, error) { return http.StatusUnsupportedMediaType, err } -func newCorsHandler(srv *Server, allowedOrigins []string) http.Handler { +func newCorsHandler(srv http.Handler, allowedOrigins []string) http.Handler { // disable CORS support if user has not specified a custom CORS configuration if len(allowedOrigins) == 0 { return srv diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/inproc.go b/vendor/github.com/ethereum/go-ethereum/rpc/inproc.go index cbe65d10..c4456cfc 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/inproc.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/inproc.go @@ -24,10 +24,10 @@ import ( // DialInProc attaches an in-process connection to the given RPC server. func DialInProc(handler *Server) *Client { initctx := context.Background() - c, _ := newClient(initctx, func(context.Context) (net.Conn, error) { + c, _ := newClient(initctx, func(context.Context) (ServerCodec, error) { p1, p2 := net.Pipe() go handler.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) - return p2, nil + return NewJSONCodec(p2), nil }) return c } diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/ipc.go b/vendor/github.com/ethereum/go-ethereum/rpc/ipc.go index 4cce1cf7..ad8ce030 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/ipc.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/ipc.go @@ -25,17 +25,17 @@ import ( ) // ServeListener accepts connections on l, serving JSON-RPC on them. -func (srv *Server) ServeListener(l net.Listener) error { +func (s *Server) ServeListener(l net.Listener) error { for { conn, err := l.Accept() if netutil.IsTemporaryError(err) { - log.Warn("IPC accept error", "err", err) + log.Warn("RPC accept error", "err", err) continue } else if err != nil { return err } - log.Trace("IPC accepted connection") - go srv.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) + log.Trace("Accepted RPC connection", "conn", conn.RemoteAddr()) + go s.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) } } @@ -46,7 +46,11 @@ func (srv *Server) ServeListener(l net.Listener) error { // The context is used for the initial connection establishment. It does not // affect subsequent interactions with the client. func DialIPC(ctx context.Context, endpoint string) (*Client, error) { - return newClient(ctx, func(ctx context.Context) (net.Conn, error) { - return newIPCConnection(ctx, endpoint) + return newClient(ctx, func(ctx context.Context) (ServerCodec, error) { + conn, err := newIPCConnection(ctx, endpoint) + if err != nil { + return nil, err + } + return NewJSONCodec(conn), err }) } diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/json.go b/vendor/github.com/ethereum/go-ethereum/rpc/json.go index a523eeb8..b2e8c7ba 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/json.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/json.go @@ -18,36 +18,104 @@ package rpc import ( "bytes" + "context" "encoding/json" + "errors" "fmt" "io" "reflect" - "strconv" "strings" "sync" - - "github.com/ethereum/go-ethereum/log" + "time" ) const ( - jsonrpcVersion = "2.0" + vsn = "2.0" serviceMethodSeparator = "_" subscribeMethodSuffix = "_subscribe" unsubscribeMethodSuffix = "_unsubscribe" notificationMethodSuffix = "_subscription" + + defaultWriteTimeout = 10 * time.Second // used if context has no deadline ) -type jsonRequest struct { - Method string `json:"method"` - Version string `json:"jsonrpc"` - Id json.RawMessage `json:"id,omitempty"` - Payload json.RawMessage `json:"params,omitempty"` +var null = json.RawMessage("null") + +type subscriptionResult struct { + ID string `json:"subscription"` + Result json.RawMessage `json:"result,omitempty"` } -type jsonSuccessResponse struct { - Version string `json:"jsonrpc"` - Id interface{} `json:"id,omitempty"` - Result interface{} `json:"result"` +// A value of this type can a JSON-RPC request, notification, successful response or +// error response. Which one it is depends on the fields. +type jsonrpcMessage struct { + Version string `json:"jsonrpc,omitempty"` + ID json.RawMessage `json:"id,omitempty"` + Method string `json:"method,omitempty"` + Params json.RawMessage `json:"params,omitempty"` + Error *jsonError `json:"error,omitempty"` + Result json.RawMessage `json:"result,omitempty"` +} + +func (msg *jsonrpcMessage) isNotification() bool { + return msg.ID == nil && msg.Method != "" +} + +func (msg *jsonrpcMessage) isCall() bool { + return msg.hasValidID() && msg.Method != "" +} + +func (msg *jsonrpcMessage) isResponse() bool { + return msg.hasValidID() && msg.Method == "" && msg.Params == nil && (msg.Result != nil || msg.Error != nil) +} + +func (msg *jsonrpcMessage) hasValidID() bool { + return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '[' +} + +func (msg *jsonrpcMessage) isSubscribe() bool { + return strings.HasSuffix(msg.Method, subscribeMethodSuffix) +} + +func (msg *jsonrpcMessage) isUnsubscribe() bool { + return strings.HasSuffix(msg.Method, unsubscribeMethodSuffix) +} + +func (msg *jsonrpcMessage) namespace() string { + elem := strings.SplitN(msg.Method, serviceMethodSeparator, 2) + return elem[0] +} + +func (msg *jsonrpcMessage) String() string { + b, _ := json.Marshal(msg) + return string(b) +} + +func (msg *jsonrpcMessage) errorResponse(err error) *jsonrpcMessage { + resp := errorMessage(err) + resp.ID = msg.ID + return resp +} + +func (msg *jsonrpcMessage) response(result interface{}) *jsonrpcMessage { + enc, err := json.Marshal(result) + if err != nil { + // TODO: wrap with 'internal server error' + return msg.errorResponse(err) + } + return &jsonrpcMessage{Version: vsn, ID: msg.ID, Result: enc} +} + +func errorMessage(err error) *jsonrpcMessage { + msg := &jsonrpcMessage{Version: vsn, ID: null, Error: &jsonError{ + Code: defaultErrorCode, + Message: err.Error(), + }} + ec, ok := err.(Error) + if ok { + msg.Error.Code = ec.ErrorCode() + } + return msg } type jsonError struct { @@ -56,35 +124,6 @@ type jsonError struct { Data interface{} `json:"data,omitempty"` } -type jsonErrResponse struct { - Version string `json:"jsonrpc"` - Id interface{} `json:"id,omitempty"` - Error jsonError `json:"error"` -} - -type jsonSubscription struct { - Subscription string `json:"subscription"` - Result interface{} `json:"result,omitempty"` -} - -type jsonNotification struct { - Version string `json:"jsonrpc"` - Method string `json:"method"` - Params jsonSubscription `json:"params"` -} - -// jsonCodec reads and writes JSON-RPC messages to the underlying connection. It -// also has support for parsing arguments and serializing (result) objects. -type jsonCodec struct { - closer sync.Once // close closed channel once - closed chan interface{} // closed on Close - decMu sync.Mutex // guards the decoder - decode func(v interface{}) error // decoder to allow multiple transports - encMu sync.Mutex // guards the encoder - encode func(v interface{}) error // encoder to allow multiple transports - rw io.ReadWriteCloser // connection -} - func (err *jsonError) Error() string { if err.Message == "" { return fmt.Sprintf("json-rpc error %d", err.Code) @@ -96,34 +135,126 @@ func (err *jsonError) ErrorCode() int { return err.Code } +// Conn is a subset of the methods of net.Conn which are sufficient for ServerCodec. +type Conn interface { + io.ReadWriteCloser + SetWriteDeadline(time.Time) error +} + +// ConnRemoteAddr wraps the RemoteAddr operation, which returns a description +// of the peer address of a connection. If a Conn also implements ConnRemoteAddr, this +// description is used in log messages. +type ConnRemoteAddr interface { + RemoteAddr() string +} + +// connWithRemoteAddr overrides the remote address of a connection. +type connWithRemoteAddr struct { + Conn + addr string +} + +func (c connWithRemoteAddr) RemoteAddr() string { return c.addr } + +// jsonCodec reads and writes JSON-RPC messages to the underlying connection. It also has +// support for parsing arguments and serializing (result) objects. +type jsonCodec struct { + remoteAddr string + closer sync.Once // close closed channel once + closed chan interface{} // closed on Close + decode func(v interface{}) error // decoder to allow multiple transports + encMu sync.Mutex // guards the encoder + encode func(v interface{}) error // encoder to allow multiple transports + conn Conn +} + // NewCodec creates a new RPC server codec with support for JSON-RPC 2.0 based // on explicitly given encoding and decoding methods. -func NewCodec(rwc io.ReadWriteCloser, encode, decode func(v interface{}) error) ServerCodec { - return &jsonCodec{ +func NewCodec(conn Conn, encode, decode func(v interface{}) error) ServerCodec { + codec := &jsonCodec{ closed: make(chan interface{}), encode: encode, decode: decode, - rw: rwc, + conn: conn, } + if ra, ok := conn.(ConnRemoteAddr); ok { + codec.remoteAddr = ra.RemoteAddr() + } + return codec } // NewJSONCodec creates a new RPC server codec with support for JSON-RPC 2.0. -func NewJSONCodec(rwc io.ReadWriteCloser) ServerCodec { - enc := json.NewEncoder(rwc) - dec := json.NewDecoder(rwc) +func NewJSONCodec(conn Conn) ServerCodec { + enc := json.NewEncoder(conn) + dec := json.NewDecoder(conn) dec.UseNumber() + return NewCodec(conn, enc.Encode, dec.Decode) +} - return &jsonCodec{ - closed: make(chan interface{}), - encode: enc.Encode, - decode: dec.Decode, - rw: rwc, +func (c *jsonCodec) RemoteAddr() string { + return c.remoteAddr +} + +func (c *jsonCodec) Read() (msg []*jsonrpcMessage, batch bool, err error) { + // Decode the next JSON object in the input stream. + // This verifies basic syntax, etc. + var rawmsg json.RawMessage + if err := c.decode(&rawmsg); err != nil { + return nil, false, err } + msg, batch = parseMessage(rawmsg) + return msg, batch, nil +} + +// Write sends a message to client. +func (c *jsonCodec) Write(ctx context.Context, v interface{}) error { + c.encMu.Lock() + defer c.encMu.Unlock() + + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(defaultWriteTimeout) + } + c.conn.SetWriteDeadline(deadline) + return c.encode(v) +} + +// Close the underlying connection +func (c *jsonCodec) Close() { + c.closer.Do(func() { + close(c.closed) + c.conn.Close() + }) +} + +// Closed returns a channel which will be closed when Close is called +func (c *jsonCodec) Closed() <-chan interface{} { + return c.closed +} + +// parseMessage parses raw bytes as a (batch of) JSON-RPC message(s). There are no error +// checks in this function because the raw message has already been syntax-checked when it +// is called. Any non-JSON-RPC messages in the input return the zero value of +// jsonrpcMessage. +func parseMessage(raw json.RawMessage) ([]*jsonrpcMessage, bool) { + if !isBatch(raw) { + msgs := []*jsonrpcMessage{{}} + json.Unmarshal(raw, &msgs[0]) + return msgs, false + } + dec := json.NewDecoder(bytes.NewReader(raw)) + dec.Token() // skip '[' + var msgs []*jsonrpcMessage + for dec.More() { + msgs = append(msgs, new(jsonrpcMessage)) + dec.Decode(&msgs[len(msgs)-1]) + } + return msgs, true } // isBatch returns true when the first non-whitespace characters is '[' -func isBatch(msg json.RawMessage) bool { - for _, c := range msg { +func isBatch(raw json.RawMessage) bool { + for _, c := range raw { // skip insignificant whitespace (http://www.ietf.org/rfc/rfc4627.txt) if c == 0x20 || c == 0x09 || c == 0x0a || c == 0x0d { continue @@ -133,231 +264,67 @@ func isBatch(msg json.RawMessage) bool { return false } -// ReadRequestHeaders will read new requests without parsing the arguments. It will -// return a collection of requests, an indication if these requests are in batch -// form or an error when the incoming message could not be read/parsed. -func (c *jsonCodec) ReadRequestHeaders() ([]rpcRequest, bool, Error) { - c.decMu.Lock() - defer c.decMu.Unlock() - - var incomingMsg json.RawMessage - if err := c.decode(&incomingMsg); err != nil { - return nil, false, &invalidRequestError{err.Error()} - } - if isBatch(incomingMsg) { - return parseBatchRequest(incomingMsg) - } - return parseRequest(incomingMsg) -} - -// checkReqId returns an error when the given reqId isn't valid for RPC method calls. -// valid id's are strings, numbers or null -func checkReqId(reqId json.RawMessage) error { - if len(reqId) == 0 { - return fmt.Errorf("missing request id") - } - if _, err := strconv.ParseFloat(string(reqId), 64); err == nil { - return nil - } - var str string - if err := json.Unmarshal(reqId, &str); err == nil { - return nil - } - return fmt.Errorf("invalid request id") -} - -// parseRequest will parse a single request from the given RawMessage. It will return -// the parsed request, an indication if the request was a batch or an error when -// the request could not be parsed. -func parseRequest(incomingMsg json.RawMessage) ([]rpcRequest, bool, Error) { - var in jsonRequest - if err := json.Unmarshal(incomingMsg, &in); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } - - if err := checkReqId(in.Id); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } - - // subscribe are special, they will always use `subscribeMethod` as first param in the payload - if strings.HasSuffix(in.Method, subscribeMethodSuffix) { - reqs := []rpcRequest{{id: &in.Id, isPubSub: true}} - if len(in.Payload) > 0 { - // first param must be subscription name - var subscribeMethod [1]string - if err := json.Unmarshal(in.Payload, &subscribeMethod); err != nil { - log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } - - reqs[0].service, reqs[0].method = strings.TrimSuffix(in.Method, subscribeMethodSuffix), subscribeMethod[0] - reqs[0].params = in.Payload - return reqs, false, nil - } - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } - - if strings.HasSuffix(in.Method, unsubscribeMethodSuffix) { - return []rpcRequest{{id: &in.Id, isPubSub: true, - method: in.Method, params: in.Payload}}, false, nil - } - - elems := strings.Split(in.Method, serviceMethodSeparator) - if len(elems) != 2 { - return nil, false, &methodNotFoundError{in.Method, ""} - } - - // regular RPC call - if len(in.Payload) == 0 { - return []rpcRequest{{service: elems[0], method: elems[1], id: &in.Id}}, false, nil - } - - return []rpcRequest{{service: elems[0], method: elems[1], id: &in.Id, params: in.Payload}}, false, nil -} - -// parseBatchRequest will parse a batch request into a collection of requests from the given RawMessage, an indication -// if the request was a batch or an error when the request could not be read. -func parseBatchRequest(incomingMsg json.RawMessage) ([]rpcRequest, bool, Error) { - var in []jsonRequest - if err := json.Unmarshal(incomingMsg, &in); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } - - requests := make([]rpcRequest, len(in)) - for i, r := range in { - if err := checkReqId(r.Id); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } - - id := &in[i].Id - - // subscribe are special, they will always use `subscriptionMethod` as first param in the payload - if strings.HasSuffix(r.Method, subscribeMethodSuffix) { - requests[i] = rpcRequest{id: id, isPubSub: true} - if len(r.Payload) > 0 { - // first param must be subscription name - var subscribeMethod [1]string - if err := json.Unmarshal(r.Payload, &subscribeMethod); err != nil { - log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } - - requests[i].service, requests[i].method = strings.TrimSuffix(r.Method, subscribeMethodSuffix), subscribeMethod[0] - requests[i].params = r.Payload - continue - } - - return nil, true, &invalidRequestError{"Unable to parse (un)subscribe request arguments"} - } - - if strings.HasSuffix(r.Method, unsubscribeMethodSuffix) { - requests[i] = rpcRequest{id: id, isPubSub: true, method: r.Method, params: r.Payload} - continue - } - - if len(r.Payload) == 0 { - requests[i] = rpcRequest{id: id, params: nil} - } else { - requests[i] = rpcRequest{id: id, params: r.Payload} - } - if elem := strings.Split(r.Method, serviceMethodSeparator); len(elem) == 2 { - requests[i].service, requests[i].method = elem[0], elem[1] - } else { - requests[i].err = &methodNotFoundError{r.Method, ""} - } - } - - return requests, true, nil -} - -// ParseRequestArguments tries to parse the given params (json.RawMessage) with the given -// types. It returns the parsed values or an error when the parsing failed. -func (c *jsonCodec) ParseRequestArguments(argTypes []reflect.Type, params interface{}) ([]reflect.Value, Error) { - if args, ok := params.(json.RawMessage); !ok { - return nil, &invalidParamsError{"Invalid params supplied"} - } else { - return parsePositionalArguments(args, argTypes) - } -} - // parsePositionalArguments tries to parse the given args to an array of values with the // given types. It returns the parsed values or an error when the args could not be // parsed. Missing optional arguments are returned as reflect.Zero values. -func parsePositionalArguments(rawArgs json.RawMessage, types []reflect.Type) ([]reflect.Value, Error) { - // Read beginning of the args array. +func parsePositionalArguments(rawArgs json.RawMessage, types []reflect.Type) ([]reflect.Value, error) { dec := json.NewDecoder(bytes.NewReader(rawArgs)) - if tok, _ := dec.Token(); tok != json.Delim('[') { - return nil, &invalidParamsError{"non-array args"} - } - // Read args. - args := make([]reflect.Value, 0, len(types)) - for i := 0; dec.More(); i++ { - if i >= len(types) { - return nil, &invalidParamsError{fmt.Sprintf("too many arguments, want at most %d", len(types))} + var args []reflect.Value + tok, err := dec.Token() + switch { + case err == io.EOF || tok == nil && err == nil: + // "params" is optional and may be empty. Also allow "params":null even though it's + // not in the spec because our own client used to send it. + case err != nil: + return nil, err + case tok == json.Delim('['): + // Read argument array. + if args, err = parseArgumentArray(dec, types); err != nil { + return nil, err } - argval := reflect.New(types[i]) - if err := dec.Decode(argval.Interface()); err != nil { - return nil, &invalidParamsError{fmt.Sprintf("invalid argument %d: %v", i, err)} - } - if argval.IsNil() && types[i].Kind() != reflect.Ptr { - return nil, &invalidParamsError{fmt.Sprintf("missing value for required argument %d", i)} - } - args = append(args, argval.Elem()) - } - // Read end of args array. - if _, err := dec.Token(); err != nil { - return nil, &invalidParamsError{err.Error()} + default: + return nil, errors.New("non-array args") } // Set any missing args to nil. for i := len(args); i < len(types); i++ { if types[i].Kind() != reflect.Ptr { - return nil, &invalidParamsError{fmt.Sprintf("missing value for required argument %d", i)} + return nil, fmt.Errorf("missing value for required argument %d", i) } args = append(args, reflect.Zero(types[i])) } return args, nil } -// CreateResponse will create a JSON-RPC success response with the given id and reply as result. -func (c *jsonCodec) CreateResponse(id interface{}, reply interface{}) interface{} { - return &jsonSuccessResponse{Version: jsonrpcVersion, Id: id, Result: reply} +func parseArgumentArray(dec *json.Decoder, types []reflect.Type) ([]reflect.Value, error) { + args := make([]reflect.Value, 0, len(types)) + for i := 0; dec.More(); i++ { + if i >= len(types) { + return args, fmt.Errorf("too many arguments, want at most %d", len(types)) + } + argval := reflect.New(types[i]) + if err := dec.Decode(argval.Interface()); err != nil { + return args, fmt.Errorf("invalid argument %d: %v", i, err) + } + if argval.IsNil() && types[i].Kind() != reflect.Ptr { + return args, fmt.Errorf("missing value for required argument %d", i) + } + args = append(args, argval.Elem()) + } + // Read end of args array. + _, err := dec.Token() + return args, err } -// CreateErrorResponse will create a JSON-RPC error response with the given id and error. -func (c *jsonCodec) CreateErrorResponse(id interface{}, err Error) interface{} { - return &jsonErrResponse{Version: jsonrpcVersion, Id: id, Error: jsonError{Code: err.ErrorCode(), Message: err.Error()}} -} - -// CreateErrorResponseWithInfo will create a JSON-RPC error response with the given id and error. -// info is optional and contains additional information about the error. When an empty string is passed it is ignored. -func (c *jsonCodec) CreateErrorResponseWithInfo(id interface{}, err Error, info interface{}) interface{} { - return &jsonErrResponse{Version: jsonrpcVersion, Id: id, - Error: jsonError{Code: err.ErrorCode(), Message: err.Error(), Data: info}} -} - -// CreateNotification will create a JSON-RPC notification with the given subscription id and event as params. -func (c *jsonCodec) CreateNotification(subid, namespace string, event interface{}) interface{} { - return &jsonNotification{Version: jsonrpcVersion, Method: namespace + notificationMethodSuffix, - Params: jsonSubscription{Subscription: subid, Result: event}} -} - -// Write message to client -func (c *jsonCodec) Write(res interface{}) error { - c.encMu.Lock() - defer c.encMu.Unlock() - - return c.encode(res) -} - -// Close the underlying connection -func (c *jsonCodec) Close() { - c.closer.Do(func() { - close(c.closed) - c.rw.Close() - }) -} - -// Closed returns a channel which will be closed when Close is called -func (c *jsonCodec) Closed() <-chan interface{} { - return c.closed +// parseSubscriptionName extracts the subscription name from an encoded argument array. +func parseSubscriptionName(rawArgs json.RawMessage) (string, error) { + dec := json.NewDecoder(bytes.NewReader(rawArgs)) + if tok, _ := dec.Token(); tok != json.Delim('[') { + return "", errors.New("non-array args") + } + v, _ := dec.Token() + method, ok := v.(string) + if !ok { + return "", errors.New("expected subscription name as first argument") + } + return method, nil } diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/json_test.go b/vendor/github.com/ethereum/go-ethereum/rpc/json_test.go deleted file mode 100644 index 5048d2f7..00000000 --- a/vendor/github.com/ethereum/go-ethereum/rpc/json_test.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rpc - -import ( - "bufio" - "bytes" - "encoding/json" - "reflect" - "strconv" - "testing" -) - -type RWC struct { - *bufio.ReadWriter -} - -func (rwc *RWC) Close() error { - return nil -} - -func TestJSONRequestParsing(t *testing.T) { - server := NewServer() - service := new(Service) - - if err := server.RegisterName("calc", service); err != nil { - t.Fatalf("%v", err) - } - - req := bytes.NewBufferString(`{"id": 1234, "jsonrpc": "2.0", "method": "calc_add", "params": [11, 22]}`) - var str string - reply := bytes.NewBufferString(str) - rw := &RWC{bufio.NewReadWriter(bufio.NewReader(req), bufio.NewWriter(reply))} - - codec := NewJSONCodec(rw) - - requests, batch, err := codec.ReadRequestHeaders() - if err != nil { - t.Fatalf("%v", err) - } - - if batch { - t.Fatalf("Request isn't a batch") - } - - if len(requests) != 1 { - t.Fatalf("Expected 1 request but got %d requests - %v", len(requests), requests) - } - - if requests[0].service != "calc" { - t.Fatalf("Expected service 'calc' but got '%s'", requests[0].service) - } - - if requests[0].method != "add" { - t.Fatalf("Expected method 'Add' but got '%s'", requests[0].method) - } - - if rawId, ok := requests[0].id.(*json.RawMessage); ok { - id, e := strconv.ParseInt(string(*rawId), 0, 64) - if e != nil { - t.Fatalf("%v", e) - } - if id != 1234 { - t.Fatalf("Expected id 1234 but got %d", id) - } - } else { - t.Fatalf("invalid request, expected *json.RawMesage got %T", requests[0].id) - } - - var arg int - args := []reflect.Type{reflect.TypeOf(arg), reflect.TypeOf(arg)} - - v, err := codec.ParseRequestArguments(args, requests[0].params) - if err != nil { - t.Fatalf("%v", err) - } - - if len(v) != 2 { - t.Fatalf("Expected 2 argument values, got %d", len(v)) - } - - if v[0].Int() != 11 || v[1].Int() != 22 { - t.Fatalf("expected %d == 11 && %d == 22", v[0].Int(), v[1].Int()) - } -} - -func TestJSONRequestParamsParsing(t *testing.T) { - - var ( - stringT = reflect.TypeOf("") - intT = reflect.TypeOf(0) - intPtrT = reflect.TypeOf(new(int)) - - stringV = reflect.ValueOf("abc") - i = 1 - intV = reflect.ValueOf(i) - intPtrV = reflect.ValueOf(&i) - ) - - var validTests = []struct { - input string - argTypes []reflect.Type - expected []reflect.Value - }{ - {`[]`, []reflect.Type{}, []reflect.Value{}}, - {`[]`, []reflect.Type{intPtrT}, []reflect.Value{intPtrV}}, - {`[1]`, []reflect.Type{intT}, []reflect.Value{intV}}, - {`[1,"abc"]`, []reflect.Type{intT, stringT}, []reflect.Value{intV, stringV}}, - {`[null]`, []reflect.Type{intPtrT}, []reflect.Value{intPtrV}}, - {`[null,"abc"]`, []reflect.Type{intPtrT, stringT, intPtrT}, []reflect.Value{intPtrV, stringV, intPtrV}}, - {`[null,"abc",null]`, []reflect.Type{intPtrT, stringT, intPtrT}, []reflect.Value{intPtrV, stringV, intPtrV}}, - } - - codec := jsonCodec{} - - for _, test := range validTests { - params := (json.RawMessage)([]byte(test.input)) - args, err := codec.ParseRequestArguments(test.argTypes, params) - - if err != nil { - t.Fatal(err) - } - - var match []interface{} - json.Unmarshal([]byte(test.input), &match) - - if len(args) != len(test.argTypes) { - t.Fatalf("expected %d parsed args, got %d", len(test.argTypes), len(args)) - } - - for i, arg := range args { - expected := test.expected[i] - - if arg.Kind() != expected.Kind() { - t.Errorf("expected type for param %d in %s", i, test.input) - } - - if arg.Kind() == reflect.Int && arg.Int() != expected.Int() { - t.Errorf("expected int(%d), got int(%d) in %s", expected.Int(), arg.Int(), test.input) - } - - if arg.Kind() == reflect.String && arg.String() != expected.String() { - t.Errorf("expected string(%s), got string(%s) in %s", expected.String(), arg.String(), test.input) - } - } - } - - var invalidTests = []struct { - input string - argTypes []reflect.Type - }{ - {`[]`, []reflect.Type{intT}}, - {`[null]`, []reflect.Type{intT}}, - {`[1]`, []reflect.Type{stringT}}, - {`[1,2]`, []reflect.Type{stringT}}, - {`["abc", null]`, []reflect.Type{stringT, intT}}, - } - - for i, test := range invalidTests { - if _, err := codec.ParseRequestArguments(test.argTypes, test.input); err == nil { - t.Errorf("expected test %d - %s to fail", i, test.input) - } - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/server.go b/vendor/github.com/ethereum/go-ethereum/rpc/server.go index 214e1d3e..5a92847f 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/server.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/server.go @@ -18,11 +18,7 @@ package rpc import ( "context" - "fmt" - "reflect" - "runtime" - "strings" - "sync" + "io" "sync/atomic" mapset "github.com/deckarep/golang-set" @@ -31,7 +27,9 @@ import ( const MetadataApi = "rpc" -// CodecOption specifies which type of messages this codec supports +// CodecOption specifies which type of messages a codec supports. +// +// Deprecated: this option is no longer honored by Server. type CodecOption int const ( @@ -42,22 +40,94 @@ const ( OptionSubscriptions = 1 << iota // support pub sub ) -// NewServer will create a new server instance with no registered handlers. -func NewServer() *Server { - server := &Server{ - services: make(serviceRegistry), - codecs: mapset.NewSet(), - run: 1, - } +// Server is an RPC server. +type Server struct { + services serviceRegistry + idgen func() ID + run int32 + codecs mapset.Set +} - // register a default service which will provide meta information about the RPC service such as the services and - // methods it offers. +// NewServer creates a new server instance with no registered handlers. +func NewServer() *Server { + server := &Server{idgen: randomIDGenerator(), codecs: mapset.NewSet(), run: 1} + // Register the default service providing meta information about the RPC service such + // as the services and methods it offers. rpcService := &RPCService{server} server.RegisterName(MetadataApi, rpcService) - return server } +// RegisterName creates a service for the given receiver type under the given name. When no +// methods on the given receiver match the criteria to be either a RPC method or a +// subscription an error is returned. Otherwise a new service is created and added to the +// service collection this server provides to clients. +func (s *Server) RegisterName(name string, receiver interface{}) error { + return s.services.registerName(name, receiver) +} + +// ServeCodec reads incoming requests from codec, calls the appropriate callback and writes +// the response back using the given codec. It will block until the codec is closed or the +// server is stopped. In either case the codec is closed. +// +// Note that codec options are no longer supported. +func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { + defer codec.Close() + + // Don't serve if server is stopped. + if atomic.LoadInt32(&s.run) == 0 { + return + } + + // Add the codec to the set so it can be closed by Stop. + s.codecs.Add(codec) + defer s.codecs.Remove(codec) + + c := initClient(codec, s.idgen, &s.services) + <-codec.Closed() + c.Close() +} + +// serveSingleRequest reads and processes a single RPC request from the given codec. This +// is used to serve HTTP connections. Subscriptions and reverse calls are not allowed in +// this mode. +func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) { + // Don't serve if server is stopped. + if atomic.LoadInt32(&s.run) == 0 { + return + } + + h := newHandler(ctx, codec, s.idgen, &s.services) + h.allowSubscribe = false + defer h.close(io.EOF, nil) + + reqs, batch, err := codec.Read() + if err != nil { + if err != io.EOF { + codec.Write(ctx, errorMessage(&invalidMessageError{"parse error"})) + } + return + } + if batch { + h.handleBatch(reqs) + } else { + h.handleMsg(reqs[0]) + } +} + +// Stop stops reading new requests, waits for stopPendingRequestTimeout to allow pending +// requests to finish, then closes all codecs which will cancel pending requests and +// subscriptions. +func (s *Server) Stop() { + if atomic.CompareAndSwapInt32(&s.run, 1, 0) { + log.Debug("RPC server shutting down") + s.codecs.Each(func(c interface{}) bool { + c.(ServerCodec).Close() + return true + }) + } +} + // RPCService gives meta information about the server. // e.g. gives information about the loaded modules. type RPCService struct { @@ -66,377 +136,12 @@ type RPCService struct { // Modules returns the list of RPC services with their version number func (s *RPCService) Modules() map[string]string { + s.server.services.mu.Lock() + defer s.server.services.mu.Unlock() + modules := make(map[string]string) - for name := range s.server.services { + for name := range s.server.services.services { modules[name] = "1.0" } return modules } - -// RegisterName will create a service for the given rcvr type under the given name. When no methods on the given rcvr -// match the criteria to be either a RPC method or a subscription an error is returned. Otherwise a new service is -// created and added to the service collection this server instance serves. -func (s *Server) RegisterName(name string, rcvr interface{}) error { - if s.services == nil { - s.services = make(serviceRegistry) - } - - svc := new(service) - svc.typ = reflect.TypeOf(rcvr) - rcvrVal := reflect.ValueOf(rcvr) - - if name == "" { - return fmt.Errorf("no service name for type %s", svc.typ.String()) - } - if !isExported(reflect.Indirect(rcvrVal).Type().Name()) { - return fmt.Errorf("%s is not exported", reflect.Indirect(rcvrVal).Type().Name()) - } - - methods, subscriptions := suitableCallbacks(rcvrVal, svc.typ) - - if len(methods) == 0 && len(subscriptions) == 0 { - return fmt.Errorf("Service %T doesn't have any suitable methods/subscriptions to expose", rcvr) - } - - // already a previous service register under given name, merge methods/subscriptions - if regsvc, present := s.services[name]; present { - for _, m := range methods { - regsvc.callbacks[formatName(m.method.Name)] = m - } - for _, s := range subscriptions { - regsvc.subscriptions[formatName(s.method.Name)] = s - } - return nil - } - - svc.name = name - svc.callbacks, svc.subscriptions = methods, subscriptions - - s.services[svc.name] = svc - return nil -} - -// serveRequest will reads requests from the codec, calls the RPC callback and -// writes the response to the given codec. -// -// If singleShot is true it will process a single request, otherwise it will handle -// requests until the codec returns an error when reading a request (in most cases -// an EOF). It executes requests in parallel when singleShot is false. -func (s *Server) serveRequest(ctx context.Context, codec ServerCodec, singleShot bool, options CodecOption) error { - var pend sync.WaitGroup - - defer func() { - if err := recover(); err != nil { - const size = 64 << 10 - buf := make([]byte, size) - buf = buf[:runtime.Stack(buf, false)] - log.Error(string(buf)) - } - s.codecsMu.Lock() - s.codecs.Remove(codec) - s.codecsMu.Unlock() - }() - - // ctx, cancel := context.WithCancel(context.Background()) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - // if the codec supports notification include a notifier that callbacks can use - // to send notification to clients. It is tied to the codec/connection. If the - // connection is closed the notifier will stop and cancels all active subscriptions. - if options&OptionSubscriptions == OptionSubscriptions { - ctx = context.WithValue(ctx, notifierKey{}, newNotifier(codec)) - } - s.codecsMu.Lock() - if atomic.LoadInt32(&s.run) != 1 { // server stopped - s.codecsMu.Unlock() - return &shutdownError{} - } - s.codecs.Add(codec) - s.codecsMu.Unlock() - - // test if the server is ordered to stop - for atomic.LoadInt32(&s.run) == 1 { - reqs, batch, err := s.readRequest(codec) - if err != nil { - // If a parsing error occurred, send an error - if err.Error() != "EOF" { - log.Debug(fmt.Sprintf("read error %v\n", err)) - codec.Write(codec.CreateErrorResponse(nil, err)) - } - // Error or end of stream, wait for requests and tear down - pend.Wait() - return nil - } - - // check if server is ordered to shutdown and return an error - // telling the client that his request failed. - if atomic.LoadInt32(&s.run) != 1 { - err = &shutdownError{} - if batch { - resps := make([]interface{}, len(reqs)) - for i, r := range reqs { - resps[i] = codec.CreateErrorResponse(&r.id, err) - } - codec.Write(resps) - } else { - codec.Write(codec.CreateErrorResponse(&reqs[0].id, err)) - } - return nil - } - // If a single shot request is executing, run and return immediately - if singleShot { - if batch { - s.execBatch(ctx, codec, reqs) - } else { - s.exec(ctx, codec, reqs[0]) - } - return nil - } - // For multi-shot connections, start a goroutine to serve and loop back - pend.Add(1) - - go func(reqs []*serverRequest, batch bool) { - defer pend.Done() - if batch { - s.execBatch(ctx, codec, reqs) - } else { - s.exec(ctx, codec, reqs[0]) - } - }(reqs, batch) - } - return nil -} - -// ServeCodec reads incoming requests from codec, calls the appropriate callback and writes the -// response back using the given codec. It will block until the codec is closed or the server is -// stopped. In either case the codec is closed. -func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { - defer codec.Close() - s.serveRequest(context.Background(), codec, false, options) -} - -// ServeSingleRequest reads and processes a single RPC request from the given codec. It will not -// close the codec unless a non-recoverable error has occurred. Note, this method will return after -// a single request has been processed! -func (s *Server) ServeSingleRequest(ctx context.Context, codec ServerCodec, options CodecOption) { - s.serveRequest(ctx, codec, true, options) -} - -// Stop will stop reading new requests, wait for stopPendingRequestTimeout to allow pending requests to finish, -// close all codecs which will cancel pending requests/subscriptions. -func (s *Server) Stop() { - if atomic.CompareAndSwapInt32(&s.run, 1, 0) { - log.Debug("RPC Server shutdown initiatied") - s.codecsMu.Lock() - defer s.codecsMu.Unlock() - s.codecs.Each(func(c interface{}) bool { - c.(ServerCodec).Close() - return true - }) - } -} - -// createSubscription will call the subscription callback and returns the subscription id or error. -func (s *Server) createSubscription(ctx context.Context, c ServerCodec, req *serverRequest) (ID, error) { - // subscription have as first argument the context following optional arguments - args := []reflect.Value{req.callb.rcvr, reflect.ValueOf(ctx)} - args = append(args, req.args...) - reply := req.callb.method.Func.Call(args) - - if !reply[1].IsNil() { // subscription creation failed - return "", reply[1].Interface().(error) - } - - return reply[0].Interface().(*Subscription).ID, nil -} - -// handle executes a request and returns the response from the callback. -func (s *Server) handle(ctx context.Context, codec ServerCodec, req *serverRequest) (interface{}, func()) { - if req.err != nil { - return codec.CreateErrorResponse(&req.id, req.err), nil - } - - if req.isUnsubscribe { // cancel subscription, first param must be the subscription id - if len(req.args) >= 1 && req.args[0].Kind() == reflect.String { - notifier, supported := NotifierFromContext(ctx) - if !supported { // interface doesn't support subscriptions (e.g. http) - return codec.CreateErrorResponse(&req.id, &callbackError{ErrNotificationsUnsupported.Error()}), nil - } - - subid := ID(req.args[0].String()) - if err := notifier.unsubscribe(subid); err != nil { - return codec.CreateErrorResponse(&req.id, &callbackError{err.Error()}), nil - } - - return codec.CreateResponse(req.id, true), nil - } - return codec.CreateErrorResponse(&req.id, &invalidParamsError{"Expected subscription id as first argument"}), nil - } - - if req.callb.isSubscribe { - subid, err := s.createSubscription(ctx, codec, req) - if err != nil { - return codec.CreateErrorResponse(&req.id, &callbackError{err.Error()}), nil - } - - // active the subscription after the sub id was successfully sent to the client - activateSub := func() { - notifier, _ := NotifierFromContext(ctx) - notifier.activate(subid, req.svcname) - } - - return codec.CreateResponse(req.id, subid), activateSub - } - - // regular RPC call, prepare arguments - if len(req.args) != len(req.callb.argTypes) { - rpcErr := &invalidParamsError{fmt.Sprintf("%s%s%s expects %d parameters, got %d", - req.svcname, serviceMethodSeparator, req.callb.method.Name, - len(req.callb.argTypes), len(req.args))} - return codec.CreateErrorResponse(&req.id, rpcErr), nil - } - - arguments := []reflect.Value{req.callb.rcvr} - if req.callb.hasCtx { - arguments = append(arguments, reflect.ValueOf(ctx)) - } - if len(req.args) > 0 { - arguments = append(arguments, req.args...) - } - - // execute RPC method and return result - reply := req.callb.method.Func.Call(arguments) - if len(reply) == 0 { - return codec.CreateResponse(req.id, nil), nil - } - if req.callb.errPos >= 0 { // test if method returned an error - if !reply[req.callb.errPos].IsNil() { - e := reply[req.callb.errPos].Interface().(error) - res := codec.CreateErrorResponse(&req.id, &callbackError{e.Error()}) - return res, nil - } - } - return codec.CreateResponse(req.id, reply[0].Interface()), nil -} - -// exec executes the given request and writes the result back using the codec. -func (s *Server) exec(ctx context.Context, codec ServerCodec, req *serverRequest) { - var response interface{} - var callback func() - if req.err != nil { - response = codec.CreateErrorResponse(&req.id, req.err) - } else { - response, callback = s.handle(ctx, codec, req) - } - - if err := codec.Write(response); err != nil { - log.Error(fmt.Sprintf("%v\n", err)) - codec.Close() - } - - // when request was a subscribe request this allows these subscriptions to be actived - if callback != nil { - callback() - } -} - -// execBatch executes the given requests and writes the result back using the codec. -// It will only write the response back when the last request is processed. -func (s *Server) execBatch(ctx context.Context, codec ServerCodec, requests []*serverRequest) { - responses := make([]interface{}, len(requests)) - var callbacks []func() - for i, req := range requests { - if req.err != nil { - responses[i] = codec.CreateErrorResponse(&req.id, req.err) - } else { - var callback func() - if responses[i], callback = s.handle(ctx, codec, req); callback != nil { - callbacks = append(callbacks, callback) - } - } - } - - if err := codec.Write(responses); err != nil { - log.Error(fmt.Sprintf("%v\n", err)) - codec.Close() - } - - // when request holds one of more subscribe requests this allows these subscriptions to be activated - for _, c := range callbacks { - c() - } -} - -// readRequest requests the next (batch) request from the codec. It will return the collection -// of requests, an indication if the request was a batch, the invalid request identifier and an -// error when the request could not be read/parsed. -func (s *Server) readRequest(codec ServerCodec) ([]*serverRequest, bool, Error) { - reqs, batch, err := codec.ReadRequestHeaders() - if err != nil { - return nil, batch, err - } - - requests := make([]*serverRequest, len(reqs)) - - // verify requests - for i, r := range reqs { - var ok bool - var svc *service - - if r.err != nil { - requests[i] = &serverRequest{id: r.id, err: r.err} - continue - } - - if r.isPubSub && strings.HasSuffix(r.method, unsubscribeMethodSuffix) { - requests[i] = &serverRequest{id: r.id, isUnsubscribe: true} - argTypes := []reflect.Type{reflect.TypeOf("")} // expect subscription id as first arg - if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil { - requests[i].args = args - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - continue - } - - if svc, ok = s.services[r.service]; !ok { // rpc method isn't available - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} - continue - } - - if r.isPubSub { // eth_subscribe, r.method contains the subscription method name - if callb, ok := svc.subscriptions[r.method]; ok { - requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb} - if r.params != nil && len(callb.argTypes) > 0 { - argTypes := []reflect.Type{reflect.TypeOf("")} - argTypes = append(argTypes, callb.argTypes...) - if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil { - requests[i].args = args[1:] // first one is service.method name which isn't an actual argument - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - } - } else { - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} - } - continue - } - - if callb, ok := svc.callbacks[r.method]; ok { // lookup RPC method - requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb} - if r.params != nil && len(callb.argTypes) > 0 { - if args, err := codec.ParseRequestArguments(callb.argTypes, r.params); err == nil { - requests[i].args = args - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - } - continue - } - - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} - } - - return requests, batch, nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/server_test.go b/vendor/github.com/ethereum/go-ethereum/rpc/server_test.go index 90d62f26..39099546 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/server_test.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/server_test.go @@ -17,146 +17,136 @@ package rpc import ( - "context" - "encoding/json" + "bufio" + "bytes" + "io" + "io/ioutil" "net" - "reflect" + "path/filepath" + "strings" "testing" "time" ) -type Service struct{} - -type Args struct { - S string -} - -func (s *Service) NoArgsRets() { -} - -type Result struct { - String string - Int int - Args *Args -} - -func (s *Service) Echo(str string, i int, args *Args) Result { - return Result{str, i, args} -} - -func (s *Service) EchoWithCtx(ctx context.Context, str string, i int, args *Args) Result { - return Result{str, i, args} -} - -func (s *Service) Sleep(ctx context.Context, duration time.Duration) { - select { - case <-time.After(duration): - case <-ctx.Done(): - } -} - -func (s *Service) Rets() (string, error) { - return "", nil -} - -func (s *Service) InvalidRets1() (error, string) { - return nil, "" -} - -func (s *Service) InvalidRets2() (string, string) { - return "", "" -} - -func (s *Service) InvalidRets3() (string, string, error) { - return "", "", nil -} - -func (s *Service) Subscription(ctx context.Context) (*Subscription, error) { - return nil, nil -} - func TestServerRegisterName(t *testing.T) { server := NewServer() - service := new(Service) - - if err := server.RegisterName("calc", service); err != nil { - t.Fatalf("%v", err) - } - - if len(server.services) != 2 { - t.Fatalf("Expected 2 service entries, got %d", len(server.services)) - } - - svc, ok := server.services["calc"] - if !ok { - t.Fatalf("Expected service calc to be registered") - } - - if len(svc.callbacks) != 5 { - t.Errorf("Expected 5 callbacks for service 'calc', got %d", len(svc.callbacks)) - } - - if len(svc.subscriptions) != 1 { - t.Errorf("Expected 1 subscription for service 'calc', got %d", len(svc.subscriptions)) - } -} - -func testServerMethodExecution(t *testing.T, method string) { - server := NewServer() - service := new(Service) + service := new(testService) if err := server.RegisterName("test", service); err != nil { t.Fatalf("%v", err) } - stringArg := "string arg" - intArg := 1122 - argsArg := &Args{"abcde"} - params := []interface{}{stringArg, intArg, argsArg} + if len(server.services.services) != 2 { + t.Fatalf("Expected 2 service entries, got %d", len(server.services.services)) + } - request := map[string]interface{}{ - "id": 12345, - "method": "test_" + method, - "version": "2.0", - "params": params, + svc, ok := server.services.services["test"] + if !ok { + t.Fatalf("Expected service calc to be registered") + } + + wantCallbacks := 7 + if len(svc.callbacks) != wantCallbacks { + t.Errorf("Expected %d callbacks for service 'service', got %d", wantCallbacks, len(svc.callbacks)) + } +} + +func TestServer(t *testing.T) { + files, err := ioutil.ReadDir("testdata") + if err != nil { + t.Fatal("where'd my testdata go?") + } + for _, f := range files { + if f.IsDir() || strings.HasPrefix(f.Name(), ".") { + continue + } + path := filepath.Join("testdata", f.Name()) + name := strings.TrimSuffix(f.Name(), filepath.Ext(f.Name())) + t.Run(name, func(t *testing.T) { + runTestScript(t, path) + }) + } +} + +func runTestScript(t *testing.T, file string) { + server := newTestServer() + content, err := ioutil.ReadFile(file) + if err != nil { + t.Fatal(err) } clientConn, serverConn := net.Pipe() defer clientConn.Close() - - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation) - - out := json.NewEncoder(clientConn) - in := json.NewDecoder(clientConn) - - if err := out.Encode(request); err != nil { - t.Fatal(err) - } - - response := jsonSuccessResponse{Result: &Result{}} - if err := in.Decode(&response); err != nil { - t.Fatal(err) - } - - if result, ok := response.Result.(*Result); ok { - if result.String != stringArg { - t.Errorf("expected %s, got : %s\n", stringArg, result.String) + go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) + readbuf := bufio.NewReader(clientConn) + for _, line := range strings.Split(string(content), "\n") { + line = strings.TrimSpace(line) + switch { + case len(line) == 0 || strings.HasPrefix(line, "//"): + // skip comments, blank lines + continue + case strings.HasPrefix(line, "--> "): + t.Log(line) + // write to connection + clientConn.SetWriteDeadline(time.Now().Add(5 * time.Second)) + if _, err := io.WriteString(clientConn, line[4:]+"\n"); err != nil { + t.Fatalf("write error: %v", err) + } + case strings.HasPrefix(line, "<-- "): + t.Log(line) + want := line[4:] + // read line from connection and compare text + clientConn.SetReadDeadline(time.Now().Add(5 * time.Second)) + sent, err := readbuf.ReadString('\n') + if err != nil { + t.Fatalf("read error: %v", err) + } + sent = strings.TrimRight(sent, "\r\n") + if sent != want { + t.Errorf("wrong line from server\ngot: %s\nwant: %s", sent, want) + } + default: + panic("invalid line in test script: " + line) } - if result.Int != intArg { - t.Errorf("expected %d, got %d\n", intArg, result.Int) - } - if !reflect.DeepEqual(result.Args, argsArg) { - t.Errorf("expected %v, got %v\n", argsArg, result) - } - } else { - t.Fatalf("invalid response: expected *Result - got: %T", response.Result) } } -func TestServerMethodExecution(t *testing.T) { - testServerMethodExecution(t, "echo") -} +// This test checks that responses are delivered for very short-lived connections that +// only carry a single request. +func TestServerShortLivedConn(t *testing.T) { + server := newTestServer() + defer server.Stop() -func TestServerMethodWithCtx(t *testing.T) { - testServerMethodExecution(t, "echoWithCtx") + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal("can't listen:", err) + } + defer listener.Close() + go server.ServeListener(listener) + + var ( + request = `{"jsonrpc":"2.0","id":1,"method":"rpc_modules"}` + "\n" + wantResp = `{"jsonrpc":"2.0","id":1,"result":{"nftest":"1.0","rpc":"1.0","test":"1.0"}}` + "\n" + deadline = time.Now().Add(10 * time.Second) + ) + for i := 0; i < 20; i++ { + conn, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + t.Fatal("can't dial:", err) + } + defer conn.Close() + conn.SetDeadline(deadline) + // Write the request, then half-close the connection so the server stops reading. + conn.Write([]byte(request)) + conn.(*net.TCPConn).CloseWrite() + // Now try to get the response. + buf := make([]byte, 2000) + n, err := conn.Read(buf) + if err != nil { + t.Fatal("read error:", err) + } + if !bytes.Equal(buf[:n], []byte(wantResp)) { + t.Fatalf("wrong response: %s", buf[:n]) + } + } } diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/service.go b/vendor/github.com/ethereum/go-ethereum/rpc/service.go new file mode 100644 index 00000000..a9426c6b --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/service.go @@ -0,0 +1,285 @@ +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "errors" + "fmt" + "reflect" + "runtime" + "strings" + "sync" + "unicode" + "unicode/utf8" + + "github.com/ethereum/go-ethereum/log" +) + +var ( + contextType = reflect.TypeOf((*context.Context)(nil)).Elem() + errorType = reflect.TypeOf((*error)(nil)).Elem() + subscriptionType = reflect.TypeOf(Subscription{}) + stringType = reflect.TypeOf("") +) + +type serviceRegistry struct { + mu sync.Mutex + services map[string]service +} + +// service represents a registered object. +type service struct { + name string // name for service + callbacks map[string]*callback // registered handlers + subscriptions map[string]*callback // available subscriptions/notifications +} + +// callback is a method callback which was registered in the server +type callback struct { + fn reflect.Value // the function + rcvr reflect.Value // receiver object of method, set if fn is method + argTypes []reflect.Type // input argument types + hasCtx bool // method's first argument is a context (not included in argTypes) + errPos int // err return idx, of -1 when method cannot return error + isSubscribe bool // true if this is a subscription callback +} + +func (r *serviceRegistry) registerName(name string, rcvr interface{}) error { + rcvrVal := reflect.ValueOf(rcvr) + if name == "" { + return fmt.Errorf("no service name for type %s", rcvrVal.Type().String()) + } + callbacks := suitableCallbacks(rcvrVal) + if len(callbacks) == 0 { + return fmt.Errorf("service %T doesn't have any suitable methods/subscriptions to expose", rcvr) + } + + r.mu.Lock() + defer r.mu.Unlock() + if r.services == nil { + r.services = make(map[string]service) + } + svc, ok := r.services[name] + if !ok { + svc = service{ + name: name, + callbacks: make(map[string]*callback), + subscriptions: make(map[string]*callback), + } + r.services[name] = svc + } + for name, cb := range callbacks { + if cb.isSubscribe { + svc.subscriptions[name] = cb + } else { + svc.callbacks[name] = cb + } + } + return nil +} + +// callback returns the callback corresponding to the given RPC method name. +func (r *serviceRegistry) callback(method string) *callback { + elem := strings.SplitN(method, serviceMethodSeparator, 2) + if len(elem) != 2 { + return nil + } + r.mu.Lock() + defer r.mu.Unlock() + return r.services[elem[0]].callbacks[elem[1]] +} + +// subscription returns a subscription callback in the given service. +func (r *serviceRegistry) subscription(service, name string) *callback { + r.mu.Lock() + defer r.mu.Unlock() + return r.services[service].subscriptions[name] +} + +// suitableCallbacks iterates over the methods of the given type. It determines if a method +// satisfies the criteria for a RPC callback or a subscription callback and adds it to the +// collection of callbacks. See server documentation for a summary of these criteria. +func suitableCallbacks(receiver reflect.Value) map[string]*callback { + typ := receiver.Type() + callbacks := make(map[string]*callback) + for m := 0; m < typ.NumMethod(); m++ { + method := typ.Method(m) + if method.PkgPath != "" { + continue // method not exported + } + cb := newCallback(receiver, method.Func) + if cb == nil { + continue // function invalid + } + name := formatName(method.Name) + callbacks[name] = cb + } + return callbacks +} + +// newCallback turns fn (a function) into a callback object. It returns nil if the function +// is unsuitable as an RPC callback. +func newCallback(receiver, fn reflect.Value) *callback { + fntype := fn.Type() + c := &callback{fn: fn, rcvr: receiver, errPos: -1, isSubscribe: isPubSub(fntype)} + // Determine parameter types. They must all be exported or builtin types. + c.makeArgTypes() + if !allExportedOrBuiltin(c.argTypes) { + return nil + } + // Verify return types. The function must return at most one error + // and/or one other non-error value. + outs := make([]reflect.Type, fntype.NumOut()) + for i := 0; i < fntype.NumOut(); i++ { + outs[i] = fntype.Out(i) + } + if len(outs) > 2 || !allExportedOrBuiltin(outs) { + return nil + } + // If an error is returned, it must be the last returned value. + switch { + case len(outs) == 1 && isErrorType(outs[0]): + c.errPos = 0 + case len(outs) == 2: + if isErrorType(outs[0]) || !isErrorType(outs[1]) { + return nil + } + c.errPos = 1 + } + return c +} + +// makeArgTypes composes the argTypes list. +func (c *callback) makeArgTypes() { + fntype := c.fn.Type() + // Skip receiver and context.Context parameter (if present). + firstArg := 0 + if c.rcvr.IsValid() { + firstArg++ + } + if fntype.NumIn() > firstArg && fntype.In(firstArg) == contextType { + c.hasCtx = true + firstArg++ + } + // Add all remaining parameters. + c.argTypes = make([]reflect.Type, fntype.NumIn()-firstArg) + for i := firstArg; i < fntype.NumIn(); i++ { + c.argTypes[i-firstArg] = fntype.In(i) + } +} + +// call invokes the callback. +func (c *callback) call(ctx context.Context, method string, args []reflect.Value) (res interface{}, errRes error) { + // Create the argument slice. + fullargs := make([]reflect.Value, 0, 2+len(args)) + if c.rcvr.IsValid() { + fullargs = append(fullargs, c.rcvr) + } + if c.hasCtx { + fullargs = append(fullargs, reflect.ValueOf(ctx)) + } + fullargs = append(fullargs, args...) + + // Catch panic while running the callback. + defer func() { + if err := recover(); err != nil { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + log.Error("RPC method " + method + " crashed: " + fmt.Sprintf("%v\n%s", err, buf)) + errRes = errors.New("method handler crashed") + } + }() + // Run the callback. + results := c.fn.Call(fullargs) + if len(results) == 0 { + return nil, nil + } + if c.errPos >= 0 && !results[c.errPos].IsNil() { + // Method has returned non-nil error value. + err := results[c.errPos].Interface().(error) + return reflect.Value{}, err + } + return results[0].Interface(), nil +} + +// Is this an exported - upper case - name? +func isExported(name string) bool { + rune, _ := utf8.DecodeRuneInString(name) + return unicode.IsUpper(rune) +} + +// Are all those types exported or built-in? +func allExportedOrBuiltin(types []reflect.Type) bool { + for _, typ := range types { + for typ.Kind() == reflect.Ptr { + typ = typ.Elem() + } + // PkgPath will be non-empty even for an exported type, + // so we need to check the type name as well. + if !isExported(typ.Name()) && typ.PkgPath() != "" { + return false + } + } + return true +} + +// Is t context.Context or *context.Context? +func isContextType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t == contextType +} + +// Does t satisfy the error interface? +func isErrorType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t.Implements(errorType) +} + +// Is t Subscription or *Subscription? +func isSubscriptionType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t == subscriptionType +} + +// isPubSub tests whether the given method has as as first argument a context.Context and +// returns the pair (Subscription, error). +func isPubSub(methodType reflect.Type) bool { + // numIn(0) is the receiver type + if methodType.NumIn() < 2 || methodType.NumOut() != 2 { + return false + } + return isContextType(methodType.In(1)) && + isSubscriptionType(methodType.Out(0)) && + isErrorType(methodType.Out(1)) +} + +// formatName converts to first character of name to lowercase. +func formatName(name string) string { + ret := []rune(name) + if len(ret) > 0 { + ret[0] = unicode.ToLower(ret[0]) + } + return string(ret) +} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/stdio.go b/vendor/github.com/ethereum/go-ethereum/rpc/stdio.go index ea552cca..d5dc066c 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/stdio.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/stdio.go @@ -19,6 +19,7 @@ package rpc import ( "context" "errors" + "io" "net" "os" "time" @@ -26,39 +27,38 @@ import ( // DialStdIO creates a client on stdin/stdout. func DialStdIO(ctx context.Context) (*Client, error) { - return newClient(ctx, func(_ context.Context) (net.Conn, error) { - return stdioConn{}, nil + return DialIO(ctx, os.Stdin, os.Stdout) +} + +// DialIO creates a client which uses the given IO channels +func DialIO(ctx context.Context, in io.Reader, out io.Writer) (*Client, error) { + return newClient(ctx, func(_ context.Context) (ServerCodec, error) { + return NewJSONCodec(stdioConn{ + in: in, + out: out, + }), nil }) } -type stdioConn struct{} +type stdioConn struct { + in io.Reader + out io.Writer +} func (io stdioConn) Read(b []byte) (n int, err error) { - return os.Stdin.Read(b) + return io.in.Read(b) } func (io stdioConn) Write(b []byte) (n int, err error) { - return os.Stdout.Write(b) + return io.out.Write(b) } func (io stdioConn) Close() error { return nil } -func (io stdioConn) LocalAddr() net.Addr { - return &net.UnixAddr{Name: "stdio", Net: "stdio"} -} - -func (io stdioConn) RemoteAddr() net.Addr { - return &net.UnixAddr{Name: "stdio", Net: "stdio"} -} - -func (io stdioConn) SetDeadline(t time.Time) error { - return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} -} - -func (io stdioConn) SetReadDeadline(t time.Time) error { - return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} +func (io stdioConn) RemoteAddr() string { + return "/dev/stdin" } func (io stdioConn) SetWriteDeadline(t time.Time) error { diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/subscription.go b/vendor/github.com/ethereum/go-ethereum/rpc/subscription.go index 6bbb6f75..c1e869b8 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/subscription.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/subscription.go @@ -17,9 +17,19 @@ package rpc import ( + "bufio" + "container/list" "context" + crand "crypto/rand" + "encoding/binary" + "encoding/hex" + "encoding/json" "errors" + "math/rand" + "reflect" + "strings" "sync" + "time" ) var ( @@ -29,10 +39,147 @@ var ( ErrSubscriptionNotFound = errors.New("subscription not found") ) +var globalGen = randomIDGenerator() + // ID defines a pseudo random number that is used to identify RPC subscriptions. type ID string -// a Subscription is created by a notifier and tight to that notifier. The client can use +// NewID returns a new, random ID. +func NewID() ID { + return globalGen() +} + +// randomIDGenerator returns a function generates a random IDs. +func randomIDGenerator() func() ID { + seed, err := binary.ReadVarint(bufio.NewReader(crand.Reader)) + if err != nil { + seed = int64(time.Now().Nanosecond()) + } + var ( + mu sync.Mutex + rng = rand.New(rand.NewSource(seed)) + ) + return func() ID { + mu.Lock() + defer mu.Unlock() + id := make([]byte, 16) + rng.Read(id) + return encodeID(id) + } +} + +func encodeID(b []byte) ID { + id := hex.EncodeToString(b) + id = strings.TrimLeft(id, "0") + if id == "" { + id = "0" // ID's are RPC quantities, no leading zero's and 0 is 0x0. + } + return ID("0x" + id) +} + +type notifierKey struct{} + +// NotifierFromContext returns the Notifier value stored in ctx, if any. +func NotifierFromContext(ctx context.Context) (*Notifier, bool) { + n, ok := ctx.Value(notifierKey{}).(*Notifier) + return n, ok +} + +// Notifier is tied to a RPC connection that supports subscriptions. +// Server callbacks use the notifier to send notifications. +type Notifier struct { + h *handler + namespace string + + mu sync.Mutex + sub *Subscription + buffer []json.RawMessage + callReturned bool + activated bool +} + +// CreateSubscription returns a new subscription that is coupled to the +// RPC connection. By default subscriptions are inactive and notifications +// are dropped until the subscription is marked as active. This is done +// by the RPC server after the subscription ID is send to the client. +func (n *Notifier) CreateSubscription() *Subscription { + n.mu.Lock() + defer n.mu.Unlock() + + if n.sub != nil { + panic("can't create multiple subscriptions with Notifier") + } else if n.callReturned { + panic("can't create subscription after subscribe call has returned") + } + n.sub = &Subscription{ID: n.h.idgen(), namespace: n.namespace, err: make(chan error, 1)} + return n.sub +} + +// Notify sends a notification to the client with the given data as payload. +// If an error occurs the RPC connection is closed and the error is returned. +func (n *Notifier) Notify(id ID, data interface{}) error { + enc, err := json.Marshal(data) + if err != nil { + return err + } + + n.mu.Lock() + defer n.mu.Unlock() + + if n.sub == nil { + panic("can't Notify before subscription is created") + } else if n.sub.ID != id { + panic("Notify with wrong ID") + } + if n.activated { + return n.send(n.sub, enc) + } + n.buffer = append(n.buffer, enc) + return nil +} + +// Closed returns a channel that is closed when the RPC connection is closed. +// Deprecated: use subscription error channel +func (n *Notifier) Closed() <-chan interface{} { + return n.h.conn.Closed() +} + +// takeSubscription returns the subscription (if one has been created). No subscription can +// be created after this call. +func (n *Notifier) takeSubscription() *Subscription { + n.mu.Lock() + defer n.mu.Unlock() + n.callReturned = true + return n.sub +} + +// acticate is called after the subscription ID was sent to client. Notifications are +// buffered before activation. This prevents notifications being sent to the client before +// the subscription ID is sent to the client. +func (n *Notifier) activate() error { + n.mu.Lock() + defer n.mu.Unlock() + + for _, data := range n.buffer { + if err := n.send(n.sub, data); err != nil { + return err + } + } + n.activated = true + return nil +} + +func (n *Notifier) send(sub *Subscription, data json.RawMessage) error { + params, _ := json.Marshal(&subscriptionResult{ID: string(sub.ID), Result: data}) + ctx := context.Background() + return n.h.conn.Write(ctx, &jsonrpcMessage{ + Version: vsn, + Method: n.namespace + notificationMethodSuffix, + Params: params, + }) +} + +// A Subscription is created by a notifier and tight to that notifier. The client can use // this subscription to wait for an unsubscribe request for the client, see Err(). type Subscription struct { ID ID @@ -45,105 +192,136 @@ func (s *Subscription) Err() <-chan error { return s.err } -// notifierKey is used to store a notifier within the connection context. -type notifierKey struct{} - -// Notifier is tight to a RPC connection that supports subscriptions. -// Server callbacks use the notifier to send notifications. -type Notifier struct { - codec ServerCodec - subMu sync.Mutex - active map[ID]*Subscription - inactive map[ID]*Subscription - buffer map[ID][]interface{} // unsent notifications of inactive subscriptions +// MarshalJSON marshals a subscription as its ID. +func (s *Subscription) MarshalJSON() ([]byte, error) { + return json.Marshal(s.ID) } -// newNotifier creates a new notifier that can be used to send subscription -// notifications to the client. -func newNotifier(codec ServerCodec) *Notifier { - return &Notifier{ - codec: codec, - active: make(map[ID]*Subscription), - inactive: make(map[ID]*Subscription), - buffer: make(map[ID][]interface{}), +// ClientSubscription is a subscription established through the Client's Subscribe or +// EthSubscribe methods. +type ClientSubscription struct { + client *Client + etype reflect.Type + channel reflect.Value + namespace string + subid string + in chan json.RawMessage + + quitOnce sync.Once // ensures quit is closed once + quit chan struct{} // quit is closed when the subscription exits + errOnce sync.Once // ensures err is closed once + err chan error +} + +func newClientSubscription(c *Client, namespace string, channel reflect.Value) *ClientSubscription { + sub := &ClientSubscription{ + client: c, + namespace: namespace, + etype: channel.Type().Elem(), + channel: channel, + quit: make(chan struct{}), + err: make(chan error, 1), + in: make(chan json.RawMessage), } + return sub } -// NotifierFromContext returns the Notifier value stored in ctx, if any. -func NotifierFromContext(ctx context.Context) (*Notifier, bool) { - n, ok := ctx.Value(notifierKey{}).(*Notifier) - return n, ok +// Err returns the subscription error channel. The intended use of Err is to schedule +// resubscription when the client connection is closed unexpectedly. +// +// The error channel receives a value when the subscription has ended due +// to an error. The received error is nil if Close has been called +// on the underlying client and no other error has occurred. +// +// The error channel is closed when Unsubscribe is called on the subscription. +func (sub *ClientSubscription) Err() <-chan error { + return sub.err } -// CreateSubscription returns a new subscription that is coupled to the -// RPC connection. By default subscriptions are inactive and notifications -// are dropped until the subscription is marked as active. This is done -// by the RPC server after the subscription ID is send to the client. -func (n *Notifier) CreateSubscription() *Subscription { - s := &Subscription{ID: NewID(), err: make(chan error)} - n.subMu.Lock() - n.inactive[s.ID] = s - n.subMu.Unlock() - return s +// Unsubscribe unsubscribes the notification and closes the error channel. +// It can safely be called more than once. +func (sub *ClientSubscription) Unsubscribe() { + sub.quitWithError(nil, true) + sub.errOnce.Do(func() { close(sub.err) }) } -// Notify sends a notification to the client with the given data as payload. -// If an error occurs the RPC connection is closed and the error is returned. -func (n *Notifier) Notify(id ID, data interface{}) error { - n.subMu.Lock() - defer n.subMu.Unlock() - - if sub, active := n.active[id]; active { - n.send(sub, data) - } else { - n.buffer[id] = append(n.buffer[id], data) - } - return nil -} - -func (n *Notifier) send(sub *Subscription, data interface{}) error { - notification := n.codec.CreateNotification(string(sub.ID), sub.namespace, data) - err := n.codec.Write(notification) - if err != nil { - n.codec.Close() - } - return err -} - -// Closed returns a channel that is closed when the RPC connection is closed. -func (n *Notifier) Closed() <-chan interface{} { - return n.codec.Closed() -} - -// unsubscribe a subscription. -// If the subscription could not be found ErrSubscriptionNotFound is returned. -func (n *Notifier) unsubscribe(id ID) error { - n.subMu.Lock() - defer n.subMu.Unlock() - if s, found := n.active[id]; found { - close(s.err) - delete(n.active, id) - return nil - } - return ErrSubscriptionNotFound -} - -// activate enables a subscription. Until a subscription is enabled all -// notifications are dropped. This method is called by the RPC server after -// the subscription ID was sent to client. This prevents notifications being -// send to the client before the subscription ID is send to the client. -func (n *Notifier) activate(id ID, namespace string) { - n.subMu.Lock() - defer n.subMu.Unlock() - - if sub, found := n.inactive[id]; found { - sub.namespace = namespace - n.active[id] = sub - delete(n.inactive, id) - // Send buffered notifications. - for _, data := range n.buffer[id] { - n.send(sub, data) +func (sub *ClientSubscription) quitWithError(err error, unsubscribeServer bool) { + sub.quitOnce.Do(func() { + // The dispatch loop won't be able to execute the unsubscribe call + // if it is blocked on deliver. Close sub.quit first because it + // unblocks deliver. + close(sub.quit) + if unsubscribeServer { + sub.requestUnsubscribe() } - delete(n.buffer, id) + if err != nil { + if err == ErrClientQuit { + err = nil // Adhere to subscription semantics. + } + sub.err <- err + } + }) +} + +func (sub *ClientSubscription) deliver(result json.RawMessage) (ok bool) { + select { + case sub.in <- result: + return true + case <-sub.quit: + return false } } + +func (sub *ClientSubscription) start() { + sub.quitWithError(sub.forward()) +} + +func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { + cases := []reflect.SelectCase{ + {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.quit)}, + {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.in)}, + {Dir: reflect.SelectSend, Chan: sub.channel}, + } + buffer := list.New() + defer buffer.Init() + for { + var chosen int + var recv reflect.Value + if buffer.Len() == 0 { + // Idle, omit send case. + chosen, recv, _ = reflect.Select(cases[:2]) + } else { + // Non-empty buffer, send the first queued item. + cases[2].Send = reflect.ValueOf(buffer.Front().Value) + chosen, recv, _ = reflect.Select(cases) + } + + switch chosen { + case 0: // <-sub.quit + return nil, false + case 1: // <-sub.in + val, err := sub.unmarshal(recv.Interface().(json.RawMessage)) + if err != nil { + return err, true + } + if buffer.Len() == maxClientSubscriptionBuffer { + return ErrSubscriptionQueueOverflow, true + } + buffer.PushBack(val) + case 2: // sub.channel<- + cases[2].Send = reflect.Value{} // Don't hold onto the value. + buffer.Remove(buffer.Front()) + } + } +} + +func (sub *ClientSubscription) unmarshal(result json.RawMessage) (interface{}, error) { + val := reflect.New(sub.etype) + err := json.Unmarshal(result, val.Interface()) + return val.Elem().Interface(), err +} + +func (sub *ClientSubscription) requestUnsubscribe() error { + var result interface{} + return sub.client.Call(&result, sub.namespace+unsubscribeMethodSuffix, sub.subid) +} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/subscription_test.go b/vendor/github.com/ethereum/go-ethereum/rpc/subscription_test.go index 24febc91..eba19245 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/subscription_test.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/subscription_test.go @@ -17,232 +17,62 @@ package rpc import ( - "context" "encoding/json" "fmt" "net" - "sync" + "strings" "testing" "time" ) -type NotificationTestService struct { - mu sync.Mutex - unsubscribed chan string - gotHangSubscriptionReq chan struct{} - unblockHangSubscription chan struct{} -} +func TestNewID(t *testing.T) { + hexchars := "0123456789ABCDEFabcdef" + for i := 0; i < 100; i++ { + id := string(NewID()) + if !strings.HasPrefix(id, "0x") { + t.Fatalf("invalid ID prefix, want '0x...', got %s", id) + } -func (s *NotificationTestService) Echo(i int) int { - return i -} + id = id[2:] + if len(id) == 0 || len(id) > 32 { + t.Fatalf("invalid ID length, want len(id) > 0 && len(id) <= 32), got %d", len(id)) + } -func (s *NotificationTestService) Unsubscribe(subid string) { - if s.unsubscribed != nil { - s.unsubscribed <- subid - } -} - -func (s *NotificationTestService) SomeSubscription(ctx context.Context, n, val int) (*Subscription, error) { - notifier, supported := NotifierFromContext(ctx) - if !supported { - return nil, ErrNotificationsUnsupported - } - - // by explicitly creating an subscription we make sure that the subscription id is send back to the client - // before the first subscription.Notify is called. Otherwise the events might be send before the response - // for the eth_subscribe method. - subscription := notifier.CreateSubscription() - - go func() { - // test expects n events, if we begin sending event immediately some events - // will probably be dropped since the subscription ID might not be send to - // the client. - for i := 0; i < n; i++ { - if err := notifier.Notify(subscription.ID, val+i); err != nil { - return + for i := 0; i < len(id); i++ { + if strings.IndexByte(hexchars, id[i]) == -1 { + t.Fatalf("unexpected byte, want any valid hex char, got %c", id[i]) } } - - select { - case <-notifier.Closed(): - case <-subscription.Err(): - } - if s.unsubscribed != nil { - s.unsubscribed <- string(subscription.ID) - } - }() - - return subscription, nil -} - -// HangSubscription blocks on s.unblockHangSubscription before -// sending anything. -func (s *NotificationTestService) HangSubscription(ctx context.Context, val int) (*Subscription, error) { - notifier, supported := NotifierFromContext(ctx) - if !supported { - return nil, ErrNotificationsUnsupported - } - - s.gotHangSubscriptionReq <- struct{}{} - <-s.unblockHangSubscription - subscription := notifier.CreateSubscription() - - go func() { - notifier.Notify(subscription.ID, val) - }() - return subscription, nil -} - -func TestNotifications(t *testing.T) { - server := NewServer() - service := &NotificationTestService{unsubscribed: make(chan string)} - - if err := server.RegisterName("eth", service); err != nil { - t.Fatalf("unable to register test service %v", err) - } - - clientConn, serverConn := net.Pipe() - - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) - - out := json.NewEncoder(clientConn) - in := json.NewDecoder(clientConn) - - n := 5 - val := 12345 - request := map[string]interface{}{ - "id": 1, - "method": "eth_subscribe", - "version": "2.0", - "params": []interface{}{"someSubscription", n, val}, - } - - // create subscription - if err := out.Encode(request); err != nil { - t.Fatal(err) - } - - var subid string - response := jsonSuccessResponse{Result: subid} - if err := in.Decode(&response); err != nil { - t.Fatal(err) - } - - var ok bool - if _, ok = response.Result.(string); !ok { - t.Fatalf("expected subscription id, got %T", response.Result) - } - - for i := 0; i < n; i++ { - var notification jsonNotification - if err := in.Decode(¬ification); err != nil { - t.Fatalf("%v", err) - } - - if int(notification.Params.Result.(float64)) != val+i { - t.Fatalf("expected %d, got %d", val+i, notification.Params.Result) - } - } - - clientConn.Close() // causes notification unsubscribe callback to be called - select { - case <-service.unsubscribed: - case <-time.After(1 * time.Second): - t.Fatal("Unsubscribe not called after one second") } } -func waitForMessages(t *testing.T, in *json.Decoder, successes chan<- jsonSuccessResponse, - failures chan<- jsonErrResponse, notifications chan<- jsonNotification, errors chan<- error) { - - // read and parse server messages - for { - var rmsg json.RawMessage - if err := in.Decode(&rmsg); err != nil { - return - } - - var responses []map[string]interface{} - if rmsg[0] == '[' { - if err := json.Unmarshal(rmsg, &responses); err != nil { - errors <- fmt.Errorf("Received invalid message: %s", rmsg) - return - } - } else { - var msg map[string]interface{} - if err := json.Unmarshal(rmsg, &msg); err != nil { - errors <- fmt.Errorf("Received invalid message: %s", rmsg) - return - } - responses = append(responses, msg) - } - - for _, msg := range responses { - // determine what kind of msg was received and broadcast - // it to over the corresponding channel - if _, found := msg["result"]; found { - successes <- jsonSuccessResponse{ - Version: msg["jsonrpc"].(string), - Id: msg["id"], - Result: msg["result"], - } - continue - } - if _, found := msg["error"]; found { - params := msg["params"].(map[string]interface{}) - failures <- jsonErrResponse{ - Version: msg["jsonrpc"].(string), - Id: msg["id"], - Error: jsonError{int(params["subscription"].(float64)), params["message"].(string), params["data"]}, - } - continue - } - if _, found := msg["params"]; found { - params := msg["params"].(map[string]interface{}) - notifications <- jsonNotification{ - Version: msg["jsonrpc"].(string), - Method: msg["method"].(string), - Params: jsonSubscription{params["subscription"].(string), params["result"]}, - } - continue - } - errors <- fmt.Errorf("Received invalid message: %s", msg) - } - } -} - -// TestSubscriptionMultipleNamespaces ensures that subscriptions can exists -// for multiple different namespaces. -func TestSubscriptionMultipleNamespaces(t *testing.T) { +func TestSubscriptions(t *testing.T) { var ( namespaces = []string{"eth", "shh", "bzz"} - service = NotificationTestService{} - subCount = len(namespaces) * 2 + service = ¬ificationTestService{} + subCount = len(namespaces) notificationCount = 3 server = NewServer() clientConn, serverConn = net.Pipe() out = json.NewEncoder(clientConn) in = json.NewDecoder(clientConn) - successes = make(chan jsonSuccessResponse) - failures = make(chan jsonErrResponse) - notifications = make(chan jsonNotification) - errors = make(chan error, 10) + successes = make(chan subConfirmation) + notifications = make(chan subscriptionResult) + errors = make(chan error, subCount*notificationCount+1) ) // setup and start server for _, namespace := range namespaces { - if err := server.RegisterName(namespace, &service); err != nil { + if err := server.RegisterName(namespace, service); err != nil { t.Fatalf("unable to register test service %v", err) } } - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) defer server.Stop() // wait for message and write them to the given channels - go waitForMessages(t, in, successes, failures, notifications, errors) + go waitForMessages(in, successes, notifications, errors) // create subscriptions one by one for i, namespace := range namespaces { @@ -252,27 +82,11 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { "version": "2.0", "params": []interface{}{"someSubscription", notificationCount, i}, } - if err := out.Encode(&request); err != nil { t.Fatalf("Could not create subscription: %v", err) } } - // create all subscriptions in 1 batch - var requests []interface{} - for i, namespace := range namespaces { - requests = append(requests, map[string]interface{}{ - "id": i, - "method": fmt.Sprintf("%s_subscribe", namespace), - "version": "2.0", - "params": []interface{}{"someSubscription", notificationCount, i}, - }) - } - - if err := out.Encode(&requests); err != nil { - t.Fatalf("Could not create subscription in batch form: %v", err) - } - timeout := time.After(30 * time.Second) subids := make(map[string]string, subCount) count := make(map[string]int, subCount) @@ -285,17 +99,14 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { } return done } - for !allReceived() { select { - case suc := <-successes: // subscription created - subids[namespaces[int(suc.Id.(float64))]] = suc.Result.(string) + case confirmation := <-successes: // subscription created + subids[namespaces[confirmation.reqid]] = string(confirmation.subid) case notification := <-notifications: - count[notification.Params.Subscription]++ + count[notification.ID]++ case err := <-errors: t.Fatal(err) - case failure := <-failures: - t.Errorf("received error: %v", failure.Error) case <-timeout: for _, namespace := range namespaces { subid, found := subids[namespace] @@ -311,3 +122,85 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { } } } + +// This test checks that unsubscribing works. +func TestServerUnsubscribe(t *testing.T) { + // Start the server. + server := newTestServer() + service := ¬ificationTestService{unsubscribed: make(chan string)} + server.RegisterName("nftest2", service) + p1, p2 := net.Pipe() + go server.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) + + p2.SetDeadline(time.Now().Add(10 * time.Second)) + + // Subscribe. + p2.Write([]byte(`{"jsonrpc":"2.0","id":1,"method":"nftest2_subscribe","params":["someSubscription",0,10]}`)) + + // Handle received messages. + resps := make(chan subConfirmation) + notifications := make(chan subscriptionResult) + errors := make(chan error) + go waitForMessages(json.NewDecoder(p2), resps, notifications, errors) + + // Receive the subscription ID. + var sub subConfirmation + select { + case sub = <-resps: + case err := <-errors: + t.Fatal(err) + } + + // Unsubscribe and check that it is handled on the server side. + p2.Write([]byte(`{"jsonrpc":"2.0","method":"nftest2_unsubscribe","params":["` + sub.subid + `"]}`)) + for { + select { + case id := <-service.unsubscribed: + if id != string(sub.subid) { + t.Errorf("wrong subscription ID unsubscribed") + } + return + case err := <-errors: + t.Fatal(err) + case <-notifications: + // drop notifications + } + } +} + +type subConfirmation struct { + reqid int + subid ID +} + +func waitForMessages(in *json.Decoder, successes chan subConfirmation, notifications chan subscriptionResult, errors chan error) { + for { + var msg jsonrpcMessage + if err := in.Decode(&msg); err != nil { + errors <- fmt.Errorf("decode error: %v", err) + return + } + switch { + case msg.isNotification(): + var res subscriptionResult + if err := json.Unmarshal(msg.Params, &res); err != nil { + errors <- fmt.Errorf("invalid subscription result: %v", err) + } else { + notifications <- res + } + case msg.isResponse(): + var c subConfirmation + if msg.Error != nil { + errors <- msg.Error + } else if err := json.Unmarshal(msg.Result, &c.subid); err != nil { + errors <- fmt.Errorf("invalid response: %v", err) + } else { + json.Unmarshal(msg.ID, &c.reqid) + successes <- c + } + default: + errors <- fmt.Errorf("unrecognized message: %v", msg) + return + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-badid.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-badid.js new file mode 100644 index 00000000..2202b8cc --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-badid.js @@ -0,0 +1,7 @@ +// This test checks processing of messages with invalid ID. + +--> {"id":[],"method":"test_foo"} +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} + +--> {"id":{},"method":"test_foo"} +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-batch.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-batch.js new file mode 100644 index 00000000..f470574f --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-batch.js @@ -0,0 +1,14 @@ +// This test checks the behavior of batches with invalid elements. +// Empty batches are not allowed. Batches may contain junk. + +--> [] +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"empty batch"}} + +--> [1] +<-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] + +--> [1,2,3] +<-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] + +--> [{"jsonrpc":"2.0","id":1,"method":"test_echo","params":["foo",1]},55,{"jsonrpc":"2.0","id":2,"method":"unknown_method"},{"foo":"bar"}] +<-- [{"jsonrpc":"2.0","id":1,"result":{"String":"foo","Int":1,"Args":null}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":2,"error":{"code":-32601,"message":"the method unknown_method does not exist/is not available"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-idonly.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-idonly.js new file mode 100644 index 00000000..79997bee --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-idonly.js @@ -0,0 +1,7 @@ +// This test checks processing of messages that contain just the ID and nothing else. + +--> {"id":1} +<-- {"jsonrpc":"2.0","id":1,"error":{"code":-32600,"message":"invalid request"}} + +--> {"jsonrpc":"2.0","id":1} +<-- {"jsonrpc":"2.0","id":1,"error":{"code":-32600,"message":"invalid request"}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-nonobj.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-nonobj.js new file mode 100644 index 00000000..4b9f4d99 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-nonobj.js @@ -0,0 +1,4 @@ +// This test checks behavior for invalid requests. + +--> 1 +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-syntax.json b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-syntax.json new file mode 100644 index 00000000..b1942996 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/invalid-syntax.json @@ -0,0 +1,5 @@ +// This test checks that an error is written for invalid JSON requests. + +--> 'f +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid character '\\'' looking for beginning of value"}} + diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-batch.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-batch.js new file mode 100644 index 00000000..977af766 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-batch.js @@ -0,0 +1,8 @@ +// There is no response for all-notification batches. + +--> [{"jsonrpc":"2.0","method":"test_echo","params":["x",99]}] + +// This test checks regular batch calls. + +--> [{"jsonrpc":"2.0","id":2,"method":"test_echo","params":[]}, {"jsonrpc":"2.0","id": 3,"method":"test_echo","params":["x",3]}] +<-- [{"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 0"}},{"jsonrpc":"2.0","id":3,"result":{"String":"x","Int":3,"Args":null}}] diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-echo.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-echo.js new file mode 100644 index 00000000..7a9e9032 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-echo.js @@ -0,0 +1,16 @@ +// This test calls the test_echo method. + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": []} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 0"}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x"]} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 1"}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x", 3]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":null}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x", 3, {"S": "foo"}]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":{"S":"foo"}}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echoWithCtx", "params": ["x", 3, {"S": "foo"}]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":{"S":"foo"}}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-namedparam.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-namedparam.js new file mode 100644 index 00000000..9a9372b0 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-namedparam.js @@ -0,0 +1,5 @@ +// This test checks that an error response is sent for calls +// with named parameters. + +--> {"jsonrpc":"2.0","method":"test_echo","params":{"int":23},"id":3} +<-- {"jsonrpc":"2.0","id":3,"error":{"code":-32602,"message":"non-array args"}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noargsrets.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noargsrets.js new file mode 100644 index 00000000..e61cc708 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noargsrets.js @@ -0,0 +1,4 @@ +// This test calls the test_noArgsRets method. + +--> {"jsonrpc": "2.0", "id": "foo", "method": "test_noArgsRets", "params": []} +<-- {"jsonrpc":"2.0","id":"foo","result":null} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-nomethod.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-nomethod.js new file mode 100644 index 00000000..58ea6f30 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-nomethod.js @@ -0,0 +1,4 @@ +// This test calls a method that doesn't exist. + +--> {"jsonrpc": "2.0", "id": 2, "method": "invalid_method", "params": [2, 3]} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32601,"message":"the method invalid_method does not exist/is not available"}} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noparam.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noparam.js new file mode 100644 index 00000000..2edf486d --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-noparam.js @@ -0,0 +1,4 @@ +// This test checks that calls with no parameters work. + +--> {"jsonrpc":"2.0","method":"test_noArgsRets","id":3} +<-- {"jsonrpc":"2.0","id":3,"result":null} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-paramsnull.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-paramsnull.js new file mode 100644 index 00000000..8a01bae1 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/reqresp-paramsnull.js @@ -0,0 +1,4 @@ +// This test checks that calls with "params":null work. + +--> {"jsonrpc":"2.0","method":"test_noArgsRets","params":null,"id":3} +<-- {"jsonrpc":"2.0","id":3,"result":null} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall.js new file mode 100644 index 00000000..695d9858 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall.js @@ -0,0 +1,6 @@ +// This test checks reverse calls. + +--> {"jsonrpc":"2.0","id":2,"method":"test_callMeBack","params":["foo",[1]]} +<-- {"jsonrpc":"2.0","id":1,"method":"foo","params":[1]} +--> {"jsonrpc":"2.0","id":1,"result":"my result"} +<-- {"jsonrpc":"2.0","id":2,"result":"my result"} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall2.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall2.js new file mode 100644 index 00000000..acab4655 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/revcall2.js @@ -0,0 +1,7 @@ +// This test checks reverse calls. + +--> {"jsonrpc":"2.0","id":2,"method":"test_callMeBackLater","params":["foo",[1]]} +<-- {"jsonrpc":"2.0","id":2,"result":null} +<-- {"jsonrpc":"2.0","id":1,"method":"foo","params":[1]} +--> {"jsonrpc":"2.0","id":1,"result":"my result"} + diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testdata/subscription.js b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/subscription.js new file mode 100644 index 00000000..9f100730 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testdata/subscription.js @@ -0,0 +1,12 @@ +// This test checks basic subscription support. + +--> {"jsonrpc":"2.0","id":1,"method":"nftest_subscribe","params":["someSubscription",5,1]} +<-- {"jsonrpc":"2.0","id":1,"result":"0x1"} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":1}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":2}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":3}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":4}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":5}} + +--> {"jsonrpc":"2.0","id":2,"method":"nftest_echo","params":[11]} +<-- {"jsonrpc":"2.0","id":2,"result":11} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/testservice_test.go b/vendor/github.com/ethereum/go-ethereum/rpc/testservice_test.go new file mode 100644 index 00000000..470870ba --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/rpc/testservice_test.go @@ -0,0 +1,180 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "encoding/binary" + "errors" + "sync" + "time" +) + +func newTestServer() *Server { + server := NewServer() + server.idgen = sequentialIDGenerator() + if err := server.RegisterName("test", new(testService)); err != nil { + panic(err) + } + if err := server.RegisterName("nftest", new(notificationTestService)); err != nil { + panic(err) + } + return server +} + +func sequentialIDGenerator() func() ID { + var ( + mu sync.Mutex + counter uint64 + ) + return func() ID { + mu.Lock() + defer mu.Unlock() + counter++ + id := make([]byte, 8) + binary.BigEndian.PutUint64(id, counter) + return encodeID(id) + } +} + +type testService struct{} + +type Args struct { + S string +} + +type Result struct { + String string + Int int + Args *Args +} + +func (s *testService) NoArgsRets() {} + +func (s *testService) Echo(str string, i int, args *Args) Result { + return Result{str, i, args} +} + +func (s *testService) EchoWithCtx(ctx context.Context, str string, i int, args *Args) Result { + return Result{str, i, args} +} + +func (s *testService) Sleep(ctx context.Context, duration time.Duration) { + time.Sleep(duration) +} + +func (s *testService) Rets() (string, error) { + return "", nil +} + +func (s *testService) InvalidRets1() (error, string) { + return nil, "" +} + +func (s *testService) InvalidRets2() (string, string) { + return "", "" +} + +func (s *testService) InvalidRets3() (string, string, error) { + return "", "", nil +} + +func (s *testService) CallMeBack(ctx context.Context, method string, args []interface{}) (interface{}, error) { + c, ok := ClientFromContext(ctx) + if !ok { + return nil, errors.New("no client") + } + var result interface{} + err := c.Call(&result, method, args...) + return result, err +} + +func (s *testService) CallMeBackLater(ctx context.Context, method string, args []interface{}) error { + c, ok := ClientFromContext(ctx) + if !ok { + return errors.New("no client") + } + go func() { + <-ctx.Done() + var result interface{} + c.Call(&result, method, args...) + }() + return nil +} + +func (s *testService) Subscription(ctx context.Context) (*Subscription, error) { + return nil, nil +} + +type notificationTestService struct { + unsubscribed chan string + gotHangSubscriptionReq chan struct{} + unblockHangSubscription chan struct{} +} + +func (s *notificationTestService) Echo(i int) int { + return i +} + +func (s *notificationTestService) Unsubscribe(subid string) { + if s.unsubscribed != nil { + s.unsubscribed <- subid + } +} + +func (s *notificationTestService) SomeSubscription(ctx context.Context, n, val int) (*Subscription, error) { + notifier, supported := NotifierFromContext(ctx) + if !supported { + return nil, ErrNotificationsUnsupported + } + + // By explicitly creating an subscription we make sure that the subscription id is send + // back to the client before the first subscription.Notify is called. Otherwise the + // events might be send before the response for the *_subscribe method. + subscription := notifier.CreateSubscription() + go func() { + for i := 0; i < n; i++ { + if err := notifier.Notify(subscription.ID, val+i); err != nil { + return + } + } + select { + case <-notifier.Closed(): + case <-subscription.Err(): + } + if s.unsubscribed != nil { + s.unsubscribed <- string(subscription.ID) + } + }() + return subscription, nil +} + +// HangSubscription blocks on s.unblockHangSubscription before sending anything. +func (s *notificationTestService) HangSubscription(ctx context.Context, val int) (*Subscription, error) { + notifier, supported := NotifierFromContext(ctx) + if !supported { + return nil, ErrNotificationsUnsupported + } + s.gotHangSubscriptionReq <- struct{}{} + <-s.unblockHangSubscription + subscription := notifier.CreateSubscription() + + go func() { + notifier.Notify(subscription.ID, val) + }() + return subscription, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/types.go b/vendor/github.com/ethereum/go-ethereum/rpc/types.go index 4252c360..f31f09a7 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/types.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/types.go @@ -17,13 +17,11 @@ package rpc import ( + "context" "fmt" "math" - "reflect" "strings" - "sync" - mapset "github.com/deckarep/golang-set" "github.com/ethereum/go-ethereum/common/hexutil" ) @@ -35,57 +33,6 @@ type API struct { Public bool // indication if the methods must be considered safe for public use } -// callback is a method callback which was registered in the server -type callback struct { - rcvr reflect.Value // receiver of method - method reflect.Method // callback - argTypes []reflect.Type // input argument types - hasCtx bool // method's first argument is a context (not included in argTypes) - errPos int // err return idx, of -1 when method cannot return error - isSubscribe bool // indication if the callback is a subscription -} - -// service represents a registered object -type service struct { - name string // name for service - typ reflect.Type // receiver type - callbacks callbacks // registered handlers - subscriptions subscriptions // available subscriptions/notifications -} - -// serverRequest is an incoming request -type serverRequest struct { - id interface{} - svcname string - callb *callback - args []reflect.Value - isUnsubscribe bool - err Error -} - -type serviceRegistry map[string]*service // collection of services -type callbacks map[string]*callback // collection of RPC callbacks -type subscriptions map[string]*callback // collection of subscription callbacks - -// Server represents a RPC server -type Server struct { - services serviceRegistry - - run int32 - codecsMu sync.Mutex - codecs mapset.Set -} - -// rpcRequest represents a raw incoming RPC request -type rpcRequest struct { - service string - method string - id interface{} - isPubSub bool - params interface{} - err Error // invalid batch element -} - // Error wraps RPC errors, which contain an error code in addition to the message. type Error interface { Error() string // returns the message @@ -96,24 +43,19 @@ type Error interface { // a RPC session. Implementations must be go-routine safe since the codec can be called in // multiple go-routines concurrently. type ServerCodec interface { - // Read next request - ReadRequestHeaders() ([]rpcRequest, bool, Error) - // Parse request argument to the given types - ParseRequestArguments(argTypes []reflect.Type, params interface{}) ([]reflect.Value, Error) - // Assemble success response, expects response id and payload - CreateResponse(id interface{}, reply interface{}) interface{} - // Assemble error response, expects response id and error - CreateErrorResponse(id interface{}, err Error) interface{} - // Assemble error response with extra information about the error through info - CreateErrorResponseWithInfo(id interface{}, err Error, info interface{}) interface{} - // Create notification response - CreateNotification(id, namespace string, event interface{}) interface{} - // Write msg to client. - Write(msg interface{}) error - // Close underlying data stream + Read() (msgs []*jsonrpcMessage, isBatch bool, err error) Close() - // Closed when underlying connection is closed + jsonWriter +} + +// jsonWriter can write JSON messages to its underlying connection. +// Implementations must be safe for concurrent use. +type jsonWriter interface { + Write(context.Context, interface{}) error + // Closed returns a channel which is closed when the connection is closed. Closed() <-chan interface{} + // RemoteAddr returns the peer address of the connection. + RemoteAddr() string } type BlockNumber int64 diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/utils.go b/vendor/github.com/ethereum/go-ethereum/rpc/utils.go deleted file mode 100644 index 7f7ac452..00000000 --- a/vendor/github.com/ethereum/go-ethereum/rpc/utils.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rpc - -import ( - "bufio" - "context" - crand "crypto/rand" - "encoding/binary" - "encoding/hex" - "math/rand" - "reflect" - "strings" - "sync" - "time" - "unicode" - "unicode/utf8" -) - -var ( - subscriptionIDGenMu sync.Mutex - subscriptionIDGen = idGenerator() -) - -// Is this an exported - upper case - name? -func isExported(name string) bool { - rune, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(rune) -} - -// Is this type exported or a builtin? -func isExportedOrBuiltinType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - // PkgPath will be non-empty even for an exported type, - // so we need to check the type name as well. - return isExported(t.Name()) || t.PkgPath() == "" -} - -var contextType = reflect.TypeOf((*context.Context)(nil)).Elem() - -// isContextType returns an indication if the given t is of context.Context or *context.Context type -func isContextType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t == contextType -} - -var errorType = reflect.TypeOf((*error)(nil)).Elem() - -// Implements this type the error interface -func isErrorType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t.Implements(errorType) -} - -var subscriptionType = reflect.TypeOf((*Subscription)(nil)).Elem() - -// isSubscriptionType returns an indication if the given t is of Subscription or *Subscription type -func isSubscriptionType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t == subscriptionType -} - -// isPubSub tests whether the given method has as as first argument a context.Context -// and returns the pair (Subscription, error) -func isPubSub(methodType reflect.Type) bool { - // numIn(0) is the receiver type - if methodType.NumIn() < 2 || methodType.NumOut() != 2 { - return false - } - - return isContextType(methodType.In(1)) && - isSubscriptionType(methodType.Out(0)) && - isErrorType(methodType.Out(1)) -} - -// formatName will convert to first character to lower case -func formatName(name string) string { - ret := []rune(name) - if len(ret) > 0 { - ret[0] = unicode.ToLower(ret[0]) - } - return string(ret) -} - -// suitableCallbacks iterates over the methods of the given type. It will determine if a method satisfies the criteria -// for a RPC callback or a subscription callback and adds it to the collection of callbacks or subscriptions. See server -// documentation for a summary of these criteria. -func suitableCallbacks(rcvr reflect.Value, typ reflect.Type) (callbacks, subscriptions) { - callbacks := make(callbacks) - subscriptions := make(subscriptions) - -METHODS: - for m := 0; m < typ.NumMethod(); m++ { - method := typ.Method(m) - mtype := method.Type - mname := formatName(method.Name) - if method.PkgPath != "" { // method must be exported - continue - } - - var h callback - h.isSubscribe = isPubSub(mtype) - h.rcvr = rcvr - h.method = method - h.errPos = -1 - - firstArg := 1 - numIn := mtype.NumIn() - if numIn >= 2 && mtype.In(1) == contextType { - h.hasCtx = true - firstArg = 2 - } - - if h.isSubscribe { - h.argTypes = make([]reflect.Type, numIn-firstArg) // skip rcvr type - for i := firstArg; i < numIn; i++ { - argType := mtype.In(i) - if isExportedOrBuiltinType(argType) { - h.argTypes[i-firstArg] = argType - } else { - continue METHODS - } - } - - subscriptions[mname] = &h - continue METHODS - } - - // determine method arguments, ignore first arg since it's the receiver type - // Arguments must be exported or builtin types - h.argTypes = make([]reflect.Type, numIn-firstArg) - for i := firstArg; i < numIn; i++ { - argType := mtype.In(i) - if !isExportedOrBuiltinType(argType) { - continue METHODS - } - h.argTypes[i-firstArg] = argType - } - - // check that all returned values are exported or builtin types - for i := 0; i < mtype.NumOut(); i++ { - if !isExportedOrBuiltinType(mtype.Out(i)) { - continue METHODS - } - } - - // when a method returns an error it must be the last returned value - h.errPos = -1 - for i := 0; i < mtype.NumOut(); i++ { - if isErrorType(mtype.Out(i)) { - h.errPos = i - break - } - } - - if h.errPos >= 0 && h.errPos != mtype.NumOut()-1 { - continue METHODS - } - - switch mtype.NumOut() { - case 0, 1, 2: - if mtype.NumOut() == 2 && h.errPos == -1 { // method must one return value and 1 error - continue METHODS - } - callbacks[mname] = &h - } - } - - return callbacks, subscriptions -} - -// idGenerator helper utility that generates a (pseudo) random sequence of -// bytes that are used to generate identifiers. -func idGenerator() *rand.Rand { - if seed, err := binary.ReadVarint(bufio.NewReader(crand.Reader)); err == nil { - return rand.New(rand.NewSource(seed)) - } - return rand.New(rand.NewSource(int64(time.Now().Nanosecond()))) -} - -// NewID generates a identifier that can be used as an identifier in the RPC interface. -// e.g. filter and subscription identifier. -func NewID() ID { - subscriptionIDGenMu.Lock() - defer subscriptionIDGenMu.Unlock() - - id := make([]byte, 16) - for i := 0; i < len(id); i += 7 { - val := subscriptionIDGen.Int63() - for j := 0; i+j < len(id) && j < 7; j++ { - id[i+j] = byte(val) - val >>= 8 - } - } - - rpcId := hex.EncodeToString(id) - // rpc ID's are RPC quantities, no leading zero's and 0 is 0x0 - rpcId = strings.TrimLeft(rpcId, "0") - if rpcId == "" { - rpcId = "0" - } - - return ID("0x" + rpcId) -} diff --git a/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go b/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go index eae8320e..c5383667 100644 --- a/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go +++ b/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go @@ -22,6 +22,7 @@ import ( "crypto/tls" "encoding/base64" "encoding/json" + "errors" "fmt" "net" "net/http" @@ -56,24 +57,39 @@ var websocketJSONCodec = websocket.Codec{ // // allowedOrigins should be a comma-separated list of allowed origin URLs. // To allow connections with any origin, pass "*". -func (srv *Server) WebsocketHandler(allowedOrigins []string) http.Handler { +func (s *Server) WebsocketHandler(allowedOrigins []string) http.Handler { return websocket.Server{ Handshake: wsHandshakeValidator(allowedOrigins), Handler: func(conn *websocket.Conn) { - // Create a custom encode/decode pair to enforce payload size and number encoding - conn.MaxPayloadBytes = maxRequestContentLength - - encoder := func(v interface{}) error { - return websocketJSONCodec.Send(conn, v) - } - decoder := func(v interface{}) error { - return websocketJSONCodec.Receive(conn, v) - } - srv.ServeCodec(NewCodec(conn, encoder, decoder), OptionMethodInvocation|OptionSubscriptions) + codec := newWebsocketCodec(conn) + s.ServeCodec(codec, OptionMethodInvocation|OptionSubscriptions) }, } } +func newWebsocketCodec(conn *websocket.Conn) ServerCodec { + // Create a custom encode/decode pair to enforce payload size and number encoding + conn.MaxPayloadBytes = maxRequestContentLength + encoder := func(v interface{}) error { + return websocketJSONCodec.Send(conn, v) + } + decoder := func(v interface{}) error { + return websocketJSONCodec.Receive(conn, v) + } + rpcconn := Conn(conn) + if conn.IsServerConn() { + // Override remote address with the actual socket address because + // package websocket crashes if there is no request origin. + addr := conn.Request().RemoteAddr + if wsaddr := conn.RemoteAddr().(*websocket.Addr); wsaddr.URL != nil { + // Add origin if present. + addr += "(" + wsaddr.URL.String() + ")" + } + rpcconn = connWithRemoteAddr{conn, addr} + } + return NewCodec(rpcconn, encoder, decoder) +} + // NewWSServer creates a new websocket RPC server around an API provider. // // Deprecated: use Server.WebsocketHandler @@ -105,15 +121,23 @@ func wsHandshakeValidator(allowedOrigins []string) func(*websocket.Config, *http } } - log.Debug(fmt.Sprintf("Allowed origin(s) for WS RPC interface %v\n", origins.ToSlice())) + log.Debug(fmt.Sprintf("Allowed origin(s) for WS RPC interface %v", origins.ToSlice())) f := func(cfg *websocket.Config, req *http.Request) error { + // Skip origin verification if no Origin header is present. The origin check + // is supposed to protect against browser based attacks. Browsers always set + // Origin. Non-browser software can put anything in origin and checking it doesn't + // provide additional security. + if _, ok := req.Header["Origin"]; !ok { + return nil + } + // Verify origin against whitelist. origin := strings.ToLower(req.Header.Get("Origin")) if allowAllOrigins || origins.Contains(origin) { return nil } - log.Warn(fmt.Sprintf("origin '%s' not allowed on WS-RPC interface\n", origin)) - return fmt.Errorf("origin %s not allowed", origin) + log.Warn("Rejected WebSocket connection", "origin", origin) + return errors.New("origin not allowed") } return f @@ -155,8 +179,12 @@ func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error return nil, err } - return newClient(ctx, func(ctx context.Context) (net.Conn, error) { - return wsDialContext(ctx, config) + return newClient(ctx, func(ctx context.Context) (ServerCodec, error) { + conn, err := wsDialContext(ctx, config) + if err != nil { + return nil, err + } + return newWebsocketCodec(conn), nil }) } diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper.go b/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper.go index 0fef2493..88c1da03 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper.go @@ -17,17 +17,16 @@ package core import ( + "bytes" "encoding/json" "fmt" "io/ioutil" + "os" + "regexp" "strings" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" - - "bytes" - "os" - "regexp" ) type decodedArgument struct { @@ -178,7 +177,9 @@ func NewAbiDBFromFile(path string) (*AbiDb, error) { if err != nil { return nil, err } - json.Unmarshal(raw, &db.db) + if err := json.Unmarshal(raw, &db.db); err != nil { + return nil, err + } return db, nil } @@ -193,14 +194,18 @@ func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) { if err != nil { return nil, err } - json.Unmarshal(raw, &db.db) + if err := json.Unmarshal(raw, &db.db); err != nil { + return nil, err + } // Custom file may not exist. Will be created during save, if needed if _, err := os.Stat(custom); err == nil { raw, err = ioutil.ReadFile(custom) if err != nil { return nil, err } - json.Unmarshal(raw, &db.customdb) + if err := json.Unmarshal(raw, &db.customdb); err != nil { + return nil, err + } } return db, nil diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper_test.go b/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper_test.go index 878210be..4a3a2f06 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper_test.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/abihelper_test.go @@ -18,12 +18,11 @@ package core import ( "fmt" - "strings" - "testing" - "io/ioutil" "math/big" "reflect" + "strings" + "testing" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/api.go b/vendor/github.com/ethereum/go-ethereum/signer/core/api.go index e9a33578..184b9031 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/api.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/api.go @@ -21,52 +21,55 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "math/big" "reflect" + "strings" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/signer/storage" ) -// numberOfAccountsToDerive For hardware wallets, the number of accounts to derive -const numberOfAccountsToDerive = 10 +const ( + // numberOfAccountsToDerive For hardware wallets, the number of accounts to derive + numberOfAccountsToDerive = 10 + // ExternalAPIVersion -- see extapi_changelog.md + ExternalAPIVersion = "6.0.0" + // InternalAPIVersion -- see intapi_changelog.md + InternalAPIVersion = "6.0.0" +) // ExternalAPI defines the external API through which signing requests are made. type ExternalAPI interface { // List available accounts List(ctx context.Context) ([]common.Address, error) // New request to create a new account - New(ctx context.Context) (accounts.Account, error) + New(ctx context.Context) (common.Address, error) // SignTransaction request to sign the specified transaction SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) - // Sign - request to sign the given data (plus prefix) - Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) - // Export - request to export an account - Export(ctx context.Context, addr common.Address) (json.RawMessage, error) - // Import - request to import an account - // Should be moved to Internal API, in next phase when we have - // bi-directional communication - //Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) + // SignData - request to sign the given data (plus prefix) + SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) + // SignTypedData - request to sign the given structured data (plus prefix) + SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data TypedData) (hexutil.Bytes, error) + // EcRecover - recover public key from given message and signature + EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) + // Version info about the APIs + Version(ctx context.Context) (string, error) } -// SignerUI specifies what method a UI needs to implement to be able to be used as a UI for the signer -type SignerUI interface { +// UIClientAPI specifies what method a UI needs to implement to be able to be used as a +// UI for the signer +type UIClientAPI interface { // ApproveTx prompt the user for confirmation to request to sign Transaction ApproveTx(request *SignTxRequest) (SignTxResponse, error) // ApproveSignData prompt the user for confirmation to request to sign data ApproveSignData(request *SignDataRequest) (SignDataResponse, error) - // ApproveExport prompt the user for confirmation to export encrypted Account json - ApproveExport(request *ExportRequest) (ExportResponse, error) - // ApproveImport prompt the user for confirmation to import Account json - ApproveImport(request *ImportRequest) (ImportResponse, error) // ApproveListing prompt the user for confirmation to list accounts // the list of accounts to list can be modified by the UI ApproveListing(request *ListRequest) (ListResponse, error) @@ -85,15 +88,18 @@ type SignerUI interface { // OnInputRequired is invoked when clef requires user input, for example master password or // pin-code for unlocking hardware wallets OnInputRequired(info UserInputRequest) (UserInputResponse, error) + // RegisterUIServer tells the UI to use the given UIServerAPI for ui->clef communication + RegisterUIServer(api *UIServerAPI) } // SignerAPI defines the actual implementation of ExternalAPI type SignerAPI struct { - chainID *big.Int - am *accounts.Manager - UI SignerUI - validator *Validator - rejectMode bool + chainID *big.Int + am *accounts.Manager + UI UIClientAPI + validator *Validator + rejectMode bool + credentials storage.Storage } // Metadata about a request @@ -105,6 +111,37 @@ type Metadata struct { Origin string `json:"Origin"` } +func StartClefAccountManager(ksLocation string, nousb, lightKDF bool) *accounts.Manager { + var ( + backends []accounts.Backend + n, p = keystore.StandardScryptN, keystore.StandardScryptP + ) + if lightKDF { + n, p = keystore.LightScryptN, keystore.LightScryptP + } + // support password based accounts + if len(ksLocation) > 0 { + backends = append(backends, keystore.NewKeyStore(ksLocation, n, p)) + } + if !nousb { + // Start a USB hub for Ledger hardware wallets + if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + } else { + backends = append(backends, ledgerhub) + log.Debug("Ledger support enabled") + } + // Start a USB hub for Trezor hardware wallets + if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + log.Debug("Trezor support enabled") + } + } + return accounts.NewManager(backends...) +} + // MetadataFromContext extracts Metadata from a given context.Context func MetadataFromContext(ctx context.Context) Metadata { m := Metadata{"NA", "NA", "NA", "", ""} // batman @@ -149,66 +186,40 @@ type ( //The UI may make changes to the TX Transaction SendTxArgs `json:"transaction"` Approved bool `json:"approved"` - Password string `json:"password"` - } - // ExportRequest info about query to export accounts - ExportRequest struct { - Address common.Address `json:"address"` - Meta Metadata `json:"meta"` - } - // ExportResponse response to export-request - ExportResponse struct { - Approved bool `json:"approved"` - } - // ImportRequest info about request to import an Account - ImportRequest struct { - Meta Metadata `json:"meta"` - } - ImportResponse struct { - Approved bool `json:"approved"` - OldPassword string `json:"old_password"` - NewPassword string `json:"new_password"` } SignDataRequest struct { - Address common.MixedcaseAddress `json:"address"` - Rawdata hexutil.Bytes `json:"raw_data"` - Message string `json:"message"` - Hash hexutil.Bytes `json:"hash"` - Meta Metadata `json:"meta"` + ContentType string `json:"content_type"` + Address common.MixedcaseAddress `json:"address"` + Rawdata []byte `json:"raw_data"` + Message []*NameValueType `json:"message"` + Hash hexutil.Bytes `json:"hash"` + Meta Metadata `json:"meta"` } SignDataResponse struct { Approved bool `json:"approved"` - Password string } NewAccountRequest struct { Meta Metadata `json:"meta"` } NewAccountResponse struct { - Approved bool `json:"approved"` - Password string `json:"password"` + Approved bool `json:"approved"` } ListRequest struct { - Accounts []Account `json:"accounts"` - Meta Metadata `json:"meta"` + Accounts []accounts.Account `json:"accounts"` + Meta Metadata `json:"meta"` } ListResponse struct { - Accounts []Account `json:"accounts"` + Accounts []accounts.Account `json:"accounts"` } Message struct { Text string `json:"text"` } - PasswordRequest struct { - Prompt string `json:"prompt"` - } - PasswordResponse struct { - Password string `json:"password"` - } StartupInfo struct { Info map[string]interface{} `json:"info"` } UserInputRequest struct { - Prompt string `json:"prompt"` Title string `json:"title"` + Prompt string `json:"prompt"` IsPassword bool `json:"isPassword"` } UserInputResponse struct { @@ -223,38 +234,11 @@ var ErrRequestDenied = errors.New("Request denied") // key that is generated when a new Account is created. // noUSB disables USB support that is required to support hardware devices such as // ledger and trezor. -func NewSignerAPI(chainID int64, ksLocation string, noUSB bool, ui SignerUI, abidb *AbiDb, lightKDF bool, advancedMode bool) *SignerAPI { - var ( - backends []accounts.Backend - n, p = keystore.StandardScryptN, keystore.StandardScryptP - ) - if lightKDF { - n, p = keystore.LightScryptN, keystore.LightScryptP - } - // support password based accounts - if len(ksLocation) > 0 { - backends = append(backends, keystore.NewKeyStore(ksLocation, n, p)) - } +func NewSignerAPI(am *accounts.Manager, chainID int64, noUSB bool, ui UIClientAPI, abidb *AbiDb, advancedMode bool, credentials storage.Storage) *SignerAPI { if advancedMode { log.Info("Clef is in advanced mode: will warn instead of reject") } - if !noUSB { - // Start a USB hub for Ledger hardware wallets - if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) - } else { - backends = append(backends, ledgerhub) - log.Debug("Ledger support enabled") - } - // Start a USB hub for Trezor hardware wallets - if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) - } else { - backends = append(backends, trezorhub) - log.Debug("Trezor support enabled") - } - } - signer := &SignerAPI{big.NewInt(chainID), accounts.NewManager(backends...), ui, NewValidator(abidb), !advancedMode} + signer := &SignerAPI{big.NewInt(chainID), am, ui, NewValidator(abidb), !advancedMode, credentials} if !noUSB { signer.startUSBListener() } @@ -347,12 +331,9 @@ func (api *SignerAPI) startUSBListener() { // List returns the set of wallet this signer manages. Each wallet can contain // multiple accounts. func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { - var accs []Account + var accs []accounts.Account for _, wallet := range api.am.Wallets() { - for _, acc := range wallet.Accounts() { - acc := Account{Typ: "Account", URL: wallet.URL(), Address: acc.Address} - accs = append(accs, acc) - } + accs = append(accs, wallet.Accounts()...) } result, err := api.UI.ApproveListing(&ListRequest{Accounts: accs, Meta: MetadataFromContext(ctx)}) if err != nil { @@ -362,7 +343,6 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { return nil, ErrRequestDenied } - addresses := make([]common.Address, 0) for _, acc := range result.Accounts { addresses = append(addresses, acc.Address) @@ -374,33 +354,37 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { // New creates a new password protected Account. The private key is protected with // the given password. Users are responsible to backup the private key that is stored // in the keystore location thas was specified when this API was created. -func (api *SignerAPI) New(ctx context.Context) (accounts.Account, error) { +func (api *SignerAPI) New(ctx context.Context) (common.Address, error) { be := api.am.Backends(keystore.KeyStoreType) if len(be) == 0 { - return accounts.Account{}, errors.New("password based accounts not supported") + return common.Address{}, errors.New("password based accounts not supported") } - var ( - resp NewAccountResponse - err error - ) + if resp, err := api.UI.ApproveNewAccount(&NewAccountRequest{MetadataFromContext(ctx)}); err != nil { + return common.Address{}, err + } else if !resp.Approved { + return common.Address{}, ErrRequestDenied + } + // Three retries to get a valid password for i := 0; i < 3; i++ { - resp, err = api.UI.ApproveNewAccount(&NewAccountRequest{MetadataFromContext(ctx)}) + resp, err := api.UI.OnInputRequired(UserInputRequest{ + "New account password", + fmt.Sprintf("Please enter a password for the new account to be created (attempt %d of 3)", i), + true}) if err != nil { - return accounts.Account{}, err + log.Warn("error obtaining password", "attempt", i, "error", err) + continue } - if !resp.Approved { - return accounts.Account{}, ErrRequestDenied - } - if pwErr := ValidatePasswordFormat(resp.Password); pwErr != nil { + if pwErr := ValidatePasswordFormat(resp.Text); pwErr != nil { api.UI.ShowError(fmt.Sprintf("Account creation attempt #%d failed due to password requirements: %v", (i + 1), pwErr)) } else { // No error - return be[0].(*keystore.KeyStore).NewAccount(resp.Password) + acc, err := be[0].(*keystore.KeyStore).NewAccount(resp.Text) + return acc.Address, err } } // Otherwise fail, with generic error message - return accounts.Account{}, errors.New("account creation failed") + return common.Address{}, errors.New("account creation failed") } // logDiff logs the difference between the incoming (original) transaction and the one returned from the signer. @@ -449,6 +433,24 @@ func logDiff(original *SignTxRequest, new *SignTxResponse) bool { return modified } +func (api *SignerAPI) lookupPassword(address common.Address) string { + return api.credentials.Get(strings.ToLower(address.String())) +} +func (api *SignerAPI) lookupOrQueryPassword(address common.Address, title, prompt string) (string, error) { + if pw := api.lookupPassword(address); pw != "" { + return pw, nil + } else { + pwResp, err := api.UI.OnInputRequired(UserInputRequest{title, prompt, true}) + if err != nil { + log.Warn("error obtaining password", "error", err) + // We'll not forward the error here, in case the error contains info about the response from the UI, + // which could leak the password if it was malformed json or something + return "", errors.New("internal error") + } + return pwResp.Text, nil + } +} + // SignTransaction signs the given Transaction and returns it both as json and rlp-encoded form func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { var ( @@ -492,9 +494,14 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth } // Convert fields into a real transaction var unsignedTx = result.Transaction.toTransaction() - + // Get the password for the transaction + pw, err := api.lookupOrQueryPassword(acc.Address, "Account password", + fmt.Sprintf("Please enter the password for account %s", acc.Address.String())) + if err != nil { + return nil, err + } // The one to sign is the one that was returned from the UI - signedTx, err := wallet.SignTxWithPassphrase(acc, result.Password, unsignedTx, api.chainID) + signedTx, err := wallet.SignTxWithPassphrase(acc, pw, unsignedTx, api.chainID) if err != nil { api.UI.ShowError(err.Error()) return nil, err @@ -510,103 +517,8 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth } -// Sign calculates an Ethereum ECDSA signature for: -// keccack256("\x19Ethereum Signed Message:\n" + len(message) + message)) -// -// Note, the produced signature conforms to the secp256k1 curve R, S and V values, -// where the V value will be 27 or 28 for legacy reasons. -// -// The key used to calculate the signature is decrypted with the given password. -// -// https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign -func (api *SignerAPI) Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) { - sighash, msg := SignHash(data) - // We make the request prior to looking up if we actually have the account, to prevent - // account-enumeration via the API - req := &SignDataRequest{Address: addr, Rawdata: data, Message: msg, Hash: sighash, Meta: MetadataFromContext(ctx)} - res, err := api.UI.ApproveSignData(req) - - if err != nil { - return nil, err - } - if !res.Approved { - return nil, ErrRequestDenied - } - // Look up the wallet containing the requested signer - account := accounts.Account{Address: addr.Address()} - wallet, err := api.am.Find(account) - if err != nil { - return nil, err - } - // Assemble sign the data with the wallet - signature, err := wallet.SignHashWithPassphrase(account, res.Password, sighash) - if err != nil { - api.UI.ShowError(err.Error()) - return nil, err - } - signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper - return signature, nil -} - -// SignHash is a helper function that calculates a hash for the given message that can be -// safely used to calculate a signature from. -// -// The hash is calculated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). -// -// This gives context to the signed message and prevents signing of transactions. -func SignHash(data []byte) ([]byte, string) { - msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - return crypto.Keccak256([]byte(msg)), msg -} - -// Export returns encrypted private key associated with the given address in web3 keystore format. -func (api *SignerAPI) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { - res, err := api.UI.ApproveExport(&ExportRequest{Address: addr, Meta: MetadataFromContext(ctx)}) - - if err != nil { - return nil, err - } - if !res.Approved { - return nil, ErrRequestDenied - } - // Look up the wallet containing the requested signer - wallet, err := api.am.Find(accounts.Account{Address: addr}) - if err != nil { - return nil, err - } - if wallet.URL().Scheme != keystore.KeyStoreScheme { - return nil, fmt.Errorf("Account is not a keystore-account") - } - return ioutil.ReadFile(wallet.URL().Path) -} - -// Import tries to import the given keyJSON in the local keystore. The keyJSON data is expected to be -// in web3 keystore format. It will decrypt the keyJSON with the given passphrase and on successful -// decryption it will encrypt the key with the given newPassphrase and store it in the keystore. -// OBS! This method is removed from the public API. It should not be exposed on the external API -// for a couple of reasons: -// 1. Even though it is encrypted, it should still be seen as sensitive data -// 2. It can be used to DoS clef, by using malicious data with e.g. extreme large -// values for the kdfparams. -func (api *SignerAPI) Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) { - be := api.am.Backends(keystore.KeyStoreType) - - if len(be) == 0 { - return Account{}, errors.New("password based accounts not supported") - } - res, err := api.UI.ApproveImport(&ImportRequest{Meta: MetadataFromContext(ctx)}) - - if err != nil { - return Account{}, err - } - if !res.Approved { - return Account{}, ErrRequestDenied - } - acc, err := be[0].(*keystore.KeyStore).Import(keyJSON, res.OldPassword, res.NewPassword) - if err != nil { - api.UI.ShowError(err.Error()) - return Account{}, err - } - return Account{Typ: "Account", URL: acc.URL, Address: acc.Address}, nil +// Returns the external api version. This method does not require user acceptance. Available methods are +// available via enumeration anyway, and this info does not contain user-specific data +func (api *SignerAPI) Version(ctx context.Context) (string, error) { + return ExternalAPIVersion, nil } diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/api_test.go b/vendor/github.com/ethereum/go-ethereum/signer/core/api_test.go index a8aa2389..3225c10e 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/api_test.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/api_test.go @@ -19,7 +19,6 @@ package core import ( "bytes" "context" - "errors" "fmt" "io/ioutil" "math/big" @@ -28,71 +27,60 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/signer/storage" ) //Used for testing -type HeadlessUI struct { - controller chan string +type headlessUi struct { + approveCh chan string // to send approve/deny + inputCh chan string // to send password } -func (ui *HeadlessUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { - return UserInputResponse{}, errors.New("not implemented") +func (ui *headlessUi) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { + input := <-ui.inputCh + return UserInputResponse{Text: input}, nil } -func (ui *HeadlessUI) OnSignerStartup(info StartupInfo) { -} +func (ui *headlessUi) OnSignerStartup(info StartupInfo) {} +func (ui *headlessUi) RegisterUIServer(api *UIServerAPI) {} +func (ui *headlessUi) OnApprovedTx(tx ethapi.SignTransactionResult) {} -func (ui *HeadlessUI) OnApprovedTx(tx ethapi.SignTransactionResult) { - fmt.Printf("OnApproved()\n") -} +func (ui *headlessUi) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { -func (ui *HeadlessUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { - - switch <-ui.controller { + switch <-ui.approveCh { case "Y": - return SignTxResponse{request.Transaction, true, <-ui.controller}, nil - case "M": //Modify + return SignTxResponse{request.Transaction, true}, nil + case "M": // modify + // The headless UI always modifies the transaction old := big.Int(request.Transaction.Value) newVal := big.NewInt(0).Add(&old, big.NewInt(1)) request.Transaction.Value = hexutil.Big(*newVal) - return SignTxResponse{request.Transaction, true, <-ui.controller}, nil + return SignTxResponse{request.Transaction, true}, nil default: - return SignTxResponse{request.Transaction, false, ""}, nil + return SignTxResponse{request.Transaction, false}, nil } } -func (ui *HeadlessUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { - if "Y" == <-ui.controller { - return SignDataResponse{true, <-ui.controller}, nil - } - return SignDataResponse{false, ""}, nil +func (ui *headlessUi) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { + approved := "Y" == <-ui.approveCh + return SignDataResponse{approved}, nil } -func (ui *HeadlessUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - return ExportResponse{<-ui.controller == "Y"}, nil - -} - -func (ui *HeadlessUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - if "Y" == <-ui.controller { - return ImportResponse{true, <-ui.controller, <-ui.controller}, nil - } - return ImportResponse{false, "", ""}, nil -} - -func (ui *HeadlessUI) ApproveListing(request *ListRequest) (ListResponse, error) { - switch <-ui.controller { +func (ui *headlessUi) ApproveListing(request *ListRequest) (ListResponse, error) { + approval := <-ui.approveCh + //fmt.Printf("approval %s\n", approval) + switch approval { case "A": return ListResponse{request.Accounts}, nil case "1": - l := make([]Account, 1) + l := make([]accounts.Account, 1) l[0] = request.Accounts[1] return ListResponse{l}, nil default: @@ -100,19 +88,19 @@ func (ui *HeadlessUI) ApproveListing(request *ListRequest) (ListResponse, error) } } -func (ui *HeadlessUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { - if "Y" == <-ui.controller { - return NewAccountResponse{true, <-ui.controller}, nil +func (ui *headlessUi) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { + if "Y" == <-ui.approveCh { + return NewAccountResponse{true}, nil } - return NewAccountResponse{false, ""}, nil + return NewAccountResponse{false}, nil } -func (ui *HeadlessUI) ShowError(message string) { +func (ui *headlessUi) ShowError(message string) { //stdout is used by communication fmt.Fprintln(os.Stderr, message) } -func (ui *HeadlessUI) ShowInfo(message string) { +func (ui *headlessUi) ShowInfo(message string) { //stdout is used by communication fmt.Fprintln(os.Stderr, message) } @@ -129,30 +117,20 @@ func tmpDirName(t *testing.T) string { return d } -func setup(t *testing.T) (*SignerAPI, chan string) { - - controller := make(chan string, 20) - +func setup(t *testing.T) (*SignerAPI, *headlessUi) { db, err := NewAbiDBFromFile("../../cmd/clef/4byte.json") if err != nil { - utils.Fatalf(err.Error()) + t.Fatal(err.Error()) } - var ( - ui = &HeadlessUI{controller} - api = NewSignerAPI( - 1, - tmpDirName(t), - true, - ui, - db, - true, true) - ) - return api, controller -} -func createAccount(control chan string, api *SignerAPI, t *testing.T) { + ui := &headlessUi{make(chan string, 20), make(chan string, 20)} + am := StartClefAccountManager(tmpDirName(t), true, true) + api := NewSignerAPI(am, 1337, true, ui, db, true, &storage.NoStorage{}) + return api, ui - control <- "Y" - control <- "a_long_password" +} +func createAccount(ui *headlessUi, api *SignerAPI, t *testing.T) { + ui.approveCh <- "Y" + ui.inputCh <- "a_long_password" _, err := api.New(context.Background()) if err != nil { t.Fatal(err) @@ -161,48 +139,48 @@ func createAccount(control chan string, api *SignerAPI, t *testing.T) { time.Sleep(250 * time.Millisecond) } -func failCreateAccountWithPassword(control chan string, api *SignerAPI, password string, t *testing.T) { +func failCreateAccountWithPassword(ui *headlessUi, api *SignerAPI, password string, t *testing.T) { - control <- "Y" - control <- password - control <- "Y" - control <- password - control <- "Y" - control <- password + ui.approveCh <- "Y" + // We will be asked three times to provide a suitable password + ui.inputCh <- password + ui.inputCh <- password + ui.inputCh <- password - acc, err := api.New(context.Background()) + addr, err := api.New(context.Background()) if err == nil { t.Fatal("Should have returned an error") } - if acc.Address != (common.Address{}) { + if addr != (common.Address{}) { t.Fatal("Empty address should be returned") } } -func failCreateAccount(control chan string, api *SignerAPI, t *testing.T) { - control <- "N" - acc, err := api.New(context.Background()) +func failCreateAccount(ui *headlessUi, api *SignerAPI, t *testing.T) { + ui.approveCh <- "N" + addr, err := api.New(context.Background()) if err != ErrRequestDenied { t.Fatal(err) } - if acc.Address != (common.Address{}) { + if addr != (common.Address{}) { t.Fatal("Empty address should be returned") } } -func list(control chan string, api *SignerAPI, t *testing.T) []common.Address { - control <- "A" - list, err := api.List(context.Background()) - if err != nil { - t.Fatal(err) - } - return list +func list(ui *headlessUi, api *SignerAPI, t *testing.T) ([]common.Address, error) { + ui.approveCh <- "A" + return api.List(context.Background()) + } func TestNewAcc(t *testing.T) { api, control := setup(t) verifyNum := func(num int) { - if list := list(control, api, t); len(list) != num { + list, err := list(control, api, t) + if err != nil { + t.Errorf("Unexpected error %v", err) + } + if len(list) != num { t.Errorf("Expected %d accounts, got %d", num, len(list)) } } @@ -215,18 +193,16 @@ func TestNewAcc(t *testing.T) { failCreateAccount(control, api, t) createAccount(control, api, t) failCreateAccount(control, api, t) - verifyNum(4) // Fail to create this, due to bad password failCreateAccountWithPassword(control, api, "short", t) failCreateAccountWithPassword(control, api, "longerbutbad\rfoo", t) - verifyNum(4) // Testing listing: // Listing one Account - control <- "1" + control.approveCh <- "1" list, err := api.List(context.Background()) if err != nil { t.Fatal(err) @@ -235,7 +211,7 @@ func TestNewAcc(t *testing.T) { t.Fatalf("List should only show one Account") } // Listing denied - control <- "Nope" + control.approveCh <- "Nope" list, err = api.List(context.Background()) if len(list) != 0 { t.Fatalf("List should be empty") @@ -245,45 +221,6 @@ func TestNewAcc(t *testing.T) { } } -func TestSignData(t *testing.T) { - api, control := setup(t) - //Create two accounts - createAccount(control, api, t) - createAccount(control, api, t) - control <- "1" - list, err := api.List(context.Background()) - if err != nil { - t.Fatal(err) - } - a := common.NewMixedcaseAddress(list[0]) - - control <- "Y" - control <- "wrongpassword" - h, err := api.Sign(context.Background(), a, []byte("EHLO world")) - if h != nil { - t.Errorf("Expected nil-data, got %x", h) - } - if err != keystore.ErrDecrypt { - t.Errorf("Expected ErrLocked! %v", err) - } - control <- "No way" - h, err = api.Sign(context.Background(), a, []byte("EHLO world")) - if h != nil { - t.Errorf("Expected nil-data, got %x", h) - } - if err != ErrRequestDenied { - t.Errorf("Expected ErrRequestDenied! %v", err) - } - control <- "Y" - control <- "a_long_password" - h, err = api.Sign(context.Background(), a, []byte("EHLO world")) - if err != nil { - t.Fatal(err) - } - if h == nil || len(h) != 65 { - t.Errorf("Expected 65 byte signature (got %d bytes)", len(h)) - } -} func mkTestTx(from common.MixedcaseAddress) SendTxArgs { to := common.NewMixedcaseAddress(common.HexToAddress("0x1337")) gas := hexutil.Uint64(21000) @@ -311,7 +248,7 @@ func TestSignTx(t *testing.T) { api, control := setup(t) createAccount(control, api, t) - control <- "A" + control.approveCh <- "A" list, err = api.List(context.Background()) if err != nil { t.Fatal(err) @@ -321,8 +258,8 @@ func TestSignTx(t *testing.T) { methodSig := "test(uint)" tx := mkTestTx(a) - control <- "Y" - control <- "wrongpassword" + control.approveCh <- "Y" + control.inputCh <- "wrongpassword" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if res != nil { t.Errorf("Expected nil-response, got %v", res) @@ -330,7 +267,7 @@ func TestSignTx(t *testing.T) { if err != keystore.ErrDecrypt { t.Errorf("Expected ErrLocked! %v", err) } - control <- "No way" + control.approveCh <- "No way" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if res != nil { t.Errorf("Expected nil-response, got %v", res) @@ -338,8 +275,9 @@ func TestSignTx(t *testing.T) { if err != ErrRequestDenied { t.Errorf("Expected ErrRequestDenied! %v", err) } - control <- "Y" - control <- "a_long_password" + // Sign with correct password + control.approveCh <- "Y" + control.inputCh <- "a_long_password" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -352,8 +290,8 @@ func TestSignTx(t *testing.T) { if parsedTx.Value().Cmp(tx.Value.ToInt()) != 0 { t.Errorf("Expected value to be unchanged, expected %v got %v", tx.Value, parsedTx.Value()) } - control <- "Y" - control <- "a_long_password" + control.approveCh <- "Y" + control.inputCh <- "a_long_password" res2, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -364,8 +302,8 @@ func TestSignTx(t *testing.T) { } //The tx is modified by the UI - control <- "M" - control <- "a_long_password" + control.approveCh <- "M" + control.inputCh <- "a_long_password" res2, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -383,31 +321,3 @@ func TestSignTx(t *testing.T) { } } - -/* -func TestAsyncronousResponses(t *testing.T){ - - //Set up one account - api, control := setup(t) - createAccount(control, api, t) - - // Two transactions, the second one with larger value than the first - tx1 := mkTestTx() - newVal := big.NewInt(0).Add((*big.Int) (tx1.Value), big.NewInt(1)) - tx2 := mkTestTx() - tx2.Value = (*hexutil.Big)(newVal) - - control <- "W" //wait - control <- "Y" // - control <- "a_long_password" - control <- "Y" // - control <- "a_long_password" - - var err error - - h1, err := api.SignTransaction(context.Background(), common.HexToAddress("1111"), tx1, nil) - h2, err := api.SignTransaction(context.Background(), common.HexToAddress("2222"), tx2, nil) - - - } -*/ diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/auditlog.go b/vendor/github.com/ethereum/go-ethereum/signer/core/auditlog.go index 1f9c9091..9593ad7a 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/auditlog.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/auditlog.go @@ -19,9 +19,6 @@ package core import ( "context" - "encoding/json" - - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/internal/ethapi" @@ -41,7 +38,7 @@ func (l *AuditLogger) List(ctx context.Context) ([]common.Address, error) { return res, e } -func (l *AuditLogger) New(ctx context.Context) (accounts.Account, error) { +func (l *AuditLogger) New(ctx context.Context) (common.Address, error) { return l.api.New(ctx) } @@ -63,31 +60,37 @@ func (l *AuditLogger) SignTransaction(ctx context.Context, args SendTxArgs, meth return res, e } -func (l *AuditLogger) Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) { - l.log.Info("Sign", "type", "request", "metadata", MetadataFromContext(ctx).String(), - "addr", addr.String(), "data", common.Bytes2Hex(data)) - b, e := l.api.Sign(ctx, addr, data) - l.log.Info("Sign", "type", "response", "data", common.Bytes2Hex(b), "error", e) +func (l *AuditLogger) SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) { + l.log.Info("SignData", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "addr", addr.String(), "data", data, "content-type", contentType) + b, e := l.api.SignData(ctx, contentType, addr, data) + l.log.Info("SignData", "type", "response", "data", common.Bytes2Hex(b), "error", e) return b, e } -func (l *AuditLogger) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { - l.log.Info("Export", "type", "request", "metadata", MetadataFromContext(ctx).String(), - "addr", addr.Hex()) - j, e := l.api.Export(ctx, addr) - // In this case, we don't actually log the json-response, which may be extra sensitive - l.log.Info("Export", "type", "response", "json response size", len(j), "error", e) - return j, e +func (l *AuditLogger) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data TypedData) (hexutil.Bytes, error) { + l.log.Info("SignTypedData", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "addr", addr.String(), "data", data) + b, e := l.api.SignTypedData(ctx, addr, data) + l.log.Info("SignTypedData", "type", "response", "data", common.Bytes2Hex(b), "error", e) + return b, e } -//func (l *AuditLogger) Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) { -// // Don't actually log the json contents -// l.log.Info("Import", "type", "request", "metadata", MetadataFromContext(ctx).String(), -// "keyJSON size", len(keyJSON)) -// a, e := l.api.Import(ctx, keyJSON) -// l.log.Info("Import", "type", "response", "addr", a.String(), "error", e) -// return a, e -//} +func (l *AuditLogger) EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) { + l.log.Info("EcRecover", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "data", common.Bytes2Hex(data), "sig", common.Bytes2Hex(sig)) + b, e := l.api.EcRecover(ctx, data, sig) + l.log.Info("EcRecover", "type", "response", "address", b.String(), "error", e) + return b, e +} + +func (l *AuditLogger) Version(ctx context.Context) (string, error) { + l.log.Info("Version", "type", "request", "metadata", MetadataFromContext(ctx).String()) + data, err := l.api.Version(ctx) + l.log.Info("Version", "type", "response", "data", data, "error", err) + return data, err + +} func NewAuditLogger(path string, api ExternalAPI) (*AuditLogger, error) { l := log.New("api", "signer") diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/cliui.go b/vendor/github.com/ethereum/go-ethereum/signer/core/cliui.go index 940f1f43..cf710144 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/cliui.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/cliui.go @@ -18,13 +18,12 @@ package core import ( "bufio" + "encoding/json" "fmt" "os" "strings" - "sync" - "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" @@ -40,6 +39,10 @@ func NewCommandlineUI() *CommandlineUI { return &CommandlineUI{in: bufio.NewReader(os.Stdin)} } +func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) { + // noop +} + // readString reads a single line from stdin, trimming if from spaces, enforcing // non-emptyness. func (ui *CommandlineUI) readString() string { @@ -84,9 +87,10 @@ func (ui *CommandlineUI) readPasswordText(inputstring string) string { } func (ui *CommandlineUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { - fmt.Println(info.Title) - fmt.Println(info.Prompt) + + fmt.Printf("## %s\n\n%s\n", info.Title, info.Prompt) if info.IsPassword { + fmt.Printf("> ") text, err := terminal.ReadPassword(int(os.Stdin.Fd())) if err != nil { log.Error("Failed to read password", "err", err) @@ -153,9 +157,9 @@ func (ui *CommandlineUI) ApproveTx(request *SignTxRequest) (SignTxResponse, erro showMetadata(request.Meta) fmt.Printf("-------------------------------------------\n") if !ui.confirm() { - return SignTxResponse{request.Transaction, false, ""}, nil + return SignTxResponse{request.Transaction, false}, nil } - return SignTxResponse{request.Transaction, true, ui.readPassword()}, nil + return SignTxResponse{request.Transaction, true}, nil } // ApproveSignData prompt the user for confirmation to request to sign data @@ -165,46 +169,19 @@ func (ui *CommandlineUI) ApproveSignData(request *SignDataRequest) (SignDataResp fmt.Printf("-------- Sign data request--------------\n") fmt.Printf("Account: %s\n", request.Address.String()) - fmt.Printf("message: \n%q\n", request.Message) - fmt.Printf("raw data: \n%v\n", request.Rawdata) + fmt.Printf("message:\n") + for _, nvt := range request.Message { + fmt.Printf("%v\n", nvt.Pprint(1)) + } + //fmt.Printf("message: \n%v\n", request.Message) + fmt.Printf("raw data: \n%q\n", request.Rawdata) fmt.Printf("message hash: %v\n", request.Hash) fmt.Printf("-------------------------------------------\n") showMetadata(request.Meta) if !ui.confirm() { - return SignDataResponse{false, ""}, nil + return SignDataResponse{false}, nil } - return SignDataResponse{true, ui.readPassword()}, nil -} - -// ApproveExport prompt the user for confirmation to export encrypted Account json -func (ui *CommandlineUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - ui.mu.Lock() - defer ui.mu.Unlock() - - fmt.Printf("-------- Export Account request--------------\n") - fmt.Printf("A request has been made to export the (encrypted) keyfile\n") - fmt.Printf("Approving this operation means that the caller obtains the (encrypted) contents\n") - fmt.Printf("\n") - fmt.Printf("Account: %x\n", request.Address) - //fmt.Printf("keyfile: \n%v\n", request.file) - fmt.Printf("-------------------------------------------\n") - showMetadata(request.Meta) - return ExportResponse{ui.confirm()}, nil -} - -// ApproveImport prompt the user for confirmation to import Account json -func (ui *CommandlineUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - ui.mu.Lock() - defer ui.mu.Unlock() - - fmt.Printf("-------- Import Account request--------------\n") - fmt.Printf("A request has been made to import an encrypted keyfile\n") - fmt.Printf("-------------------------------------------\n") - showMetadata(request.Meta) - if !ui.confirm() { - return ImportResponse{false, "", ""}, nil - } - return ImportResponse{true, ui.readPasswordText("Old password"), ui.readPasswordText("New password")}, nil + return SignDataResponse{true}, nil } // ApproveListing prompt the user for confirmation to list accounts @@ -220,7 +197,6 @@ func (ui *CommandlineUI) ApproveListing(request *ListRequest) (ListResponse, err for _, account := range request.Accounts { fmt.Printf(" [x] %v\n", account.Address.Hex()) fmt.Printf(" URL: %v\n", account.URL) - fmt.Printf(" Type: %v\n", account.Typ) } fmt.Printf("-------------------------------------------\n") showMetadata(request.Meta) @@ -242,26 +218,29 @@ func (ui *CommandlineUI) ApproveNewAccount(request *NewAccountRequest) (NewAccou fmt.Printf("and the address is returned to the external caller\n\n") showMetadata(request.Meta) if !ui.confirm() { - return NewAccountResponse{false, ""}, nil + return NewAccountResponse{false}, nil } - return NewAccountResponse{true, ui.readPassword()}, nil + return NewAccountResponse{true}, nil } // ShowError displays error message to user func (ui *CommandlineUI) ShowError(message string) { - fmt.Printf("-------- Error message from Clef-----------\n") - fmt.Println(message) + fmt.Printf("## Error \n%s\n", message) fmt.Printf("-------------------------------------------\n") } // ShowInfo displays info message to user func (ui *CommandlineUI) ShowInfo(message string) { - fmt.Printf("Info: %v\n", message) + fmt.Printf("## Info \n%s\n", message) } func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { fmt.Printf("Transaction signed:\n ") - spew.Dump(tx.Tx) + if jsn, err := json.MarshalIndent(tx.Tx, " ", " "); err != nil { + fmt.Printf("WARN: marshalling error %v\n", err) + } else { + fmt.Println(string(jsn)) + } } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data.go b/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data.go new file mode 100644 index 00000000..475a8837 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data.go @@ -0,0 +1,917 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . +// +package core + +import ( + "bytes" + "context" + "errors" + "fmt" + "math/big" + "mime" + "regexp" + "sort" + "strconv" + "strings" + "unicode" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/clique" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" +) + +type SigFormat struct { + Mime string + ByteVersion byte +} + +var ( + TextValidator = SigFormat{ + accounts.MimetypeTextWithValidator, + 0x00, + } + DataTyped = SigFormat{ + accounts.MimetypeTypedData, + 0x01, + } + ApplicationClique = SigFormat{ + accounts.MimetypeClique, + 0x02, + } + TextPlain = SigFormat{ + accounts.MimetypeTextPlain, + 0x45, + } +) + +type ValidatorData struct { + Address common.Address + Message hexutil.Bytes +} + +type TypedData struct { + Types Types `json:"types"` + PrimaryType string `json:"primaryType"` + Domain TypedDataDomain `json:"domain"` + Message TypedDataMessage `json:"message"` +} + +type Type struct { + Name string `json:"name"` + Type string `json:"type"` +} + +func (t *Type) isArray() bool { + return strings.HasSuffix(t.Type, "[]") +} + +// typeName returns the canonical name of the type. If the type is 'Person[]', then +// this method returns 'Person' +func (t *Type) typeName() string { + if strings.HasSuffix(t.Type, "[]") { + return strings.TrimSuffix(t.Type, "[]") + } + return t.Type +} + +func (t *Type) isReferenceType() bool { + // Reference types must have a leading uppercase characer + return unicode.IsUpper([]rune(t.Type)[0]) +} + +type Types map[string][]Type + +type TypePriority struct { + Type string + Value uint +} + +type TypedDataMessage = map[string]interface{} + +type TypedDataDomain struct { + Name string `json:"name"` + Version string `json:"version"` + ChainId *big.Int `json:"chainId"` + VerifyingContract string `json:"verifyingContract"` + Salt string `json:"salt"` +} + +var typedDataReferenceTypeRegexp = regexp.MustCompile(`^[A-Z](\w*)(\[\])?$`) + +// sign receives a request and produces a signature + +// Note, the produced signature conforms to the secp256k1 curve R, S and V values, +// where the V value will be 27 or 28 for legacy reasons, if legacyV==true. +func (api *SignerAPI) sign(addr common.MixedcaseAddress, req *SignDataRequest, legacyV bool) (hexutil.Bytes, error) { + + // We make the request prior to looking up if we actually have the account, to prevent + // account-enumeration via the API + res, err := api.UI.ApproveSignData(req) + if err != nil { + return nil, err + } + if !res.Approved { + return nil, ErrRequestDenied + } + // Look up the wallet containing the requested signer + account := accounts.Account{Address: addr.Address()} + wallet, err := api.am.Find(account) + if err != nil { + return nil, err + } + pw, err := api.lookupOrQueryPassword(account.Address, + "Password for signing", + fmt.Sprintf("Please enter password for signing data with account %s", account.Address.Hex())) + if err != nil { + return nil, err + } + // Sign the data with the wallet + signature, err := wallet.SignDataWithPassphrase(account, pw, req.ContentType, req.Rawdata) + if err != nil { + return nil, err + } + if legacyV { + signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + } + return signature, nil +} + +// SignData signs the hash of the provided data, but does so differently +// depending on the content-type specified. +// +// Different types of validation occur. +func (api *SignerAPI) SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) { + var req, transformV, err = api.determineSignatureFormat(ctx, contentType, addr, data) + if err != nil { + return nil, err + } + + signature, err := api.sign(addr, req, transformV) + if err != nil { + api.UI.ShowError(err.Error()) + return nil, err + } + return signature, nil +} + +// determineSignatureFormat determines which signature method should be used based upon the mime type +// In the cases where it matters ensure that the charset is handled. The charset +// resides in the 'params' returned as the second returnvalue from mime.ParseMediaType +// charset, ok := params["charset"] +// As it is now, we accept any charset and just treat it as 'raw'. +// This method returns the mimetype for signing along with the request +func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (*SignDataRequest, bool, error) { + var ( + req *SignDataRequest + useEthereumV = true // Default to use V = 27 or 28, the legacy Ethereum format + ) + mediaType, _, err := mime.ParseMediaType(contentType) + if err != nil { + return nil, useEthereumV, err + } + + switch mediaType { + case TextValidator.Mime: + // Data with an intended validator + validatorData, err := UnmarshalValidatorData(data) + if err != nil { + return nil, useEthereumV, err + } + sighash, msg := SignTextValidator(validatorData) + message := []*NameValueType{ + { + Name: "message", + Typ: "text", + Value: msg, + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Message: message, Hash: sighash} + case ApplicationClique.Mime: + // Clique is the Ethereum PoA standard + stringData, ok := data.(string) + if !ok { + return nil, useEthereumV, fmt.Errorf("input for %v must be an hex-encoded string", ApplicationClique.Mime) + } + cliqueData, err := hexutil.Decode(stringData) + if err != nil { + return nil, useEthereumV, err + } + header := &types.Header{} + if err := rlp.DecodeBytes(cliqueData, header); err != nil { + return nil, useEthereumV, err + } + // The incoming clique header is already truncated, sent to us with a extradata already shortened + if len(header.Extra) < 65 { + // Need to add it back, to get a suitable length for hashing + newExtra := make([]byte, len(header.Extra)+65) + copy(newExtra, header.Extra) + header.Extra = newExtra + } + // Get back the rlp data, encoded by us + sighash, cliqueRlp, err := cliqueHeaderHashAndRlp(header) + if err != nil { + return nil, useEthereumV, err + } + message := []*NameValueType{ + { + Name: "Clique header", + Typ: "clique", + Value: fmt.Sprintf("clique header %d [0x%x]", header.Number, header.Hash()), + }, + } + // Clique uses V on the form 0 or 1 + useEthereumV = false + req = &SignDataRequest{ContentType: mediaType, Rawdata: cliqueRlp, Message: message, Hash: sighash} + default: // also case TextPlain.Mime: + // Calculates an Ethereum ECDSA signature for: + // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") + // We expect it to be a string + if stringData, ok := data.(string); !ok { + return nil, useEthereumV, fmt.Errorf("input for text/plain must be an hex-encoded string") + } else { + if textData, err := hexutil.Decode(stringData); err != nil { + return nil, useEthereumV, err + } else { + sighash, msg := accounts.TextAndHash(textData) + message := []*NameValueType{ + { + Name: "message", + Typ: accounts.MimetypeTextPlain, + Value: msg, + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Message: message, Hash: sighash} + } + } + } + req.Address = addr + req.Meta = MetadataFromContext(ctx) + return req, useEthereumV, nil + +} + +// SignTextWithValidator signs the given message which can be further recovered +// with the given validator. +// hash = keccak256("\x19\x00"${address}${data}). +func SignTextValidator(validatorData ValidatorData) (hexutil.Bytes, string) { + msg := fmt.Sprintf("\x19\x00%s%s", string(validatorData.Address.Bytes()), string(validatorData.Message)) + fmt.Printf("SignTextValidator:%s\n", msg) + return crypto.Keccak256([]byte(msg)), msg +} + +// cliqueHeaderHashAndRlp returns the hash which is used as input for the proof-of-authority +// signing. It is the hash of the entire header apart from the 65 byte signature +// contained at the end of the extra data. +// +// The method requires the extra data to be at least 65 bytes -- the original implementation +// in clique.go panics if this is the case, thus it's been reimplemented here to avoid the panic +// and simply return an error instead +func cliqueHeaderHashAndRlp(header *types.Header) (hash, rlp []byte, err error) { + if len(header.Extra) < 65 { + err = fmt.Errorf("clique header extradata too short, %d < 65", len(header.Extra)) + return + } + rlp = clique.CliqueRLP(header) + hash = clique.SealHash(header).Bytes() + return hash, rlp, err +} + +// SignTypedData signs EIP-712 conformant typed data +// hash = keccak256("\x19${byteVersion}${domainSeparator}${hashStruct(message)}") +func (api *SignerAPI) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, typedData TypedData) (hexutil.Bytes, error) { + domainSeparator, err := typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) + if err != nil { + return nil, err + } + typedDataHash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) + if err != nil { + return nil, err + } + rawData := []byte(fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash))) + sighash := crypto.Keccak256(rawData) + message := typedData.Format() + req := &SignDataRequest{ContentType: DataTyped.Mime, Rawdata: rawData, Message: message, Hash: sighash} + signature, err := api.sign(addr, req, true) + if err != nil { + api.UI.ShowError(err.Error()) + return nil, err + } + return signature, nil +} + +// HashStruct generates a keccak256 hash of the encoding of the provided data +func (typedData *TypedData) HashStruct(primaryType string, data TypedDataMessage) (hexutil.Bytes, error) { + encodedData, err := typedData.EncodeData(primaryType, data, 1) + if err != nil { + return nil, err + } + return crypto.Keccak256(encodedData), nil +} + +// Dependencies returns an array of custom types ordered by their hierarchical reference tree +func (typedData *TypedData) Dependencies(primaryType string, found []string) []string { + includes := func(arr []string, str string) bool { + for _, obj := range arr { + if obj == str { + return true + } + } + return false + } + + if includes(found, primaryType) { + return found + } + if typedData.Types[primaryType] == nil { + return found + } + found = append(found, primaryType) + for _, field := range typedData.Types[primaryType] { + for _, dep := range typedData.Dependencies(field.Type, found) { + if !includes(found, dep) { + found = append(found, dep) + } + } + } + return found +} + +// EncodeType generates the following encoding: +// `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"` +// +// each member is written as `type ‖ " " ‖ name` encodings cascade down and are sorted by name +func (typedData *TypedData) EncodeType(primaryType string) hexutil.Bytes { + // Get dependencies primary first, then alphabetical + deps := typedData.Dependencies(primaryType, []string{}) + slicedDeps := deps[1:] + sort.Strings(slicedDeps) + deps = append([]string{primaryType}, slicedDeps...) + + // Format as a string with fields + var buffer bytes.Buffer + for _, dep := range deps { + buffer.WriteString(dep) + buffer.WriteString("(") + for _, obj := range typedData.Types[dep] { + buffer.WriteString(obj.Type) + buffer.WriteString(" ") + buffer.WriteString(obj.Name) + buffer.WriteString(",") + } + buffer.Truncate(buffer.Len() - 1) + buffer.WriteString(")") + } + return buffer.Bytes() +} + +// TypeHash creates the keccak256 hash of the data +func (typedData *TypedData) TypeHash(primaryType string) hexutil.Bytes { + return crypto.Keccak256(typedData.EncodeType(primaryType)) +} + +// EncodeData generates the following encoding: +// `enc(value₁) ‖ enc(value₂) ‖ … ‖ enc(valueₙ)` +// +// each encoded member is 32-byte long +func (typedData *TypedData) EncodeData(primaryType string, data map[string]interface{}, depth int) (hexutil.Bytes, error) { + if err := typedData.validate(); err != nil { + return nil, err + } + + buffer := bytes.Buffer{} + + // Verify extra data + if len(typedData.Types[primaryType]) < len(data) { + return nil, errors.New("there is extra data provided in the message") + } + + // Add typehash + buffer.Write(typedData.TypeHash(primaryType)) + + // Add field contents. Structs and arrays have special handlers. + for _, field := range typedData.Types[primaryType] { + encType := field.Type + encValue := data[field.Name] + if encType[len(encType)-1:] == "]" { + arrayValue, ok := encValue.([]interface{}) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + + arrayBuffer := bytes.Buffer{} + parsedType := strings.Split(encType, "[")[0] + for _, item := range arrayValue { + if typedData.Types[parsedType] != nil { + mapValue, ok := item.(map[string]interface{}) + if !ok { + return nil, dataMismatchError(parsedType, item) + } + encodedData, err := typedData.EncodeData(parsedType, mapValue, depth+1) + if err != nil { + return nil, err + } + arrayBuffer.Write(encodedData) + } else { + bytesValue, err := typedData.EncodePrimitiveValue(parsedType, item, depth) + if err != nil { + return nil, err + } + arrayBuffer.Write(bytesValue) + } + } + + buffer.Write(crypto.Keccak256(arrayBuffer.Bytes())) + } else if typedData.Types[field.Type] != nil { + mapValue, ok := encValue.(map[string]interface{}) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + encodedData, err := typedData.EncodeData(field.Type, mapValue, depth+1) + if err != nil { + return nil, err + } + buffer.Write(crypto.Keccak256(encodedData)) + } else { + byteValue, err := typedData.EncodePrimitiveValue(encType, encValue, depth) + if err != nil { + return nil, err + } + buffer.Write(byteValue) + } + } + return buffer.Bytes(), nil +} + +// EncodePrimitiveValue deals with the primitive values found +// while searching through the typed data +func (typedData *TypedData) EncodePrimitiveValue(encType string, encValue interface{}, depth int) ([]byte, error) { + + switch encType { + case "address": + stringValue, ok := encValue.(string) + if !ok || !common.IsHexAddress(stringValue) { + return nil, dataMismatchError(encType, encValue) + } + retval := make([]byte, 32) + copy(retval[12:], common.HexToAddress(stringValue).Bytes()) + return retval, nil + case "bool": + boolValue, ok := encValue.(bool) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + if boolValue { + return math.PaddedBigBytes(common.Big1, 32), nil + } + return math.PaddedBigBytes(common.Big0, 32), nil + case "string": + strVal, ok := encValue.(string) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + return crypto.Keccak256([]byte(strVal)), nil + case "bytes": + bytesValue, ok := encValue.([]byte) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + return crypto.Keccak256(bytesValue), nil + } + if strings.HasPrefix(encType, "bytes") { + lengthStr := strings.TrimPrefix(encType, "bytes") + length, err := strconv.Atoi(lengthStr) + if err != nil { + return nil, fmt.Errorf("invalid size on bytes: %v", lengthStr) + } + if length < 0 || length > 32 { + return nil, fmt.Errorf("invalid size on bytes: %d", length) + } + if byteValue, ok := encValue.(hexutil.Bytes); !ok { + return nil, dataMismatchError(encType, encValue) + } else { + return math.PaddedBigBytes(new(big.Int).SetBytes(byteValue), 32), nil + } + } + if strings.HasPrefix(encType, "int") || strings.HasPrefix(encType, "uint") { + length := 0 + if encType == "int" || encType == "uint" { + length = 256 + } else { + lengthStr := "" + if strings.HasPrefix(encType, "uint") { + lengthStr = strings.TrimPrefix(encType, "uint") + } else { + lengthStr = strings.TrimPrefix(encType, "int") + } + atoiSize, err := strconv.Atoi(lengthStr) + if err != nil { + return nil, fmt.Errorf("invalid size on integer: %v", lengthStr) + } + length = atoiSize + } + bigIntValue, ok := encValue.(*big.Int) + if bigIntValue.BitLen() > length { + return nil, fmt.Errorf("integer larger than '%v'", encType) + } + if !ok { + return nil, dataMismatchError(encType, encValue) + } + return abi.U256(bigIntValue), nil + } + return nil, fmt.Errorf("unrecognized type '%s'", encType) + +} + +// dataMismatchError generates an error for a mismatch between +// the provided type and data +func dataMismatchError(encType string, encValue interface{}) error { + return fmt.Errorf("provided data '%v' doesn't match type '%s'", encValue, encType) +} + +// EcRecover recovers the address associated with the given sig. +// Only compatible with `text/plain` +func (api *SignerAPI) EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) { + // Returns the address for the Account that was used to create the signature. + // + // Note, this function is compatible with eth_sign and personal_sign. As such it recovers + // the address of: + // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") + // addr = ecrecover(hash, signature) + // + // Note, the signature must conform to the secp256k1 curve R, S and V values, where + // the V value must be be 27 or 28 for legacy reasons. + // + // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_ecRecover + if len(sig) != 65 { + return common.Address{}, fmt.Errorf("signature must be 65 bytes long") + } + if sig[64] != 27 && sig[64] != 28 { + return common.Address{}, fmt.Errorf("invalid Ethereum signature (V is not 27 or 28)") + } + sig[64] -= 27 // Transform yellow paper V from 27/28 to 0/1 + hash := accounts.TextHash(data) + rpk, err := crypto.SigToPub(hash, sig) + if err != nil { + return common.Address{}, err + } + return crypto.PubkeyToAddress(*rpk), nil +} + +// UnmarshalValidatorData converts the bytes input to typed data +func UnmarshalValidatorData(data interface{}) (ValidatorData, error) { + raw, ok := data.(map[string]interface{}) + if !ok { + return ValidatorData{}, errors.New("validator input is not a map[string]interface{}") + } + addr, ok := raw["address"].(string) + if !ok { + return ValidatorData{}, errors.New("validator address is not sent as a string") + } + addrBytes, err := hexutil.Decode(addr) + if err != nil { + return ValidatorData{}, err + } + if !ok || len(addrBytes) == 0 { + return ValidatorData{}, errors.New("validator address is undefined") + } + + message, ok := raw["message"].(string) + if !ok { + return ValidatorData{}, errors.New("message is not sent as a string") + } + messageBytes, err := hexutil.Decode(message) + if err != nil { + return ValidatorData{}, err + } + if !ok || len(messageBytes) == 0 { + return ValidatorData{}, errors.New("message is undefined") + } + + return ValidatorData{ + Address: common.BytesToAddress(addrBytes), + Message: messageBytes, + }, nil +} + +// validate makes sure the types are sound +func (typedData *TypedData) validate() error { + if err := typedData.Types.validate(); err != nil { + return err + } + if err := typedData.Domain.validate(); err != nil { + return err + } + return nil +} + +// Map generates a map version of the typed data +func (typedData *TypedData) Map() map[string]interface{} { + dataMap := map[string]interface{}{ + "types": typedData.Types, + "domain": typedData.Domain.Map(), + "primaryType": typedData.PrimaryType, + "message": typedData.Message, + } + return dataMap +} + +// PrettyPrint generates a nice output to help the users +// of clef present data in their apps +func (typedData *TypedData) PrettyPrint() string { + output := bytes.Buffer{} + formatted := typedData.Format() + for _, item := range formatted { + output.WriteString(fmt.Sprintf("%v\n", item.Pprint(0))) + } + return output.String() +} + +// Format returns a representation of typedData, which can be easily displayed by a user-interface +// without in-depth knowledge about 712 rules +func (typedData *TypedData) Format() []*NameValueType { + var nvts []*NameValueType + nvts = append(nvts, &NameValueType{ + Name: "EIP712Domain", + Value: typedData.formatData("EIP712Domain", typedData.Domain.Map()), + Typ: "domain", + }) + nvts = append(nvts, &NameValueType{ + Name: typedData.PrimaryType, + Value: typedData.formatData(typedData.PrimaryType, typedData.Message), + Typ: "primary type", + }) + return nvts +} + +func (typedData *TypedData) formatData(primaryType string, data map[string]interface{}) []*NameValueType { + var output []*NameValueType + + // Add field contents. Structs and arrays have special handlers. + for _, field := range typedData.Types[primaryType] { + encName := field.Name + encValue := data[encName] + item := &NameValueType{ + Name: encName, + Typ: field.Type, + } + if field.isArray() { + arrayValue, _ := encValue.([]interface{}) + parsedType := field.typeName() + for _, v := range arrayValue { + if typedData.Types[parsedType] != nil { + mapValue, _ := v.(map[string]interface{}) + mapOutput := typedData.formatData(parsedType, mapValue) + item.Value = mapOutput + } else { + primitiveOutput := formatPrimitiveValue(field.Type, encValue) + item.Value = primitiveOutput + } + } + } else if typedData.Types[field.Type] != nil { + mapValue, _ := encValue.(map[string]interface{}) + mapOutput := typedData.formatData(field.Type, mapValue) + item.Value = mapOutput + } else { + primitiveOutput := formatPrimitiveValue(field.Type, encValue) + item.Value = primitiveOutput + } + output = append(output, item) + } + return output +} + +func formatPrimitiveValue(encType string, encValue interface{}) string { + switch encType { + case "address": + stringValue, _ := encValue.(string) + return common.HexToAddress(stringValue).String() + case "bool": + boolValue, _ := encValue.(bool) + return fmt.Sprintf("%t", boolValue) + case "bytes", "string": + return fmt.Sprintf("%s", encValue) + } + if strings.HasPrefix(encType, "bytes") { + return fmt.Sprintf("%s", encValue) + } else if strings.HasPrefix(encType, "uint") || strings.HasPrefix(encType, "int") { + bigIntValue, _ := encValue.(*big.Int) + return fmt.Sprintf("%d (0x%x)", bigIntValue, bigIntValue) + } + return "NA" +} + +// NameValueType is a very simple struct with Name, Value and Type. It's meant for simple +// json structures used to communicate signing-info about typed data with the UI +type NameValueType struct { + Name string `json:"name"` + Value interface{} `json:"value"` + Typ string `json:"type"` +} + +// Pprint returns a pretty-printed version of nvt +func (nvt *NameValueType) Pprint(depth int) string { + output := bytes.Buffer{} + output.WriteString(strings.Repeat("\u00a0", depth*2)) + output.WriteString(fmt.Sprintf("%s [%s]: ", nvt.Name, nvt.Typ)) + if nvts, ok := nvt.Value.([]*NameValueType); ok { + output.WriteString("\n") + for _, next := range nvts { + sublevel := next.Pprint(depth + 1) + output.WriteString(sublevel) + } + } else { + output.WriteString(fmt.Sprintf("%q\n", nvt.Value)) + } + return output.String() +} + +// Validate checks if the types object is conformant to the specs +func (t Types) validate() error { + for typeKey, typeArr := range t { + for _, typeObj := range typeArr { + if typeKey == typeObj.Type { + return fmt.Errorf("type '%s' cannot reference itself", typeObj.Type) + } + if typeObj.isReferenceType() { + if _, exist := t[typeObj.Type]; !exist { + return fmt.Errorf("reference type '%s' is undefined", typeObj.Type) + } + if !typedDataReferenceTypeRegexp.MatchString(typeObj.Type) { + return fmt.Errorf("unknown reference type '%s", typeObj.Type) + } + } else if !isPrimitiveTypeValid(typeObj.Type) { + return fmt.Errorf("unknown type '%s'", typeObj.Type) + } + } + } + return nil +} + +// Checks if the primitive value is valid +func isPrimitiveTypeValid(primitiveType string) bool { + if primitiveType == "address" || + primitiveType == "address[]" || + primitiveType == "bool" || + primitiveType == "bool[]" || + primitiveType == "string" || + primitiveType == "string[]" { + return true + } + if primitiveType == "bytes" || + primitiveType == "bytes[]" || + primitiveType == "bytes1" || + primitiveType == "bytes1[]" || + primitiveType == "bytes2" || + primitiveType == "bytes2[]" || + primitiveType == "bytes3" || + primitiveType == "bytes3[]" || + primitiveType == "bytes4" || + primitiveType == "bytes4[]" || + primitiveType == "bytes5" || + primitiveType == "bytes5[]" || + primitiveType == "bytes6" || + primitiveType == "bytes6[]" || + primitiveType == "bytes7" || + primitiveType == "bytes7[]" || + primitiveType == "bytes8" || + primitiveType == "bytes8[]" || + primitiveType == "bytes9" || + primitiveType == "bytes9[]" || + primitiveType == "bytes10" || + primitiveType == "bytes10[]" || + primitiveType == "bytes11" || + primitiveType == "bytes11[]" || + primitiveType == "bytes12" || + primitiveType == "bytes12[]" || + primitiveType == "bytes13" || + primitiveType == "bytes13[]" || + primitiveType == "bytes14" || + primitiveType == "bytes14[]" || + primitiveType == "bytes15" || + primitiveType == "bytes15[]" || + primitiveType == "bytes16" || + primitiveType == "bytes16[]" || + primitiveType == "bytes17" || + primitiveType == "bytes17[]" || + primitiveType == "bytes18" || + primitiveType == "bytes18[]" || + primitiveType == "bytes19" || + primitiveType == "bytes19[]" || + primitiveType == "bytes20" || + primitiveType == "bytes20[]" || + primitiveType == "bytes21" || + primitiveType == "bytes21[]" || + primitiveType == "bytes22" || + primitiveType == "bytes22[]" || + primitiveType == "bytes23" || + primitiveType == "bytes23[]" || + primitiveType == "bytes24" || + primitiveType == "bytes24[]" || + primitiveType == "bytes25" || + primitiveType == "bytes25[]" || + primitiveType == "bytes26" || + primitiveType == "bytes26[]" || + primitiveType == "bytes27" || + primitiveType == "bytes27[]" || + primitiveType == "bytes28" || + primitiveType == "bytes28[]" || + primitiveType == "bytes29" || + primitiveType == "bytes29[]" || + primitiveType == "bytes30" || + primitiveType == "bytes30[]" || + primitiveType == "bytes31" || + primitiveType == "bytes31[]" { + return true + } + if primitiveType == "int" || + primitiveType == "int[]" || + primitiveType == "int8" || + primitiveType == "int8[]" || + primitiveType == "int16" || + primitiveType == "int16[]" || + primitiveType == "int32" || + primitiveType == "int32[]" || + primitiveType == "int64" || + primitiveType == "int64[]" || + primitiveType == "int128" || + primitiveType == "int128[]" || + primitiveType == "int256" || + primitiveType == "int256[]" { + return true + } + if primitiveType == "uint" || + primitiveType == "uint[]" || + primitiveType == "uint8" || + primitiveType == "uint8[]" || + primitiveType == "uint16" || + primitiveType == "uint16[]" || + primitiveType == "uint32" || + primitiveType == "uint32[]" || + primitiveType == "uint64" || + primitiveType == "uint64[]" || + primitiveType == "uint128" || + primitiveType == "uint128[]" || + primitiveType == "uint256" || + primitiveType == "uint256[]" { + return true + } + return false +} + +// validate checks if the given domain is valid, i.e. contains at least +// the minimum viable keys and values +func (domain *TypedDataDomain) validate() error { + if domain.ChainId == big.NewInt(0) { + return errors.New("chainId must be specified according to EIP-155") + } + + if len(domain.Name) == 0 && len(domain.Version) == 0 && len(domain.VerifyingContract) == 0 && len(domain.Salt) == 0 { + return errors.New("domain is undefined") + } + + return nil +} + +// Map is a helper function to generate a map version of the domain +func (domain *TypedDataDomain) Map() map[string]interface{} { + dataMap := map[string]interface{}{ + "chainId": domain.ChainId, + } + + if len(domain.Name) > 0 { + dataMap["name"] = domain.Name + } + + if len(domain.Version) > 0 { + dataMap["version"] = domain.Version + } + + if len(domain.VerifyingContract) > 0 { + dataMap["verifyingContract"] = domain.VerifyingContract + } + + if len(domain.Salt) > 0 { + dataMap["salt"] = domain.Salt + } + return dataMap +} diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data_test.go b/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data_test.go new file mode 100644 index 00000000..76e1b72e --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/signed_data_test.go @@ -0,0 +1,774 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . +// +package core + +import ( + "context" + "encoding/json" + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var typesStandard = Types{ + "EIP712Domain": { + { + Name: "name", + Type: "string", + }, + { + Name: "version", + Type: "string", + }, + { + Name: "chainId", + Type: "uint256", + }, + { + Name: "verifyingContract", + Type: "address", + }, + }, + "Person": { + { + Name: "name", + Type: "string", + }, + { + Name: "wallet", + Type: "address", + }, + }, + "Mail": { + { + Name: "from", + Type: "Person", + }, + { + Name: "to", + Type: "Person", + }, + { + Name: "contents", + Type: "string", + }, + }, +} + +var jsonTypedData = ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "test", + "type": "uint8" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "test": 3, + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } +` + +const primaryType = "Mail" + +var domainStandard = TypedDataDomain{ + "Ether Mail", + "1", + big.NewInt(1), + "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", + "", +} + +var messageStandard = map[string]interface{}{ + "from": map[string]interface{}{ + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", + }, + "to": map[string]interface{}{ + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB", + }, + "contents": "Hello, Bob!", +} + +var typedData = TypedData{ + Types: typesStandard, + PrimaryType: primaryType, + Domain: domainStandard, + Message: messageStandard, +} + +func TestSignData(t *testing.T) { + api, control := setup(t) + //Create two accounts + createAccount(control, api, t) + createAccount(control, api, t) + control.approveCh <- "1" + list, err := api.List(context.Background()) + if err != nil { + t.Fatal(err) + } + a := common.NewMixedcaseAddress(list[0]) + + control.approveCh <- "Y" + control.inputCh <- "wrongpassword" + signature, err := api.SignData(context.Background(), TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if signature != nil { + t.Errorf("Expected nil-data, got %x", signature) + } + if err != keystore.ErrDecrypt { + t.Errorf("Expected ErrLocked! '%v'", err) + } + control.approveCh <- "No way" + signature, err = api.SignData(context.Background(), TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if signature != nil { + t.Errorf("Expected nil-data, got %x", signature) + } + if err != ErrRequestDenied { + t.Errorf("Expected ErrRequestDenied! '%v'", err) + } + // text/plain + control.approveCh <- "Y" + control.inputCh <- "a_long_password" + signature, err = api.SignData(context.Background(), TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if err != nil { + t.Fatal(err) + } + if signature == nil || len(signature) != 65 { + t.Errorf("Expected 65 byte signature (got %d bytes)", len(signature)) + } + // data/typed + control.approveCh <- "Y" + control.inputCh <- "a_long_password" + signature, err = api.SignTypedData(context.Background(), a, typedData) + if err != nil { + t.Fatal(err) + } + if signature == nil || len(signature) != 65 { + t.Errorf("Expected 65 byte signature (got %d bytes)", len(signature)) + } +} + +func TestHashStruct(t *testing.T) { + hash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) + if err != nil { + t.Fatal(err) + } + mainHash := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if mainHash != "0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" { + t.Errorf("Expected different hashStruct result (got %s)", mainHash) + } + + hash, err = typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) + if err != nil { + t.Error(err) + } + domainHash := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if domainHash != "0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f" { + t.Errorf("Expected different domain hashStruct result (got %s)", domainHash) + } +} + +func TestEncodeType(t *testing.T) { + domainTypeEncoding := string(typedData.EncodeType("EIP712Domain")) + if domainTypeEncoding != "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" { + t.Errorf("Expected different encodeType result (got %s)", domainTypeEncoding) + } + + mailTypeEncoding := string(typedData.EncodeType(typedData.PrimaryType)) + if mailTypeEncoding != "Mail(Person from,Person to,string contents)Person(string name,address wallet)" { + t.Errorf("Expected different encodeType result (got %s)", mailTypeEncoding) + } +} + +func TestTypeHash(t *testing.T) { + mailTypeHash := fmt.Sprintf("0x%s", common.Bytes2Hex(typedData.TypeHash(typedData.PrimaryType))) + if mailTypeHash != "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2" { + t.Errorf("Expected different typeHash result (got %s)", mailTypeHash) + } +} + +func TestEncodeData(t *testing.T) { + hash, err := typedData.EncodeData(typedData.PrimaryType, typedData.Message, 0) + if err != nil { + t.Fatal(err) + } + dataEncoding := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if dataEncoding != "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2fc71e5fa27ff56c350aa531bc129ebdf613b772b6604664f5d8dbe21b85eb0c8cd54f074a4af31b4411ff6a60c9719dbd559c221c8ac3492d9d872b041d703d1b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8" { + t.Errorf("Expected different encodeData result (got %s)", dataEncoding) + } +} + +func TestMalformedDomainkeys(t *testing.T) { + // Verifies that malformed domain keys are properly caught: + //{ + // "name": "Ether Mail", + // "version": "1", + // "chainId": 1, + // "vxerifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + //} + jsonTypedData := ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "vxerifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } +` + var malformedDomainTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &malformedDomainTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, err = malformedDomainTypedData.HashStruct("EIP712Domain", malformedDomainTypedData.Domain.Map()) + if err == nil || err.Error() != "provided data '' doesn't match type 'address'" { + t.Errorf("Expected `provided data '' doesn't match type 'address'`, got '%v'", err) + } +} + +func TestMalformedTypesAndExtradata(t *testing.T) { + // Verifies several quirks + // 1. Using dynamic types and only validating the prefix: + //{ + // "name": "chainId", + // "type": "uint256 ... and now for something completely different" + //} + // 2. Extra data in message: + //{ + // "blahonga": "zonk bonk" + //} + jsonTypedData := ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256 ... and now for something completely different" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } +` + var malformedTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &malformedTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + + malformedTypedData.Types["EIP712Domain"][2].Type = "uint256" + malformedTypedData.Message["blahonga"] = "zonk bonk" + _, err = malformedTypedData.HashStruct(malformedTypedData.PrimaryType, malformedTypedData.Message) + if err == nil || err.Error() != "there is extra data provided in the message" { + t.Errorf("Expected `there is extra data provided in the message`, got '%v'", err) + } +} + +func TestTypeMismatch(t *testing.T) { + // Verifies that: + // 1. Mismatches between the given type and data, i.e. `Person` and + // the data item is a string, are properly caught: + //{ + // "name": "contents", + // "type": "Person" + //}, + //{ + // "contents": "Hello, Bob!" <-- string not "Person" + //} + // 2. Nonexistent types are properly caught: + //{ + // "name": "contents", + // "type": "Blahonga" + //} + jsonTypedData := ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "Person" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } +` + var mismatchTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &mismatchTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, err = mismatchTypedData.HashStruct(mismatchTypedData.PrimaryType, mismatchTypedData.Message) + if err.Error() != "provided data 'Hello, Bob!' doesn't match type 'Person'" { + t.Errorf("Expected `provided data 'Hello, Bob!' doesn't match type 'Person'`, got '%v'", err) + } + + mismatchTypedData.Types["Mail"][2].Type = "Blahonga" + _, err = mismatchTypedData.HashStruct(mismatchTypedData.PrimaryType, mismatchTypedData.Message) + if err == nil || err.Error() != "reference type 'Blahonga' is undefined" { + t.Fatalf("Expected `reference type 'Blahonga' is undefined`, got '%v'", err) + } +} + +func TestTypeOverflow(t *testing.T) { + // Verifies data that doesn't fit into it: + //{ + // "test": 65536 <-- test defined as uint8 + //} + var overflowTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &overflowTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + // Set test to something outside uint8 + (overflowTypedData.Message["from"]).(map[string]interface{})["test"] = big.NewInt(65536) + + _, err = overflowTypedData.HashStruct(overflowTypedData.PrimaryType, overflowTypedData.Message) + if err == nil || err.Error() != "integer larger than 'uint8'" { + t.Fatalf("Expected `integer larger than 'uint8'`, got '%v'", err) + } + + (overflowTypedData.Message["from"]).(map[string]interface{})["test"] = big.NewInt(3) + (overflowTypedData.Message["to"]).(map[string]interface{})["test"] = big.NewInt(4) + + _, err = overflowTypedData.HashStruct(overflowTypedData.PrimaryType, overflowTypedData.Message) + if err != nil { + t.Fatalf("Expected no err, got '%v'", err) + } +} + +func TestArray(t *testing.T) { + // Makes sure that arrays work fine + //{ + // "type": "address[]" + //}, + //{ + // "type": "string[]" + //}, + //{ + // "type": "uint16[]", + //} + + jsonTypedData := ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Foo": [ + { + "name": "bar", + "type": "address[]" + } + ] + }, + "primaryType": "Foo", + "domain": { + "name": "Lorem", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "bar": [ + "0x0000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000003" + ] + } + } + ` + var arrayTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &arrayTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, err = arrayTypedData.HashStruct(arrayTypedData.PrimaryType, arrayTypedData.Message) + if err != nil { + t.Fatalf("Expected no err, got '%v'", err) + } + + // Change array to string + arrayTypedData.Types["Foo"][0].Type = "string[]" + arrayTypedData.Message["bar"] = []interface{}{ + "lorem", + "ipsum", + "dolores", + } + _, err = arrayTypedData.HashStruct(arrayTypedData.PrimaryType, arrayTypedData.Message) + if err != nil { + t.Fatalf("Expected no err, got '%v'", err) + } + + // Change array to uint + arrayTypedData.Types["Foo"][0].Type = "uint[]" + arrayTypedData.Message["bar"] = []interface{}{ + big.NewInt(1955), + big.NewInt(108), + big.NewInt(44010), + } + _, err = arrayTypedData.HashStruct(arrayTypedData.PrimaryType, arrayTypedData.Message) + if err != nil { + t.Fatalf("Expected no err, got '%v'", err) + } + + // Should not work with fixed-size arrays + arrayTypedData.Types["Foo"][0].Type = "uint[3]" + _, err = arrayTypedData.HashStruct(arrayTypedData.PrimaryType, arrayTypedData.Message) + if err == nil || err.Error() != "unknown type 'uint[3]'" { + t.Fatalf("Expected `unknown type 'uint[3]'`, got '%v'", err) + } +} + +func TestCustomTypeAsArray(t *testing.T) { + var jsonTypedData = ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Person[]": [ + { + "name": "baz", + "type": "string" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person[]" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": {"baz": "foo"}, + "contents": "Hello, Bob!" + } + } + +` + var malformedTypedData TypedData + err := json.Unmarshal([]byte(jsonTypedData), &malformedTypedData) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + _, err = malformedTypedData.HashStruct("EIP712Domain", malformedTypedData.Domain.Map()) + if err != nil { + t.Errorf("Expected no error, got '%v'", err) + } +} + +func TestFormatter(t *testing.T) { + + var d TypedData + err := json.Unmarshal([]byte(jsonTypedData), &d) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + formatted := d.Format() + for _, item := range formatted { + fmt.Printf("'%v'\n", item.Pprint(0)) + } + + j, _ := json.Marshal(formatted) + fmt.Printf("'%v'\n", string(j)) +} diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/stdioui.go b/vendor/github.com/ethereum/go-ethereum/signer/core/stdioui.go index 64032386..0edb72de 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/stdioui.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/stdioui.go @@ -32,12 +32,16 @@ type StdIOUI struct { } func NewStdIOUI() *StdIOUI { - log.Info("NewStdIOUI") client, err := rpc.DialContext(context.Background(), "stdio://") if err != nil { log.Crit("Could not create stdio client", "err", err) } - return &StdIOUI{client: *client} + ui := &StdIOUI{client: *client} + return ui +} + +func (ui *StdIOUI) RegisterUIServer(api *UIServerAPI) { + ui.client.RegisterName("clef", api) } // dispatch sends a request over the stdio @@ -49,73 +53,71 @@ func (ui *StdIOUI) dispatch(serviceMethod string, args interface{}, reply interf return err } +// notify sends a request over the stdio, and does not listen for a response +func (ui *StdIOUI) notify(serviceMethod string, args interface{}) error { + ctx := context.Background() + err := ui.client.Notify(ctx, serviceMethod, args) + if err != nil { + log.Info("Error", "exc", err.Error()) + } + return err +} + func (ui *StdIOUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { var result SignTxResponse - err := ui.dispatch("ApproveTx", request, &result) + err := ui.dispatch("ui_approveTx", request, &result) return result, err } func (ui *StdIOUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { var result SignDataResponse - err := ui.dispatch("ApproveSignData", request, &result) - return result, err -} - -func (ui *StdIOUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - var result ExportResponse - err := ui.dispatch("ApproveExport", request, &result) - return result, err -} - -func (ui *StdIOUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - var result ImportResponse - err := ui.dispatch("ApproveImport", request, &result) + err := ui.dispatch("ui_approveSignData", request, &result) return result, err } func (ui *StdIOUI) ApproveListing(request *ListRequest) (ListResponse, error) { var result ListResponse - err := ui.dispatch("ApproveListing", request, &result) + err := ui.dispatch("ui_approveListing", request, &result) return result, err } func (ui *StdIOUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { var result NewAccountResponse - err := ui.dispatch("ApproveNewAccount", request, &result) + err := ui.dispatch("ui_approveNewAccount", request, &result) return result, err } func (ui *StdIOUI) ShowError(message string) { - err := ui.dispatch("ShowError", &Message{message}, nil) + err := ui.notify("ui_showError", &Message{message}) if err != nil { - log.Info("Error calling 'ShowError'", "exc", err.Error(), "msg", message) + log.Info("Error calling 'ui_showError'", "exc", err.Error(), "msg", message) } } func (ui *StdIOUI) ShowInfo(message string) { - err := ui.dispatch("ShowInfo", Message{message}, nil) + err := ui.notify("ui_showInfo", Message{message}) if err != nil { - log.Info("Error calling 'ShowInfo'", "exc", err.Error(), "msg", message) + log.Info("Error calling 'ui_showInfo'", "exc", err.Error(), "msg", message) } } func (ui *StdIOUI) OnApprovedTx(tx ethapi.SignTransactionResult) { - err := ui.dispatch("OnApprovedTx", tx, nil) + err := ui.notify("ui_onApprovedTx", tx) if err != nil { - log.Info("Error calling 'OnApprovedTx'", "exc", err.Error(), "tx", tx) + log.Info("Error calling 'ui_onApprovedTx'", "exc", err.Error(), "tx", tx) } } func (ui *StdIOUI) OnSignerStartup(info StartupInfo) { - err := ui.dispatch("OnSignerStartup", info, nil) + err := ui.notify("ui_onSignerStartup", info) if err != nil { - log.Info("Error calling 'OnSignerStartup'", "exc", err.Error(), "info", info) + log.Info("Error calling 'ui_onSignerStartup'", "exc", err.Error(), "info", info) } } func (ui *StdIOUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { var result UserInputResponse - err := ui.dispatch("OnInputRequired", info, &result) + err := ui.dispatch("ui_onInputRequired", info, &result) if err != nil { - log.Info("Error calling 'OnInputRequired'", "exc", err.Error(), "info", info) + log.Info("Error calling 'ui_onInputRequired'", "exc", err.Error(), "info", info) } return result, err } diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/types.go b/vendor/github.com/ethereum/go-ethereum/signer/core/types.go index 12805577..8743746b 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/types.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/types.go @@ -19,40 +19,14 @@ package core import ( "encoding/json" "fmt" + "math/big" "strings" - "math/big" - - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" ) -type Accounts []Account - -func (as Accounts) String() string { - var output []string - for _, a := range as { - output = append(output, a.String()) - } - return strings.Join(output, "\n") -} - -type Account struct { - Typ string `json:"type"` - URL accounts.URL `json:"url"` - Address common.Address `json:"address"` -} - -func (a Account) String() string { - s, err := json.Marshal(a) - if err == nil { - return string(s) - } - return err.Error() -} - type ValidationInfo struct { Typ string `json:"type"` Message string `json:"message"` @@ -101,7 +75,7 @@ type SendTxArgs struct { Nonce hexutil.Uint64 `json:"nonce"` // We accept "data" and "input" for backwards-compatibility reasons. Data *hexutil.Bytes `json:"data"` - Input *hexutil.Bytes `json:"input"` + Input *hexutil.Bytes `json:"input,omitempty"` } func (args SendTxArgs) String() string { diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/uiapi.go b/vendor/github.com/ethereum/go-ethereum/signer/core/uiapi.go new file mode 100644 index 00000000..6dc68313 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/uiapi.go @@ -0,0 +1,201 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . +// + +package core + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "math/big" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" +) + +// SignerUIAPI implements methods Clef provides for a UI to query, in the bidirectional communication +// channel. +// This API is considered secure, since a request can only +// ever arrive from the UI -- and the UI is capable of approving any action, thus we can consider these +// requests pre-approved. +// NB: It's very important that these methods are not ever exposed on the external service +// registry. +type UIServerAPI struct { + extApi *SignerAPI + am *accounts.Manager +} + +// NewUIServerAPI creates a new UIServerAPI +func NewUIServerAPI(extapi *SignerAPI) *UIServerAPI { + return &UIServerAPI{extapi, extapi.am} +} + +// List available accounts. As opposed to the external API definition, this method delivers +// the full Account object and not only Address. +// Example call +// {"jsonrpc":"2.0","method":"clef_listAccounts","params":[], "id":4} +func (s *UIServerAPI) ListAccounts(ctx context.Context) ([]accounts.Account, error) { + var accs []accounts.Account + for _, wallet := range s.am.Wallets() { + accs = append(accs, wallet.Accounts()...) + } + return accs, nil +} + +// rawWallet is a JSON representation of an accounts.Wallet interface, with its +// data contents extracted into plain fields. +type rawWallet struct { + URL string `json:"url"` + Status string `json:"status"` + Failure string `json:"failure,omitempty"` + Accounts []accounts.Account `json:"accounts,omitempty"` +} + +// ListWallets will return a list of wallets that clef manages +// Example call +// {"jsonrpc":"2.0","method":"clef_listWallets","params":[], "id":5} +func (s *UIServerAPI) ListWallets() []rawWallet { + wallets := make([]rawWallet, 0) // return [] instead of nil if empty + for _, wallet := range s.am.Wallets() { + status, failure := wallet.Status() + + raw := rawWallet{ + URL: wallet.URL().String(), + Status: status, + Accounts: wallet.Accounts(), + } + if failure != nil { + raw.Failure = failure.Error() + } + wallets = append(wallets, raw) + } + return wallets +} + +// DeriveAccount requests a HD wallet to derive a new account, optionally pinning +// it for later reuse. +// Example call +// {"jsonrpc":"2.0","method":"clef_deriveAccount","params":["ledger://","m/44'/60'/0'", false], "id":6} +func (s *UIServerAPI) DeriveAccount(url string, path string, pin *bool) (accounts.Account, error) { + wallet, err := s.am.Wallet(url) + if err != nil { + return accounts.Account{}, err + } + derivPath, err := accounts.ParseDerivationPath(path) + if err != nil { + return accounts.Account{}, err + } + if pin == nil { + pin = new(bool) + } + return wallet.Derive(derivPath, *pin) +} + +// fetchKeystore retrives the encrypted keystore from the account manager. +func fetchKeystore(am *accounts.Manager) *keystore.KeyStore { + return am.Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) +} + +// ImportRawKey stores the given hex encoded ECDSA key into the key directory, +// encrypting it with the passphrase. +// Example call (should fail on password too short) +// {"jsonrpc":"2.0","method":"clef_importRawKey","params":["1111111111111111111111111111111111111111111111111111111111111111","test"], "id":6} +func (s *UIServerAPI) ImportRawKey(privkey string, password string) (accounts.Account, error) { + key, err := crypto.HexToECDSA(privkey) + if err != nil { + return accounts.Account{}, err + } + if err := ValidatePasswordFormat(password); err != nil { + return accounts.Account{}, fmt.Errorf("password requirements not met: %v", err) + } + // No error + return fetchKeystore(s.am).ImportECDSA(key, password) +} + +// OpenWallet initiates a hardware wallet opening procedure, establishing a USB +// connection and attempting to authenticate via the provided passphrase. Note, +// the method may return an extra challenge requiring a second open (e.g. the +// Trezor PIN matrix challenge). +// Example +// {"jsonrpc":"2.0","method":"clef_openWallet","params":["ledger://",""], "id":6} +func (s *UIServerAPI) OpenWallet(url string, passphrase *string) error { + wallet, err := s.am.Wallet(url) + if err != nil { + return err + } + pass := "" + if passphrase != nil { + pass = *passphrase + } + return wallet.Open(pass) +} + +// ChainId returns the chainid in use for Eip-155 replay protection +// Example call +// {"jsonrpc":"2.0","method":"clef_chainId","params":[], "id":8} +func (s *UIServerAPI) ChainId() math.HexOrDecimal64 { + return (math.HexOrDecimal64)(s.extApi.chainID.Uint64()) +} + +// SetChainId sets the chain id to use when signing transactions. +// Example call to set Ropsten: +// {"jsonrpc":"2.0","method":"clef_setChainId","params":["3"], "id":8} +func (s *UIServerAPI) SetChainId(id math.HexOrDecimal64) math.HexOrDecimal64 { + s.extApi.chainID = new(big.Int).SetUint64(uint64(id)) + return s.ChainId() +} + +// Export returns encrypted private key associated with the given address in web3 keystore format. +// Example +// {"jsonrpc":"2.0","method":"clef_export","params":["0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a"], "id":4} +func (s *UIServerAPI) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { + // Look up the wallet containing the requested signer + wallet, err := s.am.Find(accounts.Account{Address: addr}) + if err != nil { + return nil, err + } + if wallet.URL().Scheme != keystore.KeyStoreScheme { + return nil, fmt.Errorf("Account is not a keystore-account") + } + return ioutil.ReadFile(wallet.URL().Path) +} + +// Import tries to import the given keyJSON in the local keystore. The keyJSON data is expected to be +// in web3 keystore format. It will decrypt the keyJSON with the given passphrase and on successful +// decryption it will encrypt the key with the given newPassphrase and store it in the keystore. +// Example (the address in question has privkey `11...11`): +// {"jsonrpc":"2.0","method":"clef_import","params":[{"address":"19e7e376e7c213b7e7e7e46cc70a5dd086daff2a","crypto":{"cipher":"aes-128-ctr","ciphertext":"33e4cd3756091d037862bb7295e9552424a391a6e003272180a455ca2a9fb332","cipherparams":{"iv":"b54b263e8f89c42bb219b6279fba5cce"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"e4ca94644fd30569c1b1afbbc851729953c92637b7fe4bb9840bbb31ffbc64a5"},"mac":"f4092a445c2b21c0ef34f17c9cd0d873702b2869ec5df4439a0c2505823217e7"},"id":"216c7eac-e8c1-49af-a215-fa0036f29141","version":3},"test","yaddayadda"], "id":4} +func (api *UIServerAPI) Import(ctx context.Context, keyJSON json.RawMessage, oldPassphrase, newPassphrase string) (accounts.Account, error) { + be := api.am.Backends(keystore.KeyStoreType) + + if len(be) == 0 { + return accounts.Account{}, errors.New("password based accounts not supported") + } + if err := ValidatePasswordFormat(newPassphrase); err != nil { + return accounts.Account{}, fmt.Errorf("password requirements not met: %v", err) + } + return be[0].(*keystore.KeyStore).Import(keyJSON, oldPassphrase, newPassphrase) +} + +// Other methods to be added, not yet implemented are: +// - Ruleset interaction: add rules, attest rulefiles +// - Store metadata about accounts, e.g. naming of accounts diff --git a/vendor/github.com/ethereum/go-ethereum/signer/core/validation_test.go b/vendor/github.com/ethereum/go-ethereum/signer/core/validation_test.go index 155b25e9..1e2e69ec 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/core/validation_test.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/core/validation_test.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" ) -func hexAddr(a string) common.Address { return common.BytesToAddress(common.FromHex(a)) } func mixAddr(a string) (*common.MixedcaseAddress, error) { return common.NewMixedcaseAddressFromString(a) } diff --git a/vendor/github.com/ethereum/go-ethereum/signer/rules/rules.go b/vendor/github.com/ethereum/go-ethereum/signer/rules/rules.go index 07c34db2..5ebffa3a 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/rules/rules.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/rules/rules.go @@ -22,7 +22,6 @@ import ( "os" "strings" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/signer/core" @@ -42,29 +41,30 @@ func consoleOutput(call otto.FunctionCall) otto.Value { for _, argument := range call.ArgumentList { output = append(output, fmt.Sprintf("%v", argument)) } - fmt.Fprintln(os.Stdout, strings.Join(output, " ")) + fmt.Fprintln(os.Stderr, strings.Join(output, " ")) return otto.Value{} } -// rulesetUI provides an implementation of SignerUI that evaluates a javascript +// rulesetUI provides an implementation of UIClientAPI that evaluates a javascript // file for each defined UI-method type rulesetUI struct { - next core.SignerUI // The next handler, for manual processing - storage storage.Storage - credentials storage.Storage - jsRules string // The rules to use + next core.UIClientAPI // The next handler, for manual processing + storage storage.Storage + jsRules string // The rules to use } -func NewRuleEvaluator(next core.SignerUI, jsbackend, credentialsBackend storage.Storage) (*rulesetUI, error) { +func NewRuleEvaluator(next core.UIClientAPI, jsbackend storage.Storage) (*rulesetUI, error) { c := &rulesetUI{ - next: next, - storage: jsbackend, - credentials: credentialsBackend, - jsRules: "", + next: next, + storage: jsbackend, + jsRules: "", } return c, nil } +func (r *rulesetUI) RegisterUIServer(api *core.UIServerAPI) { + // TODO, make it possible to query from js +} func (r *rulesetUI) Init(javascriptRules string) error { r.jsRules = javascriptRules @@ -150,18 +150,12 @@ func (r *rulesetUI) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, if approved { return core.SignTxResponse{ Transaction: request.Transaction, - Approved: true, - Password: r.lookupPassword(request.Transaction.From.Address()), - }, + Approved: true}, nil } return core.SignTxResponse{Approved: false}, err } -func (r *rulesetUI) lookupPassword(address common.Address) string { - return r.credentials.Get(strings.ToLower(address.String())) -} - func (r *rulesetUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { jsonreq, err := json.Marshal(request) approved, err := r.checkApproval("ApproveSignData", jsonreq, err) @@ -170,28 +164,9 @@ func (r *rulesetUI) ApproveSignData(request *core.SignDataRequest) (core.SignDat return r.next.ApproveSignData(request) } if approved { - return core.SignDataResponse{Approved: true, Password: r.lookupPassword(request.Address.Address())}, nil + return core.SignDataResponse{Approved: true}, nil } - return core.SignDataResponse{Approved: false, Password: ""}, err -} - -func (r *rulesetUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - jsonreq, err := json.Marshal(request) - approved, err := r.checkApproval("ApproveExport", jsonreq, err) - if err != nil { - log.Info("Rule-based approval error, going to manual", "error", err) - return r.next.ApproveExport(request) - } - if approved { - return core.ExportResponse{Approved: true}, nil - } - return core.ExportResponse{Approved: false}, err -} - -func (r *rulesetUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - // This cannot be handled by rules, requires setting a password - // dispatch to next - return r.next.ApproveImport(request) + return core.SignDataResponse{Approved: false}, err } // OnInputRequired not handled by rules diff --git a/vendor/github.com/ethereum/go-ethereum/signer/rules/rules_test.go b/vendor/github.com/ethereum/go-ethereum/signer/rules/rules_test.go index 0b520a15..19d9049c 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/rules/rules_test.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/rules/rules_test.go @@ -77,28 +77,18 @@ type alwaysDenyUI struct{} func (alwaysDenyUI) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { return core.UserInputResponse{}, nil } +func (alwaysDenyUI) RegisterUIServer(api *core.UIServerAPI) { +} func (alwaysDenyUI) OnSignerStartup(info core.StartupInfo) { } -func (alwaysDenyUI) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil -} - func (alwaysDenyUI) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { - return core.SignTxResponse{Transaction: request.Transaction, Approved: false, Password: ""}, nil + return core.SignTxResponse{Transaction: request.Transaction, Approved: false}, nil } func (alwaysDenyUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { - return core.SignDataResponse{Approved: false, Password: ""}, nil -} - -func (alwaysDenyUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - return core.ExportResponse{Approved: false}, nil -} - -func (alwaysDenyUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - return core.ImportResponse{Approved: false, OldPassword: "", NewPassword: ""}, nil + return core.SignDataResponse{Approved: false}, nil } func (alwaysDenyUI) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { @@ -106,7 +96,7 @@ func (alwaysDenyUI) ApproveListing(request *core.ListRequest) (core.ListResponse } func (alwaysDenyUI) ApproveNewAccount(request *core.NewAccountRequest) (core.NewAccountResponse, error) { - return core.NewAccountResponse{Approved: false, Password: ""}, nil + return core.NewAccountResponse{Approved: false}, nil } func (alwaysDenyUI) ShowError(message string) { @@ -122,7 +112,7 @@ func (alwaysDenyUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } func initRuleEngine(js string) (*rulesetUI, error) { - r, err := NewRuleEvaluator(&alwaysDenyUI{}, storage.NewEphemeralStorage(), storage.NewEphemeralStorage()) + r, err := NewRuleEvaluator(&alwaysDenyUI{}, storage.NewEphemeralStorage()) if err != nil { return nil, fmt.Errorf("failed to create js engine: %v", err) } @@ -133,11 +123,11 @@ func initRuleEngine(js string) (*rulesetUI, error) { } func TestListRequest(t *testing.T) { - accs := make([]core.Account, 5) + accs := make([]accounts.Account, 5) for i := range accs { addr := fmt.Sprintf("000000000000000000000000000000000000000%x", i) - acc := core.Account{ + acc := accounts.Account{ Address: common.BytesToAddress(common.Hex2Bytes(addr)), URL: accounts.URL{Scheme: "test", Path: fmt.Sprintf("acc-%d", i)}, } @@ -208,6 +198,10 @@ type dummyUI struct { calls []string } +func (d *dummyUI) RegisterUIServer(api *core.UIServerAPI) { + panic("implement me") +} + func (d *dummyUI) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { d.calls = append(d.calls, "OnInputRequired") return core.UserInputResponse{}, nil @@ -223,16 +217,6 @@ func (d *dummyUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataR return core.SignDataResponse{}, core.ErrRequestDenied } -func (d *dummyUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - d.calls = append(d.calls, "ApproveExport") - return core.ExportResponse{}, core.ErrRequestDenied -} - -func (d *dummyUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - d.calls = append(d.calls, "ApproveImport") - return core.ImportResponse{}, core.ErrRequestDenied -} - func (d *dummyUI) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { d.calls = append(d.calls, "ApproveListing") return core.ListResponse{}, core.ErrRequestDenied @@ -255,10 +239,6 @@ func (d *dummyUI) OnApprovedTx(tx ethapi.SignTransactionResult) { d.calls = append(d.calls, "OnApprovedTx") } -func (d *dummyUI) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil -} - func (d *dummyUI) OnSignerStartup(info core.StartupInfo) { } @@ -268,8 +248,7 @@ func TestForwarding(t *testing.T) { js := "" ui := &dummyUI{make([]string, 0)} jsBackend := storage.NewEphemeralStorage() - credBackend := storage.NewEphemeralStorage() - r, err := NewRuleEvaluator(ui, jsBackend, credBackend) + r, err := NewRuleEvaluator(ui, jsBackend) if err != nil { t.Fatalf("Failed to create js engine: %v", err) } @@ -278,17 +257,15 @@ func TestForwarding(t *testing.T) { } r.ApproveSignData(nil) r.ApproveTx(nil) - r.ApproveImport(nil) r.ApproveNewAccount(nil) r.ApproveListing(nil) - r.ApproveExport(nil) r.ShowError("test") r.ShowInfo("test") //This one is not forwarded r.OnApprovedTx(ethapi.SignTransactionResult{}) - expCalls := 8 + expCalls := 6 if len(ui.calls) != expCalls { t.Errorf("Expected %d forwarded calls, got %d: %s", expCalls, len(ui.calls), strings.Join(ui.calls, ",")) @@ -531,12 +508,10 @@ func (d *dontCallMe) OnInputRequired(info core.UserInputRequest) (core.UserInput d.t.Fatalf("Did not expect next-handler to be called") return core.UserInputResponse{}, nil } - -func (d *dontCallMe) OnSignerStartup(info core.StartupInfo) { +func (d *dontCallMe) RegisterUIServer(api *core.UIServerAPI) { } -func (d *dontCallMe) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil +func (d *dontCallMe) OnSignerStartup(info core.StartupInfo) { } func (d *dontCallMe) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { @@ -549,16 +524,6 @@ func (d *dontCallMe) ApproveSignData(request *core.SignDataRequest) (core.SignDa return core.SignDataResponse{}, core.ErrRequestDenied } -func (d *dontCallMe) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - d.t.Fatalf("Did not expect next-handler to be called") - return core.ExportResponse{}, core.ErrRequestDenied -} - -func (d *dontCallMe) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - d.t.Fatalf("Did not expect next-handler to be called") - return core.ImportResponse{}, core.ErrRequestDenied -} - func (d *dontCallMe) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { d.t.Fatalf("Did not expect next-handler to be called") return core.ListResponse{}, core.ErrRequestDenied @@ -601,7 +566,7 @@ func TestContextIsCleared(t *testing.T) { } ` ui := &dontCallMe{t} - r, err := NewRuleEvaluator(ui, storage.NewEphemeralStorage(), storage.NewEphemeralStorage()) + r, err := NewRuleEvaluator(ui, storage.NewEphemeralStorage()) if err != nil { t.Fatalf("Failed to create js engine: %v", err) } @@ -624,7 +589,7 @@ func TestSignData(t *testing.T) { function ApproveSignData(r){ if( r.address.toLowerCase() == "0x694267f14675d7e1b9494fd8d72fefe1755710fa") { - if(r.message.indexOf("bazonk") >= 0){ + if(r.message[0].value.indexOf("bazonk") >= 0){ return "Approve" } return "Reject" @@ -636,18 +601,25 @@ function ApproveSignData(r){ t.Errorf("Couldn't create evaluator %v", err) return } - message := []byte("baz bazonk foo") - hash, msg := core.SignHash(message) - raw := hexutil.Bytes(message) + message := "baz bazonk foo" + hash, rawdata := accounts.TextAndHash([]byte(message)) addr, _ := mixAddr("0x694267f14675d7e1b9494fd8d72fefe1755710fa") fmt.Printf("address %v %v\n", addr.String(), addr.Original()) + + nvt := []*core.NameValueType{ + { + Name: "message", + Typ: "text/plain", + Value: message, + }, + } resp, err := r.ApproveSignData(&core.SignDataRequest{ Address: *addr, - Message: msg, + Message: nvt, Hash: hash, Meta: core.Metadata{Remote: "remoteip", Local: "localip", Scheme: "inproc"}, - Rawdata: raw, + Rawdata: []byte(rawdata), }) if err != nil { t.Fatalf("Unexpected error %v", err) diff --git a/vendor/github.com/ethereum/go-ethereum/signer/storage/storage.go b/vendor/github.com/ethereum/go-ethereum/signer/storage/storage.go index 60f4e389..50c55e45 100644 --- a/vendor/github.com/ethereum/go-ethereum/signer/storage/storage.go +++ b/vendor/github.com/ethereum/go-ethereum/signer/storage/storage.go @@ -17,10 +17,6 @@ package storage -import ( - "fmt" -) - type Storage interface { // Put stores a value by key. 0-length keys results in no-op Put(key, value string) @@ -39,7 +35,7 @@ func (s *EphemeralStorage) Put(key, value string) { if len(key) == 0 { return } - fmt.Printf("storage: put %v -> %v\n", key, value) + //fmt.Printf("storage: put %v -> %v\n", key, value) s.data[key] = value } @@ -47,7 +43,7 @@ func (s *EphemeralStorage) Get(key string) string { if len(key) == 0 { return "" } - fmt.Printf("storage: get %v\n", key) + //fmt.Printf("storage: get %v\n", key) if v, exist := s.data[key]; exist { return v } @@ -60,3 +56,11 @@ func NewEphemeralStorage() Storage { } return s } + +// NoStorage is a dummy construct which doesn't remember anything you tell it +type NoStorage struct{} + +func (s *NoStorage) Put(key, value string) {} +func (s *NoStorage) Get(key string) string { + return "" +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/api/act.go b/vendor/github.com/ethereum/go-ethereum/swarm/api/act.go index 9566720b..a79f1944 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/api/act.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/api/act.go @@ -33,7 +33,7 @@ var ( } ) -const EMPTY_CREDENTIALS = "" +const EmptyCredentials = "" type AccessEntry struct { Type AccessType diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/api/api.go b/vendor/github.com/ethereum/go-ethereum/swarm/api/api.go index c6ca1b57..86c11192 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/api/api.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/api/api.go @@ -431,7 +431,7 @@ func (a *API) Delete(ctx context.Context, addr string, path string) (storage.Add apiDeleteFail.Inc(1) return nil, err } - key, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) + key, err := a.ResolveURI(ctx, uri, EmptyCredentials) if err != nil { return nil, err @@ -643,7 +643,7 @@ func (a *API) AddFile(ctx context.Context, mhash, path, fname string, content [] apiAddFileFail.Inc(1) return nil, "", err } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) + mkey, err := a.ResolveURI(ctx, uri, EmptyCredentials) if err != nil { apiAddFileFail.Inc(1) return nil, "", err @@ -760,7 +760,7 @@ func (a *API) RemoveFile(ctx context.Context, mhash string, path string, fname s apiRmFileFail.Inc(1) return "", err } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) + mkey, err := a.ResolveURI(ctx, uri, EmptyCredentials) if err != nil { apiRmFileFail.Inc(1) return "", err @@ -827,7 +827,7 @@ func (a *API) AppendFile(ctx context.Context, mhash, path, fname string, existin apiAppendFileFail.Inc(1) return nil, "", err } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) + mkey, err := a.ResolveURI(ctx, uri, EmptyCredentials) if err != nil { apiAppendFileFail.Inc(1) return nil, "", err diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/api/config.go b/vendor/github.com/ethereum/go-ethereum/swarm/api/config.go index b8de16f5..0a7100c5 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/api/config.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/api/config.go @@ -24,11 +24,11 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/contracts/ens" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" "github.com/ethereum/go-ethereum/swarm/network" "github.com/ethereum/go-ethereum/swarm/pss" "github.com/ethereum/go-ethereum/swarm/services/swap" @@ -47,9 +47,8 @@ type Config struct { *storage.FileStoreParams *storage.LocalStoreParams *network.HiveParams - Swap *swap.LocalProfile - Pss *pss.PssParams - //*network.SyncParams + Swap *swap.LocalProfile + Pss *pss.PssParams Contract common.Address EnsRoot common.Address EnsAPIs []string @@ -58,7 +57,7 @@ type Config struct { Port string PublicKey string BzzKey string - NodeID string + Enode *enode.Node `toml:"-"` NetworkID uint64 SwapEnabled bool SyncEnabled bool @@ -79,10 +78,9 @@ type Config struct { func NewConfig() (c *Config) { c = &Config{ - LocalStoreParams: storage.NewDefaultLocalStoreParams(), - FileStoreParams: storage.NewFileStoreParams(), - HiveParams: network.NewHiveParams(), - //SyncParams: network.NewDefaultSyncParams(), + LocalStoreParams: storage.NewDefaultLocalStoreParams(), + FileStoreParams: storage.NewFileStoreParams(), + HiveParams: network.NewHiveParams(), Swap: swap.NewDefaultSwapParams(), Pss: pss.NewPssParams(), ListenAddr: DefaultHTTPListenAddr, @@ -105,33 +103,38 @@ func NewConfig() (c *Config) { //some config params need to be initialized after the complete //config building phase is completed (e.g. due to overriding flags) -func (c *Config) Init(prvKey *ecdsa.PrivateKey) { +func (c *Config) Init(prvKey *ecdsa.PrivateKey, nodeKey *ecdsa.PrivateKey) error { - address := crypto.PubkeyToAddress(prvKey.PublicKey) - c.Path = filepath.Join(c.Path, "bzz-"+common.Bytes2Hex(address.Bytes())) - err := os.MkdirAll(c.Path, os.ModePerm) + // create swarm dir and record key + err := c.createAndSetPath(c.Path, prvKey) if err != nil { - log.Error(fmt.Sprintf("Error creating root swarm data directory: %v", err)) - return + return fmt.Errorf("Error creating root swarm data directory: %v", err) + } + c.setKey(prvKey) + + // create the new enode record + // signed with the ephemeral node key + enodeParams := &network.EnodeParams{ + PrivateKey: prvKey, + EnodeKey: nodeKey, + Lightnode: c.LightNodeEnabled, + Bootnode: c.BootnodeMode, + } + c.Enode, err = network.NewEnode(enodeParams) + if err != nil { + return fmt.Errorf("Error creating enode: %v", err) } - pubkey := crypto.FromECDSAPub(&prvKey.PublicKey) - pubkeyhex := common.ToHex(pubkey) - keyhex := crypto.Keccak256Hash(pubkey).Hex() - - c.PublicKey = pubkeyhex - c.BzzKey = keyhex - c.NodeID = enode.PubkeyToIDV4(&prvKey.PublicKey).String() - + // initialize components that depend on the swarm instance's private key if c.SwapEnabled { c.Swap.Init(c.Contract, prvKey) } - c.privateKey = prvKey c.LocalStoreParams.Init(c.Path) - c.LocalStoreParams.BaseKey = common.FromHex(keyhex) + c.LocalStoreParams.BaseKey = common.FromHex(c.BzzKey) c.Pss = c.Pss.WithPrivateKey(c.privateKey) + return nil } func (c *Config) ShiftPrivateKey() (privKey *ecdsa.PrivateKey) { @@ -141,3 +144,25 @@ func (c *Config) ShiftPrivateKey() (privKey *ecdsa.PrivateKey) { } return privKey } + +func (c *Config) setKey(prvKey *ecdsa.PrivateKey) { + bzzkeybytes := network.PrivateKeyToBzzKey(prvKey) + pubkey := crypto.FromECDSAPub(&prvKey.PublicKey) + pubkeyhex := hexutil.Encode(pubkey) + keyhex := hexutil.Encode(bzzkeybytes) + + c.privateKey = prvKey + c.PublicKey = pubkeyhex + c.BzzKey = keyhex +} + +func (c *Config) createAndSetPath(datadirPath string, prvKey *ecdsa.PrivateKey) error { + address := crypto.PubkeyToAddress(prvKey.PublicKey) + bzzdirPath := filepath.Join(datadirPath, "bzz-"+common.Bytes2Hex(address.Bytes())) + err := os.MkdirAll(bzzdirPath, os.ModePerm) + if err != nil { + return err + } + c.Path = bzzdirPath + return nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/api/config_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/api/config_test.go index bd7e1d87..a55da6f7 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/api/config_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/api/config_test.go @@ -27,11 +27,16 @@ import ( func TestConfig(t *testing.T) { var hexprvkey = "65138b2aa745041b372153550584587da326ab440576b2a1191dd95cee30039c" + var hexnodekey = "75138b2aa745041b372153550584587da326ab440576b2a1191dd95cee30039c" prvkey, err := crypto.HexToECDSA(hexprvkey) if err != nil { t.Fatalf("failed to load private key: %v", err) } + nodekey, err := crypto.HexToECDSA(hexnodekey) + if err != nil { + t.Fatalf("failed to load private key: %v", err) + } one := NewConfig() two := NewConfig() @@ -41,7 +46,10 @@ func TestConfig(t *testing.T) { t.Fatal("Two default configs are not equal") } - one.Init(prvkey) + err = one.Init(prvkey, nodekey) + if err != nil { + t.Fatal(err) + } //the init function should set the following fields if one.BzzKey == "" { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/api/inspector.go b/vendor/github.com/ethereum/go-ethereum/swarm/api/inspector.go index 6706b32e..ea3c4c04 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/api/inspector.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/api/inspector.go @@ -18,6 +18,7 @@ package api import ( "context" + "fmt" "github.com/ethereum/go-ethereum/swarm/network" "github.com/ethereum/go-ethereum/swarm/storage" @@ -38,6 +39,14 @@ func (inspector *Inspector) Hive() string { return inspector.hive.String() } +func (inspector *Inspector) ListKnown() []string { + res := []string{} + for _, v := range inspector.hive.Kademlia.ListKnown() { + res = append(res, fmt.Sprintf("%v", v)) + } + return res +} + type HasInfo struct { Addr string `json:"address"` Has bool `json:"has"` diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/chunk/chunk.go b/vendor/github.com/ethereum/go-ethereum/swarm/chunk/chunk.go index 1449efcc..7540af8c 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/chunk/chunk.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/chunk/chunk.go @@ -1,5 +1,109 @@ package chunk -const ( - DefaultSize = 4096 +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/common" ) + +const ( + DefaultSize = 4096 + MaxPO = 16 + AddressLength = 32 +) + +var ( + ErrChunkNotFound = errors.New("chunk not found") + ErrChunkInvalid = errors.New("invalid chunk") +) + +type Chunk interface { + Address() Address + Data() []byte +} + +type chunk struct { + addr Address + sdata []byte +} + +func NewChunk(addr Address, data []byte) *chunk { + return &chunk{ + addr: addr, + sdata: data, + } +} + +func (c *chunk) Address() Address { + return c.addr +} + +func (c *chunk) Data() []byte { + return c.sdata +} + +func (self *chunk) String() string { + return fmt.Sprintf("Address: %v Chunksize: %v", self.addr.Log(), len(self.sdata)) +} + +type Address []byte + +var ZeroAddr = Address(common.Hash{}.Bytes()) + +func (a Address) Hex() string { + return fmt.Sprintf("%064x", []byte(a[:])) +} + +func (a Address) Log() string { + if len(a[:]) < 8 { + return fmt.Sprintf("%x", []byte(a[:])) + } + return fmt.Sprintf("%016x", []byte(a[:8])) +} + +func (a Address) String() string { + return fmt.Sprintf("%064x", []byte(a)) +} + +func (a Address) MarshalJSON() (out []byte, err error) { + return []byte(`"` + a.String() + `"`), nil +} + +func (a *Address) UnmarshalJSON(value []byte) error { + s := string(value) + *a = make([]byte, 32) + h := common.Hex2Bytes(s[1 : len(s)-1]) + copy(*a, h) + return nil +} + +// Proximity returns the proximity order of the MSB distance between x and y +// +// The distance metric MSB(x, y) of two equal length byte sequences x an y is the +// value of the binary integer cast of the x^y, ie., x and y bitwise xor-ed. +// the binary cast is big endian: most significant bit first (=MSB). +// +// Proximity(x, y) is a discrete logarithmic scaling of the MSB distance. +// It is defined as the reverse rank of the integer part of the base 2 +// logarithm of the distance. +// It is calculated by counting the number of common leading zeros in the (MSB) +// binary representation of the x^y. +// +// (0 farthest, 255 closest, 256 self) +func Proximity(one, other []byte) (ret int) { + b := (MaxPO-1)/8 + 1 + if b > len(one) { + b = len(one) + } + m := 8 + for i := 0; i < b; i++ { + oxo := one[i] ^ other[i] + for j := 0; j < m; j++ { + if (oxo>>uint8(7-j))&0x01 != 0 { + return i*8 + j + } + } + } + return MaxPO +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/types_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/chunk/proximity_test.go similarity index 99% rename from vendor/github.com/ethereum/go-ethereum/swarm/storage/types_test.go rename to vendor/github.com/ethereum/go-ethereum/swarm/chunk/proximity_test.go index 32907bbf..5632114b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/types_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/chunk/proximity_test.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package storage +package chunk import ( "strconv" diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs.go b/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs.go index c7aa983b..db6aefb5 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs.go @@ -24,10 +24,10 @@ import ( ) const ( - Swarmfs_Version = "0.1" - mountTimeout = time.Second * 5 - unmountTimeout = time.Second * 10 - maxFuseMounts = 5 + SwarmFSVersion = "0.1" + mountTimeout = time.Second * 5 + unmountTimeout = time.Second * 10 + maxFUSEMounts = 5 ) var ( diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs_unix.go b/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs_unix.go index 9ff55cc3..54b879a4 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs_unix.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/fuse/swarmfs_unix.go @@ -96,7 +96,7 @@ func (swarmfs *SwarmFS) Mount(mhash, mountpoint string) (*MountInfo, error) { noOfActiveMounts := len(swarmfs.activeMounts) log.Debug("swarmfs mount", "# active mounts", noOfActiveMounts) - if noOfActiveMounts >= maxFuseMounts { + if noOfActiveMounts >= maxFUSEMounts { return nil, errMaxMountCount } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/discovery_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/discovery_test.go index dd3299c0..ea0d776e 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/discovery_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/discovery_test.go @@ -29,7 +29,10 @@ import ( */ func TestDiscovery(t *testing.T) { params := NewHiveParams() - s, pp := newHiveTester(t, params, 1, nil) + s, pp, err := newHiveTester(t, params, 1, nil) + if err != nil { + t.Fatal(err) + } node := s.Nodes[0] raddr := NewAddr(node) @@ -40,7 +43,7 @@ func TestDiscovery(t *testing.T) { defer pp.Stop() // send subPeersMsg to the peer - err := s.TestExchanges(p2ptest.Exchange{ + err = s.TestExchanges(p2ptest.Exchange{ Label: "outgoing subPeersMsg", Expects: []p2ptest.Expect{ { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/enr.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/enr.go new file mode 100644 index 00000000..6d7fa2ae --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/enr.go @@ -0,0 +1,93 @@ +package network + +import ( + "fmt" + "io" + + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/protocols" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/swarm/log" +) + +// ENRAddrEntry is the entry type to store the bzz key in the enode +type ENRAddrEntry struct { + data []byte +} + +func NewENRAddrEntry(addr []byte) *ENRAddrEntry { + return &ENRAddrEntry{ + data: addr, + } +} + +func (b ENRAddrEntry) Address() []byte { + return b.data +} + +// ENRKey implements enr.Entry +func (b ENRAddrEntry) ENRKey() string { + return "bzzkey" +} + +// EncodeRLP implements rlp.Encoder +func (b ENRAddrEntry) EncodeRLP(w io.Writer) error { + log.Debug("in encoderlp", "b", b, "p", fmt.Sprintf("%p", &b)) + return rlp.Encode(w, &b.data) +} + +// DecodeRLP implements rlp.Decoder +func (b *ENRAddrEntry) DecodeRLP(s *rlp.Stream) error { + byt, err := s.Bytes() + if err != nil { + return err + } + b.data = byt + log.Debug("in decoderlp", "b", b, "p", fmt.Sprintf("%p", &b)) + return nil +} + +type ENRLightNodeEntry bool + +func (b ENRLightNodeEntry) ENRKey() string { + return "bzzlightnode" +} + +type ENRBootNodeEntry bool + +func (b ENRBootNodeEntry) ENRKey() string { + return "bzzbootnode" +} + +func getENRBzzPeer(p *p2p.Peer, rw p2p.MsgReadWriter, spec *protocols.Spec) *BzzPeer { + var lightnode ENRLightNodeEntry + var bootnode ENRBootNodeEntry + + // retrieve the ENR Record data + record := p.Node().Record() + record.Load(&lightnode) + record.Load(&bootnode) + + // get the address; separate function as long as we need swarm/network:NewAddr() to call it + addr := getENRBzzAddr(p.Node()) + + // build the peer using the retrieved data + return &BzzPeer{ + Peer: protocols.NewPeer(p, rw, spec), + LightNode: bool(lightnode), + BzzAddr: addr, + } +} + +func getENRBzzAddr(nod *enode.Node) *BzzAddr { + var addr ENRAddrEntry + + record := nod.Record() + record.Load(&addr) + + return &BzzAddr{ + OAddr: addr.data, + UAddr: []byte(nod.String()), + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/fetcher.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/fetcher.go index 6b217516..5c0dfefc 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/fetcher.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/fetcher.go @@ -18,12 +18,15 @@ package network import ( "context" + "fmt" "sync" "time" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/tracing" + olog "github.com/opentracing/opentracing-go/log" ) const ( @@ -201,24 +204,24 @@ func (f *Fetcher) run(peers *sync.Map) { // incoming request case hopCount = <-f.requestC: - log.Trace("new request", "request addr", f.addr) // 2) chunk is requested, set requested flag // launch a request iff none been launched yet doRequest = !requested + log.Trace("new request", "request addr", f.addr, "doRequest", doRequest) requested = true // peer we requested from is gone. fall back to another // and remove the peer from the peers map case id := <-gone: - log.Trace("peer gone", "peer id", id.String(), "request addr", f.addr) peers.Delete(id.String()) doRequest = requested + log.Trace("peer gone", "peer id", id.String(), "request addr", f.addr, "doRequest", doRequest) // search timeout: too much time passed since the last request, // extend the search to a new peer if we can find one case <-waitC: - log.Trace("search timed out: requesting", "request addr", f.addr) doRequest = requested + log.Trace("search timed out: requesting", "request addr", f.addr, "doRequest", doRequest) // all Fetcher context closed, can quit case <-f.ctx.Done(): @@ -285,6 +288,7 @@ func (f *Fetcher) doRequest(gone chan *enode.ID, peersToSkip *sync.Map, sources for i = 0; i < len(sources); i++ { req.Source = sources[i] var err error + log.Trace("fetcher.doRequest", "request addr", f.addr, "peer", req.Source.String()) sourceID, quit, err = f.protoRequestFunc(f.ctx, req) if err == nil { // remove the peer from known sources @@ -318,6 +322,15 @@ func (f *Fetcher) doRequest(gone chan *enode.ID, peersToSkip *sync.Map, sources gone <- sourceID case <-f.ctx.Done(): } + + // finish the request span + spanId := fmt.Sprintf("stream.send.request.%v.%v", *sourceID, req.Addr) + span := tracing.ShiftSpanByKey(spanId) + + if span != nil { + span.LogFields(olog.String("finish", "from doRequest")) + span.Finish() + } }() return sources, nil } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/hive_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/hive_test.go index fea4347e..ddae95a4 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/hive_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/hive_test.go @@ -22,31 +22,43 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/crypto" p2ptest "github.com/ethereum/go-ethereum/p2p/testing" "github.com/ethereum/go-ethereum/swarm/state" ) -func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive) { +func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive, error) { // setup - addr := RandomAddr() // tested peers peer address - to := NewKademlia(addr.OAddr, NewKadParams()) + prvkey, err := crypto.GenerateKey() + if err != nil { + return nil, nil, err + } + addr := PrivateKeyToBzzKey(prvkey) + to := NewKademlia(addr, NewKadParams()) pp := NewHive(params, to, store) // hive - return newBzzBaseTester(t, n, addr, DiscoverySpec, pp.Run), pp + bt, err := newBzzBaseTester(t, n, prvkey, DiscoverySpec, pp.Run) + if err != nil { + return nil, nil, err + } + return bt, pp, nil } // TestRegisterAndConnect verifies that the protocol runs successfully // and that the peer connection exists afterwards func TestRegisterAndConnect(t *testing.T) { params := NewHiveParams() - s, pp := newHiveTester(t, params, 1, nil) + s, pp, err := newHiveTester(t, params, 1, nil) + if err != nil { + t.Fatal(err) + } node := s.Nodes[0] raddr := NewAddr(node) pp.Register(raddr) // start the hive - err := pp.Start(s.Server) + err = pp.Start(s.Server) if err != nil { t.Fatal(err) } @@ -109,8 +121,10 @@ func TestHiveStatePersistance(t *testing.T) { } params := NewHiveParams() - s, pp := newHiveTester(t, params, 5, store) - + s, pp, err := newHiveTester(t, params, 5, store) + if err != nil { + t.Fatal(err) + } peers := make(map[string]bool) for _, node := range s.Nodes { raddr := NewAddr(node) @@ -133,7 +147,10 @@ func TestHiveStatePersistance(t *testing.T) { t.Fatal(err) } - s1, pp := newHiveTester(t, params, 0, persistedStore) + s1, pp, err := newHiveTester(t, params, 0, persistedStore) + if err != nil { + t.Fatal(err) + } // start the hive and check that we know of all expected peers pp.Start(s1.Server) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/kademlia.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/kademlia.go index 146f3910..304f9cd7 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/kademlia.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/kademlia.go @@ -140,6 +140,7 @@ func (k *Kademlia) Register(peers ...*BzzAddr) error { defer k.lock.Unlock() var known, size int for _, p := range peers { + log.Trace("kademlia trying to register", "addr", p) // error if self received, peer should know better // and should be punished for this if bytes.Equal(p.Address(), k.base) { @@ -149,10 +150,22 @@ func (k *Kademlia) Register(peers ...*BzzAddr) error { k.addrs, _, found, _ = pot.Swap(k.addrs, p, Pof, func(v pot.Val) pot.Val { // if not found if v == nil { + log.Trace("registering new peer", "addr", p) // insert new offline peer into conns return newEntry(p) } - // found among known peers, do nothing + + e := v.(*entry) + + // if underlay address is different, still add + if !bytes.Equal(e.BzzAddr.UAddr, p.UAddr) { + log.Trace("underlay addr is different, so add again", "new", p, "old", e.BzzAddr) + // insert new offline peer into conns + return newEntry(p) + } + + log.Trace("found among known peers, underlay addr is same, do nothing", "new", p, "old", e.BzzAddr) + return v }) if found { @@ -333,6 +346,18 @@ func (k *Kademlia) NeighbourhoodDepthC() <-chan int { return k.nDepthC } +// CloseNeighbourhoodDepthC closes the channel returned by +// NeighbourhoodDepthC and stops sending neighbourhood change. +func (k *Kademlia) CloseNeighbourhoodDepthC() { + k.lock.Lock() + defer k.lock.Unlock() + + if k.nDepthC != nil { + close(k.nDepthC) + k.nDepthC = nil + } +} + // sendNeighbourhoodDepthChange sends new neighbourhood depth to k.nDepth channel // if it is initialized. func (k *Kademlia) sendNeighbourhoodDepthChange() { @@ -362,6 +387,18 @@ func (k *Kademlia) AddrCountC() <-chan int { return k.addrCountC } +// CloseAddrCountC closes the channel returned by +// AddrCountC and stops sending address count change. +func (k *Kademlia) CloseAddrCountC() { + k.lock.Lock() + defer k.lock.Unlock() + + if k.addrCountC != nil { + close(k.addrCountC) + k.addrCountC = nil + } +} + // Off removes a peer from among live peers func (k *Kademlia) Off(p *Peer) { k.lock.Lock() @@ -393,6 +430,18 @@ func (k *Kademlia) Off(p *Peer) { } } +func (k *Kademlia) ListKnown() []*BzzAddr { + res := []*BzzAddr{} + + k.addrs.Each(func(val pot.Val) bool { + e := val.(*entry) + res = append(res, e.BzzAddr) + return true + }) + + return res +} + // EachConn is an iterator with args (base, po, f) applies f to each live peer // that has proximity order po or less as measured from the base // if base is nil, kademlia base address is used diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/network.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/network.go new file mode 100644 index 00000000..c5c7e9b2 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/network.go @@ -0,0 +1,105 @@ +package network + +import ( + "crypto/ecdsa" + "fmt" + "net" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" +) + +// BzzAddr implements the PeerAddr interface +type BzzAddr struct { + OAddr []byte + UAddr []byte +} + +// Address implements OverlayPeer interface to be used in Overlay. +func (a *BzzAddr) Address() []byte { + return a.OAddr +} + +// Over returns the overlay address. +func (a *BzzAddr) Over() []byte { + return a.OAddr +} + +// Under returns the underlay address. +func (a *BzzAddr) Under() []byte { + return a.UAddr +} + +// ID returns the node identifier in the underlay. +func (a *BzzAddr) ID() enode.ID { + n, err := enode.ParseV4(string(a.UAddr)) + if err != nil { + return enode.ID{} + } + return n.ID() +} + +// Update updates the underlay address of a peer record +func (a *BzzAddr) Update(na *BzzAddr) *BzzAddr { + return &BzzAddr{a.OAddr, na.UAddr} +} + +// String pretty prints the address +func (a *BzzAddr) String() string { + return fmt.Sprintf("%x <%s>", a.OAddr, a.UAddr) +} + +// RandomAddr is a utility method generating an address from a public key +func RandomAddr() *BzzAddr { + key, err := crypto.GenerateKey() + if err != nil { + panic("unable to generate key") + } + node := enode.NewV4(&key.PublicKey, net.IP{127, 0, 0, 1}, 30303, 30303) + return NewAddr(node) +} + +// NewAddr constucts a BzzAddr from a node record. +func NewAddr(node *enode.Node) *BzzAddr { + return &BzzAddr{OAddr: node.ID().Bytes(), UAddr: []byte(node.String())} +} + +func PrivateKeyToBzzKey(prvKey *ecdsa.PrivateKey) []byte { + pubkeyBytes := crypto.FromECDSAPub(&prvKey.PublicKey) + return crypto.Keccak256Hash(pubkeyBytes).Bytes() +} + +type EnodeParams struct { + PrivateKey *ecdsa.PrivateKey + EnodeKey *ecdsa.PrivateKey + Lightnode bool + Bootnode bool +} + +func NewEnodeRecord(params *EnodeParams) (*enr.Record, error) { + + if params.PrivateKey == nil { + return nil, fmt.Errorf("all param private keys must be defined") + } + + bzzkeybytes := PrivateKeyToBzzKey(params.PrivateKey) + + var record enr.Record + record.Set(NewENRAddrEntry(bzzkeybytes)) + record.Set(ENRLightNodeEntry(params.Lightnode)) + record.Set(ENRBootNodeEntry(params.Bootnode)) + return &record, nil +} + +func NewEnode(params *EnodeParams) (*enode.Node, error) { + record, err := NewEnodeRecord(params) + if err != nil { + return nil, err + } + err = enode.SignV4(record, params.EnodeKey) + if err != nil { + return nil, fmt.Errorf("ENR create fail: %v", err) + } + return enode.New(enode.V4ID{}, record) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/priorityqueue/priorityqueue.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/priorityqueue/priorityqueue.go index 53850260..056e85ec 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/priorityqueue/priorityqueue.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/priorityqueue/priorityqueue.go @@ -28,8 +28,9 @@ package priorityqueue import ( "context" "errors" + "time" - "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" ) var ( @@ -69,13 +70,16 @@ READ: case <-ctx.Done(): return case x := <-q: - log.Trace("priority.queue f(x)", "p", p, "len(Queues[p])", len(pq.Queues[p])) - f(x) + val := x.(struct { + v interface{} + t time.Time + }) + f(val.v) + metrics.GetOrRegisterResettingTimer("pq.run", nil).UpdateSince(val.t) p = top default: if p > 0 { p-- - log.Trace("priority.queue p > 0", "p", p) continue READ } p = top @@ -83,7 +87,6 @@ READ: case <-ctx.Done(): return case <-pq.wakeup: - log.Trace("priority.queue wakeup", "p", p) } } } @@ -95,9 +98,15 @@ func (pq *PriorityQueue) Push(x interface{}, p int) error { if p < 0 || p >= len(pq.Queues) { return errBadPriority } - log.Trace("priority.queue push", "p", p, "len(Queues[p])", len(pq.Queues[p])) + val := struct { + v interface{} + t time.Time + }{ + x, + time.Now(), + } select { - case pq.Queues[p] <- x: + case pq.Queues[p] <- val: default: return ErrContention } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol.go index 6f8eadad..fcceb5c3 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol.go @@ -20,11 +20,9 @@ import ( "context" "errors" "fmt" - "net" "sync" "time" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/protocols" @@ -332,58 +330,3 @@ func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool) { return handshake, found } - -// BzzAddr implements the PeerAddr interface -type BzzAddr struct { - OAddr []byte - UAddr []byte -} - -// Address implements OverlayPeer interface to be used in Overlay. -func (a *BzzAddr) Address() []byte { - return a.OAddr -} - -// Over returns the overlay address. -func (a *BzzAddr) Over() []byte { - return a.OAddr -} - -// Under returns the underlay address. -func (a *BzzAddr) Under() []byte { - return a.UAddr -} - -// ID returns the node identifier in the underlay. -func (a *BzzAddr) ID() enode.ID { - n, err := enode.ParseV4(string(a.UAddr)) - if err != nil { - return enode.ID{} - } - return n.ID() -} - -// Update updates the underlay address of a peer record -func (a *BzzAddr) Update(na *BzzAddr) *BzzAddr { - return &BzzAddr{a.OAddr, na.UAddr} -} - -// String pretty prints the address -func (a *BzzAddr) String() string { - return fmt.Sprintf("%x <%s>", a.OAddr, a.UAddr) -} - -// RandomAddr is a utility method generating an address from a public key -func RandomAddr() *BzzAddr { - key, err := crypto.GenerateKey() - if err != nil { - panic("unable to generate key") - } - node := enode.NewV4(&key.PublicKey, net.IP{127, 0, 0, 1}, 30303, 30303) - return NewAddr(node) -} - -// NewAddr constucts a BzzAddr from a node record. -func NewAddr(node *enode.Node) *BzzAddr { - return &BzzAddr{OAddr: node.ID().Bytes(), UAddr: []byte(node.String())} -} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol_test.go index 64ce7ba4..1e7bb04a 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/protocol_test.go @@ -17,15 +17,18 @@ package network import ( + "crypto/ecdsa" "flag" "fmt" "os" "testing" "time" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/protocols" p2ptest "github.com/ethereum/go-ethereum/p2p/testing" ) @@ -67,7 +70,7 @@ func HandshakeMsgExchange(lhs, rhs *HandshakeMsg, id enode.ID) []p2ptest.Exchang } } -func newBzzBaseTester(t *testing.T, n int, addr *BzzAddr, spec *protocols.Spec, run func(*BzzPeer) error) *bzzTester { +func newBzzBaseTester(t *testing.T, n int, prvkey *ecdsa.PrivateKey, spec *protocols.Spec, run func(*BzzPeer) error) (*bzzTester, error) { cs := make(map[string]chan bool) srv := func(p *BzzPeer) error { @@ -83,9 +86,22 @@ func newBzzBaseTester(t *testing.T, n int, addr *BzzAddr, spec *protocols.Spec, return srv(&BzzPeer{Peer: protocols.NewPeer(p, rw, spec), BzzAddr: NewAddr(p.Node())}) } - s := p2ptest.NewProtocolTester(addr.ID(), n, protocol) + s := p2ptest.NewProtocolTester(prvkey, n, protocol) + var record enr.Record + bzzKey := PrivateKeyToBzzKey(prvkey) + record.Set(NewENRAddrEntry(bzzKey)) + err := enode.SignV4(&record, prvkey) + if err != nil { + return nil, fmt.Errorf("unable to generate ENR: %v", err) + } + nod, err := enode.New(enode.V4ID{}, &record) + if err != nil { + return nil, fmt.Errorf("unable to create enode: %v", err) + } + addr := getENRBzzAddr(nod) for _, node := range s.Nodes { + log.Warn("node", "node", node) cs[node.ID().String()] = make(chan bool) } @@ -93,7 +109,7 @@ func newBzzBaseTester(t *testing.T, n int, addr *BzzAddr, spec *protocols.Spec, addr: addr, ProtocolTester: s, cs: cs, - } + }, nil } type bzzTester struct { @@ -116,15 +132,28 @@ func newBzz(addr *BzzAddr, lightNode bool) *Bzz { return bzz } -func newBzzHandshakeTester(n int, addr *BzzAddr, lightNode bool) *bzzTester { +func newBzzHandshakeTester(n int, prvkey *ecdsa.PrivateKey, lightNode bool) (*bzzTester, error) { + + var record enr.Record + bzzkey := PrivateKeyToBzzKey(prvkey) + record.Set(NewENRAddrEntry(bzzkey)) + record.Set(ENRLightNodeEntry(lightNode)) + err := enode.SignV4(&record, prvkey) + if err != nil { + return nil, err + } + nod, err := enode.New(enode.V4ID{}, &record) + addr := getENRBzzAddr(nod) + bzz := newBzz(addr, lightNode) - pt := p2ptest.NewProtocolTester(addr.ID(), n, bzz.runBzz) + + pt := p2ptest.NewProtocolTester(prvkey, n, bzz.runBzz) return &bzzTester{ addr: addr, ProtocolTester: pt, bzz: bzz, - } + }, nil } // should test handshakes in one exchange? parallelisation @@ -165,12 +194,18 @@ func correctBzzHandshake(addr *BzzAddr, lightNode bool) *HandshakeMsg { func TestBzzHandshakeNetworkIDMismatch(t *testing.T) { lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) + prvkey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } + s, err := newBzzHandshakeTester(1, prvkey, lightNode) + if err != nil { + t.Fatal(err) + } node := s.Nodes[0] - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), + err = s.testHandshake( + correctBzzHandshake(s.addr, lightNode), &HandshakeMsg{Version: TestProtocolVersion, NetworkID: 321, Addr: NewAddr(node)}, &p2ptest.Disconnect{Peer: node.ID(), Error: fmt.Errorf("Handshake error: Message handler error: (msg code 0): network id mismatch 321 (!= 3)")}, ) @@ -182,12 +217,18 @@ func TestBzzHandshakeNetworkIDMismatch(t *testing.T) { func TestBzzHandshakeVersionMismatch(t *testing.T) { lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) + prvkey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } + s, err := newBzzHandshakeTester(1, prvkey, lightNode) + if err != nil { + t.Fatal(err) + } node := s.Nodes[0] - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), + err = s.testHandshake( + correctBzzHandshake(s.addr, lightNode), &HandshakeMsg{Version: 0, NetworkID: TestProtocolNetworkID, Addr: NewAddr(node)}, &p2ptest.Disconnect{Peer: node.ID(), Error: fmt.Errorf("Handshake error: Message handler error: (msg code 0): version mismatch 0 (!= %d)", TestProtocolVersion)}, ) @@ -199,12 +240,18 @@ func TestBzzHandshakeVersionMismatch(t *testing.T) { func TestBzzHandshakeSuccess(t *testing.T) { lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) + prvkey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } + s, err := newBzzHandshakeTester(1, prvkey, lightNode) + if err != nil { + t.Fatal(err) + } node := s.Nodes[0] - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), + err = s.testHandshake( + correctBzzHandshake(s.addr, lightNode), &HandshakeMsg{Version: TestProtocolVersion, NetworkID: TestProtocolNetworkID, Addr: NewAddr(node)}, ) @@ -224,14 +271,20 @@ func TestBzzHandshakeLightNode(t *testing.T) { for _, test := range lightNodeTests { t.Run(test.name, func(t *testing.T) { - randomAddr := RandomAddr() - pt := newBzzHandshakeTester(1, randomAddr, false) + prvkey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } + pt, err := newBzzHandshakeTester(1, prvkey, false) + if err != nil { + t.Fatal(err) + } node := pt.Nodes[0] addr := NewAddr(node) - err := pt.testHandshake( - correctBzzHandshake(randomAddr, false), + err = pt.testHandshake( + correctBzzHandshake(pt.addr, false), &HandshakeMsg{Version: TestProtocolVersion, NetworkID: TestProtocolNetworkID, Addr: addr, LightNode: test.lightNode}, ) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia.go index c58d402b..00e870a0 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia.go @@ -18,12 +18,14 @@ package simulation import ( "context" + "encoding/binary" "encoding/hex" "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations" "github.com/ethereum/go-ethereum/swarm/network" ) @@ -58,7 +60,7 @@ func (s *Simulation) WaitTillHealthy(ctx context.Context) (ill map[enode.ID]*net for k := range ill { delete(ill, k) } - log.Debug("kademlia health check", "addr count", len(addrs)) + log.Debug("kademlia health check", "addr count", len(addrs), "kad len", len(kademlias)) for id, k := range kademlias { //PeerPot for this node addr := common.Bytes2Hex(k.BaseAddr()) @@ -70,7 +72,7 @@ func (s *Simulation) WaitTillHealthy(ctx context.Context) (ill map[enode.ID]*net log.Debug("kademlia", "connectNN", h.ConnectNN, "knowNN", h.KnowNN) log.Debug("kademlia", "health", h.ConnectNN && h.KnowNN, "addr", hex.EncodeToString(k.BaseAddr()), "node", id) log.Debug("kademlia", "ill condition", !h.ConnectNN, "addr", hex.EncodeToString(k.BaseAddr()), "node", id) - if !h.ConnectNN { + if !h.Healthy() { ill[id] = k } } @@ -85,6 +87,7 @@ func (s *Simulation) WaitTillHealthy(ctx context.Context) (ill map[enode.ID]*net // in simulation bucket. func (s *Simulation) kademlias() (ks map[enode.ID]*network.Kademlia) { items := s.UpNodesItems(BucketKeyKademlia) + log.Debug("kademlia len items", "len", len(items)) ks = make(map[enode.ID]*network.Kademlia, len(items)) for id, v := range items { k, ok := v.(*network.Kademlia) @@ -95,3 +98,106 @@ func (s *Simulation) kademlias() (ks map[enode.ID]*network.Kademlia) { } return ks } + +// WaitTillSnapshotRecreated is blocking until all the connections specified +// in the snapshot are registered in the kademlia. +// It differs from WaitTillHealthy, which waits only until all the kademlias are +// healthy (it might happen even before all the connections are established). +func (s *Simulation) WaitTillSnapshotRecreated(ctx context.Context, snap *simulations.Snapshot) error { + expected := getSnapshotConnections(snap.Conns) + ticker := time.NewTicker(150 * time.Millisecond) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return ctx.Err() + case <-ticker.C: + actual := s.getActualConnections() + if isAllDeployed(expected, actual) { + return nil + } + } + } +} + +func (s *Simulation) getActualConnections() (res []uint64) { + kademlias := s.kademlias() + for base, k := range kademlias { + k.EachConn(base[:], 256, func(p *network.Peer, _ int) bool { + res = append(res, getConnectionHash(base, p.ID())) + return true + }) + } + + // only list those connections that appear twice (both peers should recognize connection as active) + res = removeDuplicatesAndSingletons(res) + return res +} + +func getSnapshotConnections(conns []simulations.Conn) (res []uint64) { + for _, c := range conns { + res = append(res, getConnectionHash(c.One, c.Other)) + } + return res +} + +// returns an integer connection identifier (similar to 8-byte hash) +func getConnectionHash(a, b enode.ID) uint64 { + var h [8]byte + for i := 0; i < 8; i++ { + h[i] = a[i] ^ b[i] + } + res := binary.LittleEndian.Uint64(h[:]) + return res +} + +// returns true if all connections in expected are listed in actual +func isAllDeployed(expected []uint64, actual []uint64) bool { + if len(expected) == 0 { + return true + } + + exp := make([]uint64, len(expected)) + copy(exp, expected) + for _, c := range actual { + // remove value c from exp + for i := 0; i < len(exp); i++ { + if exp[i] == c { + exp = removeListElement(exp, i) + if len(exp) == 0 { + return true + } + } + } + } + return len(exp) == 0 +} + +func removeListElement(arr []uint64, i int) []uint64 { + last := len(arr) - 1 + arr[i] = arr[last] + arr = arr[:last] + return arr +} + +func removeDuplicatesAndSingletons(arr []uint64) []uint64 { + for i := 0; i < len(arr); { + found := false + for j := i + 1; j < len(arr); j++ { + if arr[i] == arr[j] { + arr = removeListElement(arr, j) // remove duplicate + found = true + break + } + } + + if found { + i++ + } else { + arr = removeListElement(arr, i) // remove singleton + } + } + + return arr +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia_test.go index 36b244d3..0ac1e780 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/kademlia_test.go @@ -22,18 +22,115 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p/simulations/adapters" "github.com/ethereum/go-ethereum/swarm/network" ) +/* + TestWaitTillHealthy tests that we indeed get a healthy network after we wait for it. + For this to be tested, a bit of a snake tail bite needs to happen: + * First we create a first simulation + * Run it as nodes connected in a ring + * Wait until the network is healthy + * Then we create a snapshot + * With this snapshot we create a new simulation + * This simulation is expected to have a healthy configuration, as it uses the snapshot + * Thus we just iterate all nodes and check that their kademlias are healthy + * If all kademlias are healthy, the test succeeded, otherwise it failed +*/ func TestWaitTillHealthy(t *testing.T) { - t.Skip("WaitTillHealthy depends on discovery, which relies on a reliable SuggestPeer, which is not reliable") - sim := New(map[string]ServiceFunc{ + testNodesNum := 10 + + // create the first simulation + sim := New(createSimServiceMap(true)) + + // connect and... + nodeIDs, err := sim.AddNodesAndConnectRing(testNodesNum) + if err != nil { + t.Fatal(err) + } + + // array of all overlay addresses + var addrs [][]byte + // iterate once to be able to build the peer map + for _, node := range nodeIDs { + //get the kademlia overlay address from this ID + a := node.Bytes() + //append it to the array of all overlay addresses + addrs = append(addrs, a) + } + // build a PeerPot only once + pp := network.NewPeerPotMap(network.NewKadParams().NeighbourhoodSize, addrs) + + ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) + defer cancel() + + // ...wait until healthy + ill, err := sim.WaitTillHealthy(ctx) + if err != nil { + for id, kad := range ill { + t.Log("Node", id) + t.Log(kad.String()) + } + t.Fatal(err) + } + + // now create a snapshot of this network + snap, err := sim.Net.Snapshot() + if err != nil { + t.Fatal(err) + } + + // close the initial simulation + sim.Close() + // create a control simulation + controlSim := New(createSimServiceMap(false)) + defer controlSim.Close() + + // load the snapshot into this control simulation + err = controlSim.Net.Load(snap) + if err != nil { + t.Fatal(err) + } + _, err = controlSim.WaitTillHealthy(ctx) + if err != nil { + t.Fatal(err) + } + + for _, node := range nodeIDs { + // ...get its kademlia + item, ok := controlSim.NodeItem(node, BucketKeyKademlia) + if !ok { + t.Fatal("No kademlia bucket item") + } + kad := item.(*network.Kademlia) + // get its base address + kid := common.Bytes2Hex(kad.BaseAddr()) + + //get the health info + info := kad.GetHealthInfo(pp[kid]) + log.Trace("Health info", "info", info) + // check that it is healthy + healthy := info.Healthy() + if !healthy { + t.Fatalf("Expected node %v of control simulation to be healthy, but it is not, unhealthy kademlias: %v", node, kad.String()) + } + } +} + +// createSimServiceMap returns the services map +// this function will create the sim services with or without discovery enabled +// based on the flag passed +func createSimServiceMap(discovery bool) map[string]ServiceFunc { + return map[string]ServiceFunc{ "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { addr := network.NewAddr(ctx.Config.Node()) hp := network.NewHiveParams() + hp.Discovery = discovery config := &network.BzzConfig{ OverlayAddr: addr.Over(), UnderlayAddr: addr.Under(), @@ -45,24 +142,168 @@ func TestWaitTillHealthy(t *testing.T) { b.Store(BucketKeyKademlia, kad) return network.NewBzz(config, kad, nil, nil, nil), nil, nil }, - }) - defer sim.Close() + } +} - _, err := sim.AddNodesAndConnectRing(10) +// TestWaitTillSnapshotRecreated tests that we indeed have a network +// configuration specified in the snapshot file, after we wait for it. +// +// First we create a first simulation +// Run it as nodes connected in a ring +// Wait until the network is healthy +// Then we create a snapshot +// With this snapshot we create a new simulation +// Call WaitTillSnapshotRecreated() function and wait until it returns +// Iterate the nodes and check if all the connections are successfully recreated +func TestWaitTillSnapshotRecreated(t *testing.T) { + var err error + sim := New(createSimServiceMap(true)) + _, err = sim.AddNodesAndConnectRing(16) + if err != nil { + t.Fatal(err) + } + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + _, err = sim.WaitTillHealthy(ctx) if err != nil { t.Fatal(err) } - ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) - defer cancel() - ill, err := sim.WaitTillHealthy(ctx) + originalConnections := sim.getActualConnections() + snap, err := sim.Net.Snapshot() + sim.Close() if err != nil { - for id, kad := range ill { - t.Log("Node", id) - t.Log(kad.String()) - } - if err != nil { - t.Fatal(err) + t.Fatal(err) + } + + controlSim := New(createSimServiceMap(false)) + defer controlSim.Close() + err = controlSim.Net.Load(snap) + if err != nil { + t.Fatal(err) + } + err = controlSim.WaitTillSnapshotRecreated(ctx, snap) + if err != nil { + t.Fatal(err) + } + controlConnections := controlSim.getActualConnections() + + for _, c := range originalConnections { + if !exist(controlConnections, c) { + t.Fatal("connection was not recreated") } } } + +// exist returns true if val is found in arr +func exist(arr []uint64, val uint64) bool { + for _, c := range arr { + if c == val { + return true + } + } + return false +} + +func TestRemoveDuplicatesAndSingletons(t *testing.T) { + singletons := []uint64{ + 0x3c127c6f6cb026b0, + 0x0f45190d72e71fc5, + 0xb0184c02449e0bb6, + 0xa85c7b84239c54d3, + 0xe3b0c44298fc1c14, + 0x9afbf4c8996fb924, + 0x27ae41e4649b934c, + 0xa495991b7852b855, + } + + doubles := []uint64{ + 0x1b879f878de7fc7a, + 0xc6791470521bdab4, + 0xdd34b0ee39bbccc6, + 0x4d904fbf0f31da10, + 0x6403c2560432c8f8, + 0x18954e33cf3ad847, + 0x90db00e98dc7a8a6, + 0x92886b0dfcc1809b, + } + + var arr []uint64 + arr = append(arr, doubles...) + arr = append(arr, singletons...) + arr = append(arr, doubles...) + arr = removeDuplicatesAndSingletons(arr) + + for _, i := range singletons { + if exist(arr, i) { + t.Fatalf("singleton not removed: %d", i) + } + } + + for _, i := range doubles { + if !exist(arr, i) { + t.Fatalf("wrong value removed: %d", i) + } + } + + for j := 0; j < len(doubles); j++ { + v := doubles[j] + singletons[j] + if exist(arr, v) { + t.Fatalf("non-existing value found, index: %d", j) + } + } +} + +func TestIsAllDeployed(t *testing.T) { + a := []uint64{ + 0x3c127c6f6cb026b0, + 0x0f45190d72e71fc5, + 0xb0184c02449e0bb6, + 0xa85c7b84239c54d3, + 0xe3b0c44298fc1c14, + 0x9afbf4c8996fb924, + 0x27ae41e4649b934c, + 0xa495991b7852b855, + } + + b := []uint64{ + 0x1b879f878de7fc7a, + 0xc6791470521bdab4, + 0xdd34b0ee39bbccc6, + 0x4d904fbf0f31da10, + 0x6403c2560432c8f8, + 0x18954e33cf3ad847, + 0x90db00e98dc7a8a6, + 0x92886b0dfcc1809b, + } + + var c []uint64 + c = append(c, a...) + c = append(c, b...) + + if !isAllDeployed(a, c) { + t.Fatal("isAllDeployed failed") + } + + if !isAllDeployed(b, c) { + t.Fatal("isAllDeployed failed") + } + + if isAllDeployed(c, a) { + t.Fatal("isAllDeployed failed: false positive") + } + + if isAllDeployed(c, b) { + t.Fatal("isAllDeployed failed: false positive") + } + + c = c[2:] + + if isAllDeployed(a, c) { + t.Fatal("isAllDeployed failed: false positive") + } + + if !isAllDeployed(b, c) { + t.Fatal("isAllDeployed failed") + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node.go index 24afe51a..46c2bb86 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node.go @@ -17,17 +17,26 @@ package simulation import ( + "bytes" + "context" + "crypto/ecdsa" "encoding/json" "errors" "io/ioutil" "math/rand" "os" + "sync" "time" - "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/simulations" "github.com/ethereum/go-ethereum/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/swarm/network" +) + +var ( + BucketKeyBzzPrivateKey BucketKey = "bzzprivkey" ) // NodeIDs returns NodeIDs for all nodes in the network. @@ -96,10 +105,32 @@ func (s *Simulation) AddNode(opts ...AddNodeOption) (id enode.ID, err error) { if len(conf.Services) == 0 { conf.Services = s.serviceNames } + + // add ENR records to the underlying node + // most importantly the bzz overlay address + // + // for now we have no way of setting bootnodes or lightnodes in sims + // so we just let them be set to false + // they should perhaps be possible to override them with AddNodeOption + bzzPrivateKey, err := BzzPrivateKeyFromConfig(conf) + if err != nil { + return enode.ID{}, err + } + + enodeParams := &network.EnodeParams{ + PrivateKey: bzzPrivateKey, + } + record, err := network.NewEnodeRecord(enodeParams) + conf.Record = *record + + // Add the bzz address to the node config node, err := s.Net.NewNodeWithConfig(conf) if err != nil { return id, err } + s.buckets[node.ID()] = new(sync.Map) + s.SetNodeItem(node.ID(), BucketKeyBzzPrivateKey, bzzPrivateKey) + return node.ID(), s.Net.Start(node.ID()) } @@ -198,47 +229,36 @@ func (s *Simulation) AddNodesAndConnectStar(count int, opts ...AddNodeOption) (i // UploadSnapshot uploads a snapshot to the simulation // This method tries to open the json file provided, applies the config to all nodes // and then loads the snapshot into the Simulation network -func (s *Simulation) UploadSnapshot(snapshotFile string, opts ...AddNodeOption) error { +func (s *Simulation) UploadSnapshot(ctx context.Context, snapshotFile string, opts ...AddNodeOption) error { f, err := os.Open(snapshotFile) if err != nil { return err } - defer func() { - err := f.Close() - if err != nil { - log.Error("Error closing snapshot file", "err", err) - } - }() + defer f.Close() + jsonbyte, err := ioutil.ReadAll(f) if err != nil { return err } var snap simulations.Snapshot - err = json.Unmarshal(jsonbyte, &snap) - if err != nil { + if err := json.Unmarshal(jsonbyte, &snap); err != nil { return err } //the snapshot probably has the property EnableMsgEvents not set - //just in case, set it to true! - //(we need this to wait for messages before uploading) - for _, n := range snap.Nodes { - n.Node.Config.EnableMsgEvents = true - n.Node.Config.Services = s.serviceNames + //set it to true (we need this to wait for messages before uploading) + for i := range snap.Nodes { + snap.Nodes[i].Node.Config.EnableMsgEvents = true + snap.Nodes[i].Node.Config.Services = s.serviceNames for _, o := range opts { - o(n.Node.Config) + o(snap.Nodes[i].Node.Config) } } - log.Info("Waiting for p2p connections to be established...") - - //now we can load the snapshot - err = s.Net.Load(&snap) - if err != nil { + if err := s.Net.Load(&snap); err != nil { return err } - log.Info("Snapshot loaded") - return nil + return s.WaitTillSnapshotRecreated(ctx, &snap) } // StartNode starts a node by NodeID. @@ -307,3 +327,15 @@ func (s *Simulation) StopRandomNodes(count int) (ids []enode.ID, err error) { func init() { rand.Seed(time.Now().UnixNano()) } + +// derive a private key for swarm for the node key +// returns the private key used to generate the bzz key +func BzzPrivateKeyFromConfig(conf *adapters.NodeConfig) (*ecdsa.PrivateKey, error) { + // pad the seed key some arbitrary data as ecdsa.GenerateKey takes 40 bytes seed data + privKeyBuf := append(crypto.FromECDSA(conf.PrivateKey), []byte{0x62, 0x7a, 0x7a, 0x62, 0x7a, 0x7a, 0x62, 0x7a}...) + bzzPrivateKey, err := ecdsa.GenerateKey(crypto.S256(), bytes.NewReader(privKeyBuf)) + if err != nil { + return nil, err + } + return bzzPrivateKey, nil +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node_test.go index bae5afb2..e1e20a0f 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/node_test.go @@ -289,6 +289,7 @@ func TestUploadSnapshot(t *testing.T) { HiveParams: hp, } kad := network.NewKademlia(addr.Over(), network.NewKadParams()) + b.Store(BucketKeyKademlia, kad) return network.NewBzz(config, kad, nil, nil, nil), nil, nil }, }) @@ -296,12 +297,13 @@ func TestUploadSnapshot(t *testing.T) { nodeCount := 16 log.Debug("Uploading snapshot") - err := s.UploadSnapshot(fmt.Sprintf("../stream/testing/snapshot_%d.json", nodeCount)) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + err := s.UploadSnapshot(ctx, fmt.Sprintf("../stream/testing/snapshot_%d.json", nodeCount)) if err != nil { t.Fatalf("Error uploading snapshot to simulation network: %v", err) } - ctx := context.Background() log.Debug("Starting simulation...") s.Run(ctx, func(ctx context.Context, sim *Simulation) error { log.Debug("Checking") diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/simulation.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/simulation.go index e18d19a6..5787cafd 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/simulation.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulation/simulation.go @@ -85,13 +85,16 @@ func New(services map[string]ServiceFunc) (s *Simulation) { name, serviceFunc := name, serviceFunc s.serviceNames = append(s.serviceNames, name) adapterServices[name] = func(ctx *adapters.ServiceContext) (node.Service, error) { - b := new(sync.Map) + s.mu.Lock() + defer s.mu.Unlock() + b, ok := s.buckets[ctx.Config.ID] + if !ok { + b = new(sync.Map) + } service, cleanup, err := serviceFunc(ctx, b) if err != nil { return nil, err } - s.mu.Lock() - defer s.mu.Unlock() if cleanup != nil { s.cleanupFuncs = append(s.cleanupFuncs, cleanup) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/discovery/discovery_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/discovery/discovery_test.go index 5227de3b..99a0c772 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/discovery/discovery_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/discovery/discovery_test.go @@ -27,6 +27,8 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/swarm/testutil" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" @@ -82,12 +84,19 @@ func getDbStore(nodeID string) (*state.DBStore, error) { } var ( - nodeCount = flag.Int("nodes", 32, "number of nodes to create (default 32)") + nodeCount = flag.Int("nodes", defaultNodeCount(), "number of nodes to create (default 32)") initCount = flag.Int("conns", 1, "number of originally connected peers (default 1)") loglevel = flag.Int("loglevel", 3, "verbosity of logs") rawlog = flag.Bool("rawlog", false, "remove terminal formatting from logs") ) +func defaultNodeCount() int { + if testutil.RaceEnabled { + return 8 + } + return 32 +} + func init() { flag.Parse() // register the discovery service which will run as a devp2p diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/overlay_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/overlay_test.go index 41ed5ed2..e024e2b1 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/overlay_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/simulations/overlay_test.go @@ -43,7 +43,6 @@ var ( //It also provides a documentation on the steps needed by frontends //to use the simulations func TestOverlaySim(t *testing.T) { - t.Skip("Test is flaky, see: https://github.com/ethersphere/go-ethereum/issues/592") //start the simulation log.Info("Start simulation backend") //get the simulation networ; needed to subscribe for up events diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/common_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/common_test.go index afd08d27..917c440d 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/common_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/common_test.go @@ -30,6 +30,7 @@ import ( "sync/atomic" "time" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/simulations/adapters" @@ -134,6 +135,9 @@ func netStoreAndDeliveryWithAddr(ctx *adapters.ServiceContext, bucket *sync.Map, bucket.Store(bucketKeyDB, netStore) bucket.Store(bucketKeyDelivery, delivery) bucket.Store(bucketKeyFileStore, fileStore) + // for the kademlia object, we use the global key from the simulation package, + // as the simulation will try to access it in the WaitTillHealthy with that key + bucket.Store(simulation.BucketKeyKademlia, kad) cleanup := func() { netStore.Close() @@ -180,7 +184,13 @@ func newStreamerTester(registryOptions *RegistryOptions) (*p2ptest.ProtocolTeste streamer.Close() removeDataDir() } - protocolTester := p2ptest.NewProtocolTester(addr.ID(), 1, streamer.runProtocol) + prvkey, err := crypto.GenerateKey() + if err != nil { + removeDataDir() + return nil, nil, nil, nil, err + } + + protocolTester := p2ptest.NewProtocolTester(prvkey, 1, streamer.runProtocol) err = waitForPeers(streamer, 10*time.Second, 1) if err != nil { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery.go index fae6994f..bc4f1f66 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery.go @@ -27,7 +27,9 @@ import ( "github.com/ethereum/go-ethereum/swarm/network" "github.com/ethereum/go-ethereum/swarm/spancontext" "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/tracing" opentracing "github.com/opentracing/opentracing-go" + olog "github.com/opentracing/opentracing-go/log" ) const ( @@ -143,7 +145,9 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req * var osp opentracing.Span ctx, osp = spancontext.StartSpan( ctx, - "retrieve.request") + "stream.handle.retrieve") + + osp.LogFields(olog.String("ref", req.Addr.String())) s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", true)) if err != nil { @@ -175,12 +179,16 @@ func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req * } if req.SkipCheck { syncing := false + osp.LogFields(olog.Bool("skipCheck", true)) + err = sp.Deliver(ctx, chunk, s.priority, syncing) if err != nil { log.Warn("ERROR in handleRetrieveRequestMsg", "err", err) } + osp.LogFields(olog.Bool("delivered", true)) return } + osp.LogFields(olog.Bool("skipCheck", false)) select { case streamer.deliveryC <- chunk.Address()[:]: case <-streamer.quit: @@ -207,19 +215,31 @@ type ChunkDeliveryMsgRetrieval ChunkDeliveryMsg //defines a chunk delivery for syncing (without accounting) type ChunkDeliveryMsgSyncing ChunkDeliveryMsg -// TODO: Fix context SNAFU +// chunk delivery msg is response to retrieverequest msg func (d *Delivery) handleChunkDeliveryMsg(ctx context.Context, sp *Peer, req *ChunkDeliveryMsg) error { var osp opentracing.Span ctx, osp = spancontext.StartSpan( ctx, - "chunk.delivery") + "handle.chunk.delivery") processReceivedChunksCount.Inc(1) + // retrieve the span for the originating retrieverequest + spanId := fmt.Sprintf("stream.send.request.%v.%v", sp.ID(), req.Addr) + span := tracing.ShiftSpanByKey(spanId) + + log.Trace("handle.chunk.delivery", "ref", req.Addr, "from peer", sp.ID()) + go func() { defer osp.Finish() + if span != nil { + span.LogFields(olog.String("finish", "from handleChunkDeliveryMsg")) + defer span.Finish() + } + req.peer = sp + log.Trace("handle.chunk.delivery", "put", req.Addr) err := d.chunkStore.Put(ctx, storage.NewChunk(req.Addr, req.SData)) if err != nil { if err == storage.ErrChunkInvalid { @@ -229,11 +249,14 @@ func (d *Delivery) handleChunkDeliveryMsg(ctx context.Context, sp *Peer, req *Ch req.peer.Drop(err) } } + log.Trace("handle.chunk.delivery", "done put", req.Addr, "err", err) }() return nil } -// RequestFromPeers sends a chunk retrieve request to +// RequestFromPeers sends a chunk retrieve request to a peer +// The most eligible peer that hasn't already been sent to is chosen +// TODO: define "eligible" func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) (*enode.ID, chan struct{}, error) { requestFromPeersCount.Inc(1) var sp *Peer @@ -268,11 +291,16 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) ( } } + // setting this value in the context creates a new span that can persist across the sendpriority queue and the network roundtrip + // this span will finish only when delivery is handled (or times out) + ctx = context.WithValue(ctx, tracing.StoreLabelId, "stream.send.request") + ctx = context.WithValue(ctx, tracing.StoreLabelMeta, fmt.Sprintf("%v.%v", sp.ID(), req.Addr)) + log.Trace("request.from.peers", "peer", sp.ID(), "ref", req.Addr) err := sp.SendPriority(ctx, &RetrieveRequestMsg{ Addr: req.Addr, SkipCheck: req.SkipCheck, HopCount: req.HopCount, - }, Top, "request.from.peers") + }, Top) if err != nil { return nil, nil, err } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery_test.go index 49e4a423..50b78815 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/delivery_test.go @@ -446,6 +446,12 @@ func TestDeliveryFromNodes(t *testing.T) { testDeliveryFromNodes(t, 2, dataChunkCount, false) testDeliveryFromNodes(t, 4, dataChunkCount, true) testDeliveryFromNodes(t, 4, dataChunkCount, false) + + if testutil.RaceEnabled { + // Travis cannot handle more nodes with -race; would time out. + return + } + testDeliveryFromNodes(t, 8, dataChunkCount, true) testDeliveryFromNodes(t, 8, dataChunkCount, false) testDeliveryFromNodes(t, 16, dataChunkCount, true) @@ -528,12 +534,6 @@ func testDeliveryFromNodes(t *testing.T, nodes, chunkCount int, skipCheck bool) return err } - log.Debug("Waiting for kademlia") - // TODO this does not seem to be correct usage of the function, as the simulation may have no kademlias - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - //get the pivot node's filestore item, ok := sim.NodeItem(pivot, bucketKeyFileStore) if !ok { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/messages.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/messages.go index de4e8a3b..b293724c 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/messages.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/messages.go @@ -300,7 +300,7 @@ func (p *Peer) handleOfferedHashesMsg(ctx context.Context, req *OfferedHashesMsg return } log.Trace("sending want batch", "peer", p.ID(), "stream", msg.Stream, "from", msg.From, "to", msg.To) - err := p.SendPriority(ctx, msg, c.priority, "") + err := p.SendPriority(ctx, msg, c.priority) if err != nil { log.Warn("SendPriority error", "err", err) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/peer.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/peer.go index 68da8f44..152814bd 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/peer.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/peer.go @@ -31,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/swarm/spancontext" "github.com/ethereum/go-ethereum/swarm/state" "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/tracing" opentracing "github.com/opentracing/opentracing-go" ) @@ -65,7 +66,6 @@ type Peer struct { // on creating a new client in offered hashes handler. clientParams map[Stream]*clientParams quit chan struct{} - spans sync.Map } type WrappedPriorityMsg struct { @@ -83,16 +83,10 @@ func NewPeer(peer *protocols.Peer, streamer *Registry) *Peer { clients: make(map[Stream]*client), clientParams: make(map[Stream]*clientParams), quit: make(chan struct{}), - spans: sync.Map{}, } ctx, cancel := context.WithCancel(context.Background()) go p.pq.Run(ctx, func(i interface{}) { wmsg := i.(WrappedPriorityMsg) - defer p.spans.Delete(wmsg.Context) - sp, ok := p.spans.Load(wmsg.Context) - if ok { - defer sp.(opentracing.Span).Finish() - } err := p.Send(wmsg.Context, wmsg.Msg) if err != nil { log.Error("Message send error, dropping peer", "peer", p.ID(), "err", err) @@ -107,20 +101,20 @@ func NewPeer(peer *protocols.Peer, streamer *Registry) *Peer { for { select { case <-ticker.C: - var len_maxi int - var cap_maxi int + var lenMaxi int + var capMaxi int for k := range pq.Queues { - if len_maxi < len(pq.Queues[k]) { - len_maxi = len(pq.Queues[k]) + if lenMaxi < len(pq.Queues[k]) { + lenMaxi = len(pq.Queues[k]) } - if cap_maxi < cap(pq.Queues[k]) { - cap_maxi = cap(pq.Queues[k]) + if capMaxi < cap(pq.Queues[k]) { + capMaxi = cap(pq.Queues[k]) } } - metrics.GetOrRegisterGauge(fmt.Sprintf("pq_len_%s", p.ID().TerminalString()), nil).Update(int64(len_maxi)) - metrics.GetOrRegisterGauge(fmt.Sprintf("pq_cap_%s", p.ID().TerminalString()), nil).Update(int64(cap_maxi)) + metrics.GetOrRegisterGauge(fmt.Sprintf("pq_len_%s", p.ID().TerminalString()), nil).Update(int64(lenMaxi)) + metrics.GetOrRegisterGauge(fmt.Sprintf("pq_cap_%s", p.ID().TerminalString()), nil).Update(int64(capMaxi)) case <-p.quit: return } @@ -129,6 +123,7 @@ func NewPeer(peer *protocols.Peer, streamer *Registry) *Peer { go func() { <-p.quit + cancel() }() return p @@ -158,29 +153,22 @@ func (p *Peer) Deliver(ctx context.Context, chunk storage.Chunk, priority uint8, spanName += ".retrieval" } - return p.SendPriority(ctx, msg, priority, spanName) + ctx = context.WithValue(ctx, "stream_send_tag", nil) + return p.SendPriority(ctx, msg, priority) } // SendPriority sends message to the peer using the outgoing priority queue -func (p *Peer) SendPriority(ctx context.Context, msg interface{}, priority uint8, traceId string) error { +func (p *Peer) SendPriority(ctx context.Context, msg interface{}, priority uint8) error { defer metrics.GetOrRegisterResettingTimer(fmt.Sprintf("peer.sendpriority_t.%d", priority), nil).UpdateSince(time.Now()) + ctx = tracing.StartSaveSpan(ctx) metrics.GetOrRegisterCounter(fmt.Sprintf("peer.sendpriority.%d", priority), nil).Inc(1) - if traceId != "" { - var sp opentracing.Span - ctx, sp = spancontext.StartSpan( - ctx, - traceId, - ) - p.spans.Store(ctx, sp) - } wmsg := WrappedPriorityMsg{ Context: ctx, Msg: msg, } err := p.pq.Push(wmsg, int(priority)) - if err == pq.ErrContention { - log.Warn("dropping peer on priority queue contention", "peer", p.ID()) - p.Drop(err) + if err != nil { + log.Error("err on p.pq.Push", "err", err, "peer", p.ID()) } return err } @@ -190,9 +178,12 @@ func (p *Peer) SendOfferedHashes(s *server, f, t uint64) error { var sp opentracing.Span ctx, sp := spancontext.StartSpan( context.TODO(), - "send.offered.hashes") + "send.offered.hashes", + ) defer sp.Finish() + defer metrics.GetOrRegisterResettingTimer("send.offered.hashes", nil).UpdateSince(time.Now()) + hashes, from, to, proof, err := s.setNextBatch(f, t) if err != nil { return err @@ -215,7 +206,8 @@ func (p *Peer) SendOfferedHashes(s *server, f, t uint64) error { Stream: s.stream, } log.Trace("Swarm syncer offer batch", "peer", p.ID(), "stream", s.stream, "len", len(hashes), "from", from, "to", to) - return p.SendPriority(ctx, msg, s.priority, "send.offered.hashes") + ctx = context.WithValue(ctx, "stream_send_tag", "send.offered.hashes") + return p.SendPriority(ctx, msg, s.priority) } func (p *Peer) getServer(s Stream) (*server, error) { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_retrieval_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_retrieval_test.go index afb023ae..2957999f 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_retrieval_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_retrieval_test.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/swarm/network/simulation" "github.com/ethereum/go-ethereum/swarm/state" "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/testutil" ) //constants for random file generation @@ -43,23 +44,24 @@ const ( //Files are uploaded to nodes, other nodes try to retrieve the file //Number of nodes can be provided via commandline too. func TestFileRetrieval(t *testing.T) { + var nodeCount []int + if *nodes != 0 { - err := runFileRetrievalTest(*nodes) - if err != nil { - t.Fatal(err) - } + nodeCount = []int{*nodes} } else { - nodeCnt := []int{16} - //if the `longrunning` flag has been provided - //run more test combinations + nodeCount = []int{16} + if *longrunning { - nodeCnt = append(nodeCnt, 32, 64, 128) + nodeCount = append(nodeCount, 32, 64) + } else if testutil.RaceEnabled { + nodeCount = []int{4} } - for _, n := range nodeCnt { - err := runFileRetrievalTest(n) - if err != nil { - t.Fatal(err) - } + + } + + for _, nc := range nodeCount { + if err := runFileRetrievalTest(nc); err != nil { + t.Error(err) } } } @@ -79,18 +81,17 @@ func TestRetrieval(t *testing.T) { t.Fatal(err) } } else { - var nodeCnt []int - var chnkCnt []int - //if the `longrunning` flag has been provided - //run more test combinations + nodeCnt := []int{16} + chnkCnt := []int{32} + if *longrunning { - nodeCnt = []int{16, 32, 128} + nodeCnt = []int{16, 32, 64} chnkCnt = []int{4, 32, 256} - } else { - //default test - nodeCnt = []int{16} - chnkCnt = []int{32} + } else if testutil.RaceEnabled { + nodeCnt = []int{4} + chnkCnt = []int{4} } + for _, n := range nodeCnt { for _, c := range chnkCnt { t.Run(fmt.Sprintf("TestRetrieval_%d_%d", n, c), func(t *testing.T) { @@ -111,10 +112,15 @@ var retrievalSimServiceMap = map[string]simulation.ServiceFunc{ return nil, nil, err } + syncUpdateDelay := 1 * time.Second + if *longrunning { + syncUpdateDelay = 3 * time.Second + } + r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ Retrieval: RetrievalEnabled, Syncing: SyncingAutoSubscribe, - SyncUpdateDelay: 3 * time.Second, + SyncUpdateDelay: syncUpdateDelay, }, nil) cleanup = func() { @@ -138,7 +144,7 @@ func runFileRetrievalTest(nodeCount int) error { sim := simulation.New(retrievalSimServiceMap) defer sim.Close() - log.Info("Initializing test config") + log.Info("Initializing test config", "node count", nodeCount) conf := &synctestConfig{} //map of discover ID to indexes of chunks expected at that ID @@ -148,13 +154,16 @@ func runFileRetrievalTest(nodeCount int) error { //array where the generated chunk hashes will be stored conf.hashes = make([]storage.Address, 0) - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) + ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancelSimRun() + + filename := fmt.Sprintf("testing/snapshot_%d.json", nodeCount) + err := sim.UploadSnapshot(ctx, filename) if err != nil { return err } - ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) - defer cancelSimRun() + log.Info("Starting simulation") result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { nodeIDs := sim.UpNodeIDs() @@ -179,9 +188,8 @@ func runFileRetrievalTest(nodeCount int) error { if err != nil { return err } - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } + + log.Info("network healthy, start file checks") // File retrieval check is repeated until all uploaded files are retrieved from all nodes // or until the timeout is reached. @@ -210,6 +218,8 @@ func runFileRetrievalTest(nodeCount int) error { } }) + log.Info("Simulation terminated") + if result.Error != nil { return result.Error } @@ -240,12 +250,15 @@ func runRetrievalTest(t *testing.T, chunkCount int, nodeCount int) error { //array where the generated chunk hashes will be stored conf.hashes = make([]storage.Address, 0) - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + + filename := fmt.Sprintf("testing/snapshot_%d.json", nodeCount) + err := sim.UploadSnapshot(ctx, filename) if err != nil { return err } - ctx := context.Background() result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { nodeIDs := sim.UpNodeIDs() for _, n := range nodeIDs { @@ -270,9 +283,6 @@ func runRetrievalTest(t *testing.T, chunkCount int, nodeCount int) error { if err != nil { return err } - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } // File retrieval check is repeated until all uploaded files are retrieved from all nodes // or until the timeout is reached. diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_sync_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_sync_test.go index b45d0aed..ce1e69db 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_sync_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/snapshot_sync_test.go @@ -19,7 +19,6 @@ import ( "context" "errors" "fmt" - "io/ioutil" "os" "runtime" "sync" @@ -42,8 +41,6 @@ import ( "github.com/ethereum/go-ethereum/swarm/testutil" ) -const MaxTimeout = 600 - type synctestConfig struct { addrs [][]byte hashes []storage.Address @@ -80,37 +77,31 @@ func TestSyncingViaGlobalSync(t *testing.T) { if runtime.GOOS == "darwin" && os.Getenv("TRAVIS") == "true" { t.Skip("Flaky on mac on travis") } + + if testutil.RaceEnabled { + t.Skip("Segfaults on Travis with -race") + } + //if nodes/chunks have been provided via commandline, //run the tests with these values if *nodes != 0 && *chunks != 0 { log.Info(fmt.Sprintf("Running test with %d chunks and %d nodes...", *chunks, *nodes)) testSyncingViaGlobalSync(t, *chunks, *nodes) } else { - var nodeCnt []int - var chnkCnt []int + chunkCounts := []int{4, 32} + nodeCounts := []int{32, 16} + //if the `longrunning` flag has been provided //run more test combinations if *longrunning { - chnkCnt = []int{1, 8, 32, 256, 1024} - nodeCnt = []int{16, 32, 64, 128, 256} - } else if raceTest { - // TestSyncingViaGlobalSync allocates a lot of memory - // with race detector. By reducing the number of chunks - // and nodes, memory consumption is lower and data races - // are still checked, while correctness of syncing is - // tested with more chunks and nodes in regular (!race) - // tests. - chnkCnt = []int{4} - nodeCnt = []int{16} - } else { - //default test - chnkCnt = []int{4, 32} - nodeCnt = []int{32, 16} + chunkCounts = []int{64, 128} + nodeCounts = []int{32, 64} } - for _, chnk := range chnkCnt { - for _, n := range nodeCnt { - log.Info(fmt.Sprintf("Long running test with %d chunks and %d nodes...", chnk, n)) - testSyncingViaGlobalSync(t, chnk, n) + + for _, chunkCount := range chunkCounts { + for _, n := range nodeCounts { + log.Info(fmt.Sprintf("Long running test with %d chunks and %d nodes...", chunkCount, n)) + testSyncingViaGlobalSync(t, chunkCount, n) } } } @@ -123,21 +114,7 @@ var simServiceMap = map[string]simulation.ServiceFunc{ return nil, nil, err } - var dir string - var store *state.DBStore - if raceTest { - // Use on-disk DBStore to reduce memory consumption in race tests. - dir, err = ioutil.TempDir("", "swarm-stream-") - if err != nil { - return nil, nil, err - } - store, err = state.NewDBStore(dir) - if err != nil { - return nil, nil, err - } - } else { - store = state.NewInmemoryStore() - } + store := state.NewInmemoryStore() r := NewRegistry(addr.ID(), delivery, netStore, store, &RegistryOptions{ Retrieval: RetrievalDisabled, @@ -170,20 +147,16 @@ func testSyncingViaGlobalSync(t *testing.T, chunkCount int, nodeCount int) { //array where the generated chunk hashes will be stored conf.hashes = make([]storage.Address, 0) - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) + ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) + defer cancelSimRun() + + filename := fmt.Sprintf("testing/snapshot_%d.json", nodeCount) + err := sim.UploadSnapshot(ctx, filename) if err != nil { t.Fatal(err) } - ctx, cancelSimRun := context.WithTimeout(context.Background(), 2*time.Minute) - defer cancelSimRun() - - if _, err := sim.WaitTillHealthy(ctx); err != nil { - t.Fatal(err) - } - result := runSim(conf, ctx, sim, chunkCount) - if result.Error != nil { t.Fatal(result.Error) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/stream.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/stream.go index cb591218..1038e52d 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/stream.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/stream.go @@ -75,7 +75,7 @@ const ( // subscriptionFunc is used to determine what to do in order to perform subscriptions // usually we would start to really subscribe to nodes, but for tests other functionality may be needed // (see TestRequestPeerSubscriptions in streamer_test.go) -var subscriptionFunc func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool = doRequestSubscription +var subscriptionFunc = doRequestSubscription // Registry registry for outgoing and incoming streamer constructors type Registry struct { @@ -95,6 +95,7 @@ type Registry struct { spec *protocols.Spec //this protocol's spec balance protocols.Balance //implements protocols.Balance, for accounting prices protocols.Prices //implements protocols.Prices, provides prices to accounting + quit chan struct{} // terminates registry goroutines } // RegistryOptions holds optional values for NewRegistry constructor. @@ -117,6 +118,8 @@ func NewRegistry(localID enode.ID, delivery *Delivery, syncChunkStore storage.Sy // check if retrieval has been disabled retrieval := options.Retrieval != RetrievalDisabled + quit := make(chan struct{}) + streamer := &Registry{ addr: localID, skipCheck: options.SkipCheck, @@ -128,6 +131,7 @@ func NewRegistry(localID enode.ID, delivery *Delivery, syncChunkStore storage.Sy autoRetrieval: retrieval, maxPeerServers: options.MaxPeerServers, balance: balance, + quit: quit, } streamer.setupSpec() @@ -172,25 +176,41 @@ func NewRegistry(localID enode.ID, delivery *Delivery, syncChunkStore storage.Sy go func() { defer close(out) - for i := range in { + for { select { - case <-out: - default: + case i, ok := <-in: + if !ok { + return + } + select { + case <-out: + default: + } + out <- i + case <-quit: + return } - out <- i } }() return out } + kad := streamer.delivery.kad + // get notification channels from Kademlia before returning + // from this function to avoid race with Close method and + // the goroutine created below + depthC := latestIntC(kad.NeighbourhoodDepthC()) + addressBookSizeC := latestIntC(kad.AddrCountC()) + go func() { // wait for kademlia table to be healthy - time.Sleep(options.SyncUpdateDelay) - - kad := streamer.delivery.kad - depthC := latestIntC(kad.NeighbourhoodDepthC()) - addressBookSizeC := latestIntC(kad.AddrCountC()) + // but return if Registry is closed before + select { + case <-time.After(options.SyncUpdateDelay): + case <-quit: + return + } // initial requests for syncing subscription to peers streamer.updateSyncing() @@ -229,6 +249,8 @@ func NewRegistry(localID enode.ID, delivery *Delivery, syncChunkStore storage.Sy <-timer.C } timer.Reset(options.SyncUpdateDelay) + case <-quit: + break loop } } timer.Stop() @@ -359,7 +381,7 @@ func (r *Registry) Subscribe(peerId enode.ID, s Stream, h *Range, priority uint8 } log.Debug("Subscribe ", "peer", peerId, "stream", s, "history", h) - return peer.SendPriority(context.TODO(), msg, priority, "") + return peer.SendPriority(context.TODO(), msg, priority) } func (r *Registry) Unsubscribe(peerId enode.ID, s Stream) error { @@ -398,6 +420,11 @@ func (r *Registry) Quit(peerId enode.ID, s Stream) error { } func (r *Registry) Close() error { + // Stop sending neighborhood depth change and address count + // change from Kademlia that were initiated in NewRegistry constructor. + r.delivery.kad.CloseNeighbourhoodDepthC() + r.delivery.kad.CloseAddrCountC() + close(r.quit) return r.intervalsStore.Close() } @@ -570,6 +597,16 @@ func (r *Registry) runProtocol(p *p2p.Peer, rw p2p.MsgReadWriter) error { // HandleMsg is the message handler that delegates incoming messages func (p *Peer) HandleMsg(ctx context.Context, msg interface{}) error { + select { + case <-p.streamer.quit: + log.Trace("message received after the streamer is closed", "peer", p.ID()) + // return without an error since streamer is closed and + // no messages should be handled as other subcomponents like + // storage leveldb may be closed + return nil + default: + } + switch msg := msg.(type) { case *SubscribeMsg: @@ -671,17 +708,16 @@ func peerStreamIntervalsKey(p *Peer, s Stream) string { return p.ID().String() + s.String() } -func (c client) AddInterval(start, end uint64) (err error) { +func (c *client) AddInterval(start, end uint64) (err error) { i := &intervals.Intervals{} - err = c.intervalsStore.Get(c.intervalsKey, i) - if err != nil { + if err = c.intervalsStore.Get(c.intervalsKey, i); err != nil { return err } i.Add(start, end) return c.intervalsStore.Put(c.intervalsKey, i) } -func (c client) NextInterval() (start, end uint64, err error) { +func (c *client) NextInterval() (start, end uint64, err error) { i := &intervals.Intervals{} err = c.intervalsStore.Get(c.intervalsKey, i) if err != nil { @@ -731,7 +767,7 @@ func (c *client) batchDone(p *Peer, req *OfferedHashesMsg, hashes []byte) error return err } - if err := p.SendPriority(context.TODO(), tp, c.priority, ""); err != nil { + if err := p.SendPriority(context.TODO(), tp, c.priority); err != nil { return err } if c.to > 0 && tp.Takeover.End >= c.to { @@ -739,11 +775,7 @@ func (c *client) batchDone(p *Peer, req *OfferedHashesMsg, hashes []byte) error } return nil } - // TODO: make a test case for testing if the interval is added when the batch is done - if err := c.AddInterval(req.From, req.To); err != nil { - return err - } - return nil + return c.AddInterval(req.From, req.To) } func (c *client) close() { @@ -878,7 +910,7 @@ func (r *Registry) APIs() []rpc.API { Namespace: "stream", Version: "3.0", Service: r.api, - Public: true, + Public: false, }, } } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/streamer_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/streamer_test.go index e92ee378..bdd3087b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/streamer_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/streamer_test.go @@ -21,12 +21,15 @@ import ( "context" "errors" "fmt" + "os" "strconv" "strings" "sync" "testing" "time" + "github.com/ethereum/go-ethereum/swarm/testutil" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" @@ -1178,14 +1181,20 @@ stream registration, then tests that there are subscriptions. */ func TestGetSubscriptionsRPC(t *testing.T) { + if testutil.RaceEnabled && os.Getenv("TRAVIS") == "true" { + t.Skip("flaky with -race on Travis") + // Note: related ticket https://github.com/ethersphere/go-ethereum/issues/1234 + } + // arbitrarily set to 4 nodeCount := 4 + // set the syncUpdateDelay for sync registrations to start + syncUpdateDelay := 200 * time.Millisecond // run with more nodes if `longrunning` flag is set if *longrunning { nodeCount = 64 + syncUpdateDelay = 10 * time.Second } - // set the syncUpdateDelay for sync registrations to start - syncUpdateDelay := 200 * time.Millisecond // holds the msg code for SubscribeMsg var subscribeMsgCode uint64 var ok bool @@ -1198,7 +1207,12 @@ func TestGetSubscriptionsRPC(t *testing.T) { // we use this subscriptionFunc for this test: just increases count and calls the actual subscription subscriptionFunc = func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool { - expectedMsgCount.inc() + // syncing starts after syncUpdateDelay and loops after that Duration; we only want to count at the first iteration + // in the first iteration, subs will be empty (no existing subscriptions), thus we can use this check + // this avoids flakyness + if len(subs) == 0 { + expectedMsgCount.inc() + } doRequestSubscription(r, p, bin, subs) return true } @@ -1233,22 +1247,23 @@ func TestGetSubscriptionsRPC(t *testing.T) { }) defer sim.Close() - ctx, cancelSimRun := context.WithTimeout(context.Background(), 1*time.Minute) + ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) defer cancelSimRun() - // upload a snapshot - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - t.Fatal(err) - } - // setup the filter for SubscribeMsg msgs := sim.PeerEvents( context.Background(), - sim.NodeIDs(), + sim.UpNodeIDs(), simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("stream").MsgCode(subscribeMsgCode), ) + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + filename := fmt.Sprintf("testing/snapshot_%d.json", nodeCount) + if err := sim.UploadSnapshot(ctx, filename); err != nil { + t.Fatal(err) + } + // strategy: listen to all SubscribeMsg events; after every event we wait // if after `waitDuration` no more messages are being received, we assume the // subscription phase has terminated! @@ -1258,7 +1273,10 @@ func TestGetSubscriptionsRPC(t *testing.T) { // any new subscriptions any more go func() { //for long running sims, waiting 1 sec will not be enough - waitDuration := time.Duration(nodeCount/16) * time.Second + waitDuration := 1 * time.Second + if *longrunning { + waitDuration = 3 * time.Second + } for { select { case <-ctx.Done(): @@ -1320,9 +1338,11 @@ func TestGetSubscriptionsRPC(t *testing.T) { } } } + log.Debug("All node streams counted", "realCount", realCount) } - // every node is mutually subscribed to each other, so the actual count is half of it emc := expectedMsgCount.count() + // after a subscription request, internally a live AND a history stream will be subscribed, + // thus the real count should be half of the actual request subscriptions sent if realCount/2 != emc { return fmt.Errorf("Real subscriptions and expected amount don't match; real: %d, expected: %d", realCount/2, emc) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer.go index 4fb8b934..5f03dcff 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer.go @@ -107,6 +107,11 @@ func (s *SwarmSyncerServer) SetNextBatch(from, to uint64) ([]byte, uint64, uint6 metrics.GetOrRegisterCounter("syncer.setnextbatch.iterator", nil).Inc(1) err := s.store.Iterator(from, to, s.po, func(key storage.Address, idx uint64) bool { + select { + case <-s.quit: + return false + default: + } batch = append(batch, key[:]...) i++ to = idx diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer_test.go index be0752a9..07586714 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/syncer_test.go @@ -48,7 +48,7 @@ func TestSyncerSimulation(t *testing.T) { // race detector. Allow it to finish successfully by // reducing its scope, and still check for data races // with the smallest number of nodes. - if !raceTest { + if !testutil.RaceEnabled { testSyncBetweenNodes(t, 4, dataChunkCount, true, 1) testSyncBetweenNodes(t, 8, dataChunkCount, true, 1) testSyncBetweenNodes(t, 16, dataChunkCount, true, 1) @@ -88,7 +88,7 @@ func testSyncBetweenNodes(t *testing.T, nodes, chunkCount int, skipCheck bool, p var dir string var store *state.DBStore - if raceTest { + if testutil.RaceEnabled { // Use on-disk DBStore to reduce memory consumption in race tests. dir, err = ioutil.TempDir("", "swarm-stream-") if err != nil { @@ -173,10 +173,6 @@ func testSyncBetweenNodes(t *testing.T, nodes, chunkCount int, skipCheck bool, p } } // here we distribute chunks of a random file into stores 1...nodes - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - // collect hashes in po 1 bin for each node hashes := make([][]storage.Address, nodes) totalHashes := 0 diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_128.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_128.json index 9b5eb501..d25fa51c 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_128.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_128.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","private_key":"73015943fd2c673001da6bf6658a12a22e057fc545ac0ebc78421f90f1370093","name":"node_a9e0b763852706722dc904b494293f9399c0fa32255890aa720285b8160335bb618f36b68a81b875a805384179f600defef474d486b4ea04b003ef6477ab7907","services":["streamer"],"enable_msg_events":true,"port":63042},"up":true}},{"node":{"config":{"id":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","private_key":"89cbfe6d806f2aeaee6a59667df3c3059ff7531bb33d64661586b004fcb6b831","name":"node_87e696a354d249493217dc4e0190082f30e09616873803efa376871d4b34f86f0eeb4643d4822d8a0fbcdedb27cd6ba5438e98943d358d960c4835e82261c93e","services":["streamer"],"enable_msg_events":true,"port":63043},"up":true}},{"node":{"config":{"id":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","private_key":"ff2ac479a33dc7fff5f87e4bb3078dfbcbb1567b76e35792faf104a383ebf896","name":"node_18bb6572965f4263c5a4d59a73027abc57a46122125ee58d871e95c993e6a1e8230438ce696a5f8880a08749837268b54319f7b0aa254c1a5bd453a8e9bcf84f","services":["streamer"],"enable_msg_events":true,"port":63044},"up":true}},{"node":{"config":{"id":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","private_key":"4800e21ac6431c61873444c525e207b48bb7a09ba2793b482ba6cf8cce81e353","name":"node_3103510e00a3f49a5e715719049fc8c9c67a2373a548f326458aeb6d9c75ed92b94373638fd075def0209113b4e85d972c23f064539f7b041596184e40d7f9a2","services":["streamer"],"enable_msg_events":true,"port":63045},"up":true}},{"node":{"config":{"id":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","private_key":"7e26b011ae2eabac951145e7840169b1f279577c06c40b4ba3a62da3ddb58de5","name":"node_077d2d032874e5ce70e9b928b7fe72c0326ba92394e16245e31d48b5731d3d32bfd86acf40825decff54bcd735e9ebfd94eba677c418ea7007baec9db4af676d","services":["streamer"],"enable_msg_events":true,"port":63046},"up":true}},{"node":{"config":{"id":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","private_key":"1fbf6b44eeb20ef012046cf8b7d3400ef3e586586aaf1cf6a2e5115ff5e3d868","name":"node_d90a81a583c82d626b92f27244f027da4a0ae76e6d3bdc1de0af7be01798f1fb04b34ce60c6d8651a39d7a70915438a4aa63e5adf844a9f7e38dbf0b1dba754d","services":["streamer"],"enable_msg_events":true,"port":63047},"up":true}},{"node":{"config":{"id":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","private_key":"f32eafbb366e4b7655d302a06aac2e62ff8f4b9c07bb18175e58e534193b8554","name":"node_31ac37862416c0e229c4a088ec179f23bdd1bf12dd464eb11c630ad531d7c3438671862e5458e2f6fbb32b857f857e6b8c17e5d93eb29a0e78bb5a65d7eb648c","services":["streamer"],"enable_msg_events":true,"port":63048},"up":true}},{"node":{"config":{"id":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","private_key":"6a809d9de0380db0b8bae8769cf41f9b05576137d0e2eefa69b7ddd921c6ac77","name":"node_1e3c83cabbe6852c987ae521b7fcb33185cf855c59b6235ebb8e57a6f860ccc159ddc01b4a21d251c8faca4559ceb271e046a51493ba148c0d3aed97ad208969","services":["streamer"],"enable_msg_events":true,"port":63049},"up":true}},{"node":{"config":{"id":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","private_key":"f23b80b698ec97210ddaa65807a07cee7b411018ddd96c9d700e92a83120cf9e","name":"node_2fdb4382c4bc2950948a8cff13a7df65627bc0b20661cae20fd29acab166c97701594ee3151d75c006ba86d1d68b624b1d1f78e3d1e2fc297844956ef82208a8","services":["streamer"],"enable_msg_events":true,"port":63050},"up":true}},{"node":{"config":{"id":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","private_key":"d2d74e454118a6e150810c74080ee7707b92b4575e7fe13c8887caf521cc734d","name":"node_87fce129511a1be2777052d24b606acdfe7067f4e874ab04674a68664b378ea208975f7269a72af889d3d23cd930b6a181afa2cdef3f9f9491f715bd96ad8dc0","services":["streamer"],"enable_msg_events":true,"port":63051},"up":true}},{"node":{"config":{"id":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","private_key":"cdc72a1d2e475117e77abccdee1816e4d84fb059d712b717e8bd063239b6fd58","name":"node_c773af3af01ee8ab9fa8d06987baf4f10c394fdd386d69b7a7362f4b68fd6fc082337d3b33a19d584c5801a3e9198225d7b61f6629e34ce823be70908339f4c7","services":["streamer"],"enable_msg_events":true,"port":63052},"up":true}},{"node":{"config":{"id":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","private_key":"b1b2452fe8ea070ff3b181fdc538144e1231f0c6f467713712662375dc6c4bb1","name":"node_56b25623ac935f3a8aac1e2603a6bd15ace1e5714671954b47f2cab960cf47922828f415105602408d0a732a893ebeea6f9afab7f889bb235c81589548d09391","services":["streamer"],"enable_msg_events":true,"port":63053},"up":true}},{"node":{"config":{"id":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","private_key":"e87535b0ec914ff93ea21f722eff61dd6cfea4f5542f68aab0af93c58e2afc25","name":"node_09b60de1e85bb6f7d2caf5b1ab58204d7d04531ece300dcd7bcc9157b8b3ef2a182758808a0eec6056034f29f52caadb7c690f498c1c8832ff7a6a9ecff308bd","services":["streamer"],"enable_msg_events":true,"port":63054},"up":true}},{"node":{"config":{"id":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","private_key":"3ae9a961f597c04b695a6d25fd0e6e47b131854f55f89d8ac25cce7411aa4107","name":"node_f2ea93f43be9d0c3fa21f1496dc13c778977a6afdcba24c8b146de7dca2cdde62a5b792aab969e5b4b6c56f63066b336580d911f206049cc24cac32a25fc4306","services":["streamer"],"enable_msg_events":true,"port":63055},"up":true}},{"node":{"config":{"id":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","private_key":"1676fda16b41e3ec275f0d30ad691055248be71252ad15422b9c0260671aaf4c","name":"node_872cdbb6d74fb55fd2d51877ef7804bdd2eeb6de0297eb2ce18b67e52379b147d54a46d2385ec9293eb21736bed4191d92c5c75e8e81fc5a6c691970e019f570","services":["streamer"],"enable_msg_events":true,"port":63056},"up":true}},{"node":{"config":{"id":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","private_key":"6c989b24f2387e5a639effc8cd15b6d60c587fd14615496c9463d1f1a7ff6ad5","name":"node_da3e0fd71eb96ba2cab7f920d32f5425d1aad41d00765fdffb0b215d9dd5b60e2bc5929eafebee5b2b5a11aec164e141beff19d828aac7d1fabd3ffb0bfb8450","services":["streamer"],"enable_msg_events":true,"port":63057},"up":true}},{"node":{"config":{"id":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","private_key":"a1befe78e67ca8b4972ba564c3bd03ad2ca6b996ded22166468d7a268a4c77d3","name":"node_489660042a8867d90a16ebb013968db26ca3edfc70f53320f511e35b3703eed09fbd787be5c06726a570a54aa15d129cd10db741523adf297929f909be4a0c71","services":["streamer"],"enable_msg_events":true,"port":63058},"up":true}},{"node":{"config":{"id":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","private_key":"6b9ad7d1da45cff60c3bdcac68f0af30e0a6e0e30e4ad73731c00368e9b0254a","name":"node_4448a59bde9edb93edcdb4a77f3e2277b9c01ffea45496ee0533eb5192955a08a0f982e25cf772e0dae68735a55b7acd221f6ba7b134f1e999087bee182330e8","services":["streamer"],"enable_msg_events":true,"port":63059},"up":true}},{"node":{"config":{"id":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","private_key":"157e46312708757a331443dd95e1a0c012502430f4a8f8756f0aeaf35bde1f6d","name":"node_73319a301ad3cf0ec09549d817c9523d61b74abb0cad87b737d41d900321e52722a84355f6f87bc7a5f848818c89a021bb0f3e5994f67c9a7b5bbfc98188a376","services":["streamer"],"enable_msg_events":true,"port":63060},"up":true}},{"node":{"config":{"id":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","private_key":"11148e1d9812b7bb8870b7960332ba4b32ea6aa43a57f9a27c30c2fafb609570","name":"node_caad8529d498a4a1e1ba7573689a913500bd409345ef8e3656abca748269eb73b919282f7f2eb0087f81f7bc52c367657ac8be0cdac65d2490c7c50c874444b7","services":["streamer"],"enable_msg_events":true,"port":63061},"up":true}},{"node":{"config":{"id":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","private_key":"896c3ee65d71ddcbf6030b920c0bf7748971170583e45fa2e33c19b3222e3945","name":"node_44462055ba68fdef337dd19d8123aace9a12284c13bc97687416b6b4ca0c94234ba7db6823651fc021d6ac1539e0c5321e763a7a12c9e7c8a583aac5369817d8","services":["streamer"],"enable_msg_events":true,"port":63062},"up":true}},{"node":{"config":{"id":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","private_key":"043c2adc5bdb3449b2f770e1207eac21128e77e89c9e1fe8876cecf1792f8b24","name":"node_ecbdca037cd7892752345b48b4219478b1b334f83ce7140fcc72eb71784436b690ce7a41b03e013cefc19d64a34a20cfef1b9e2b535d938bcdcb39fe63645a42","services":["streamer"],"enable_msg_events":true,"port":63063},"up":true}},{"node":{"config":{"id":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","private_key":"88f2cc06ba260e7c09cdd93e48c55c000d7a988ef65ccfc5331d1eac3c66d7b1","name":"node_51ba4faf0988717a37dcddc0a60a70ead33bde310184fc450f9ca73c67f931e6767ad5930bcf409e5aeb613a9ff7a03e47de6fc13b33d8af0b87b38822ae6888","services":["streamer"],"enable_msg_events":true,"port":63064},"up":true}},{"node":{"config":{"id":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","private_key":"8c64fc376a830b9237a1d1609a24e18396eb82cd6cd64b8ff572c9f946aaab2c","name":"node_750ca601f07d65f426f6ea5f34e06238f9d7a931f022f9b0ebc811943d3725500cb3c6f00c8d05eb8d5b353c6534136dff38b9a8d3d4dc5bf49cd96875704d07","services":["streamer"],"enable_msg_events":true,"port":63065},"up":true}},{"node":{"config":{"id":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","private_key":"545e42fc4dfd38b62f1481fe46895a3cb9c6632930c8df8358d66a3988e6fe72","name":"node_41994605708232b4ca7448c3bc0760a7b86bf26d442091e5ce6e92eac94925721d7e0eca04bdd03bb1bba1ef92deeccd4bf1b7c6c3318b7e8d031965c6646761","services":["streamer"],"enable_msg_events":true,"port":63066},"up":true}},{"node":{"config":{"id":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","private_key":"3e5b24d432307724a3e619c479ad5c87a93c6ee96d2b6ab0dad17da7e84eea55","name":"node_28afc20d8f4779b285bb14870062dbb54796ec77623302e51bc1bafed9e2c35751c8469ffc482718e059875dfa2226195ed10999e251498cba3a444896cb67db","services":["streamer"],"enable_msg_events":true,"port":63067},"up":true}},{"node":{"config":{"id":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","private_key":"cab0eaf666548a84a7ceb4a34a29b7079c66b0df29e7fd315e851e02a8c9a5ed","name":"node_805d784527be4e32e84ddf045baee1ccf348cdf8288de3aae1a5379f762576b957525ef358d9b42c68a93394017880adc09bb2b1b5e01102dc7e4240baf2af95","services":["streamer"],"enable_msg_events":true,"port":63068},"up":true}},{"node":{"config":{"id":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","private_key":"8c48ba58bc5ac8c0f3f0295c73df1572e80465f15a97f1c5537735474b11da89","name":"node_9c6dcfef0e128dbfeca58b8ac625b08fb447b0d579bd3f18bc0e2be60d1ec2274595d0554ddba0ca7eb660099d3ea146d8076792b46c93841d2ecf8cf608f5ba","services":["streamer"],"enable_msg_events":true,"port":63069},"up":true}},{"node":{"config":{"id":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","private_key":"0939af4a1ac3398bd818e5ac35e1003530a80a0abba5bf4c586664ab0b15a391","name":"node_6ce3a68cb1e2924ad97f22006094c709a3dd8b4ca1546fbb037f841a9e5ac62def242015dbf6221bda610153db064edcbb58a78a35a06077b8c02bf5b2a33c04","services":["streamer"],"enable_msg_events":true,"port":63070},"up":true}},{"node":{"config":{"id":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","private_key":"bfdc13ed4844405928ae3f67e209353779af203143a9f43fd8d1fc899ddd56a7","name":"node_178d5ce398a7114a63a0c953a59932e769891420f6b1544f08c082cd37b531b66757652d279b3036b03b04f8d46eceb0b46fb95646c6668e2921af75c06c3d97","services":["streamer"],"enable_msg_events":true,"port":63071},"up":true}},{"node":{"config":{"id":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","private_key":"d52f5bca67f434e20d72348971b791cb18def6182b002a3342c721ed06e9ad84","name":"node_59730132a01ba848a3c050bb6234bca9a72deba33716960fc3ec89b186bfcd313b9bbf049939d5805ff98db2c53a9421ce6ec97d8b4cdbaea53ba264d80d0734","services":["streamer"],"enable_msg_events":true,"port":63072},"up":true}},{"node":{"config":{"id":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","private_key":"7d5751c36a856dbc2403a058a432e1f2bd142ae438444db9febdaa22480dd404","name":"node_93987e431a0058f2e942ccf8d3486d249cd2734d6494131b343e2c3a8fdd86cfcb12d0aaaf8fcb911ad3cdd682cc82118198195a7fdc915ab7853223f012eab6","services":["streamer"],"enable_msg_events":true,"port":63073},"up":true}},{"node":{"config":{"id":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","private_key":"5cb8cc7f27d0f0e28e9ca55b592a38839058155cfce8528b5a464f98025eb54d","name":"node_665c3288c14dc1c17d85d17d634910f42183482c7e77c47e68f9b4f475b93e8c152246b9e34781606315ff6ef0f8360342500d15e4a2d67d9df6b72f30af64a7","services":["streamer"],"enable_msg_events":true,"port":63074},"up":true}},{"node":{"config":{"id":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","private_key":"3901f39cd02354a635723259be3a5e7c28de3f7406c889fc9353d3adb22b9d82","name":"node_562119edffe8270f6f7a5ad9b13d4c65d643e52a2331d1fee16f7e9b5567f44cfea62df3e8965a22cf08db8fa918f0a0bcae8da2936677e6d25bc88ed85ed2f1","services":["streamer"],"enable_msg_events":true,"port":63075},"up":true}},{"node":{"config":{"id":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","private_key":"4e740dfca715720a19f56d32d6b9783810e1d6da09425e01dfbe3b55714416c0","name":"node_2502fc8ee0ccda79ad1dbd9c7cec625da85980b9116bdd56dc367d508039e25e5f65183293006e5b0df72fa9037a48bd2b133a757940d3587ff77ae2392e3eaf","services":["streamer"],"enable_msg_events":true,"port":63076},"up":true}},{"node":{"config":{"id":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","private_key":"765219c4fea7ac80a0c5d26a096829226933310ad22d889ee19eb23915363fda","name":"node_e9f7e58fda4b504275441d51929fbc98214abdc9ed552c7aa94c600a85d4e791d60c032304b29ae028adccec94984fc9a3d705a81462632f50ef45024eb0f64e","services":["streamer"],"enable_msg_events":true,"port":63077},"up":true}},{"node":{"config":{"id":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","private_key":"edf1f1608ee4b7c320472a071f2d60d53c7b74e58fba190b5353e92056f30751","name":"node_9e6c1c6e871638182c4b54ac89352ef5c2bca0a99424a1369013e7c182883da0e8d7ab96b3c8254c31fa315b941d8ddee153157626821fc78c2cae951c1c9053","services":["streamer"],"enable_msg_events":true,"port":63078},"up":true}},{"node":{"config":{"id":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","private_key":"16e405179555f907062a85c408713f0fa46a5f1f6714c99272bb705ae226b2a5","name":"node_bfef26733f5196a11484bcc28d88776e747189ae7cec883ff39a27cfeee6d9d1efb34560c9f8e75eec43fc069a2ce5f0c78107a36cc8a569d37bd5306aecf23a","services":["streamer"],"enable_msg_events":true,"port":63079},"up":true}},{"node":{"config":{"id":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","private_key":"8337241aad3fa93ccc78bab1ff15a2aa218fbd7d026bffe74b7dadd8e6aa787f","name":"node_f6a07a1d361a4671e997d5eaadae61736291aff3896cb69f06bbc19bf7536dd152e0b15422b2fd9f8a9d2f9a251c9a07d0140319900e2cc9f25a59025c7dc91f","services":["streamer"],"enable_msg_events":true,"port":63080},"up":true}},{"node":{"config":{"id":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","private_key":"af0eb33b99b22cff74cc8137b4bb9477f8f47c895a61807279436daefaf9cac8","name":"node_08900197e74e285a5a8a9cc53fbd420bb35043ab27eb2d9eab22615e736a093abfa235c17f667dcc791cb50b9022082eafd9fba030194cc84f0358b769adc85b","services":["streamer"],"enable_msg_events":true,"port":63081},"up":true}},{"node":{"config":{"id":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","private_key":"3c9a377e5ae9212adee118e04b3cd9cead5b4830ee51492dffbec8f015b5b757","name":"node_afb5754b4748b7ac5628e32b242c90aab0e2fc7da58d8d5c8c775d13d8a6fd32240f1b89021587858168cbe7b3ea7ad07807728655eae0a9907060494a7c99ca","services":["streamer"],"enable_msg_events":true,"port":63082},"up":true}},{"node":{"config":{"id":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","private_key":"5ccc64d0c951c9f50f0f7053504f54f965e22a22fb06b0bd14f206d72d822fa6","name":"node_8f625a4e4f4fd980c796d3aa535e58a39722492480cf6982d43fab02de63a5b4c1b5c7cd8402171dd792bb5d9c3e2bdd38176c061dbe3e5b0592af1339e3fd82","services":["streamer"],"enable_msg_events":true,"port":63083},"up":true}},{"node":{"config":{"id":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","private_key":"f44a9e23990fd65de4da61711cb5a720a4474421ea0a653c7ce5ed76149b335d","name":"node_ab3814579882e9fd8d464f4f3c8a421be37822ba7f42c5f5e787e81125ec032f9ccf90a138c0b57f0a813b55b583f80d66284f795e2c82d80d2869e1fc770be5","services":["streamer"],"enable_msg_events":true,"port":63084},"up":true}},{"node":{"config":{"id":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","private_key":"4fd7ee5ba8003bb9b914612e6283cf5738550412c71e4475e07eb8bef32e96a4","name":"node_670949178a5fad22da03af1e206c814a797c0e9eb4e3371f83612f121e5b56e767706a3ae36628cd0c86dd7bd1586ca4df57e2de27b28a31284ecf9176d330e5","services":["streamer"],"enable_msg_events":true,"port":63085},"up":true}},{"node":{"config":{"id":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","private_key":"d0df7b482eb60b2f1ed4c2562768f60fe5ee8997e542bc9c7310db55391553d4","name":"node_fd12c5c96df6ee76dd7beb9e4e4768dda4d2c498851b6435f13ca0175980d0e4a4ff1c002e4daf41a995f118500604764f88496fb9b2c22e28308d8649b525ce","services":["streamer"],"enable_msg_events":true,"port":63086},"up":true}},{"node":{"config":{"id":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","private_key":"7771ce12670dba4c28198f6df284ad58c9ca877a25ceb912ec3af5ac83f6e143","name":"node_ed1ab28230ed533abf25633508d54f32bbff78a10c7a15fad5c2320cda9d9669c6d0e15689d8885400e64cbcd81730456f8f4bd5c98681d2cd8a8d4e1daec553","services":["streamer"],"enable_msg_events":true,"port":63087},"up":true}},{"node":{"config":{"id":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","private_key":"97cc28baaa8c94c905d348295eb19ef607599d22742989105d03eff39a5d6d51","name":"node_a05a18161c2d01a0f122548c66509dd1fcf3ee52975035bc79fb059e9613b743a16cd6f5ac54090e68f51bcf76ff21fb3805ba3197a96b4236afb80f791df802","services":["streamer"],"enable_msg_events":true,"port":63088},"up":true}},{"node":{"config":{"id":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","private_key":"9f191333ec4b20a2380317b819e71ffc234e63e85ec57548c407e1740c07f41f","name":"node_c89dbada7195464e732671ac6fff014cacfb4c879b63b6b84e7c1bce367522f759bd06e504b15f43a1735c6322356747fa5c4951882d4fd6cdf6f7cf13726719","services":["streamer"],"enable_msg_events":true,"port":63089},"up":true}},{"node":{"config":{"id":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","private_key":"9b597a8aa9ae03a20ec963fd3eeaca13823d7efd28a70c4c44ebfa6e147bb24a","name":"node_51302ef7b50922398ad802e917390bb4a3c24c877f2c2bcb7fcb34de9feca22673a2c594639914fe46a28837ffadfd03bb673afbc856aff5e59caf8e76082482","services":["streamer"],"enable_msg_events":true,"port":63090},"up":true}},{"node":{"config":{"id":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","private_key":"342dbb181da6045ae41eacef680b93f58765c7c5d65713f25f8b0627863c7983","name":"node_a40391285d1a97f1fb368b20c8e4d02be1bdebc0db41f00f99aac2f01893dc12256cd5a711117a981fbb3f9dfea18c19cf3603e925dbd67c4032b22b41eab8d5","services":["streamer"],"enable_msg_events":true,"port":63091},"up":true}},{"node":{"config":{"id":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","private_key":"af173c26c979843230716c1a7f4aade4f9a19a23e2ee665d0a0ecae0f793188e","name":"node_e0420ba2a293315d810928a0e09a507c6aaf93977ba2c7598e9b83723b4a66682398ea17542c26767c7ff0f4ca09c537d3cc10dad283f079f1de73e25e87cb5c","services":["streamer"],"enable_msg_events":true,"port":63092},"up":true}},{"node":{"config":{"id":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","private_key":"4598804bbccfa26a362afa9773f283bfbc0ab7660240791e38f7ba858e45280d","name":"node_33e3ab7108ced43102003c3b3192b194100f32b6bcb67bb772ea9696e35721196699cf01e443f7cdf8076ad83aaf7468b75c71d03efb95f4c07cf0742ea9af81","services":["streamer"],"enable_msg_events":true,"port":63093},"up":true}},{"node":{"config":{"id":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","private_key":"253935f834190e90b6bf0646618d2992233bf386ea31a58770e1926cb063050c","name":"node_cbed12dcab0aa04a96ec7e25bc2ee03b337c7b2006391baa7d2aff042c17ec70b82c5fb2dc916d085a7948541719d329f9b528b67ec6adb1ac2cc594d4ef1e42","services":["streamer"],"enable_msg_events":true,"port":63094},"up":true}},{"node":{"config":{"id":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","private_key":"f6d280904f13397798c441bffafc78ab98461c9d84f01f4b9b73de50d5595fd0","name":"node_03d2d77c008b5fa1063b1abc3152b879a529fe4fdb2dc174d6d85312264a38ee4cc49b342507a10fff1a4b0730f1ef8e008b0897d97bfd6f70050adb124d3596","services":["streamer"],"enable_msg_events":true,"port":63095},"up":true}},{"node":{"config":{"id":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","private_key":"5237d9097b72efee4e45c4d3d14e320e49ded470809478f3ccf6a9a7cf732d74","name":"node_f0299035cbddfdf7a78e5e3a400aaedf2d719d04e907ac0f9f067525e2f9bb913d985308a3a0d05467a64adf58c68a615c6327acf716c23631d0e829903f8b34","services":["streamer"],"enable_msg_events":true,"port":63096},"up":true}},{"node":{"config":{"id":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","private_key":"a8d169922df4dcd07e1f102e3eae5692eb87b1f368124cb5c65fcca22f9743aa","name":"node_276256790c9317d09ff7802f4ad0a85840fe62527390ce1790e1e3186e8b3f04acfaa41dcd02303d333423678a4037e4f4854676e79ced3232a3dbd772cc2680","services":["streamer"],"enable_msg_events":true,"port":63097},"up":true}},{"node":{"config":{"id":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","private_key":"8b927156a8aa7b6cc711c9c2ce3016cab2e9d1ce220e9792207cc5b40fca3047","name":"node_155805f787600f9f9518cf8836f491885b64868bfe0023975bcd12776925a424fb5aa3199dc178e83294e97f347a373d05d2422578a08eeeb2d15a178d28964f","services":["streamer"],"enable_msg_events":true,"port":63098},"up":true}},{"node":{"config":{"id":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","private_key":"d2b8d940f626faf3204dd38721f5528e1c9db4b5d0cc28d0d627c7d191c1f21f","name":"node_4de606aa7e722197b918c5f7f0db86a3081d48e89d21428b04f19c3ff3755eac0bddbff5fad8bda94b9e57f58fba2fecdbabbf710f7afb381bf4f1a4fe55cd93","services":["streamer"],"enable_msg_events":true,"port":63099},"up":true}},{"node":{"config":{"id":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","private_key":"1cd1a1e084096aa4f8f9933b0871657638dad24b3f47d18c9eb0007595ce46f1","name":"node_82a774be7146766585d2bec6b69b7803aa956f492a53d8ed5f071becdbbc617562885d8430f0afd505210aab7b032428fbea32c82dffbd12d9ccba776ef4729b","services":["streamer"],"enable_msg_events":true,"port":63100},"up":true}},{"node":{"config":{"id":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","private_key":"8ec23f2c16d923996d6bd74aa374cb6e5a69fab748ea8efa538d01a12ac62e16","name":"node_340420ee18d55913f790d0fcc2305b40b1e7bef2eddb79dda57801690aeeead693ebd1a9ff8557671f5ae136b3e65733306924bd00444cbc6e7c6235e5a2c77f","services":["streamer"],"enable_msg_events":true,"port":63101},"up":true}},{"node":{"config":{"id":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","private_key":"b7a9a55daea83c1d769fe68e820de46f4a8df4c425ea7ab98a44cb7ad3c7963e","name":"node_7a509686ebce91778fe22e834a94ab03f92457d41385099ba657fe62c7469a9669bddb9a3d7b0150efa1d2f40c69bc786c7f4ede1cf8b19411eea1d23cb7d56c","services":["streamer"],"enable_msg_events":true,"port":63102},"up":true}},{"node":{"config":{"id":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","private_key":"c1478fa3ebc5b2bd2a32567455e71e73a1787b1c8c6571fd94ee0d487d5fea4d","name":"node_816e91fa8ff68ba067a89390ef61e7f23211e5e05049daa103ad1ff84b94fbcf535a6f6b515fb571939f5656869767c608513808800baba7e5d2b5f3a17a9691","services":["streamer"],"enable_msg_events":true,"port":63103},"up":true}},{"node":{"config":{"id":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","private_key":"bb118c1ce93cddc4fb540863d575d6ae584ebc2f2e2f221c9622cc105e7fd7b9","name":"node_77327983685f39f006806170fe351063a58ff1bd8dedc222d538e86cfd18abdfefd548328f25fc5afde8170aa5c35311353019468f2b439c331837ddfbb25a52","services":["streamer"],"enable_msg_events":true,"port":63104},"up":true}},{"node":{"config":{"id":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","private_key":"7cbe501dc7bdd1bafc62c5c56af215559b06aef4ed398d4a3acdb78f3c84a735","name":"node_7a18392b8338108a996196ee190a93a1b9954c8e05a062c421da513a1828dfa739e7b224878c0670cf74bbc743c7ca7ee8cfee6b6a602fe1f4a82ecfbd38c2f4","services":["streamer"],"enable_msg_events":true,"port":63105},"up":true}},{"node":{"config":{"id":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","private_key":"e853260ddb20771587ed33007ef55b07368a08f79ea0a64cf9830ab69498238f","name":"node_e7bb63c5187ee85d965fed5cb33d1678c0e090b4e4c3f3d859755565db18046cb60025453bdebf136373c416a2e6e56be063bca6c9257b7b175dcf966e274205","services":["streamer"],"enable_msg_events":true,"port":63106},"up":true}},{"node":{"config":{"id":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","private_key":"23c3dd23f790b16480c58305ab528346a7046dddd1d9f5c699a4963bfb926fb3","name":"node_545850cb90787d49c579b1ed54a753ebd00eaafe3f1bd04d57266e4912fb1cdd654446ef054a973a583ce8dfc6cc130b6f90e63bcf75372fc21c445f8e1e6005","services":["streamer"],"enable_msg_events":true,"port":63107},"up":true}},{"node":{"config":{"id":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","private_key":"e0f2a273dc23035aaf88bb97d7f5ccf57ee6304b184e7d61183556b28040076b","name":"node_86b84ddf64d301f6a9c4504c59eb4031d3167fb74101abea3b694845a009dc522be7b2e2720097ceea9f36058e160f42a2a438a33034929a5c1a7793c7ccef7b","services":["streamer"],"enable_msg_events":true,"port":63108},"up":true}},{"node":{"config":{"id":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","private_key":"dacac1dfd252a4ad8878c023bd34aa1bc81b63d66d70c8ba9aafcfa8425bb253","name":"node_bf1e6eeb8b229f63b49213db499b71dcfe0ae45ee3f14685c7cbfa3f0a2150e52a89c853f4cd8c7a92e6e5f6083044efddfa17391662e3cff6290da679520404","services":["streamer"],"enable_msg_events":true,"port":63109},"up":true}},{"node":{"config":{"id":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","private_key":"57a2dcb70aa306ae204744fce4dd4b4ad9b02516e080dca195604406e240627c","name":"node_a58a2dd3f5ee2471f0ddd555ffcc45d86e2d8c325585e3fe55eee878b8a626faccce73679d32811fc5d068c153e671673f4cd020f3c7fb37bc6fd9646931646a","services":["streamer"],"enable_msg_events":true,"port":63110},"up":true}},{"node":{"config":{"id":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","private_key":"4314dbd43bea3cdbe75a24ef256ee0dca9008f5133f8b1d6c9adf9a84210c2e1","name":"node_896c74ca4cc4cbb9d2b6606d0ebfd6427952c2e16aedbf36933fa3d01f1c505fcd663f3d01c0cf096bef9cfd0bae4595ec7c221cfc362e19a5b7c60614a9658b","services":["streamer"],"enable_msg_events":true,"port":63111},"up":true}},{"node":{"config":{"id":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","private_key":"2b4bd5ee9da5de0932418460699900ba0e40139dc910b087c586210e52816b77","name":"node_1e0a46ff50fb6d9a2c218a851763ff86c42e4d61dddffb7188481febc0f3180bc8f31973d336b2a6e25802acd4fed6d905d89c6d4d7d8080fb12741f9c5ab7e6","services":["streamer"],"enable_msg_events":true,"port":63112},"up":true}},{"node":{"config":{"id":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","private_key":"dd2b5c2e466c7276ff4c6c1a641ac204a34ddcb145523ab175701ba31faf44de","name":"node_b2bea653b6ec9629c6f934be72fccf30acf836698e21e81dd8085f070ba8259ba43eee43c342738a4b782f5fbddd44caa28f56dffc08237ca7567c965ac3beca","services":["streamer"],"enable_msg_events":true,"port":63113},"up":true}},{"node":{"config":{"id":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","private_key":"17f5b5341d575c1cfe673efd9957ca29a50fa23c028c5f5f7561b23e7dc92e04","name":"node_5771bef7f50439f9b81d2a7bf7060b1ad4b38675d8f6abbac3cc4c215fb0cb5dd07f6873545b42218337556925566025476e2915b7b98e662a3dcd28bebf0eb4","services":["streamer"],"enable_msg_events":true,"port":63114},"up":true}},{"node":{"config":{"id":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","private_key":"eeb9367b7cabbd3e4076edb5fb97cc2fba7445cf37f523685f2b24e617d718c3","name":"node_0e8c1a6b70524c4fdc492c74348bac4ccd5d140bd41352607e8cfba45561afb1e6e12f3e2fcf03c1778c9ae5ae19cb9218ee2d613983768f54e3f54e69bb6600","services":["streamer"],"enable_msg_events":true,"port":63115},"up":true}},{"node":{"config":{"id":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","private_key":"a9a6414dc37916ed5794a644a51d6cc1c23c27d707b2dfb9957f9ee28af64e60","name":"node_d71c50805f284ed3a759e2e81f220fbc73d6d0a7a261b4c9e7878c3da143cfc07afa83e1635b6a45530f71a60b9f17c485a2fd6617c6c2bff82bacc71c208087","services":["streamer"],"enable_msg_events":true,"port":63116},"up":true}},{"node":{"config":{"id":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","private_key":"29c714e8c1983b179cad17ffaa617cfbdd50272b496803b4a602afdb05d78117","name":"node_06472c89def07fa73188d253cf1acddc2be984842f3a234edb3db95449ba74928ab1395eca1b8978987769863afffb488fc27c9ac723aa24837b66c12f38d735","services":["streamer"],"enable_msg_events":true,"port":63117},"up":true}},{"node":{"config":{"id":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","private_key":"f00cf99cd4b64e4242b7c878a4ce70044f1fe91966dd723b940e3a312f1b9f63","name":"node_eb097186ff58d96a7ead7a7f9c05a44075d84537bd4fd3f82857bf2c45bee1c6dece434a7707cde69e96f02366859cab4c991fdb7615e113a868d4b9c7524a45","services":["streamer"],"enable_msg_events":true,"port":63118},"up":true}},{"node":{"config":{"id":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","private_key":"d089b29e9ea18a2cf17256e0e06c907164f712564fbebce476b40f67e39bcc73","name":"node_57bfbde13c71e035c96513870aa8215198f78806e7cdb01c54fbdb392de2c40386d768d6fdc4c68534a67e531867ca74d8ca4dcf34ff7f7f64ec35edee3e5f68","services":["streamer"],"enable_msg_events":true,"port":63119},"up":true}},{"node":{"config":{"id":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","private_key":"219f34180d582584fdc64b9b7712bb15e490bcb2eaa2f4d2847f838196c6afe0","name":"node_5b4de68680c5d1a75cccd5e7a82319c031f5d61d79cbb6532e1254ab81c833c3fafb54390cca7a770e84690c490fcba90482b35321870f8506335a2f57cc052e","services":["streamer"],"enable_msg_events":true,"port":63120},"up":true}},{"node":{"config":{"id":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","private_key":"223faa782246247751eeb3191f8823874455005721e6738d5f5b5b631cda858b","name":"node_cd0e9a45b45f9a67417fcde29d9f92c45ca4db46eebbfe47dcf6999e23e549e4205f42ada8e3fcd00e2fb5f832bb92a27a59b43c4a5909148d81399c2e8ce492","services":["streamer"],"enable_msg_events":true,"port":63121},"up":true}},{"node":{"config":{"id":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","private_key":"2e3b422e1762ce5c22bc9cd6fa78cfb62f3ada7732d7e0b16d91ecc5f5ab9047","name":"node_5d917ffc9d70a38670941ce206aa7ea1b9ea65c1d783f14ebdf7c7afa6ca8b237112aaa9b1a3f757132093a604ef378280c5bdef02c2688049a91a412c399bfe","services":["streamer"],"enable_msg_events":true,"port":63122},"up":true}},{"node":{"config":{"id":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","private_key":"a3f487830e9fd87b5b404bc91d0f49d866cddfa869d32c08853273b9a2eaea7b","name":"node_26cf4ea45b9a76daab82a57126f9c6f8726d2eb973e205ab4ab69c8b8be11a32a7eb5c3807e952cd428ce5ddd88f143d4fc9ff8c3de3d159855675afce715615","services":["streamer"],"enable_msg_events":true,"port":63123},"up":true}},{"node":{"config":{"id":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","private_key":"9a3fe8b50af54e2b6ea84f05b832426f911dd557e1e874bb291075981a46baa7","name":"node_20f171ab01a814a2856a6cbe7929269f18f6329914289515e2cb9d078ac14ebdae457789dd638c6415b062799114570f556147d4bf9ac850f00b6d0762765ac1","services":["streamer"],"enable_msg_events":true,"port":63124},"up":true}},{"node":{"config":{"id":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","private_key":"8e83e239128a2ef402e58ceaffa0fe2d59d913588d12536ba4e7a88bac14ab5a","name":"node_f0b2f1e8d46be656109adb18c60677ac9eb8fce7f42e15d9dbb25f94b4e426064780eaf32b79954b9bb72ea89953175da8de35380aaba18931cca374a7de2b11","services":["streamer"],"enable_msg_events":true,"port":63125},"up":true}},{"node":{"config":{"id":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","private_key":"81b194e85dff3ff43272bbf73e58a6dac8a9e3ad125f7ba3e71cb5de5341a975","name":"node_a6ca1d5340f2d7021f541c81cf9aea519675462c8443bb6ddd93919962561b8f5a8431c3ec7e7e7d46c600b653e9a0638d2bb07cf4e29516bf9c4d3653f451b0","services":["streamer"],"enable_msg_events":true,"port":63126},"up":true}},{"node":{"config":{"id":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","private_key":"b4ec9b24f6a962422bb63d20e415a5dc2f85168297e8abed3cb20e3fc0d70e25","name":"node_d8cfadac10473b31a4560c711636a05615f13054388065344642ff1d04246fb62eafeec06805264eafead111ed8134e11a8e21f42a0eb950c23b142e627bd8cb","services":["streamer"],"enable_msg_events":true,"port":63127},"up":true}},{"node":{"config":{"id":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","private_key":"cd0667c4d17b56321858cceaca611f1c46758fa276d3d991f3a9fbb0c686af3a","name":"node_49eb706cd7e95ad78502a508487d88b818861d94334aee36b2acef5c25cfff5c0efc2df9dc5dbb18acd4003d5cc0c843d3b40363adf2f62a14c04d814268fdee","services":["streamer"],"enable_msg_events":true,"port":63128},"up":true}},{"node":{"config":{"id":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","private_key":"4556340931a4e95daa2043706f516eba3744d2ba4340bcb95358b58c95534090","name":"node_c93cb2df7ba6de8009872f5f7565891040d42e3b193ef1cdb321a0c167cc8fb8138900982bb8f6918fbaefac6e02dda01ee40f7a6beba1990dd44abe03cc3d01","services":["streamer"],"enable_msg_events":true,"port":63129},"up":true}},{"node":{"config":{"id":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","private_key":"f1b36e9da20cfc2416f02f9194a0522b426be8679b6478118962624b4963af27","name":"node_3e9c0bbd146d8b1040b4f379eecf802c27c4d0a70e64a9fb2e941a7edab9b00396b0b67fc5c891652743cdba3b342973ed49615b32da54b925954a799240431c","services":["streamer"],"enable_msg_events":true,"port":63130},"up":true}},{"node":{"config":{"id":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","private_key":"7f720ab5ccb4e3dbca347ff7104c677d8215261910d8e8e2ade703020d566842","name":"node_b38213eaa5b419de787b70073ad8c7c819e48c5f76dec1507b54f1d7cb027211facbe7a170ac50212abe130935e8947d5a19d6b13790114e71cc18357902a889","services":["streamer"],"enable_msg_events":true,"port":63131},"up":true}},{"node":{"config":{"id":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","private_key":"1a4d1e1d6e198ac61f91d9ccba4212fdd32e9075df2fda41caa11a0a25e694f0","name":"node_20bdc859d58d8bf419df64fd6ee1d4363c1d5f403af3abef2720d7d3933924672e12e23e5d76b28e0f6726acf58bdc5eb258cba635e327cbd0b564523305da75","services":["streamer"],"enable_msg_events":true,"port":63132},"up":true}},{"node":{"config":{"id":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","private_key":"9fc5b25f84b416e8224c296213b062e1dec7eb7074402a494a23cc1c70ef394b","name":"node_c6d1404873174254c0f15f25804da9a9d90db9c11c5cc895fab613b4deb7820f1733680b4ba9e4b61a664642ed6ee9ff012e13a0619c64ae067be6bab26962c6","services":["streamer"],"enable_msg_events":true,"port":63133},"up":true}},{"node":{"config":{"id":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","private_key":"43a6ff2fe67bdd16cdd0a4e7ba3eb8188632a796b90d34b477fcb5e0f5ba0b43","name":"node_f04c3ae9fe957a14c249acf3ea2e8407d04d108fc01e75f6d52aaf5073b3450025012d138a75b857473eea4d20e57c99b92bff9041f269d995543d7c67a92ec6","services":["streamer"],"enable_msg_events":true,"port":63134},"up":true}},{"node":{"config":{"id":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","private_key":"9202da3ce5dfea8df87f9f6145867414b45131634f70cd32dffffeb8975e0e86","name":"node_8e8de10fb3f53bd3a48455ebfa0a38ea5bd28c607e65506b263ece53a24d2361c2af7d7cd207e45b11bf71a3c33fa325fc8fd40a18b9c73019cce219c757c7ef","services":["streamer"],"enable_msg_events":true,"port":63135},"up":true}},{"node":{"config":{"id":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","private_key":"6f53e22eece8ebd80ce64720dacf85c36c8aa737fe54d05c884ae9ad693144fb","name":"node_cdd86dea7dde96ff7cc1e3248fd17d107c83f2cc7ce2111c41530448962763309e91a05b5dad4663d0e02db59ed4129ab0c3e1eedc42c654e39d29f99038063b","services":["streamer"],"enable_msg_events":true,"port":63136},"up":true}},{"node":{"config":{"id":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","private_key":"ba12a0d7056bd5d7f8b80a1e30c126d8641ec4a20b2e8c9b890764785350cb7f","name":"node_da15d60a4b9a8816ce24c20f6c941c51229c1fb5e070b8b29be2977c2f7b41f8f17e4b6efe75f465e7935ded1ba17472f046eac73393db7197018fa86d11c31f","services":["streamer"],"enable_msg_events":true,"port":63137},"up":true}},{"node":{"config":{"id":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","private_key":"f68a07d7241789486ffebae385ee73f2b9050d22612e9770a1aad1870e347556","name":"node_03e478a3aae82e06e215e40272a420037a61442d11c49c367a5ee6a21868d29a17ea8b9284f013d020c4740f296a6a22bc64d33d1c2807f9ab8dc48c0cfec18a","services":["streamer"],"enable_msg_events":true,"port":63138},"up":true}},{"node":{"config":{"id":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","private_key":"f9fa950ad709b5c36e36f5f49a4260ab81e08145d8c10611a2d46e1395ac87f6","name":"node_3df030a522a157e36f6b369aab048b9287792743a411a47073c4f9ef7686528f39bf7bf91c48e4d46afe180c8d08430b012bd216d50876baa3b1e7bc17cb55ef","services":["streamer"],"enable_msg_events":true,"port":63139},"up":true}},{"node":{"config":{"id":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","private_key":"27eb2337ccaec369a786c3e86e92bfc20b6bd03e70244b7d1266e783f087a16f","name":"node_4bd17847bdf60ea93a670a84a0ff8fe028d35228e814d6ebc0ae4fa586ddef03cd79390d541d28ca3c05a7241ffe92ac182e63c251176b40db8fe05fefaa82be","services":["streamer"],"enable_msg_events":true,"port":63140},"up":true}},{"node":{"config":{"id":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","private_key":"dc23bae09e0ef5811f615cd80fa3c264a5011f501f3fa6f91cf6772a408ba5b3","name":"node_f8052e328014f39157036f3dcecdb23419c0959473a88282605f10add681ef5cbfb1e926b522f98b8401272113b677a67225874d1afb0bff4b11140cc071de44","services":["streamer"],"enable_msg_events":true,"port":63141},"up":true}},{"node":{"config":{"id":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","private_key":"f37b323598ac406038a1fba2fb8acf1ac7899c6606f263470141e3d8f364c70a","name":"node_3274b5f48e6929e2305e980b558a4ca3c7cf800b75a6445ea2875cb379e127f3e793e9450a11e927682aa91b8af52e9560dece633833e0f207a8a8a38b7b9c54","services":["streamer"],"enable_msg_events":true,"port":63142},"up":true}},{"node":{"config":{"id":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","private_key":"fa14be3b746acd18c44299337f26807c3f0034349cc7eb6ad398a32061e68e12","name":"node_e59940a6dfe35a6214e2e3daba9ad94e630004cd8f029e13a6649a56dc528ff94bc09d8d21a2f14a56b4ff759b60ebf3d27c1029862c183b8416fa3e950bdb55","services":["streamer"],"enable_msg_events":true,"port":63143},"up":true}},{"node":{"config":{"id":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","private_key":"67c3621e70643b370db5377452ca3a8bfe78a01172983da0ba5fb979ce341bd1","name":"node_f7637cdd5ef26de40b9055c1df91a45725670c8df11ae934c0d99d2547c3eb4c42a16dbb2e75bcaf4b1b9347c48db65f549a0623179a08dd8cbad92f5bca08cf","services":["streamer"],"enable_msg_events":true,"port":63144},"up":true}},{"node":{"config":{"id":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","private_key":"e4e774ffb3fee42b1fb038f560cbb7ef3f4ec4f12d077fd90c38de877841eddd","name":"node_fa897ba112f34839064c6871a4c9504c5d709eff5095a137c6a42726d58eb623af976cb96cc30db67e6ac9347c769f032aa4ebda884285a057059040c008ad3e","services":["streamer"],"enable_msg_events":true,"port":63145},"up":true}},{"node":{"config":{"id":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","private_key":"9fdcb97101ee0351d72b1cb7b832fc95f339a434e9d1e146af4062d0d43a88c6","name":"node_5d96577324edf1b5a1626999925982af1e0ba7bed8edcc3f740ba434f4b003cbbe2d632cad327c76e5b490d08c091c4a7b473353ab59139493657eb9525b8be2","services":["streamer"],"enable_msg_events":true,"port":63146},"up":true}},{"node":{"config":{"id":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","private_key":"05ba41be88727fe8ceb3dd01ae6314f6eb66de9c223da829a6cb0fcb9633dbc7","name":"node_b09af9e5552e72f918174963dad58a4492d3afa120f78e43820df7bff7fae9f6b52bc6c8c73d3a9af91d20134f4ff1b037db2ef0bc3d8c495a771d63de678bc0","services":["streamer"],"enable_msg_events":true,"port":63147},"up":true}},{"node":{"config":{"id":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","private_key":"4f458de05e760aece8dffaa29333d3a51382cceb7bb8265be7a25ea65cfaf2d2","name":"node_1955bedf0bc9044b13a2c16158087123197c74147c86aa3b9389d308a364e80edbc573bcc836d8a262a77f3c9233ebddb1b82eca83cd0a0e4bda6564c443bb70","services":["streamer"],"enable_msg_events":true,"port":63148},"up":true}},{"node":{"config":{"id":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","private_key":"c2adb7237525d3d280b964361432cfe1d2863e3011b4b83167648da04a8b22fb","name":"node_5984a296b49bfba30315501ce2ae88ed0392ab2959ac4e7e6b9a29090f344b9dd13873ca137e8317c402cd2e14a61965d5707065b8ded46c41a054731933719f","services":["streamer"],"enable_msg_events":true,"port":63149},"up":true}},{"node":{"config":{"id":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","private_key":"43223de0a2e5b61580a85a150f19528acd484002efde9df5041f8b93b5d9f0e9","name":"node_9c3be147f9fe0fa34e553d9e4332969086ea7fa65294b61ca35c9f731f6b81d0b70cdcfe2ba52b6cea3c0de14b7ea40031b5cc40661c4bb821147894130d7bf5","services":["streamer"],"enable_msg_events":true,"port":63150},"up":true}},{"node":{"config":{"id":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","private_key":"863d1cfaeee0df7e89ff906a00c0165a9e579fda9f82bc3fd9b694a593e37139","name":"node_ce1309c8505b446363ae37cd3b1ee3e03ced537bed20aca5d8c4be2133917c408845ef5d0f65876974be2803dfb824827cf5c5a2d050d6ef26cdabcbf3a2dc31","services":["streamer"],"enable_msg_events":true,"port":63151},"up":true}},{"node":{"config":{"id":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","private_key":"f8f2976509e8c27362fc450e79db0e7b99ee036277d5a1c860f265be28b6525c","name":"node_3e7820bb15c07f515bd63791b66136723dcc9878b3145fe0f238f6b41e3f2f7565ae55ef24f08ae461950ce1ae0c8a80fe5e4fd4f2f88c4acf4a2c94640df239","services":["streamer"],"enable_msg_events":true,"port":63152},"up":true}},{"node":{"config":{"id":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","private_key":"eac78f03be8f9529f9c85dceadffbc6ff39de01456bab5c864f9ea5a4198ee23","name":"node_dafb58b2fc8a14f2b23b7df33d28aa7847a08f80e9c21a654d4c97d928e1afe6585644d27f22442cf70d229c32783be6a03c0920be153fc4d9f3b273dfa90ec3","services":["streamer"],"enable_msg_events":true,"port":63153},"up":true}},{"node":{"config":{"id":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","private_key":"6488421507de8fcdef9f2e89a73b5e9182ec8c0cb7d564e630dfe38ebcd732a1","name":"node_622646c74fdbae39ba191dbafff4906fb683fe0b0f2c303d080f5577a070876c41c8d3786ae7b953e5f682b8ec647727550d47302229ebb9f82bed24cea61132","services":["streamer"],"enable_msg_events":true,"port":63154},"up":true}},{"node":{"config":{"id":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","private_key":"7f547289aa8ba8dade535a2e50bfc2111536e7149162e360ea5e4db15c12d42a","name":"node_2d6d55edd34c0d9a0130b4806e409bbe18cdda5c2b221cf46136718ec20ffc9d8e92838d78aff92fbcc85f5d081da361dd1e3d7f3d4e1ea57877d6bb7aa0b6f7","services":["streamer"],"enable_msg_events":true,"port":63155},"up":true}},{"node":{"config":{"id":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","private_key":"f3d8d6aa0db8c604198cf9a317b45fb96b8407cb029951d7ef06042abedf5e1f","name":"node_f62bd19b0fd052207743ce53c3d48a3a71e9219b75e41a9497a43e6368e559d5487ff1ab644f2df4106b500583e4344515f73187eec773115deb977b4ebc3514","services":["streamer"],"enable_msg_events":true,"port":63156},"up":true}},{"node":{"config":{"id":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","private_key":"cc5627eea1858ac168bbf1e34a3bb3410ade5b379cde7f67601bbe359506e76d","name":"node_a1b2d0c6f24f5924c61e057fc65b994d9a6755560d740018b4c9ad0bb69212ec69974e22cb037dfeb7ea90a4493997f4c94029870bcc5fd47013b51ca0a26b5d","services":["streamer"],"enable_msg_events":true,"port":63157},"up":true}},{"node":{"config":{"id":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","private_key":"77d99b72e19bbe2da2d6d931653dc7b541dfe27092b944936562bafddd6114fa","name":"node_188bf77c9c1e45f009efe7aefdb040bdb47763980fe7eb0851295d657fa2a8978efbd2997c1dc30f4f0874eecf9ca9550487cf41da237b84d071963d35b6baff","services":["streamer"],"enable_msg_events":true,"port":63158},"up":true}},{"node":{"config":{"id":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","private_key":"e6874592c3f2d2fa94b126d565cec571767e64ef9067970a9f8d1f8ce7e88d0f","name":"node_f06ec3a90d34300f9fa2d48aea0c6b5f2f01f7833ffb0fad30e7f57e3916e344f3a4f9efe38e222443b8b00d3c7f5221c672491a129e4958e574afc283bd45b1","services":["streamer"],"enable_msg_events":true,"port":63159},"up":true}},{"node":{"config":{"id":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","private_key":"d733b22563798aae07facf0a489367c7cf0d6d3ebf786992b6ae98696d295cd2","name":"node_3c6faa2e75a1699ddadd0e21fd35d3d6215715cfdc2dc89961cfd66773d2541776e785f3ebc833a70e3d1017a4edc571a5d5d9f9fbfc3fa0a8588f6c5023c164","services":["streamer"],"enable_msg_events":true,"port":63160},"up":true}},{"node":{"config":{"id":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","private_key":"145ffd39a00647c0142f3bce7ba2f21f4e168663488e0683b4c8cc72afa7b02b","name":"node_56e8f792ec9a75ec9e91d472b8a4b023655dd68c2a448a33397b125fe3584a5efa1b492e47077b24acfe0396b73e1cb564a6a6b2aee1b457781dfaf6d43fcaed","services":["streamer"],"enable_msg_events":true,"port":63161},"up":true}},{"node":{"config":{"id":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","private_key":"83fa451e08386b0966a5b8ec4b56c861bc367f0cbaa7e6e3a8c20564dbc0f1af","name":"node_3572a22097a313b3adef95a7b6cc679f8d1201a156d764e61a9fbc63d123fb4826f7125402fb6569beed359e1c1e5e6cb6993a75975da6cd4ce15669a2eea758","services":["streamer"],"enable_msg_events":true,"port":63162},"up":true}},{"node":{"config":{"id":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","private_key":"2057ae928cb89d7759bda21739956c8527bf11bb02571ee2e9bda07702779aae","name":"node_e3f2e777a96b2137b3104b84d5d827d484eac9ee1b585430e09f790d7e26978da12802325927c3c483bc19973e09cd3f70c513c34798e5da650f8d2f0c8c5c47","services":["streamer"],"enable_msg_events":true,"port":63163},"up":true}},{"node":{"config":{"id":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","private_key":"4fb682db9263cc8ae4d32757a0837296654120fc17593b9d0c3219a307193655","name":"node_1480f62d85ea32226d9f77ccd31780b3e704fb60618a588ae85dcd1c0e84e878c5fc092adfb306e8ebc7abba9ec429cb2447754502ef847cf931467f31fa50b2","services":["streamer"],"enable_msg_events":true,"port":63164},"up":true}},{"node":{"config":{"id":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","private_key":"7f212e2fa6d29b93f32d27a27b02eab5b9aa946ba044f1a20bada9f7db133907","name":"node_3540d888c3207d6df233afd1164ff9dde2551730862772547e04f7311de364968e113f38a7dea1ab0916a7f8307017de5b49578fa4ebcc39651e541fde51be48","services":["streamer"],"enable_msg_events":true,"port":63165},"up":true}},{"node":{"config":{"id":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","private_key":"d209b8a302d27579c28dd86104e2eab3c74101ff06bb17200388b614ec3f05ff","name":"node_077bcadade93e0d361e94f76dff464d61912bc067ce2ce17ebcabd757cca201cd64624ea809d99dd8ecb749d40528db9b3eb503ef5ec05e8845044cfaef720dc","services":["streamer"],"enable_msg_events":true,"port":63166},"up":true}},{"node":{"config":{"id":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","private_key":"f0317274abc992d76728cf9a59b6dfd16b1422fea0c0089a47f0cbffbce53c34","name":"node_73be4d2291c68ca4554a86fa170f7595210e1b6bbbeef3c1d5623a2b5d03a8fd6e26caa26afc639c20c8a351a89dad1086f91734f09afab62d28ec17b700fa01","services":["streamer"],"enable_msg_events":true,"port":63167},"up":true}},{"node":{"config":{"id":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","private_key":"8d5bfe9aaf70d634b185efff991adfde6d80ee5d1c60e68eb1a105c17a4e03af","name":"node_a5cdff211813e17fadd43ec55a6cf4e97e6ca0c3b2cef0db58923b27d36207fd1a77146efb6093bd94d7eb89cc77d8c735fc64ab098839efc74a00b5e8687555","services":["streamer"],"enable_msg_events":true,"port":63168},"up":true}},{"node":{"config":{"id":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","private_key":"bd99f18955320e921a98f8103d8b4c1713d800d49c0a7bc946cb52fdf79e03d4","name":"node_27fb8fcda1986644f985d68430c399f0299644b00b234c355362721081d12f9eb7686eea8f92eabda1d342bf56255e51c07b200c6233f95ac009f15b874eee97","services":["streamer"],"enable_msg_events":true,"port":63169},"up":true}}],"conns":[{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":false},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":false},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":false},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":false},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":false},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":false},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":false},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":false},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":false},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":false},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":false},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":false},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":false},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":false},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":false},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":false},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":false},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":false},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":false},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":false},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":false},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":false},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":false},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":false},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":false},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":false},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":false},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":false},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":false},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":false},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":false},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":false},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":false},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":false},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":false},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":false}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","name":"node_dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","enode":"enode://dfc47747201ccdd02b200ec672c3884626a10fd4d395d729cd67e3172635873cbb9f20e1a9d402fe058c43705671b2b7b51b4fda33b1c71f67dc48fc8f80c93e@127.0.0.1:0","enr":"0xf88fb840de2ad283128b20ac2fb81c51ce7b4cc5e0fa78eee1fe7f79570a47d850263a8a1aa7e04415d06c9e35cfb89705a7574d3bc05b7881ace913df570dc72bdc27d10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102dfc47747201ccdd02b200ec672c3884626a10fd4d395d729cd67e3172635873c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3ZKz1CQU/V7/XB5MpVxjzXA2Y0BJmVtyogzffKEyGXg=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dd92b3\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0f31 5c62 64e6 | 68 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n001 7 b4e2 a9fa a861 957e | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 8 ea3d ed12 ed2e efd6 | 17 efd6 (0) ee2b (0) eceb (0) ed12 (0)\n003 6 c2f9 c0ad cabf ce01 | 8 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n004 3 d125 d18a d23c | 3 d18a (0) d125 (0) d23c (0)\n============ DEPTH: 5 ==========================================\n005 1 d9d3 | 1 d9d3 (0)\n006 1 deec | 1 deec (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","private_key":"009fe52f1950de37f99e7888e92c1d26717ca84232a756701b4a642f2b642869","name":"node_dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","services":["streamer"],"enable_msg_events":true,"port":45169},"up":true}},{"node":{"info":{"id":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","name":"node_fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","enode":"enode://d70fb3399dab49d5d0085dad53fc1383a10fe708bdbc54abcd67fe3207984bcb145ce8859b7576b0a6faa795fdf64eeb6c63759bac66f5c5baba4e6e522cead7@127.0.0.1:0","enr":"0xf88fb840f7f08be963b0a1326da55df415a377468da1b99d0e12583ab97b3af05ea36f930c3913e7e58b6154d71478ccf5836a56140d9ad60b819d94197d4c4892a10b870183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d70fb3399dab49d5d0085dad53fc1383a10fe708bdbc54abcd67fe3207984bcb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+sgIt5kjkx/r1U42EbeYEbOXPHd+dQK9VrmAPQxL94U=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fac808\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 3775 4746 4775 4589 | 68 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n001 6 836e a861 a192 b245 | 29 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n002 4 ce01 d18a deec dd92 | 14 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n003 5 eb01 efd6 ee2b eceb | 8 efd6 (0) ee2b (0) eceb (0) ed12 (0)\n004 6 f4a0 f611 f177 f005 | 6 f177 (0) f005 (0) f33c (0) f3d5 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 fa65 | 1 fa65 (0)\n009 1 fa9a | 1 fa9a (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","private_key":"59a3d47a5b2fa0f6cff34a3b7923fe5bd5bcd027704761ffaa4d22752484fe79","name":"node_fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","services":["streamer"],"enable_msg_events":true,"port":34267},"up":true}},{"node":{"info":{"id":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","name":"node_b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","enode":"enode://f9fa2390fdb8807909e77cb819962e0e99aff947653d98f8214cd66694386f1ddb1902f61be1598592f66184534da5b7519cf7eacbdcde753ff8e9359f1ad7cd@127.0.0.1:0","enr":"0xf88fb8407259bd30798ce82b8b4d9dd309e5fa69a46bc8d320221016d5cc98922b865e5968fbe4704097f55dee037fe7f3638efec032c6fb00f2e850035a729c1407bd850183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f9fa2390fdb8807909e77cb819962e0e99aff947653d98f8214cd66694386f1d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uGlb7GyOHmeUu5Q7g2Kc0skQBn5uF49vjjPE8PotdPQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8695b\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 3e19 4d75 72a5 | 68 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n001 7 cabf ee2b ed2e f611 | 31 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n002 2 8012 8330 | 9 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n003 4 a9fa a861 acf8 a192 | 6 aedc (0) acf8 (0) aba7 (0) a861 (0)\n004 4 b5fc b4e2 b355 b245 | 5 b245 (0) b355 (0) b60e (0) b5fc (0)\n============ DEPTH: 5 ==========================================\n005 7 be0f bc71 bc29 bd48 | 7 be0f (0) bd48 (0) bd96 (0) bddb (0)\n006 0 | 0\n007 1 b9d9 | 1 b9d9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","private_key":"097a05bf51118f924f1adb26e6a452bb90533346ba3a28a13f3d0d984eccf2b6","name":"node_b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","services":["streamer"],"enable_msg_events":true,"port":44203},"up":true}},{"node":{"info":{"id":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","name":"node_72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","enode":"enode://05e3a75ccb0d9a1554a071d18873ceef4aec0d0ecb15840824ce3826f6c07e9e3fc43284c66bcbc0a57268a6efef655d7cf4cd12d9052f071e8c8374907716ef@127.0.0.1:0","enr":"0xf88fb840c57b532df76cb5be5b002107b74ba9b52855af33fe4d5233521e04bd89496c5472f49ace6d880f2d12d87c4e9296883a61ed286682e8e4cebe6a0092268f49770183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10305e3a75ccb0d9a1554a071d18873ceef4aec0d0ecb15840824ce3826f6c07e9e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cqU/D7G1GFXLQFSjnL0TCadqhi024Yr5ugRWpgMlwG4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 72a53f\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 c0ad eb01 ee2b fac8 | 60 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n001 4 0807 0a21 27b5 3e19 | 30 03eb (0) 034d (0) 01a6 (0) 0639 (0)\n002 9 4a37 4bc8 4efa 4746 | 20 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n003 5 6975 68a6 62f0 672a | 9 6daa (0) 6975 (0) 68a6 (0) 6379 (0)\n004 3 7a68 7bcb 7bee | 3 7a68 (0) 7bcb (0) 7bee (0)\n005 3 75e2 772a 77ee | 3 772a (0) 77ee (0) 75e2 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 73d0 | 1 73d0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 1 72a7 | 1 72a7 (0)\n015 0 | 0\n========================================================================="}},"config":{"id":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","private_key":"b43306b3e3a12c45a24bacbc053382c7c985c642252fd778f0397ba9b30bfb78","name":"node_72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","services":["streamer"],"enable_msg_events":true,"port":40757},"up":true}},{"node":{"info":{"id":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","name":"node_f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","enode":"enode://935e2d2fb4ec2899b4a4fae26ea6325ff296a698da7c81b5a67870eba307c1869c91558f7b8835a8d6e78ff772a4330447bc3a1e94298a2e15733bc0272b4ad0@127.0.0.1:0","enr":"0xf88fb8406b3720141a112476eb8640a2b4253f2f73929aca065cf93cb76e6b04cc2e2b890c1657f0755ff355ad24af42636fcd866c96e5431800daa692711baa906569e20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102935e2d2fb4ec2899b4a4fae26ea6325ff296a698da7c81b5a67870eba307c186","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"89UIEe8QZh0++ZeAd81xgThymPMGgzq24n8ly7d0Nc0=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f3d508\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3e19 72a5 | 68 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n001 9 957e 8330 8012 a9fa | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 2 d23c cabf | 14 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n003 6 ea3d eb01 ed2e ee2b | 8 e06f (0) efd6 (0) ee2b (0) eceb (0)\n004 2 fa65 fac8 | 3 fa9a (0) fac8 (0) fa65 (0)\n005 2 f4a0 f611 | 2 f611 (0) f4a0 (0)\n============ DEPTH: 6 ==========================================\n006 2 f177 f005 | 2 f177 (0) f005 (0)\n007 0 | 0\n008 1 f33c | 1 f33c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","private_key":"1400f36ad2ebedcf9c8897f84d4c1145757c0b829eeead178385d6e58b8af6d2","name":"node_f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","services":["streamer"],"enable_msg_events":true,"port":44709},"up":true}},{"node":{"info":{"id":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","name":"node_3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","enode":"enode://7dd2bef04deecdcb459658589d12dd5ccd1e8946309bac3a44e77161a25762e2eca61c3f151d0502c1d87a6617b91e39007101f5b9cad7b3c72ec216f566f436@127.0.0.1:0","enr":"0xf88fb840ff54e5bf97acf0f558d8bdda0e66ded18a9a0147bb097d7e18a3107d9b0720f13117a5b72582ebb9c81320b0ed489e15b31d85ae5c31684331caefd43e3173a00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027dd2bef04deecdcb459658589d12dd5ccd1e8946309bac3a44e77161a25762e2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PhlZspu6yzzn3M+kHD5RuH8a/HAKPG5HE8OMwP43kN8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3e1959\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b355 b869 d23c e06f | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 9 4589 4775 52b4 62f0 | 38 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n002 7 184e 1929 1740 127c | 13 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n003 5 27b5 2471 2354 2803 | 11 2803 (0) 2dd4 (0) 2d53 (0) 21dc (0)\n004 3 36d5 3775 3590 | 3 3590 (0) 3775 (0) 36d5 (0)\n============ DEPTH: 5 ==========================================\n005 2 3871 3b83 | 2 3871 (0) 3b83 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","private_key":"79b77704fc404ea988a22902c0829368cc662928cff0a0cd1da58204d8798187","name":"node_3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","services":["streamer"],"enable_msg_events":true,"port":45515},"up":true}},{"node":{"info":{"id":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","name":"node_fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","enode":"enode://1bd15b81ce9c254be30f589cb832521a921c02c85d2816b7908cac8f0087244fb472c89900fdd6295768deef48504061995e3912039a46881d149fd5f38eebe0@127.0.0.1:0","enr":"0xf88fb84006acad544c50bd08be034b2ed91454d521ae949b4a8420cac9aa8a44849871fc14b06caa330bfc823a926ae6b2af2ec87c9d78a9ddd222cf1f35ef26518baf300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021bd15b81ce9c254be30f589cb832521a921c02c85d2816b7908cac8f0087244f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+mVbSIJXnmWTehSrHGvLoCFYDwpevATEhCT1rnK31bQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fa655b\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 7bcb 4a3c 4589 27b5 | 68 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n001 4 836e a192 b245 bc71 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 5 d18a d125 cc9f cabf | 14 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n003 7 e06f eb01 ee2b efd6 | 8 e06f (0) efd6 (0) ee2b (0) eceb (0)\n004 6 f177 f005 f33c f3d5 | 6 f611 (0) f4a0 (0) f177 (0) f005 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 2 fa9a fac8 | 2 fa9a (0) fac8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","private_key":"57a4b89b8685312b36e106e0ad52cb8ee76e8ded6c198f02a1ec38b354c211e5","name":"node_fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","services":["streamer"],"enable_msg_events":true,"port":42203},"up":true}},{"node":{"info":{"id":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","name":"node_2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","enode":"enode://782260bab233d14554e8f786b5415ffd70ac89c7c221556fdb89ffb4e8f6977ab28d8918a8255aecfcc50ac131dd44231c431d6bf85229f36f8f095b62a91bbe@127.0.0.1:0","enr":"0xf88fb84089e932678501d708a5f4b9ffb2523f4716179e653f829dc22d15905cea0441b67ab9de8d2d9e91914f5ff28e37867036b36714fa1ea6e017dd084e64029850c50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102782260bab233d14554e8f786b5415ffd70ac89c7c221556fdb89ffb4e8f6977a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JHF3YDfVWgXfKxW87+UssfTJQunhUROrwqDB/Lql1iY=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 247177\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 a192 acf8 a9fa a861 | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 5 4775 5c62 62f0 64e6 | 38 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n002 5 0e34 0a21 127c 1929 | 13 0639 (0) 01a6 (0) 034d (0) 03eb (0)\n003 3 36d5 3871 3e19 | 6 3590 (0) 3775 (0) 36d5 (0) 3b83 (0)\n004 3 2803 2dd4 2d53 | 3 2803 (0) 2dd4 (0) 2d53 (0)\n005 5 216e 21dc 221c 22bb | 5 216e (0) 21dc (0) 22bb (0) 221c (0)\n============ DEPTH: 6 ==========================================\n006 2 27db 27b5 | 2 27db (0) 27b5 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","private_key":"4fb235ecc4c97edf33736a85d3641e652e3713b0c77d9870ab993eb9d10afcc2","name":"node_2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","services":["streamer"],"enable_msg_events":true,"port":41591},"up":true}},{"node":{"info":{"id":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","name":"node_27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","enode":"enode://2c8d76747698073fd7707081b9c643e9bd58242098e91b191f417fbbcc60dc236b8df6bb2011488880af007b77f3f826285fb2ce1ff1bcbe04c21d6fb373c111@127.0.0.1:0","enr":"0xf88fb8400b8f821da1310d4ecd5caff36e8ddaa69544654cd1241aa92aae063aac2a9f9472aa9f4b065c3a29a54feff65021b136e635a9379f9af99e57923535df10c73c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032c8d76747698073fd7707081b9c643e9bd58242098e91b191f417fbbcc60dc23","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"J7VjAqiWBag1Y7p7ZtSR7CXt+tDqEBCTf8req0065YI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 27b563\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 fa65 ea3d | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 8 7bee 72a5 64e6 672a | 38 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n002 5 184e 127c 0e34 0807 | 13 0639 (0) 034d (0) 03eb (0) 01a6 (0)\n003 2 3e19 36d5 | 6 3590 (0) 3775 (0) 36d5 (0) 3b83 (0)\n004 2 2803 2d53 | 3 2803 (0) 2dd4 (0) 2d53 (0)\n005 5 216e 21dc 2354 221c | 5 216e (0) 21dc (0) 221c (0) 22bb (0)\n============ DEPTH: 6 ==========================================\n006 1 2471 | 1 2471 (0)\n007 0 | 0\n008 0 | 0\n009 1 27db | 1 27db (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","private_key":"e230f8ba6e49724537db8be23422f340405faa744171eda44d4414b8841f8d65","name":"node_27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","services":["streamer"],"enable_msg_events":true,"port":37611},"up":true}},{"node":{"info":{"id":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","name":"node_ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","enode":"enode://e3382fa3db3fda2f1f3729fc5eab5747a80c97abf5536b24fe20890ac988d61c0e3df2f91553c2768db16fdd48bfa36ec3c3e2ac4696137162859d238e4d8509@127.0.0.1:0","enr":"0xf88fb8409cf06d414b5b67bcf1e38e69f509a14cb0dcbb61db09fab4ce36203ef99b5a287b96c3febcbc9686f75736cdc30446d392ac7ad1e3cae7afece3d609b3c964f00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e3382fa3db3fda2f1f3729fc5eab5747a80c97abf5536b24fe20890ac988d61c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6j1qpQrVodVkfSE/m1z+Zxgznux+74ZESH6zwiPHvN4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ea3d6a\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 4d75 4775 4746 4589 | 68 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n001 4 a9fa a192 8330 8012 | 29 9472 (0) 957e (0) 8fb8 (0) 8d3e (0)\n002 7 c52a c2f9 d9d3 dd92 | 14 d18a (0) d125 (0) d23c (0) d9d3 (0)\n003 5 fa9a f3d5 f33c f177 | 9 fa9a (0) fac8 (0) fa65 (0) f33c (0)\n004 1 e06f | 1 e06f (0)\n============ DEPTH: 5 ==========================================\n005 5 eceb ed12 ed2e efd6 | 5 eceb (0) ed12 (0) ed2e (0) efd6 (0)\n006 0 | 0\n007 1 eb01 | 1 eb01 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","private_key":"7c2c7b1ed36aa7347eb5dd1069e933f2226e857d909980a5d78571de6aeb6867","name":"node_ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","services":["streamer"],"enable_msg_events":true,"port":46599},"up":true}},{"node":{"info":{"id":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","name":"node_f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","enode":"enode://71e720933310fdd429e11130816957617b45fd95d2e8bb1ac6e70b351c3bf2e1ad4934cef5497f766939836952bc939d6c4d694db17ee23aa22e687f7e4f1e61@127.0.0.1:0","enr":"0xf88fb840f9c7fe83c3c9fd5157e8e3320ab57aa3c67f6e1c4330581593214ef13e34ec42370db0c4aeed95c3133bf33247f122a93905351c98c5558e6d7274dd63258c0a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10371e720933310fdd429e11130816957617b45fd95d2e8bb1ac6e70b351c3bf2e1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9KD3azC89Zh8+j9PSwqjRF851gofUVGfpmDCe12DPd4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f4a0f7\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 72a5 4efa 4bc8 4a37 | 68 55fd (0) 52b4 (0) 51c2 (0) 5008 (0)\n001 4 b245 a192 836e 8330 | 29 9472 (0) 957e (0) 8fb8 (0) 8d3e (0)\n002 5 cc5f c2f9 c0ad d23c | 14 d18a (0) d125 (0) d23c (0) d9d3 (0)\n003 4 efd6 ee2b eb01 ea3d | 8 e06f (0) eceb (0) ed12 (0) ed2e (0)\n004 3 fac8 fa9a fa65 | 3 fa9a (0) fac8 (0) fa65 (0)\n============ DEPTH: 5 ==========================================\n005 4 f005 f177 f33c f3d5 | 4 f005 (0) f177 (0) f33c (0) f3d5 (0)\n006 1 f611 | 1 f611 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","private_key":"ea1b57ee39036543e929539274921246c082c626d3338b562352e1570697b380","name":"node_f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","services":["streamer"],"enable_msg_events":true,"port":36907},"up":true}},{"node":{"info":{"id":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","name":"node_184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","enode":"enode://e7521d45b3c81db4b1bfc556f89dbdbc47fc7ac609fe1eafc0a7e830bee2b50f8b128616da05f3eeed91033d64402dbec46238c619da3c159c67c715fcc42c96@127.0.0.1:0","enr":"0xf88fb84045617828d5c7c09265f7dd67603ac0e5cb3e13bfd1aa995f4fa2f933c1257a6476590491ceb0211c9174c55e57d0a600bc20d608f2b1ced80363254101b91a290183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e7521d45b3c81db4b1bfc556f89dbdbc47fc7ac609fe1eafc0a7e830bee2b50f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GE6eAKtP4WadTZn7M9QY0z7/kn2jjMmX9pZ5RDwksgs=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 184e9e\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b355 a192 d23c e06f | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 9 5c62 52b4 4746 4d75 | 38 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n002 8 2354 27b5 2471 2803 | 17 3590 (0) 3775 (0) 36d5 (0) 3b83 (0)\n003 7 0639 034d 03eb 01a6 | 8 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n============ DEPTH: 4 ==========================================\n004 3 1740 1385 127c | 3 1740 (0) 1385 (0) 127c (0)\n005 0 | 0\n006 0 | 0\n007 1 1929 | 1 1929 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","private_key":"3d7c42c0ee77391c165bc551bc1353809a10a3dc98a861729720d549f7b63386","name":"node_184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","services":["streamer"],"enable_msg_events":true,"port":43977},"up":true}},{"node":{"info":{"id":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","name":"node_64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","enode":"enode://78910b44088439d364d5486fd9eee45c43f910ad4e7a1fa7bd925bef18455f7f3e21397047344aa0abca519d7f19211c5998fb9d1977c9eb0c3586a7f3cd6c9a@127.0.0.1:0","enr":"0xf88fb8402ae44f0913233c76e5590653b9801497737a50b397a877f4bf3e49c453aa41f57cbc4a5fc6a128aa2726ea9f4bac6411fd90ef86c39ad02424c4842187c11ce30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10278910b44088439d364d5486fd9eee45c43f910ad4e7a1fa7bd925bef18455f7f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZOZC3iZnp1Y8d0BQ02iFjZmv9DPvvRy2g2Hj4kRimwM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 64e642\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ee2b dd92 bc71 | 60 d23c (0) d18a (0) d125 (0) d9d3 (0)\n001 9 2354 2471 27b5 2d53 | 30 3590 (0) 3775 (0) 36d5 (0) 3b83 (0)\n002 2 4746 4a3c | 20 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n003 3 7bee 75e2 72a5 | 9 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n004 2 68a6 6975 | 3 6daa (0) 6975 (0) 68a6 (0)\n005 2 62f0 6379 | 2 6379 (0) 62f0 (0)\n006 1 672a | 1 672a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 6450 641a | 2 6450 (0) 641a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","private_key":"01c1a76aef076f97db9bf60e66af44d4d529abe0f71f0b856c4508431e1792c9","name":"node_64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","services":["streamer"],"enable_msg_events":true,"port":41283},"up":true}},{"node":{"info":{"id":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","name":"node_bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","enode":"enode://0f1575d3b450347bb3500ed09bb0e0ff0fbf252b802e2a0e8e1ede7fedf7f6b64e2326928de87bb45800a8498d20b6bdfdd80fbd0041d7bbed546c86cbe8953e@127.0.0.1:0","enr":"0xf88fb840a158d2da63bc36da645177c654f2ca0a6cec837921556ecb04a65d57509dc46f66b7c4edfbefc8233e72992e4a8a3e41523af33e57ccd3966ae53be8491f3d3e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020f1575d3b450347bb3500ed09bb0e0ff0fbf252b802e2a0e8e1ede7fedf7f6b6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vHHz5AntuYniZgdEhJFTDFRRBTtYLqZNiCUlRRrJQLs=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bc71f3\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 64e6 75e2 | 68 3590 (0) 3775 (0) 36d5 (0) 3871 (0)\n001 3 cabf f3d5 fa65 | 31 f33c (0) f3d5 (0) f177 (0) f005 (0)\n002 7 957e 9472 8fb8 8284 | 9 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n003 3 a861 a9fa a192 | 6 aedc (0) acf8 (0) aba7 (0) a9fa (0)\n004 3 b4e2 b355 b245 | 5 b60e (0) b5fc (0) b4e2 (0) b355 (0)\n005 2 b869 b9d9 | 2 b9d9 (0) b869 (0)\n006 1 be0f | 1 be0f (0)\n============ DEPTH: 7 ==========================================\n007 4 bd48 bd96 bddb bde9 | 4 bd48 (0) bd96 (0) bddb (0) bde9 (0)\n008 0 | 0\n009 1 bc29 | 1 bc29 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","private_key":"6dccee837e7d946fc35f7afeb74d1977abaa3488cdf673d9e8a0a0d9d6ed0c21","name":"node_bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","services":["streamer"],"enable_msg_events":true,"port":36167},"up":true}},{"node":{"info":{"id":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","name":"node_75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","enode":"enode://0929c1d89eedea4cba85836dfc498319bbc4fa3a811ad84aef807af863b80365d86fc93e87d85f44822c9930d62eb6668cc64ad0fab431c7afe2824529e934f7@127.0.0.1:0","enr":"0xf88fb840d80d8a682e3360189c74b617f133ec7585e50d9dbed3329e8625c30c1d7471353fdf1a49ca51ca63b7c0dff86d48c2bd2d19f6c45fae4b5587fe23c6781bee3f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030929c1d89eedea4cba85836dfc498319bbc4fa3a811ad84aef807af863b80365","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"deKCwPPTVaQFc+ZXjFqsmOcmKXCpI59Nzv0m1vAItVM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 75e282\npopulation: 42 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 ee2b eb01 c0ad cc5f | 60 f33c (0) f3d5 (0) f005 (0) f177 (0)\n001 5 0807 0a21 3e19 2d53 | 30 3590 (0) 3775 (0) 36d5 (0) 3871 (0)\n002 12 5008 52b4 5a8b 5c62 | 20 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n003 9 64e6 6450 641a 672a | 9 6daa (0) 6975 (0) 68a6 (0) 6379 (0)\n004 3 7a68 7bcb 7bee | 3 7a68 (0) 7bcb (0) 7bee (0)\n005 3 73d0 72a5 72a7 | 3 73d0 (0) 72a7 (0) 72a5 (0)\n============ DEPTH: 6 ==========================================\n006 2 772a 77ee | 2 772a (0) 77ee (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","private_key":"cdafa79406c7b344d079038e1495604987c7c5cb47cc80bb494dc78d10085474","name":"node_75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","services":["streamer"],"enable_msg_events":true,"port":39125},"up":true}},{"node":{"info":{"id":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","name":"node_cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","enode":"enode://1a24350591770da447d5dbf6fba74dd85dd27050cc1a68603b8cb89e76b2eb77b4022b9d2cfbadc9d4a727b883104cc0b56287d9675b33d8c4d0f4f32f75e4e4@127.0.0.1:0","enr":"0xf88fb840b98c3132ab4d278a63670e3ae4432632206c358799c769ff7083d4b91cbad7d65f7b5fd6d79c96d8841b3e81ce9c3e58d82837512f7cfdd3619ddebea6e926e00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021a24350591770da447d5dbf6fba74dd85dd27050cc1a68603b8cb89e76b2eb77","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zF+i1JIQ4kCYOwhT/xUAPw02bwXLH2SGuuKGLMqFLMU=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cc5fa2\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0f31 01a6 68a6 75e2 | 68 3590 (0) 3775 (0) 36d5 (0) 3871 (0)\n001 4 be0f b4e2 a9fa 8012 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 6 eceb ed12 ed2e f177 | 17 f33c (0) f3d5 (0) f177 (0) f005 (0)\n003 6 deec dd92 d9d3 d23c | 6 d18a (0) d125 (0) d23c (0) d9d3 (0)\n004 3 c52a c0ad c2f9 | 3 c52a (0) c2f9 (0) c0ad (0)\n005 2 c9ef cabf | 2 c9ef (0) cabf (0)\n============ DEPTH: 6 ==========================================\n006 1 ce01 | 1 ce01 (0)\n007 0 | 0\n008 1 cc9f | 1 cc9f (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","private_key":"e1260778d751d38a387d4a88c5e115edf9e5478423866b27485a2292dc8e8c5a","name":"node_cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","services":["streamer"],"enable_msg_events":true,"port":35235},"up":true}},{"node":{"info":{"id":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","name":"node_68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","enode":"enode://45b4b209ea27a1478d3439b7b1c5e07f0f8021590ce28e6e498788ffc5a97d2372743f9b838796df1a3784a7e7d36abacf6f765e69941f4735b52eeab4bbcac5@127.0.0.1:0","enr":"0xf88fb840adb223ccf956ef0b48ac44f1fb4955cd78f315fae65a8a26fe14a6b0516b68982cd7f7c163fd51357a9c9f8cf8b7d7a8b002b933909fa33e717cb15e8a9e5bbb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10345b4b209ea27a1478d3439b7b1c5e07f0f8021590ce28e6e498788ffc5a97d23","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aKY+vEgz3t/bbVNEOP/MzQQvYENL7g459Ms3JudBPno=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 68a63e\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 b9d9 a192 a861 a9fa | 60 a192 (0) aedc (0) acf8 (0) aba7 (0)\n001 4 0807 03eb 27b5 3e19 | 30 3590 (0) 3775 (0) 36d5 (0) 3871 (0)\n002 4 52b4 5a8b 4bc8 4a3c | 20 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n003 3 7bee 75e2 72a5 | 9 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n004 6 6379 62f0 672a 6450 | 6 6379 (0) 62f0 (0) 672a (0) 6450 (0)\n============ DEPTH: 5 ==========================================\n005 1 6daa | 1 6daa (0)\n006 0 | 0\n007 1 6975 | 1 6975 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","private_key":"5b70dd7e5dac1e6c7338aa2968162aec253e332ea3599bec657be6d04f612da6","name":"node_68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","services":["streamer"],"enable_msg_events":true,"port":33311},"up":true}},{"node":{"info":{"id":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","name":"node_4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","enode":"enode://4ab4e0bfbba774d3dff10d02b4464d3a06ef1a9c14fd4084ec4c239a398653aa3e6c1a58462ffd6fe0d0d27c3dc284999c3560886891b362e8e99ad385747b84@127.0.0.1:0","enr":"0xf88fb840b36e6eecac0592d08346ad3d82fd3b0879b1b73d47026222ac4afb89289daf5504012dd22594a354b108a7396d8c509bc3b373adcd376aa441dc778d6c2c72ea0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024ab4e0bfbba774d3dff10d02b4464d3a06ef1a9c14fd4084ec4c239a398653aa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Sjw58ETEJcFT1JANsw+DnXhmyOD09NONkgXmf7VAmI4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4a3c39\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 e06f eb01 fa65 fac8 | 60 f3d5 (0) f33c (0) f177 (0) f005 (0)\n001 2 184e 27b5 | 30 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n002 3 75e2 64e6 68a6 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 4 5008 52b4 5a8b 5c62 | 9 55fd (0) 51c2 (0) 5008 (0) 52b4 (0)\n004 3 4746 459b 4589 | 4 459b (0) 4589 (0) 4746 (0) 4775 (0)\n005 2 4d75 4efa | 4 4c21 (0) 4cc2 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 4bc8 | 1 4bc8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 4a37 | 1 4a37 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","private_key":"1dfd38b15db0c055f13b2e98bdef34c32d745b817c9f37516af52c78e2ba2a3e","name":"node_4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","services":["streamer"],"enable_msg_events":true,"port":34469},"up":true}},{"node":{"info":{"id":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","name":"node_8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","enode":"enode://3fc2da9e04199b0c080846d5f56ed8ab73bed014a03c242832e9be303880d706f671d59b5e15d134f4da9410d101204d0567afcde9ab261c83461744ce520751@127.0.0.1:0","enr":"0xf88fb84072d464b640b8c4621eea600036ab5b62f29ca3e9b26135a37947d95f54e9890f6559c3a84ea0b623de61d0d0ad41f9b85abe44906f2bf8e22df934c061fe6cd90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033fc2da9e04199b0c080846d5f56ed8ab73bed014a03c242832e9be303880d706","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gzDiuK4vGEu43F4VP6+k2v6G+E7GktPukUE8wHsc2eI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8330e2\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 2471 127c 0e34 0807 | 68 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n001 10 d125 dd92 c2f9 cabf | 31 f177 (0) f005 (0) f33c (0) f3d5 (0)\n002 12 a861 acf8 a192 bc71 | 20 a192 (0) aedc (0) acf8 (0) aba7 (0)\n003 2 9472 957e | 2 9472 (0) 957e (0)\n004 3 8fb8 8d3e 8b35 | 3 8b35 (0) 8d3e (0) 8fb8 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 8012 | 1 8012 (0)\n007 1 8284 | 1 8284 (0)\n008 0 | 0\n009 1 836e | 1 836e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","private_key":"655f2ae9378e87cd580544c9cb99036bcfb2795b603d200b06e0df9f41438877","name":"node_8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","services":["streamer"],"enable_msg_events":true,"port":46233},"up":true}},{"node":{"info":{"id":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","name":"node_b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","enode":"enode://d3a39529d6f6310edfbbecde895c8a3024336ed33e9904646e9e3e86718ed5248faaa14fd06beb2acbc38689cef3d1d7235845d431d25deb99ca91471a529092@127.0.0.1:0","enr":"0xf88fb840f566ab01e80bef9b69c5c6341ef1ee20605368864011471a8ae8bb9a47a27b434331d6c7e2b361e2766764ed97aacb871ec2912f49c7f45f1e90f321c4c9c02a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d3a39529d6f6310edfbbecde895c8a3024336ed33e9904646e9e3e86718ed524","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"skU8bnVaMO+5EZT6YHszUtdbaQXESLCa9K6t86RFtjM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2453c\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 672a 75e2 72a5 5c62 | 68 58a9 (0) 5a8b (0) 5be6 (0) 5cc1 (0)\n001 8 e06f fa65 fac8 f4a0 | 31 f005 (0) f177 (0) f3d5 (0) f33c (0)\n002 4 8d3e 8012 836e 8330 | 9 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n003 4 a192 acf8 a9fa a861 | 6 a192 (0) aedc (0) acf8 (0) aba7 (0)\n004 5 b9d9 b869 bc71 bde9 | 9 b9d9 (0) b869 (0) be0f (0) bd48 (0)\n============ DEPTH: 5 ==========================================\n005 3 b60e b5fc b4e2 | 3 b60e (0) b5fc (0) b4e2 (0)\n006 0 | 0\n007 1 b355 | 1 b355 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","private_key":"34a8d5008ee38c02fa2deffed8ac1eb5e4238f26925bba625642248ee6f4b502","name":"node_b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","services":["streamer"],"enable_msg_events":true,"port":44445},"up":true}},{"node":{"info":{"id":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","name":"node_c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","enode":"enode://e8139ca6fd25a63ec0226a7e0d1b3e24dd4a64e28de32b96e967dce072e64ca1eda7974197edb2b54bce2bff0c78543b0d9b29eb6ea9610bad964a9177b0f40a@127.0.0.1:0","enr":"0xf88fb840ea7ff8e5655a5641139c8258f6ea2d2fcaf6b7e83105a5a3489aa0c3611a21c5763a5b6a12671c24fd597686f485cdcc17d168e4ec02458d74c3be1cf0455d480183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e8139ca6fd25a63ec0226a7e0d1b3e24dd4a64e28de32b96e967dce072e64ca1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wK3zlK99VnDBzoxr6ikvvAPFauK2NuLzAzEaRVuzUA8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c0adf3\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 62f0 672a 7bee 75e2 | 68 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n001 5 9472 8b35 a9fa b4e2 | 29 957e (0) 9472 (0) 8fb8 (0) 8d3e (0)\n002 5 f4a0 fa65 ed12 ed2e | 17 f3d5 (0) f33c (0) f177 (0) f005 (0)\n003 5 d23c d18a d125 dd92 | 6 d18a (0) d125 (0) d23c (0) deec (0)\n004 5 ce01 cc5f cc9f c9ef | 5 c9ef (0) cabf (0) ce01 (0) cc5f (0)\n============ DEPTH: 5 ==========================================\n005 1 c52a | 1 c52a (0)\n006 1 c2f9 | 1 c2f9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","private_key":"269f2338eae4174d5d03bcc681f76dc898907e6bcaa160114424dc97aa7307b8","name":"node_c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","services":["streamer"],"enable_msg_events":true,"port":36773},"up":true}},{"node":{"info":{"id":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","name":"node_2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","enode":"enode://3f4db397fc277b2e70200ee0df565958becb600266ad3362cb2fcf934318cca69ae8ac6ecf3040c7bc23192473e12a8828383ac4106878567e97fc0c3ff63339@127.0.0.1:0","enr":"0xf88fb840e7c428cebdf711272fc568f71b015bf4dcf2c02936b88067d975ddf1d00fd52a28c15718e1c7dd0120d9614b4063392c515e52ffdf2c222ea70d6651df4cc9830183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033f4db397fc277b2e70200ee0df565958becb600266ad3362cb2fcf934318cca6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LVMcUBg/ARUmmz/q7PRZJ6OsROG+KiY8fl0idNg3mxw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2d531c\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 e06f ee2b c0ad | 60 a192 (0) aedc (0) acf8 (0) aba7 (0)\n001 7 4775 5c62 64e6 672a | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 6 0639 03eb 0a21 0e34 | 13 0639 (0) 034d (0) 03eb (0) 01a6 (0)\n003 3 36d5 3b83 3e19 | 6 3590 (0) 3775 (0) 36d5 (0) 3871 (0)\n004 7 2471 27db 27b5 216e | 8 216e (0) 21dc (0) 22bb (0) 221c (0)\n============ DEPTH: 5 ==========================================\n005 1 2803 | 1 2803 (0)\n006 0 | 0\n007 0 | 0\n008 1 2dd4 | 1 2dd4 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","private_key":"ee9db292a301dd892d1aedca4ef8a90d737b64e572c05b6cca13f334c41ba6dd","name":"node_2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","services":["streamer"],"enable_msg_events":true,"port":45347},"up":true}},{"node":{"info":{"id":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","name":"node_ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","enode":"enode://82b34fd84b01efb9af41bd124c2681e968807afaca2443d11d60658225bdd803500d87c13fa9c5211d1653afd9bf44755a722f01f91e518459780203fad0cd43@127.0.0.1:0","enr":"0xf88fb840f0a7a792a4415787d483eb211eff11116792290e2670e5a0bd87f67c81f5dc54301614339b1960d225318d4f7745e6af895493e42d6c270f429fd4def2e241560183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10382b34fd84b01efb9af41bd124c2681e968807afaca2443d11d60658225bdd803","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7isK/2GphG0T3jpycS7wvzykKtjaV+gXWcJCeXJY7+w=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ee2b0a\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 6975 68a6 62f0 672a | 68 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n001 10 bc29 be0f b9d9 b869 | 29 a192 (0) aedc (0) acf8 (0) aba7 (0)\n002 3 d125 d9d3 cc9f | 14 d23c (0) d18a (0) d125 (0) deec (0)\n003 6 f33c f3d5 f611 f4a0 | 9 f3d5 (0) f33c (0) f177 (0) f005 (0)\n004 1 e06f | 1 e06f (0)\n005 2 ea3d eb01 | 2 ea3d (0) eb01 (0)\n============ DEPTH: 6 ==========================================\n006 3 eceb ed12 ed2e | 3 ed12 (0) ed2e (0) eceb (0)\n007 1 efd6 | 1 efd6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","private_key":"51ff90bcd8f1d150186f82b07c3bf74723a2111416020b1205876876d1456e91","name":"node_ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","services":["streamer"],"enable_msg_events":true,"port":34721},"up":true}},{"node":{"info":{"id":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","name":"node_8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","enode":"enode://638906e18d86b361cea53902fae144fb0a7bbe1c7f674a34e10247c074d176f58a797837069d5a21666ffb9476348fb394b80ecc0b1023d2111a85eb5c1952fb@127.0.0.1:0","enr":"0xf88fb84024f9e170931c28fb70978c7ce403865edd91dde7ffbb04e68f03512bf8ed726d5db895185177805ad4e5c9c73717ea1e97430505269dd32916cc5949aa72e7410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103638906e18d86b361cea53902fae144fb0a7bbe1c7f674a34e10247c074d176f5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gBKnr3HXbYgiAs+TclI0eMzr6iNEMAbH8pwqgxBs0bM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8012a7\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 2471 0a21 4775 | 68 21dc (0) 216e (0) 221c (0) 22bb (0)\n001 14 dd92 d23c d125 c2f9 | 31 d23c (0) d18a (0) d125 (0) deec (0)\n002 12 acf8 a861 a9fa a192 | 20 a192 (0) aedc (0) acf8 (0) aba7 (0)\n003 2 9472 957e | 2 9472 (0) 957e (0)\n004 3 8b35 8d3e 8fb8 | 3 8b35 (0) 8d3e (0) 8fb8 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 3 8284 836e 8330 | 3 8284 (0) 836e (0) 8330 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","private_key":"9a9f5d8e07fc393a86b48129afcd4aa66dda3b5ff3498c7239e89572c4f218a1","name":"node_8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","services":["streamer"],"enable_msg_events":true,"port":33055},"up":true}},{"node":{"info":{"id":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","name":"node_47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","enode":"enode://ea98a4cc6d36e0a9e09061c40743fd14032109b1a0d8d20d2e20b419275c526f99c5c19b6123a6e78d21c5497e16fb49ca279795954f2ceac05ea01c772c83a4@127.0.0.1:0","enr":"0xf88fb8403249a6dba1fd864f716568258f1c1c1044871b1ab897dfccb42a89c5ad14ee743a196a92533717f40d4e17de9d9a9cd2cd14cc87855f4c270ac5407a6c8e0e530183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ea98a4cc6d36e0a9e09061c40743fd14032109b1a0d8d20d2e20b419275c526f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"R3U/3KhV6nmr9me1CqnJChMtRL3RVyw+PEEcjufltfQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 47753f\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 fac8 f4a0 ea3d efd6 | 60 d23c (0) d18a (0) d125 (0) deec (0)\n001 9 27b5 2471 2354 2d53 | 30 3b83 (0) 3871 (0) 3e19 (0) 3590 (0)\n002 4 672a 62f0 72a5 75e2 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 3 5c62 5a8b 5008 | 9 58a9 (0) 5be6 (0) 5a8b (0) 5cc1 (0)\n004 5 4a37 4bc8 4d75 4c21 | 7 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 459b 4589 | 2 459b (0) 4589 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 4746 | 1 4746 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","private_key":"3f946790db720a1aff2dcaef0a931c26359587ade7dbbd5611d6e4e4c48b45a7","name":"node_47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","services":["streamer"],"enable_msg_events":true,"port":39017},"up":true}},{"node":{"info":{"id":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","name":"node_efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","enode":"enode://36e15237c01d8907bd512448e053510123d7742258fc18294dd99bc2dd171d87f1f14fd30584dff7196d37ab49ee7eb689238aeb159e0162efb3c35ba47d4723@127.0.0.1:0","enr":"0xf88fb84010215926d38f4b9af18d9d9e2831fd468800ada49bcdf6dcf9254373c72e00187ee5495c9979f3684cd5ee9750204e55dd9154ae90f78e9775578a2a221c8fd20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10336e15237c01d8907bd512448e053510123d7742258fc18294dd99bc2dd171d87","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"79aNLJk0bKCFye+Ja+5hJa2GOEEylRCPOpKyR6Qcpik=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: efd68d\npopulation: 22 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 127c 4775 | 68 3871 (0) 3b83 (0) 3e19 (0) 3590 (0)\n001 2 8012 8330 | 29 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n002 5 c9ef cabf d23c d9d3 | 14 d18a (0) d125 (0) d23c (0) deec (0)\n003 6 f3d5 f4a0 f611 fac8 | 9 f177 (0) f005 (0) f33c (0) f3d5 (0)\n004 1 e06f | 1 e06f (0)\n005 2 ea3d eb01 | 2 ea3d (0) eb01 (0)\n============ DEPTH: 6 ==========================================\n006 3 eceb ed12 ed2e | 3 eceb (0) ed12 (0) ed2e (0)\n007 1 ee2b | 1 ee2b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","private_key":"245b148ec129e7a6491d45cc5c65217870ae2de275e5b688021b636011178055","name":"node_efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","services":["streamer"],"enable_msg_events":true,"port":34239},"up":true}},{"node":{"info":{"id":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","name":"node_127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","enode":"enode://7db629e8af234327ae65a632ab973188f8d44b4dc9336cc42246df45a87caa6a64c3a3b41a68f623e284a4bf0462a85ab81b0a51c28dedf1cb3357451a56d5c6@127.0.0.1:0","enr":"0xf88fb840acbb379c02f6b49e0fcc45220b6ed91e7e13bfc2beaf4a0ef7644b445216a379260871c4d3b022edab98a8cd70bbc4ca98623ea4c3b365840e157dd64c2147470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027db629e8af234327ae65a632ab973188f8d44b4dc9336cc42246df45a87caa6a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EnyJ6ulLGV3y6163tE9jSttzwRTSCJzZBLVpiMhnThE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 127c89\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 b355 8d3e 836e 8330 | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 5 4d75 4746 5008 7bcb | 38 5cc1 (0) 5c62 (0) 58a9 (0) 5be6 (0)\n002 6 36d5 3e19 2d53 2471 | 17 3e19 (0) 3871 (0) 3b83 (0) 3590 (0)\n003 6 01a6 03eb 0a21 0807 | 8 0639 (0) 01a6 (0) 034d (0) 03eb (0)\n004 2 1929 184e | 2 1929 (0) 184e (0)\n============ DEPTH: 5 ==========================================\n005 1 1740 | 1 1740 (0)\n006 0 | 0\n007 1 1385 | 1 1385 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","private_key":"54a20d22b4654e13d2547690e34e3de3cae15187e8034f587fe718896fa946f7","name":"node_127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","services":["streamer"],"enable_msg_events":true,"port":45857},"up":true}},{"node":{"info":{"id":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","name":"node_69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","enode":"enode://08a249844dec3d48a57ec53c79310b2f24cc27fedf91464cc30bd2213ec844437a00e3cc7d5e2f97b99516b21901ffe2e2a451340f594023bfac4463750c1ccf@127.0.0.1:0","enr":"0xf88fb84026ec31c1451ae3cc1ab533f52d87c62368080c439aff174f1f0a67fe50b956cc31c5260e382dcee5546e815dfa2dc26802922227f77d4bb25e5b47975222653a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10308a249844dec3d48a57ec53c79310b2f24cc27fedf91464cc30bd2213ec84443","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aXU4ZarKr3LZv20mXIhdP3BYBP9LJnX3qoYGQdrKsqA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 697538\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ee2b cc9f 836e bd96 | 60 f177 (0) f005 (0) f3d5 (0) f33c (0)\n001 6 2d53 03eb 0e34 0807 | 30 3871 (0) 3b83 (0) 3e19 (0) 3590 (0)\n002 5 5a8b 52b4 5008 4bc8 | 20 5cc1 (0) 5c62 (0) 58a9 (0) 5be6 (0)\n003 3 72a5 77ee 75e2 | 9 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n004 6 6379 62f0 672a 641a | 6 672a (0) 641a (0) 6450 (0) 64e6 (0)\n============ DEPTH: 5 ==========================================\n005 1 6daa | 1 6daa (0)\n006 0 | 0\n007 1 68a6 | 1 68a6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","private_key":"ce7b2f3ec596e7541804d73b0233cf93b061d33437fded3aae42df7d2fed2431","name":"node_69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","services":["streamer"],"enable_msg_events":true,"port":42103},"up":true}},{"node":{"info":{"id":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","name":"node_bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","enode":"enode://6ff77126c9946af5efe7c6850f8e59fa25bf6b808b00fade65d30e736f8eae7cc9fa35eb0f4382f95e5408b1cb030919d4f43e911ad1019ea5908d31ace54fb0@127.0.0.1:0","enr":"0xf88fb84047976194f9b1bbc1d405c1f0db707474b3b32a9a96750e1efcc39c5af51fa41213297557f076cbdd35bde4e8f909eeafe16d9694c5ce304ebcec675c7b7e11ba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026ff77126c9946af5efe7c6850f8e59fa25bf6b808b00fade65d30e736f8eae7c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vZYH1fV/e2909K2YG+NomI70i18x4/2WyrO7eQ1WgVA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bd9607\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 4589 6975 | 68 3871 (0) 3b83 (0) 3e19 (0) 3590 (0)\n001 5 cabf f611 f33c f005 | 31 f177 (0) f005 (0) f3d5 (0) f33c (0)\n002 4 8d3e 8012 836e 8330 | 9 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n003 4 a192 a9fa a861 acf8 | 6 a192 (0) aedc (0) acf8 (0) aba7 (0)\n004 5 b4e2 b5fc b60e b355 | 5 b60e (0) b5fc (0) b4e2 (0) b355 (0)\n005 2 b9d9 b869 | 2 b869 (0) b9d9 (0)\n006 1 be0f | 1 be0f (0)\n007 2 bc29 bc71 | 2 bc29 (0) bc71 (0)\n008 1 bd48 | 1 bd48 (0)\n============ DEPTH: 9 ==========================================\n009 2 bddb bde9 | 2 bddb (0) bde9 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","private_key":"cbe3758f2717e1a3a9e53818d435eee8edc340e4e3d507cee9efdab8eddab838","name":"node_bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","services":["streamer"],"enable_msg_events":true,"port":40601},"up":true}},{"node":{"info":{"id":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","name":"node_45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","enode":"enode://99d33a9f9eebfa22c429478e4a0a01fa06d35e27b162331e8e4464a87d2adf5ec35e26697560f760cc58c5afd36ced8e1be393168089020b5881a44264fe609d@127.0.0.1:0","enr":"0xf88fb840b358458a817fa640619f1d3a7f3aaa81f7de7b7830255d88d70eb1aaf9b3c921433aea9123e9756df8724646634423960203427b8ff8e7f8929a6a501a51c6740183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10399d33a9f9eebfa22c429478e4a0a01fa06d35e27b162331e8e4464a87d2adf5e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RYla/2dAefa+AuTMdJFNYxJcP+SLtpBWwHDHExn+ofo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 45895a\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 ed2e eceb ea3d e06f | 60 f3d5 (0) f33c (0) f177 (0) f005 (0)\n001 9 2dd4 2803 36d5 3e19 | 30 3871 (0) 3b83 (0) 3e19 (0) 3590 (0)\n002 4 75e2 72a5 672a 6975 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 4 55fd 5008 5c62 5a8b | 9 5cc1 (0) 5c62 (0) 58a9 (0) 5be6 (0)\n004 4 4d75 4efa 4bc8 4a3c | 7 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 4775 4746 | 2 4746 (0) 4775 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 459b | 1 459b (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","private_key":"4be326b4bad9ec6d897672d72f86d7c21742af31459c61ff9d29a7c4f2b87288","name":"node_45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","services":["streamer"],"enable_msg_events":true,"port":35991},"up":true}},{"node":{"info":{"id":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","name":"node_0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","enode":"enode://55140e8f1873f8006a1e1a309e31669c0442eb381ea30f7e4261c7979760b5b10030ca2c72d35492c2c3d456c560f898249944dfbd3d408c456b3ded66c13e5d@127.0.0.1:0","enr":"0xf88fb840a3583d99fad5b4703c5847493453e0b451c4d555d6ee5a8833671be976378a823cf88dd213ebdd319ff433e569d46dd3d19c6e06e909f79ce6d847f6145a430b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10355140e8f1873f8006a1e1a309e31669c0442eb381ea30f7e4261c7979760b5b1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CiFcd2W+LK6/dq0+gBe7wqqt+ODdSFmveBlToFZMXVk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0a215c\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d23c fa9a e06f 8d3e | 60 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n001 7 672a 64e6 75e2 72a7 | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 7 3e19 3871 36d5 2d53 | 17 3871 (0) 3b83 (0) 3e19 (0) 3590 (0)\n003 5 1385 127c 1740 1929 | 5 1929 (0) 184e (0) 1740 (0) 1385 (0)\n004 4 0639 01a6 034d 03eb | 4 0639 (0) 01a6 (0) 034d (0) 03eb (0)\n============ DEPTH: 5 ==========================================\n005 2 0f31 0e34 | 2 0f31 (0) 0e34 (0)\n006 1 0807 | 1 0807 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","private_key":"48398a9192cbe71d3dae01f8cd736bd6fa81f40d86363732910ab557934ac32a","name":"node_0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","services":["streamer"],"enable_msg_events":true,"port":32803},"up":true}},{"node":{"info":{"id":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","name":"node_0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","enode":"enode://a657bea94ef83334a2eb69fa819e389faa047abb53fdce1ada5de9f2ad8577331fc88094fd258ff4dfb4ecc38e37cc65b0807dc8c13d0f933d0975b4930a152a@127.0.0.1:0","enr":"0xf88fb840e7a038b940736e411d390aa7ac6e0d5380fb096ac5b06fb69e561038d33eece64602defd9da5012d991e93b78ce269e66ae7083c78fa635400a7941b55511bd50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a657bea94ef83334a2eb69fa819e389faa047abb53fdce1ada5de9f2ad857733","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DjRMbifCO9Nr3T3c76Tld/3JRh5Sx84gE1czoIuYe4I=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e344c\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 d23c e06f b355 8330 | 60 f3d5 (0) f33c (0) f177 (0) f005 (0)\n001 4 7bcb 6975 4746 4775 | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 6 36d5 3e19 2d53 2471 | 17 3590 (0) 3775 (0) 36d5 (0) 3b83 (0)\n003 4 1929 184e 1740 127c | 5 1929 (0) 184e (0) 1740 (0) 1385 (0)\n004 3 034d 03eb 01a6 | 4 0639 (0) 01a6 (0) 034d (0) 03eb (0)\n============ DEPTH: 5 ==========================================\n005 2 0807 0a21 | 2 0807 (0) 0a21 (0)\n006 0 | 0\n007 1 0f31 | 1 0f31 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","private_key":"bd217ea07881a97e7c8d265ab1ea058cd33f23e29d61169327cafa40e7eb7e35","name":"node_0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","services":["streamer"],"enable_msg_events":true,"port":32907},"up":true}},{"node":{"info":{"id":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","name":"node_836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","enode":"enode://7955513f0867be5484a68700771fab5ed2bcaff4c5fe81e88b07b95e273742fe920d733d44b7b187d1d5ddca6eccb92921a69f1a5f1874d9eee4d61f4e849f3d@127.0.0.1:0","enr":"0xf88fb840e3fdd157b8d17ad9462935700437f5e3379cc6b910e447979420623db2209a132159463905a57dace86b0516654cfb2e39b3e9c5a376652fd559309c05dcf4410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037955513f0867be5484a68700771fab5ed2bcaff4c5fe81e88b07b95e273742fe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g25l3+bwHh0pNGVcGEbLhv7W5B6pUaEJ16ILsUy0wQo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 836e65\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 4589 6975 68a6 62f0 | 68 7bcb (0) 7bee (0) 7a68 (0) 73d0 (0)\n001 8 fac8 fa9a fa65 f4a0 | 31 f177 (0) f005 (0) f3d5 (0) f33c (0)\n002 6 b9d9 bc71 bd96 b245 | 20 be0f (0) bc29 (0) bc71 (0) bd48 (0)\n003 2 9472 957e | 2 9472 (0) 957e (0)\n004 3 8b35 8fb8 8d3e | 3 8b35 (0) 8fb8 (0) 8d3e (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 8012 | 1 8012 (0)\n007 1 8284 | 1 8284 (0)\n008 0 | 0\n009 1 8330 | 1 8330 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","private_key":"828792ee935c8a9739d8fffdccb73fdb38a998850e0a4e5f3a67fad91701cc2c","name":"node_836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","services":["streamer"],"enable_msg_events":true,"port":46599},"up":true}},{"node":{"info":{"id":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","name":"node_cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","enode":"enode://fcd2ab0c2237f9a09130eef63262c5dbe407ec25a8ff88d55dae0c65c7352a829f879f303aebfdc8d979b2843b7b61933608d4f89ebe778995455c135371ba78@127.0.0.1:0","enr":"0xf88fb840ebf4dbd2665552b22575e2991f43e3d416eff9488c23d9f3580a78a225117d891a35ec6b32c752922b70470cc162564533cd54db06d6b9cf023e19932ef864e10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fcd2ab0c2237f9a09130eef63262c5dbe407ec25a8ff88d55dae0c65c7352a82","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zJ9l1zTxo7vGAZ4Wb+NVvX/DO7SIcEOlzPUyqbo1Y3k=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cc9f65\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6975 62f0 0f31 01a6 | 68 7a68 (0) 7bcb (0) 7bee (0) 772a (0)\n001 2 acf8 836e | 29 b4e2 (0) b5fc (0) b60e (0) b355 (0)\n002 6 f33c fa65 eceb ed2e | 17 f177 (0) f005 (0) f3d5 (0) f33c (0)\n003 5 d125 d23c deec dd92 | 6 d23c (0) d18a (0) d125 (0) deec (0)\n004 3 c0ad c2f9 c52a | 3 c52a (0) c2f9 (0) c0ad (0)\n005 2 cabf c9ef | 2 c9ef (0) cabf (0)\n============ DEPTH: 6 ==========================================\n006 1 ce01 | 1 ce01 (0)\n007 0 | 0\n008 1 cc5f | 1 cc5f (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","private_key":"4a1901aae6d17a696581fa1df5fb404606b4894884e5ce2ae52f014c1f7ab1ec","name":"node_cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","services":["streamer"],"enable_msg_events":true,"port":45379},"up":true}},{"node":{"info":{"id":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","name":"node_eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","enode":"enode://6570b12362a67ae69eb59bbb7ef187f002e9d8c189bc44e7a66d49e48442754fb3c332e796a34094a0c32ca763a56bf77272b15090ea404f1fde0f8f02f69d9a@127.0.0.1:0","enr":"0xf88fb840a0eb32cba24198285bd35892feb415dc76bca095952a0b36d8b453aadb7c61fc63195b1956ee0ca78f7e50df142ed78fea1741090dc0988605592bd8b167af1a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026570b12362a67ae69eb59bbb7ef187f002e9d8c189bc44e7a66d49e48442754f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6wH/gDB6+/x0V8lllM1LpNAKy3/SWnVx0SIxaL1m/wk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eb01ff\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 4a3c 7bee 72a7 72a5 | 68 7a68 (0) 7bcb (0) 7bee (0) 772a (0)\n001 3 8012 a861 bd96 | 29 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n002 4 c52a c0ad c9ef cc9f | 14 d18a (0) d125 (0) d23c (0) deec (0)\n003 7 f4a0 f611 f3d5 f33c | 9 f177 (0) f005 (0) f3d5 (0) f33c (0)\n004 1 e06f | 1 e06f (0)\n============ DEPTH: 5 ==========================================\n005 5 ed12 ed2e eceb efd6 | 5 efd6 (0) ee2b (0) ed12 (0) ed2e (0)\n006 0 | 0\n007 1 ea3d | 1 ea3d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","private_key":"e5be2c35a1499c508166c81de8a45fd1cda4bea223164bf47ba8c974725fdf75","name":"node_eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","services":["streamer"],"enable_msg_events":true,"port":33263},"up":true}},{"node":{"info":{"id":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","name":"node_08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","enode":"enode://7d4f4b1f1c3dc1f6418391214afa500757d43f64aea2f11d7694de79d243af3e1c1c1662233b71306cc1c060ddf7e21dbdbbac53d0bcfe2fd3b6f29c7656e69f@127.0.0.1:0","enr":"0xf88fb840da1dfdefbe43711df3887e5825a698e2931b2e4fda60051803d6402f11fe21a14ee3b5bac8cf9543cad98736a88ae0734609ac9b8ba3d04815d21c44e5c2551e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037d4f4b1f1c3dc1f6418391214afa500757d43f64aea2f11d7694de79d243af3e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CAd8DOjUEwwURkST6RZKi65htGRrHsSImedfL2+bjGY=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 08077c\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 eb01 8d3e 8330 a861 | 60 c52a (0) c2f9 (0) c0ad (0) cabf (0)\n001 10 4589 4775 4746 7bcb | 38 7bee (0) 7bcb (0) 7a68 (0) 73d0 (0)\n002 5 3e19 3871 3b83 27b5 | 17 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n003 4 1740 1385 127c 184e | 5 1929 (0) 184e (0) 1385 (0) 127c (0)\n004 4 0639 01a6 034d 03eb | 4 0639 (0) 01a6 (0) 034d (0) 03eb (0)\n============ DEPTH: 5 ==========================================\n005 2 0f31 0e34 | 2 0e34 (0) 0f31 (0)\n006 1 0a21 | 1 0a21 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","private_key":"97f4ac0685f5a566c69307b57852116db766c3319995e5a30c98d0b770d9ebf8","name":"node_08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","services":["streamer"],"enable_msg_events":true,"port":34207},"up":true}},{"node":{"info":{"id":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","name":"node_a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","enode":"enode://288eb859b2b3db8e349860a6324c65887218b6162fb33a09fc8b18ae24bfc20a7f490f036a7c5b889d68f8eb9efe590b77d3983019b8f8ef4d3cfa76dafc655e@127.0.0.1:0","enr":"0xf88fb8404a25f16978fe1fb9671930db81e544e0cff37050b6c6325193d7feccf29e22c45e8bef40ecda5b29e9cea5d10e7e70ee0a8a02744a915a78858248804e87186e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102288eb859b2b3db8e349860a6324c65887218b6162fb33a09fc8b18ae24bfc20a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qGEXFHt48gptiD03cV2oUXjK2J7/ZQp0qonnvBG8Rac=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a86117\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 73d0 68a6 5008 2471 | 68 7bee (0) 7bcb (0) 7a68 (0) 73d0 (0)\n001 8 dd92 c2f9 f3d5 f611 | 31 f611 (0) f4a0 (0) f177 (0) f005 (0)\n002 4 8d3e 8012 8330 836e | 9 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n003 9 b9d9 b869 bd48 bde9 | 14 b355 (0) b245 (0) b5fc (0) b4e2 (0)\n004 1 a192 | 1 a192 (0)\n005 2 aedc acf8 | 2 aedc (0) acf8 (0)\n============ DEPTH: 6 ==========================================\n006 1 aba7 | 1 aba7 (0)\n007 1 a9fa | 1 a9fa (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","private_key":"e91c4e7ef86a9d2c9e2d4949d79f0188a6fe4c317a21ff93d7517b08b03a84ad","name":"node_a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","services":["streamer"],"enable_msg_events":true,"port":42373},"up":true}},{"node":{"info":{"id":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","name":"node_5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","enode":"enode://4352662356e5f6fed37ae1e0853e8f9d1d52e8c8291718bd69f73ff06f3a3904f070a2ee34d6b3c4ce86429317a48c1aae1ee3a95565f2164240c1289d49d409@127.0.0.1:0","enr":"0xf88fb84075269349b759660c79167f80db6ab17f351f923baab541b3fc9a2b78dd6577a7610b64e2d804fe4670d11df5a743a6d4e2c73b726a72c4539f380470c2795c300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034352662356e5f6fed37ae1e0853e8f9d1d52e8c8291718bd69f73ff06f3a3904","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UAjvVa2AiPcGQ7D5O8tHlTG8sK/o4BshXb+Fl+yGY2k=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5008ef\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ea3d f4a0 d9d3 b245 | 60 f611 (0) f4a0 (0) f177 (0) f005 (0)\n001 5 1740 127c 03eb 01a6 | 30 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n002 3 75e2 62f0 6975 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 4 4a3c 459b 4589 4775 | 11 4efa (0) 4c21 (0) 4cc2 (0) 4d75 (0)\n004 4 5c62 5cc1 58a9 5a8b | 5 5cc1 (0) 5c62 (0) 58a9 (0) 5be6 (0)\n005 1 55fd | 1 55fd (0)\n============ DEPTH: 6 ==========================================\n006 1 52b4 | 1 52b4 (0)\n007 1 51c2 | 1 51c2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","private_key":"40ffe414c67c7872869542bbaf010af4e063dbc9e734ec01ebc6ffe7f09a289b","name":"node_5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","services":["streamer"],"enable_msg_events":true,"port":42611},"up":true}},{"node":{"info":{"id":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","name":"node_d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","enode":"enode://10520254bae35bd2c92f66f483de02b78d1753df0d2969aa22382c5dfb51a967e47e6189437e2326a96b6f902faa6ae5cf59af59f3b0cd4021dc6ecb0dbe0ed7@127.0.0.1:0","enr":"0xf88fb8406d769c006c5ed31a452a2a90135f9d37fea25bd1eff0888fcf8d995e9994b13437c02d2f21b826af8f36fff78e9f23b13e1af4851c0df81af662729cd81cccb40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10310520254bae35bd2c92f66f483de02b78d1753df0d2969aa22382c5dfb51a967","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2dMLmyEr1IEaROvjBLo5NerTq+Mkf5mJP69lZkExwp0=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d9d30b\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0f31 01a6 03eb 5008 | 68 3775 (0) 36d5 (0) 3590 (0) 3e19 (0)\n001 2 acf8 b9d9 | 29 957e (0) 9472 (0) 8b35 (0) 8fb8 (0)\n002 6 ea3d eceb efd6 ee2b | 17 f611 (0) f4a0 (0) f177 (0) f005 (0)\n003 6 c9ef cc5f cc9f c52a | 8 c52a (0) c0ad (0) c2f9 (0) cabf (0)\n004 3 d125 d18a d23c | 3 d125 (0) d18a (0) d23c (0)\n============ DEPTH: 5 ==========================================\n005 2 dd92 deec | 2 dd92 (0) deec (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","private_key":"70b8e572ba811ae79bbcaffd1421381dc00b020737f2e6f4c1311ebe984fa426","name":"node_d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","services":["streamer"],"enable_msg_events":true,"port":36959},"up":true}},{"node":{"info":{"id":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","name":"node_03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","enode":"enode://118cbd671c6e8b583a18aa14af1eeddb499047376ff5e84c160f3eec13f5b5d33f390b65cf2428621ced70ec419935c37ef4236a8f63f7b5cf81f58a0dfb59f3@127.0.0.1:0","enr":"0xf88fb840c91599a2365e987a7355bef1ad535065e3c907887c577bfbf22416ec8c60a63e28c13dfc44d51262f3a3514757c2ff8c315eb57f44ce1c58397816c8e8bd2fea0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103118cbd671c6e8b583a18aa14af1eeddb499047376ff5e84c160f3eec13f5b5d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"A+suku0JI/aWJp56A/7HMdjD+N8ngCOpywCGe1M6PKM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 03eb2e\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fa9a c9ef c2f9 d9d3 | 60 957e (0) 9472 (0) 8b35 (0) 8fb8 (0)\n001 11 62f0 6975 68a6 72a7 | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 4 2dd4 2d53 22bb 2354 | 17 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n003 3 184e 1740 127c | 5 1929 (0) 184e (0) 1385 (0) 127c (0)\n004 4 0e34 0f31 0807 0a21 | 4 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n005 1 0639 | 1 0639 (0)\n============ DEPTH: 6 ==========================================\n006 1 01a6 | 1 01a6 (0)\n007 0 | 0\n008 1 034d | 1 034d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","private_key":"bb068a5ae255ce7c42cb5928785a16dd2b717db214b975dc7af82a56d1465fa4","name":"node_03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","services":["streamer"],"enable_msg_events":true,"port":41317},"up":true}},{"node":{"info":{"id":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","name":"node_5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","enode":"enode://1e7d80f4aab757649946e09a942ec9dc561f7fab556def6e20e6449f154eddd1d6acc7d2e24db2f0951152d4ccd3eaa9ad32b54b1dedc60eb4c15078f2281cc6@127.0.0.1:0","enr":"0xf88fb8404b1fe1c4ca1bb536ead1b7c7fa4e49b2514aaa26ad2076329d9316b78adc03db18a0e3c270a9cfd2e61e06f850436d2bd103ae39b7c61106619bef3f3fdfb8a90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021e7d80f4aab757649946e09a942ec9dc561f7fab556def6e20e6449f154eddd1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WoukBHxEVuglvRs0yWH1x/N798J7xIvucbhDDH0TVIY=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5a8ba4\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c9ef c2f9 | 60 d23c (0) d18a (0) d125 (0) deec (0)\n001 3 1740 03eb 2354 | 30 1929 (0) 184e (0) 1385 (0) 127c (0)\n002 7 62f0 6975 68a6 73d0 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 4 4bc8 4a3c 4775 4589 | 11 4efa (0) 4c21 (0) 4cc2 (0) 4d75 (0)\n004 3 55fd 52b4 5008 | 4 55fd (0) 52b4 (0) 51c2 (0) 5008 (0)\n005 2 5cc1 5c62 | 2 5cc1 (0) 5c62 (0)\n============ DEPTH: 6 ==========================================\n006 1 58a9 | 1 58a9 (0)\n007 1 5be6 | 1 5be6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","private_key":"dbec70bb9a08cabd1e7f19877731d486591fa448c65d8e48175658b5a46d7708","name":"node_5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","services":["streamer"],"enable_msg_events":true,"port":35767},"up":true}},{"node":{"info":{"id":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","name":"node_2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","enode":"enode://5f6d6715804fb0fa79d11569c038c51fdb2c154b06f8403d57d7362c87b361147a3bbf7d990c650a857a7aed53df21bc7a6d08540b1d0894db1cd83e1e69d0bd@127.0.0.1:0","enr":"0xf88fb8400295eb2dd56032a5f0ef15321413956120d8ea0924e56ebba770b064f823e42c015ddb67c6964e293c937f596999883d7a6d3c8b1fd7364e6afe36b4c0ca679f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035f6d6715804fb0fa79d11569c038c51fdb2c154b06f8403d57d7362c87b36114","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"I1TTr1xtygXX3CErEAES83qyn7iz9DGYhyMKTUIPXZ0=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2354d3\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c9ef cc9f | 60 d23c (0) d18a (0) d125 (0) deec (0)\n001 5 64e6 4d75 4775 5008 | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 7 0e34 0807 01a6 03eb | 13 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n003 4 36d5 3e19 3871 3b83 | 6 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n004 3 2803 2dd4 2d53 | 3 2803 (0) 2d53 (0) 2dd4 (0)\n005 3 27b5 27db 2471 | 3 27db (0) 27b5 (0) 2471 (0)\n006 2 21dc 216e | 2 21dc (0) 216e (0)\n============ DEPTH: 7 ==========================================\n007 2 221c 22bb | 2 221c (0) 22bb (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","private_key":"33f99c8fc27af3dfbab6afb6eca5cf61ff93788a211883b10a12d2696ebc18a5","name":"node_2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","services":["streamer"],"enable_msg_events":true,"port":37965},"up":true}},{"node":{"info":{"id":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","name":"node_17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","enode":"enode://0163c2caaad749b2a1877dee27794e363304a8dfa3af56d253c7021217545cd1f31f24a821594b340e18ef78a6498656b65c7a12ba99a7e1a2ef34ef9da4c04d@127.0.0.1:0","enr":"0xf88fb840737226882bb1d943eb2e9cd4dfcfa63deca2a52dc312ea55f2cb29cf6f44704976ad5889976d9d00a3e0b745a7870999b20eb3a8f915f0c0b797c878cbe77fdf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030163c2caaad749b2a1877dee27794e363304a8dfa3af56d253c7021217545cd1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"F0Bt6lBG8A4n6vdOFmqUXJSFE51u3N/NhPWwP1Du3Qo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 17406d\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 be0f 8d3e fa9a c2f9 | 60 d23c (0) d125 (0) d18a (0) dd92 (0)\n001 6 6975 73d0 77ee 5a8b | 38 4a37 (0) 4a3c (0) 4bc8 (0) 4efa (0)\n002 7 3e19 3b83 3871 2dd4 | 17 3590 (0) 36d5 (0) 3775 (0) 3e19 (0)\n003 7 0a21 0807 0e34 0f31 | 8 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n004 2 1929 184e | 2 184e (0) 1929 (0)\n============ DEPTH: 5 ==========================================\n005 2 1385 127c | 2 1385 (0) 127c (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","private_key":"96f0245c4b78bbf5a569ca11e55db6399d83ce08e6ec692e63acaebac837a9ea","name":"node_17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","services":["streamer"],"enable_msg_events":true,"port":33857},"up":true}},{"node":{"info":{"id":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","name":"node_01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","enode":"enode://946ba7faf16b78557ada55aa61d2ce4df1f255db899d3719d93c2005e88fd20aba59f9cdb4bc62d86b4b405a24bd310a8af3f1e4baf9cf5dbd548cf4e8d35557@127.0.0.1:0","enr":"0xf88fb8403960e3e45dce252d35faa9910dff31d41ef445f18ea2ff3d8fdeffb2716ef6fe40bdf310ee963cc581fc397dcd35c02571b7ff73bad2e0f63fde62678c392aa50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103946ba7faf16b78557ada55aa61d2ce4df1f255db899d3719d93c2005e88fd20a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AaY1dcOE9oblc54b0HnkpMVUIc1tiblE4sYd0XT6K/Y=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 01a635\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 fa9a c9ef cc9f cc5f | 60 d18a (0) d125 (0) d23c (0) dd92 (0)\n001 4 6450 4d75 5008 55fd | 38 4a37 (0) 4a3c (0) 4bc8 (0) 4efa (0)\n002 7 2dd4 22bb 2354 216e | 17 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n003 4 184e 1385 127c 1740 | 5 1929 (0) 184e (0) 1385 (0) 127c (0)\n004 4 0a21 0807 0f31 0e34 | 4 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n005 1 0639 | 1 0639 (0)\n============ DEPTH: 6 ==========================================\n006 2 034d 03eb | 2 034d (0) 03eb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","private_key":"cc2f52f2da8baa58e999a96ec31dc946b081f0fc546742bfe885a4d65048f0ba","name":"node_01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","services":["streamer"],"enable_msg_events":true,"port":32789},"up":true}},{"node":{"info":{"id":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","name":"node_acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","enode":"enode://2051ad3d9ecac3a9242bc33d92f20eb0265d19c75f91c5541715e4125dbc793b8cbbfaae8f549e0526d334b28142f61dd82fef168e2078e10046d42de98a8d84@127.0.0.1:0","enr":"0xf88fb840633de8fb5d405d72f5575e854e513bca5fa24ec6fb1e75838c27118b118fc3334af4ce9f07c4717bcd139c61925a6ad329754aad8fc5a3a441bbbe120d6386270183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022051ad3d9ecac3a9242bc33d92f20eb0265d19c75f91c5541715e4125dbc793b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rPiI7XgfU1hJPi5QSGkazDnqwyQMqekJO7QFKx9iQyU=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: acf888\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 73d0 68a6 2471 0f31 | 68 4a37 (0) 4a3c (0) 4bc8 (0) 4efa (0)\n001 6 ee2b f33c d9d3 c2f9 | 31 d23c (0) d125 (0) d18a (0) dd92 (0)\n002 4 8012 8330 836e 8d3e | 9 957e (0) 9472 (0) 8284 (0) 8330 (0)\n003 7 b869 b9d9 bd48 bd96 | 14 b355 (0) b245 (0) b60e (0) b4e2 (0)\n004 1 a192 | 1 a192 (0)\n============ DEPTH: 5 ==========================================\n005 3 aba7 a9fa a861 | 3 aba7 (0) a9fa (0) a861 (0)\n006 1 aedc | 1 aedc (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","private_key":"e3da942e1ebba4519becee21a2285ae952467d7639501faab88c017ed66d238e","name":"node_acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","services":["streamer"],"enable_msg_events":true,"port":35297},"up":true}},{"node":{"info":{"id":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","name":"node_0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","enode":"enode://5c476e3ae360f530756888a27af18afcec729c3d9485832d85b55f4910e22be32fe20aff65f08973bdb22a46239654a0b9ff97c4d3dbef485d21d6fbf2d21a25@127.0.0.1:0","enr":"0xf88fb8402d28c83dbd79c5e95b11079daad1069cecc4337f35abae0ff0a87d06300a14aa33ea3dde14e4082892622446978b18063fe5621c543b4392139e8066ebf634b50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035c476e3ae360f530756888a27af18afcec729c3d9485832d85b55f4910e22be3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DzEGrf5wrvtHTEqYqVkyMHOR3iy3D70uEd0xyeaV7YM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0f3106\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 cc9f cc5f d23c d9d3 | 60 d23c (0) d125 (0) d18a (0) dd92 (0)\n001 5 459b 7bcb 6daa 6450 | 38 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n002 5 3b83 3871 2dd4 221c | 17 36d5 (0) 3775 (0) 3590 (0) 3e19 (0)\n003 3 1385 127c 1740 | 5 1929 (0) 184e (0) 1385 (0) 127c (0)\n004 4 0639 01a6 034d 03eb | 4 0639 (0) 034d (0) 03eb (0) 01a6 (0)\n============ DEPTH: 5 ==========================================\n005 2 0807 0a21 | 2 0a21 (0) 0807 (0)\n006 0 | 0\n007 1 0e34 | 1 0e34 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","private_key":"6241837c865bfdb4b5200d2c76fbd45a87b9de82bb790d1ac679ceb517449a82","name":"node_0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","services":["streamer"],"enable_msg_events":true,"port":37821},"up":true}},{"node":{"info":{"id":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","name":"node_62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","enode":"enode://6a42ebbfda57a4727b4f686c785b5030992d3a2ecba2aa780527153ed432dc4a779c1a0c496e6503ec67f7063c21eaf924c996c37a2eb1dd29b86afddc735518@127.0.0.1:0","enr":"0xf88fb840844c5f5293365e47b6ea31282d2a2bcab345eb98290e20d878c868cf51faef74771a2271eef6d5e86d681144a1b449acbea967e03cc390b2d2472e714054391a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026a42ebbfda57a4727b4f686c785b5030992d3a2ecba2aa780527153ed432dc4a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YvAHySqK9GbpDtCx5ecalVrSc+x5OUjd/AOXfxMe0tE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 62f007\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ee2b c0ad cc9f 836e | 60 d23c (0) d18a (0) d125 (0) dd92 (0)\n001 8 2471 2dd4 3e19 3b83 | 30 3590 (0) 3775 (0) 36d5 (0) 3e19 (0)\n002 4 4775 5a8b 55fd 5008 | 20 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n003 5 75e2 77ee 72a7 72a5 | 9 7a68 (0) 7bee (0) 7bcb (0) 72a5 (0)\n004 3 6daa 68a6 6975 | 3 6daa (0) 6975 (0) 68a6 (0)\n============ DEPTH: 5 ==========================================\n005 4 6450 641a 64e6 672a | 4 672a (0) 64e6 (0) 6450 (0) 641a (0)\n006 0 | 0\n007 1 6379 | 1 6379 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","private_key":"ebf64acc962af28b6b8ed56078a7ae4726b851e322cebb1c852e24267f1c4a1d","name":"node_62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","services":["streamer"],"enable_msg_events":true,"port":43977},"up":true}},{"node":{"info":{"id":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","name":"node_b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","enode":"enode://d97b0fcc83cc71942a961140d70fbed0f9819f50795a64dce5d018ea28bcc04486d39682cb07a8f2084f401a987298d2a5385a1068133929a838255afd71df1b@127.0.0.1:0","enr":"0xf88fb84000536ff0e44a6e9ea1b978d39a2b2b4c28b4c30d63cc253d1996f9c000c0cee949b1904a5eee67b25704fbb2ba12b15f995cc6b9ac5717d610cc101ed5e3e75a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d97b0fcc83cc71942a961140d70fbed0f9819f50795a64dce5d018ea28bcc044","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"udkG5Aaw/GB4wiu8FzBD3x91gQYbT2zNdpvFaNlLQzk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b9d906\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 22bb 55fd 73d0 68a6 | 68 3775 (0) 36d5 (0) 3590 (0) 3e19 (0)\n001 4 c52a d9d3 ee2b eceb | 31 d23c (0) d125 (0) d18a (0) dd92 (0)\n002 4 8012 8330 836e 8d3e | 9 957e (0) 9472 (0) 8012 (0) 8284 (0)\n003 5 a861 a9fa aba7 acf8 | 6 a192 (0) aba7 (0) a9fa (0) a861 (0)\n004 5 b355 b245 b4e2 b5fc | 5 b355 (0) b245 (0) b4e2 (0) b5fc (0)\n============ DEPTH: 5 ==========================================\n005 7 be0f bd48 bddb bde9 | 7 be0f (0) bc29 (0) bc71 (0) bd48 (0)\n006 0 | 0\n007 1 b869 | 1 b869 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","private_key":"908ebb48b37c8f9239e22db00fb7161ba4a14b3f5857a1142bcaf9d46586ad23","name":"node_b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","services":["streamer"],"enable_msg_events":true,"port":34371},"up":true}},{"node":{"info":{"id":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","name":"node_eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","enode":"enode://3419c9288c2eff070d8db3ecdf0c5675a6978ff0ca5e459886f451fb7c6a1c79f40f74557de8e513ea6e3db67a52a99933260c4838d0c88e1329e8c23f8e367b@127.0.0.1:0","enr":"0xf88fb840d19d680dca990e3894d8e63f0c7e053bb4beccc2b28b26e2156c3de7cfd0293637e634f6f398e2c52a3767d0f82b356f5387e7cbd65eb778d17d253d500eb9f00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033419c9288c2eff070d8db3ecdf0c5675a6978ff0ca5e459886f451fb7c6a1c79","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7Ot9xTJZbotoB0ET25YF49FcsV4ugPdfGmbZWhIhx9w=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eceb7d\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 772a 4589 58a9 216e | 68 3590 (0) 36d5 (0) 3775 (0) 3e19 (0)\n001 7 8d3e 8012 836e aba7 | 29 9472 (0) 957e (0) 8284 (0) 8330 (0)\n002 7 deec d9d3 cc9f cc5f | 14 d23c (0) d18a (0) d125 (0) dd92 (0)\n003 6 f33c f177 f005 fa9a | 9 f4a0 (0) f611 (0) f177 (0) f005 (0)\n004 1 e06f | 1 e06f (0)\n005 2 ea3d eb01 | 2 ea3d (0) eb01 (0)\n006 2 efd6 ee2b | 2 efd6 (0) ee2b (0)\n============ DEPTH: 7 ==========================================\n007 2 ed2e ed12 | 2 ed2e (0) ed12 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","private_key":"ebb9302277d87e1d7ead59e5bcd7f4c125c61b0d09ede9e8a3a87f788b8cb3ab","name":"node_eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","services":["streamer"],"enable_msg_events":true,"port":39661},"up":true}},{"node":{"info":{"id":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","name":"node_c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","enode":"enode://3e0ee81dad3d6e6b7e146766e689ca44b20c076cd0dac90a0b937c80ffe51e87a731bb789fe07f1e3781e5aa25ea70150eb3b053fe0b179e7f7d94fbc180ed2a@127.0.0.1:0","enr":"0xf88fb84019f7283cf95d09b72f63e06b3411e0b049c15d2b86dfd18369f70d4ee944372e5c12e658b704f83f4482400458b31a516d5604fa0469210d467fe77d8e64f7dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023e0ee81dad3d6e6b7e146766e689ca44b20c076cd0dac90a0b937c80ffe51e87","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wvm0q+2caoOf5MA6gL05b9GHqHhLpHqDaH06VLfi7d8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c2f9b4\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 0639 03eb 1740 772a | 68 1929 (0) 184e (0) 127c (0) 1385 (0)\n001 6 acf8 aba7 a861 8330 | 29 957e (0) 9472 (0) 8284 (0) 836e (0)\n002 4 f33c f4a0 ea3d eceb | 17 f611 (0) f4a0 (0) f005 (0) f177 (0)\n003 4 d23c d9d3 dd92 deec | 6 d18a (0) d125 (0) d23c (0) dd92 (0)\n004 4 cc5f cc9f cabf c9ef | 5 ce01 (0) cc5f (0) cc9f (0) cabf (0)\n============ DEPTH: 5 ==========================================\n005 1 c52a | 1 c52a (0)\n006 1 c0ad | 1 c0ad (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","private_key":"f980e9ba4f79f9f79e3659e3ba6dd1900868076a78a0cb0390b5c13fdfc2e105","name":"node_c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","services":["streamer"],"enable_msg_events":true,"port":37679},"up":true}},{"node":{"info":{"id":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","name":"node_c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","enode":"enode://b88aef73e2d38fb6fd1c0be8112453bc96dac9df272e9366494bb266ab6591c01482a93613d919a26bf6a4f62920343fe26b4dd5b8f13c4642fccd588d1b6407@127.0.0.1:0","enr":"0xf88fb8403c2ce4e2ffb11a365ec4903ac72a546b354de5dceec18acb0ce931dfdf593c9364716fab2b08ab7d23681b95c4ea160944780a2fb5eda9a5186c40196ed6fd350183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b88aef73e2d38fb6fd1c0be8112453bc96dac9df272e9366494bb266ab6591c0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ye9Wr+0tQNs5atOdb19fOPQFi2sNHgK3HWqpLb6vffc=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c9ef56\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 772a 72a7 4cc2 58a9 | 68 184e (0) 1929 (0) 127c (0) 1385 (0)\n001 2 b60e acf8 | 29 b869 (0) b9d9 (0) be0f (0) bc71 (0)\n002 5 eb01 efd6 eceb f33c | 17 e06f (0) ee2b (0) efd6 (0) ed2e (0)\n003 2 deec d9d3 | 6 d23c (0) d125 (0) d18a (0) dd92 (0)\n004 3 c52a c0ad c2f9 | 3 c52a (0) c0ad (0) c2f9 (0)\n============ DEPTH: 5 ==========================================\n005 3 ce01 cc9f cc5f | 3 ce01 (0) cc5f (0) cc9f (0)\n006 1 cabf | 1 cabf (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","private_key":"e39438d65893f9aa29c4f0b62c56230930d90dcaab3cbb07ea3c19d0cad5136e","name":"node_c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","services":["streamer"],"enable_msg_events":true,"port":36083},"up":true}},{"node":{"info":{"id":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","name":"node_fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","enode":"enode://d27fa62643cd7eea1b635af3b3ce578baf185fffc47830a4c13ec296f90c46d2663dc1789046b5a79d796c57546e1ef68a15dbc440d08cc6644a8fa0ae887549@127.0.0.1:0","enr":"0xf88fb840f341ded7be4fe1c85a832c0eebf0214215e6fa10536fb974fad93566458010b2239adb66b6817d8493b1ec12ac407bb97cb2b1fbf6c36bb8809e809809df05c10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d27fa62643cd7eea1b635af3b3ce578baf185fffc47830a4c13ec296f90c46d2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+pqAnwFgl9lJ+hRjocjwiHHH045gt99tPiirBMzToUM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fa9a80\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 0a21 01a6 03eb 034d | 68 184e (0) 1929 (0) 127c (0) 1385 (0)\n001 5 836e be0f b60e aba7 | 29 be0f (0) bc71 (0) bc29 (0) bde9 (0)\n002 4 deec d9d3 c52a c9ef | 14 d23c (0) d125 (0) d18a (0) dd92 (0)\n003 5 eceb ed2e efd6 ea3d | 8 e06f (0) ee2b (0) efd6 (0) ed12 (0)\n004 4 f4a0 f611 f177 f33c | 6 f611 (0) f4a0 (0) f005 (0) f177 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 fa65 | 1 fa65 (0)\n009 1 fac8 | 1 fac8 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","private_key":"d7298e7ba76d8700d47fe74a50ac92478020ce786a9d1c343e118f94dd564864","name":"node_fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","services":["streamer"],"enable_msg_events":true,"port":41357},"up":true}},{"node":{"info":{"id":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","name":"node_55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","enode":"enode://3eae4ff354105cae615e8ed7499a263aab368017815886ccf3875219dfb6ae72174bc5241ef3c91c0c7baa54a3e833da1c27f41b8861dbb86b34351780ce8b18@127.0.0.1:0","enr":"0xf88fb8403c706e742e24e2e3e8bfcc48604544f9b4593b9fac94f97664fe76d2d9a02a183b24baf1ebfac2e908c29886fb61952983d054555cc677f2b4795e38cf5768dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023eae4ff354105cae615e8ed7499a263aab368017815886ccf3875219dfb6ae72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Vf2tAzA6dGkgdzIXxWijfSAEhp/zQJb75FGX9x66K2M=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 55fdad\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b5fc b245 bd48 b9d9 | 60 be0f (0) bc71 (0) bc29 (0) bde9 (0)\n001 6 1740 03eb 01a6 3b83 | 30 184e (0) 1929 (0) 127c (0) 1385 (0)\n002 4 6daa 62f0 73d0 77ee | 18 672a (0) 64e6 (0) 6450 (0) 641a (0)\n003 4 4c21 4cc2 4589 459b | 11 4bc8 (0) 4a3c (0) 4a37 (0) 4efa (0)\n004 5 5be6 5a8b 58a9 5c62 | 5 58a9 (0) 5be6 (0) 5a8b (0) 5c62 (0)\n============ DEPTH: 5 ==========================================\n005 3 5008 51c2 52b4 | 3 52b4 (0) 51c2 (0) 5008 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","private_key":"9ffae4eb3efdf717dce58938868a5816422239bac33c7d104cae4e18b73feaa8","name":"node_55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","services":["streamer"],"enable_msg_events":true,"port":37795},"up":true}},{"node":{"info":{"id":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","name":"node_22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","enode":"enode://0fcdb40b9980223ca221f90fca68efae8db086998c519d8725f451e9e351346836103fb5aa037e39188b71cb4b3f0625b313e7aee625e297edb036c44566f728@127.0.0.1:0","enr":"0xf88fb840d0cc3284ff4f87d20c3a83d7047fd8ab950c8bda00565839b26d7c9d24e7abf205c14a5d4714dbea74bf7a6de1731a8f80b41519fdf01063bbf6ed3322b874be0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020fcdb40b9980223ca221f90fca68efae8db086998c519d8725f451e9e3513468","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IruzI2peChlHocRzWqrPkSIXN4mgKgbnZTEDvcri+CM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 22bbb3\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b5fc b60e b9d9 | 60 be0f (0) bc71 (0) bc29 (0) bde9 (0)\n001 2 77ee 55fd | 38 6975 (0) 68a6 (0) 6daa (0) 672a (0)\n002 8 1385 1740 0639 01a6 | 13 1929 (0) 184e (0) 127c (0) 1385 (0)\n003 2 3871 3b83 | 6 36d5 (0) 3775 (0) 3590 (0) 3e19 (0)\n004 3 2803 2d53 2dd4 | 3 2803 (0) 2d53 (0) 2dd4 (0)\n005 3 2471 27db 27b5 | 3 2471 (0) 27b5 (0) 27db (0)\n006 2 216e 21dc | 2 21dc (0) 216e (0)\n============ DEPTH: 7 ==========================================\n007 1 2354 | 1 2354 (0)\n008 1 221c | 1 221c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","private_key":"cce6899e27a53e544f7f5b8aad86ab94d88cb44d56c3990527df6186741b5448","name":"node_22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","services":["streamer"],"enable_msg_events":true,"port":46859},"up":true}},{"node":{"info":{"id":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","name":"node_77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","enode":"enode://30c18cf67d3de082cf0bf79b9f1722fa4816434fd18609381488df512c8f3759e7c9bbccea6cd0e592c81ac1169d277e6b45beb59dec2f4678ba549b19370751@127.0.0.1:0","enr":"0xf88fb840054a553fdf6785422e9ba595a831b259bb7cc62c4c3a41861f937338904e08c1117e88ce97c436f3ea15af9cd139711452a589831e746d9b174c404df5b9b6130183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10330c18cf67d3de082cf0bf79b9f1722fa4816434fd18609381488df512c8f3759","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"d+7crAyEex1pPd/wfFhor7HCAIsty0igKZFDqxRhGWk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 77eedc\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 eb01 f33c 8d3e | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 7 0807 0639 034d 03eb | 30 1929 (0) 184e (0) 127c (0) 1385 (0)\n002 3 459b 5a8b 55fd | 20 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n003 5 6450 641a 62f0 6975 | 9 6379 (0) 62f0 (0) 672a (0) 64e6 (0)\n004 3 7bcb 7bee 7a68 | 3 7bee (0) 7bcb (0) 7a68 (0)\n005 3 72a5 72a7 73d0 | 3 72a5 (0) 72a7 (0) 73d0 (0)\n============ DEPTH: 6 ==========================================\n006 1 75e2 | 1 75e2 (0)\n007 0 | 0\n008 1 772a | 1 772a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","private_key":"e1e6b3e6225cad6b1df7fc028cf8a745346a7c26d5dea6825108ae2f483d8c04","name":"node_77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","services":["streamer"],"enable_msg_events":true,"port":44643},"up":true}},{"node":{"info":{"id":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","name":"node_8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","enode":"enode://ba544e97e0b245ef40d6515136e3b0b9af76a2d9f7eadfb8fde90b979079abcf9c60d1c43f5ab07731dc0d72a59a501b9cb7c951d9f5da576f16e19c5b1fdfbc@127.0.0.1:0","enr":"0xf88fb8400a1d7ba92c3ca031f366592c2d92fdb57881f30a2584f776614e94451218ba5a10ece049d25fcc363f9f3f26915edc173410d3a2393d5b83e18893e89e6a074f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ba544e97e0b245ef40d6515136e3b0b9af76a2d9f7eadfb8fde90b979079abcf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jT4NnGky00IgJDlJmOlDMJtnnWZzlNDrYi8OII5/zwo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8d3e0d\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 0f31 0807 0a21 127c | 68 184e (0) 1929 (0) 127c (0) 1385 (0)\n001 4 eceb f33c c2f9 c52a | 31 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n002 12 a9fa a861 aba7 acf8 | 20 b869 (0) b9d9 (0) be0f (0) bc29 (0)\n003 2 957e 9472 | 2 957e (0) 9472 (0)\n004 3 8012 8330 836e | 4 8012 (0) 8284 (0) 836e (0) 8330 (0)\n============ DEPTH: 5 ==========================================\n005 1 8b35 | 1 8b35 (0)\n006 1 8fb8 | 1 8fb8 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","private_key":"f2b2db3ab3bb25ad92063630dd8898f4437d0af687073abd25e341b1649e41cf","name":"node_8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","services":["streamer"],"enable_msg_events":true,"port":35799},"up":true}},{"node":{"info":{"id":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","name":"node_c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","enode":"enode://d0cbe2c3073b8e2da7f2d750d97719714b354e4a823141560a5c7e6bcc460dfe7a1fbab94d94d8bf48a64cb16c59489ef1d6b9a47d6f9e7e96bce190cc7f8d4d@127.0.0.1:0","enr":"0xf88fb8403bf91f39e315b53cdc4b2dbbf4b41e95542ff5660d7a2916fe2ee858ecc2c5723462999e9c22d592f05fe322d42caddf25eee3e855d5d9599b6f438f7627589c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d0cbe2c3073b8e2da7f2d750d97719714b354e4a823141560a5c7e6bcc460dfe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xSpo2DiKIQE+Tuzvnqhm2x9esWu+DsyCuL+v0z5OAU8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c52a68\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 7bcb 72a7 641a 58a9 | 68 184e (0) 1929 (0) 127c (0) 1385 (0)\n001 3 b9d9 b5fc 8d3e | 29 b869 (0) b9d9 (0) bc71 (0) bc29 (0)\n002 6 ea3d eb01 eceb fa9a | 17 e06f (0) ea3d (0) eb01 (0) ee2b (0)\n003 4 d18a d125 deec d9d3 | 6 d23c (0) d125 (0) d18a (0) d9d3 (0)\n004 5 ce01 cc5f cc9f cabf | 5 ce01 (0) cc5f (0) cc9f (0) cabf (0)\n============ DEPTH: 5 ==========================================\n005 2 c0ad c2f9 | 2 c0ad (0) c2f9 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","private_key":"f49dc248179df01ec6c8b426228f64aaa30b16ea7f8e9e9bf4f933d061d58bb6","name":"node_c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","services":["streamer"],"enable_msg_events":true,"port":42373},"up":true}},{"node":{"info":{"id":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","name":"node_3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","enode":"enode://8d83c109e42a329f480a3a51a9dde5516d6731233ddd28de467ff3ef255a8e5342765c79c446fdb28e14ead4c4c590b2ba5ba740b3f96be1eee5bbc837ee5963@127.0.0.1:0","enr":"0xf88fb84031a328c351d984beccbc346fa806f81c52b5e33a6ca23e3c378b6ce2cf71e60f7936466c5c8ef78d0cbbef2c09fa6b3fc77fafb99cdb8bcbf90a26a50dc0d0580183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038d83c109e42a329f480a3a51a9dde5516d6731233ddd28de467ff3ef255a8e53","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OHFJLIxizXTL5lqZNmnkl4zGQYeaUiPda55ofwUKHEA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 387149\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 eceb c52a 8b35 aedc | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 8 6daa 62f0 7bcb 772a | 38 4bc8 (0) 4a37 (0) 4a3c (0) 4efa (0)\n002 8 1929 1385 1740 034d | 13 184e (0) 1929 (0) 127c (0) 1385 (0)\n003 8 2dd4 2471 27db 21dc | 11 2803 (0) 2d53 (0) 2dd4 (0) 27b5 (0)\n004 3 36d5 3775 3590 | 3 36d5 (0) 3775 (0) 3590 (0)\n============ DEPTH: 5 ==========================================\n005 1 3e19 | 1 3e19 (0)\n006 1 3b83 | 1 3b83 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","private_key":"834f76d47474f2c89e8e0405186442df99beaa572593e766307382a90766efae","name":"node_3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","services":["streamer"],"enable_msg_events":true,"port":44349},"up":true}},{"node":{"info":{"id":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","name":"node_aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","enode":"enode://de0a47f289a5e5d540db8adc0ef05baf590d55abad62f68a25d5262181ce611b0a3aa703cdf027fc666dd62e66ce6be0ebc78179e341b06fa407ffee34176330@127.0.0.1:0","enr":"0xf88fb840870ed3339b049cab40a19dacd5afe7e4f8139c5f9da6053b795be3d6ac9447070011c7efbcdf83ab755f08ffcd03df0cabffa76734712b57822864e8514bce850183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102de0a47f289a5e5d540db8adc0ef05baf590d55abad62f68a25d5262181ce611b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rtybR4IE7/3LrRqJIzPxXAYfvRQjs3D4pQ+SmyovaVI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aedc9b\npopulation: 21 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 73d0 216e 3871 | 68 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n001 3 deec f33c fa9a | 31 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n002 4 9472 8284 8b35 8d3e | 9 957e (0) 9472 (0) 8012 (0) 836e (0)\n003 6 b60e b5fc b9d9 bc29 | 14 b869 (0) b9d9 (0) bc71 (0) bc29 (0)\n004 1 a192 | 1 a192 (0)\n============ DEPTH: 5 ==========================================\n005 3 a9fa a861 aba7 | 3 a9fa (0) a861 (0) aba7 (0)\n006 1 acf8 | 1 acf8 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","private_key":"d0b21651e7458eb9235717900d45d5d655a60530764fcc4ca99ade40d39e4f0c","name":"node_aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","services":["streamer"],"enable_msg_events":true,"port":34417},"up":true}},{"node":{"info":{"id":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","name":"node_216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","enode":"enode://683e4c5a8d928aee37c2f41441e3d7550c42d486625db97883eb2046e9bafc9713f50ee269f4801f3a3c6220af6b097c4100ae92a1970333d9253f86d23c8a0c@127.0.0.1:0","enr":"0xf88fb8401dfe814edc9bad85208abd4a89df104f3d8a58386eb8a593a97d41fa5b72ae395106fc13f4897da7efe6c140ffef9097cd2f468a4920b060d8ea5bc13a46c2940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102683e4c5a8d928aee37c2f41441e3d7550c42d486625db97883eb2046e9bafc97","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IW4DcBEeLgOSe4A654j5lH3o4kHUHb9qcJg88OzWivE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 216e03\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 eceb aedc | 60 d23c (0) d18a (0) d125 (0) d9d3 (0)\n001 8 4d75 4c21 4efa 4bc8 | 38 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n002 4 1929 1385 01a6 0639 | 13 184e (0) 1929 (0) 1740 (0) 127c (0)\n003 5 3590 36d5 3775 3871 | 6 3590 (0) 36d5 (0) 3775 (0) 3e19 (0)\n004 3 2803 2d53 2dd4 | 3 2803 (0) 2d53 (0) 2dd4 (0)\n005 3 2471 27b5 27db | 3 2471 (0) 27b5 (0) 27db (0)\n============ DEPTH: 6 ==========================================\n006 3 2354 221c 22bb | 3 2354 (0) 22bb (0) 221c (0)\n007 0 | 0\n008 1 21dc | 1 21dc (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","private_key":"03956bb84d1d10be6b5626b2c0175cefa443ca6cafbff149baba36309c2be8fd","name":"node_216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","services":["streamer"],"enable_msg_events":true,"port":44971},"up":true}},{"node":{"info":{"id":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","name":"node_73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","enode":"enode://9ac8ba21114f8c40f21f83d7747cd65cc99c986ab59bb477956d068c8cd04001712f8a843e0101b065abbcb2c3b2bd5472dc79345af64d86af2442b35eb0fb68@127.0.0.1:0","enr":"0xf88fb8405197213d021e7a00219b2701909e28eea2507aacb71f2ac2ead5dca945e66d7d1ba4dfa641f44981ca3e8b71b479abb37209113213d5e81f5fb709dead3663300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029ac8ba21114f8c40f21f83d7747cd65cc99c986ab59bb477956d068c8cd04001","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"c9DR1KK3JQ9R5XwTzEi8ayBoIyDOEu6OV2Wv7vfZ3kI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 73d0d1\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 b60e b5fc be0f bd48 | 60 957e (0) 9472 (0) 8012 (0) 8330 (0)\n001 2 1740 216e | 30 1929 (0) 184e (0) 1740 (0) 127c (0)\n002 7 4a37 4cc2 459b 5cc1 | 20 4bc8 (0) 4a3c (0) 4a37 (0) 4efa (0)\n003 4 6450 6379 62f0 6daa | 9 672a (0) 64e6 (0) 6450 (0) 641a (0)\n004 3 7bee 7bcb 7a68 | 3 7bee (0) 7bcb (0) 7a68 (0)\n005 3 75e2 772a 77ee | 3 75e2 (0) 77ee (0) 772a (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 72a5 72a7 | 2 72a5 (0) 72a7 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","private_key":"5c8a42c979ee0b2447144c7dd26b2c6e8a98d27f055aa74c3e8e5559e2cb46bf","name":"node_73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","services":["streamer"],"enable_msg_events":true,"port":39577},"up":true}},{"node":{"info":{"id":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","name":"node_f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","enode":"enode://bb701e37ec5c4eb7faf97cc3aeb366de572c8d5d69e00eb267fecf7d1057eae9b583d3c64a9c0cd2374c0386113db63a61c256ab2b7cf358a6d90a7e9794260d@127.0.0.1:0","enr":"0xf88fb8406c2273c5e5619bccbf0c95225591124b18297b1ae02303095104b37745795d1b4b1d98f175c9198c719d3e2039226b02017e0d5a579e852f53ab0abcbb6a63c30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bb701e37ec5c4eb7faf97cc3aeb366de572c8d5d69e00eb267fecf7d1057eae9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8zwHqBiGOjWDWJiexxUEq608oKfIG1Sq1ZB1p2b61QE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f33c07\npopulation: 41 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 034d 27db 221c 2dd4 | 68 184e (0) 1929 (0) 1740 (0) 127c (0)\n001 8 9472 8d3e b245 be0f | 29 957e (0) 9472 (0) 8012 (0) 8284 (0)\n002 6 deec d9d3 c9ef cc9f | 14 d23c (0) d18a (0) d125 (0) d9d3 (0)\n003 6 eceb ed2e ed12 ee2b | 8 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n004 3 fa65 fac8 fa9a | 3 fa65 (0) fac8 (0) fa9a (0)\n005 2 f4a0 f611 | 2 f4a0 (0) f611 (0)\n============ DEPTH: 6 ==========================================\n006 2 f005 f177 | 2 f005 (0) f177 (0)\n007 0 | 0\n008 1 f3d5 | 1 f3d5 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","private_key":"cc252064f7892875bcbb546a3d781327da4ab0042adaa0dd77dda609e9dbeacc","name":"node_f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","services":["streamer"],"enable_msg_events":true,"port":40171},"up":true}},{"node":{"info":{"id":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","name":"node_3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","enode":"enode://0009f6f563c6452d012e984f5cbe5de59f3838507fa83b32de8e12fc72d7abc3722c4b2b439eb90ccb5268e246b24cd30b2f317e7d1c855c25ef4d429d5b867b@127.0.0.1:0","enr":"0xf88fb8400938dcfa0fa11e741c028a9b8cbcb9e6b12b58464a8c5d0b8581f6103d56571352e10574431842737cf1f8e857b861b51a7b4094d046eac4cc42a317b5fbcd260183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030009f6f563c6452d012e984f5cbe5de59f3838507fa83b32de8e12fc72d7abc3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"O4MMKuVGPKLyJgF2t3uN2iMEgleqeAJVxpzxu7xvtkw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3b830c\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b60e f33c | 60 957e (0) 9472 (0) 8330 (0) 836e (0)\n001 7 7bcb 6daa 62f0 4589 | 38 52b4 (0) 5008 (0) 51c2 (0) 55fd (0)\n002 6 0f31 0807 034d 01a6 | 13 184e (0) 1929 (0) 1740 (0) 127c (0)\n003 8 2d53 2dd4 27db 21dc | 11 2803 (0) 2d53 (0) 2dd4 (0) 2471 (0)\n004 3 36d5 3775 3590 | 3 36d5 (0) 3775 (0) 3590 (0)\n============ DEPTH: 5 ==========================================\n005 1 3e19 | 1 3e19 (0)\n006 1 3871 | 1 3871 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","private_key":"a26abbb5971ae2f14bf7f9cf3604375ed01076a0a5f87bdb169a057aba393510","name":"node_3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","services":["streamer"],"enable_msg_events":true,"port":44047},"up":true}},{"node":{"info":{"id":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","name":"node_b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","enode":"enode://8056da3baf80eb4e505b24fa85d6983cd0c08e57ff29de4fcd7cc5265957b4b951f2c346254e6476b70b57f3d47a2acd98577851778d4f96c6cf16f3cbcef6bd@127.0.0.1:0","enr":"0xf88fb840dc084998ced183bd31314071c4467df4b73013e165b0d232050ea6a34da27200541f9558182b77822222c499c6e0dac4fce02d7e39368547197e7f396dbcc66d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038056da3baf80eb4e505b24fa85d6983cd0c08e57ff29de4fcd7cc5265957b4b9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tg53xA3cnceKStNGrdN+YPEPKZneg2YV21NSRIfR7ek=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b60e77\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 73d0 6daa 22bb 3b83 | 68 52b4 (0) 5008 (0) 51c2 (0) 55fd (0)\n001 3 fa9a c9ef deec | 31 d23c (0) d125 (0) d18a (0) d9d3 (0)\n002 3 9472 8b35 8d3e | 9 957e (0) 9472 (0) 8012 (0) 8330 (0)\n003 5 acf8 aedc a9fa a861 | 6 a192 (0) acf8 (0) aedc (0) a9fa (0)\n004 4 b9d9 bd96 bd48 be0f | 9 b869 (0) b9d9 (0) bc29 (0) bc71 (0)\n005 2 b355 b245 | 2 b355 (0) b245 (0)\n============ DEPTH: 6 ==========================================\n006 2 b4e2 b5fc | 2 b4e2 (0) b5fc (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","private_key":"a9b81b86acde80334419f584fa1f17b478272a646091fd3c7250f8b10ba99c10","name":"node_b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","services":["streamer"],"enable_msg_events":true,"port":36265},"up":true}},{"node":{"info":{"id":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","name":"node_b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","enode":"enode://ad94d5da30a8e6fa7eed9bdffb921e1092d69a95a807d03810dc03bc57ead17b20c03d139f43048113b82ef53df5e92169655c100e4f408de936364aa731dda4@127.0.0.1:0","enr":"0xf88fb840ee7e922aec199035d2d62046ea3b1a19143ec54359003e49b68d8cbd84b539f27d0e7caf904f7f220035c6210d38e15b618abecbfb9c4db3d503b741aa37f6dc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ad94d5da30a8e6fa7eed9bdffb921e1092d69a95a807d03810dc03bc57ead17b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tfxD6MDfMnnWoSzYsDASy40iBSCDJAGMeucldFqZovM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b5fc43\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 55fd 73d0 6450 22bb | 68 52b4 (0) 51c2 (0) 5008 (0) 55fd (0)\n001 2 c52a deec | 31 d23c (0) d18a (0) d125 (0) d9d3 (0)\n002 3 9472 8b35 8d3e | 9 957e (0) 9472 (0) 8012 (0) 8330 (0)\n003 3 aedc acf8 aba7 | 6 a192 (0) acf8 (0) aedc (0) a9fa (0)\n004 7 b869 b9d9 bc29 bd96 | 9 b869 (0) b9d9 (0) bc71 (0) bc29 (0)\n005 2 b355 b245 | 2 b245 (0) b355 (0)\n============ DEPTH: 6 ==========================================\n006 1 b60e | 1 b60e (0)\n007 1 b4e2 | 1 b4e2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","private_key":"0134c954441986806c11920e8f351540b3c6bdd309245a07f647cc4e169a81da","name":"node_b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","services":["streamer"],"enable_msg_events":true,"port":38321},"up":true}},{"node":{"info":{"id":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","name":"node_0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","enode":"enode://2d6b0e5f0d91f9894a0dabb941a7d6dc48de6b6554cfb6d7a8a9cec18c826ee0e655dae74f3e10a713ab5f85c916b579dddf8520a9921fab3f12b73a87e6f701@127.0.0.1:0","enr":"0xf88fb840dfa210d668f3a2c36acd290f3d30342b0e7d83f74443a6c6a50ea14f016dc5ec5ecf5395805d6322a9ff4fe28ee4f0d3b5cca2fc3be0fe8ac43f39650231ef750183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032d6b0e5f0d91f9894a0dabb941a7d6dc48de6b6554cfb6d7a8a9cec18c826ee0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BjnwEINPW8SXeY8tJ1u8YL+81TyD44mGtyYDEMYAFCA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0639f0\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 fa9a c2f9 c9ef 8b35 | 60 cc9f (0) cc5f (0) ce01 (0) cabf (0)\n001 7 5be6 6daa 6450 77ee | 38 6975 (0) 68a6 (0) 6daa (0) 62f0 (0)\n002 8 3775 3590 2d53 2dd4 | 17 3590 (0) 36d5 (0) 3775 (0) 3e19 (0)\n003 4 184e 1929 1740 1385 | 5 184e (0) 1929 (0) 1740 (0) 127c (0)\n004 3 0f31 0807 0a21 | 4 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n============ DEPTH: 5 ==========================================\n005 3 01a6 03eb 034d | 3 01a6 (0) 03eb (0) 034d (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","private_key":"77308f10c71498c40a49e4aeb7c93c863895a490407505b02a488c452abf01e9","name":"node_0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","services":["streamer"],"enable_msg_events":true,"port":38359},"up":true}},{"node":{"info":{"id":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","name":"node_221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","enode":"enode://4c0f14e6659005f725d17c49e95e9bba43b97f7a4c2cec6f8ae665dca6f9113e7a8b8f561014b4b2f850b5f135e0f0189d7efb4e74795d3dee5848cf6d07e6aa@127.0.0.1:0","enr":"0xf88fb840aa25c219ac37cc27c5582211fa9de0891c9aab80d7e185863532cc15a1c8eda84507ccbc3f09570329c6d2c0eacb3910cf2c29d9299eef9ce1a8ceffbeb4b0880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024c0f14e6659005f725d17c49e95e9bba43b97f7a4c2cec6f8ae665dca6f9113e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IhzY6gom8NP4H3gvHeOQKCQV7NnPQCJLSUWgCJeJW04=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 221cd8\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c52a f33c | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 3 5cc1 7a68 772a | 38 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n002 5 1385 1740 1929 0f31 | 13 184e (0) 1929 (0) 1740 (0) 127c (0)\n003 4 3590 3775 3871 3b83 | 6 3590 (0) 36d5 (0) 3775 (0) 3e19 (0)\n004 3 2803 2d53 2dd4 | 3 2803 (0) 2d53 (0) 2dd4 (0)\n005 3 2471 27b5 27db | 3 2471 (0) 27b5 (0) 27db (0)\n006 2 216e 21dc | 2 21dc (0) 216e (0)\n============ DEPTH: 7 ==========================================\n007 1 2354 | 1 2354 (0)\n008 1 22bb | 1 22bb (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","private_key":"c103c3cd8b3ec73103ecffab8a4778ba17c4ef1c7764c4edae06bb253bb4a1c7","name":"node_221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","services":["streamer"],"enable_msg_events":true,"port":34123},"up":true}},{"node":{"info":{"id":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","name":"node_2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","enode":"enode://2185c184311e0733ef3b385df4a2aaa3999aff53d34d3eef8fd026b46623c06a22c8ed8af0ec2827ea684193eb59cf3f6983f8c15a76b59a1fd8f2ee927f7070@127.0.0.1:0","enr":"0xf88fb8407c20d1f26dca6179ace9bc2df0f2e49e8ce46a9ab6ffc3ebc4b70f5448c300b604be2f148e16830139c9afb09d266af5fee0f6826901a4fcb31a79a39a3e48f10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022185c184311e0733ef3b385df4a2aaa3999aff53d34d3eef8fd026b46623c06a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LdStg+/8O6c+cvVllYPlmHJBvaVjVjIAtQxGzOAKHZs=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2dd4ad\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c52a f33c | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 4 62f0 5cc1 4589 459b | 38 6379 (0) 62f0 (0) 672a (0) 64e6 (0)\n002 7 1385 1740 0639 01a6 | 13 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n003 5 36d5 3775 3590 3b83 | 6 36d5 (0) 3775 (0) 3590 (0) 3e19 (0)\n004 7 2471 27db 21dc 216e | 8 2471 (0) 27b5 (0) 27db (0) 21dc (0)\n============ DEPTH: 5 ==========================================\n005 1 2803 | 1 2803 (0)\n006 0 | 0\n007 0 | 0\n008 1 2d53 | 1 2d53 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","private_key":"7780b155f127c1e2df9bd24187ab68f6bcfbc96c9ef1d8e6bfb2453180d4d177","name":"node_2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","services":["streamer"],"enable_msg_events":true,"port":41059},"up":true}},{"node":{"info":{"id":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","name":"node_459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","enode":"enode://596d8f8a3f115e739480cfc90bc3ed52bd3c6db976e8b44dd13b7c598ae1592b213998fcd92d010932001f405ea0d17a35cf0ee9dbd4d27cf7f5a665cec3dc63@127.0.0.1:0","enr":"0xf88fb8409cc2805d0639562a229301ca59a539f4a081f7b38ac8f293061de8340bca1d2645d0c65b2fc1170fff5f9386d3ab9f0357bfab057f46159767025ca2d20a0cf70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103596d8f8a3f115e739480cfc90bc3ed52bd3c6db976e8b44dd13b7c598ae1592b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RZufsrf045bejPh0CmgEyOW5bKEf+itRBsFN+7q2XJU=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 459b9f\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c52a f33c | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 4 03eb 0f31 3871 2dd4 | 30 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n002 8 6daa 6450 641a 7a68 | 18 6379 (0) 62f0 (0) 672a (0) 64e6 (0)\n003 3 5008 55fd 58a9 | 9 52b4 (0) 5008 (0) 51c2 (0) 55fd (0)\n004 5 4a3c 4efa 4d75 4c21 | 7 4bc8 (0) 4a37 (0) 4a3c (0) 4efa (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 4775 4746 | 2 4775 (0) 4746 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 4589 | 1 4589 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","private_key":"a5637f6dfe5f01c6cc2f881f665ff337c05147527c551e16933839046d2f0402","name":"node_459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","services":["streamer"],"enable_msg_events":true,"port":43667},"up":true}},{"node":{"info":{"id":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","name":"node_58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","enode":"enode://a316c9e7d1d346e81a1fec594ce6e35c607b9c61382ae1d43ee823bff44691073f86d5d9c0855bc150802216453072291e4fcf13a75b9e7c24f4c050c5b8f383@127.0.0.1:0","enr":"0xf88fb840989fd084c3dc88c500954c17cbe02ddeb37aec1afd002fbec87e88f3efa1758b10901f9c502b0e252254124e32464db5744f524bf2e090d035e4cb986373579c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a316c9e7d1d346e81a1fec594ce6e35c607b9c61382ae1d43ee823bff4469107","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WKkLWIWEF6TpcmJkIe2OeLGz5axp/O3SLFioq0xhR98=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 58a90b\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 deec c9ef c52a c2f9 | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 3 1385 034d 3b83 | 30 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n002 5 73d0 6379 6450 641a | 18 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n003 3 4a37 4c21 459b | 11 4a3c (0) 4a37 (0) 4bc8 (0) 4efa (0)\n004 3 5008 51c2 55fd | 4 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n005 2 5c62 5cc1 | 2 5c62 (0) 5cc1 (0)\n============ DEPTH: 6 ==========================================\n006 2 5a8b 5be6 | 2 5a8b (0) 5be6 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","private_key":"f76a3f3cb8f63a53ab4db362f8c406b8b64c653bfeb32a8e730eb9386f52f057","name":"node_58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","services":["streamer"],"enable_msg_events":true,"port":43195},"up":true}},{"node":{"info":{"id":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","name":"node_be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","enode":"enode://eeded07e99fa4ff2d426439e42dc4604dd4b1b48d79b02496e61ff86d21658dc4ece7ba599e544ef99d326c12c01c70509c8cfd486228c14db2d8c2b15648571@127.0.0.1:0","enr":"0xf88fb840bf0cf1c25f6277811da44fc4d073295fcffa375500de088bd154cff1aa9770737b9e677865a1873a4a10103f43db1289382f15e37cebe4e4d8cc60b013ff2a1c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103eeded07e99fa4ff2d426439e42dc4604dd4b1b48d79b02496e61ff86d21658dc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vg+ytEC5HnGcIPUbZz658vZsevd7CwreMSmYzf/MUEU=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: be0fb2\npopulation: 38 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 3775 1740 1385 034d | 68 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n001 12 f611 f177 f33c f3d5 | 31 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n002 3 9472 8b35 8d3e | 9 957e (0) 9472 (0) 8012 (0) 836e (0)\n003 2 aedc aba7 | 6 a192 (0) acf8 (0) aedc (0) a861 (0)\n004 3 b355 b60e b5fc | 5 b245 (0) b355 (0) b4e2 (0) b5fc (0)\n005 2 b869 b9d9 | 2 b869 (0) b9d9 (0)\n============ DEPTH: 6 ==========================================\n006 6 bc71 bc29 bd96 bde9 | 6 bc71 (0) bc29 (0) bd96 (0) bde9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","private_key":"38ca3287eddd306f53a09e7f411c72cd416a6fea9372c3be4307ffa2b66a5e84","name":"node_be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","services":["streamer"],"enable_msg_events":true,"port":33661},"up":true}},{"node":{"info":{"id":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","name":"node_deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","enode":"enode://f76349ec766de9d4431151d18ef460cbf69350f3bfa572661117e66b942e7c43605b02eb8805192c15a2c6a5fa47fefe5f4faf57cff643dffd13cfe84d80dcd2@127.0.0.1:0","enr":"0xf88fb840a8e8b269bcf4e00811769f0b731ba2d12904fea4ba28727d8c02b71eb17799531e0b15265ed663ef981c53c77bcbd0a2bb3e8607ade87aef661238ac26892bfb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f76349ec766de9d4431151d18ef460cbf69350f3bfa572661117e66b942e7c43","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3uxqi+tOXkQd1CMRNUGUw775RI6IWbTM1AFkW2khfRI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: deec6a\npopulation: 38 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 58a9 5cc1 4c21 7bcb | 68 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n001 7 9472 aedc aba7 b60e | 29 957e (0) 9472 (0) 8012 (0) 836e (0)\n002 8 eceb ed12 ed2e fa9a | 17 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n003 6 c52a c2f9 c9ef ce01 | 8 cc5f (0) cc9f (0) ce01 (0) cabf (0)\n004 3 d23c d18a d125 | 3 d23c (0) d18a (0) d125 (0)\n============ DEPTH: 5 ==========================================\n005 1 d9d3 | 1 d9d3 (0)\n006 1 dd92 | 1 dd92 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","private_key":"e937ad3db719737f604c22bd1bc3702c56cab3b5ef6aeddadad798027099af81","name":"node_deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","services":["streamer"],"enable_msg_events":true,"port":42029},"up":true}},{"node":{"info":{"id":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","name":"node_13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","enode":"enode://233f1ef8d53ba1f2f35253d6fd30975d21193041f84c41e99efa3680301dbd2dc630d0ac490193182b8f32036c6cc7fd56f8396c42f02d6797074cabfec0aa1c@127.0.0.1:0","enr":"0xf88fb8404cb34513bd8303f7d3bf75384dd785ab45af5e1ddb4087f14b97cb418a03dcac17b596bc11aec73cbf0795c77a2d1b84f895a76f54d0ee90d842fc74759bace40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102233f1ef8d53ba1f2f35253d6fd30975d21193041f84c41e99efa3680301dbd2d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"E4U0B9J4pF4V1LFI/Djrs1xPWO5VLuDkQBxsmMRbjj4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 138534\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 8b35 8d3e b355 be0f | 60 8012 (0) 8284 (0) 836e (0) 8330 (0)\n001 10 6450 6daa 7bcb 77ee | 38 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n002 10 3775 3590 3871 3b83 | 17 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n003 6 0f31 0a21 0807 01a6 | 8 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n004 2 184e 1929 | 2 184e (0) 1929 (0)\n============ DEPTH: 5 ==========================================\n005 1 1740 | 1 1740 (0)\n006 0 | 0\n007 1 127c | 1 127c (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","private_key":"7da06589109c392355e1be112c5b857ab81263c8a0d024f4bb9a295c1e7e7835","name":"node_13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","services":["streamer"],"enable_msg_events":true,"port":46227},"up":true}},{"node":{"info":{"id":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","name":"node_aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","enode":"enode://682bf60eaccc8c0ea6b95167841aee6e412a1d544017d3a9a894ed557cf576fb38146ddd775e94eedff062a3ef8030515beeea9982f8904c148790d6ff5ca40b@127.0.0.1:0","enr":"0xf88fb840ca36c7659c737b8ebbb2cf6ae6954a5dc378e4a3ba74cdf832186b307b46ab6942e82c3c7562eb653e7dc998e912f2a78935d1573fd6f2faa4e0366888622e0e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103682bf60eaccc8c0ea6b95167841aee6e412a1d544017d3a9a894ed557cf576fb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"q6eT5jX3EWkQWtBzIlzI25FN5rcR/p8ixdlKyMuF4us=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aba793\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 73d0 772a 1385 | 68 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n001 8 ee2b eceb fa9a f611 | 31 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n002 2 8d3e 9472 | 9 8012 (0) 8284 (0) 836e (0) 8330 (0)\n003 7 b5fc b60e b9d9 bc29 | 14 b245 (0) b355 (0) b4e2 (0) b5fc (0)\n004 1 a192 | 1 a192 (0)\n005 2 acf8 aedc | 2 acf8 (0) aedc (0)\n============ DEPTH: 6 ==========================================\n006 2 a861 a9fa | 2 a861 (0) a9fa (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","private_key":"2fedc92f155f2df9c7680e003208e896d4afe676f8d42a34e9c052876a8eba05","name":"node_aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","services":["streamer"],"enable_msg_events":true,"port":44069},"up":true}},{"node":{"info":{"id":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","name":"node_772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","enode":"enode://705fa39aa2e54e3cf627d29d6b986190ac5c50c3ef5702ebf41f048db0b691596ce6cf281898420112ed749a1dbeb4ad5160a62cb8cac2fc23aafc9eeeeaab54@127.0.0.1:0","enr":"0xf88fb8404f14a1ec789a7e2c007912c3209baae1e1b9bdb005a66efc25bcf1e48324aab522e9eddebd99b287bc2240719d578f848243a42d5e6ed9b0db297261eceb6fde0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102705fa39aa2e54e3cf627d29d6b986190ac5c50c3ef5702ebf41f048db0b69159","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dyp5MCUo/c5qIWyYyV4oEzMpLIHf5JCuqkp4v+sZgMg=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 772a79\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 c2f9 c9ef ce01 f33c | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 4 3871 3590 221c 0639 | 30 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n002 8 5cc1 51c2 459b 4bc8 | 20 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n003 4 6daa 6379 641a 6450 | 9 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n004 3 7bee 7bcb 7a68 | 3 7bee (0) 7bcb (0) 7a68 (0)\n005 3 72a7 72a5 73d0 | 3 73d0 (0) 72a5 (0) 72a7 (0)\n============ DEPTH: 6 ==========================================\n006 1 75e2 | 1 75e2 (0)\n007 0 | 0\n008 1 77ee | 1 77ee (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","private_key":"20f8e29f129c023ce09631a3c2b173e7f73cf8040aa372de1eca8d2b5d6aa3f6","name":"node_772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","services":["streamer"],"enable_msg_events":true,"port":34307},"up":true}},{"node":{"info":{"id":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","name":"node_7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","enode":"enode://3c14067242581a41318e20b5bf461a2010c6163ce865664c0846d3c020ec076876b38593cb72579d5e5d1c5eda4182195bbacda4a6cd6f75246d0dac4b348f88@127.0.0.1:0","enr":"0xf88fb84015230ae1b2f1e7e93185930792b34197809d010451d124ef701f64630aec586a16d0a8cd37cdeaeef002bef58bd34243cf3c0a97216cb08ec2e4937ed48313b10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023c14067242581a41318e20b5bf461a2010c6163ce865664c0846d3c020ec0768","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"emj6RLvsGHJy4tXfvW7YrzGho2WqcqpQ2wI1Dr6YyFk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7a68fa\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8284 9472 f33c deec | 60 e06f (0) ea3d (0) eb01 (0) efd6 (0)\n001 3 221c 0639 034d | 30 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n002 5 5cc1 459b 4a37 4cc2 | 20 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n003 4 6daa 6379 641a 6450 | 9 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n004 6 72a5 72a7 73d0 75e2 | 6 73d0 (0) 72a5 (0) 72a7 (0) 75e2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 2 7bee 7bcb | 2 7bee (0) 7bcb (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","private_key":"55bb3e30ef20d49d0cfe74562140bde2e178fe9c68c22a323aee1342c262a374","name":"node_7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","services":["streamer"],"enable_msg_events":true,"port":33619},"up":true}},{"node":{"info":{"id":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","name":"node_034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","enode":"enode://e6424d57236a8e78654448dbacf849545ea5f8d8963a1839bda9e7e2ed7b9f75235ce65da8cd8658f6907052e5ff7500aab3d5bf41e7ef55cf6a0c51d0531da1@127.0.0.1:0","enr":"0xf88fb84031fe742fa635670041f5fe96872983f924cd30e5949074833ecf42feafa3d792135e91a69af260875cb6b8e0b99148175b0570494dc64dfed550c4b594b2be780183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e6424d57236a8e78654448dbacf849545ea5f8d8963a1839bda9e7e2ed7b9f75","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"A03mZ3TtomuT40LJuUud6util2UMgZsUSlgyvr/msC8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 034de6\npopulation: 38 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 b355 be0f 8b35 957e | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 10 58a9 4d75 4cc2 6daa | 38 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n002 9 2803 2dd4 27db 22bb | 17 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n003 3 1385 184e 1929 | 5 184e (0) 1929 (0) 1740 (0) 127c (0)\n004 4 0807 0a21 0e34 0f31 | 4 0e34 (0) 0f31 (0) 0807 (0) 0a21 (0)\n005 1 0639 | 1 0639 (0)\n============ DEPTH: 6 ==========================================\n006 1 01a6 | 1 01a6 (0)\n007 0 | 0\n008 1 03eb | 1 03eb (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","private_key":"85899df9a7c186468ac564ef2a386b2657c6d63c3f0751f128882d292dbda09a","name":"node_034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","services":["streamer"],"enable_msg_events":true,"port":37491},"up":true}},{"node":{"info":{"id":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","name":"node_72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","enode":"enode://f0232c32322d105dcc559017d690018c44958df27f400c2da47688421eb9446788c84dc8f1295f282f2af16f62dcb6cc6e25d06c58031bbe1179d859904b568a@127.0.0.1:0","enr":"0xf88fb840d8f5c3b3a865e6fb673db1e14223e95eebbf821ed0ebedb85ca36ed6d7b8e8b810af20b72f1321af49040b9636f9f653b88821f970089c882da2faf5ae94cb590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f0232c32322d105dcc559017d690018c44958df27f400c2da47688421eb94467","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cqdvZo2bkjkUhg60+Fd7yYwVP23SIs02oLve8rq38Gg=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 72a76f\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 d125 c52a ce01 c9ef | 60 e06f (0) ea3d (0) eb01 (0) ee2b (0)\n001 4 3e19 0a21 03eb 034d | 30 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n002 8 459b 4bc8 4a37 4cc2 | 20 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n003 6 6daa 62f0 6379 672a | 9 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n004 3 7a68 7bee 7bcb | 3 7bee (0) 7bcb (0) 7a68 (0)\n005 3 75e2 772a 77ee | 3 75e2 (0) 77ee (0) 772a (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 73d0 | 1 73d0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 1 72a5 | 1 72a5 (0)\n015 0 | 0\n========================================================================="}},"config":{"id":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","private_key":"2dbcb1f5dc3a4230a4b221acbcb0ddd1e7178bd47ef73c82eed7ffecc7740e8f","name":"node_72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","services":["streamer"],"enable_msg_events":true,"port":36137},"up":true}},{"node":{"info":{"id":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","name":"node_bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","enode":"enode://d1614db3ef30a1d4e4082531616f3fe131a586eacc407b1d4041e9714d0dc98600467eaa2d408b5686dbb3cace24919099715a04a8e829bc0a0eac80f3d8fda5@127.0.0.1:0","enr":"0xf88fb8409b8ce0903002c146be1f872e039e3a98a5226c19fa7fab111327cc0f7d31fa6f0abde0b02ff8f05e228e94511987c311a2c0a577eb3196f305e3a5ed95b97bc60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d1614db3ef30a1d4e4082531616f3fe131a586eacc407b1d4041e9714d0dc986","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vUhuHhXfTHU5sa1bVPdWbdSDakMOn301A4gfp54ljZs=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bd486e\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 55fd 4c21 73d0 72a7 | 68 3e19 (0) 3871 (0) 3b83 (0) 36d5 (0)\n001 2 f177 deec | 31 e06f (0) eb01 (0) ea3d (0) ee2b (0)\n002 4 9472 8b35 8d3e 8fb8 | 9 8012 (0) 836e (0) 8330 (0) 8284 (0)\n003 5 a861 a9fa aba7 acf8 | 6 a192 (0) acf8 (0) aedc (0) a861 (0)\n004 4 b355 b60e b4e2 b5fc | 5 b355 (0) b245 (0) b4e2 (0) b5fc (0)\n005 2 b869 b9d9 | 2 b869 (0) b9d9 (0)\n006 1 be0f | 1 be0f (0)\n007 2 bc71 bc29 | 2 bc71 (0) bc29 (0)\n============ DEPTH: 8 ==========================================\n008 3 bd96 bde9 bddb | 3 bd96 (0) bde9 (0) bddb (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","private_key":"7caa80d81addc9906ff055f89b4f28d67c666b90d9fd0030cf4a4a9e2372f478","name":"node_bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","services":["streamer"],"enable_msg_events":true,"port":45371},"up":true}},{"node":{"info":{"id":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","name":"node_4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","enode":"enode://6fbec307bce183850f96a0e0401fe05f26abb60c34295c692aecaaf353766314ccece95987b85ab3cf2c43c4fc8090823c86539f548ba5727d9030c99f049180@127.0.0.1:0","enr":"0xf88fb840a324b4bf2450128b22b8e99d9e7863140c8d4deab6e51d53891a5eab787249f45bbd942c8a73aa78acd0d87997764ddee5241040c712f0633281cbc5bb2dca790183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026fbec307bce183850f96a0e0401fe05f26abb60c34295c692aecaaf353766314","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TCEcEX5VXCrIMdVohhW2tMXjHx18eQazTwy828RUgrQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4c211c\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 deec 8fb8 bd48 | 60 e06f (0) ea3d (0) eb01 (0) ee2b (0)\n001 3 1385 216e 21dc | 30 184e (0) 1929 (0) 1740 (0) 127c (0)\n002 3 772a 7a68 6450 | 18 7bee (0) 7bcb (0) 7a68 (0) 75e2 (0)\n003 6 5cc1 58a9 5be6 55fd | 9 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n004 3 4775 4746 459b | 4 4775 (0) 4746 (0) 4589 (0) 459b (0)\n005 2 4bc8 4a37 | 3 4a3c (0) 4a37 (0) 4bc8 (0)\n006 1 4efa | 1 4efa (0)\n============ DEPTH: 7 ==========================================\n007 1 4d75 | 1 4d75 (0)\n008 1 4cc2 | 1 4cc2 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","private_key":"7534963388dc983ea5464538eec56a62b0acd0fc995c8549f2679755d385c2e8","name":"node_4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","services":["streamer"],"enable_msg_events":true,"port":45341},"up":true}},{"node":{"info":{"id":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","name":"node_21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","enode":"enode://88a1d0469479ab5a39001ece4f2c99ead3dc557053ca176ac22316ff7ed86ae4388683a54c38ba0f1bd78859cce8e650171fff2fa49006461c4c0d3ccff806fa@127.0.0.1:0","enr":"0xf88fb84056e42be02ea67947908fe9561498acbc10dddbec310fabfefb996e2eea72b4572e347aa61c0cab4658f9d6e382d08411d5da74a9f076c5a9f9d79e4242a9678e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10288a1d0469479ab5a39001ece4f2c99ead3dc557053ca176ac22316ff7ed86ae4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Idz7iTpUy1bSE1X8VkWDBX/FGzJQOoYn51dWYHJadic=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 21dcfb\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 deec f177 | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 4 6daa 5cc1 4d75 4c21 | 38 7bee (0) 7bcb (0) 7a68 (0) 75e2 (0)\n002 4 01a6 034d 1929 1385 | 13 184e (0) 1929 (0) 1740 (0) 127c (0)\n003 5 3871 3b83 3590 36d5 | 6 3e19 (0) 3b83 (0) 3871 (0) 36d5 (0)\n004 2 2dd4 2803 | 3 2803 (0) 2d53 (0) 2dd4 (0)\n005 3 2471 27b5 27db | 3 2471 (0) 27b5 (0) 27db (0)\n============ DEPTH: 6 ==========================================\n006 3 2354 221c 22bb | 3 2354 (0) 22bb (0) 221c (0)\n007 0 | 0\n008 1 216e | 1 216e (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","private_key":"f08efc99ef01728ff510e5f92b7180a1367519e8326761e78161233efa455123","name":"node_21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","services":["streamer"],"enable_msg_events":true,"port":42527},"up":true}},{"node":{"info":{"id":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","name":"node_6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","enode":"enode://9a9ce2e0b9a084ec93e5bf364d61450a6f630e3fcaf89692e6c084ef927d2c6acb1d0f5c3f0df97fd53807055774ed027dff214b337e644f766673ee959d6691@127.0.0.1:0","enr":"0xf88fb84044d9d55ee6ab6484a0a3ddabbc5227af358b46ebb1f61eb0155d882e31e9cd2010a81e6d888667b79f2121cd96793570539b6ec00410f3e171a61bef9431fb480183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039a9ce2e0b9a084ec93e5bf364d61450a6f630e3fcaf89692e6c084ef927d2c6a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bar1FZmcmjSRyWP3a+gu1gBWFr97qYJHsB1qiamvHXE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6daaf5\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b60e f177 deec | 60 cabf (0) c9ef (0) cc9f (0) cc5f (0)\n001 9 0f31 0639 034d 1385 | 30 184e (0) 1929 (0) 1740 (0) 127c (0)\n002 4 459b 55fd 58a9 5cc1 | 20 4775 (0) 4746 (0) 4589 (0) 459b (0)\n003 8 7a68 7bee 7bcb 75e2 | 9 7bee (0) 7bcb (0) 7a68 (0) 75e2 (0)\n004 5 6379 62f0 672a 6450 | 6 62f0 (0) 6379 (0) 672a (0) 64e6 (0)\n============ DEPTH: 5 ==========================================\n005 2 6975 68a6 | 2 68a6 (0) 6975 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","private_key":"cddadd9acb99e1d405844e54f8c99b3b8971ab5210eafaba25db3fe4f8fcd91d","name":"node_6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","services":["streamer"],"enable_msg_events":true,"port":44965},"up":true}},{"node":{"info":{"id":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","name":"node_5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","enode":"enode://c734583d55ba85edc61b6e6737e43bce10a56dba57f05d4fc8bd3ade2e47a0eefabac7e83bda748a41c8b90a8a4bd965aa9da73b25b50b2ae9b57dfdd330ae7a@127.0.0.1:0","enr":"0xf88fb8403795468f0460cb1e3426dae834bdf0a6407814c00628447ad37ea9cdd7ad51535c32b9ef97d29a71a3958d034f6a01527a5b2c6230934e8f27c513f758b3d58e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c734583d55ba85edc61b6e6737e43bce10a56dba57f05d4fc8bd3ade2e47a0ee","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XMHCjq/ZdY6AeigVmhp6bqMT+n6Hj95dR/zI9aXCUXI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5cc1c2\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8fb8 ce01 deec f177 | 60 c0ad (0) c2f9 (0) c52a (0) cabf (0)\n001 7 3871 3b83 27db 216e | 30 2803 (0) 2d53 (0) 2dd4 (0) 2354 (0)\n002 7 72a7 73d0 772a 7a68 | 18 7bee (0) 7bcb (0) 7a68 (0) 75e2 (0)\n003 4 4a37 4efa 4c21 4cc2 | 11 4775 (0) 4746 (0) 4589 (0) 459b (0)\n004 4 51c2 5008 52b4 55fd | 4 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n============ DEPTH: 5 ==========================================\n005 3 58a9 5a8b 5be6 | 3 58a9 (0) 5a8b (0) 5be6 (0)\n006 0 | 0\n007 0 | 0\n008 1 5c62 | 1 5c62 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","private_key":"e9b5e89040faaac07a9024be985c1b6a79cda66a0910b7a2ffa0a5c78b9afe61","name":"node_5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","services":["streamer"],"enable_msg_events":true,"port":45281},"up":true}},{"node":{"info":{"id":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","name":"node_4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","enode":"enode://d7ef3fd82861a99d09be17b9ed57768a386d22fbde25e097e376cb18f34b8b8e0bee1e3478fbd5fe0910f2306d0b0fa4df665e27e5a12611abc392c179d239e9@127.0.0.1:0","enr":"0xf88fb840289078a8d405c68188e3f1a163789ae0179de25d0af8223e4979d2ae17c304985bc8f4d436fab339c12b3f5ef00c5a2fda52f8622285df4f76335f4402dcf9170183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d7ef3fd82861a99d09be17b9ed57768a386d22fbde25e097e376cb18f34b8b8e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TMI4aob9IQv2mcbZMXOwh5wyENRvVypiuxVMtgp9LLE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4cc238\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c9ef c2f9 c52a 9472 | 60 c0ad (0) c2f9 (0) c52a (0) cabf (0)\n001 2 1385 034d | 30 184e (0) 1929 (0) 1740 (0) 127c (0)\n002 7 6450 6379 72a7 73d0 | 18 7bee (0) 7bcb (0) 7a68 (0) 75e2 (0)\n003 3 51c2 55fd 5cc1 | 9 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n004 2 4746 459b | 4 4775 (0) 4746 (0) 4589 (0) 459b (0)\n005 2 4bc8 4a37 | 3 4bc8 (0) 4a3c (0) 4a37 (0)\n006 1 4efa | 1 4efa (0)\n============ DEPTH: 7 ==========================================\n007 1 4d75 | 1 4d75 (0)\n008 1 4c21 | 1 4c21 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","private_key":"ab042a555a4b63b145f4de3bbfccdf1f9b84b6cb627f349b61aa1180b6fe933f","name":"node_4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","services":["streamer"],"enable_msg_events":true,"port":36183},"up":true}},{"node":{"info":{"id":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","name":"node_947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","enode":"enode://3ca90095f93c4f83cffc3cf6da5e155328580ae3f82119872f3088143f19bcc006916f2dddcf8f4325de936f67e88f96446e448c4a59def92228dfade44c5901@127.0.0.1:0","enr":"0xf88fb84036ea2f3f5156386eb2d22329ca9cb82df354d2411a505c41eb3cd0455f9f4e706903cbbe26ecebe77942a1650c5475a289f05cbeaca4a648322982b30b84a2a60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033ca90095f93c4f83cffc3cf6da5e155328580ae3f82119872f3088143f19bcc0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lHIF/YWhczCm1cUaZlSMX2l3nHarEkCPj8bTPXxrjp0=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 947205\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 034d 5be6 4cc2 73d0 | 68 184e (0) 1929 (0) 1740 (0) 127c (0)\n001 6 c0ad ce01 d18a deec | 31 c2f9 (0) c0ad (0) c52a (0) c9ef (0)\n002 12 b60e b5fc b4e2 be0f | 20 a192 (0) acf8 (0) aedc (0) aba7 (0)\n============ DEPTH: 3 ==========================================\n003 7 8fb8 8d3e 8b35 8012 | 7 8012 (0) 836e (0) 8330 (0) 8284 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 1 957e | 1 957e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","private_key":"eaf46b142d5bbbd82ca1980c2bf40b52e6c63c995e5e99fb80517e644adea556","name":"node_947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","services":["streamer"],"enable_msg_events":true,"port":33771},"up":true}},{"node":{"info":{"id":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","name":"node_641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","enode":"enode://97de2f10991b84b4170cadcc248b4222bd846e91b5212930b3a721cb99af24894df3ba5ba33a7b6cc18dd6cbfba935526b69cb0a5e6b93dec26a696f32c580ea@127.0.0.1:0","enr":"0xf88fb840dd1c643add167311c80939c5d5ff43fac27e87b7bff2726cb3d5e156638744383d3370833f2730acccd609cd6d0813ed5993951c83b59cc7b51fe835f7a457d10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10297de2f10991b84b4170cadcc248b4222bd846e91b5212930b3a721cb99af2489","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZBoWX4vg7uNvU8Erro4qNKcJrbjR3NZn6I5OkMnuJAE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 641a16\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 ed12 f611 ce01 c52a | 60 d23c (0) d125 (0) d18a (0) d9d3 (0)\n001 2 1929 034d | 30 1740 (0) 127c (0) 1385 (0) 184e (0)\n002 4 4bc8 459b 58a9 51c2 | 20 5c62 (0) 5cc1 (0) 58a9 (0) 5a8b (0)\n003 6 75e2 772a 77ee 72a7 | 9 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n004 3 6975 68a6 6daa | 3 6975 (0) 68a6 (0) 6daa (0)\n005 2 62f0 6379 | 2 62f0 (0) 6379 (0)\n006 1 672a | 1 672a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 64e6 | 1 64e6 (0)\n009 1 6450 | 1 6450 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","private_key":"f38953abdf59b216747d7c22e600d0f55aa03853782359e4f1d890ee6ccd3795","name":"node_641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","services":["streamer"],"enable_msg_events":true,"port":45833},"up":true}},{"node":{"info":{"id":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","name":"node_51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","enode":"enode://19c4efcab79f59b42b632f546d5075b30aebe0cf70b190e194aa53b3cb07a57e054266625288519f7f1ec51933e8a173ee31de9ae1c3ed7a3e52e881e1320bc2@127.0.0.1:0","enr":"0xf88fb840a924d32fa5c0500800c3babdaeff831b1c13855d864a74e91f06b59765c5112f7d5587255be9743f22305b6b734594f50af53545f49998d89400accb44da1a7c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10219c4efcab79f59b42b632f546d5075b30aebe0cf70b190e194aa53b3cb07a57e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UcKFSJ/xRigmiuiGlF4c0tpkxqCoyxhKramFZ6tCm24=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 51c285\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ce01 8fb8 957e bddb | 60 a192 (0) acf8 (0) aedc (0) aba7 (0)\n001 3 1385 1929 3590 | 30 1740 (0) 127c (0) 1385 (0) 184e (0)\n002 5 7bee 772a 72a7 6379 | 18 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n003 7 4746 4efa 4d75 4cc2 | 11 4589 (0) 459b (0) 4775 (0) 4746 (0)\n004 4 5cc1 5c62 58a9 5be6 | 5 5c62 (0) 5cc1 (0) 58a9 (0) 5a8b (0)\n005 1 55fd | 1 55fd (0)\n============ DEPTH: 6 ==========================================\n006 1 52b4 | 1 52b4 (0)\n007 1 5008 | 1 5008 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","private_key":"21aeef42b1bca1386305b8a2618ef22c9d57c0a69e14dacf5e9b23b4bd23b510","name":"node_51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","services":["streamer"],"enable_msg_events":true,"port":34421},"up":true}},{"node":{"info":{"id":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","name":"node_3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","enode":"enode://dd24910cfba19349898ab2b4cf2312f77e8c9cbaecebe966a4a599e93acd4ab317c4f64219c14c87eff8676c5f7fba8c5077c9bab707839809585cf3c19e6128@127.0.0.1:0","enr":"0xf88fb8402ed923c581464c45b4e676ff07c79106b7ceff7a57d96353d044e4d884c8a90116f8ec71e379e0311d071f53601855786da347a3d69d1aae9b1d3a07292ecd090183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102dd24910cfba19349898ab2b4cf2312f77e8c9cbaecebe966a4a599e93acd4ab3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NZCvzRD7j1jDn3IGhmHZp3K3fg79V7vWAwZjL7BI+jo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3590af\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 8b35 957e a9fa bddb | 60 a192 (0) acf8 (0) aedc (0) aba7 (0)\n001 7 7bcb 7bee 772a 6379 | 38 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n002 4 0639 034d 1385 1929 | 13 1740 (0) 127c (0) 1385 (0) 184e (0)\n003 6 2dd4 2803 221c 216e | 11 2dd4 (0) 2d53 (0) 2803 (0) 2354 (0)\n004 3 3e19 3871 3b83 | 3 3e19 (0) 3b83 (0) 3871 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 36d5 3775 | 2 36d5 (0) 3775 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","private_key":"1835770333937be27e295723616d36666fa8de13a77c315e3b4697160def434c","name":"node_3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","services":["streamer"],"enable_msg_events":true,"port":32919},"up":true}},{"node":{"info":{"id":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","name":"node_6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","enode":"enode://6d3336dba794e0658e4fcbecdb6aa6751876ce7d97023c4c68f1c6cf7fa19f6df34069acfdbbd0df6374dad95a86536fa70adefe67496703bc6cc0ca00bc0d6b@127.0.0.1:0","enr":"0xf88fb840a5c366f1069400f50edc7a3dcf5ced0b5f36fc8ac4add80658a7ae4e069e242d0e234a304d1f3f0906667c9331ecc0ea06215873ca2359615ea2539b09849b710183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036d3336dba794e0658e4fcbecdb6aa6751876ce7d97023c4c68f1c6cf7fa19f6d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZFC7XogEEavLYCWNhWCUn29w2Sunv6mk14RUY8SNqzA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6450bb\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 b355 b4e2 b5fc a9fa | 60 a192 (0) acf8 (0) aedc (0) aba7 (0)\n001 9 1929 1385 0f31 01a6 | 30 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n002 6 58a9 459b 4bc8 4d75 | 20 4746 (0) 4775 (0) 4589 (0) 459b (0)\n003 7 75e2 77ee 772a 73d0 | 9 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n004 3 6daa 68a6 6975 | 3 68a6 (0) 6975 (0) 6daa (0)\n005 2 62f0 6379 | 2 62f0 (0) 6379 (0)\n006 1 672a | 1 672a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 64e6 | 1 64e6 (0)\n009 1 641a | 1 641a (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","private_key":"d9d71e00271234db6e058d9dd56ff836e602ba475c91f715471e599e1bed5a5c","name":"node_6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","services":["streamer"],"enable_msg_events":true,"port":40239},"up":true}},{"node":{"info":{"id":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","name":"node_f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","enode":"enode://29ba5c4d8b75150f0c292d475cbafdcad1c6083b68404ea2c937aff1d74a2c8a718c535eaa698de476e4023d6a8dff115d7a6a18d4ef2df8919f5c0af5369179@127.0.0.1:0","enr":"0xf88fb840c816b422b2f4e87c16b25211009de1d65a9e678d98a60bf481a498341d8bf07f11c27a00cac462bf811b306a3b6f7178df60428c1069862f6eba19f0827d7e8c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10329ba5c4d8b75150f0c292d475cbafdcad1c6083b68404ea2c937aff1d74a2c8a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8XfuZ2enile3JdvmfsN39Qf1d300WiiJKw+/uADcRDo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f177ee\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 3775 27db 21dc 5cc1 | 68 0807 (0) 0a21 (0) 0f31 (0) 0e34 (0)\n001 5 aba7 be0f bd48 bddb | 29 a192 (0) acf8 (0) aedc (0) aba7 (0)\n002 6 c52a cc5f ce01 deec | 14 d9d3 (0) dd92 (0) deec (0) d23c (0)\n003 5 eceb ed12 ed2e ea3d | 8 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n004 3 fa9a fac8 fa65 | 3 fa65 (0) fa9a (0) fac8 (0)\n005 2 f611 f4a0 | 2 f4a0 (0) f611 (0)\n============ DEPTH: 6 ==========================================\n006 2 f3d5 f33c | 2 f33c (0) f3d5 (0)\n007 1 f005 | 1 f005 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","private_key":"025f98a103e82b260c7f1e0786cc7c7b322ecac23e4bf433a8c3b6ca3c0a7ce1","name":"node_f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","services":["streamer"],"enable_msg_events":true,"port":40657},"up":true}},{"node":{"info":{"id":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","name":"node_5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","enode":"enode://0411dc978683dba8f21f9b8342e621825888fc4937c3657235a2544564af2cf596f918e981af49789225b6548f0476ddcb2c478c561a7ccf2de5cf175b2bd667@127.0.0.1:0","enr":"0xf88fb8402bd016128d16428094936d2baa4cea722a02b856589d60f027fb7ea3cf0d2d312ea4efc1fb1cc49b83d8d28e225fc859c87d2d63e94977820e53d6c4793e95850183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030411dc978683dba8f21f9b8342e621825888fc4937c3657235a2544564af2cf5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W+bfIyAfxcAL5lCEnIv+VYHkQDPvGQEoNvl8mPOVRHE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5be6df\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 957e 9472 bc29 bddb | 60 a192 (0) acf8 (0) aedc (0) aba7 (0)\n001 3 0639 1385 3775 | 30 0a21 (0) 0807 (0) 0f31 (0) 0e34 (0)\n002 2 72a7 7bcb | 18 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n003 4 4a37 4efa 4c21 4d75 | 11 4775 (0) 4746 (0) 459b (0) 4589 (0)\n004 3 55fd 52b4 51c2 | 4 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n005 2 5c62 5cc1 | 2 5c62 (0) 5cc1 (0)\n============ DEPTH: 6 ==========================================\n006 1 58a9 | 1 58a9 (0)\n007 1 5a8b | 1 5a8b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","private_key":"b70a8c0d588327194e8b81c1f09b2403aa37aa56914bbfd6ef7e9b7c383a61f7","name":"node_5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","services":["streamer"],"enable_msg_events":true,"port":39601},"up":true}},{"node":{"info":{"id":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","name":"node_37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","enode":"enode://9a0c7c70a6abc8d8d6312e26526241fbaac88e2599c2e8ddc70a0d82155c8a19e306a320af2a0b0ba2a91333c804b1d9aaf1ff34059e1560391b141ec0195be3@127.0.0.1:0","enr":"0xf88fb840299e881f43f4d0b0fc892936f7f58feda81693023bf5890163c50e85520efc40047960a98b178845a87a28261d6fd072ea58cc313c5caa59e80ba89e01ca917c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039a0c7c70a6abc8d8d6312e26526241fbaac88e2599c2e8ddc70a0d82155c8a19","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"N3UfJ5ST3FzltcPFWm7C5BGe7e/hBpsoP2/4x7ydFBE=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 37751f\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 ed2e fac8 f611 f177 | 60 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n001 6 6daa 7bcb 7bee 4d75 | 38 6975 (0) 68a6 (0) 6daa (0) 62f0 (0)\n002 5 0639 034d 1385 184e | 13 0e34 (0) 0f31 (0) 0807 (0) 0a21 (0)\n003 6 2803 2dd4 27db 221c | 11 2dd4 (0) 2d53 (0) 2803 (0) 2354 (0)\n004 3 3e19 3871 3b83 | 3 3e19 (0) 3b83 (0) 3871 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 3590 | 1 3590 (0)\n007 1 36d5 | 1 36d5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","private_key":"bbe213c9c2af2fb4cf312a148364ca68ebecd37b64368e153ea9e51c67042ad5","name":"node_37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","services":["streamer"],"enable_msg_events":true,"port":35275},"up":true}},{"node":{"info":{"id":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","name":"node_8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","enode":"enode://d73cda92a018755888f77a3e564e7551c42f9b0293dce5f7926ad51f152e0608a98f76043b29a2ccee8b56829e6abb11f11bcc8f37138dcff09a22e9883b5da0@127.0.0.1:0","enr":"0xf88fb8406aaa1bd0ce40aedb00ca17a8b54f37666e5fda8c5fd73f70cb28d4f94789bbdd28ccfa1a85414025663af2b020c3b3d80b719d4163d059196efeb1c35caf0e8a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d73cda92a018755888f77a3e564e7551c42f9b0293dce5f7926ad51f152e0608","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"j7ggi3Fn3QbMCHeLUHzNhWdR099t+66sGLn1J7ZihSM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8fb820\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 51c2 5cc1 5c62 4efa | 68 4589 (0) 459b (0) 4746 (0) 4775 (0)\n001 5 f005 f611 ed12 d18a | 31 fa9a (0) fac8 (0) fa65 (0) f4a0 (0)\n002 7 b4e2 bc71 bc29 bde9 | 20 a192 (0) acf8 (0) aedc (0) aba7 (0)\n003 2 9472 957e | 2 9472 (0) 957e (0)\n004 4 8012 836e 8330 8284 | 4 8012 (0) 8330 (0) 836e (0) 8284 (0)\n============ DEPTH: 5 ==========================================\n005 1 8b35 | 1 8b35 (0)\n006 1 8d3e | 1 8d3e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","private_key":"278f3a6445da6b4d5dace451a1c2a3561bdef9784b8326ca0bcae3a8028ed69f","name":"node_8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","services":["streamer"],"enable_msg_events":true,"port":36235},"up":true}},{"node":{"info":{"id":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","name":"node_8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","enode":"enode://5e607646d00042ef14c4f21aea45ea5bd505be570b97f2b1b4ef73a22adf25cde1a8964defec14140b92ef5121092f391b5f2dff5345edd747ebff330059a77f@127.0.0.1:0","enr":"0xf88fb8400a07d6729478c8bd73bee4a5c31564b940112b25c41614e61d55d98ef2e09178170274aae5097d373ef2e01384f6b60f630c75a3185e1254b5a02193b3a74aa90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035e607646d00042ef14c4f21aea45ea5bd505be570b97f2b1b4ef73a22adf25cd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"izUjbamZML+PXvbHVVuxi4DOLjQ2G7v9a69Vpkg+VP8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8b3523\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 3590 3871 1929 1385 | 68 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n001 3 ed12 c0ad ce01 | 31 fa9a (0) fac8 (0) fa65 (0) f4a0 (0)\n002 11 aedc a9fa b60e b5fc | 20 a192 (0) aedc (0) acf8 (0) aba7 (0)\n003 2 957e 9472 | 2 9472 (0) 957e (0)\n004 4 8012 836e 8330 8284 | 4 8012 (0) 836e (0) 8330 (0) 8284 (0)\n============ DEPTH: 5 ==========================================\n005 2 8d3e 8fb8 | 2 8d3e (0) 8fb8 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","private_key":"3322d061eb98b1819a131c74f1241090bf160874985ca4e58cc11e1286ac0c3a","name":"node_8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","services":["streamer"],"enable_msg_events":true,"port":40641},"up":true}},{"node":{"info":{"id":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","name":"node_7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","enode":"enode://466c01046515dee738d0579e73a747c68ced8223155312c012c3f51c97298abc594772c6662ce7511bc515aac473d52bb9bbcf8e44b04576ed927cdcc214dab9@127.0.0.1:0","enr":"0xf88fb840fe0d278bd98464c794a3d0874a16b75432ba8b26f9011bfccc1461bc081260dc5b2fad42936698153126bd2792daec579d9481ecf3c53f7a9efaf80cb867b9240183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103466c01046515dee738d0579e73a747c68ced8223155312c012c3f51c97298abc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"e8sNe5+ErtQTz5sqeFG6bRE42FOCqiDmyTmkPI5ZwDQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7bcb0d\npopulation: 46 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 c52a ce01 d18a d125 | 60 fac8 (0) fa9a (0) fa65 (0) f4a0 (0)\n001 14 1929 127c 1385 034d | 30 0a21 (0) 0807 (0) 0e34 (0) 0f31 (0)\n002 6 4a37 4bc8 4efa 4cc2 | 20 459b (0) 4589 (0) 4775 (0) 4746 (0)\n003 4 6daa 672a 6450 641a | 9 6975 (0) 68a6 (0) 6daa (0) 672a (0)\n004 6 73d0 72a5 72a7 75e2 | 6 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 1 7a68 | 1 7a68 (0)\n008 0 | 0\n009 0 | 0\n010 1 7bee | 1 7bee (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","private_key":"a18a91aea9caebd371fccc6f16fbdbae7309ab0a75d82690d6762dfbf43e8237","name":"node_7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","services":["streamer"],"enable_msg_events":true,"port":34329},"up":true}},{"node":{"info":{"id":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","name":"node_27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","enode":"enode://81447592a9952d8e82cbde99d9a3a804c8251313e257587d4fd1441ccab4589209ef2eca6be2a90dd162a15afa8fa1c46112377c94317e710a692ebf3ecab3f5@127.0.0.1:0","enr":"0xf88fb84050691fa1ed8df80d90662ae933a8efbb5e3a89c1e11702c156c0c4d86c410f626a9409a01ad627a3bf48c1f787d9e70306cb6bc2068a36b1d5a6fb5c814b171b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10381447592a9952d8e82cbde99d9a3a804c8251313e257587d4fd1441ccab45892","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"J9tm0T7oForKiXhv69aXHdHWxVS8qFAQUgZctHYxVg0=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 27db66\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f611 f177 f33c 957e | 60 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n001 6 4d75 4efa 4bc8 4a37 | 38 459b (0) 4589 (0) 4775 (0) 4746 (0)\n002 4 034d 0639 1385 1929 | 13 0807 (0) 0a21 (0) 0e34 (0) 0f31 (0)\n003 5 3871 3b83 3775 36d5 | 6 3e19 (0) 3b83 (0) 3871 (0) 3590 (0)\n004 3 2d53 2dd4 2803 | 3 2dd4 (0) 2d53 (0) 2803 (0)\n005 5 2354 22bb 221c 216e | 5 2354 (0) 22bb (0) 221c (0) 216e (0)\n============ DEPTH: 6 ==========================================\n006 1 2471 | 1 2471 (0)\n007 0 | 0\n008 0 | 0\n009 1 27b5 | 1 27b5 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","private_key":"0a5ec02539f87d3f1bbe5e084133ad7fc6656fcc73cc18afb174f48e0bf9d670","name":"node_27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","services":["streamer"],"enable_msg_events":true,"port":35267},"up":true}},{"node":{"info":{"id":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","name":"node_bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","enode":"enode://838a4d55191548d17c665566c483b72340302b64549e2745f5e0d48c4e0e76359349919ae4cd0afacd5a4d9da24aebb15ca6d9bf5a028223df52d12f3aa2b77e@127.0.0.1:0","enr":"0xf88fb840ed735da037c65b1531755f40ecb8315e80fed6331af749996e684fbbf86560aa2ffdad12f343a38edb1feefc8de2de8de90416ea256ed794d06e29aa212e9cf00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102838a4d55191548d17c665566c483b72340302b64549e2745f5e0d48c4e0e7635","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vCmg2bYPPiw0IkzsGHz0Tq3EYoCG1VlGZu0CXacefno=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bc29a0\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 4d75 5be6 51c2 1929 | 68 4589 (0) 459b (0) 4775 (0) 4746 (0)\n001 6 cabf d18a f005 f611 | 31 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n002 6 8330 8284 8b35 8fb8 | 9 9472 (0) 957e (0) 8012 (0) 836e (0)\n003 4 aedc aba7 a9fa a192 | 6 a192 (0) acf8 (0) aedc (0) aba7 (0)\n004 3 b355 b5fc b4e2 | 5 b60e (0) b5fc (0) b4e2 (0) b245 (0)\n005 2 b9d9 b869 | 2 b9d9 (0) b869 (0)\n006 1 be0f | 1 be0f (0)\n============ DEPTH: 7 ==========================================\n007 4 bd48 bd96 bde9 bddb | 4 bd48 (0) bd96 (0) bde9 (0) bddb (0)\n008 0 | 0\n009 1 bc71 | 1 bc71 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","private_key":"2cf6d0e467db44e155c5ad07c701eba3784d380456d0bd1e248e88e4bd50db52","name":"node_bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","services":["streamer"],"enable_msg_events":true,"port":43139},"up":true}},{"node":{"info":{"id":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","name":"node_1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","enode":"enode://faa781fe46eab677d200731251f2be1aede682a047df2f555335072653b2cf1ad6b90a43c223c2567e8eb00b40a89e31b5d22ddd20563a80e01232f1ba4e151b@127.0.0.1:0","enr":"0xf88fb84098c7e67161c619f0c3c62c007544d6ea9adb3dbc6b48de51b49786232388fca74a3c88c994b07222dfcbba9fb8dbdd2711d9aa0c33c94ecef3d10b9e0e9ab7e20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103faa781fe46eab677d200731251f2be1aede682a047df2f555335072653b2cf1a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GSmwHA+Fr3RSoPNYtU9rNmQKGWs2aQkXKvWUoWSP5kw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1929b0\npopulation: 39 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 f005 d23c ce01 8b35 | 60 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n001 13 4746 4d75 4efa 4a37 | 38 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n002 11 3871 3e19 3590 36d5 | 17 3b83 (0) 3871 (0) 3e19 (0) 3590 (0)\n003 4 0e34 0a21 0639 034d | 8 0f31 (0) 0e34 (0) 0807 (0) 0a21 (0)\n============ DEPTH: 4 ==========================================\n004 3 1740 127c 1385 | 3 1740 (0) 127c (0) 1385 (0)\n005 0 | 0\n006 0 | 0\n007 1 184e | 1 184e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","private_key":"f3de60891a8eef22fd764c76d7b6d43b2af723a9731661df6e11020da0718b7c","name":"node_1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","services":["streamer"],"enable_msg_events":true,"port":41623},"up":true}},{"node":{"info":{"id":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","name":"node_ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","enode":"enode://1c368e379ede78380a9710e4d82c88489f66cbc28792aff7702313c087a47b0289a9c8db20c4181b75184f84aac33116cb707ffe2e01e033f014f7f14a082ef1@127.0.0.1:0","enr":"0xf88fb84077b68fee63a81bffa263efd74f643a807ceacce488968c34836eeedf7883e9da6c52dcd816863207878248ea60ba2d67c99473148fe275966dad15341798430d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031c368e379ede78380a9710e4d82c88489f66cbc28792aff7702313c087a47b02","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zgEjRmEwkSe7hy1p043Fvxm8TeLgoLUEHNNi0HPfT/g=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ce0123\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 7bcb 772a 72a7 641a | 68 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n001 6 b4e2 a9fa 8fb8 8b35 | 29 a192 (0) acf8 (0) aedc (0) aba7 (0)\n002 6 fac8 f611 f177 f005 | 17 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n003 5 deec dd92 d23c d18a | 6 d9d3 (0) dd92 (0) deec (0) d23c (0)\n004 2 c52a c0ad | 3 c52a (0) c2f9 (0) c0ad (0)\n005 2 c9ef cabf | 2 c9ef (0) cabf (0)\n============ DEPTH: 6 ==========================================\n006 2 cc9f cc5f | 2 cc5f (0) cc9f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","private_key":"95cc1ce48219ce51e9d9520f9ed3968f753d9bce3da5e3bd7ea9362f1f51a509","name":"node_ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","services":["streamer"],"enable_msg_events":true,"port":45409},"up":true}},{"node":{"info":{"id":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","name":"node_957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","enode":"enode://8b3a82a0b62bf9f4fe01d9c72712b70dd78140dfd808de3b5d4e2daa6d1e0bc78137035a1c4888ca82d1ae29cd2ed1e42db6210f629a415080082cacbcf3bf48@127.0.0.1:0","enr":"0xf88fb84018ff9330c436aa3ccef762f9c9a9d020113f1b7b955b454631d5bcc2c441ce99132e51acf27ba2589be6a6d018a52f3110342b94391caa43e26f3ba790a0248f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028b3a82a0b62bf9f4fe01d9c72712b70dd78140dfd808de3b5d4e2daa6d1e0bc7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lX7WGU5u9W6Wlr5DoaAljyuk9I9W15DkK9BmPD/Gqq4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 957ed6\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 1929 034d 2803 2471 | 68 3e19 (0) 3b83 (0) 3871 (0) 3590 (0)\n001 7 f005 f3d5 f611 dd92 | 31 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n002 7 a9fa b4e2 b355 bc71 | 20 a192 (0) aedc (0) acf8 (0) aba7 (0)\n============ DEPTH: 3 ==========================================\n003 7 8b35 8d3e 8fb8 8012 | 7 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 1 9472 | 1 9472 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","private_key":"c249537590c459e98e22f7a70786699bfd3c23aef26288b9f589ee97574d33cc","name":"node_957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","services":["streamer"],"enable_msg_events":true,"port":42809},"up":true}},{"node":{"info":{"id":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","name":"node_6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","enode":"enode://9b66200ba83d63d75740082432f6c3831ad635f6d3fe228458bd67d7e49cbaa1df293dffbf9406b165a041c7d284b6979057355ab46f925a4ae75a21e35fdf2e@127.0.0.1:0","enr":"0xf88fb8403156b1191369fe50cd749c6aac2c8795c35461c3f5bcc76313ab9a54c9248041081d5084353de2c4357294d870533e298b6954e3d9ca93644323f9cbaefb2a5b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029b66200ba83d63d75740082432f6c3831ad635f6d3fe228458bd67d7e49cbaa1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Y3m01hHN1uNgSAwUs/Z4Q2Dyj3ArWm83XtpO873n7zM=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6379b4\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bddb 957e | 60 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n001 2 3590 1929 | 30 0807 (0) 0a21 (0) 0f31 (0) 0e34 (0)\n002 6 4cc2 58a9 5cc1 5c62 | 20 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n003 5 7a68 75e2 772a 73d0 | 9 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n004 3 6daa 68a6 6975 | 3 6975 (0) 68a6 (0) 6daa (0)\n============ DEPTH: 5 ==========================================\n005 4 672a 64e6 6450 641a | 4 672a (0) 64e6 (0) 641a (0) 6450 (0)\n006 0 | 0\n007 1 62f0 | 1 62f0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","private_key":"024d0a70b86bc13cf4efc5e5bd5144a351300f43a58a6e6b95684a79ddd6fa69","name":"node_6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","services":["streamer"],"enable_msg_events":true,"port":38231},"up":true}},{"node":{"info":{"id":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","name":"node_bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","enode":"enode://fee39a564023c233a4363d4b025275561497b7b7c8e82b20160ec71631ec4adebe8afa63a77c3eb4a2d29f8c5038d08cc1ae180ea5bc95ed479297b2eaf84354@127.0.0.1:0","enr":"0xf88fb8408b6f5d1b485209e0c27b986c8f1f4356f21252247a203ff1e10fe4d511299bb01096acece8f2bf01e7674f4a3b9f315ecced47e671df32ae11bc7dcde6c0636d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fee39a564023c233a4363d4b025275561497b7b7c8e82b20160ec71631ec4ade","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vdvf88vSL87d3AfeJxJYGarHK+csMSa6iYYhxJbLlaI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bddbdf\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 3590 4d75 5be6 51c2 | 68 0f31 (0) 0e34 (0) 0807 (0) 0a21 (0)\n001 2 f177 ed12 | 31 d9d3 (0) dd92 (0) deec (0) d23c (0)\n002 5 9472 957e 8fb8 8b35 | 9 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n003 3 a192 aba7 a9fa | 6 a192 (0) aedc (0) acf8 (0) aba7 (0)\n004 3 b5fc b4e2 b355 | 5 b60e (0) b5fc (0) b4e2 (0) b245 (0)\n005 2 b9d9 b869 | 2 b9d9 (0) b869 (0)\n006 1 be0f | 1 be0f (0)\n007 2 bc71 bc29 | 2 bc71 (0) bc29 (0)\n008 1 bd48 | 1 bd48 (0)\n============ DEPTH: 9 ==========================================\n009 1 bd96 | 1 bd96 (0)\n010 1 bde9 | 1 bde9 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","private_key":"4d7f0353e69c74cd0ffd1788c11c34ed5bf024705a9d91fcc91364dcc0170d44","name":"node_bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","services":["streamer"],"enable_msg_events":true,"port":40129},"up":true}},{"node":{"info":{"id":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","name":"node_82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","enode":"enode://e2446d4ba20cf04f7587b21f065505bf06a0b763ad10228db7fac2f3d0ce85b065c6ae7856d0cf0de33e54f769d982a19db0166690996d05cfe8789eefcd061c@127.0.0.1:0","enr":"0xf88fb840390e501e8aea6582161ebc4735fea5ea709f34fdce68c3bea1d8ac01a9bee38b1f74f6c9802e7101930fa56f8379569b9e68aeca2f58c3af3f64fc0346e8bf000183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e2446d4ba20cf04f7587b21f065505bf06a0b763ad10228db7fac2f3d0ce85b0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"goR6SvT1BiJlDQNfaRUbICvM1fySMCphdgLJdGA+2Zc=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 82847a\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 72a7 75e2 772a 7a68 | 68 6975 (0) 68a6 (0) 6daa (0) 62f0 (0)\n001 7 dd92 d23c d18a d125 | 31 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n002 8 aedc a9fa b355 b4e2 | 20 a192 (0) acf8 (0) aedc (0) aba7 (0)\n003 2 9472 957e | 2 9472 (0) 957e (0)\n004 2 8b35 8fb8 | 3 8b35 (0) 8d3e (0) 8fb8 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 8012 | 1 8012 (0)\n007 2 836e 8330 | 2 8330 (0) 836e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","private_key":"8ad165530adf15657647eec0c9ad139e69f7656f1deca7792c1fc0de289a1add","name":"node_82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","services":["streamer"],"enable_msg_events":true,"port":45695},"up":true}},{"node":{"info":{"id":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","name":"node_2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","enode":"enode://89fa1305c12aff15670cc1bd8b563b83fe9f1674d1001a07b9603e7da4f267a84dfb81b00c1b2a8b6515fa90ad36b8790ed0d0bca1509e9bf434327d50ff6375@127.0.0.1:0","enr":"0xf88fb840f7c3b1530907dfcb9ba22825a0bac829dd204d31f686d97d7f4481599308bb0536112276a86c5ce46f913fb6817457bd19a2b684046c47fcbd14827391e52f080183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10389fa1305c12aff15670cc1bd8b563b83fe9f1674d1001a07b9603e7da4f267a8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KAPyEutKpPSSJLFrLeiLqGUq0RUyHuHmDNvZJuza04o=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2803f2\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 957e 8284 f005 e06f | 60 a192 (0) aedc (0) acf8 (0) aba7 (0)\n001 9 6450 64e6 672a 7bee | 38 6daa (0) 68a6 (0) 6975 (0) 62f0 (0)\n002 3 034d 184e 1929 | 13 0f31 (0) 0e34 (0) 0a21 (0) 0807 (0)\n003 4 3e19 3590 3775 36d5 | 6 3e19 (0) 3871 (0) 3b83 (0) 3590 (0)\n004 8 22bb 221c 2354 216e | 8 2471 (0) 27b5 (0) 27db (0) 2354 (0)\n============ DEPTH: 5 ==========================================\n005 2 2dd4 2d53 | 2 2dd4 (0) 2d53 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","private_key":"b37365e96591f61ba1f1f4c9438ef43bd78f2207737972de4ecc9bc85640c7c5","name":"node_2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","services":["streamer"],"enable_msg_events":true,"port":46045},"up":true}},{"node":{"info":{"id":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","name":"node_ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","enode":"enode://0b74c99f74b309c85f91b8ac4c7ebd527e900a0e3ec1355dfbfcc3f9e3bdeba8f75f27696f1412ccfa6d1580c769641f74289f5ac39347e2af880b54dbe1bdb4@127.0.0.1:0","enr":"0xf88fb840d82da58cd4d87e8a9a7bc9fa59302a31d713ec01ba8a8a0f3c989a2975ed12a41cec56ba3214c6dff113d27ed34285dd89654def2164131e72eb4d7fa553aacb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020b74c99f74b309c85f91b8ac4c7ebd527e900a0e3ec1355dfbfcc3f9e3bdeba8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7RLHjnAL+AVmnEil1i8eVnkSY8SyzlvTRYfqm8kxo+U=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ed12c7\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 641a 72a7 7bcb 4d75 | 68 6daa (0) 68a6 (0) 6975 (0) 6379 (0)\n001 6 be0f bc29 bddb 8fb8 | 29 a192 (0) aedc (0) acf8 (0) aba7 (0)\n002 9 d23c d125 d18a dd92 | 14 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n003 5 fa65 f33c f177 f005 | 9 fa65 (0) fa9a (0) fac8 (0) f4a0 (0)\n004 1 e06f | 1 e06f (0)\n005 2 eb01 ea3d | 2 eb01 (0) ea3d (0)\n006 2 efd6 ee2b | 2 efd6 (0) ee2b (0)\n============ DEPTH: 7 ==========================================\n007 1 eceb | 1 eceb (0)\n008 0 | 0\n009 0 | 0\n010 1 ed2e | 1 ed2e (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","private_key":"f54883fc517f0e3c2eddab9bdc23da7263abbb18620926ea60fdc8e1c54f341e","name":"node_ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","services":["streamer"],"enable_msg_events":true,"port":41603},"up":true}},{"node":{"info":{"id":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","name":"node_4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","enode":"enode://ed37ba950278a3c20524b27d1e9a25e94d01f5fa944c8c34d28feea810dc7c9ff037e34daa95ad6d532439949b2f4ce551f3e01eb652ca662e40b561560bf690@127.0.0.1:0","enr":"0xf88fb84074cdf17f902a07b1fe1cf0d4977a986ae645bb8d982f6feeae2a955a91b8eb3b25a8c65e204fbb42b090a2ca073f7de07f6fe8bb3ae3dc993c9f193ce5f800930183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ed37ba950278a3c20524b27d1e9a25e94d01f5fa944c8c34d28feea810dc7c9f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TXUGZtwOniwkTENJKAHB1+xiCJVKDLX4u3k7kSRAdTo=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d7506\npopulation: 45 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 957e 8fb8 b869 bddb | 60 a192 (0) aedc (0) acf8 (0) aba7 (0)\n001 14 127c 1385 1929 184e | 30 0a21 (0) 0807 (0) 0f31 (0) 0e34 (0)\n002 4 672a 6450 75e2 7bee | 18 6daa (0) 6975 (0) 68a6 (0) 6379 (0)\n003 4 52b4 51c2 5c62 5be6 | 9 55fd (0) 52b4 (0) 5008 (0) 51c2 (0)\n004 4 4589 459b 4775 4746 | 4 459b (0) 4589 (0) 4775 (0) 4746 (0)\n005 3 4bc8 4a3c 4a37 | 3 4a3c (0) 4a37 (0) 4bc8 (0)\n006 1 4efa | 1 4efa (0)\n============ DEPTH: 7 ==========================================\n007 2 4c21 4cc2 | 2 4cc2 (0) 4c21 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","private_key":"86b527d54feaa68feaa47006bfdddb5ed3db2af4f2d2c66c08442c78bfddeb4a","name":"node_4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","services":["streamer"],"enable_msg_events":true,"port":43481},"up":true}},{"node":{"info":{"id":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","name":"node_7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","enode":"enode://ee6f1a851bbd2d48a78f56ee08516649226a2b2c490ecede0f8144fd1bd0c94113ed85d0f117ed7d577e6ca4fc62f21ff3f1bc4fda1504ef8f9120b7836fa78b@127.0.0.1:0","enr":"0xf88fb840d7c73ae301629d49e06baa43aba331e7eabb685bf4c4d420b746acdbf05acb7b2468e5c944470383ac2d8aeb608a478c483b1d7fd866cec2f9b38244934394260183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ee6f1a851bbd2d48a78f56ee08516649226a2b2c490ecede0f8144fd1bd0c941","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"e+55Z/97ByQ77VW20GDV7CofKLUw7WXNBV3FtGig+Hg=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7bee79\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 b4e2 8284 8fb8 9472 | 60 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n001 7 184e 1929 3590 3775 | 30 0a21 (0) 0807 (0) 0f31 (0) 0e34 (0)\n002 5 51c2 52b4 4bc8 4efa | 20 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n003 4 6daa 68a6 64e6 672a | 9 6daa (0) 6975 (0) 68a6 (0) 6379 (0)\n004 6 77ee 772a 75e2 73d0 | 6 77ee (0) 772a (0) 75e2 (0) 73d0 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 1 7a68 | 1 7a68 (0)\n008 0 | 0\n009 0 | 0\n010 1 7bcb | 1 7bcb (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","private_key":"2ba96f376fb0ff9f7f829af5f4ac836ee1973e1a0198f5e9fcdfd002aa55f7db","name":"node_7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","services":["streamer"],"enable_msg_events":true,"port":45185},"up":true}},{"node":{"info":{"id":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","name":"node_d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","enode":"enode://111a2f319dc9db157c329c910ac39ad991b4a51e524947cdef3771765b1de028196a000955e727277027e2120a5fc6a1ad482b9b905988222c43895d74b496da@127.0.0.1:0","enr":"0xf88fb8404522aa5ddd38e1612c0c481686380332cc9624a872608456ad811feebe30a98e417d969aa10b1db80af028c334406d20531319decbc1dc63339222303e8379a50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102111a2f319dc9db157c329c910ac39ad991b4a51e524947cdef3771765b1de028","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0Yoe3SZmEGn7QB/uiqhalhSjGI4uBma/6TB/kdKarUk=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d18a1e\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4a37 641a 7bcb 7bee | 68 0e34 (0) 0f31 (0) 0a21 (0) 0807 (0)\n001 7 a9fa b4e2 bc29 8284 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 9 e06f ed2e ed12 ea3d | 17 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n003 5 c52a c0ad cabf cc5f | 8 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n004 3 d9d3 deec dd92 | 3 d9d3 (0) deec (0) dd92 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 d23c | 1 d23c (0)\n007 0 | 0\n008 1 d125 | 1 d125 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","private_key":"1254e1b68ce774b5f389113becbac1ac48e7cd670611899a781849e45f626f93","name":"node_d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","services":["streamer"],"enable_msg_events":true,"port":36067},"up":true}},{"node":{"info":{"id":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","name":"node_f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","enode":"enode://44c0501c60e75da3cff66ec0cc1f38a048f0236760ae5a715e180477166acef0f3861d57d16ece9860e9ab79f1d0c0d8d2e72d224b7b2efeaef3851ee781dd2c@127.0.0.1:0","enr":"0xf88fb840c322770a94cf0d299ed2c66f6698f6cc8cf2c1297f7f1f0f4db86c08c7eb44b2451dc9ee8f9f0e2a30068eb28c80097b8413bfb5bbbb41ec8bb3f2b3d9a384e30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10244c0501c60e75da3cff66ec0cc1f38a048f0236760ae5a715e180477166acef0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8AWk00U9UkNPK1vkAG5lO1C1KtMZJtZUci/D3wDxaJw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f005a4\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 2803 3775 36d5 034d | 68 0807 (0) 0a21 (0) 0f31 (0) 0e34 (0)\n001 12 8fb8 8012 8330 8284 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 2 ce01 d18a | 14 c52a (0) c2f9 (0) c0ad (0) c9ef (0)\n003 3 eceb ed12 ed2e | 8 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n004 2 fa65 fac8 | 3 fa65 (0) fa9a (0) fac8 (0)\n005 2 f4a0 f611 | 2 f4a0 (0) f611 (0)\n============ DEPTH: 6 ==========================================\n006 2 f33c f3d5 | 2 f33c (0) f3d5 (0)\n007 1 f177 | 1 f177 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","private_key":"22efd63c6544702dc87aeb332bfd579220f67ee8aeb6de7e8d074f5c0bc7406d","name":"node_f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","services":["streamer"],"enable_msg_events":true,"port":35571},"up":true}},{"node":{"info":{"id":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","name":"node_4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","enode":"enode://8932a57b3a5d0667185be53dfc1c53a171fb4ed6de334b49c24440e48bd85288cb827ff2141fedab03949eaaac6340211b64e434f80dc83e4c21b24e907b54aa@127.0.0.1:0","enr":"0xf88fb84026d7e9844328cc3aead03b756a7922f94121db28001850d34df1b7f2513ec69e30437cc7a321d10338c447945422db8b68c70409fd74fb560da1a45823fa40840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028932a57b3a5d0667185be53dfc1c53a171fb4ed6de334b49c24440e48bd85288","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Sjc1cUdeK0woDS1LIvEKJJ7gn8+Qf1IIHsA5iotepvI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4a3735\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 8fb8 a9fa d18a fac8 | 60 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n001 5 216e 27db 36d5 3775 | 30 0e34 (0) 0f31 (0) 0807 (0) 0a21 (0)\n002 7 7bcb 7a68 73d0 72a7 | 18 75e2 (0) 77ee (0) 772a (0) 73d0 (0)\n003 6 5cc1 5c62 58a9 5be6 | 9 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n004 2 4775 4746 | 4 459b (0) 4589 (0) 4775 (0) 4746 (0)\n005 4 4efa 4cc2 4c21 4d75 | 4 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 4bc8 | 1 4bc8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 4a3c | 1 4a3c (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","private_key":"01b16147c78c71594879cbc9eace48bccf5f46f6c50604ec8fee98e1e91914b2","name":"node_4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","services":["streamer"],"enable_msg_events":true,"port":43203},"up":true}},{"node":{"info":{"id":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","name":"node_a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","enode":"enode://37b1fbaed8a69d74dcb79c7269e934ef02b048bc42b77b82e5e62866160ba5cad476950f99f99285f882b0a904a19b9cc97400347dd8913ebdbf6698e62f4490@127.0.0.1:0","enr":"0xf88fb840651a030a5371bc567448dc8f7027e7e4d9aca1dffba13e9503cbd1be66c51de02e5ee41bbc0d27c11c4d68d95ed088f1108e358ae435ebb57803627f6d7712ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10237b1fbaed8a69d74dcb79c7269e934ef02b048bc42b77b82e5e62866160ba5ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qfooEXpLaQa1zjkxVz4KGe7Dy0/NkUG+LSWKK+BvO2E=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a9fa28\npopulation: 46 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 2471 3590 68a6 6450 | 68 0a21 (0) 0807 (0) 0f31 (0) 0e34 (0)\n001 14 d18a d125 d23c dd92 | 31 c52a (0) c2f9 (0) c0ad (0) cc9f (0)\n002 7 9472 957e 8b35 8d3e | 9 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n003 12 b245 b355 b60e b4e2 | 14 b60e (0) b5fc (0) b4e2 (0) b245 (0)\n004 1 a192 | 1 a192 (0)\n005 2 aedc acf8 | 2 aedc (0) acf8 (0)\n============ DEPTH: 6 ==========================================\n006 1 aba7 | 1 aba7 (0)\n007 1 a861 | 1 a861 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","private_key":"eea6155ca80745d78b3a9c8c63fc2618254022771e70abd50cc80a7bcee4129c","name":"node_a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","services":["streamer"],"enable_msg_events":true,"port":35285},"up":true}},{"node":{"info":{"id":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","name":"node_4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","enode":"enode://83716365bf8c5748254c76a38079e43293468d4a67d489df3092fc33447390a566e18708a5ef396134e35ca5f2ff58e96ea27ed6941bc20dc6c3d1be57960d9b@127.0.0.1:0","enr":"0xf88fb840beee55803b074f7f9ec59bf2276feeb7849256026ecb0b230f47905554a0b7721dc5f36ac09fcad8662a9da7962463ba1c8380d27ebc363edf966b1b4fffd7970183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10383716365bf8c5748254c76a38079e43293468d4a67d489df3092fc33447390a5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Tvqrqw1dxZ8Jiu5NujhoJjQRpVYVosR0pz5u7CIR3sw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4efaab\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f4a0 fac8 8fb8 bde9 | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 4 1929 216e 27db 2803 | 30 0a21 (0) 0807 (0) 0f31 (0) 0e34 (0)\n002 6 7bee 7bcb 72a7 72a5 | 18 73d0 (0) 72a7 (0) 72a5 (0) 77ee (0)\n003 5 52b4 51c2 5cc1 5c62 | 9 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n004 4 459b 4589 4775 4746 | 4 459b (0) 4589 (0) 4775 (0) 4746 (0)\n005 3 4bc8 4a37 4a3c | 3 4a3c (0) 4a37 (0) 4bc8 (0)\n============ DEPTH: 6 ==========================================\n006 3 4cc2 4c21 4d75 | 3 4cc2 (0) 4c21 (0) 4d75 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","private_key":"9adb7214565c62d93b6daada5fb947a4aa641f07396dc29def6a399d06534b3f","name":"node_4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","services":["streamer"],"enable_msg_events":true,"port":41679},"up":true}},{"node":{"info":{"id":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","name":"node_bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","enode":"enode://18c5769fcc3cebeb0f8151e2f4b84902c268fe8db07c01b90e0992abf123891768735738fa07913a22d143ae1b0852d830f7b49fd9b022b48765b518bccf8166@127.0.0.1:0","enr":"0xf88fb84006231adc86baddad575a6b04c656320bf5c226c2f4907c98a80d09ffd30a9c5e5f4ef4e17a92c907e3fa90a57634dec8277905a2298a73fea645bf359a400e910183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10218c5769fcc3cebeb0f8151e2f4b84902c268fe8db07c01b90e0992abf1238917","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vekKqg8fen65Zf8whxjSm1WoCxyoTfuhbBaeq+Kw1d4=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bde90a\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5be6 4bc8 4d75 4efa | 68 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n001 2 e06f ed2e | 31 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n002 6 957e 8fb8 8b35 8012 | 9 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n003 3 a9fa a861 a192 | 6 a192 (0) aedc (0) acf8 (0) aba7 (0)\n004 3 b4e2 b245 b355 | 5 b60e (0) b5fc (0) b4e2 (0) b245 (0)\n005 2 b9d9 b869 | 2 b9d9 (0) b869 (0)\n006 1 be0f | 1 be0f (0)\n007 2 bc71 bc29 | 2 bc71 (0) bc29 (0)\n008 1 bd48 | 1 bd48 (0)\n============ DEPTH: 9 ==========================================\n009 1 bd96 | 1 bd96 (0)\n010 1 bddb | 1 bddb (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","private_key":"5c9ecf07c02ad229e4278ffee6d3f401fd8e6605ec8cda65cd1de164bdb2c4c9","name":"node_bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","services":["streamer"],"enable_msg_events":true,"port":37049},"up":true}},{"node":{"info":{"id":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","name":"node_b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","enode":"enode://05ec349b77cce593afc87d277f22c4664825e5cda0f4685461bf1161b262a3c29837580c1f80a96fd1953be71e7083284fbb28a7cbd63df5ceea63f89d1c429d@127.0.0.1:0","enr":"0xf88fb8403b39c4a274c55d5fda8b8b8e52dfdb970bff69c0055370a4553ff68fd90d149f41ff2b874b4b9c2258a91d1256de830ec8c0ea3cf7881acab5e8dce0fff835bb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10305ec349b77cce593afc87d277f22c4664825e5cda0f4685461bf1161b262a3c2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"s1VbqnZMRWKTW5NTPubFpt9jHoRsOrUS/bHWuQGmjGA=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b3555b\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 3775 3e19 184e 1929 | 68 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n001 3 f005 e06f ed2e | 31 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n002 5 957e 8b35 8012 8284 | 9 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n003 3 a9fa a861 a192 | 6 a192 (0) acf8 (0) aedc (0) aba7 (0)\n004 9 b9d9 b869 be0f bc29 | 9 b9d9 (0) b869 (0) be0f (0) bc71 (0)\n============ DEPTH: 5 ==========================================\n005 3 b60e b4e2 b5fc | 3 b60e (0) b5fc (0) b4e2 (0)\n006 0 | 0\n007 1 b245 | 1 b245 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","private_key":"590969da498fe95b0a99340a0c185e65d4cc9eb3ee04b3629e91bdc6b8ce18c6","name":"node_b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","services":["streamer"],"enable_msg_events":true,"port":39871},"up":true}},{"node":{"info":{"id":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","name":"node_4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","enode":"enode://29d89497ada4c78fa702d02812539dddff2d5b2a38b2eabf3ccca262ca18d8a7781a78b87287b1d2e204171814e04a54d268c692c64f9da0079ff9b143f8b386@127.0.0.1:0","enr":"0xf88fb840933154156e40944b295ca276bd44fdccde6fa8f9ca5ec52169c14e3d609078a3554a271fdcc0e539e728506b39331131141632c216ce5728688f16aa2367a0590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10229d89497ada4c78fa702d02812539dddff2d5b2a38b2eabf3ccca262ca18d8a7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"S8jfv4R5TSbXpXPJ2JiXTqo6IWfhnLeoqkYIB6YDrNQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4bc8df\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 f4a0 fac8 d125 bde9 | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 4 184e 216e 27db 36d5 | 30 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n002 10 6450 641a 6975 68a6 | 18 73d0 (0) 72a7 (0) 72a5 (0) 77ee (0)\n003 4 5a8b 5c62 52b4 51c2 | 9 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n004 3 4589 4775 4746 | 4 459b (0) 4589 (0) 4775 (0) 4746 (0)\n005 4 4efa 4d75 4cc2 4c21 | 4 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 4a37 4a3c | 2 4a3c (0) 4a37 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","private_key":"2b3a544890fa52405c7779653a8a4e5269283d9f341ab7aa99823d9135a96263","name":"node_4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","services":["streamer"],"enable_msg_events":true,"port":44129},"up":true}},{"node":{"info":{"id":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","name":"node_d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","enode":"enode://d2dec9507d007942f28636ef9f81f1a1a872649603fd6a91663cd0130f4cda18defe6e621a84a16b090128c8f34cb74030ccb6da91c4d4f738ef2fc72fa7a14a@127.0.0.1:0","enr":"0xf88fb840625c10b99f412c5021f6b462a097936033b6ce377281de62adfcf031f36be69c099ffbd4039c05d2c01fd4020579a384db855daf9ddae3b84112d2ba0fd359000183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d2dec9507d007942f28636ef9f81f1a1a872649603fd6a91663cd0130f4cda18","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0SUxe0kt9Gp91JbTDG0Hg57Wv6GWq95Ihs57yPm1wB8=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d12531\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 72a7 7bcb 641a 672a | 68 03eb (0) 034d (0) 01a6 (0) 0639 (0)\n001 6 8012 8330 8284 b4e2 | 29 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n002 7 ea3d ed12 ed2e ee2b | 17 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n003 6 c52a c0ad cabf cc5f | 8 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n004 3 d9d3 deec dd92 | 3 d9d3 (0) deec (0) dd92 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 d23c | 1 d23c (0)\n007 0 | 0\n008 1 d18a | 1 d18a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","private_key":"f481929f9772f78b97a8f3aec412d8fcce1c6413a74f05ae88a2a1f966ac73ea","name":"node_d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","services":["streamer"],"enable_msg_events":true,"port":35019},"up":true}},{"node":{"info":{"id":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","name":"node_672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","enode":"enode://7b6be04d1749751b5092a9e161b023476c969249f8f813aaa7d55bb11ea59589a48186fdbd5669729d96c2e6aa36e602be0dd2affbb4f9b746cffe9d6ce980c6@127.0.0.1:0","enr":"0xf88fb840a265ed80e2605099ff7573c1400c1e72f63aeba4a2ab3fa32bcd5983f0f0bd89046d176ca64735155279f50bfabb42326955276866cdb505549743cee3f0e7190183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027b6be04d1749751b5092a9e161b023476c969249f8f813aaa7d55bb11ea59589","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZypWbHwq6x2R5u5OQ5hAUN+LlWDZI9YNwfsj+3OxoEY=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 672a56\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ee2b c0ad d125 8284 | 60 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n001 6 27b5 2d53 2803 0a21 | 30 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n002 6 4d75 4589 4746 4775 | 20 459b (0) 4589 (0) 4775 (0) 4746 (0)\n003 5 75e2 72a7 72a5 7bcb | 9 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n004 3 6daa 6975 68a6 | 3 6daa (0) 6975 (0) 68a6 (0)\n005 2 62f0 6379 | 2 6379 (0) 62f0 (0)\n============ DEPTH: 6 ==========================================\n006 3 64e6 641a 6450 | 3 641a (0) 6450 (0) 64e6 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","private_key":"310d5355dc6d53293d04e7e253fbbc07b4f8990b7da8ed4a43b288b8091dae9a","name":"node_672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","services":["streamer"],"enable_msg_events":true,"port":38621},"up":true}},{"node":{"info":{"id":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","name":"node_b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","enode":"enode://34eec1960cf31fc2dbdcebf909d70107e4589b1136173b360bd9428e5403683b9cbf3d075784c2059942ece65d262f429c184c07f0ca0b3e9cf609484e99b01f@127.0.0.1:0","enr":"0xf88fb840328330bce745f0a6aecebf965760649d16f77adfe7dc13e07094a7d3d2238d1304692cb5d4fbbac1caf45e4c5ca08e54fcfd1a30d2a8e9d6fefe7108a3355d010183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10334eec1960cf31fc2dbdcebf909d70107e4589b1136173b360bd9428e5403683b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tOKd5L1XUfMRlerYqhVI0wWlP7T5m+mTGFDmJz3o81k=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b4e29d\npopulation: 38 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 4d75 5be6 5c62 7bee | 68 01a6 (0) 03eb (0) 034d (0) 0639 (0)\n001 11 d125 d18a d23c dd92 | 31 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n002 7 957e 9472 8b35 8fb8 | 9 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n003 2 a192 a9fa | 6 aedc (0) acf8 (0) aba7 (0) a861 (0)\n004 8 b9d9 b869 bc29 bc71 | 9 b9d9 (0) b869 (0) be0f (0) bc29 (0)\n005 2 b355 b245 | 2 b245 (0) b355 (0)\n============ DEPTH: 6 ==========================================\n006 1 b60e | 1 b60e (0)\n007 1 b5fc | 1 b5fc (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","private_key":"91d529071d81ab2bdb9e196080d3e71c4e0b1489d32f062fed6384af3da301ba","name":"node_b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","services":["streamer"],"enable_msg_events":true,"port":43795},"up":true}},{"node":{"info":{"id":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","name":"node_f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","enode":"enode://7c45bf66c718bd1786d40d630447ad12d162cab1cda004e9cda42d46e902793a21486f69dc05cbdf2668185e67b050e7a0201cb4795acf046008819e31bf0b3a@127.0.0.1:0","enr":"0xf88fb840ecb85cd88a5e53a505d6f8fc3bfba676551879609d7600f44cf989c3954b6b295b9001b005ec206366f0e2e2b4568301bdd7800a4931e26d253ea68cb93da85a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027c45bf66c718bd1786d40d630447ad12d162cab1cda004e9cda42d46e902793a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9hHYA5OFrVYmCrORdj42J6rdJ1ZWX+3D7JX3YSTaDvw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f611d8\npopulation: 45 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 27db 3775 641a 7bcb | 68 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n001 16 8fb8 8330 836e 8284 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 7 d18a d23c deec dd92 | 14 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n003 6 e06f eb01 efd6 ee2b | 8 e06f (0) eb01 (0) ea3d (0) efd6 (0)\n004 3 fac8 fa9a fa65 | 3 fa65 (0) fa9a (0) fac8 (0)\n============ DEPTH: 5 ==========================================\n005 4 f33c f3d5 f177 f005 | 4 f177 (0) f005 (0) f33c (0) f3d5 (0)\n006 1 f4a0 | 1 f4a0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","private_key":"7ab918155f49b16772c29096b650cf6baa603a51b6d2bde3aa338c699ac4bcff","name":"node_f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","services":["streamer"],"enable_msg_events":true,"port":40431},"up":true}},{"node":{"info":{"id":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","name":"node_5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","enode":"enode://233c4654af0c29a6d9f1fd643f00e4c77b24df2f4a388dc96f185a6492c67af3875580e0e3df923cfc1857baf0933fcfc451fd1af522d0ae636212c787ac549a@127.0.0.1:0","enr":"0xf88fb8409ba9b9726a6f75d6349a441f7afacdfcd153e89635e530e301aba363979b95be152ab2b042540762f8e738257928ed7cb0e1dcc276af3f5a178dc3cdf78733c70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102233c4654af0c29a6d9f1fd643f00e4c77b24df2f4a388dc96f185a6492c67af3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XGI/oBAxCNCx4k5tAaZiTOO1mp58QixF38EhFnZ4VUI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5c623f\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 8fb8 957e b245 b4e2 | 60 8b35 (0) 8d3e (0) 8fb8 (0) 8012 (0)\n001 7 1929 184e 2471 27b5 | 30 03eb (0) 034d (0) 01a6 (0) 0639 (0)\n002 4 75e2 72a5 6379 672a | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 8 4bc8 4a37 4a3c 4efa | 11 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n004 4 55fd 5008 51c2 52b4 | 4 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n============ DEPTH: 5 ==========================================\n005 3 58a9 5a8b 5be6 | 3 58a9 (0) 5a8b (0) 5be6 (0)\n006 0 | 0\n007 0 | 0\n008 1 5cc1 | 1 5cc1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","private_key":"59601d5a451dc893a0eacd7c9a58064f127f7a6006cb91d3ce285e840eba9ccb","name":"node_5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","services":["streamer"],"enable_msg_events":true,"port":44553},"up":true}},{"node":{"info":{"id":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","name":"node_4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","enode":"enode://da0cf3977228d65352ccef3b882334d901b72fbb167e3f5b4c45f62e52526ed3eb3d50ec8227e9d6b8c14a9d43a769265337e2a228575b810b885e3db5eb2f49@127.0.0.1:0","enr":"0xf88fb84051a2a5e0e8760be8f291be6f24a97796a1aee5a826d1d5b7b7736aba877749a15622871be3c2e8363c03a126114650ad0459f143f01b34abc25b3c1c909a34d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103da0cf3977228d65352ccef3b882334d901b72fbb167e3f5b4c45f62e52526ed3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"R0Y3khK5HuHBPBM26POnOoRAi3Y2wiLBG9J859ck5sY=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 474637\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 b245 ce01 fac8 f4a0 | 60 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n001 7 184e 1929 127c 0e34 | 30 0639 (0) 01a6 (0) 03eb (0) 034d (0)\n002 4 672a 64e6 72a5 75e2 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 2 51c2 5c62 | 9 55fd (0) 5008 (0) 51c2 (0) 52b4 (0)\n004 7 4bc8 4a37 4a3c 4efa | 7 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 459b 4589 | 2 459b (0) 4589 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 4775 | 1 4775 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","private_key":"7f51642b5475141f99f5c1b1ae83d37f562df9bc05930b615f2d9e36c631eb09","name":"node_4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","services":["streamer"],"enable_msg_events":true,"port":42479},"up":true}},{"node":{"info":{"id":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","name":"node_ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","enode":"enode://69f46f822ed108a3341c1b99942e66e6fdcd74e0d37a20ab54831a0ef22b1686782dd6547d34e038a8402a5d39fca494365e445c5e24646340677ee07478b1d1@127.0.0.1:0","enr":"0xf88fb8403cf3999ab1acccd527ca14d5712142e6de9dbe055b041c09ed9a97c8c904c3615dd568f79fba4871ebba52e4d28fc8645c9db1fe5fa6bcb3534dc7ed8079b5d80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10369f46f822ed108a3341c1b99942e66e6fdcd74e0d37a20ab54831a0ef22b1686","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7S7GaBvzJYh3aHA3eczzpieHMRGM0+yJBJCj3lD2iaw=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ed2ec6\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 3775 36d5 72a7 4589 | 68 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n001 4 b355 b869 be0f bde9 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 10 d23c d18a d125 dd92 | 14 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n003 8 fa65 fa9a fac8 f33c | 9 fa65 (0) fa9a (0) fac8 (0) f177 (0)\n004 1 e06f | 1 e06f (0)\n005 2 eb01 ea3d | 2 eb01 (0) ea3d (0)\n006 2 efd6 ee2b | 2 efd6 (0) ee2b (0)\n============ DEPTH: 7 ==========================================\n007 1 eceb | 1 eceb (0)\n008 0 | 0\n009 0 | 0\n010 1 ed12 | 1 ed12 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","private_key":"1f0f2deaf715e265a0dc7e04ebce7f7ab8f71ce370739dbb27f3a69c46cf5ed5","name":"node_ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","services":["streamer"],"enable_msg_events":true,"port":36339},"up":true}},{"node":{"info":{"id":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","name":"node_36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","enode":"enode://ece93da9ec83a6c37b2bd0240c13c80cf1a175d1883e1881c7cc9122756be72dc17964a01f72b5e570f8948296665c11f34a28691feb337825be71830dd71aa4@127.0.0.1:0","enr":"0xf88fb8400bb1875a3bb9340c4f3442f8cb86cc57892d5c1f6f6149b97ce85a88fe97d6bf3fcef5348de2c000530c8320f52890fd28a31a6393aa7f7d304e3574646bf6ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ece93da9ec83a6c37b2bd0240c13c80cf1a175d1883e1881c7cc9122756be72d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NtWVJoXJXkK+8U93tjcFiXynHSTSHk6e/HctnKvSESI=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 36d595\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f005 e06f ed2e d23c | 60 9472 (0) 957e (0) 8d3e (0) 8fb8 (0)\n001 10 64e6 7bee 4d75 4a37 | 38 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n002 5 0e34 0a21 127c 1929 | 13 01a6 (0) 03eb (0) 034d (0) 0639 (0)\n003 9 21dc 216e 2354 2471 | 11 2dd4 (0) 2d53 (0) 2803 (0) 21dc (0)\n004 3 3e19 3871 3b83 | 3 3871 (0) 3b83 (0) 3e19 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 3590 | 1 3590 (0)\n007 1 3775 | 1 3775 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","private_key":"6f7f6fa8cf239e96150cce6db5caa458629888f8f5f726b8cc6bbcbe09dfcb2c","name":"node_36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","services":["streamer"],"enable_msg_events":true,"port":34495},"up":true}},{"node":{"info":{"id":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","name":"node_cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","enode":"enode://49eae8779e617a7104cbd74223738ff9b987295433994660ab89955cd4e1fb8bbce3608ed7e0acb995c78f652e038d6b6ae87a9ce968bd82de552f8b86994ff2@127.0.0.1:0","enr":"0xf88fb840c2b4c4f501dbf7f98654d927a7fb975ad27786b3cbc874c1994dfc8cd97b89522e882d0fc4258d3d6c928f131df7e96aff65485d5b56a5f54d0e0938ea80751f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10249eae8779e617a7104cbd74223738ff9b987295433994660ab89955cd4e1fb8b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yr/ft4nMIJYuq6Hb5o1twEZuaZ0i3Fsp8npc1VU5h5U=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cabfdf\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 52b4 36d5 | 68 6daa (0) 6975 (0) 68a6 (0) 6379 (0)\n001 9 8012 8330 b4e2 bd96 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 6 fa65 f611 f3d5 efd6 | 17 fa65 (0) fa9a (0) fac8 (0) f177 (0)\n003 4 dd92 d125 d18a d23c | 6 d9d3 (0) deec (0) dd92 (0) d18a (0)\n004 3 c52a c2f9 c0ad | 3 c52a (0) c2f9 (0) c0ad (0)\n============ DEPTH: 5 ==========================================\n005 3 ce01 cc9f cc5f | 3 ce01 (0) cc9f (0) cc5f (0)\n006 1 c9ef | 1 c9ef (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","private_key":"50c1b7e67b07c5e3e977aa0690b20a2bcc1ffea472bef560311f987eda352d1d","name":"node_cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","services":["streamer"],"enable_msg_events":true,"port":32801},"up":true}},{"node":{"info":{"id":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","name":"node_d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","enode":"enode://59e6798c8baabbf319576e50e1a709538aa094df1468e5a787b1593fc175622fdb8c56a5b1fea1b6ddfdb8099c602aa7d542cfcc0736b0f8e90761c1672a0057@127.0.0.1:0","enr":"0xf88fb8406107c3f070686e09872ca8a041ab9bbb404d2aca874e09f6dc628aa7efcfe23f671b20e5d229ff36fce675f9954b02e453337d800619251a0ffa0a997c4604ed0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10359e6798c8baabbf319576e50e1a709538aa094df1468e5a787b1593fc175622f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0jyXvrzeJvXjUcS5dcdqr2BP0gb5uQY+y9pTjnpS9RQ=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d23c97\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 3e19 36d5 184e 1929 | 68 0639 (0) 034d (0) 03eb (0) 01a6 (0)\n001 6 8284 8012 957e b4e2 | 29 9472 (0) 957e (0) 8b35 (0) 8fb8 (0)\n002 7 ea3d ed12 ed2e efd6 | 17 f177 (0) f005 (0) f33c (0) f3d5 (0)\n003 6 c2f9 c0ad ce01 cc5f | 8 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n004 3 d9d3 deec dd92 | 3 d9d3 (0) deec (0) dd92 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 d18a d125 | 2 d18a (0) d125 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","private_key":"7ef7bc7466fca587aab3f839ece8ec307619523af4dc22ab14b3129c81978144","name":"node_d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","services":["streamer"],"enable_msg_events":true,"port":39477},"up":true}},{"node":{"info":{"id":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","name":"node_a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","enode":"enode://3c5d51d426ffa9069eae24c2f0c108b2f543255bbef13b8ddf2a2dfdd34bf1fee87505e6163e90fa9f7432ec9865f90490aefc0bbd8049fddf18d8eecd8bb076@127.0.0.1:0","enr":"0xf88fb840c935263f2fe7bcceed68a1f97aa98b1f4898056415975bfe6af3a937a3e8afbc664cfe541a801aa79c8a84efac3ec10512e3c34b32d5fa16b9383f850a5ca9bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023c5d51d426ffa9069eae24c2f0c108b2f543255bbef13b8ddf2a2dfdd34bf1fe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oZKfcEZkyoXYKaw7q2LmiGR6fP3LyfA8YbASTPkJNQU=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a1929f\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 2471 184e 68a6 6450 | 68 0639 (0) 034d (0) 03eb (0) 01a6 (0)\n001 11 ee2b ea3d e06f f611 | 31 f177 (0) f005 (0) f33c (0) f3d5 (0)\n002 3 9472 8012 8330 | 9 957e (0) 9472 (0) 8b35 (0) 8d3e (0)\n003 9 b355 b245 b4e2 bde9 | 14 b245 (0) b355 (0) b60e (0) b5fc (0)\n============ DEPTH: 4 ==========================================\n004 5 aba7 a9fa a861 aedc | 5 aedc (0) acf8 (0) aba7 (0) a861 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","private_key":"9037f029de76f869c02e95928a58d061068ff690b7a5ce42fe021987910ec074","name":"node_a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","services":["streamer"],"enable_msg_events":true,"port":42239},"up":true}},{"node":{"info":{"id":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","name":"node_52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","enode":"enode://fc05173b55aa81517b3ac06d2d7c2c6a7f3ce4a2b37780ab5111f90a2d537c3081147d82c05d274eee69f1576a40da8d1065dd9f951547cb1c072f2748bae488@127.0.0.1:0","enr":"0xf88fb840b0c717a2ac8079ccf35009302f2fdb71fc7d427791e0db68bd05457b484f738c6c8cba664f215e4772f08a743818e428827b0dbb2e2b213bd427367bd64659900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fc05173b55aa81517b3ac06d2d7c2c6a7f3ce4a2b37780ab5111f90a2d537c30","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UrR9Ur9KGv2hYEt5QgGcjSrEx2DF60WX4c4t16jhz00=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 52b47d\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 cabf d23c fac8 ea3d | 60 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n001 4 2803 36d5 3e19 184e | 30 03eb (0) 034d (0) 01a6 (0) 0639 (0)\n002 7 7bee 75e2 72a5 68a6 | 18 7a68 (0) 7bcb (0) 7bee (0) 73d0 (0)\n003 6 4efa 4c21 4d75 4bc8 | 11 4cc2 (0) 4c21 (0) 4d75 (0) 4efa (0)\n004 4 5be6 5a8b 5cc1 5c62 | 5 58a9 (0) 5be6 (0) 5a8b (0) 5cc1 (0)\n005 1 55fd | 1 55fd (0)\n============ DEPTH: 6 ==========================================\n006 2 5008 51c2 | 2 5008 (0) 51c2 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","private_key":"a160ffd0d147d08006e444e85b70fb9e8f982c3e0a7ad72f8005d6a040a65682","name":"node_52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","services":["streamer"],"enable_msg_events":true,"port":37611},"up":true}},{"node":{"info":{"id":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","name":"node_e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","enode":"enode://c527957ba9cb7743e768b25580478414c9740bf57540523a69f55a7e40c6e1d5f2f53b2d72c9e017219e008e4c68cc9f6f9209d12dbe5e617557b73b0c465cab@127.0.0.1:0","enr":"0xf88fb84055bcf73035487cb5632f8ed4d3f298da2d47da173342acd58a537bec7b17f1981d6d0060dff9891b4f3b79168a713b0ea134bf4a724cea40a0a0a20e9df661980183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c527957ba9cb7743e768b25580478414c9740bf57540523a69f55a7e40c6e1d5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4G9YsUT6plD5ZGWCXSU7Y9fgYeOjxCKK1eG2Za+8zDc=","hive":"\n=========================================================================\nThu Feb 28 18:08:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e06f58\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 2d53 2803 3e19 36d5 | 68 0639 (0) 03eb (0) 034d (0) 01a6 (0)\n001 7 836e bde9 b4e2 b245 | 29 9472 (0) 957e (0) 8b35 (0) 8d3e (0)\n002 3 d18a d125 dd92 | 14 c52a (0) c2f9 (0) c0ad (0) ce01 (0)\n003 4 fa65 f611 f177 f3d5 | 9 f177 (0) f005 (0) f33c (0) f3d5 (0)\n============ DEPTH: 4 ==========================================\n004 7 ea3d eb01 efd6 ee2b | 7 efd6 (0) ee2b (0) eceb (0) ed12 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","private_key":"1fb267b5c56dc43486cd338b223dbdd81bbe0d2ca10ce150e87fafd8ea7fb55d","name":"node_e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","services":["streamer"],"enable_msg_events":true,"port":36611},"up":true}}],"conns":[{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","other":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","up":true},{"one":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","up":true},{"one":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","other":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","other":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"4a373571475e2b4c280d2d4b22f10a249ee09fcf907f52081ec0398a8b5ea6f2","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","up":true},{"one":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"4bc8dfbf84794d26d7a573c9d898974eaa3a2167e19cb7a8aa460807a603acd4","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","up":true},{"one":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","up":true},{"one":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"c0adf394af7d5670c1ce8c6bea292fbc03c56ae2b636e2f303311a455bb3500f","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"ea3d6aa50ad5a1d5647d213f9b5cfe6718339eec7eef8644487eb3c223c7bcde","up":true},{"one":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"672a566c7c2aeb1d91e6ee4e43984050df8b9560d923d60dc1fb23fb73b1a046","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"eb01ff80307afbfc7457c96594cd4ba4d00acb7fd25a7571d1223168bd66ff09","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","other":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"0f3106adfe70aefb474c4a98a95932307391de2cb70fbd2e11dd31c9e695ed83","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"cc9f65d734f1a3bbc6019e166fe355bd7fc33bb4887043a5ccf532a9ba356379","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"acf888ed781f5358493e2e5048691acc39eac3240ca9e9093bb4052b1f624325","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"4efaabab0d5dc59f098aee4dba3868263411a55615a2c474a73e6eec2211decc","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"fac808b79923931febd54e3611b79811b3973c777e7502bd56b9803d0c4bf785","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"a86117147b78f20a6d883d37715da85178cad89eff650a74aa89e7bc11bc45a7","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"efd68d2c99346ca085c9ef896bee6125ad8638413295108f3a92b247a41ca629","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"fa655b4882579e65937a14ab1c6bcba021580f0a5ebc04c48424f5ae72b7d5b4","up":true},{"one":"4cc2386a86fd210bf699c6d93173b0879c3210d46f572a62bb154cb60a7d2cb1","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"52b47d52bf4a1afda1604b7942019c8d2ac4c760c5eb4597e1ce2dd7a8e1cf4d","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","other":"0a215c7765be2caebf76ad3e8017bbc2aaadf8e0dd4859af781953a0564c5d59","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"221cd8ea0a26f0d3f81f782f1de390282415ecd9cf40224b4945a00897895b4e","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"bde90aaa0f1f7a7eb965ff308718d29b55a80b1ca84dfba16c169eabe2b0d5de","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"4a3c39f044c425c153d4900db30f839d7866c8e0f4f4d38d9205e67fb540988e","other":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","other":"e06f58b144faa650f96465825d253b63d7e061e3a3c4228ad5e1b665afbccc37","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"5be6df23201fc5c00be650849c8bfe5581e44033ef19012836f97c98f3954471","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"127c89eae94b195df2eb5eb7b44f634adb73c114d2089cd904b56988c8674e11","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","other":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b8695bec6c8e1e6794bb943b83629cd2c910067e6e178f6f8e33c4f0fa2d74f4","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"08077c0ce8d4130c14464493e9164a8bae61b4646b1ec48899e75f2f6f9b8c66","other":"0639f010834f5bc497798f2d275bbc60bfbcd53c83e38986b7260310c6001420","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"aba793e635f71169105ad073225cc8db914de6b711fe9f22c5d94ac8cb85e2eb","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","other":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","other":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"ed12c78e700bf805669c48a5d62f1e56791263c4b2ce5bd34587ea9bc931a3e5","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"27b56302a89605a83563ba7b66d491ec25edfad0ea1010937fcadeab4d3ae582","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"cc5fa2d49210e240983b0853ff15003f0d366f05cb1f6486bae2862cca852cc5","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","other":"3e1959b29bbacb3ce7dccfa41c3e51b87f1afc700a3c6e4713c38cc0fe3790df","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"957ed6194e6ef56e9696be43a1a0258f2ba4f48f56d790e42bd0663c3fc6aaae","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"3b830c2ae5463ca2f2260176b77b8dda23048257aa780255c69cf1bbbc6fb64c","up":true},{"one":"2dd4ad83effc3ba73e72f5659583e5987241bda563563200b50c46cce00a1d9b","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"f177ee6767a78a57b725dbe67ec377f507f5777d345a28892b0fbfb800dc443a","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","other":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"ce01234661309127bb872d69d38dc5bf19bc4de2e0a0b5041cd362d073df4ff8","up":true},{"one":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","up":true},{"one":"01a63575c384f686e5739e1bd079e4a4c55421cd6d89b944e2c61dd174fa2bf6","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"37751f279493dc5ce5b5c3c55a6ec2e4119eedefe1069b283f6ff8c7bc9d1411","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"d9d30b9b212bd4811a44ebe304ba3935ead3abe3247f99893faf65664131c29d","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"bc29a0d9b60f3e2c34224cec187cf44eadc4628086d5594666ed025da71e7e7a","other":"ee2b0aff61a9846d13de3a72712ef0bf3ca42ad8da57e81759c242797258efec","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"3590afcd10fb8f58c39f72068661d9a772b77e0efd57bbd60306632fb048fa3a","up":true},{"one":"641a165f8be0eee36f53c12bae8e2a34a709adb8d1dcd667e88e4e90c9ee2401","other":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"03eb2e92ed0923f696269e7a03fec731d8c3f8df278023a9cb00867b533a3ca3","other":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","up":true},{"one":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","other":"13853407d278a45e15d4b148fc38ebb35c4f58ee552ee0e4401c6c98c45b8e3e","up":true},{"one":"459b9fb2b7f4e396de8cf8740a6804c8e5b96ca11ffa2b5106c14dfbbab65c95","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"51c285489ff14628268ae886945e1cd2da64c6a0a8cb184aada98567ab429b6e","other":"55fdad03303a746920773217c568a37d2004869ff34096fbe45197f71eba2b63","up":true},{"one":"45895aff674079f6be02e4cc74914d63125c3fe48bb69056c070c71319fea1fa","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"c9ef56afed2d40db396ad39d6f5f5f38f4058b6b0d1e02b71d6aa92dbeaf7df7","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"5a8ba4047c4456e825bd1b34c961f5c7f37bf7c27bc48bee71b8430c7d135486","other":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"b4e29de4bd5751f31195ead8aa1548d305a53fb4f99be9931850e6273de8f359","other":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"21dcfb893a54cb56d21355fc564583057fc51b32503a8627e7575660725a7627","other":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","up":true},{"one":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"2354d3af5c6dca05d7dc212b100112f37ab29fb8b3f4319887230a4d420f5d9d","other":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"aedc9b478204effdcbad1a892333f15c061fbd1423b370f8a50f929b2a2f6952","other":"a1929f704664ca85d829ac3bab62e688647a7cfdcbc9f03c61b0124cf9093505","up":true},{"one":"5cc1c28eafd9758e807a28159a1a7a6ea313fa7e878fde5d47fcc8f5a5c25172","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"772a79302528fdce6a216c98c95e281333292c81dfe490aeaa4a78bfeb1980c8","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"5008ef55ad8088f70643b0f93bcb479531bcb0afe8e01b215dbf8597ec866369","up":true},{"one":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","other":"b2453c6e755a30efb91194fa607b3352d75b6905c448b09af4aeadf3a445b633","up":true},{"one":"eceb7dc532596e8b68074113db9605e3d15cb15e2e80f75f1a66d95a1221c7dc","other":"ed2ec6681bf325887768703779ccf3a6278731118cd3ec890490a3de50f689ac","up":true},{"one":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","up":true},{"one":"b9d906e406b0fc6078c22bbc173043df1f7581061b4f6ccd769bc568d94b4339","other":"a9fa28117a4b6906b5ce3931573e0a19eec3cb4fcd9141be2d258a2be06f3b61","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"8d3e0d9c6932d3422024394998e943309b679d667394d0eb622f0e208e7fcf0a","other":"8012a7af71d76d882202cf9372523478ccebea23443006c7f29c2a83106cd1b3","up":true},{"one":"62f007c92a8af466e90ed0b1e5e71a955ad273ec793948ddfc03977f131ed2d1","other":"6379b4d611cdd6e360480c14b3f6784360f28f702b5a6f375eda4ef3bde7ef33","up":true},{"one":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","other":"22bbb3236a5e0a1947a1c4735aaacf9122173789a02a06e7653103bdcae2f823","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"d125317b492df46a7dd496d30c6d07839ed6bfa196abde4886ce7bc8f9b5c01f","up":true},{"one":"c52a68d8388a21013e4eecef9ea866db1f5eb16bbe0ecc82b8bfafd33e4e014f","other":"d18a1edd26661069fb401fee8aa85a9614a3188e2e0666bfe9307f91d29aad49","up":true},{"one":"bddbdff3cbd22fcedddc07de27125819aac72be72c3126ba898621c496cb95a2","other":"bd9607d5f57f7b6f74f4ad981be368988ef48b5f31e3fd96cab3bb790d568150","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"4746379212b91ee1c13c1336e8f3a73a84408b7636c222c11bd27ce7d724e6c6","up":true},{"one":"77eedcac0c847b1d693ddff07c5868afb1c2008b2dcb48a0299143ab14611969","other":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","up":true},{"one":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","other":"72a76f668d9b923914860eb4f8577bc98c153f6dd222cd36a0bbdef2bab7f068","up":true},{"one":"17406dea5046f00e27eaf74e166a945c9485139d6edcdfcd84f5b03f50eedd0a","other":"1929b01c0f85af7452a0f358b54f6b36640a196b366909172af594a1648fe64c","up":true},{"one":"184e9e00ab4fe1669d4d99fb33d418d33eff927da38cc997f69679443c24b20b","other":"034de66774eda26b93e342c9b94b9deaeb6297650c819b144a5832bebfe6b02f","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"8330e2b8ae2f184bb8dc5e153fafa4dafe86f84ec692d3ee91413cc07b1cd9e2","up":true},{"one":"c2f9b4abed9c6a839fe4c03a80bd396fd187a8784ba47a83687d3a54b7e2eddf","other":"cabfdfb789cc20962eaba1dbe68d6dc0466e699d22dc5b29f27a5cd555398795","up":true},{"one":"dd92b3d42414fd5eff5c1e4ca55c63cd7036634049995b72a20cdf7ca1321978","other":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","up":true},{"one":"6450bb5e880411abcb60258d8560949f6f70d92ba7bfa9a4d7845463c48dab30","other":"64e642de2667a7563c774050d368858d99aff433efbd1cb68361e3e244629b03","up":true},{"one":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"5c623fa0103108d0b1e24e6d01a6624ce3b59a9e7c422c45dfc1211676785542","other":"58a90b58858417a4e972626421ed8e78b1b3e5ac69fcedd22c58a8ab4c6147df","up":true},{"one":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"68a63ebc4833dedfdb6d534438ffcccd042f60434bee0e39f4cb3726e7413e7a","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"2803f212eb4aa4f49224b16b2de88ba8652ad115321ee1e60cdbd926ecdad38a","up":true},{"one":"216e0370111e2e03927b803ae788f9947de8e241d41dbf6a70983cf0ecd68af1","other":"2d531c50183f0115269b3feaecf45927a3ac44e1be2a263c7e5d2274d8379b1c","up":true},{"one":"4c211c117e555c2ac831d5688615b6b4c5e31f1d7c7906b34f0cbcdbc45482b4","other":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","up":true},{"one":"69753865aacaaf72d9bf6d265c885d3f705804ff4b2675f7aa860641dacab2a0","other":"6daaf515999c9a3491c963f76be82ed6005616bf7ba98247b01d6a89a9af1d71","up":true},{"one":"f005a4d3453d52434f2b5be4006e653b50b52ad31926d654722fc3df00f1689c","other":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","up":true},{"one":"f33c07a818863a358358989ec71504abad3ca0a7c81b54aad59075a766fad501","other":"f3d50811ef10661d3ef9978077cd7181387298f306833ab6e27f25cbb77435cd","up":true},{"one":"27db66d13ee8168aca89786febd6971dd1d6c554bca8501052065cb47631560d","other":"2471776037d55a05df2b15bcefe52cb1f4c942e9e15113abc2a0c1fcbaa5d626","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"b60e77c40ddc9dc78a4ad346add37e60f10f2999de836615db53524487d1ede9","up":true},{"one":"7bcb0d7b9f84aed413cf9b2a7851ba6d1138d85382aa20e6c939a43c8e59c034","other":"0e344c6e27c23bd36bdd3ddcefa4e577fdc9461e52c7ce20135733a08b987b82","up":true},{"one":"f4a0f76b30bcf5987cfa3f4f4b0aa3445f39d60a1f51519fa660c27b5d833dde","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"bc71f3e409edb989e26607448491530c5451053b582ea64d882525451ac940bb","other":"be0fb2b440b91e719c20f51b673eb9f2f66c7af77b0b0ade312998cdffcc5045","up":true},{"one":"7a68fa44bbec187272e2d5dfbd6ed8af31a1a365aa72aa50db02350ebe98c859","other":"72a53f0fb1b51855cb4054a39cbd1309a76a862d36e18af9ba0456a60325c06e","up":true},{"one":"36d5952685c95e42bef14f77b63705897ca71d24d21e4e9efc772d9cabd21122","other":"3871492c8c62cd74cbe65a993669e4978cc641879a5223dd6b9e687f050a1c40","up":true},{"one":"deec6a8beb4e5e441dd42311354194c3bef9448e8859b4ccd401645b69217d12","other":"d23c97bebcde26f5e351c4b975c76aaf604fd206f9b9063ecbda538e7a52f514","up":true},{"one":"bd486e1e15df4c7539b1ad5b54f7566dd4836a430e9f7d3503881fa79e258d9b","other":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","up":true},{"one":"82847a4af4f50622650d035f69151b202bccd5fc92302a617602c974603ed997","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"7bee7967ff7b07243bed55b6d060d5ec2a1f28b530ed65cd055dc5b468a0f878","other":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","up":true},{"one":"73d0d1d4a2b7250f51e57c13cc48bc6b20682320ce12ee8e5765afeef7d9de42","other":"75e282c0f3d355a40573e6578c5aac98e7262970a9239f4dcefd26d6f008b553","up":true},{"one":"47753fdca855ea79abf667b50aa9c90a132d44bdd1572c3e3c411c8ee7e5b5f4","other":"4d750666dc0e9e2c244c43492801c1d7ec6208954a0cb5f8bb793b912440753a","up":true},{"one":"b3555baa764c4562935b93533ee6c5a6df631e846c3ab512fdb1d6b901a68c60","other":"b5fc43e8c0df3279d6a12cd8b03012cb8d2205208324018c7ae725745a99a2f3","up":true},{"one":"f611d8039385ad56260ab391763e3627aadd2756565fedc3ec95f76124da0efc","other":"fa9a809f016097d949fa1463a1c8f08871c7d38e60b7df6d3e28ab04ccd3a143","up":true},{"one":"947205fd85a17330a6d5c51a66548c5f69779c76ab12408f8fc6d33d7c6b8e9d","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"8b35236da99930bf8f5ef6c7555bb18b80ce2e34361bbbfd6baf55a6483e54ff","other":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","up":true},{"one":"836e65dfe6f01e1d2934655c1846cb86fed6e41ea951a109d7a20bb14cb4c10a","other":"8fb8208b7167dd06cc08778b507ccd856751d3df6dfbaeac18b9f527b6628523","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_16.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_16.json index e818da05..e209f568 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_16.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_16.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","private_key":"3ff3a0c7dc8b63cac9255233d84cccad53d61f8c9e47539329c07e4f248fc6dd","name":"node_279f0a191892115b8db4e2689cc5e1bc19019e8f5228f4f093f35c48fa2f606fd00a2ec5cf0fa4657ad3606e14643c3be8d49350ad2673f2ad12e17c0174b0d8","services":["streamer"],"enable_msg_events":true,"port":62851},"up":true}},{"node":{"config":{"id":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","private_key":"1ab5fd3f1885661af1829b42683ca1379ca90b1b2c5a0132027346c74001a154","name":"node_2c3d17a3b019d9d32922f06aef03ac03f67777e382f0b86c6e4dac07e590f2dbf4cbd1cc7ed136b52bba897e7163dee926caa627111db6d948581ad1b2edbc3f","services":["streamer"],"enable_msg_events":true,"port":62852},"up":true}},{"node":{"config":{"id":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","private_key":"a90fea5197ac84a162db7a06ec739e075ee334026e792d83a3269526888c8b5d","name":"node_6e327c2d9d3ffdae707ed067d15b83ad0ea81b96bb2a07331436f01c1e194ed90f630ef0eb6511f4849ede30c403e3c4ff3c2cb8021317de97f3ed5b1d990f49","services":["streamer"],"enable_msg_events":true,"port":62853},"up":true}},{"node":{"config":{"id":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","private_key":"76b6f09c28f5568e7724e9850116bdbd6356152fefedc4b0a9747361d712964b","name":"node_9aa1df8ddddd035e81ffc950f063714c3b6be24013108f8b99c32c25fc3a8582904f68c73fe63ebfb96143a12ab398f36c4070a3055c039491ca2f20be6774c2","services":["streamer"],"enable_msg_events":true,"port":62854},"up":true}},{"node":{"config":{"id":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","private_key":"f7e7d60abb7d43d973131804e684ec99e77e81bf38165dda29f3ae026eb169f1","name":"node_a1226991909b92dd4f22150b798e2b6312ffc62bad7a47d250e811c7e60cf5ceb6a87998f295e0bd392c0f5c15213115000781e498dd7eae79b67c7e7e19cf81","services":["streamer"],"enable_msg_events":true,"port":62855},"up":true}},{"node":{"config":{"id":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","private_key":"f88cd88c2c219d13b699ba7c7cf9adf16fc10be5d8e1f35b2ea260e7987ab76e","name":"node_1dcbfc79418f9a665e3154e07663b296ce086e54c23458b7113a011dca62e635245cab144d392716e5e90b60336b60927270b72bb4a1c5c85fbf959060fb3ee4","services":["streamer"],"enable_msg_events":true,"port":62856},"up":true}},{"node":{"config":{"id":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","private_key":"8fa1673a72b2ab000a4a7c8ad4540484d5286b69c93a5c608ef0977f783b7c4c","name":"node_571afb6ce94d28cb7d5cd49b3af35d2b1e44c917a9d3d207ab6c7ae960eb625377334e62317f6c69b3004e2eef92682649df828f4a645a75309ee7014ee4a940","services":["streamer"],"enable_msg_events":true,"port":62857},"up":true}},{"node":{"config":{"id":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","private_key":"daa9c74fbb0b897acdf20f1b955a608b086ce5b45dc8e2b76a44f277d25e3377","name":"node_f1e669bb6e5b89c04e07e3dcdc445d498ac54c8ab2e9a62e622a492b6f9781bfa27f75ef7448d06caa28d9afa40c1c089066358cbcca40018bc0f903eab9508e","services":["streamer"],"enable_msg_events":true,"port":62858},"up":true}},{"node":{"config":{"id":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","private_key":"eb94b600be5949e3ca545e81b4d0a5fff3ae9f51f63c722d10f5098f9e1a883a","name":"node_526d25e0aa47e64d8f681255348a3d3c94fc68bedcb7111532f4ed50d47ef064b1e97e3a6bcd13ac8eaf44ce676b22d2b343a94dfa38b48cf964bfc3f338d4bd","services":["streamer"],"enable_msg_events":true,"port":62859},"up":true}},{"node":{"config":{"id":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","private_key":"4e5d074bc46efbd0d18310e6a74e72e98b92080329d9c4e2b5ae99eb2fcfaf89","name":"node_fa81c440829adcbb3eba9196dc8255e319a976e53db0aceedcda25c2605f21b8778bf8c89e08744f7455c909568855f2a5be7bc88646796d21598ddda810390a","services":["streamer"],"enable_msg_events":true,"port":62860},"up":true}},{"node":{"config":{"id":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","private_key":"73c752d26f3438acdc54e9eaae6b1194d3706c65932939a593f1c8c5d451daf6","name":"node_5702eeccd7cb8c18dd25e5700919a544fb5e15fd53c5d4b56226021a9031a2206a694eb3b7334e4bd24fc510f7c1ea4f7a98e17e3394b4bd8d356a4d048b47dc","services":["streamer"],"enable_msg_events":true,"port":62861},"up":true}},{"node":{"config":{"id":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","private_key":"2e6321d9dda81fc0f863f09868b280dea3300105cf9d224294aa138caf10b4a6","name":"node_6311f5a830849b47094d84129fd987fcd3d511d000bf0a8b888c9a457545950fdae6ae10a2a85b47721a1d1ece8c1c62d866a26577380048d30f205c4e7cd7e8","services":["streamer"],"enable_msg_events":true,"port":62862},"up":true}},{"node":{"config":{"id":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","private_key":"200b7caaf8a33b8ea47947eb842fb8d8aac90951c70bb2f555f902380eb7f1ee","name":"node_dbef367277df652c8d3380efcf5f9d445d77fa6e7957b50b2467f90b7190e70d4eb4febbbffa6b3fc2b04bbf74dc7191e2b98923c3a62ecb80ba5336195994c7","services":["streamer"],"enable_msg_events":true,"port":62863},"up":true}},{"node":{"config":{"id":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","private_key":"b58a24805bb0c417e5666f2bf3f3342b8359d3c0d30a631c0104fcdfb6d0809b","name":"node_a4cdf723b3d7ead36bcb1bba582c8758271d5f08651694e1def0ae2ceca079d4fca81730a84a14749a81bc3ea41a66f1320788310823de5d1ceecd608ed5b88e","services":["streamer"],"enable_msg_events":true,"port":62864},"up":true}},{"node":{"config":{"id":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","private_key":"422d3b2c1b37b851ad524c8f26700fb5eec0d9a2fff1cb157ae931baa52d9521","name":"node_67cc8be0fd092c82e53efc53c418db257eff1135ad0058fd10e3eb77b205cb3e6fa87dfed4ec008c371f77546d4c117d8c34734bfe594da4c96fc08e0d2ede32","services":["streamer"],"enable_msg_events":true,"port":62865},"up":true}},{"node":{"config":{"id":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","private_key":"7871010c8b88b9594c71b9f43aecfefdca39da348e31f47ef2645c20c100d072","name":"node_4da7d1c9577afb52a5fe1de9f99824ceff314828c581caed8a3a33168df699d7b3befb4e888419264a9eeb3c9e5e9dac468e01edd71eb6f0ef41d15f7651042d","services":["streamer"],"enable_msg_events":true,"port":62866},"up":true}}],"conns":[{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","up":true},{"one":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","other":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","name":"node_427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","enode":"enode://7f2eecc4ffd81993f1f7f961ca00f52eacd77fb52f215cea32246a5742deb627c6b2be0a2112d7114b5d26a898de7c6dcfe18595458e0f50181497fe5631ba8a@127.0.0.1:0","enr":"0xf88fb8408e4b56b8de4863c72f40c38f16925319181e8079bc13b5b14c5ac1626070b4670ff42821d18b044558b1a6e81c4e6afacbcd917915b9c26b325e1775ec15fea00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027f2eecc4ffd81993f1f7f961ca00f52eacd77fb52f215cea32246a5742deb627","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Qn4CiLWkdNlwTfR78uuXuK+Xm9oZn4a3vViCSTOVgSc=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 427e02\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a010 c55a | 9 a010 (0) a61c (0) bdf0 (0) 95b4 (0)\n001 2 2653 0d52 | 2 0d52 (0) 2653 (0)\n002 1 6ff9 | 1 6ff9 (0)\n003 1 5942 | 1 5942 (0)\n============ DEPTH: 4 ==========================================\n004 2 4ebd 4c14 | 2 4ebd (0) 4c14 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","private_key":"2939b9a1fe2ce1f27e9d22f9f00cb77563507ca8b5a62bb93fe2a7e1dd5daf4b","name":"node_427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","services":["streamer"],"enable_msg_events":true,"port":39289},"up":true}},{"node":{"info":{"id":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","name":"node_c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","enode":"enode://0e17a602ec55b9499390093d13ef045635eb8b755783f80b0bd57c784cc2a6d52901b4170ec9202ce13084de51eafb9ab6d225f9e83266f280649eecbe332b47@127.0.0.1:0","enr":"0xf88fb8408658caccb6f16b440efbf35061f2e13adc4b3b4469df310a00d8801f752ceed24190e9a75879b496bb999add5be68c8d03127351456f69a3e45a6810f3f1e2900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030e17a602ec55b9499390093d13ef045635eb8b755783f80b0bd57c784cc2a6d5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xVoXaxwYXlJuF9KsJVbll5a8HTprgU7s2wypUZyMUWM=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c55a17\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2653 427e | 7 0d52 (0) 2653 (0) 6ff9 (0) 5942 (0)\n001 2 bdf0 a010 | 4 a010 (0) a61c (0) bdf0 (0) 95b4 (0)\n002 1 edd7 | 1 edd7 (0)\n============ DEPTH: 3 ==========================================\n003 2 d6f7 dd12 | 2 dd12 (0) d6f7 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 c5bf | 1 c5bf (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","private_key":"0cb4fe0b34f942bcabc5485300829a5110c4ed6571e8064f63c88fcd1669485f","name":"node_c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","services":["streamer"],"enable_msg_events":true,"port":46727},"up":true}},{"node":{"info":{"id":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","name":"node_2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","enode":"enode://fd7a5476ddb69019642a906aa79f22a853228df3bc57104c329683b8dd0c70f2a329ef7ec24ef92baa6a39c8abac12cf16a916cc605aecc84e4ab1fc52bbd87b@127.0.0.1:0","enr":"0xf88fb840b9c3ae42b41ec15fee9985def0ab98f7ddf14501eb0963671e974ced1c9f4ad963ed4466ac5d767f55188b6ab91097e0848f8d7a65d532f5d31bd1d78f36c2570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fd7a5476ddb69019642a906aa79f22a853228df3bc57104c329683b8dd0c70f2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JlPD140cEf06noBDrlx3A3sB4F3dKj1PYoSETQmKI+U=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2653c3\npopulation: 11 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 95b4 edd7 dd12 c5bf | 9 bdf0 (0) a010 (0) a61c (0) 95b4 (0)\n============ DEPTH: 1 ==========================================\n001 5 427e 4c14 4ebd 5942 | 5 6ff9 (0) 5942 (0) 4ebd (0) 4c14 (0)\n002 1 0d52 | 1 0d52 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","private_key":"35e97c6f9bf750dbe7d8d2c5bb9c3021af68e2d9143010fabf1934073a446c5d","name":"node_2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","services":["streamer"],"enable_msg_events":true,"port":36223},"up":true}},{"node":{"info":{"id":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","name":"node_95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","enode":"enode://3903c8019e85c8d7fe4bca9363b929984a2dcda6c45c42bd8deb02e8128dc87b22db7eb84d96815d349e4cc6e7aeebca10fcf2303783e19b4601e36970874caf@127.0.0.1:0","enr":"0xf88fb8407a344f969c3c14d7152c36b0e5fff71c51a514bbb1725b08f74462b88f3e9d197e473c1d43512ee405d57c7a77b17f38e61e96315f31afa03ec6d07390a839c60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033903c8019e85c8d7fe4bca9363b929984a2dcda6c45c42bd8deb02e8128dc87b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lbSKnRlPQrjxnvjM3jN80iFSXgSEhDGm2EP/lopfTfU=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 95b48a\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 5942 2653 | 7 6ff9 (0) 4c14 (0) 4ebd (0) 427e (0)\n001 3 dd12 c5bf edd7 | 5 edd7 (0) dd12 (0) d6f7 (0) c5bf (0)\n============ DEPTH: 2 ==========================================\n002 3 bdf0 a010 a61c | 3 bdf0 (0) a010 (0) a61c (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","private_key":"d3b3aee83368bb48feefe0e7782a19a55e4d210864402337e2117313dcd5b189","name":"node_95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","services":["streamer"],"enable_msg_events":true,"port":38325},"up":true}},{"node":{"info":{"id":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","name":"node_594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","enode":"enode://6718e290bc219c921b7b7fa26a7c29176e3175c6eaf273a80bb13b4edc560ff829385aba50dd0171f098716ad83eece60222801b9a074f9c926980dd93813aa3@127.0.0.1:0","enr":"0xf88fb84035a56b10844271058e2d9ca9b3e3c67de90a8c8323d7e5f8531f02952e855a5c0aa53aeb41b6de4638cf94d7301476ccd46e9bdea86f61ef61d97d22957a23a50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036718e290bc219c921b7b7fa26a7c29176e3175c6eaf273a80bb13b4edc560ff8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WUIDyPoXC+zh6xKsVpsXMbhqYD0H9QIqfXsr8gX8YVE=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 594203\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 edd7 95b4 | 9 edd7 (0) dd12 (0) d6f7 (0) c5bf (0)\n001 2 2653 0d52 | 2 0d52 (0) 2653 (0)\n002 1 6ff9 | 1 6ff9 (0)\n============ DEPTH: 3 ==========================================\n003 3 427e 4c14 4ebd | 3 427e (0) 4c14 (0) 4ebd (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","private_key":"fefef9454f2f776b9e1f7baffba1b6008e32ec48486a4183819a5d611d5a4928","name":"node_594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","services":["streamer"],"enable_msg_events":true,"port":37077},"up":true}},{"node":{"info":{"id":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","name":"node_4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","enode":"enode://4d2df1c9d3ed42f561416caf0af60ff21b68e7a24e706595f10893a5cad5c13f5f4f0fe27897ed3eb1717b4e3444574b129900211652b85a56bd9c7bd13cc460@127.0.0.1:0","enr":"0xf88fb840633f9b9c1dce11bb4eb9f00b99b7f31aecc61374fc1ed19ceb3bd40f45a3ba4236f7623af2e69b74ca218e371d317023ae589c23ca11949cb431bfe36defd40f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024d2df1c9d3ed42f561416caf0af60ff21b68e7a24e706595f10893a5cad5c13f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Tr2hznl2ESnOhy9QvqmuLfOdR+TNeh2PG7mIyCuGZ6k=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4ebda1\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 edd7 a61c | 9 edd7 (0) d6f7 (0) dd12 (0) c5bf (0)\n001 2 2653 0d52 | 2 0d52 (0) 2653 (0)\n002 1 6ff9 | 1 6ff9 (0)\n003 1 5942 | 1 5942 (0)\n============ DEPTH: 4 ==========================================\n004 1 427e | 1 427e (0)\n005 0 | 0\n006 1 4c14 | 1 4c14 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","private_key":"1f13487aa3f685a730149f567e1e95ab7ea53d54717151390b1bf8d236ac93c1","name":"node_4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","services":["streamer"],"enable_msg_events":true,"port":45609},"up":true}},{"node":{"info":{"id":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","name":"node_a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","enode":"enode://16e487d4bc68f28f54477a9bf864b80c62a2802f4f902e69be114c51e8c756ee5e4cda3d522050beb554d731c791ca777cf2a0db1612513434577336ce2f6a16@127.0.0.1:0","enr":"0xf88fb8404beea9a3e5a8fddfbb54ee788fd2b1c2908f9d0c50c1807416315024e491dc9702a1a7a778d302e03937e2bde114fb8d8246f39b32e8e5785147f7eb15f988d30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10216e487d4bc68f28f54477a9bf864b80c62a2802f4f902e69be114c51e8c756ee","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"phwP5UGlYrCNkvq9ZDpIaU+/uvcE0ceCWVrQ6Td6BrY=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a61c0f\npopulation: 7 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0d52 4ebd | 7 0d52 (0) 2653 (0) 6ff9 (0) 5942 (0)\n001 2 d6f7 edd7 | 5 edd7 (0) d6f7 (0) dd12 (0) c5bf (0)\n002 1 95b4 | 1 95b4 (0)\n============ DEPTH: 3 ==========================================\n003 1 bdf0 | 1 bdf0 (0)\n004 0 | 0\n005 1 a010 | 1 a010 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","private_key":"aca753870ec0d4820df685f13895e1e883e0c533dd949d7957b54a7278e2fa2f","name":"node_a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","services":["streamer"],"enable_msg_events":true,"port":36847},"up":true}},{"node":{"info":{"id":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","name":"node_a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","enode":"enode://da90e12ec1d6737b50a34a3ee3e75fa3e164a4c510506bad503721813291f09bad6b8f3008810a6e738d31e6365ca2a56a278477d23fd18e86e258dce44ab378@127.0.0.1:0","enr":"0xf88fb8404256771ae0b0cd6d23b73a6df956fef179cccc697e78699e807513021fa9c80a4ddd2398cd82f160a433345b7ca8f651ef08d43e87416be27744f146f325e7c10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102da90e12ec1d6737b50a34a3ee3e75fa3e164a4c510506bad503721813291f09b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oBCdbEGjF+hX8ynzCJj3Mo3TgS0fxwCKaP445tgEt6I=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a0109d\npopulation: 11 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6ff9 4c14 427e 0d52 | 7 6ff9 (0) 5942 (0) 427e (0) 4c14 (0)\n001 4 dd12 d6f7 c5bf c55a | 5 c5bf (0) c55a (0) d6f7 (0) dd12 (0)\n002 1 95b4 | 1 95b4 (0)\n============ DEPTH: 3 ==========================================\n003 1 bdf0 | 1 bdf0 (0)\n004 0 | 0\n005 1 a61c | 1 a61c (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","private_key":"2def6be33926ceb95119b6eef9b225e963b37378a26743dd6dea6f52e6b188ed","name":"node_a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","services":["streamer"],"enable_msg_events":true,"port":46777},"up":true}},{"node":{"info":{"id":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","name":"node_0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","enode":"enode://3c12b2884039d0d47926d5fe5fe932ed2231c1df1e29c39ec02452bdfd172fee3db62b4568adc560ddbf71cce469b473e124fff10b3f083910526d18b33c42b2@127.0.0.1:0","enr":"0xf88fb84051550b2edf140f46ee64c9c9fad39caafba3103379cfc9b363025cdafb9002d0665ba3a2c0f0701f0e80299e78c9ab7930d8e19fb5251a0406408d5d5bf95cae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023c12b2884039d0d47926d5fe5fe932ed2231c1df1e29c39ec02452bdfd172fee","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DVKdFGR0NnXZH8QEnXD0KLMm84TojqFMU/8jouRaZb4=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0d529d\npopulation: 12 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d6f7 dd12 edd7 bdf0 | 9 c55a (0) c5bf (0) d6f7 (0) dd12 (0)\n============ DEPTH: 1 ==========================================\n001 5 6ff9 5942 4ebd 4c14 | 5 5942 (0) 427e (0) 4c14 (0) 4ebd (0)\n002 1 2653 | 1 2653 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","private_key":"be1de243c5450fb51af634ada17a96c06515fbca77202cdd848c126934749c1b","name":"node_0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","services":["streamer"],"enable_msg_events":true,"port":34387},"up":true}},{"node":{"info":{"id":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","name":"node_bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","enode":"enode://4410ea88db94cde9ffbf85ead5e867e226979f908d82cb1f3d8583ead0e2ca4a3ba5a2f016df89ec0f0d76c3dccddc0b68a9df33783ed942d3df6f138e8169d8@127.0.0.1:0","enr":"0xf88fb8406f933c472c99bd51a9e066d03732148e70013d2eadb5a57bf1ca3d7f0c2266140e8626ff05a46e283a22ff5e16c10fecd00ae7bcbd2e746440733bbeca6c78940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024410ea88db94cde9ffbf85ead5e867e226979f908d82cb1f3d8583ead0e2ca4a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vfASJpjJ2jE3QNLJhUrFwXfGPNzJXjq0Fe7W7r1mFLY=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bdf012\npopulation: 7 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6ff9 0d52 | 7 5942 (0) 427e (0) 4c14 (0) 4ebd (0)\n001 2 c5bf c55a | 5 c55a (0) c5bf (0) d6f7 (0) dd12 (0)\n002 1 95b4 | 1 95b4 (0)\n============ DEPTH: 3 ==========================================\n003 2 a61c a010 | 2 a61c (0) a010 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","private_key":"f89bc000169f6a15dd6881cb70ec8f841a60aceddbde85af267a2515c91e394b","name":"node_bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","services":["streamer"],"enable_msg_events":true,"port":40993},"up":true}},{"node":{"info":{"id":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","name":"node_6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","enode":"enode://6936d2429208f3e456ef654a7a0511e310ec4fb728a62d03861c0a4a8e9d22f5f0f3a90b8bf03d3654afb675e371e2bb5f7065f2662292078a5e3c73a0c9ee04@127.0.0.1:0","enr":"0xf88fb840f98c7122fa9802971ba1acc50caa9e447e49b0dbe4372fc40405128ca954f4dd07b794976a20880bfdd2a586adc2438ddd9e35fc93e6106371af5363ede39d2b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026936d2429208f3e456ef654a7a0511e310ec4fb728a62d03861c0a4a8e9d22f5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"b/mj9vH4AZ42a1nM4H43N7Hm5LorTtkBLN0raDkIsAQ=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6ff9a3\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a010 bdf0 c5bf | 9 95b4 (0) a010 (0) a61c (0) bdf0 (0)\n001 2 0d52 2653 | 2 2653 (0) 0d52 (0)\n============ DEPTH: 2 ==========================================\n002 4 5942 427e 4c14 4ebd | 4 5942 (0) 427e (0) 4c14 (0) 4ebd (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","private_key":"1dd45d1d581cf612c3b51e58a8a76daac07d6c3e6060e9ebed1d697999257945","name":"node_6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","services":["streamer"],"enable_msg_events":true,"port":33543},"up":true}},{"node":{"info":{"id":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","name":"node_c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","enode":"enode://939e9a819895e0193947e390c9d561c3b1bca8eb6e19eaaef503a49b811b4e436932430dec5d7e01184cc7c7f4680964ccd2d7d1f31e6284148cb65190aea8fc@127.0.0.1:0","enr":"0xf88fb840aa054cfdc1388722d83c8026d2d2c4a9a79187fbcfef0e7cd0454597a55ce9e3129ffec027b96b03efabc975a4461caa27973336fd65caeb105a861e825e72b20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102939e9a819895e0193947e390c9d561c3b1bca8eb6e19eaaef503a49b811b4e43","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xb+GfJ7g24MVBDlbREp79sX2xtjQtsdBKW/KsDIISR8=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c5bf86\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2653 6ff9 | 7 2653 (0) 0d52 (0) 5942 (0) 427e (0)\n001 3 95b4 bdf0 a010 | 4 95b4 (0) a010 (0) a61c (0) bdf0 (0)\n002 1 edd7 | 1 edd7 (0)\n============ DEPTH: 3 ==========================================\n003 2 dd12 d6f7 | 2 d6f7 (0) dd12 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 c55a | 1 c55a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","private_key":"f55426e1ac52ab19cd155aeec3bf75415a3c75bfe89987b9747b3bb5cfe2ab54","name":"node_c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","services":["streamer"],"enable_msg_events":true,"port":38361},"up":true}},{"node":{"info":{"id":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","name":"node_edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","enode":"enode://4db77ce0656ae19063ee88a21dab483fc39b82eab3ce8a5a60287a32acd7585f163ee6ec724f66bcf40f40fec9cdb9e4e4c28ec4b7342960eeb505ac8de2d14a@127.0.0.1:0","enr":"0xf88fb840a6875960f8077f6e6a7f474110885c3e4748b3cf61e6348bd9b42efb3def651d35ab2bf6b780587204f2ae2b56019cbbe01464e2b2e221a3bc50d27052b963bd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024db77ce0656ae19063ee88a21dab483fc39b82eab3ce8a5a60287a32acd7585f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7deyKhf+w4JNd9uIK1+06CsIvsqNWeDy3Ikk971vjO4=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: edd7b2\npopulation: 10 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4ebd 5942 2653 0d52 | 7 0d52 (0) 2653 (0) 6ff9 (0) 5942 (0)\n001 2 a61c 95b4 | 4 95b4 (0) a010 (0) a61c (0) bdf0 (0)\n============ DEPTH: 2 ==========================================\n002 4 d6f7 dd12 c55a c5bf | 4 d6f7 (0) dd12 (0) c55a (0) c5bf (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","private_key":"e9fb7f15ab0c529f7fbd15c7fead7762c5ff8563f928d0c77e5fac982a5c6cb3","name":"node_edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","services":["streamer"],"enable_msg_events":true,"port":41753},"up":true}},{"node":{"info":{"id":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","name":"node_dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","enode":"enode://57d7341b933399ef218e3b4e9155299740435d8f39d51bcd55eb0e0206cf3872b5d8edeabcb29fc52a10fb13b2332945895992ed536818ae3d5ca724da435216@127.0.0.1:0","enr":"0xf88fb840be4d387446799bfc72ee406a3f5bff45cefff30cb27b353e2b5d804cffcf842f47af74326db8059b3f239b4aed3f7aaf70e88870dacc93c7700ecde11e125b2d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10257d7341b933399ef218e3b4e9155299740435d8f39d51bcd55eb0e0206cf3872","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3RID4AYNsanC1ABSB4dWrf227EhVlOQRapl7nbyvkAI=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dd1203\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2653 0d52 | 7 0d52 (0) 2653 (0) 6ff9 (0) 5942 (0)\n001 2 a010 95b4 | 4 95b4 (0) a010 (0) a61c (0) bdf0 (0)\n002 1 edd7 | 1 edd7 (0)\n============ DEPTH: 3 ==========================================\n003 2 c5bf c55a | 2 c5bf (0) c55a (0)\n004 1 d6f7 | 1 d6f7 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","private_key":"1d61966a5bf6ace65cb3663c40fcf26e51904e8ac267f799ba3804f58bc2515b","name":"node_dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","services":["streamer"],"enable_msg_events":true,"port":36287},"up":true}},{"node":{"info":{"id":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","name":"node_d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","enode":"enode://ccca2d21c63669239abca558b432ffda2abd413d3b4564be1c878d3ef8658697d42ef55b3c5fd79afd363a5d60e776e162371e6f50f49b2d78005d54d1212ed7@127.0.0.1:0","enr":"0xf88fb840be7cf77f4591f92fcdb31616f1dd8a29cb45f576ab0ac5ca1336aa394c6c9aad15013911a39a06cf43a096dd158fe05af68f9b36e3e68ab1ffe4663d5519ce730183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ccca2d21c63669239abca558b432ffda2abd413d3b4564be1c878d3ef8658697","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1ver1O99kUTidqW6P8QIfsoRBt6tMz86IZyhjirElCI=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d6f7ab\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0d52 4c14 | 7 0d52 (0) 2653 (0) 6ff9 (0) 5942 (0)\n001 2 a61c a010 | 4 a010 (0) a61c (0) bdf0 (0) 95b4 (0)\n002 1 edd7 | 1 edd7 (0)\n============ DEPTH: 3 ==========================================\n003 2 c55a c5bf | 2 c5bf (0) c55a (0)\n004 1 dd12 | 1 dd12 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","private_key":"689c424f352a14e065158f6edd016775422abd2ca2e3b67121797457f8cb6b57","name":"node_d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","services":["streamer"],"enable_msg_events":true,"port":45859},"up":true}},{"node":{"info":{"id":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","name":"node_4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","enode":"enode://55b49fb5af1798f20da9536cf2b6b9be5f8660d6def0b5ab2031ed6ae8e4041f0a8787aa1e58f5b493fcb8839bf95058e4955790e5723c6c088ae104d10b42c5@127.0.0.1:0","enr":"0xf88fb840b116a8086d357c160f4515a7f567b528bd41cbf6da84bc00623ea30cd4d4cf052ada52dcb295f404c509d1319cd51139b0d12e9ad279da4a31483922e11a73730183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10355b49fb5af1798f20da9536cf2b6b9be5f8660d6def0b5ab2031ed6ae8e4041f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TBRKwvTuSoZTo2Bc7CAWA4TPRxof369pSnIXcKKSVDQ=","hive":"\n=========================================================================\nThu Feb 28 18:00:04 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4c144a\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a010 d6f7 | 9 a010 (0) a61c (0) bdf0 (0) 95b4 (0)\n001 2 2653 0d52 | 2 0d52 (0) 2653 (0)\n002 1 6ff9 | 1 6ff9 (0)\n003 1 5942 | 1 5942 (0)\n============ DEPTH: 4 ==========================================\n004 1 427e | 1 427e (0)\n005 0 | 0\n006 1 4ebd | 1 4ebd (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","private_key":"20caf36455148590aefee286656630f80eaf3452f0e12a90d0bec13e3319653b","name":"node_4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","services":["streamer"],"enable_msg_events":true,"port":43573},"up":true}}],"conns":[{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","up":true},{"one":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","other":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","other":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","up":true},{"one":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","other":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","up":true},{"one":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","other":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","up":true},{"one":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","other":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","other":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","up":true},{"one":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","other":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","other":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","up":true},{"one":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","other":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","up":true},{"one":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","other":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","up":true},{"one":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","other":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","up":true},{"one":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","up":true},{"one":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","other":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","other":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","up":true},{"one":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","other":"95b48a9d194f42b8f19ef8ccde337cd221525e04848431a6d843ff968a5f4df5","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","up":true},{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","up":true},{"one":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","other":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","up":true},{"one":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","other":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","up":true},{"one":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","other":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","up":true},{"one":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","up":true},{"one":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","other":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","up":true},{"one":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"594203c8fa170bece1eb12ac569b1731b86a603d07f5022a7d7b2bf205fc6151","up":true},{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","up":true},{"one":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","other":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","up":true},{"one":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","other":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","up":true},{"one":"c55a176b1c185e526e17d2ac2556e59796bc1d3a6b814eecdb0ca9519c8c5163","other":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","up":true},{"one":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","other":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","up":true},{"one":"d6f7abd4ef7d9144e276a5ba3fc4087eca1106dead333f3a219ca18e2ac49422","other":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","up":true},{"one":"bdf0122698c9da313740d2c9854ac5c177c63cdcc95e3ab415eed6eebd6614b6","other":"c5bf867c9ee0db831504395b444a7bf6c5f6c6d8d0b6c741296fcab03208491f","up":true},{"one":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","other":"6ff9a3f6f1f8019e366b59cce07e3737b1e6e4ba2b4ed9012cdd2b683908b004","up":true},{"one":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","other":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","up":true},{"one":"a61c0fe541a562b08d92fabd643a48694fbfbaf704d1c782595ad0e9377a06b6","other":"0d529d1464743675d91fc4049d70f428b326f384e88ea14c53ff23a2e45a65be","up":true},{"one":"427e0288b5a474d9704df47bf2eb97b8af979bda199f86b7bd58824933958127","other":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"2653c3d78d1c11fd3a9e8043ae5c77037b01e05ddd2a3d4f6284844d098a23e5","up":true},{"one":"edd7b22a17fec3824d77db882b5fb4e82b08beca8d59e0f2dc8924f7bd6f8cee","other":"4ebda1ce79761129ce872f50bea9ae2df39d47e4cd7a1d8f1bb988c82b8667a9","up":true},{"one":"dd1203e0060db1a9c2d40052078756adfdb6ec485594e4116a997b9dbcaf9002","other":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","up":true},{"one":"4c144ac2f4ee4a8653a3605cec20160384cf471a1fdfaf694a721770a2925434","other":"a0109d6c41a317e857f329f30898f7328dd3812d1fc7008a68fe38e6d804b7a2","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_256.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_256.json index df5f7f4e..5e400d92 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_256.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_256.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","private_key":"859f1f6b352bfdd6f8b7a7a80ef60a7fa41a514a091d5c19d0ea7ab44c24c614","name":"node_57fb1bb32bb2b1a87e44c6a7557e9c47c2032d107bcb0e34acd9ffd54d5d3df5701232db16f62f7549ba2721021898b03160b1dc5201e79606648c1dbc4a373b","services":["streamer"],"enable_msg_events":true,"port":63226},"up":true}},{"node":{"config":{"id":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","private_key":"681d7bb10f2022ae6f74a5afa7e0d42dfa6efd2e55abe22a395db640b6f5c70b","name":"node_7f357b8d81bc2e5c6fcb081f23a42b3e2439f050d45c45851994a268d1c71fcb1f39f8c3f75ce921d3fbf80fc0e73f0b9609d72001dc4a6b65b526d312a4f43a","services":["streamer"],"enable_msg_events":true,"port":63227},"up":true}},{"node":{"config":{"id":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","private_key":"fe0d4b827c015eddc1928a6f9691bb26ba2100a6232168890d11ebc7f7222891","name":"node_cb94a8270d0050378116b5815ff17dafbe20f5303839c4fd57b981d4687a4b145e4bccec7e9af9b9475005930148ffbfa97781a0762c8e9f352dc95565fc8732","services":["streamer"],"enable_msg_events":true,"port":63228},"up":true}},{"node":{"config":{"id":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","private_key":"0172e330c8b3ba8151689716c455034d43e9600eafceaffa6c9b162c36920109","name":"node_76cbf9fc0f3517fb615fa96104780218e85d064ee5a1d518f3b78f4dbebf144df38c427445fdd6c9b436489c00ff9497d747a8fd70f380f95601d59e52e021e8","services":["streamer"],"enable_msg_events":true,"port":63229},"up":true}},{"node":{"config":{"id":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","private_key":"2e9b4ad5021be5fdbcdd374c9569d467f370261662cb56e23b98ff5588c8d99d","name":"node_e023a51c5bd26e1754d6461345143e94baeac799947579ec7adeccd105de39f85afbceeb5037cfc0b820b9f4446433f034d9e7de7326d45df5a967a8099dbb10","services":["streamer"],"enable_msg_events":true,"port":63230},"up":true}},{"node":{"config":{"id":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","private_key":"059dc1a60c68b91d75f771391bae103fb3d7dc30c5dfdc9498980591bc09e0df","name":"node_68cc8b9a995eef6170abf88bd5fedca06ffcc8d75f247f6041c13e7dfd292727ebda1ff86b776e33b6634355c55e0f8c22fcdb5f9a6e2f22fe1af7854c3b4273","services":["streamer"],"enable_msg_events":true,"port":63231},"up":true}},{"node":{"config":{"id":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","private_key":"bf0aa2cb855d1702f8353aaf7cf03b846cbe1bdc6a0b66b18dfa8f03ab7dee43","name":"node_54b3c57a4adf4dbaf31b85ed1b8dccd6249faa16dd96dd230189f47f57970caeed36627cc8e1b0794707418d580f5bd6001c07be6a79216695f1253db24926bb","services":["streamer"],"enable_msg_events":true,"port":63232},"up":true}},{"node":{"config":{"id":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","private_key":"8b9685b4c43d0de26290fc8646737787fe8ff7e6c32c082060380b41fe2c5f3c","name":"node_df4c3505e09e1baa88470117b964e758c94f77a4546489ab5ab7f4aebfdce424729ace8867475715fb68f05c66c9674a5767549e266c4fadd1c703ddd735908f","services":["streamer"],"enable_msg_events":true,"port":63233},"up":true}},{"node":{"config":{"id":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","private_key":"a5bf3b5b166cc21128321759e5be62f691455e382d8ed35e48805cbb2d884a97","name":"node_24662a43944228e4ff74736bcf0a0a4f79c87ecfdb739225b2fc45110c11bfc38aaf2d09d98e5817477848e553f187ac5408bdb864518dfa7f5df542768828db","services":["streamer"],"enable_msg_events":true,"port":63234},"up":true}},{"node":{"config":{"id":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","private_key":"b64868a78b7e20e3914999f841765a445e99246e67a0d8706639a2e940c1dfef","name":"node_27d9048707a89f1a61e44fdae523c0128f2a7050308bd3cfefa6c3e03040a0e22f11ab41275f22b8706e6695ab93320e2af35179d772581db5f49f960750f2f7","services":["streamer"],"enable_msg_events":true,"port":63235},"up":true}},{"node":{"config":{"id":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","private_key":"f72fdd8aca59748c35831f451f405cbd0aa950ce62699f1f7c9c10d76cf1e588","name":"node_ea57884dd42aec5a76eab43483bf7c4ae2c19eebf365013731de64494d10a3b4cfe34c86c79437f9012bc8cf6bd761435eefadec17600f4b9e4bc234532d6282","services":["streamer"],"enable_msg_events":true,"port":63236},"up":true}},{"node":{"config":{"id":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","private_key":"9a8b5a154d6b376a8d8a1c5357272f164206a01554ae4fcdf479ffa3e80ec4a6","name":"node_3b570117addeec03c2694baf28e246f91907268fe665c6c90356120332794258ee57a60853c19e9fe25d042ca42a5be7fe0797d84199174de8132f1ef4a9349b","services":["streamer"],"enable_msg_events":true,"port":63237},"up":true}},{"node":{"config":{"id":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","private_key":"5007a8f6bdeaf7620240976e1d41aca23e841378ec3a157b199d5fea27b1e0c7","name":"node_0cacda5560faff9d20e29a0625d3cd340ec075f198a50ab8b79338cee0e0db84c7c7e71042fd8c8f73e507b570de5d26c39473136b575f0167625a1168309ec5","services":["streamer"],"enable_msg_events":true,"port":63238},"up":true}},{"node":{"config":{"id":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","private_key":"a7d2d7f12b632dd6c409c8e7cd5da6f2009d1ed9d27eff101c0e850934695ee6","name":"node_88d5c5fe61ee1e6fa5878e0eaa13bdabaa0ec3d38a5d25b95a467da7627424f25fb5d30535aa0a5ad01c16fe2598dbf570b78cc152a7f4ef66d46fc9ae43592f","services":["streamer"],"enable_msg_events":true,"port":63239},"up":true}},{"node":{"config":{"id":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","private_key":"9e7d9771bc8ee20b1bf0743ba1e8cf1501c54606fcf9e174930cf61de03ba696","name":"node_80d997b87856099d844187d3d1fa40846ded652a62c1611b35919c2543915b64ff62476636488556f678e436ea26fcc40db7c6b6bbcb78f590d61c1ff0e424b5","services":["streamer"],"enable_msg_events":true,"port":63240},"up":true}},{"node":{"config":{"id":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","private_key":"f28a26c4cb4589d2ffe6731d30ce96e197684de24e886f252b6cda9eb4bca962","name":"node_6bf9fb6a25521c16c2ebeb6203d046d7dd40f29cc2ddb067c0222ef56d7012d2ee5d037f71f6668ea56767610b2a54c144aed74b7f68d06993cbd52fa1dc7630","services":["streamer"],"enable_msg_events":true,"port":63241},"up":true}},{"node":{"config":{"id":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","private_key":"03c65c150995cc6ea4d0a925bbeb304f8b289d695855b69197bd9284c537e8e5","name":"node_23f9bdc82efbf57d3d40a1f2617d0311678fb4a3d6a50cb7e608c649bb618124a76c7ffd17387de963e1cd28d2bd5a61c98613f6e009a8a2a90d989827b35de0","services":["streamer"],"enable_msg_events":true,"port":63242},"up":true}},{"node":{"config":{"id":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","private_key":"0af9f76e6251f7612eb7fde7f20ebf9dc8334ae1139a6e2dd068a97a896860ba","name":"node_f6ca39b3ad803e99f4e4e9cf759fff6abdf06e6972bdbe524f6eb930c669d6f0e9b91f3de9df394b0d661b068273861391bdbac948ad911351c48cf02f874db6","services":["streamer"],"enable_msg_events":true,"port":63243},"up":true}},{"node":{"config":{"id":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","private_key":"1058a6e2e08d811ed1ab6b6eb927323ad28292591a70269330779d52491c6d64","name":"node_385168340139236a0e0f537fa693122db9fa02a377c96f31aae54718e92624fc0288164877e63616651565e055c53f7074ab2fdd18a837da6faf644941305bf0","services":["streamer"],"enable_msg_events":true,"port":63244},"up":true}},{"node":{"config":{"id":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","private_key":"85e1a2673b4ec4f876778b6fb175fae0e36e9e6456c8d8fa2a11bca2dcc8b376","name":"node_9194a3a4c8f3235203e48bdb10902d958d26c342805ea6365af9711213536509719d917c694f9a4fbdde6889a4c92299a5301f0275bda4dbcd2541b5bff5b271","services":["streamer"],"enable_msg_events":true,"port":63245},"up":true}},{"node":{"config":{"id":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","private_key":"54906c0600d9da9afc0e64bb94c7902ff60042840c9143900f2ae8fe9ba69c63","name":"node_c2705ee7238ef9305e4da196653cde707649435a1e8b5b797d164e5ca06184a77af5bd7fa938c995fdfcbce724fa7eca3d908ee34891ab62cc6dfd411c3fa1da","services":["streamer"],"enable_msg_events":true,"port":63246},"up":true}},{"node":{"config":{"id":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","private_key":"b798233dd61ca3bf4bcf5729b06de9bee5447b3c0c4f604eb12e856ff1363492","name":"node_bf4ff51cc3d9a9d8cefd7e346ce1384d06450228a6086fe12fb0c60fec54bb6478f090bb638fbdbf8f41f7bc6420cd8a5c8b1b8566229b6851167375ef412f46","services":["streamer"],"enable_msg_events":true,"port":63247},"up":true}},{"node":{"config":{"id":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","private_key":"529b3a0af71a5e49aeaa2a7ec622d5a1fb3a920fa64f8d200af8f96f0c2d5d21","name":"node_f33d1f3e460574706ac1c7fc9ebb4683b173496ce3e80017d1c3521bca03d5a41a9c7a6cde8347d2238917b7cc58cab000ce7ccf6bb408561015a2ecbe613408","services":["streamer"],"enable_msg_events":true,"port":63248},"up":true}},{"node":{"config":{"id":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","private_key":"d6dd6c5f414a03e6e909bb7447653cbdc2b5adf6bcb2a4643c2cc7572e574a11","name":"node_083e67bb19e30d14e4df6d2483367d6659d9b56744d53d9cf7fd15954c327e1bc88a5d0db8833634e1dad7209164451f8934b59f76b5990059261abfd650519a","services":["streamer"],"enable_msg_events":true,"port":63249},"up":true}},{"node":{"config":{"id":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","private_key":"ad02d38ce01c0291ad949b92338b10b0427a30de149df0a3c7457c2b2340a963","name":"node_0c14dd51a56130c51009e3ce47c96b2afef26b7e86cfca65d8a9bae1abef13b3a7a192b422d894c39e24ab00be412d166a3571cc259ff4462d4ad8925a153766","services":["streamer"],"enable_msg_events":true,"port":63250},"up":true}},{"node":{"config":{"id":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","private_key":"5f33ccc756728e5919332381312dc8eb9f6009e9a407654eb70b995c12338ee7","name":"node_855bdf057f4a6b095e2000ada199447b5b4f2f8d78d2ecbaa0ff1fbf761788870ee999266ad3b26efa02be1a46a4d92ac0debb85a2ceab3442394ee7d99e5355","services":["streamer"],"enable_msg_events":true,"port":63251},"up":true}},{"node":{"config":{"id":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","private_key":"7645086a0c4af854131d0ff4a95ef3a1d8ed9bb6620c934708a2b4f317c6f964","name":"node_b53078000796f1cdb04dfeac424d5e3e37e30f00bd5bebf9a9ea0525c62917612b3a8f508df6bea59e3c7e4cd1aa530841f9a8af54e44f5617a13dee2c6ff007","services":["streamer"],"enable_msg_events":true,"port":63252},"up":true}},{"node":{"config":{"id":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","private_key":"96bc72358e15d649f871e17f6fbb7ddec911aaeb3b5bbd55929512756cee6a67","name":"node_5526d86ba9df651091d88460a9bedb9cedb957d452a635e1db46b9fed78082022adec0047cd7485956a4ecbb0e18107595de0de3c35242527cd302bf74a19260","services":["streamer"],"enable_msg_events":true,"port":63253},"up":true}},{"node":{"config":{"id":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","private_key":"3348eec47933810a23d583715b1a18b2a8332e8cd45bdc57bcc5232c6b5c0164","name":"node_a7378ee34876af17c6cd94a69b6b741ec7891ff5375bc4241d48608d047455ed48e6baae80ee88d4710c69ae615cf195cee26c94b54de1bb935628ce1e3a723a","services":["streamer"],"enable_msg_events":true,"port":63254},"up":true}},{"node":{"config":{"id":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","private_key":"553bb09d30fcd504ead604d830aeb0e3d0a5edfa58c94ec3da1508184f7c059c","name":"node_3e488a7208ce0e097ce47fc6651a13e95cae137d1a054a09b04d2f59d45faa2594a8c3b395e77ad1a3c2edcd827dda73c0c97dbaa6d9519a79184a0aca01ac4b","services":["streamer"],"enable_msg_events":true,"port":63255},"up":true}},{"node":{"config":{"id":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","private_key":"60b600c6cca2712771a98d797a46fbeb7be68a054d94d8eaabb8ecac6d3520a2","name":"node_07f25fdeab2b44b2e92fc80fca7de9e4a8547d27a98a54593b3395c270a9ff3f2a5da62a2e8531ce86359f0cdc5b6513b773dfd64cce1b83e47065d9760a2c7e","services":["streamer"],"enable_msg_events":true,"port":63256},"up":true}},{"node":{"config":{"id":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","private_key":"4bb86dfcc439dc83032e6189165d986a8f315558aa7fe1b6bb2f91e521a837b8","name":"node_0f9f7e2dce4ca266c3ac0ec3a8854200b54487f5308e3db418461aeb5f67c81d332619b6441b468e480941e63100ed1b263e7adc20689dc3dcda578bfca538fa","services":["streamer"],"enable_msg_events":true,"port":63257},"up":true}},{"node":{"config":{"id":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","private_key":"ff9eae2bb1fe93a164f54d3ac907b4c4ec79fa41eece5a44aeb70c083ad80ce6","name":"node_a1560ce7c1f1d5972f027a8e9cff820611d84764aa067434a75b63887bc4268a259101486d34b7fe83dd735e799789986cd3e9b156c86ede598bd86af4454924","services":["streamer"],"enable_msg_events":true,"port":63258},"up":true}},{"node":{"config":{"id":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","private_key":"f23f43541bab9bd56083d663c140d382c5a9461060c285f1c1b1c6621d8e2e1b","name":"node_e06a789a7f6988e1ba5e8358b6cd4292555c7f9f7f0dda6fc01cc26d24e49a8c1ad694423ad74aec6d80f4b99e2bedc49b6a5f2670744cedee3a3e1848e6dd07","services":["streamer"],"enable_msg_events":true,"port":63259},"up":true}},{"node":{"config":{"id":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","private_key":"e3853d7bcb9111bc645eaaec38093b38a0b16e80774deb42bbf5431e78e9ae9a","name":"node_57b47f692f4d69a5d2c9c193680eb4ccb5a6c574662df0138504a549f3ea74f20c5b866ac4d9e76c4b49c83f5fd692ead928ea20dfcf643a11a1c1e841c0ec42","services":["streamer"],"enable_msg_events":true,"port":63260},"up":true}},{"node":{"config":{"id":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","private_key":"cf8c79a1a70472ac10e1dcd59e8a498cce13cc78f13a28a1b31ef8070e8201af","name":"node_2ddd49fae11d8bd2e7e75a481be267fa846f51cc1160bc326aeea51c542323ff444909de11e2731e835140bc0b1b32020e1e73fa652511a381222bf0aebc4081","services":["streamer"],"enable_msg_events":true,"port":63261},"up":true}},{"node":{"config":{"id":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","private_key":"872f89492c87094f84d4db636ac19e5c87ac57cce008931d2db6d7aca72dc552","name":"node_420b9c90584651c5a3fe3c16aa377444a321dca934f8a097d01a616554067feabebf2fdc8d2a25797f29a8fef30d5e2c82f8e85b20f509a880367b9b0ccdea47","services":["streamer"],"enable_msg_events":true,"port":63262},"up":true}},{"node":{"config":{"id":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","private_key":"9c7cd9b75a3b821c0ec74e08d8727fa6ce5aa184479038762b1ae4f3c07b3782","name":"node_5bf29c02f07faf7ae8e46389e1b98df4f5e88c9316b5151685e6ae7b4e622cf171ff09f996aaa8ad846643b3bfcbd1ad96cdc249afccce439bb5c55246b95801","services":["streamer"],"enable_msg_events":true,"port":63263},"up":true}},{"node":{"config":{"id":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","private_key":"ea03297fa8e550df89d0595b3026c5367bd7b0076c7a9fd5c6071f0944373202","name":"node_e3c8a97a2d95dd543f9e2b41d9dce6256e284296f866f4f92e9925f8c7519dea23fd6d1a11153b93c10d6a32295e7b9bcc16024e690e4a0dc84fd25ee0f31b2c","services":["streamer"],"enable_msg_events":true,"port":63264},"up":true}},{"node":{"config":{"id":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","private_key":"dc424f98922ec5d19a5a8d5ee2acaf077778ed0fd92db276f88bda3cc4fdb5a6","name":"node_7aaf7817b93aa6d2f50513791f9ad7629a901ed0dcb151189f44763f83423446b20ec79a48fa260cd9bc2907d5f0ad06b2c4c5e6d812f3d8876c8020ebe41019","services":["streamer"],"enable_msg_events":true,"port":63265},"up":true}},{"node":{"config":{"id":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","private_key":"baad13cad07e0edde7209f5e70451c82d07d1c4d4bd5ad6f85acefd48d14a253","name":"node_062e0ca43a1885c4a7ab2a5169790f9081e3e9a2dfa286b8cc592d5ccbf13d7a82b72d23361a19026d04fcf41b752ea320d98359d770aedfcee626e21c3494b3","services":["streamer"],"enable_msg_events":true,"port":63266},"up":true}},{"node":{"config":{"id":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","private_key":"613f528e83e5bfe55db16791b917891c139ea8ab7599058a204c7836f71feb95","name":"node_f9ffe87c52ff4c22bd9696af32e0a9d34bb81fb84d9d8bf5aafe2ef9696e7b3d6460bf2a93aecb066133f53416bde841a02d6967bd06e3d4a714f3b2c123a947","services":["streamer"],"enable_msg_events":true,"port":63267},"up":true}},{"node":{"config":{"id":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","private_key":"873d0f70715479bbed36c4b74c9391b723fce386d150bbbd613d33eaf08cf257","name":"node_bcf8e831821a5bca359fb824c7dc4d66906de82f3663a0a853d96880a8ca0bdddcceb1b66dd1f13f75ee20fde50fc9de545bc25767f228baee910e0dbfa8cc27","services":["streamer"],"enable_msg_events":true,"port":63268},"up":true}},{"node":{"config":{"id":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","private_key":"48e7cd643d45488597f25de324e8b7553c26e1cf8e8d44261d610ee9041c898d","name":"node_3d2df188704eeac09c8b291bf275a73888199a231c832c51dbc3d746968d4b51a7d5eae0c7c9b8c8e19f5e28d38c375e01abefa343f31dbe221deb837ab8a0df","services":["streamer"],"enable_msg_events":true,"port":63269},"up":true}},{"node":{"config":{"id":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","private_key":"f88a54bfc74bebed6bc8bf6d7b98aad4ea4f8b8aea6cb1514aecf398bee41960","name":"node_8f88c7ec044f758f29bd8d12a5170bd973aec8f6cddbf512b910c4b75a0fec09c5e198bcd65622037f897759db68da2328b4a7ca93585dc9cb62e46d2a6c0864","services":["streamer"],"enable_msg_events":true,"port":63270},"up":true}},{"node":{"config":{"id":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","private_key":"a5b02d5d5ff64f5330758019a5ba0583f2b74b423be4695b4ffd94231ffd58c8","name":"node_4314b0b04331973ed29a58843951f144ac3d09bd5d57b6cd9aaff9b73a7b2ec81e344a3e4ece462bd2081b837a06310e787ef3bb889dabad46fe7efd394c8342","services":["streamer"],"enable_msg_events":true,"port":63271},"up":true}},{"node":{"config":{"id":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","private_key":"9e96b56ea6abe86960b688d477b9c689309a7f304c5e4bd108459144e68448c4","name":"node_3612863ce0456c91785a829bf5c9d2b2fb97dda083a1847e5a4ebaa6fce1260faf4d1eb374c2225431a82774163835fb59c8cb0fa9fc0969eab5410c71109cc2","services":["streamer"],"enable_msg_events":true,"port":63272},"up":true}},{"node":{"config":{"id":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","private_key":"5bec215e5024e8ce65d46fbf9b69e1718c1173478f8654d2ef451b6217ac6db3","name":"node_2ac522ebfa49d37f86c6270ad4cdad0e766493f0e463b18c9906c70fbd2e5c6ff6b0d5879de6e3894418370636963a78b0c0cf087a8684c2ca30c9c736e49228","services":["streamer"],"enable_msg_events":true,"port":63273},"up":true}},{"node":{"config":{"id":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","private_key":"00dd6637412fc5209eeee1423b4eae49fbba97d8d5c37c9ae6819f7afc53569e","name":"node_62666b24d1026345349edb6a878cdc27d6fee8254e83f79a298ce2805260d97aa46423deae440f86ced5cd99b30e970c8e1ea1046752b17d8c80dc68d9a49b60","services":["streamer"],"enable_msg_events":true,"port":63274},"up":true}},{"node":{"config":{"id":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","private_key":"88ceb50dc965b4e3279c8e7729db14ea34238126f1ab694c621d5ab9183acb52","name":"node_9ce6b9decb69d66075993e903a0727ec109a04335634616097c0e60b08f94f764634fa00891b1070f6ea1ce896bc7d11d3aea92a00f281f902d960894cef296f","services":["streamer"],"enable_msg_events":true,"port":63275},"up":true}},{"node":{"config":{"id":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","private_key":"638176a3cb343c140131c887892f37f9ad69e9c87c0a256dbbf2fbf8dd2a6b08","name":"node_b870935867183bbfb84add16b9f56c02c834b7042fc24ce6bcb2a7f174e6d2239357a00be4272c1ef05c7f9baf5a9f16b53bc18328a9b7aca8540c2916805b57","services":["streamer"],"enable_msg_events":true,"port":63276},"up":true}},{"node":{"config":{"id":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","private_key":"4da9834c8665dcfed17ee5eb89c5bfa3c0d1cc4340088a4038f746dae4cc23e6","name":"node_c83985973a9564ade7d90aa54911ac57077600676a1d27292d98e058bf1315887bad84ccd708cb7f52a695a1405fb7d491d7ca2ae9caa3ff58a5ad78ce4dc9d9","services":["streamer"],"enable_msg_events":true,"port":63277},"up":true}},{"node":{"config":{"id":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","private_key":"05eb5751d81653e8ce409be43c9da42ff90f90c6e68981e69cd03a867d93b800","name":"node_acb4088c27ee2ee130ece3506596432afdb9e9757ec11ebdd35c5a6e87239545c48466913a646980104c8fd7a9a335e177f04efffe9dc952dfd7cd5c1bb9aac6","services":["streamer"],"enable_msg_events":true,"port":63278},"up":true}},{"node":{"config":{"id":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","private_key":"846035be661387d6163b5472ea225ecc9d3851349f480fb901d2e31bb8ffe858","name":"node_b4fd11306b1416a9bcf4719578976188e104b8c5028b9abd3214d257446b97b70a22e6c00934d80caddde15e8e4d16af03bb399583047983fba373d8313226b7","services":["streamer"],"enable_msg_events":true,"port":63279},"up":true}},{"node":{"config":{"id":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","private_key":"b34c69cee56a834b8a36ae964f1847d1825821a21d104396039175a8dce5ac73","name":"node_7b35c856916eb3fc1b1f451667e240b95aff8f4731cc0f6743740923081ff1ddf2eec81bdccf4691a7bcc053d23eacfc15809c384a73448f618317bf605bd1cd","services":["streamer"],"enable_msg_events":true,"port":63280},"up":true}},{"node":{"config":{"id":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","private_key":"3d1ea95ac16f7d903cb8630a8c06052560a974b0abd3410d9f8b2968e7cf653d","name":"node_2ab9513899c3c829b6284e56bf2b9862dd0156ec052b58615dba77d450dac642e534ec36ae5d3234262aff54e19f99856e908b9d8c1da660a7834a445610715b","services":["streamer"],"enable_msg_events":true,"port":63281},"up":true}},{"node":{"config":{"id":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","private_key":"70a577ae497edece947ef065da29014e45dcc1d942969597600a64b55e8bf718","name":"node_e087230634f556b818a416b66ba3f1d1dbe3e0dd0698bbb26fa86a2499acd169466f564dc18adf2f9be4d1ada0e86c11549754097601e10aff4f3a57ddffa24a","services":["streamer"],"enable_msg_events":true,"port":63282},"up":true}},{"node":{"config":{"id":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","private_key":"28ee397105a113c5c4e7d7cb1b3dd17b6db66c3cd8f3b621df0271e544fb446c","name":"node_66beee3968dbcf3addc6feaf070a4e3e82b5bb164fb72f40add89f732c12e8d0a31a7ee1f1e24a4674e4dfc9a4912b02c17ce3c224d257d78b7156544d6507dc","services":["streamer"],"enable_msg_events":true,"port":63283},"up":true}},{"node":{"config":{"id":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","private_key":"b6feae1f667895ada3116380a2cabb0c702b44b24d45415edd143d27dfe5643d","name":"node_a08e47137bf611dfbd20308a22bdd3ca00121386f121d6d712ade86e9a1601a4237766887cd91c8516e20b6e323d2ef49c1c7e177a0afb4c813f0f344daf779b","services":["streamer"],"enable_msg_events":true,"port":63284},"up":true}},{"node":{"config":{"id":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","private_key":"a643e845285aa039d6f84cb124b618bac45c970fe0b15fdbbbdef834300b4857","name":"node_990b1db3ab1390219e8866d39fa4441bb5bb89ad786b3e255771869fcd08906dcf63f34007481769c7462edbcc665acc0a552e3733360b8d8c310c9321a5550f","services":["streamer"],"enable_msg_events":true,"port":63285},"up":true}},{"node":{"config":{"id":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","private_key":"1b31bc34d4ea49b0c1df457ad06513d0f47c56ab106b0f0ac97c43ccdc64db31","name":"node_7865b82e44add2cea6ebcbaba9c152184331a2940fe73f6f9bb940bda8a59ab4cf4760894b9cadcaa54e36fbb712ad619346a49a85e32cdf2b53cda1ac1e0658","services":["streamer"],"enable_msg_events":true,"port":63286},"up":true}},{"node":{"config":{"id":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","private_key":"b380737ac46f320eb5884ca8a60e1693caba904545b68396e33fb92cd19aa18e","name":"node_292c78c8e41606e98428096bc6f4609a7aa48e5c4d17eecc64d65faae4a7270b0c15f0cd74274015688ea0a9aff34f215c29118222e362a29c8d637963973a55","services":["streamer"],"enable_msg_events":true,"port":63287},"up":true}},{"node":{"config":{"id":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","private_key":"d18c1536cd7d9771bc9b64595184285ed499519ef810b3f013fca2fc01018048","name":"node_ee36d1d5dd69fd30242d7da2e941b34ade5581c7164fcc43288ecfc52937a98f1b31ade5d1e4dbf611cbe1c7875b2840c89435081cde471c271d7bc60e9ef211","services":["streamer"],"enable_msg_events":true,"port":63288},"up":true}},{"node":{"config":{"id":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","private_key":"186743aa8dc07042c40bb95b2efe30149139f3c2ea4a4bd193d3be68e8f4485a","name":"node_bd1a7c63fca9e1fcc67d7fd62670beefe2bce483cf1dc1233ee85eb90db607917cd9a5d7170b10e80b925a20e2af2c54d286b01805ac34967410859f4f03da09","services":["streamer"],"enable_msg_events":true,"port":63289},"up":true}},{"node":{"config":{"id":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","private_key":"2e960819700f3330b00d2d58461403843026ffc7629b2514568c6b571fc99488","name":"node_9db1f94d74a00d1e5e2a391f1bcddf16b6d0670a2c6d91d946d38112c58634444b6fea8e8c05ab4b73bacdd62a0b575f6fb8729978edc216c7842b177b9f9cd9","services":["streamer"],"enable_msg_events":true,"port":63290},"up":true}},{"node":{"config":{"id":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","private_key":"50c27493a6d9ddee175040dafa1f40c6ad503b55590479001ec085212c5cc08b","name":"node_934a5fe1b91c1891ef4df7f67c027e0eb115d4c2ca4a1b76a135ebd4315c4fb835d6625223194e6a134407b38b0d3928fbc7bc924a3c6a538989a6cf200bf4bd","services":["streamer"],"enable_msg_events":true,"port":63291},"up":true}},{"node":{"config":{"id":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","private_key":"4c67752b215e2cfc06120964f06976fce2a1dba599c0f32c0f4393b9d77ef872","name":"node_485825745d97654cbb92a14e0cd1078691d3c28f4d82b1046284b676a42b44ca58eb43474e45e415d3bd3f3c383f9a1a3365821ed7ba6a9f2603b29d58031dc7","services":["streamer"],"enable_msg_events":true,"port":63292},"up":true}},{"node":{"config":{"id":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","private_key":"21acc46816414d3a1d76bca30d2c2e1e55d420e9ce704d0720696f7f7fa0bf33","name":"node_5bae82d4832092c17bd11474f7748015b8b69b896ab8f683a7c0024fc98740cecbb9e31c6275269f9000e5bfe51d7f45cd5dcd4433e0c87b5741685b40fe3983","services":["streamer"],"enable_msg_events":true,"port":63293},"up":true}},{"node":{"config":{"id":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","private_key":"4542e37f43858e396004d8d8801bae1905d2496a3ab44f75cc29bd2c2a472f94","name":"node_732393b99c490c76fa45e3e404ee095f2fa445fcc123af7ac8ab1d2fdd7cf2483f5b82bb818bd8a82b1a3b73e63bcc2c83d8f24d9aad9afe36503735e7967be7","services":["streamer"],"enable_msg_events":true,"port":63294},"up":true}},{"node":{"config":{"id":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","private_key":"a8e588af7acfd6024b3d71be7be630345ca80708a69214fd31e3b4485f039c90","name":"node_4de378164d77a28c90cf162dd1b465e0282ee17aa7d3bb3179252466f72da33a36c9f298f7c9498e38dba4018e7ce3e5fe631c83842cd9059e23a7fece366d87","services":["streamer"],"enable_msg_events":true,"port":63295},"up":true}},{"node":{"config":{"id":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","private_key":"e3d1a9d4621d7f77d9c2fa224f0d8c8211c2bf461554a1d50afa8f34a82a4754","name":"node_155e4879643a472420012e040a87dbff776fc1976814c0c6cd0d5e157f0d0baac04aa7f2535786c09acc2700547383d2119b64a6f62115f1aff1708738844d8c","services":["streamer"],"enable_msg_events":true,"port":63296},"up":true}},{"node":{"config":{"id":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","private_key":"6522d077629e8c313d832a7a87e5dce9e989618cd1eff1b1eb3c8b63756159e5","name":"node_81288bb0584b7ffc1546043e052e1df10fd5371b35dedd0bb42ec5b30ce69b741b2f7857af5984d4754b39d7253575fde9298504999b78380ef602d391c4bb1d","services":["streamer"],"enable_msg_events":true,"port":63297},"up":true}},{"node":{"config":{"id":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","private_key":"f90016392c8768d222055de5cd1c3a512d3c46b7c7be34a93cbd016aea9ce753","name":"node_109556abac422a912ecffec0d8796f8f16e92e8f95cecf72dc89e97a8bf1fd37aad3c66aa3cf134acade6d065c31821f977171d5c5463305b57ce3eee99a7ab4","services":["streamer"],"enable_msg_events":true,"port":63298},"up":true}},{"node":{"config":{"id":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","private_key":"49f3b1f88009b94bc7beef8d891816672e9075f3015f5954a9ae9d13c8c07290","name":"node_759f46661056bcbb30c7706c9fb87e22a30feb523bd53ae5d18db043efa45b49a2b8982abebdd598fe0912a05896390ec2eabe5e160cbafc0771990708ad8c28","services":["streamer"],"enable_msg_events":true,"port":63299},"up":true}},{"node":{"config":{"id":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","private_key":"65f5fa03f2989a02e37bb664102504038f14adb483b2116b07355296346912f7","name":"node_baa5924e1547c177011285d292aa161a15e5ff282da2cd0afb83c9caffb07bdbb3662c227fa7b26e6dc8be9b8863e647eb5f8ce81640532f8f5c9a7f36557e63","services":["streamer"],"enable_msg_events":true,"port":63300},"up":true}},{"node":{"config":{"id":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","private_key":"87514536801d0d46fcca5c10334c9a6a34ad982fbbcf65b2f881e99a0c8ab27e","name":"node_deb7af800cd20a647335f0feff5bfb3e182f99f4c2d1ade10da36ecfdbac3b5fba4e8f0a4595443fe395b44af3a95617669850944655def85d57cc81c5682a3b","services":["streamer"],"enable_msg_events":true,"port":63301},"up":true}},{"node":{"config":{"id":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","private_key":"c69b71039aa3f28c158e5e639d35069ee66cc88565ae886e75651d88fae8aacf","name":"node_17917fa4da06068b587c17899569dcc768b9cd2c27117a4ed67aab26a7e70cf8d32b881db258061ffd89a332a3b29bfd963d8e171a06c3e208ba0de1c42a2b39","services":["streamer"],"enable_msg_events":true,"port":63302},"up":true}},{"node":{"config":{"id":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","private_key":"76998bb1133735934b6d8cbebf029318feaf9b103165cd460a4a9ae04ad26c5d","name":"node_032b9bf2f59f15571821611d3ee541aa748c86d47fbe5f049fd0069be53e5d7c41991d82957e9c727654c3aa73ec94997c03d8a6c1d2007c9bb1a703f6215158","services":["streamer"],"enable_msg_events":true,"port":63303},"up":true}},{"node":{"config":{"id":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","private_key":"424a19356346001136b4df8a6119a510d526b508d0378eb5b67ffbc471757c08","name":"node_be026dfb24847cac2d00f483104edad06ca8ecb9e1229c479ef5650c7b427cd5dc34a1cf06172c17c9d0406ce17009712e82446394743d4cd9bbc41c537ebc14","services":["streamer"],"enable_msg_events":true,"port":63304},"up":true}},{"node":{"config":{"id":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","private_key":"06aade0419624ec355a3e8e47144b1efd1853293246628e0d3ce856bf3bb64be","name":"node_389b5c1a805f87427e6d647ec5488342a3f7d700615943d5ad98ca5c111f33c7ee007970b4d3e475892095c0d5a79b7ed52d12598398818159000d4b9b719126","services":["streamer"],"enable_msg_events":true,"port":63305},"up":true}},{"node":{"config":{"id":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","private_key":"903c726d393f3a34e861aee6a1b42ea078da78c23d1dcdbd0fd8c30e80b65bf1","name":"node_c57ea182bdb42ba9b0870b5c870e467f52693e5c0df752fb6eb0dfbacce7763f73caee10db40f4fd90f19f504ee586eaf9da41f5ee93ee515d885fec99374116","services":["streamer"],"enable_msg_events":true,"port":63306},"up":true}},{"node":{"config":{"id":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","private_key":"29f2f00196b61b834638899c2e440c57b99668fbd93d7eed220c4556a76cf89e","name":"node_2ac93c31937ca205d61cc5c2a1b9037871cac55e9b306b999b28e19566b3316f6539455e014840ea50c2db8a7c97d78804d3a2dcd7cd9c1f32ace0d36e5dd339","services":["streamer"],"enable_msg_events":true,"port":63307},"up":true}},{"node":{"config":{"id":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","private_key":"682a2f9130cdf75915282000edc627563ea4e9de499ddc8d55efad472a94091b","name":"node_ca1aff0d847c6fdacb623ad9078a0885b3208614fea20d5ff11779779b486bf5e9c794aacf848d3c2d58cfcc1eda8356df82f5fbdd0a5236beffe8e6042848c4","services":["streamer"],"enable_msg_events":true,"port":63308},"up":true}},{"node":{"config":{"id":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","private_key":"d1b4b3adc1b17a79626152a1c7362bddd7c47886990759955595a1de27f7b70b","name":"node_2e409baefbd821485a151993356730e5989810d581e68190fbaa142799c9335bcf98310ad188fed10ae6eb6e2e789730393e509962ec5c0fef0342d72ed088d9","services":["streamer"],"enable_msg_events":true,"port":63309},"up":true}},{"node":{"config":{"id":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","private_key":"34a5057b2a2c507010da7a091827d28ddba4f59c9b5f15f7cb7bf0578e4141c3","name":"node_7b5c0e81c7f4e3ae29d745f6028cfa10b29a16a9c261b65fb8dd05d6eccc634612ad5d3029c8e9f39863a2cdb2682c25f090139bf5c4950e25647e39dcb40e63","services":["streamer"],"enable_msg_events":true,"port":63310},"up":true}},{"node":{"config":{"id":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","private_key":"7b608c298477c4687c50adba466567e19c08492da2684417c129d730caef7594","name":"node_663535b22018a4ef0b151572ef286fa66c22c6e9b2913a69c4a735d4b0149bdf6c84bd83d710f8aa2627e8993b7f020750fbc6f56a3365ce4c840e2b3de1a6c1","services":["streamer"],"enable_msg_events":true,"port":63311},"up":true}},{"node":{"config":{"id":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","private_key":"d9d17f1baee1ccba3fea764f5f5797475ebb9f206d735105ba8fa2c32fe02f0d","name":"node_7b1e20217f594f87350542df31ff5ae8a635679bac7962d49c97e02190c644b673d03e7eba2626b45ca7ebf98d8a972dadbba02c18a8d2cbfc3e7a4cced5b4b7","services":["streamer"],"enable_msg_events":true,"port":63312},"up":true}},{"node":{"config":{"id":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","private_key":"cea9931b34475ad432aecae3d385d895f0ab3e93cdf1d9fdbb356753ec9c7a59","name":"node_84abcbc7b5598ecfd91ceace0927921a5a3404fdb274fc2a2549abbede5f8e4f62c15688a4dc9a2d80262c45970c88898da245c6eb779f327a81d53a17bbc74c","services":["streamer"],"enable_msg_events":true,"port":63313},"up":true}},{"node":{"config":{"id":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","private_key":"362c6622af8998cc3c5cf88ad71f308b632f8f7d0e8ea7ae341f8c8ad44cda5e","name":"node_eab86c521f8f1ac67c015ab713f1236a08b0200757a96bf87ab8301e7967ae62361f0e14da14ca294fc8cb3b4726b52f4773101e21b032977c6a647241b59c73","services":["streamer"],"enable_msg_events":true,"port":63314},"up":true}},{"node":{"config":{"id":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","private_key":"9b28fbe1dfa137bce975e179d3acfe046e5d148e1f9b1aeb16bdbc2cf7abd071","name":"node_e6779e3bbecf81dde8b27d652ed2726c45c205db0d0405c4580014a4c91d739830276f77079108c98ac516ffa00194e77a0795f7140bdf36069b6475e58213f9","services":["streamer"],"enable_msg_events":true,"port":63315},"up":true}},{"node":{"config":{"id":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","private_key":"85e559f97ba5553b0773479fed666bd92a928924af8164f41e92e8acfd51e896","name":"node_9133b0b3c8f680286eae90c3beebc3099a13de38775a3ff2abdeced62d05eb2ced5ac85eac0870156be03101024da5e1d9fbf3e1066ddb3f088221e64149acec","services":["streamer"],"enable_msg_events":true,"port":63316},"up":true}},{"node":{"config":{"id":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","private_key":"652705ca7c47c641c033e01212d96759539f317508df53dcf7397dcee0e20422","name":"node_e1ecad3beeb6c19dce551e4a603c7b440b4498c44e298dc67bfaf4ed2c75bbea95df48b1cd1318e2ccb962cbae7c30ff258e73f8c3fc6b7e9ae7a47f7cf8e53c","services":["streamer"],"enable_msg_events":true,"port":63317},"up":true}},{"node":{"config":{"id":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","private_key":"2578458d6da6ee18aceaf48f57a0f211f9b0a0a49149cc71356d1ccb989b55d8","name":"node_1d0244a13affe60996fe3cf51ba624adc746de0c7ea68ec5a31311a36077c5b5495e3d95c9642875db44c7ecae6ffed22e45f2e2d024d486760be2af9f4cf2cd","services":["streamer"],"enable_msg_events":true,"port":63318},"up":true}},{"node":{"config":{"id":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","private_key":"35b91179894d9195f220f768d849bcef7b2752c1d63a4d373be189c4e35b68a4","name":"node_d9bbcdfd949010e6b2cbf6d0f34b27593ae410bdc1838876aeca35679571fe431d040a5ab085c0a77f111688bebed891da3587277cd794702437cb20d6aa4256","services":["streamer"],"enable_msg_events":true,"port":63319},"up":true}},{"node":{"config":{"id":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","private_key":"62fbe89ba6bc5d8f608f65baf5a0a87c9cffd1f428ecacaadcc777a117a88fa2","name":"node_0a4eec7b0e05da799aca5b36d9e2530f2a89d1426b1fcb7d8f9a662df8a8b5b763767a20db3c9c63e0bd13c2a6e16d3ba8f03baf84f5e5d24917b3f211d9bcfc","services":["streamer"],"enable_msg_events":true,"port":63320},"up":true}},{"node":{"config":{"id":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","private_key":"85b477146d09b052deacbb0f7cc22f61fe3093095e7677ce89c086db68c8c939","name":"node_9bbbfac8be4a000f51a4ce8d024d2595b5d491afec0138922dddfde5ef62c664040c2e9304cc6b7bc688233b5d0c4644b8c8793227c078285a3ab894ef0497a3","services":["streamer"],"enable_msg_events":true,"port":63321},"up":true}},{"node":{"config":{"id":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","private_key":"b3caf8e1271504098be33349fd983395e57f6cc7f4c0d74df8dec7643c0cd09b","name":"node_016f8f4619a16a07fbde5a18e362158d696e4d9f104a77787f26e32a25cd7d278256f8e0db865c488a99511ec27a5eddd5ebbd1c1397fa7f8db111062e5fe959","services":["streamer"],"enable_msg_events":true,"port":63322},"up":true}},{"node":{"config":{"id":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","private_key":"a61a6a7469d5c9abf20daf3df75109b9139cf36c1194d9bc00046d1359c44823","name":"node_7acddc7fb6ac587b7e343804c768e4291cd28dd2b2b9207dea6ee82360d848a52d84f94e4c49e9c421f4f90e2d24f6291e2358783ab0230e6ecde82e69b4ac52","services":["streamer"],"enable_msg_events":true,"port":63323},"up":true}},{"node":{"config":{"id":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","private_key":"629bf1b9c1de816ee9d1abd91d2cef359ce96216dc1d798c7f246ecc5bba8ed4","name":"node_9b59b76dc61223c7b37083b0ebdda22d3599563b3e3986f5db9d5b12f8c806cbdeb2345454efe957cbfa11eea9c7896aefd9a461210524805452ca100a9ea431","services":["streamer"],"enable_msg_events":true,"port":63324},"up":true}},{"node":{"config":{"id":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","private_key":"880c61b8c84f87c55e85aa9b07944500eed52b76b64b6d15c93d8e7c23000042","name":"node_e2e0419a41bdfc5bd76deae2ddce6ac865f886d764c9bd18799b79fa3b2b6ba66d765d26da2037e98317e1d7e8232a61e63c1d0cfa98c9137424151b46e07171","services":["streamer"],"enable_msg_events":true,"port":63325},"up":true}},{"node":{"config":{"id":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","private_key":"dc74709b0972c1ec957a2c056059ce117c9291997ea47107228e80d28af70acd","name":"node_5df58ba12334a1b4f983d642fe435901261767cd81f8f37c43e359f5584664e4d287e8c2275995604a3b3a4823418e35cd899a3db2a7db31570e19512f375481","services":["streamer"],"enable_msg_events":true,"port":63326},"up":true}},{"node":{"config":{"id":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","private_key":"52e14edd67adc3154d0d5a91f91e042773a79af41c5cce9120e2dc03318a7fdd","name":"node_5e86f39cf8338ba098a85d41e601a303fde311662b216ad32a2b7bfaf2b2b6dd1af3775784b39f2d85ac5fac96f05f3abdd8a2bd28ba16d939725fd6a33ae1b6","services":["streamer"],"enable_msg_events":true,"port":63327},"up":true}},{"node":{"config":{"id":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","private_key":"ba201a301c109cac7dc4f762066312478f6a3b92b80495c19d238b8e728e3f63","name":"node_df54af3bae257d437c5657905484e0d72e9560c46f8ba6b3437730234e05259b404cca40b0831e911605ff8a68a19e8fd7e958069ec8b40595928892f4fa220c","services":["streamer"],"enable_msg_events":true,"port":63328},"up":true}},{"node":{"config":{"id":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","private_key":"4f8dbb09790674afc8ae90210897ff3196d82a7d8cacd67ab970ab02fd61136e","name":"node_4ee37acec2178ef120166265aaa2b64b09b315fb53861405ef46f2503c273eb9692e9cb4c2e67a8652254d430fd6e02dd3fe4cded20bb231a9fb834d292b0b24","services":["streamer"],"enable_msg_events":true,"port":63329},"up":true}},{"node":{"config":{"id":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","private_key":"fd9060fd74b7db28d5b02541febcaab4e1706cb1ae50b22d20a7f619fbc774cb","name":"node_abd8f5a4d700c06ec00684b23d2d25c4df1a9554fcfc57b0ddc3fa476e6a699ba75e1213449f900803f83ab8194c6746664b547202047f35b8b3e216c7147bf8","services":["streamer"],"enable_msg_events":true,"port":63330},"up":true}},{"node":{"config":{"id":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","private_key":"3034bb94560e7e8d146cf275664f91426fbeadbea78cc96662a0e762f5491d3c","name":"node_cb321c9b0fe2eb3617b8e2461aab170a9dad2c9b04a10eead4e37e551197ea0a7500eb1cb7b155efe1886486ef3d252d8ff0d309f2906a1126ca011d037da70a","services":["streamer"],"enable_msg_events":true,"port":63331},"up":true}},{"node":{"config":{"id":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","private_key":"1e3e9ddcbac955dd113066c5a41e5b3b16da5cd7bfa036ee1066ff3ceb69d7c9","name":"node_c665a6b1b7ad39b86bd4b1fe38b7ee95a0fbb1db15e91381ec9e5a235e33b69ffdc92c60dafd74b7b4dafca1b000e9274bf045abe5b93b1a9c2b31ae071a9898","services":["streamer"],"enable_msg_events":true,"port":63332},"up":true}},{"node":{"config":{"id":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","private_key":"9dcf01557c9cd252eba6d06bab3e12ad039e64f5d33b732bae4afdee4f4c63af","name":"node_53df9cce9b0169e58ced53a123d1d8f6e8fdcfb4c2d781ecbb91bb7c8eba36946dd9d21c749259769825d8a6b3faa6bb87c8c6085a522f8a3e376061f59144d9","services":["streamer"],"enable_msg_events":true,"port":63333},"up":true}},{"node":{"config":{"id":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","private_key":"290d07cdf29c35f369b7053b54ad174e4db589026d3d4b0553bcccc0a0e4145d","name":"node_d7a319f69013b8375e64d19f015547462c84565b882337998f9e669c5fadd3d2ecf6374109903003e09f5d453424b5c7fdf52163d2cc8084cf81f94844946b63","services":["streamer"],"enable_msg_events":true,"port":63334},"up":true}},{"node":{"config":{"id":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","private_key":"2a549958a13f2e346b477edf55e1056a1c7c1051b3cb277aba17bd7db522aba6","name":"node_f38a9d792173a29c61389f5d84c005d78eac6e750659aad42e2d6df883f04eb3126b2c38fac95076eeed455b2031aaf694143922aa93a2d50412a2454dc56e28","services":["streamer"],"enable_msg_events":true,"port":63335},"up":true}},{"node":{"config":{"id":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","private_key":"72cba007b6bddfa0e57451e0f28d74cd7936955babeefb16b4c3de62400c8ef2","name":"node_4f5ab12b9c5127c16739ad0d4f51adce90ba6736cd096eb185ea632789f4b26f1ebabdea4fd3b39dda5409ece6c2d92fd469cf4aecf9d29453e3e042c19b893b","services":["streamer"],"enable_msg_events":true,"port":63336},"up":true}},{"node":{"config":{"id":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","private_key":"5a603b46da0d4b5d7b48ca9ee9f08ca4cde411e8e279454ac25624f0a81580d5","name":"node_11d560045536e9d1b0b1b9e8944e00f0ca7f1e6788c9fdb51061820bbb3008ead92bb7836621bf58da7035c87a28328faecb4cb2e3cdb9d7fa4f45790e6bf352","services":["streamer"],"enable_msg_events":true,"port":63337},"up":true}},{"node":{"config":{"id":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","private_key":"955c0d00b5c9a641e3e9958a032163ac01fd30e25660ec50db255cf9349573cf","name":"node_94088fe273f76e62ca4e43c095ad12215b4ae4c59942328b3985416fb19bbda0cacc143a49eff3fb644ad53a19d3f043260e43dbb70a0aa9c15829c21cecd3c7","services":["streamer"],"enable_msg_events":true,"port":63338},"up":true}},{"node":{"config":{"id":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","private_key":"3a0fa647e1aa93088fd931cceb89e4426c10861ebbddde0f14a58e2a3969c252","name":"node_535f93057d46c4aae0902546550880be0b5ba67dca12350117d471d67f4f2b3f7bdff29bdc918767974c465df8fa1afa6bd6c29c0a36d51f71c4183673d906f3","services":["streamer"],"enable_msg_events":true,"port":63339},"up":true}},{"node":{"config":{"id":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","private_key":"22c2b405d07e440cdef6e1e9d93738f3bf3add71f54493b68b2fa368c3187755","name":"node_7ac5b07eb555af3bb4ca3f0f4b45204d43cc3798c244435909b97d9a32fc3abf0b50666e260e046bce826a7a102a92d389f8f39c5311e83bb34beddac29d50e3","services":["streamer"],"enable_msg_events":true,"port":63340},"up":true}},{"node":{"config":{"id":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","private_key":"98f9b63dc3d1c346c60957731df1731c8b5f7cbfa63ec1e4de06d1b9f70f7597","name":"node_1944f98d4db32c56a5efda5a79aa5f276bfab1e084d6611fec0e735b8bc0f45b457cdb74a23fc83b2377821fa8316123c9877acd6db7c41058ca5d3cfedaecf9","services":["streamer"],"enable_msg_events":true,"port":63341},"up":true}},{"node":{"config":{"id":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","private_key":"fef764b306a01b333cb965c1faf6970b6bf206dd19c10f666d0188e532d27a7c","name":"node_1c2f7ce55a6e38487f3b3fe6083a79f914cd6d7e4aee8f5d56b4a61b3eb584e128c56998db0e13e775edee3adacf54f09960a041dab3daa80a4f8a3b42760c1c","services":["streamer"],"enable_msg_events":true,"port":63342},"up":true}},{"node":{"config":{"id":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","private_key":"aa54e42fb6be9a738ce973816a814b29759c40f5ae5c57ef972c8957be9d1cdf","name":"node_6ab6ec15635b2fda22542c99df0a3313ad4583ba0fb3f31b8f314e3ecad446d3fb0fdfcd2be9b08374b1a7e049fb68e69e8dacdd13f1df5007a656f6b11adc5b","services":["streamer"],"enable_msg_events":true,"port":63343},"up":true}},{"node":{"config":{"id":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","private_key":"c0a44ebed32208583420c7444e83ac3526001946e4f7f6b561c24d98f96cc0a6","name":"node_74d84cfdaf32cd4cc67771f29878f1365120bd65cc14848008d5386a81f495bf88eb4132fa38a2cc109ae1e7f02c9b97597ab9d1a9c19c945e710ab9df07cdcd","services":["streamer"],"enable_msg_events":true,"port":63344},"up":true}},{"node":{"config":{"id":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","private_key":"d38eae2be9d262c3b37bbd8afb82bc0cd431e4c484ae92747ad064e4138e9f33","name":"node_6b4e376e9c94242b6d42688c22aa9ab418cb6dfb1cbca1c69de0feceec8d3af29fb005017aaa6e503cc0c03cf0dc5bcab55e01cd6f64b9efa02ed87c03020003","services":["streamer"],"enable_msg_events":true,"port":63345},"up":true}},{"node":{"config":{"id":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","private_key":"e345c696901db291ce988a19c0ad31ca0a38628ebc03c0bc87307d2c8f031346","name":"node_92d6ef729992f0de886076e5f8cdc42cbbd70b29e79c25e0b3d22b6575d3d2508d47b42f581e335455483d43625bce4e55f88cab9ff2073ee8dab746357864fd","services":["streamer"],"enable_msg_events":true,"port":63346},"up":true}},{"node":{"config":{"id":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","private_key":"7149ecac9f7173c182b233a94bfcf854714955592618e1d9500c622a08fc3faf","name":"node_57cd4c0048b459192ee46e19ec7df777e600f256e0dc8c3019431eb7bec3c020b9504ec7aea3dba8188658ca5b830ec40af6a8540ce10e04badc6c695d009271","services":["streamer"],"enable_msg_events":true,"port":63347},"up":true}},{"node":{"config":{"id":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","private_key":"cf6da8ba09884f084c279f1f25340712041f3c36c9b6be1c0fec270bdf17a875","name":"node_831cde5b651ba327b059da4c7f84b184bdd6bb99c6690ae816affe25d42c6c3dbe5b59e2b6bf23e9d0f6c485bd341ea57ba1a8220d18b0a40e156b77d84f79ef","services":["streamer"],"enable_msg_events":true,"port":63348},"up":true}},{"node":{"config":{"id":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","private_key":"2acdb11a79e469d5e7e20a391253ad6909ecab541c9931d5f7422de792574b6b","name":"node_71f89efcf939294bb94ac669c8afd00def58c8dfad519c226adfa068692d588ef797116d42aa146b9d34f3be35ec7c014022640ab3c0f1f9034e44ab1a26e246","services":["streamer"],"enable_msg_events":true,"port":63349},"up":true}},{"node":{"config":{"id":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","private_key":"63cfea5298455b0cf7952a47db686e5c91ca2f2e16610167e5c15337e67feeab","name":"node_4ff66e9b5d3fd345990bd7605bdc222b78946f0c13b72bf80352812b2426d8f1d36c93e6c8713566004615e8a78ecab12ab0cfba254c0967eeecf8875b25bdae","services":["streamer"],"enable_msg_events":true,"port":63350},"up":true}},{"node":{"config":{"id":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","private_key":"28315ffa74cadce008f22997503621aee7c6df8dd478536421715a17ebb97a74","name":"node_9bd4f0adb9a966cc5ba632f1b540fe9cd6c8e39fe1a041b315697679cfb04b735952062ce057d456677cc34a84301f26bb727a4ab2646fee734f80a22c620746","services":["streamer"],"enable_msg_events":true,"port":63351},"up":true}},{"node":{"config":{"id":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","private_key":"1177b8e7b7ed31f6a54030f8b4341593d3a1d72aae40f9156861650da1746f2e","name":"node_58cfb20d3da3641e0ad529b9edbd4b590a8d1dc9d1ed7b44ed3187dba9260bd7c732fc10981f5b9bffd31d362cb05150173618aa36138984431d94a323a9b313","services":["streamer"],"enable_msg_events":true,"port":63352},"up":true}},{"node":{"config":{"id":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","private_key":"d007b46d1a1f6a2d085b54b2073f46bebdad50a651920b7083908d388be5e5ef","name":"node_094f9d0fd3bacb17ac67a2edb8ed394fbbd1c8d478233d3269cf217e7b788e21042374936b885bf23ee4f9e03babbe4e08db283dfc2a6e052a8a5ba133717dd5","services":["streamer"],"enable_msg_events":true,"port":63353},"up":true}},{"node":{"config":{"id":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","private_key":"260581578bd37f4523054c95aee9f6b4beea4ed6b39edfb8b9506264d93337d7","name":"node_7646d08b3e24183e3814de130235c41eb88a5a2abff23eaff3c91954ad3ef55fe27da422dac5b894312276bf1a2f1aebb8b636a8d4a0c93d9b016d441df3fa19","services":["streamer"],"enable_msg_events":true,"port":63354},"up":true}},{"node":{"config":{"id":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","private_key":"49be559b16c8e23e2031acd1d93ffd182c0f09e54f7893335d04febec1b48e99","name":"node_9b618ad34d0dfe0fccbd5b8af365cbcdbb43e802df5f23e91c20d21f3ead6169d52bf0db7e5e111abef630c9853419fb33a88cf111d8507b8708208b5d65e35e","services":["streamer"],"enable_msg_events":true,"port":63355},"up":true}},{"node":{"config":{"id":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","private_key":"7b742610b213ed9b0492c97d62574eafc92dd73cb24ba74c4f1023fb4d8843ae","name":"node_4a030ebcb1a59230759d25a3c87daed22906b520d55a78eab2083bb52358ddc3a5d2d7c3265e6c54a990bf32d0dacb85905a4173d72ac18fcd74c43ecb8635c5","services":["streamer"],"enable_msg_events":true,"port":63356},"up":true}},{"node":{"config":{"id":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","private_key":"c90aa4ff988d9d5aa9ed033d3c8076c073ebcdcb0131604299ca721f38d363ad","name":"node_e0f78c59a61f2a953553cd5742c58f4a82e38e35ac7eaa237a6ffc9fb0a3a26a2d1d1afae249e611d1320f2cb25804bdbdfb6d77336449716b0f4beb3298b8aa","services":["streamer"],"enable_msg_events":true,"port":63357},"up":true}},{"node":{"config":{"id":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","private_key":"77bd908de80bb222465d000554b9467681aef696c9e1a81e51dba688310dc7af","name":"node_84dfd4e4d9f1204893f190eacc4c3999e175c433f70de86e335d27477c097a0552f211a21764f01a708da4c9e9e6552191a61d3e48f41d0e84f01e7ae3beb34e","services":["streamer"],"enable_msg_events":true,"port":63358},"up":true}},{"node":{"config":{"id":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","private_key":"529ac85f80c2ef25f0cca3417a1745d3573eef2b8cd611eab45c6bf857c87158","name":"node_ba21a373781966135d6225adae024a3f3e421b852f72f8b0569cb92fcff87c33f7e5b799a509b8eff6ec6dc46a9b17d5bae1e91ec7c54c0c712d893d54b140fa","services":["streamer"],"enable_msg_events":true,"port":63359},"up":true}},{"node":{"config":{"id":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","private_key":"46d69d2cb90a6ff16facb7994569557da8b0c76f74d238381a2a53cadbd1d8de","name":"node_fd4968df03d767a223bf7e4dbe26b5c27048298df40e81cad50b344fb3e6837965f2646dab7ffb2891a5c507343ed84bb8bbe403287b51dae538d58fcb6e7623","services":["streamer"],"enable_msg_events":true,"port":63360},"up":true}},{"node":{"config":{"id":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","private_key":"668577a2160c0a19ddd60a032636f42ef4b0f8d7f8b15129b39bc693b04951b3","name":"node_07c63ca5d0309e30d1ab12e7fc142e6d37904b552639cfa97850161491f28f20d87e0304be29357bcfc2ff52fc52fd0d4f6e6011ebb239cced8b5c8dad7abf45","services":["streamer"],"enable_msg_events":true,"port":63361},"up":true}},{"node":{"config":{"id":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","private_key":"ccd33f1981701e030d7880879453393ccb90b02d71fc85a89d82f903d1a81066","name":"node_920a301186bdf665a721676ece7c180413369ea6eff7537f42049d9eb409f28cc864099590116e885f57368959fb2cff7003697d9b1515e68bf3fa7aee0278ef","services":["streamer"],"enable_msg_events":true,"port":63362},"up":true}},{"node":{"config":{"id":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","private_key":"1859e8cc62440d9e1d1c35f842b8bab336798e87932bc4f2456c327fdc777a7d","name":"node_89a5b92a9ca045f12c35a70084e6f41f9775a25d6f105f8c9349c7b5e107179d8a96bdbb113b2680edf5183e9a42fd64bd7b29d0dc7797c583b833f869313699","services":["streamer"],"enable_msg_events":true,"port":63363},"up":true}},{"node":{"config":{"id":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","private_key":"45dad25ea664452913d4fb09debe8987c94b88ef752b058a7bf352f144a9c6ea","name":"node_beec648d79437a5d7b4140ced45d82d035c6f64f9c67c58386703811d97c3846787eaf274d2298df809475f0b7519df696563cb8e9a5fb0a9cc419ab13fa8d41","services":["streamer"],"enable_msg_events":true,"port":63364},"up":true}},{"node":{"config":{"id":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","private_key":"042b5ccd68b8dd6c125ecd889c304299fa18c22841c95b5fae01a22fa98ce96d","name":"node_c73d088ade8756c74832c73542bcdb3e52f670f7a74ad3a7eac2a9e3ece6bd081f782a8e1d3f9a40b9aa9201509110f37fc57fcb10ee1ef3ef07b7eab019782e","services":["streamer"],"enable_msg_events":true,"port":63365},"up":true}},{"node":{"config":{"id":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","private_key":"1a8c7f2f97bcaa5711578ec1de04829d7735f81ba5761087e79a977405ec1801","name":"node_62dab8b21640e1b44dea452dd7e7de93f27a44840da72d56b11aa96e8463f3a4bb15e75a954d19fc897ae0030b16181d271b79d8198b7cffcddaa9ffcfdcce73","services":["streamer"],"enable_msg_events":true,"port":63366},"up":true}},{"node":{"config":{"id":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","private_key":"d7a4980a0fc96842e8e570863a3b8e078baefe4ca8ab2ddf85c7c5d8f541fabb","name":"node_9e621c3eb534855ca292efa27a3fbc89b4f05c80a4bc65bcff2f14ff28ef43cbe14137d2fddc6fe2658bb06947d918476b479dde71469b8680e5d8a7a01619b5","services":["streamer"],"enable_msg_events":true,"port":63367},"up":true}},{"node":{"config":{"id":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","private_key":"d2e98b0004a9b7bdb030d5e729716e7065aa1a8c48efacf471718bc5da8ec990","name":"node_afe5b217dc512eee45575c189826ee5640d11a0ac9e8e4b03e9e62e6cf6df9de500bc8a36cb7d82a2280ce184409164f1772cc5c9e59ad04361522d2b8c364e0","services":["streamer"],"enable_msg_events":true,"port":63368},"up":true}},{"node":{"config":{"id":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","private_key":"bd3302dac250b294208d6ed14b0a14a6d60d75be1f68ce5cd1e250a47032fb3d","name":"node_db8ba71afeaea1f2964e8978a6eceeb9efa3958424424022213c8193443f8d5afd18490afa954c76360c681404809c7cfaf7e4ebd8bd1a42d403f7f1915b0d29","services":["streamer"],"enable_msg_events":true,"port":63369},"up":true}},{"node":{"config":{"id":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","private_key":"f5832a55177daebfda3bcaf8b5ebc11eb44f4d5207b8384fd35999944d2fcab0","name":"node_2f1967b4410ea2ea8fbaf46771ba82c2846d00aecdb6f873aceae33ab38f72d0a2c2dc6046d3034f514efd090d42011d48e9ab0cb4e3caa2b49a96ef732215a1","services":["streamer"],"enable_msg_events":true,"port":63370},"up":true}},{"node":{"config":{"id":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","private_key":"8285330088dc95f441c68f12765ee99f065fc41f665b54a257172d9b4ff6e017","name":"node_a99852c5bf08ea4713af9cade5343d1259bfb90401aca7fcff18c58cd56a98804dd16c61fea71039c0ac31b9bbbb9dc5aeaf0c2f074d3365e88d17031802d636","services":["streamer"],"enable_msg_events":true,"port":63371},"up":true}},{"node":{"config":{"id":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","private_key":"96a76a56912e05cbd480fde154743a65f4bdaba5395cf685c22681fa403807b3","name":"node_4e68553db7be307b8379e8bec383b5c92e4b23debcefca575d24504e2062618f74c26e60e0d9e47f096997a7f841e2c32c994124f495ef3352ef964b33fd3a51","services":["streamer"],"enable_msg_events":true,"port":63372},"up":true}},{"node":{"config":{"id":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","private_key":"bf0a6c406d390baa5a33fc469dd8b3ec25e406364bafa8ad3d9b422dd58b4a87","name":"node_a608a746f46d4b2e9267c65283380d6d6cb8885a64428fb77df9934bcf4dd1723587ee7c8f4a642dce266a12a6a4cf4e5c6db7fa1024158425a6753e7ab7264c","services":["streamer"],"enable_msg_events":true,"port":63373},"up":true}},{"node":{"config":{"id":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","private_key":"4010f083fe123b4e1e1091a054b7af104d76038c1313c71470b38aa16a05688b","name":"node_fde7705f5013c3b6b76a35505c1e3d57c033a337f2a71e912ec3a3d2da8e113bd7c36d94908357e9f7654660621f647ad8c66b0126dfe91dbfa3b8c7bd2183d3","services":["streamer"],"enable_msg_events":true,"port":63374},"up":true}},{"node":{"config":{"id":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","private_key":"e2894e5fef7fae6c4a6969fdf39bb99e8fb16849881a5a7d45cfde92ab16232f","name":"node_3dfd733dde9414af916625ab981777ff1ad7ca0f6d1e4e7d9e2739969e21182fd13d85e281868653e7325b20069356b11524b54143c47fd3955a911cf7325ad4","services":["streamer"],"enable_msg_events":true,"port":63375},"up":true}},{"node":{"config":{"id":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","private_key":"1273dc5cdf253e8042d52ca10f80d25481d40b5cc80b37b3e128edafde8fabec","name":"node_5142eea687de4248b2184e9896b245563117648e7a156255d9a7ae730313d5d383db3be1125b5accd7e743c2a5d8c3289ec559ef7cbb803b9e82cd49bb213d9f","services":["streamer"],"enable_msg_events":true,"port":63376},"up":true}},{"node":{"config":{"id":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","private_key":"082369e49a61588917d594d0a90c2d53968db7910a1fa9a978da33f53d8f5166","name":"node_b597c9ba4da20c49fc4ba019571321d2579588636cdaceb9f225706574970adbf4771dcf186b1decd4e14cd5d257e30a36ca829829598c1775902201ad9793e2","services":["streamer"],"enable_msg_events":true,"port":63377},"up":true}},{"node":{"config":{"id":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","private_key":"5ac4501287d61d0083f3143a6184fca450c07d149279fdb3a19ae3dbcf456732","name":"node_72e30d4562673c5c8fb03709d93f73322747858d723b7eb5ef2fbb88e0331252946b7e93ffe434fcb599c4fff57800afb29e6c60a719f18f49dba541c3591c6e","services":["streamer"],"enable_msg_events":true,"port":63378},"up":true}},{"node":{"config":{"id":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","private_key":"cbc289ddf69a20e78f479b1587fe2955c2ee7a0bc7a743ce61c13c07139b33c1","name":"node_eaca77d20c4ad6b87649eba21b750a4b1a2c575e06bc42679d18fce16fea15212e9a7408c16f3b24d8dfd1e397314637e72e292845d09534a39035bd9203ee9e","services":["streamer"],"enable_msg_events":true,"port":63379},"up":true}},{"node":{"config":{"id":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","private_key":"dce8d0367de94896d0c24049979fda6a48f77b8e98974d66472666a5a4365865","name":"node_d3105ede6c21bc643d523afcd1309a5dcf03f70797a92f167c3a19f86ae98882fe1a9d4094d7a3dee4a0833b8075b6c3e9aaa7f4879dc47bb388c3ae85522288","services":["streamer"],"enable_msg_events":true,"port":63380},"up":true}},{"node":{"config":{"id":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","private_key":"138e8952e22f78dbf4ea1aad84cc393a1553192402f5cb23a8d15459d9254240","name":"node_6f60ef501b41f9049419b033ae8d793a18067bdcd60347537b0dc3873bdd9a2d10d24909cca7c39781765746128c2165596f6537a94f58279523faee71f9c51d","services":["streamer"],"enable_msg_events":true,"port":63381},"up":true}},{"node":{"config":{"id":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","private_key":"b50b26bf10abf56d51a891c4449915de09ce392d6c5a8170ae5ea5eb3a082d8f","name":"node_453779010ed7c59761da47ccd8869d3fa8349795e57edb9eea416c0712301ea622c7683858e309d19ab137ddb0edef161d0d00a361abeecf0628c3ffabc629ea","services":["streamer"],"enable_msg_events":true,"port":63382},"up":true}},{"node":{"config":{"id":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","private_key":"269797dfe5cc0dab8d44b114878dd8ec081d6551214db901b361817184a58bcc","name":"node_e2a27dcdee1f89fa362a85c4397840cd8be4ad8d1b9ccb23188c303bcab7619f38772f71385922d090390973b62fb8249efc103f71bc761041bcb3880ec0b935","services":["streamer"],"enable_msg_events":true,"port":63383},"up":true}},{"node":{"config":{"id":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","private_key":"09082c0128f28346808a35b0b607d4e7d6c9ab7e894b5166958bb2eba5f4c0b3","name":"node_97981f4b825620985b746c85824d7a4d307ee25d60a72c2b7de4b1d4f3b1c002652adc3045842d350f849789e410a0357a0b42fa637a1b4fc9d39e44f8a674d7","services":["streamer"],"enable_msg_events":true,"port":63384},"up":true}},{"node":{"config":{"id":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","private_key":"ca130a8083cac47d964d46dbbded845892b326aa4fa12489d21578f9f018d45b","name":"node_fe62314839c93d2f6e3aee984d5f0b321897c6f39e66800d3de8b773baf6f19e0a03cae025df512aea8d5f1b667b6dbb15c192a90a76d3031c14e33e5c16c4f7","services":["streamer"],"enable_msg_events":true,"port":63385},"up":true}},{"node":{"config":{"id":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","private_key":"5d649fb189f6b462f678a083e7ad8d874c6bdeaafe0817cf4b361448024d9428","name":"node_c903c5ee3d9cd65bea3ea777e39282c33e1349d945411fb2f16321bf582c2f400956a98fbafe5873fc5f6f6a9a051df5da7e94cbd340f935abe80f91e79ef875","services":["streamer"],"enable_msg_events":true,"port":63386},"up":true}},{"node":{"config":{"id":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","private_key":"74fcb757f856401d62426a3e62cff6870099b0b261afb281d8d9e7dcf355a87b","name":"node_5420da16f7ed5de6b498dbc9a83b7e92e1f9900a6d04ef7351a0bfdfd442b98a5634f28fcea32ba3f3166d21c8ff5a39be70895b32acbdf7592d1d616a345a21","services":["streamer"],"enable_msg_events":true,"port":63387},"up":true}},{"node":{"config":{"id":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","private_key":"3e1263efdc899dcd32f1fd206de2370195ae82fccb81eb354dd9cb52fc5994e6","name":"node_f54335964d9b4eb9813eb05f40ef1c523bbf0faac5a04c4737467d590fb6b55c7fa1fc5d4d32c5491d8766b9be6fdfd3ebdb25c5ffe1719f36c86ddf87ae3a85","services":["streamer"],"enable_msg_events":true,"port":63388},"up":true}},{"node":{"config":{"id":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","private_key":"a7cb8f80391de65478acf12a59fd0a0e9c5f04f0e4bc1da34b9acd35c586fe98","name":"node_40bdac599b00e9c41ad6476ee415c33d9c17c5aa672692c2404e523b29dc315da929a86874bed87fd9009871805d1dbf3098e7a817193e3b08a6eee66346da79","services":["streamer"],"enable_msg_events":true,"port":63389},"up":true}},{"node":{"config":{"id":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","private_key":"dbbe33233150cc109e4ec1b6d6bf5f14bb573d87551440db2407ec75821b4ee6","name":"node_b26f7c0113a5ae885f7c0e608aea7022a9c8bfc40c5643e60b2ba7343ff09c5be0bc08be34dde3c6b85fea192a46d4764770c12cbaa233df4231a1b99627ef9d","services":["streamer"],"enable_msg_events":true,"port":63390},"up":true}},{"node":{"config":{"id":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","private_key":"1058ecb8bc4354469a7fbef819dd8efc60c72db3101ff2f4d3d8089876ae94d1","name":"node_829b074b70d757da6aa00f7bace3cf1b5d2d4eeadb7f370c1a85374a01a70b54ac53d747267e386f3b41e6d790fecdd6e74b8f89745501ee82439a66ea54443a","services":["streamer"],"enable_msg_events":true,"port":63391},"up":true}},{"node":{"config":{"id":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","private_key":"7a22f9270103c5214bec5fccac665913b7e9ba442667ca7ca7f1bead2d44e594","name":"node_302c37f28c69fdcf00b39ce0c0223de0d94cebc2c0b068315b95b76b5432573ead0656569441029ba9054d8d3d959fd8735e73913af5ce3f1132f8271fd437ef","services":["streamer"],"enable_msg_events":true,"port":63392},"up":true}},{"node":{"config":{"id":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","private_key":"32e05e400e6938d31aa93e7666905a5a12e2b4b706354eae5f34259cf6880e60","name":"node_4e95fb8943ef6502fa470870a7ace4ca11e18589bd2073167543a922317b35e40b5068934d07e56c8fdd23354dfad51fd2899db854f189841f02b5914cd97749","services":["streamer"],"enable_msg_events":true,"port":63393},"up":true}},{"node":{"config":{"id":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","private_key":"f6b0641261c3c0741d61572a591e72180deb8ba2c9922ea5db694c5b372aef6f","name":"node_807340e5fdf6c21a56ef2fd158c32e92201206ca85fcc147165a408f7a735964afd47c397e663610ac53870ae722c0317291732b0422f8aeedae783d9c730218","services":["streamer"],"enable_msg_events":true,"port":63394},"up":true}},{"node":{"config":{"id":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","private_key":"5809952239bc91701c49a3ca4362fe2f96294405e789a467c4899d1dc94f88ff","name":"node_c9cd9dfb9f90a7948ac5a42c7bd63263f2eef6e1d85547559f7d2ecbf5f9cd1eab051b8e9e661b573c275d84091a44e73f6fc6bcc91dcdb674bd5d939190fc01","services":["streamer"],"enable_msg_events":true,"port":63395},"up":true}},{"node":{"config":{"id":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","private_key":"284f36dbabbb181f068bce762670de591bac534570ddba3da4c91381188cc3a8","name":"node_1bc1d6155ba35d29ea16938994e08df76ebd8f16bd180bd6a9b9d8798d0745889fe72d641dd78bd8ec13526929f7eb5aaa6a388430fa69033d6db581e53c6422","services":["streamer"],"enable_msg_events":true,"port":63396},"up":true}},{"node":{"config":{"id":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","private_key":"c1b4e417ecbce61a39ecf4a30b86e303e82534bd890eea7c30b6ab4d0bdca861","name":"node_e267e71c2dcdbe5a500b23444d2d4037ea15afba8f4f2b1c0e54a274450404fbee6fa5439f7cddf4ba1aa28fa93e434b01c239add58e30a5423ca3a481584d6b","services":["streamer"],"enable_msg_events":true,"port":63397},"up":true}},{"node":{"config":{"id":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","private_key":"eda1f1637d46610c0a885d4e08d8d4e776868f98be4dca745ebfadda65f2a81b","name":"node_e98a08e8e3544727f5ee27f4465375a67ffba490fcdbfe7bfdc909f6b68bd279f776c65d38c2ccfc33079f852f76349c94d68fc6989c0d981f22333f036a4bb5","services":["streamer"],"enable_msg_events":true,"port":63398},"up":true}},{"node":{"config":{"id":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","private_key":"51d301cb37e7206eeee2847d753aa67cbf0513b6e7cd41022003c2e7b3ef5581","name":"node_cb310c0e86aa455d7c9af6394ae38561c901da30a51d7ccb7e66a09d9a8f192ae8caeff106043426d56397088f141c4e01e3b98f1ee583ffc7318b5f730f3ac7","services":["streamer"],"enable_msg_events":true,"port":63399},"up":true}},{"node":{"config":{"id":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","private_key":"30d23072d68ccfe357cba2b3294b9584b591e8c7898031f7c4dbaaadfdd05e1b","name":"node_1090e9d89cb278a30063a5396d9ba795d3bbc237c76915a6fb7d23aa1822c8535d2fccc44cc8cd2acec68444c0bf1bdf5195ebb9f3cad8dac3d94a4d9c0e5309","services":["streamer"],"enable_msg_events":true,"port":63400},"up":true}},{"node":{"config":{"id":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","private_key":"90d8283793c2eb15b76d7d9e492b3c3e7136115c74bf027ad9985179380a82b8","name":"node_4b784f072b7c96c30612767425f552e30e45157e70139dfbe0ae4ff86dc31601adec60f8a3ad9747b02b5219073d8813af9b09d59eaf7ddb7ee24856aff6fa8f","services":["streamer"],"enable_msg_events":true,"port":63401},"up":true}},{"node":{"config":{"id":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","private_key":"b9111f0cf5ecf0a5dd7683f07c58f581a175bfbdf307224db008d7792e30c6a3","name":"node_22010c9829626a6892258b09cb3f3edc3f21382fb487b5dbf0dd20e198e37e26134aab850e30337f398d1491b5126839aeb1953ec144bc19aeb889c832f67c6a","services":["streamer"],"enable_msg_events":true,"port":63402},"up":true}},{"node":{"config":{"id":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","private_key":"7652297b6b2c9a5339f9d375aac2c9b81f0274e3949b4033e513c02802f040bd","name":"node_043fe7085e8c90c18270f84dba5fab138e50216a1cf8d81a3794d156fad7fc81d1422aff169b244b13f91d73eebb5de464f97b1b93b3ad2a58959cff19238842","services":["streamer"],"enable_msg_events":true,"port":63403},"up":true}},{"node":{"config":{"id":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","private_key":"7971b1a36d0caacd64acbd61a149d41c05102d757fc313f2c49c6b2185bc22d9","name":"node_329145e75496cecb5f5c8f00313a52ddd8c0e8cd27ef1b2bc1b2b56e4d4089aaf5a7a3c4d9a40bdb92483fa05bd24d1cd0fd51883e30439dffa0fc855e1a7cd0","services":["streamer"],"enable_msg_events":true,"port":63404},"up":true}},{"node":{"config":{"id":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","private_key":"62692081cdf8e04e73d8942c5fb423f153ea6d32d16fc0e3b05c10927bcc42c3","name":"node_2a63d875e715c2a43302d32d86d30c7d7faed46c08a67bf488762637216b99dd87333a66df6d9f3a57df863b1f1a219ddbeebb9f3e92e523bd08540a195448ca","services":["streamer"],"enable_msg_events":true,"port":63405},"up":true}},{"node":{"config":{"id":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","private_key":"bff5d02d0e187260b2ac19e027a5a8c72d358aa420a1dd22dcc8d34a921a81f7","name":"node_0deda014fa3c0bc8f37d853e1448f95f56f97048c28797d72258fd3ba2f1f776ae11566197466596356cd172847ab02a89f4cf047e58383249fb2a4cd69b6206","services":["streamer"],"enable_msg_events":true,"port":63406},"up":true}},{"node":{"config":{"id":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","private_key":"e2478cb11c2e4c83e5be5962e0a2e9dd367bc4bed98c7bcd08c211f35010b4f8","name":"node_c332fe1f9b6e25f72c7150631ffa6e0929ff6eeab5d17aa45eaf669bdde869cf404505ae990a529aa3ca797cd0a96f31cc41431a5d4a163132be566f91623c08","services":["streamer"],"enable_msg_events":true,"port":63407},"up":true}},{"node":{"config":{"id":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","private_key":"c4dc5aeb69312070307af3c8a24d468a0284733f29b07b5407e0819cb054fbdf","name":"node_5566111b7f14d8ec83ba6456488f3fc5c7e2c86bf406dead33b814e1ee9b569d34015a4d88226b7e28fff7784395c086d106287cbbc80acfe75b05cd6e12903d","services":["streamer"],"enable_msg_events":true,"port":63408},"up":true}},{"node":{"config":{"id":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","private_key":"6832f6f7e27fc6e2c9745c44ea7004ffd4f6bd869b779e15ac0a4a2ffade7999","name":"node_b4a5efa9028b2d196855393892f79993c2812d02b758f98813ddf82c5d943faf6d66eff811cc5a51936c118f4c768c0d13b54902095e040c602761e63c08655e","services":["streamer"],"enable_msg_events":true,"port":63409},"up":true}},{"node":{"config":{"id":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","private_key":"3362a08daff495b41e00fcb4786a68fff7a58eda86b6f6cb61bef90aaa604daa","name":"node_adfba6d883cacbb141cd8c59ee04d7e5d520f1ce31a81e5db2d8b2380bf801c1fe4b265a66b71f9643d13a41cb1f6fb4b83399be786da4b6e171b6784bc56e49","services":["streamer"],"enable_msg_events":true,"port":63410},"up":true}},{"node":{"config":{"id":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","private_key":"1d18aaec8f9b90606b18283e8527016a8122999804aa11d280ab2bb37f14a948","name":"node_2bfba66ec9d63e928d77d455f2e10a14d6213e515099d5db14fa44a8bfc147eb0fa7afa9aaccdc86453c6903b55556059a2e13dd61fc494127d4a3ec173bf9ea","services":["streamer"],"enable_msg_events":true,"port":63411},"up":true}},{"node":{"config":{"id":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","private_key":"757285cfa33b746d1bf24044430d43f5ff7401cef2452217ac9fe5fbce629acb","name":"node_0b7e1e5acabcde503ad827e45724402406114a513f81040a379b0f82df2eab4456b348b27936369c49e3c264d971c6a9e2c2217fdbc5e5b93ac6fc219957834d","services":["streamer"],"enable_msg_events":true,"port":63412},"up":true}},{"node":{"config":{"id":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","private_key":"cc0bf84e41ddcab9146ec892653a911dce5007786d77ec7a32e490fea0a29687","name":"node_7554993f6efd8d9016ff525ae73c41ee2e0dbd4970c563ba9b61a99c1c8943b433c4b7d48450f6e0fbc9ac198d907698093de20e6c1f7755520fb1e1cbee4eb4","services":["streamer"],"enable_msg_events":true,"port":63413},"up":true}},{"node":{"config":{"id":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","private_key":"d1add26924dcfc37eefccd6271759a9b0a2052607f3698be305e1c9bcb47ea66","name":"node_4fe37f2dfb03707c90a6fe91dbcfd7497db70ffc20043091d50e1cee573210c144e8749340f2c3cb70fe8fc51b317d49e8734dc51ce64b3cdccdd639ae35d1ae","services":["streamer"],"enable_msg_events":true,"port":63414},"up":true}},{"node":{"config":{"id":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","private_key":"fb8563b48e2c07948cc2347d50c953b2b4bcd79a535c2ac597d8f8c7f1ffa8e6","name":"node_a7507aa5665e165ab2e2a07def272f0677f9d6d35bb82268a34214384e7d8ef7635a299368752e63cfd02d4e60231076baf23cfa10d17492e55181b391ecf335","services":["streamer"],"enable_msg_events":true,"port":63415},"up":true}},{"node":{"config":{"id":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","private_key":"f7b5d2c9faba98230f0e0bbd82106d1fb949413a7940eec52e71e9c5c7266d3e","name":"node_7e2b0b4f3b55e97bd7241b984ad117af33bf3baacd22b3ed503a8a59f75828df745fb3ce3be4276d83eb484e64d9aa251103fa994ef119eaddb97a3503b9f292","services":["streamer"],"enable_msg_events":true,"port":63416},"up":true}},{"node":{"config":{"id":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","private_key":"61a9bec441ae9ada2f3ed71874596db20f2807e921453ec39145770056e3cee5","name":"node_460531928a4b084686343c8464b37c3452bb3566045698d08a4692864de5581a9eb1dc632329e7d3ccb73ec31ee7693787d69df8458efaba9a7105d87ee2e053","services":["streamer"],"enable_msg_events":true,"port":63417},"up":true}},{"node":{"config":{"id":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","private_key":"56e11a31d85d33461e13dd635ea6c0d0be892feb3ccc9dadc327bbd855401d2c","name":"node_70ee3c7e02a123f78345d41c386e413f06b51f1ab346c2c472891eed7dd26a1f14e213a0f4f2d872859b9b535936a6d9b072d2604456f76221a422710411822f","services":["streamer"],"enable_msg_events":true,"port":63418},"up":true}},{"node":{"config":{"id":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","private_key":"6df50913c97d23ce9e4ed894465ae4eb0f562d595e46d694b47e72d31c8bc8fd","name":"node_049a2b0ab4d49789dbbe1837e2d2ee5220a9401729ea87ab29385b24d79cdce255c3d2b5de6484d49ca6ce07bd41832598260c0a8c290e01d133d77f066f2f99","services":["streamer"],"enable_msg_events":true,"port":63419},"up":true}},{"node":{"config":{"id":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","private_key":"164a5b537bdf9173b59b281a68d7da48819c2367e5b5faa1c94c74453a413015","name":"node_1f6d803a4ca186463772850ca0901fb920af7e74fdd2480c3c368fa707838ee91bbcfb57d5e3510c802b9b85f2d954f04c9b675414274bdaebae6488dcf94c10","services":["streamer"],"enable_msg_events":true,"port":63420},"up":true}},{"node":{"config":{"id":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","private_key":"0b14673d7790bcbb1b3f0d042dd9b22953002e6dd901486b6f203063bb8b5a79","name":"node_979838eaefcff456cf1cd9c47ea46854704f5757d8d7ab907019bc422b01af4d62252579bf045d143fab491b0bab823190e2782a457fbf51aa99ae17ec9e145f","services":["streamer"],"enable_msg_events":true,"port":63421},"up":true}},{"node":{"config":{"id":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","private_key":"5d6c015866ee2afba25f1435274fb61e0b11b93829309bccad6cb662e5a4c8fb","name":"node_ed6c793eb4565aa9d883a76fad6c97ad0b878b9ef0235e11e89db1af25a9653205f725c6ea258b84bde134f1a6437c6d109b859d17509e5016c4ab98be59032a","services":["streamer"],"enable_msg_events":true,"port":63422},"up":true}},{"node":{"config":{"id":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","private_key":"acbf964dfcd41c86715a5ecb9c03818b577cbb0755692cde879ff1e4b09e5df6","name":"node_6c143960dbe3ba4c95e8debc1fda5f420a2a673eb46f7ff7d9a30f4cd2067e67ef8926bf17f0c99b16c79b6dc066b52409a11d47117d4fda4211636b1b74f96c","services":["streamer"],"enable_msg_events":true,"port":63423},"up":true}},{"node":{"config":{"id":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","private_key":"0b325cafe8524b8c126e860a6295fdeff6cf26da5e8eb426b86b25ba049c942b","name":"node_7bbb3f3ed51cf84c077806fbd6d3578e105bc32aa6043da188793f066ad6df383a9f7cc0bd3124f4c887704bd188d480ce264fcdf178905bbda3b270927ea138","services":["streamer"],"enable_msg_events":true,"port":63424},"up":true}},{"node":{"config":{"id":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","private_key":"e03e1d397bdd121257b1cd781c14847cf220f23fa837a4ba7b48f7b0b51cdc3c","name":"node_2b70e5ffcc0bb1c4f8acc09dd1016e67c9c96c92d091ad481efbb71bd8b2a5a5869c6d668617a9b2cbfe91baf5edfe150c3824c84d90899a974099071d171441","services":["streamer"],"enable_msg_events":true,"port":63425},"up":true}},{"node":{"config":{"id":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","private_key":"8e1b0bcbebda90c6f0ba8edadd9133b28b77e49b584580e1219654aeeb9e3a2c","name":"node_f5c1215a84a56d52f92ca0dc3a32df98c98a9c2ea2e9a34560210c16de1b440d20d043c8c25955dda8c22e55e92ddb49fd82e8b9b84072aabaa755a229bb19f4","services":["streamer"],"enable_msg_events":true,"port":63426},"up":true}},{"node":{"config":{"id":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","private_key":"ec0e383740a40976e4b9195b6a89e9497e9562729d196b3febbfea319be5dbcb","name":"node_8c6d77833bf1a98beabe7a92d985d13d52fb2e50768719ffbc6fce21ea676802a074b6e620b3ef80e12fad04f94a3c288d91df9716a6cfae09ef073b9dc1f2cb","services":["streamer"],"enable_msg_events":true,"port":63427},"up":true}},{"node":{"config":{"id":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","private_key":"a8c69a5c41f2362bc5de8589f3686f3c59b02b58cb7139ba2325f1a7ff62c39e","name":"node_b3316f4fd7dec218a52331f25d17a2faf0f2a417808d7dbb80038154abfbcd2d78da074837b648cff28675f4aa0d65ddb7d15abf3d7e0391d401e313a3ef24a2","services":["streamer"],"enable_msg_events":true,"port":63428},"up":true}},{"node":{"config":{"id":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","private_key":"65ded6c2ad477ee077e81c1aa90fba5d4e0d794ea8dd5241a1545869c895185e","name":"node_60725e8d0e9333636e598dd666f459b4be898d9abc095ee2c1db289673e7e969b50e2093956fef5a2f1d23e2040159bbabaaeab17fc6dbbac3f6acab766e9e60","services":["streamer"],"enable_msg_events":true,"port":63429},"up":true}},{"node":{"config":{"id":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","private_key":"9e522b8e7f94aa50d51d7ac396a12701677f86d0f9ad7111b329ba8229880db1","name":"node_48a5e01e06e297dc1c640ac9601171495bd70fea461c60e7e6e2532695e45fcf68183c2e58b5e6931a6c1c094f5331efbd7f2d93d5f84efdec5a35afa2124438","services":["streamer"],"enable_msg_events":true,"port":63430},"up":true}},{"node":{"config":{"id":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","private_key":"2325b0e86e0abaef149e6063ff789995d1f6d863de595a5abcebffdad494ebb9","name":"node_5dc69635f6d573c824ea83b18593a47f9f21a6f91ce18d2bf977c97d21f8d2a8ce88829244d12a07d949bbd52fe8a2035bc89685fe1bdd4ee20d766d75d3deee","services":["streamer"],"enable_msg_events":true,"port":63431},"up":true}},{"node":{"config":{"id":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","private_key":"dbdf629720f7cd6d4a8e26a5bb6da882212d6cbf43ddcda4712539c3db89bbf5","name":"node_ae4e21e1587a8475afd299e00ca7085c7bf2a44c2c64a3068f12223d9202b0125094385319034691ec26b497ec9cf18fe8c0839224bac1b84279410241cef979","services":["streamer"],"enable_msg_events":true,"port":63432},"up":true}},{"node":{"config":{"id":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","private_key":"315e74a348a3f8e172319c29da33577435f6415466e8cc289af2dc7e142987d7","name":"node_0b30b36e155db04c448b662c4df695068b2331cdbe2772aae5fda84159e977515a5ff2e156bc225a9281fef2383926ba8cb11e9c1846fb40db241e524ac14e29","services":["streamer"],"enable_msg_events":true,"port":63433},"up":true}},{"node":{"config":{"id":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","private_key":"510061145b0b868f1fb7e83b850d0901227724f4559e912c0561ac310308ea80","name":"node_17a79cb279306b6bbd35219278f6bba03111079d6c4fadcd3c5e57b09678e111bda5f8e36ca3d223e51e255d6e857363b7741e438b32ec6e6c0dc1b224071081","services":["streamer"],"enable_msg_events":true,"port":63434},"up":true}},{"node":{"config":{"id":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","private_key":"b4c3b4d3b3fb735ed7f1b4dbfa53fb08ca505f7570d376ca8ff9ba10c108fea8","name":"node_617595a230e0a74a3db3b47cd27b941e02bdee9a84cdfa8eaa63a55941eb5caa79e20fb69726a4d46a0e5aeed24039f8c5a20679a692df0bc140f42558ca9a2b","services":["streamer"],"enable_msg_events":true,"port":63435},"up":true}},{"node":{"config":{"id":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","private_key":"0ceaf25d118fd30dfa73bfe157c4bfdbdd7bcdc44e699e71e2e397eff0988045","name":"node_7808fb798d22e78fb1d39b87ddf99a503f820993bc64149eca9e81d9d58fc1adea60d8de14a4f06cb89f3190c0ef0c5e182621a14c9361ccb7e0cee667599cc3","services":["streamer"],"enable_msg_events":true,"port":63436},"up":true}},{"node":{"config":{"id":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","private_key":"b8dcd04f9dd7c7d9522112f1d10c32738ce2283cb755c14b83b3e7d8d645c4f1","name":"node_f039df8a3206e6e17eee8e95010038c450cb4cc0b5580ed5795d4c21802e1e9d360f4528bdca794f457932b1d6a818862ec847357a861c488332ef6d9480daa6","services":["streamer"],"enable_msg_events":true,"port":63437},"up":true}},{"node":{"config":{"id":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","private_key":"e0f1d278d1346984b7b19789e39ae0ee607d17f0fc7538e8dc8537b44c09e142","name":"node_ce0a09bb6fe4c9c93c3dbd800ca9c9ac0714f26a8f8dac2149b6ce7a9011912a5621ea2e45de35c4d31dfe5add00558fdba5dd21acf2d81ba391e82b5b3a5804","services":["streamer"],"enable_msg_events":true,"port":63438},"up":true}},{"node":{"config":{"id":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","private_key":"6c9376463118cd8a2c68423af478150a6e0a1b811b922aa7d35974ec65943ad1","name":"node_b2538d4edfa736bfe2cc21326a44ce62f716b3480eac93584a2233b69c98883a2bb255f246218a58cecab1d0d176e6d1fbba9782fd70d4603e01742299b9ea9c","services":["streamer"],"enable_msg_events":true,"port":63439},"up":true}},{"node":{"config":{"id":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","private_key":"d391fbaa56954f68499674edef05d07d58c5512ae18166b141c961a4dea175fa","name":"node_aa9a94d6e4eaaed20113c21752c224e3a052abd3769bd6e832759dbaf5154a943cf094eacdcb0727c2fe51a11bd7fc0793d7d5e3312b0aba89d428a00e1fde0c","services":["streamer"],"enable_msg_events":true,"port":63440},"up":true}},{"node":{"config":{"id":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","private_key":"199542f222419c9f399da0655278169815321c4420c8e39a377faf1446b6da1f","name":"node_65e954e60837bda10654480b227fa3bcc6e63356c52079002a27e836cd82ae2934ba77da60080e4b9f2d9324b982b24959bfd9624302e6c330408381054b43e9","services":["streamer"],"enable_msg_events":true,"port":63441},"up":true}},{"node":{"config":{"id":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","private_key":"ff50f9bc8f6ce42cff12b697c1d4880461773518aaf5f25e5c8a03a8af128fa5","name":"node_8ca3b63cb84f1e9883d82809a9b6777ec1029ecda96fe93b4d494ee9cbefcad13f381b3e480136e542e01054fe1ede66c65db84a0009871ce49383db461c8438","services":["streamer"],"enable_msg_events":true,"port":63442},"up":true}},{"node":{"config":{"id":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","private_key":"2c15cd49d4a7fc8bf1acbb4f86987efe85c77ba2712f82531bf893084ef4654a","name":"node_caaf695c76cf7c047d3f3bfe019d01618e4871cee8ff3f347913da815bbcde145771486f916a44d03f59ea9bc217f169fd0c0765fda3f9b9b28d02a522e180b4","services":["streamer"],"enable_msg_events":true,"port":63443},"up":true}},{"node":{"config":{"id":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","private_key":"4c9c04de05a7a437923df855213efcc8c9489ba08352e267097b6bca9e840fba","name":"node_b080891d4ba6d3ab224984360597f9c555bd1367630f5420bfaf230419a05b2be58bebf1554e53eb4c0da81cfb66d4f7697dd65143f11841ff62d8a0d82b6b67","services":["streamer"],"enable_msg_events":true,"port":63444},"up":true}},{"node":{"config":{"id":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","private_key":"5b756c056cbcd8e0a9a926f6ebf3360d7587152f836459cd22eafd76c3984af8","name":"node_2ca05ffc0ad771e1e045a47f1c0a79ce374a25e3c0e53c2a80d67e7479677003f62880251a83a5074f1c9651d828f1ff7e352935a9df141c1eb75a0c59b00a8b","services":["streamer"],"enable_msg_events":true,"port":63445},"up":true}},{"node":{"config":{"id":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","private_key":"fd26d9072de53e5f0a3d88d7c32e80650d289f661906c9837a7a0a003f3520ac","name":"node_8d4920d6e3a6717699b5a3af068cbdfc16858d7e393d158d41b1b5f345b47129eef89e1d055386c518f400b134678c21590f0317dea3436d4cef60f45455cf12","services":["streamer"],"enable_msg_events":true,"port":63446},"up":true}},{"node":{"config":{"id":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","private_key":"3e2d345fa05f2ec2c8c4ae80fa808f0acaa098d08a2a0e7be1a2749f7d01f0e7","name":"node_b6a998dea59194cc60ce97c7c9702368411889cb6905516b23f41cc5116fba8d0f237d418318eb0c333cad18003c0e9a6bd8c99080520771f2bad640e2e5ec1c","services":["streamer"],"enable_msg_events":true,"port":63447},"up":true}},{"node":{"config":{"id":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","private_key":"69afb2f43d398d53995f3880ed20e91b1d92307e4f7b40cc63a785ebe01f5e9c","name":"node_ff6f94005d1df7677600069764855c1c2aa0543cbe9f480f8feefec76c49d9e2c7bb2d8e38c89e9430f53f8b593d93f143c45985a56a5a32c736128214c95eda","services":["streamer"],"enable_msg_events":true,"port":63448},"up":true}},{"node":{"config":{"id":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","private_key":"30cd694a144038e53930a6b5e32f95f2c9caa886829d241c282f385107d7b824","name":"node_315b8a1711f680c2eaa607e35ef7a9e19c2b61721af8a7e08f1325dde1fe33cf1f47b3cc4acf12d541631041cf1b42754875fd1c9b66ee32797b72b9f7711256","services":["streamer"],"enable_msg_events":true,"port":63449},"up":true}},{"node":{"config":{"id":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","private_key":"c1480926443179b2e410d0303830b51d36dcce107b45da1494d87d2bcfb4f2dc","name":"node_396c703d27bfdddf91761f134cbf665fe61e0b3a5d24036a4105a625f72e8c28b821e9200f20d6e8f8b3ed6b95bda6b8accdd840c2f786720b7431e3af2af981","services":["streamer"],"enable_msg_events":true,"port":63450},"up":true}},{"node":{"config":{"id":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","private_key":"e91e000d37d0a336fb7eaab8ca7baa4db177108f2140ee86f7bef5959b617e13","name":"node_cd8815d66aee8bd488d4e5e25f0cc9c71cc65349f701ea26b1d6cd9c039d16fcb473dbf270a3b33187720ccf4b0ce4f78a6d6edd05f4fe804772d5b6ec45bbd3","services":["streamer"],"enable_msg_events":true,"port":63451},"up":true}},{"node":{"config":{"id":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","private_key":"991b1ea8ca82edeaa0c2d410b9cc297064d8d6668b9c8fb3277a6e7a934bbdcc","name":"node_7174eca109a1f717653918224c8cfe1b7fbd666405196760913593401eb79f2c7e41003b01f5a458940695b27a4673443c7621a169db7fd968994e552995dbbb","services":["streamer"],"enable_msg_events":true,"port":63452},"up":true}},{"node":{"config":{"id":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","private_key":"0c19513041b301f0745e678aa627a44b7cc58099c6616d5fed0f4e4774c5378e","name":"node_59b53f8a562bee519276e0eeccfcf8c975d3102f5d0cccf5abcce291a8a5bb817c04604f123686177a50a03b9d7559ac469962d0159d1d93e4ce58a304d04b55","services":["streamer"],"enable_msg_events":true,"port":63453},"up":true}},{"node":{"config":{"id":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","private_key":"c4406e8f5a2cc5a62bb4c36a3c52cd7831b3a82f06cc18e2286589a6e76a68eb","name":"node_f915e2398aa5d4370de87504dd76c21a7d0be2581c2ab55b7a47743f1bbaef36384eaacec22760f1e914ceac9d96a10c3d66eb27475ef444e77fee979e6e88cb","services":["streamer"],"enable_msg_events":true,"port":63454},"up":true}},{"node":{"config":{"id":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","private_key":"770f973cf2fda14f46f1e91ae608e0b87e0f06b2f8935bba64a43c6998737b9d","name":"node_1b6cad4f9851cc584c5d1405f976bb51a52e27ef4525847df543dcca65ca5eb1ef229dcc68ccbaaf00ab1e044cb5990dd213c805bdb4adcceb6fa70b5c61fdb4","services":["streamer"],"enable_msg_events":true,"port":63455},"up":true}},{"node":{"config":{"id":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","private_key":"2e741e89b7e631818e4edeaee9d795f912805724f2eaaa83e73a3a9e660da435","name":"node_ae2a996d3b562cb47a564934037949da83b1bfe194c23754f3dbe2372ec27654f4f3b6cb7f394570f308025589c065870477667e5560dbe5a8ea1625740699cf","services":["streamer"],"enable_msg_events":true,"port":63456},"up":true}},{"node":{"config":{"id":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","private_key":"c8d2153c48467773449a0c055a3527062b7ed043e491b6a81c6285b5bea823fe","name":"node_ddaf3f8478501cda872c056c72063eb64d5b871fc5fff70704872802289dd2d348f73bc342b7f148a90cfaae2448ebf16fea196be9df891dc71a57fb410d59dd","services":["streamer"],"enable_msg_events":true,"port":63457},"up":true}},{"node":{"config":{"id":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","private_key":"784f624bd696dc1d6afb5bb977c5e6e76ab280e55c95949a68349a62fcc32c70","name":"node_5eccdbcb15ef42dc96abcbcd8b8db75d9230de10e3c650620737f6cc04ba4fdbf59ded5daa801901c191be186c329ebcd37ba83bcf794064ad4e11bf10d3f775","services":["streamer"],"enable_msg_events":true,"port":63458},"up":true}},{"node":{"config":{"id":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","private_key":"f4e049b715346f2e7ac1e31341d0df32e7ba9ae1ab6d9165b7407873add289cd","name":"node_8dd8ad560af84bec579cadb33d51711aa61b6ed22705010336df5a71a94591173b25e869457429c4a199b205fce8e73530e28203e18b971c2001715e610f152a","services":["streamer"],"enable_msg_events":true,"port":63459},"up":true}},{"node":{"config":{"id":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","private_key":"98e1264b7003ea79b1e799c87cb3c8e1aab2ea2e68531cf41f093c4b9f6a98a2","name":"node_28d3232c43de54ffdaf08f97b334c012738648b04e2876c7e751a2e352aaf4d550d6efa976c5a8edbfa8e88b9d04a0fca492b81c3756ef673ab74d34182ca711","services":["streamer"],"enable_msg_events":true,"port":63460},"up":true}},{"node":{"config":{"id":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","private_key":"357e1ab3ea555b0928cf10ec54d8842dc9c0b24a90fbe32ad1a819c018b0c26a","name":"node_be514f5f17f3177235acb24112b578edf0e373c469073226e547d18080905fd062d572be18e943f13bf9fcf5871e89ceb630a1b848a0e370ef8ef8c6d997a363","services":["streamer"],"enable_msg_events":true,"port":63461},"up":true}},{"node":{"config":{"id":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","private_key":"ad08dbea349545a36c8160aa460902c7d2744218b8ff5b8af229a17675560755","name":"node_66d0c5da973d9dd65350ae1ec63776872cdb7ded6afb6f51ae82259f6fd35e884375d15de290625f02ed2e5cdc3f591decb45e5fc64d5b0f835a216fd196f5a3","services":["streamer"],"enable_msg_events":true,"port":63462},"up":true}},{"node":{"config":{"id":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","private_key":"8e27f11572dc1832939cc80ada2ce9604fb91d0633410f87cd7bf68e4629b32d","name":"node_2f360209383d6de4ebd3b4abaf77796520b8654270b03f2151eac4a01b4417d7e0668c1f9ad30c20ff49aa8a0ab33dba5e6095619d1cf04b7af841722ab773da","services":["streamer"],"enable_msg_events":true,"port":63463},"up":true}},{"node":{"config":{"id":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","private_key":"4a7cb437d9c60831cf5e8c6d02e0f62205c1a2de83d9879d1d82ecb6e9b99031","name":"node_b35f418c7935cc54278e90978c3ef1521ab91daeaf9f1ebc1cd25211611ade091cac4e1f009d71059279d507322a4536501980ac0dd44caddc52fd4c593879f7","services":["streamer"],"enable_msg_events":true,"port":63464},"up":true}},{"node":{"config":{"id":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","private_key":"18216d0babc8a162ed03e1c866e0e90d0ea5fd5c2c2ea3f411886de38bf58640","name":"node_fe8ac5d33cd8ab6a1dad9567cdfb89b431a5c4f4a584fc608b92e7dfd06f70988e71e2f11f9fda9ee797c9ffba83bc085939fdf2522dde39f28202be92650566","services":["streamer"],"enable_msg_events":true,"port":63465},"up":true}},{"node":{"config":{"id":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","private_key":"bb317b572ed4481d33b6a67a267264366929dc0e2c12ade71a203b8b3159be03","name":"node_352407b42726dcd1aacc46a912ed8124b8b6a3da4e33dab742e40aa2452953d35dc8f42eddc76695ae2317e9f15dde2cd21be4ce826934695ad1847455661d1b","services":["streamer"],"enable_msg_events":true,"port":63466},"up":true}},{"node":{"config":{"id":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","private_key":"bd9c51ff7ece28d9a9808386358197110aa9a2a7d4715cd033a94c4d1d54ee76","name":"node_b137cf2291b530a39516d882200848e7f27a2710e0839b4d25b4f367bea6a0c3aaef8c7c7851c00a2945adcd819ea0508610afc1f453b8bc512b7b4d4faacdf3","services":["streamer"],"enable_msg_events":true,"port":63467},"up":true}},{"node":{"config":{"id":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","private_key":"6113b0494786bde04defd28e36030dad5b4368563b7b6b63c08475c18980a380","name":"node_1b063741c76fe65e62b4eae42751319d0cce66f22dde9f1cf83d6cca249a0e65bc7f6f22597697362fadd226222fb3847f8e146961969d1b4c9f7e475389cd8e","services":["streamer"],"enable_msg_events":true,"port":63468},"up":true}},{"node":{"config":{"id":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","private_key":"9875ab2bbcb806524e7fca84b6aba663cbbbec2d533a47e2df6f3fc85e1d8e55","name":"node_657d5370319128d24d925b41065eb619409d63ec6280975d78877a4028287463f6442f5206dd703569a05b2b542ad8bbb99803da265408208d6356a26d283d08","services":["streamer"],"enable_msg_events":true,"port":63469},"up":true}},{"node":{"config":{"id":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","private_key":"43de756eb52b963762bf62085de3293461cb2c53dd70baced6e3c86981545add","name":"node_a127faa19dcb7da585983d36a8e9d3e9a44a6db68507b60c70da71011f44ce377944802f39cd65f5a705cd8249ac1ef7ed8fd699349098f3f8e23b37592c80ae","services":["streamer"],"enable_msg_events":true,"port":63470},"up":true}},{"node":{"config":{"id":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","private_key":"af731618471023aff01cd45c69001d7fa95752c4d42c68df95eab820bb70bff5","name":"node_2e42f845d0393d1682add54ee30b60a953ed283e75d347bc6719ae0e91f6676282e7960f1fd52e5803d6b341fb3582c724b4f9cfd7bce9ce85f13ca480c7e72e","services":["streamer"],"enable_msg_events":true,"port":63471},"up":true}},{"node":{"config":{"id":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","private_key":"3444df2021104f7c577b25a23c3fc0231efb2cae1375cbae67db5602cbbe13d9","name":"node_6b01079463ec2f649db8634cb7a596261c79a8f714d954c772528e0547b017f8ce405e4a0ea9d32270848180e0f77b8c0b022cf95c85e777626edd4d24ea21d2","services":["streamer"],"enable_msg_events":true,"port":63472},"up":true}},{"node":{"config":{"id":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","private_key":"638383a2262ab3e1cb5a1cdf134fb5a0077f21e3bf90118cc03311db43b1cf0a","name":"node_2245f3bf1a3b4e92f912affc75f757cf648b20474c11ffe947884f216b8f24f9dcb6e6a0358a4061b8517478ec15027e185b2f05a777573b4940375bf4aaf2be","services":["streamer"],"enable_msg_events":true,"port":63473},"up":true}},{"node":{"config":{"id":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","private_key":"269f2cacd5854ad6634cd178738e910a093dbfb55bcf42ecd1f1d621f5829499","name":"node_d4b7c787981abec24353c7d496661692233797e3758189bf909a69fe87935bf6da0940daa4f12e81f20c5e88f70b472113688b71a0ae2f91a73ee0e6ff4c8591","services":["streamer"],"enable_msg_events":true,"port":63474},"up":true}},{"node":{"config":{"id":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","private_key":"1f5c7e0be8cb7bacb5c28bf9283884761fcbe8c6b353b5c821d204938da6aab3","name":"node_9c30ad8c85adc7bb52ddcfab2e661cc3a854a689eaa59128d35129d02cd5b0f8da4a44cdd33934a8e2c8fab1760c16d6f2e1c5eb227dc819e85624e63343c069","services":["streamer"],"enable_msg_events":true,"port":63475},"up":true}},{"node":{"config":{"id":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","private_key":"975ccce3cea6896e2dc7fb2fb8399b56deea3eac98f96dfe331602f06386ebe2","name":"node_c8b0dba45104fc7c7dff3ce078a0d3f5ade6198bb4656e2bee8076387929133e5ef2bd293b130a9d4f6a6974ca17e8b4a8f406d1219880f1e0f99c65c63af5a4","services":["streamer"],"enable_msg_events":true,"port":63476},"up":true}},{"node":{"config":{"id":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","private_key":"381480a705e57052adb222beb50053c41122d1c2c10b111a16abfc01e2314d28","name":"node_ff1e34fd51953ed641b431aa657da21cb4c81d23e4eaa13c9cce526f1f1b34593d41f9b87a0e10387fe400c623638677c0efab15dbd1014a0ccc11f9ec92c417","services":["streamer"],"enable_msg_events":true,"port":63477},"up":true}},{"node":{"config":{"id":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","private_key":"22c94340e76bf6f9d70e933f2b3cc96d24f64282bc3d4a61621712e78500fead","name":"node_a78f18691e0dbf3c08fe9d7dec188e6a05a93833432fb99eb2b3924ab0bde7a44db2a102a65544bbdc4fb61bc3a3d569230d9843a335bf619167fb045d78ab3c","services":["streamer"],"enable_msg_events":true,"port":63478},"up":true}},{"node":{"config":{"id":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","private_key":"9b0568309c2ef3f512d43d9016f801f55741346b5f56da355dfe5dc54d652821","name":"node_e67e495385e7cacfe659b40d1ba94d4b1ff55eada70a4d9740a9e452fbf221672bd0a897b940e2a6bed71e2a16867fe45bf0ea0015435ac6d815690e263b1899","services":["streamer"],"enable_msg_events":true,"port":63479},"up":true}},{"node":{"config":{"id":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","private_key":"8ee8a33f33bc96603d61297c73e11d545ac229d887345e12f9fe834c7532e648","name":"node_aacff366e601e072a2113add9020e19b6612f3e85b6e607fdc8cc1b6991f43be0b1f835ed3dc41d1f2b3e0caf7fac252c8eb4c150667d48207fa92ea5f0a7455","services":["streamer"],"enable_msg_events":true,"port":63480},"up":true}},{"node":{"config":{"id":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","private_key":"105fa3b2d400eefda08235ac7c0db7af48667dd5a51b8d001d39e06753e93872","name":"node_2f903b2fd4f9432b7d91b5c3e4c7ee3cb9c56fe7efc4baff0edd06fc75e4b7492f2c3c929755746df59c9f95d437a12ba40ac138d08f5bc7aa091f49f3b852c2","services":["streamer"],"enable_msg_events":true,"port":63481},"up":true}}],"conns":[{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":false},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":false},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":false},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":false},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":false},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":false},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":false},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":false},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":false},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":false},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":false},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":false},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":false},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":false},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":false},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":false},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":false},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":false},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":false},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":false},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":false},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":false},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":false},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":false},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":false},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":false},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":false},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":false},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":false},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":false},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":false},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":false},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":false},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":false},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":false},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":false},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":false},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":false},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":false},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":false},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":false},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":false},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":false},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":false},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":false},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":false},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":false},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":false},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":false},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":false},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":false},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":false},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":false},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":false},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":false},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":false},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":false},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":false},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":false},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":false},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":false},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":false},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":false},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":false},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":false},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":false},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":false},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":false},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":false},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":false},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","name":"node_a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","enode":"enode://e70237456671b100c2341a568d85185f57c09cd699045f8c51f5a7bd09217bbf764379a2ad51b60e5671b978ee72cd33416e17520c75e471b4722f59533e3a4d@127.0.0.1:0","enr":"0xf88fb840ea2e2964e4c4bac440d5d5167638da0163abb3df513fa17601c4b04def5883ec78df971cc20ed10c00a8e9b5ba290305181507c49589c3c9026d28161f7dbe080183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e70237456671b100c2341a568d85185f57c09cd699045f8c51f5a7bd09217bbf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pG3VNeO8jxEaiyzlWUti6HdBw5Xoorj7rjPt0py4yvg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a46dd5\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 605a 00c6 0ff2 154b | 146 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n001 6 eb98 e775 fbc8 fbf5 | 63 e027 (0) e5ad (0) e5d7 (0) e547 (0)\n002 6 8505 8f21 88a1 9076 | 20 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n003 6 b2a5 b02b bcc6 bb90 | 17 bcc6 (0) baf2 (0) badd (0) ba88 (0)\n004 4 ad98 af02 ae2b aeb4 | 5 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n005 2 a369 a34e | 2 a369 (0) a34e (0)\n============ DEPTH: 6 ==========================================\n006 2 a653 a6fb | 2 a653 (0) a6fb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","private_key":"1e57a9344381e01bf32e09a979ec63d899dde10dd84d70ecb6404de10ff2fae7","name":"node_a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","services":["streamer"],"enable_msg_events":true,"port":43161},"up":true}},{"node":{"info":{"id":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","name":"node_13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","enode":"enode://101db8d36d797326a36adc76ff41e54a39cfe68b7948bd87bab4e7658bd81db7a962be72ffe4d52e15e65a5605b4fd7b3c5faba7fbeffcf6ce906951a9c4c520@127.0.0.1:0","enr":"0xf88fb84015cb00dd3c456518171748d8926d78335c0854b346464bf9bded32abbcc19aef5852275615470f0fe25130dd8ee37eff80afaa0ef7c7d14ea0f4f60e98b56ce20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102101db8d36d797326a36adc76ff41e54a39cfe68b7948bd87bab4e7658bd81db7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"E9bLkxbiiZI+LR3n88lm0MurzjrNuAFxIpRPSrsUCRI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 13d6cb\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 cc20 d3b0 a46d | 110 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n001 4 53fe 4e5a 6e68 605a | 70 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n002 3 2f32 2c79 33b5 | 32 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n003 5 0b72 0af9 0ff2 0fc5 | 22 0b72 (0) 0a00 (0) 0af9 (0) 0d8a (0)\n004 4 19fa 1e2a 1c8a 1c9c | 10 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n005 8 17db 179f 1672 165f | 9 1704 (0) 17db (0) 179f (0) 1672 (0)\n============ DEPTH: 6 ==========================================\n006 2 11d4 103b | 2 11d4 (0) 103b (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","private_key":"37ebe30b2c356984a7e460228a022af51a6d955b24fb5e602226fc9b7cda2062","name":"node_13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","services":["streamer"],"enable_msg_events":true,"port":39877},"up":true}},{"node":{"info":{"id":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","name":"node_d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","enode":"enode://05700e757f48449baa479d9e9476883768725b33e1fc661afe18f3974b21d96fe414ceb6c1b7d6e501532e17c7ff740237837c2c812daabed849b5e7797917fe@127.0.0.1:0","enr":"0xf88fb840fac5d8d078a46572c426af0322faba829283795e739c471fc3d33d0395f8e49c52370fb9373e1c6299bc9c5b3716e5af57a39614e8848375d97a3687d2ee89480183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10205700e757f48449baa479d9e9476883768725b33e1fc661afe18f3974b21d96f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"07Deod06xx5+SjCUFjLuxTy5gKp8ts2slQQqVACoeMM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d3b0de\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 53fe 7dd3 605a 13d6 | 146 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n001 5 9076 a46d a34e b911 | 47 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n002 10 e54b e775 eb98 e883 | 37 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n003 6 c1f9 c6cf c620 c832 | 15 c26f (0) c1f9 (0) c49c (0) c441 (0)\n004 3 daec db6a d887 | 6 df1e (0) d863 (0) d887 (0) db6a (0)\n005 2 d7ac d640 | 2 d7ac (0) d640 (0)\n============ DEPTH: 6 ==========================================\n006 1 d1d7 | 1 d1d7 (0)\n007 1 d299 | 1 d299 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","private_key":"ca03d9ece7d38bee50629933e237f3019a21e19182e1bd49826c89f10e625121","name":"node_d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","services":["streamer"],"enable_msg_events":true,"port":42617},"up":true}},{"node":{"info":{"id":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","name":"node_605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","enode":"enode://a621f4d598855f913a837abe294df8a44fde676e99ed3976972afa30e977462ef16b40a84fb8f439031420d103f4021f5540aa0936b9d4d1e466aa23cae18e32@127.0.0.1:0","enr":"0xf88fb840ed422154098e8b2ec11a4d63bf0da7d8edd6aec4b81b5e574a6a95562ed8c0656a0983ebe8fba7fd52f8a50a73f3e705730466a0881af12efe9e510ad718fd680183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a621f4d598855f913a837abe294df8a44fde676e99ed3976972afa30e977462e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YFpGmRrxXNYOZ0E8cSuZ/48hFzyWp5kPJyitbKwrudg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 605a46\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a46d d3b0 | 110 8f21 (0) 898d (0) 886a (0) 88fe (0)\n001 7 0ff2 154b 103b 13d6 | 76 0b72 (0) 0a00 (0) 0af9 (0) 0d8a (0)\n002 12 5efb 5cd2 5823 5308 | 38 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n003 3 7125 7920 7dd3 | 12 77d2 (0) 775e (0) 7290 (0) 738c (0)\n004 2 6c73 6e68 | 11 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n005 2 67dc 66e7 | 3 67aa (0) 67dc (0) 66e7 (0)\n006 3 6337 6251 628e | 3 6337 (0) 6251 (0) 628e (0)\n============ DEPTH: 7 ==========================================\n007 1 6103 | 1 6103 (0)\n008 1 60d7 | 1 60d7 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","private_key":"09e7ba543ec6e7608729d561d0dfecef5bd8e50c9849d1baedfbf09f6be28e97","name":"node_605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","services":["streamer"],"enable_msg_events":true,"port":40563},"up":true}},{"node":{"info":{"id":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","name":"node_2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","enode":"enode://09caa0d3176bb2ab29defcb47bc43b066d3f667c2b923fcec05025ee44028c3c8f8151181b4715a567bfe6442b1696c1b5d4436e2673dae648713c1ced646d9d@127.0.0.1:0","enr":"0xf88fb8407cecec0b472dc2d08e251d9584eb234456d972c76227ef38539f0041d03df5e22e4ba13445b3e93db9a066c6c96db30cee8dc4ded48f5cd06f2161f2c21a1fc80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10309caa0d3176bb2ab29defcb47bc43b066d3f667c2b923fcec05025ee44028c3c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LHmvfqhfltt4l8+M200AKtIwgZTgOYGHbtuNkE72UTc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2c79af\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c620 cc20 b911 | 110 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n001 5 4e5a 53fe 6c73 6e68 | 70 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n002 8 00c6 0fc5 0ff2 1c9c | 44 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n003 9 3e8e 39d1 3b78 3630 | 17 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n004 2 2101 21a0 | 6 256e (0) 24b8 (0) 20ae (0) 217f (0)\n005 3 2995 2abb 2a97 | 4 2995 (0) 2a0a (0) 2a97 (0) 2abb (0)\n006 1 2f32 | 1 2f32 (0)\n007 1 2d36 | 1 2d36 (0)\n============ DEPTH: 8 ==========================================\n008 1 2ccf | 1 2ccf (0)\n009 1 2c38 | 1 2c38 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","private_key":"3721498524efb06914a5509b27d864ad186f58e36aab5c7593d0e9cd263282a7","name":"node_2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","services":["streamer"],"enable_msg_events":true,"port":43339},"up":true}},{"node":{"info":{"id":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","name":"node_33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","enode":"enode://7bd8d32df25aaea11952de45f43b3067ec805d9e5c021d0f3ef3ec8916a479dd7ecbfee5a23baed4b751b218c345dd7c9670b8838660d0f010cd1389511e67d5@127.0.0.1:0","enr":"0xf88fb840a37a97fe62ec10c3a463048f5dcaa531e72b6859a704ec6633378ca65afe843a02afe1d4678cd54a8f60a67f20f71a50363415c56c3e3107b4b11d493015e53e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037bd8d32df25aaea11952de45f43b3067ec805d9e5c021d0f3ef3ec8916a479dd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"M7XFIbQgjiZBTbLgXJqMzAAaUk2ShXnUTS500UpWWT4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 33b5c5\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b02b b911 | 110 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n001 7 6e68 6c73 605a 7dd3 | 70 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n002 6 00c6 0ff2 0fc5 1c9c | 44 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n003 3 21a0 2f32 2c79 | 15 256e (0) 24b8 (0) 20ae (0) 217f (0)\n004 7 39d1 3b88 3b78 3f94 | 7 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n005 3 3630 378e 35e6 | 4 35e6 (0) 3780 (0) 378e (0) 3630 (0)\n006 3 314a 30be 3089 | 3 30be (0) 3089 (0) 314a (0)\n============ DEPTH: 7 ==========================================\n007 1 3237 | 1 3237 (0)\n008 1 3373 | 1 3373 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","private_key":"fa8a4740b23a1fa3955c662fee2883cc8d1a1e26853b72c3acc66583d6aa2898","name":"node_33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","services":["streamer"],"enable_msg_events":true,"port":39497},"up":true}},{"node":{"info":{"id":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","name":"node_b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","enode":"enode://f909dfa9cf0586fa20c170d7affbef6b9b835d1603c91ed04c0854b16fa42c4eff293cff2e695634d99bdd6ec5a61f219637eb7d885c25b232685d17bd3572b2@127.0.0.1:0","enr":"0xf88fb84004bc964ea8b933d6a3b0265d90808e3f4109cca5b450a732ab97fedfaa6a55b245cab741804fbe671adca5d7a5ad32223302e2908db90622ca8acdba2f84920b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f909dfa9cf0586fa20c170d7affbef6b9b835d1603c91ed04c0854b16fa42c4e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uRG44tclMrfGb/X3v/pw9d2+6mkDqG+TMzmfDEtfD+g=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b911b8\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4990 53fe 2c79 33b5 | 146 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n001 4 fbf5 d887 d3b0 cc20 | 63 e027 (0) e5d7 (0) e5ad (0) e547 (0)\n002 5 9852 9076 90a8 8f21 | 20 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n003 2 a34e a46d | 10 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n004 3 b7ca b2a5 b02b | 8 b5b2 (0) b502 (0) b626 (0) b65e (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 4 baf2 badd ba88 bb90 | 4 baf2 (0) badd (0) ba88 (0) bb90 (0)\n============ DEPTH: 7 ==========================================\n007 2 b820 b897 | 2 b897 (0) b820 (0)\n008 0 | 0\n009 1 b95d | 1 b95d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","private_key":"2cb79ca016623c39541a82f657e334cd812977188909b562564102890d58ec54","name":"node_b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","services":["streamer"],"enable_msg_events":true,"port":45307},"up":true}},{"node":{"info":{"id":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","name":"node_53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","enode":"enode://b3104e6e79d026630bfe72e7d9efdb57be3f806110418652fb6840c1361f7d1e0e8521b82a7cf884571ce3b7bedf9787826e57b92e334766c65f24eb470f23ed@127.0.0.1:0","enr":"0xf88fb84015b01d0b7cd1ab6245a7bc8d8bb6c97f6032ed9a1ecc96eb5da3cbc3a3aa79f52a326ea510a5735c19c69a5ee802c07098946041df153aab94dad596c2bc21f50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b3104e6e79d026630bfe72e7d9efdb57be3f806110418652fb6840c1361f7d1e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"U/4sE5JlB6emwn0PswosNYxMe/pA34tfqOyJhsJFBRk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 53fe2c\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 cc20 d3b0 b02b b911 | 110 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n001 5 33b5 2c79 0ff2 103b | 76 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n002 5 6c73 628e 605a 7125 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 6 41d9 4109 4646 4c9e | 23 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n004 4 5efb 5cd2 58ed 5823 | 7 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n005 1 574f | 1 574f (0)\n006 2 512e 51db | 2 512e (0) 51db (0)\n007 1 524d | 1 524d (0)\n============ DEPTH: 8 ==========================================\n008 2 5308 534b | 2 5308 (0) 534b (0)\n009 1 53a8 | 1 53a8 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","private_key":"70c31ba2f1ff647ffa877b174d1fe7441de6f4ed5e17bbd9857812f35ab10cba","name":"node_53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","services":["streamer"],"enable_msg_events":true,"port":46299},"up":true}},{"node":{"info":{"id":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","name":"node_4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","enode":"enode://2065647ff3dd80dc4e4ebc9a2a8be828f0efaefbb62e2d2b4ccd246f0cc30aa51459e66d352c9ed8b5126ea9e76aeab74cdf95dcad19c9c9cc2fc3706e83d12b@127.0.0.1:0","enr":"0xf88fb840822110c309aaded4c3d0d3c1fca5a0910e094971e98cd41b5225e201d8a965831ec1d234aeb2560ed5dd98a3db6a230653d4e43c14afb51e34bfbf8de69341d90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032065647ff3dd80dc4e4ebc9a2a8be828f0efaefbb62e2d2b4ccd246f0cc30aa5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TlpGwAToXPhqAv378iQwGIJdAV3r+5oHehKD0wIpOzo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4e5a46\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b02b cc20 | 110 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n001 5 154b 103b 13d6 2c79 | 76 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n002 6 7920 7dd3 7125 6c73 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 5 5823 5cd2 5308 534b | 15 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n004 4 4646 461c 4109 41d9 | 12 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n005 4 4bcf 49cd 49ea 4990 | 6 4ac7 (0) 4a8b (0) 4bcf (0) 4990 (0)\n============ DEPTH: 6 ==========================================\n006 4 4c9e 4d10 4d6b 4d59 | 4 4c9e (0) 4d10 (0) 4d6b (0) 4d59 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","private_key":"cd1095af24a2b4f0a0fa3730f681b7d6c26b93a51081cc8f382764a83a73fb86","name":"node_4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","services":["streamer"],"enable_msg_events":true,"port":39501},"up":true}},{"node":{"info":{"id":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","name":"node_cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","enode":"enode://502433c8d1cf2f8fd7b92aefbf87918e268ee26b2850e20aeb3c4ce61c1cb2049af306124476e27a64b98fe49f9261b104ac5bc18643219c3718fd8c03296707@127.0.0.1:0","enr":"0xf88fb8404a286e1fcc023da2601459dc781096bc67a869b3de88ab00755589aa44b0389e18638b7526b4bb40b059179c918c417acbde016bb95edc6c9eefd89121cc42990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103502433c8d1cf2f8fd7b92aefbf87918e268ee26b2850e20aeb3c4ce61c1cb204","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zCA3wIlCoJTfEvRYMfKOABX8OsBNW48k/+qb86CwLDk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cc2037\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 00c6 13d6 2c79 7dd3 | 146 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n001 5 9076 aeb4 a46d b911 | 47 8025 (0) 82f9 (0) 82dd (0) 849b (0)\n002 9 e775 e883 e854 eb98 | 37 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n003 3 d887 daec d3b0 | 11 df1e (0) d863 (0) d887 (0) db6a (0)\n004 4 c1f9 c26f c6cf c620 | 9 c26f (0) c1f9 (0) c59e (0) c49c (0)\n============ DEPTH: 5 ==========================================\n005 5 ca04 caf6 c9f5 c832 | 5 ca04 (0) caf6 (0) c9f5 (0) c832 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","private_key":"d23c0a28f40bce284a142b72daad5397f586194601126aedc3df40587d9d45f6","name":"node_cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","services":["streamer"],"enable_msg_events":true,"port":35445},"up":true}},{"node":{"info":{"id":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","name":"node_b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","enode":"enode://08f5b135b35456f2574282474266d863656df0ef0eb157876e12d53c7d6e01e0260e147f6ba3f2b2a1119697aeb464cf61f20f648990b075b98572cb11685c0d@127.0.0.1:0","enr":"0xf88fb8406c19c1ab095388f46d4d6ef2da794ca56fc16daaece67a7e979009f62b74daee01fd0cea0017acf50b872bb9015ad225678c2ca166e45f0d74a1a305d7ded0110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10308f5b135b35456f2574282474266d863656df0ef0eb157876e12d53c7d6e01e0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"sCsBpcN8sFwoej3H0E4wXeJvjWLcOIVC7rQ+l9t7QoI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b02b01\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 33b5 6e68 53fe 4990 | 146 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n001 8 e854 eb98 f925 fbf5 | 63 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n002 9 90a8 9076 9fa0 9852 | 20 8f21 (0) 898d (0) 886a (0) 88fe (0)\n003 5 aeb4 ae2b a6fb a46d | 10 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n004 7 bcc6 badd ba88 bb90 | 9 bcc6 (0) baf2 (0) badd (0) ba88 (0)\n005 4 b5b2 b626 b65e b7ca | 5 b5b2 (0) b502 (0) b626 (0) b65e (0)\n============ DEPTH: 6 ==========================================\n006 2 b2b5 b2a5 | 2 b2b5 (0) b2a5 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","private_key":"473b45c9196c27d9ae4135ac8cbc2ea31c3a7f7c0b77117fe484b2a4ecd3913e","name":"node_b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","services":["streamer"],"enable_msg_events":true,"port":38045},"up":true}},{"node":{"info":{"id":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","name":"node_a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","enode":"enode://340c7a971a97f9d8f8868b1336bacbe73503e3e1088ac108d216a23c970b04c677ff52e704844600618f76887b06e7083345056961f77a396e2366191ae76f87@127.0.0.1:0","enr":"0xf88fb840f67e5492b185e03ad9fba3676256587139f92c1a0395454a66d28eab0ddfcd3f02717c57b13697f286929dc5ec9737a829e17a8632a202512d46dd89a8406a2c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103340c7a971a97f9d8f8868b1336bacbe73503e3e1088ac108d216a23c970b04c6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"o06i6H1MEq2yfWbCyVMAYD/1BBWXTgALvMaaWuBZ2/E=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a34ea2\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0ff2 1c9c 6e68 7dd3 | 146 1400 (0) 1436 (0) 14df (0) 154b (0)\n001 6 c620 daec d3b0 e775 | 63 df1e (0) d863 (0) d887 (0) db6a (0)\n002 6 82dd 8505 9076 9fa0 | 20 898d (0) 886a (0) 88fe (0) 88a1 (0)\n003 7 bcc6 b897 b820 b95d | 17 bcc6 (0) ba88 (0) baf2 (0) badd (0)\n004 3 ae2b aeb4 af02 | 5 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n============ DEPTH: 5 ==========================================\n005 3 a653 a6fb a46d | 3 a653 (0) a6fb (0) a46d (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 a369 | 1 a369 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","private_key":"68b17ea93b738afd30952707cc7ba1bcc7dbb9a01631477f8d2b2a7f76a83fb5","name":"node_a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","services":["streamer"],"enable_msg_events":true,"port":44293},"up":true}},{"node":{"info":{"id":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","name":"node_7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","enode":"enode://60f4239fd937907e183edf421b9d1df38ea30f43d5bee23ed23f4b7e9e7b801d14006d4e11987b57cd00d7470c31b17e35e6534bdb642b68fcb9f6becdbc4a41@127.0.0.1:0","enr":"0xf88fb84086961ac0d94caace96d4805f4c5c2470e4da31be8b2a85bde0d3ca0b156472865a13c690728f4e37c1986d173045b80d817727c2ebe0a139bffcdde97847468c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10360f4239fd937907e183edf421b9d1df38ea30f43d5bee23ed23f4b7e9e7b801d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fdMHjHEIeriNTSapYoILy3m4zjDpHB+aadS/jTgIaWA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7dd307\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d3b0 daec c620 cc20 | 110 df1e (0) d863 (0) d887 (0) db6a (0)\n001 6 39d1 33b5 2f32 11d4 | 76 256e (0) 24b8 (0) 20ae (0) 2101 (0)\n002 12 49ea 4990 4d59 4e5a | 38 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n003 8 66e7 628e 6337 6103 | 20 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n004 5 7125 7290 738c 77d2 | 5 77d2 (0) 775e (0) 7290 (0) 738c (0)\n005 3 7b90 7a60 7920 | 3 7b90 (0) 7a60 (0) 7920 (0)\n006 1 7e04 | 1 7e04 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 7dbb | 1 7dbb (0)\n010 0 | 0\n011 1 7dc2 | 1 7dc2 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","private_key":"02f0e74d872f0a512a39d40801b92a40eb0a1e27e97da040a97c75e0af22af6f","name":"node_7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","services":["streamer"],"enable_msg_events":true,"port":35881},"up":true}},{"node":{"info":{"id":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","name":"node_6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","enode":"enode://6076aa2f272b91cbd2e5db03c497a76d92991b2fb747c5f3aeaef27c702b0e65edaea0879b23d0e37e2812ff67bc7a92c4131c69a912819fd4d2627fade5427a@127.0.0.1:0","enr":"0xf88fb8400138d5775c80387427a7dff700a0cc533dba63b5a23dd02a7fb85988266d0ce64206c9dc261a206b4784a306a82fe5f001cab02a87039a50c4ed1fec2a1f41250183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026076aa2f272b91cbd2e5db03c497a76d92991b2fb747c5f3aeaef27c702b0e65","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bmjqhkQHBqDXOpUI8iR0klQxY/j6fi3CqmK3TVAmG4s=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6e68ea\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b02b a34e fbf5 | 110 898d (0) 886a (0) 88fe (0) 88a1 (0)\n001 9 0ff2 1c9c 13d6 165f | 76 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n002 9 5efb 5cd2 5823 4646 | 38 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n003 2 7125 7dd3 | 12 77d2 (0) 775e (0) 7290 (0) 738c (0)\n004 6 67dc 66e7 628e 6251 | 9 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n005 2 6831 6967 | 2 6831 (0) 6967 (0)\n006 2 6c4d 6c73 | 2 6c4d (0) 6c73 (0)\n007 3 6fe9 6f2d 6f5f | 3 6fe9 (0) 6f2d (0) 6f5f (0)\n============ DEPTH: 8 ==========================================\n008 2 6ecb 6ea5 | 2 6ecb (0) 6ea5 (0)\n009 1 6e05 | 1 6e05 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","private_key":"b20c8d0606ea1db41eabd7ee0f74574539d2cb45d6d4241b6f259b11ac5c2d24","name":"node_6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","services":["streamer"],"enable_msg_events":true,"port":35593},"up":true}},{"node":{"info":{"id":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","name":"node_7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","enode":"enode://e0da25d10aa370ec66f23c45b05eb96ffd8c7378b53214086b29b8e7800cecdc291eb7be7c52ae40f148f79cc7f7417d37617a7dc017b52b4e7692cd22d59b94@127.0.0.1:0","enr":"0xf88fb8409127cf3b56541dad915db116d184cbf4b62a37124cc76bc88b18b2861040ba7f76dca86df9a3fd341069ce7f7e319d900b1fb1f423bfe91145a0347aceb60f3b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e0da25d10aa370ec66f23c45b05eb96ffd8c7378b53214086b29b8e7800cecdc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cSXgW/G/5t+UjJJ2tivHVfxrDsjUrHckth6klZGtzyU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7125e0\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9076 8505 82dd fbf5 | 110 886a (0) 88fe (0) 88a1 (0) 898d (0)\n001 4 39d1 33b5 2f32 1c9c | 76 3b88 (0) 3b78 (0) 39d1 (0) 3f94 (0)\n002 11 5efb 5cd2 53fe 534b | 38 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n003 6 66e7 628e 6103 605a | 20 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n004 5 7920 7e04 7dd3 7dc2 | 7 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n005 2 77d2 775e | 2 77d2 (0) 775e (0)\n============ DEPTH: 6 ==========================================\n006 2 7290 738c | 2 7290 (0) 738c (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","private_key":"0320cf6d59b1fdfd3bd90c7b0e801cb9f574b5bda4809f6842e344263d8a9c4c","name":"node_7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","services":["streamer"],"enable_msg_events":true,"port":34651},"up":true}},{"node":{"info":{"id":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","name":"node_fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","enode":"enode://044552ed8018a3d7a6edcd78b62c7b776f3ea64af85049a170539a9353c32990f61afd5aed5a849eebb4c541418048952b2a969128241782caf66fff588c5576@127.0.0.1:0","enr":"0xf88fb840fb8c98615b2fd9a6ce30296aa151456746d7ff6f93f25567ad09135e11d5912567e796ddb7e02868851acd52d94dabe5f73d7421af7f4e91cb511b49744b23710183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102044552ed8018a3d7a6edcd78b62c7b776f3ea64af85049a170539a9353c32990","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+/XpF75F6QlpepOTxHeCBjM88d2aEDl46NcWIso7HMg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fbf5e9\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 154b 1c9c 0ff2 0fc5 | 146 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n001 7 8f21 9076 9852 b911 | 47 898d (0) 886a (0) 88fe (0) 88a1 (0)\n002 2 d3b0 cc20 | 26 c26f (0) c1f9 (0) c59e (0) c49c (0)\n003 5 e883 e854 eb98 e54b | 18 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n004 12 f27f f31c f629 f7fa | 13 f629 (0) f7fa (0) f7ba (0) f773 (0)\n005 3 ff36 fe21 fe31 | 3 ff36 (0) fe31 (0) fe21 (0)\n============ DEPTH: 6 ==========================================\n006 1 f925 | 1 f925 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 fbc8 | 1 fbc8 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","private_key":"abe3a2c3b4d87e1896b5eeb333bb2fae65888f42d5708e88df6eec9d4d6f2a89","name":"node_fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","services":["streamer"],"enable_msg_events":true,"port":42599},"up":true}},{"node":{"info":{"id":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","name":"node_0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","enode":"enode://22e0f016453557931968739b1927c6a2a96b3b3ef0720b9f574365f821ff4afa7d162aced052618c51e939baeec49bbda090ea6f2a5b14b3ced028e3587b4d51@127.0.0.1:0","enr":"0xf88fb8402397168cccae2be13f6646db7bd1f2d478d9124f8397e08ceae0045ca8baa3242f68f4c83fd1744b397234b474e6f46b048fd0d74acb55d3f44dc78d0dfede6b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10322e0f016453557931968739b1927c6a2a96b3b3ef0720b9f574365f821ff4afa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"D8Wb0ErJ3jGV48nQ61c5UqWAXdLn5XIHi26ZZ3it7HM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0fc59b\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 90a8 9076 82dd 8505 | 110 898d (0) 886a (0) 88fe (0) 88a1 (0)\n001 2 7dd3 41d9 | 70 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n002 4 3e8e 33b5 2c79 2f32 | 32 3b78 (0) 3b88 (0) 39d1 (0) 3f94 (0)\n003 4 165f 154b 13d6 1c9c | 22 14df (0) 1400 (0) 1436 (0) 154b (0)\n004 4 0328 00c6 045b 0661 | 11 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n005 3 0b72 0a00 0af9 | 3 0b72 (0) 0a00 (0) 0af9 (0)\n006 5 0d8a 0de3 0cf5 0c64 | 5 0d8a (0) 0de3 (0) 0cf5 (0) 0c64 (0)\n============ DEPTH: 7 ==========================================\n007 1 0e5e | 1 0e5e (0)\n008 0 | 0\n009 0 | 0\n010 1 0ff2 | 1 0ff2 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","private_key":"ab99d1389adc583c136dfe3f4569fbb9ce9ea477cc13a503e1a4aa3f557edffc","name":"node_0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","services":["streamer"],"enable_msg_events":true,"port":44559},"up":true}},{"node":{"info":{"id":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","name":"node_0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","enode":"enode://e62b09e34b132f4e59783ab65b9fb191398665c73b314a5fb36715728f869e8e608b374a91e22c4de5eae4fdff9ec4d2e9509c8e1a9c32e675fcf6fee76714f2@127.0.0.1:0","enr":"0xf88fb8409dc12163f250583e65c4c1bb7a368c6d27bbf9a62a49b5b3e99603fa802b0e227379f85879f46521bb12306b9d59b270796787b4da47ad4e0a1a688a4a5ac66c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e62b09e34b132f4e59783ab65b9fb191398665c73b314a5fb36715728f869e8e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"D/LSxJVH7ryWZ14LiAc96l6Qkb7hhD/+VnEn40SGw0g=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0ff2d2\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 a34e a46d 9076 9852 | 110 88fe (0) 88a1 (0) 886a (0) 898d (0)\n001 7 6e68 6c73 66e7 605a | 70 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n002 4 3e8e 33b5 2f32 2c79 | 32 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n003 5 154b 179f 165f 13d6 | 22 11d4 (0) 103b (0) 13d6 (0) 1400 (0)\n004 5 0661 045b 0328 0067 | 11 0438 (0) 0451 (0) 045b (0) 0743 (0)\n005 3 0b72 0af9 0a00 | 3 0b72 (0) 0af9 (0) 0a00 (0)\n006 4 0d8a 0de3 0cf5 0c28 | 5 0d8a (0) 0de3 (0) 0cf5 (0) 0c64 (0)\n============ DEPTH: 7 ==========================================\n007 1 0e5e | 1 0e5e (0)\n008 0 | 0\n009 0 | 0\n010 1 0fc5 | 1 0fc5 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","private_key":"b07ba37d3566d0d06613c70c3b970828a35c02d35d3ef97c26f1e431564cbc71","name":"node_0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","services":["streamer"],"enable_msg_events":true,"port":36663},"up":true}},{"node":{"info":{"id":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","name":"node_582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","enode":"enode://e1459426b83f1c65c5a4dac403ae9a8773d1fadf7f57014afe1f5632b40de446b925e309ac581a098f0a8597f54b231887ddef9fb033832546b7b1c438536514@127.0.0.1:0","enr":"0xf88fb84034a6c607747bfdaaddea35634f841a275979e6eb07a13c4806c7988076977d676c9cbe2a8b59da6776cf329633bf937933eebe202770e6b4cd1dc70b794785850183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e1459426b83f1c65c5a4dac403ae9a8773d1fadf7f57014afe1f5632b40de446","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WCMw2LjEkzGyrseQ3HMluc1IP8gSkyPTHsQp1UUEKWQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 582330\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 eb98 fbf5 | 110 8f21 (0) 898d (0) 886a (0) 88fe (0)\n001 2 1c9c 0ff2 | 76 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n002 5 7920 7dd3 605a 6e68 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 7 4c9e 4d6b 4d59 4e5a | 23 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n004 7 574f 51db 524d 5308 | 8 574f (0) 512e (0) 51db (0) 524d (0)\n005 3 5cd2 5db0 5efb | 4 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n============ DEPTH: 6 ==========================================\n006 1 5b63 | 1 5b63 (0)\n007 0 | 0\n008 1 58ed | 1 58ed (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","private_key":"e0e4076ce60393be8ae8f561ab3bbb784e5d4b9cf9044cbea245608f94062e9f","name":"node_582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","services":["streamer"],"enable_msg_events":true,"port":44383},"up":true}},{"node":{"info":{"id":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","name":"node_41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","enode":"enode://f68ed6030af61743ebafe811b9833a5cc29e35d00e6e0181d06feef9ca714898bed30f326a49a3c145cd1002a24d9c5ae79c2787464e58cd24dcf59fd0760bc1@127.0.0.1:0","enr":"0xf88fb8408b71d88c0475a30d0141a21ead67266d6a40391c609d4fbb1c376e0f05e920160e6dbbc8db17d82a85e5121346b02f6c670e28e88acba5d763a1986cea5bedf90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f68ed6030af61743ebafe811b9833a5cc29e35d00e6e0181d06feef9ca714898","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QdnAPkS+w/hKYTnOQO8eOQUw847RGGBXWs+tA6SdsJU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 41d9c0\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 daec eb98 fbf5 | 110 ad98 (0) ac4d (0) af02 (0) ae2b (0)\n001 3 314a 0fc5 1c9c | 76 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n002 8 7125 7920 7dd3 66e7 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 5 534b 53fe 5efb 5cd2 | 15 574f (0) 512e (0) 51db (0) 524d (0)\n004 7 4990 49ea 4bcf 4c9e | 11 49cd (0) 49ea (0) 4990 (0) 4a8b (0)\n============ DEPTH: 5 ==========================================\n005 10 47bf 4782 46fe 4646 | 10 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n006 0 | 0\n007 0 | 0\n008 1 4109 | 1 4109 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","private_key":"1165ce19cad30464dac1767d11f8462ee17a275b99240f7757f516575dae8bd3","name":"node_41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","services":["streamer"],"enable_msg_events":true,"port":39051},"up":true}},{"node":{"info":{"id":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","name":"node_1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","enode":"enode://27e2579492f09c50dbc56b6542114d27789897327092c0ddacbabe5f3916be86362afe3b61ec3ea54eb7d39401f7a9307901cacc84a5cb54ab868b4b8c28cbe0@127.0.0.1:0","enr":"0xf88fb840a0df68e76ebed32c21b033b1570b6dcdb45783053022b12bc2763acfd7929fbe3ac0306848c56ad630845f8c05dfc0b47d2976e01c8e1f91cc270fd9f6846edf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10227e2579492f09c50dbc56b6542114d27789897327092c0ddacbabe5f3916be86","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HJyvAo3zFoGxRXpU1LOrIACfn6W9EkF6G6fv4MZg5r0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1c9caf\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 a34e 9852 daec fbf5 | 110 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n001 7 66e7 6e68 7125 534b | 70 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n002 5 314a 33b5 3e8e 2c79 | 32 39d1 (0) 3b88 (0) 3b78 (0) 3f94 (0)\n003 5 0661 00c6 0af9 0fc5 | 22 0438 (0) 0451 (0) 045b (0) 07a8 (0)\n004 10 154b 1400 1436 14df | 12 11d4 (0) 103b (0) 13d6 (0) 1400 (0)\n005 3 1a2a 18f6 19fa | 4 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n006 3 1f85 1f67 1e2a | 3 1f67 (0) 1f85 (0) 1e2a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 1c47 | 1 1c47 (0)\n009 0 | 0\n010 0 | 0\n011 1 1c8a | 1 1c8a (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","private_key":"67941e3130de030151f98c59f040e588508b299893d26eede53fbfd0400f76a6","name":"node_1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","services":["streamer"],"enable_msg_events":true,"port":40355},"up":true}},{"node":{"info":{"id":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","name":"node_4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","enode":"enode://eb61dee424d25e9ca5147121a89b8dfc8e186fd83ad973d590fe6f050e5ad71094b18d539d127b7699769bd08e722bf1d253c42d9dcd7bd744efb8d90b7517bc@127.0.0.1:0","enr":"0xf88fb8409303866ac69b06db6e9cd2c5bf37b2046d4ba9be08473191181141ebc1a822e37088c33aaa9d396ad7398756422d234de878117f2cce3bd9477b23860a9bcea00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102eb61dee424d25e9ca5147121a89b8dfc8e186fd83ad973d590fe6f050e5ad710","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TVnPGu7PNw6Up6IxiHRQzvlwU7nIin/RHiEIQK8HDik=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d59cf\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9852 c898 eb98 | 110 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n001 2 1c9c 2f32 | 76 02d8 (0) 03cc (0) 0328 (0) 0067 (0)\n002 6 7125 7dd3 7920 605a | 32 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n003 4 5823 5cd2 534b 53fe | 15 574f (0) 512e (0) 51db (0) 524d (0)\n004 3 4646 4109 41d9 | 12 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n005 3 4990 49ea 4bcf | 6 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n006 1 4e5a | 1 4e5a (0)\n007 1 4c9e | 1 4c9e (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 4d10 | 1 4d10 (0)\n010 1 4d6b | 1 4d6b (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","private_key":"37294667aa7ef5913f670784ca64ca2422b73d30730798e5ba9d0dce067d5f04","name":"node_4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","services":["streamer"],"enable_msg_events":true,"port":41171},"up":true}},{"node":{"info":{"id":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","name":"node_2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","enode":"enode://27ddb367d5d4a30ad5888523d743494926b5a27942077719cc6c537b73f04bb87f65cddfb3cfc09a733c1691c43c7a9afe8b9e268ee323af1f8d8a85beea4cb5@127.0.0.1:0","enr":"0xf88fb840772057c835ac9c84a2eaa07977982bbc77cdb5dbc67b095e1b64eba4bd7364362a8286caab1fac316b5f9c128103397f945e78d6d1f10dbe310fb1a21a5657680183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10327ddb367d5d4a30ad5888523d743494926b5a27942077719cc6c537b73f04bb8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LzLVTwaYnvtspUMbdM11n7oF2+827P+P1QbmYgJq+YM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2f32d5\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9852 c620 daec eb98 | 110 ad98 (0) ac4d (0) af02 (0) ae2b (0)\n001 5 6e68 7125 7dd3 534b | 70 7b90 (0) 7a60 (0) 7920 (0) 7e04 (0)\n002 6 0661 0ff2 0fc5 13d6 | 44 02d8 (0) 03cc (0) 0328 (0) 0067 (0)\n003 6 314a 33b5 3b78 3efc | 17 3780 (0) 378e (0) 3630 (0) 35e6 (0)\n004 4 256e 24b8 2101 21a0 | 6 24b8 (0) 256e (0) 20ae (0) 217f (0)\n005 2 2a97 2abb | 4 2995 (0) 2a0a (0) 2a97 (0) 2abb (0)\n============ DEPTH: 6 ==========================================\n006 4 2d36 2ccf 2c38 2c79 | 4 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","private_key":"fb9c0c109d964d1f2840834912ab8fb4d275c821c47cbacf4865721f774ad246","name":"node_2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","services":["streamer"],"enable_msg_events":true,"port":37983},"up":true}},{"node":{"info":{"id":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","name":"node_eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","enode":"enode://e478db1e6ae924395ba7c3eed4a3c1161fed7757938dbc6e802fca7e8daac58d16f9cf87017d684499f9aa2c5ea3ebbf74805e24b5454661a4f12af2bd9b4e69@127.0.0.1:0","enr":"0xf88fb84083fabf1c86dbfb7ea406905cb02c1a05b4cd8e41ee010679b981abb41d7ef8ba1e5f916713c12c739fd237f35952c0e01b65faf2bdffe581e53b602ef397cd470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e478db1e6ae924395ba7c3eed4a3c1161fed7757938dbc6e802fca7e8daac58d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"65j7Rd1XVPJPnfDJ7LuTky49nXc1zW0N3UqGdbtO9VQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eb98fb\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 5823 41d9 4d59 103b | 146 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n001 5 b820 b02b a46d a34e | 47 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n002 6 d3b0 d887 daec c898 | 26 cc20 (0) ca04 (0) caf6 (0) c9f5 (0)\n003 9 fbc8 fbf5 f925 f773 | 19 f629 (0) f7fa (0) f7ba (0) f773 (0)\n004 5 e027 e775 e7fa e514 | 8 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n005 5 ed2d ee5e ef1b ef07 | 6 ec52 (0) ed2d (0) ee5e (0) ef07 (0)\n============ DEPTH: 6 ==========================================\n006 3 e8ef e883 e854 | 3 e8ef (0) e883 (0) e854 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","private_key":"ab86a41209d246a5d6b5c8bf86ba8d32901ffa817d143a63719c1189703ae84f","name":"node_eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","services":["streamer"],"enable_msg_events":true,"port":43213},"up":true}},{"node":{"info":{"id":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","name":"node_9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","enode":"enode://e78bf7b14baa9f968a1eab4abb0ffcc6aaf7f6a3152a59d6b404ef00232ff35cf55fa13f6190c6cb6bcfa4394bb912d7dab1d491f2d39ed7b43029d0f99319d0@127.0.0.1:0","enr":"0xf88fb84029d6cf3fe0d8101f62b9bf17bad9b25f903639962d22b9643a3a6216b8946f00593519afbe56588bbd1e0e52d3a0339778deb5c4c780a818db4c44140fd7bd930183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e78bf7b14baa9f968a1eab4abb0ffcc6aaf7f6a3152a59d6b404ef00232ff35c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mFLOJn1TEGpuWE1u3bCOAGLrSkItKo05rW3MrrrFUv8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9852ce\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0ff2 165f 1c9c 2f32 | 146 3780 (0) 378e (0) 3630 (0) 35e6 (0)\n001 4 daec fbc8 fbf5 eb98 | 63 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n002 9 b02b b2a5 bcc6 b911 | 27 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n003 5 8f21 88a1 8505 849b | 10 898d (0) 886a (0) 88fe (0) 88a1 (0)\n004 4 9076 90a8 976e 96fc | 6 959f (0) 976e (0) 96fc (0) 915d (0)\n============ DEPTH: 5 ==========================================\n005 2 9d0f 9fa0 | 2 9d0f (0) 9fa0 (0)\n006 0 | 0\n007 0 | 0\n008 1 9890 | 1 9890 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","private_key":"ce304c9eade55eb825a72feda5a3d11f9ae9261aadf2bdd54ccd8f3e963dc251","name":"node_9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","services":["streamer"],"enable_msg_events":true,"port":43037},"up":true}},{"node":{"info":{"id":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","name":"node_daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","enode":"enode://8a808e57c6bcbab9333ebbeb571f922303b1bb3197db84c5ff936033294f12429f7b8b06da61e7c04ad7f7c039e2b765b324069428cf86ad8a2d4bddca8d9948@127.0.0.1:0","enr":"0xf88fb84027da20f74a296f9b64d09eb538af5e462aececd8a624e3ac95423f168b062f7c4c6368ee7acf0f9bed1ce235bef0b932517a9ff281c24a84ab5bb5a307b560fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028a808e57c6bcbab9333ebbeb571f922303b1bb3197db84c5ff936033294f1242","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2uxF7KQPSIQ7QfcCZ8B+lJls7YKfAnEPFTVPvibhd+c=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: daec45\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 7dd3 6c73 6251 41d9 | 146 256e (0) 24b8 (0) 20ae (0) 2101 (0)\n001 6 a34e b02b b2a5 b820 | 47 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n002 11 f456 f45f f773 f31c | 37 f629 (0) f7ba (0) f7fa (0) f773 (0)\n003 5 cc20 c9f5 c898 c1f9 | 15 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n004 3 d1d7 d3b0 d299 | 5 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n005 1 df1e | 1 df1e (0)\n006 2 d887 d863 | 2 d887 (0) d863 (0)\n============ DEPTH: 7 ==========================================\n007 1 db6a | 1 db6a (0)\n008 1 da67 | 1 da67 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","private_key":"56866cfeb6cabc6b29d13eb7d3d7f08b4638fcf8f8d6c84303c8af5fa371a1a5","name":"node_daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","services":["streamer"],"enable_msg_events":true,"port":41737},"up":true}},{"node":{"info":{"id":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","name":"node_c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","enode":"enode://87345615c0805d99ec1ea2d9a2524323283810eec32d47fb14165619987edcb9c7d0cc052960238c4beda0cb4692412848cf083744f4287c1d3e3d3549ec8a17@127.0.0.1:0","enr":"0xf88fb84019bfcc1148e643a0381e48afe5c5e9d093b752843123d526ed1df4f62f0c9bdc3ccdc2c80c5be269b4a5674da87b07f2bfea41b969d01926921086864a6914940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10387345615c0805d99ec1ea2d9a2524323283810eec32d47fb14165619987edcb9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xiB1Kgg8of8DmJNyNc+WQTOTlFLCk8eZzgf/iqK95CA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c62075\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2c79 2f32 7dd3 6c73 | 146 24b8 (0) 256e (0) 20ae (0) 2101 (0)\n001 6 b2a5 b02b b820 a34e | 47 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n002 11 fbc8 f925 f31c f773 | 37 f629 (0) f7ba (0) f7fa (0) f773 (0)\n003 3 d3b0 d887 daec | 11 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n004 4 cc20 c9f5 c832 c898 | 6 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n005 2 c26f c1f9 | 2 c26f (0) c1f9 (0)\n006 3 c59e c43f c441 | 4 c59e (0) c49c (0) c43f (0) c441 (0)\n============ DEPTH: 7 ==========================================\n007 1 c786 | 1 c786 (0)\n008 1 c6cf | 1 c6cf (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","private_key":"6819c930fa19b056e7757bb4f0b87d2eba8bbd661c6bec9f68594559199669e9","name":"node_c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","services":["streamer"],"enable_msg_events":true,"port":39637},"up":true}},{"node":{"info":{"id":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","name":"node_6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","enode":"enode://80cc5420bd8d38bbd9b86077f10f27e11ac8ba32e9faa57dae75f0ebd5b605deaba207fc0912b1b93cbd29ad868bdcb0ecfc77c35f8d02e63729e09e8ccf1050@127.0.0.1:0","enr":"0xf88fb840f9be773757b0f5b1b3eecf7c1e53f23d4c24f84948d5fa49b2024cafcd7e7fce1dde3a795a557af1919771bb29869e79054b383ecb6413dbd5a7ad5637552c130183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10280cc5420bd8d38bbd9b86077f10f27e11ac8ba32e9faa57dae75f0ebd5b605de","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bHMVBJDovpZ3xACG3grv7Rk5WBBI4m9Kk/XKJlcaGo8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6c7315\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9076 e854 daec c620 | 110 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n001 6 21a0 2c79 3e8e 33b5 | 76 24b8 (0) 256e (0) 20ae (0) 217f (0)\n002 9 53fe 534b 5823 4646 | 38 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n003 6 7125 738c 775e 7dbb | 12 77d2 (0) 775e (0) 7290 (0) 738c (0)\n004 6 67dc 66e7 60d7 605a | 9 6103 (0) 60d7 (0) 605a (0) 6337 (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n============ DEPTH: 6 ==========================================\n006 7 6fe9 6f5f 6f2d 6ecb | 7 6fe9 (0) 6f5f (0) 6f2d (0) 6ecb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 6c4d | 1 6c4d (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","private_key":"1d02f4867632ec5b85fbb3116d676151cc62887e6c539870ba0c42f929299581","name":"node_6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","services":["streamer"],"enable_msg_events":true,"port":34593},"up":true}},{"node":{"info":{"id":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","name":"node_e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","enode":"enode://427720d085bc2d3fdde2d55df27162448b78a2e49d4d68bd8566b41345c87af64019cab4042a4228010b78ccc0935eb8d1fbbd6e147127d103557cff767e43fe@127.0.0.1:0","enr":"0xf88fb8400983bdd51a44197b57c4edd3528554d739aeb0876d2c50da898b134a951aea4d0045cd49590984531c7ba95e99489cb0155a426655d50bc36483d8da6e90af5b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102427720d085bc2d3fdde2d55df27162448b78a2e49d4d68bd8566b41345c87af6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6FSLXfFa3w8qmX/1cJgnvrXh02uwii8tAXdG1cDoP8o=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e8548b\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 103b 165f 7920 6c73 | 146 24b8 (0) 256e (0) 20ae (0) 217f (0)\n001 3 b02b b820 9076 | 47 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n002 5 d3b0 daec c620 cc20 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 7 fbc8 fbf5 f925 f27f | 19 f629 (0) f7fa (0) f7ba (0) f773 (0)\n004 3 e775 e7fa e54b | 8 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n005 6 ec52 ed2d efea ef07 | 6 ec52 (0) ed2d (0) ee5e (0) efea (0)\n006 1 eb98 | 1 eb98 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 e8ef e883 | 2 e8ef (0) e883 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","private_key":"a54bb672dc9321d27af926996f1bd8561f767a940f45b2ae7b50641aafc296b2","name":"node_e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","services":["streamer"],"enable_msg_events":true,"port":46437},"up":true}},{"node":{"info":{"id":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","name":"node_165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","enode":"enode://4201b86b495b4d95596ac23ba0cc4d0f467eb4570eae4bb2406f02acd483a0b590572cb93ff3d5e15951430b17eb765cfc57f0dd0f98d54facc4840a2f3c7446@127.0.0.1:0","enr":"0xf88fb8402d57c75cdbe7f54cfca4be2a9df2fd02b13b64e4abe4a8777dfcc5ac11a951a14393317578595f7833b5b2c12b361607c6f94305581f0499823944b40349d6d20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024201b86b495b4d95596ac23ba0cc4d0f467eb4570eae4bb2406f02acd483a0b5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Fl8a9nqh0kVp4L3/YdKbPDnpMlAHHY8ltb5vrOIJrGo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 165f1a\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 9852 9076 daec e775 | 110 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n001 5 66e7 6831 6e68 6c73 | 70 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n002 4 2c79 2f32 314a 3e8e | 32 256e (0) 24b8 (0) 20ae (0) 217f (0)\n003 6 0328 0661 045b 0b72 | 22 0b72 (0) 0af9 (0) 0a00 (0) 0d8a (0)\n004 4 1e2a 1c9c 1c8a 19fa | 10 1b83 (0) 1a2a (0) 18f6 (0) 19fa (0)\n005 3 11d4 103b 13d6 | 3 11d4 (0) 103b (0) 13d6 (0)\n006 3 1436 14df 154b | 4 1400 (0) 1436 (0) 14df (0) 154b (0)\n============ DEPTH: 7 ==========================================\n007 3 1704 17db 179f | 3 1704 (0) 17db (0) 179f (0)\n008 0 | 0\n009 0 | 0\n010 1 1672 | 1 1672 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","private_key":"a5255c5dfef55c549d9899c6086c1aa7f58eeab3dae94d863d16c3e8e5e6f308","name":"node_165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","services":["streamer"],"enable_msg_events":true,"port":37147},"up":true}},{"node":{"info":{"id":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","name":"node_7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","enode":"enode://9abcce8e8480c2df00f55c8b10f7cbcc56979a41c870eb9fc81ebf37df92ee56d47d9a3d76b9e87204e7cb20d39b04d584ce00ac702f1328606752cabc70d246@127.0.0.1:0","enr":"0xf88fb840246ddc3f6e34e2c10b5ef70b569b15a2579675614e0994c18a8ebf51041a206f4a5a670c168fed69567e6ce63b8b4308bd28e430a270bf4c36bc8e090a29e4780183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029abcce8e8480c2df00f55c8b10f7cbcc56979a41c870eb9fc81ebf37df92ee56","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eSDWnPfkWPzgeB6hpOB3aOGmn2gYCQ7/Cr8LSgwsNfg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7920d6\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b2a5 e854 e775 | 110 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n001 2 3e8e 165f | 76 256e (0) 24b8 (0) 20ae (0) 2101 (0)\n002 6 524d 5823 41d9 4bcf | 38 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n003 9 67dc 66e7 6251 628e | 20 67aa (0) 67dc (0) 66e7 (0) 6103 (0)\n004 3 738c 7125 775e | 5 77d2 (0) 775e (0) 7290 (0) 738c (0)\n005 4 7e04 7dbb 7dc2 7dd3 | 4 7e04 (0) 7dbb (0) 7dc2 (0) 7dd3 (0)\n============ DEPTH: 6 ==========================================\n006 2 7a60 7b90 | 2 7a60 (0) 7b90 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","private_key":"9a81a3bcde96713d5d92389b259485aaaff9b59596864bb8933d09ef5ebb1d41","name":"node_7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","services":["streamer"],"enable_msg_events":true,"port":42903},"up":true}},{"node":{"info":{"id":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","name":"node_e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","enode":"enode://beda928185a8d044cb7303a817ba03b2c76bcf663ef5e852bb6f1f00730bdc445f98b40f8e29f427d9a802c2a3b74ad3403a3d47efb577b555ed87c05ebf83f7@127.0.0.1:0","enr":"0xf88fb840f9fda3d64eba7bad62497dba8a4c99a8e256a8159a4d7b38855bea2e5055a81b7ac9f978137e928e9116c805cca511efdcc58fb9b2473f5c08c4f0d0061cc1e00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103beda928185a8d044cb7303a817ba03b2c76bcf663ef5e852bb6f1f00730bdc44","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"53XpdZ1HAb2bQ8IvHRvnPBJisnUrsjyzhXSF2vHcrS0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e775e9\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 103b 165f 7920 | 146 256e (0) 24b8 (0) 20ae (0) 2101 (0)\n001 5 aeb4 af02 a34e a46d | 47 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n002 4 d3b0 c1f9 cc20 c898 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 8 f925 fbf5 fbc8 f773 | 19 f629 (0) f7fa (0) f7ba (0) f773 (0)\n004 6 ee5e ef1b efea eb98 | 10 ec52 (0) ed2d (0) ee5e (0) ef07 (0)\n005 1 e027 | 1 e027 (0)\n============ DEPTH: 6 ==========================================\n006 5 e5d7 e5ad e54b e547 | 5 e5d7 (0) e5ad (0) e514 (0) e547 (0)\n007 0 | 0\n008 1 e7fa | 1 e7fa (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","private_key":"6be6c403a2ff471a0099cbeee98c75dbf2d356237b388e44e9620413135bfe37","name":"node_e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","services":["streamer"],"enable_msg_events":true,"port":46777},"up":true}},{"node":{"info":{"id":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","name":"node_90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","enode":"enode://475b303a40b4441c17f91b7ad399fa70524c60f241f66ac9139de672f06daa5b470a82c16372cb24c759bd76074ca5fb3161083dc6e1131d8f5f4de86ee8542e@127.0.0.1:0","enr":"0xf88fb84067ea7594026da51603b1294b65583b247f3a11286470ba680919f1cfd860bdd20a177b4b4dc916ba757482dac7f6f796677756f635eaa61bb8342f18bad700a20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102475b303a40b4441c17f91b7ad399fa70524c60f241f66ac9139de672f06daa5b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"kHZbcig/Wb5M+b96npoi/W23AcNgPLwIF7St8vjpzgg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 90765b\npopulation: 42 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 3e8e 0fc5 0ff2 165f | 146 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n001 9 fbc8 fbf5 f456 e854 | 63 f629 (0) f7ba (0) f7fa (0) f773 (0)\n002 13 a46d a34e ad98 af02 | 27 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n003 5 8f21 88a1 8505 849b | 10 8f21 (0) 898d (0) 886a (0) 88fe (0)\n004 4 9852 9890 9fa0 9d0f | 4 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n005 3 959f 976e 96fc | 3 976e (0) 96fc (0) 959f (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 915d | 1 915d (0)\n008 1 90a8 | 1 90a8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","private_key":"e212701e3a46630b79ca2e6bd4d1a4a4abe893d524fc5bb0327380b4c6ab4c0f","name":"node_90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","services":["streamer"],"enable_msg_events":true,"port":41311},"up":true}},{"node":{"info":{"id":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","name":"node_c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","enode":"enode://825fc662eadb1275f9fcd9e791cf12186b5446a81da414669c827c420f43b5550dc05c59267237d34248e57aa77bb1ca04b16a1667f06f1f277e76df0da74bd4@127.0.0.1:0","enr":"0xf88fb8405d639cdcd2181b1bbc1d50557f4ec79e187fddc491c03234d9b07f7968f78a8e49bc2c34d44a6790e07bdf309cb28c8fa1e0fa7ca95b2d5c9c2e34a676f4a9040183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102825fc662eadb1275f9fcd9e791cf12186b5446a81da414669c827c420f43b555","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yJhoceRvAB0V7Ytw8qoP6orjCdXlZxpQD2GeOzSMjBU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c89868\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 7dd3 4bcf 4d6b 4d59 | 146 4e5a (0) 4c9e (0) 4d10 (0) 4d6b (0)\n001 4 b820 b2a5 82dd 9076 | 47 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n002 12 fbc8 f773 f5dc f5b2 | 37 f629 (0) f7ba (0) f7fa (0) f773 (0)\n003 3 d3b0 d887 daec | 11 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n004 4 c26f c1f9 c6cf c620 | 9 c26f (0) c1f9 (0) c59e (0) c43f (0)\n005 1 cc20 | 1 cc20 (0)\n006 2 caf6 ca04 | 2 caf6 (0) ca04 (0)\n============ DEPTH: 7 ==========================================\n007 1 c9f5 | 1 c9f5 (0)\n008 1 c832 | 1 c832 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","private_key":"6a52946fb72e66e0da1a45ae5641b7e4bd71cd109d0f8b0bd84c912f21a62a29","name":"node_c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","services":["streamer"],"enable_msg_events":true,"port":42015},"up":true}},{"node":{"info":{"id":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","name":"node_3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","enode":"enode://eb36b8be16b143563e4e6a0d40a3059746dd4073e875a344c54ac9da33c5687b346497f5efcb5b8ae55c7c077ad93fa8ddd69dc4aca6f257f892f8f0535e83bd@127.0.0.1:0","enr":"0xf88fb840606ae288441ca25000384f3327aab7b6a889361a45eed00f010a8711ec569a9304f1c0084e167f0f4f050196deb0d8c3321fe2266446fa5e76b11908918001c60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103eb36b8be16b143563e4e6a0d40a3059746dd4073e875a344c54ac9da33c5687b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Po78rzACUis5Bl6jDBVCbR61WRZJnv+OtagU451BhTw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3e8efc\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9076 b2a5 fbc8 c898 | 110 a653 (0) a6fb (0) a46d (0) a369 (0)\n001 7 534b 7dbb 7920 6c73 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 6 0661 0328 0ff2 0fc5 | 44 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n003 4 21a0 2abb 2c79 2f32 | 15 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n004 3 3373 33b5 314a | 10 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n005 3 39d1 3b78 3b88 | 3 39d1 (0) 3b78 (0) 3b88 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 3f94 | 1 3f94 (0)\n008 0 | 0\n009 2 3ec5 3efc | 2 3ec5 (0) 3efc (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","private_key":"4de210de6f44b43eebcea0e42a320de5fe4a52ee899ce93696e65018dff1943b","name":"node_3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","services":["streamer"],"enable_msg_events":true,"port":39127},"up":true}},{"node":{"info":{"id":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","name":"node_fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","enode":"enode://a017d5ec65ed0ff2bae902195ea9a509c51eade81c818bc111bd6e344ab51bbdb90239fbef510e247dd4917ee5be1cdee2b4f7206adccc675c6b1ef1ac1b70d6@127.0.0.1:0","enr":"0xf88fb840fb39a6e6bc63eb34afc956930c4bb747b7653c69db586b3e5e8986f527c8d08142c0bbc03752bb77e1109ac8a562274d065fd633c69ea3597394362919a720f70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a017d5ec65ed0ff2bae902195ea9a509c51eade81c818bc111bd6e344ab51bbd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+8gIenI8VkygE5MpkC55dIr0Zpnqe+JNV5Cafo6W9oE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fbc808\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 534b 179f 3e8e | 146 7290 (0) 738c (0) 7125 (0) 77d2 (0)\n001 9 8f21 8505 9076 9fa0 | 47 959f (0) 976e (0) 96fc (0) 915d (0)\n002 3 daec c620 c898 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 6 ef1b eb98 e854 e883 | 18 ed2d (0) ec52 (0) ee5e (0) ef07 (0)\n004 9 f773 f456 f45f f4e0 | 13 f629 (0) f7fa (0) f7ba (0) f773 (0)\n005 3 fe31 fe21 ff36 | 3 fe31 (0) fe21 (0) ff36 (0)\n============ DEPTH: 6 ==========================================\n006 1 f925 | 1 f925 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 fbf5 | 1 fbf5 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","private_key":"459e90cfb3188b5829214e99ecdfdc92c3ca4a8df6a164a5c4c61f79eeefe059","name":"node_fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","services":["streamer"],"enable_msg_events":true,"port":35587},"up":true}},{"node":{"info":{"id":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","name":"node_f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","enode":"enode://ad212ba24b9f1cd7ee7e5431309edc1714e9c5ff6610fc49c63be97528ebacc2013bdd5f987b388cb1d6a6a7645d8ea7c5a98b90c4b0f70f4fca6793eb1f01f4@127.0.0.1:0","enr":"0xf88fb840cdd1cdeb2532d9112faf9bdd13f0ab62954f54b6d55a30181ff5f719725dd1b3761a25fdd94173632cf3aa481a3430b30a1bb5341e26c05b8e0ae738e0ace46c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ad212ba24b9f1cd7ee7e5431309edc1714e9c5ff6610fc49c63be97528ebacc2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8n8QRHd+BfP2AWXQ0vw+dmf+FI4Mp6CXgF1gufYQJfc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f27f10\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0661 534b | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 2 b820 b2a5 | 47 959f (0) 976e (0) 96fc (0) 915d (0)\n002 4 d3b0 daec c1f9 c898 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 6 e54b e775 ef1b eb98 | 18 ec52 (0) ed2d (0) ee5e (0) ef1b (0)\n004 3 f925 fbf5 fbc8 | 6 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n005 9 f629 f7ba f773 f528 | 10 f629 (0) f7fa (0) f7ba (0) f773 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f31c | 1 f31c (0)\n008 1 f2d5 | 1 f2d5 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","private_key":"ce524e315364068c85c93ee7c34cfc6e5532742848a01bf543d213e2cf22f9ee","name":"node_f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","services":["streamer"],"enable_msg_events":true,"port":40031},"up":true}},{"node":{"info":{"id":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","name":"node_b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","enode":"enode://a5a8a40f361adf355086fefe1a9d530ee072ff7dda43026954c2e20dfdcdc445873d72bf613dea981c6fe57941e79af6b837431625892eae841bcecec8fa5ea1@127.0.0.1:0","enr":"0xf88fb840a9cc6dfb9ffae8d02cc4343351e64345b21f117b53ef86ee469eed2d5d3929f67c1084a5e8b4ce788894461222a59beb00152452d61f6acc04724857718931030183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a5a8a40f361adf355086fefe1a9d530ee072ff7dda43026954c2e20dfdcdc445","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"sqVjrFm6tN/d97bie4Duev3rLkKVQREHkD9IS8+fxPI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2a563\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0661 3e8e 7920 628e | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 6 daec c620 c898 fbc8 | 63 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n002 6 9fa0 9852 9890 9076 | 20 959f (0) 976e (0) 96fc (0) 915d (0)\n003 5 af02 aeb4 a6fb a46d | 10 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n004 8 bcc6 ba88 badd bb90 | 9 bcc6 (0) baf2 (0) badd (0) ba88 (0)\n005 3 b5b2 b502 b7ca | 5 b5b2 (0) b502 (0) b626 (0) b65e (0)\n============ DEPTH: 6 ==========================================\n006 1 b02b | 1 b02b (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 b2b5 | 1 b2b5 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","private_key":"d311ffc3650bc45898ce1480ced3b3fabaed9a8a9877d26a97b2710c9318716f","name":"node_b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","services":["streamer"],"enable_msg_events":true,"port":44537},"up":true}},{"node":{"info":{"id":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","name":"node_b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","enode":"enode://7f841ce185c998f72468ded1e943d2a109a834b4b15c957132af2e5f364df4111c57d1b83651a4b899bf40a3131509505ff6d750e182af6b711511f92bc594a5@127.0.0.1:0","enr":"0xf88fb840c1a87287bf9a406351496453395ee3cc77e00b626375a7e86abedcd951c907f875178719162b1663979a6ec05a5f949286e03f2611eecf13bfb9caca0f670c200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037f841ce185c998f72468ded1e943d2a109a834b4b15c957132af2e5f364df411","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uCDkgDVAAMg3sXgewcST6HdrSDQlLmRTQlrAW5JbWlg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b820e4\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0661 66e7 628e 534b | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 11 c898 c620 daec e883 | 63 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n002 6 9890 9852 9fa0 9076 | 20 959f (0) 976e (0) 96fc (0) 915d (0)\n003 3 a34e a46d af02 | 10 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n004 2 b02b b2a5 | 8 b626 (0) b65e (0) b7ca (0) b5b2 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 3 badd ba88 bb90 | 4 baf2 (0) badd (0) ba88 (0) bb90 (0)\n============ DEPTH: 7 ==========================================\n007 2 b911 b95d | 2 b95d (0) b911 (0)\n008 1 b897 | 1 b897 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","private_key":"61fe17d5be2ccee74b17d7c47a21cef62eea82042e68eb5bc32139b57bf6ee76","name":"node_b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","services":["streamer"],"enable_msg_events":true,"port":36559},"up":true}},{"node":{"info":{"id":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","name":"node_534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","enode":"enode://b948e96344e56ff7ae61c23f8751d2dcc3cb818bb11e981357d1acc94c3c662987cc236e5ecbac4288b68cac7f704edbd39a158a7ec1477817e6379b9d3f06ac@127.0.0.1:0","enr":"0xf88fb8408d7d8db1b2d8e46e0446181eb4d5f2d93967e8f7c55430e17ce80fa7269dbadc2a24bddd9024c14a94deea3ad1cfa69efd5b3e6156e87d8b0afaac9d3ff4a6680183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b948e96344e56ff7ae61c23f8751d2dcc3cb818bb11e981357d1acc94c3c6629","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"U0vKqYz5GSs1tgFMZQrgZ+dDMsAV67UW1jYBQn1zdrg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 534bca\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c898 fbc8 f27f b2a5 | 110 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n001 7 1c9c 0661 2abb 2f32 | 76 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n002 6 7dc2 775e 7125 6c73 | 32 7290 (0) 738c (0) 7125 (0) 77d2 (0)\n003 7 41d9 44a1 4e5a 4c9e | 23 4782 (0) 47bf (0) 46fe (0) 461c (0)\n004 3 5efb 5cd2 5823 | 7 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n005 1 574f | 1 574f (0)\n006 2 51db 512e | 2 512e (0) 51db (0)\n007 1 524d | 1 524d (0)\n============ DEPTH: 8 ==========================================\n008 2 53a8 53fe | 2 53a8 (0) 53fe (0)\n009 1 5308 | 1 5308 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","private_key":"c7f75190502386c9d3b3434c24956d84b4c9e41c91671f2b28496a7f4fcdc39e","name":"node_534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","services":["streamer"],"enable_msg_events":true,"port":45967},"up":true}},{"node":{"info":{"id":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","name":"node_66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","enode":"enode://71bc46e6ba9589ea0718de84c96b5d58b5d7f0781e021b003f14b1cda7ff7ccbe697f9d910349ec8830341cfc00ce73729b28d91bf6c66989a46e72d3c5853f7@127.0.0.1:0","enr":"0xf88fb8402f952b1b8ee3a0cdd608676ac1b0422c05695038e3da52824da26933ab776cae7a335c51043e1d2c6b35d878ed54ffa2c4acd71f3870c1ac2db03fdda4be24880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10371bc46e6ba9589ea0718de84c96b5d58b5d7f0781e021b003f14b1cda7ff7ccb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Zuf8LfUfXfjXMphR/pNX2JXp1d/cJfjZK9sQqWD34Vo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 66e7fc\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b820 82dd | 110 959f (0) 976e (0) 96fc (0) 915d (0)\n001 8 0ff2 1c9c 165f 1672 | 76 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n002 6 44a1 4109 41d9 4bcf | 38 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n003 4 7125 7920 7dd3 7dbb | 12 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n004 5 6967 6fe9 6ea5 6e68 | 11 6831 (0) 6967 (0) 6f5f (0) 6f2d (0)\n005 6 6103 60d7 605a 6337 | 6 6103 (0) 60d7 (0) 605a (0) 6337 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 67aa 67dc | 2 67aa (0) 67dc (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","private_key":"73edf61ff541e3a6ba465ffea56c19839af7e9bc3782ff09216905843c204e08","name":"node_66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","services":["streamer"],"enable_msg_events":true,"port":46675},"up":true}},{"node":{"info":{"id":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","name":"node_628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","enode":"enode://753579fc0f9683818e057900626e09327d6610fdbc6996be1b4faea9431977b3c78dd63e7e603523b19dd2b55c8a90b6ea21e91edd926513843de5fc1eea9b26@127.0.0.1:0","enr":"0xf88fb8406e4b52980cff25be487a37763583146103d0312687b7183e3dd02233a6f94b387c1b61ccb793d70ea879dedb92e32c45923debbec85a24bd00f68780acc0da170183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102753579fc0f9683818e057900626e09327d6610fdbc6996be1b4faea9431977b3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Yo59ozWe1tnc+6/HWBlm5OCSRcMh7HjKdVh8nLtEaX8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 628e7d\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e883 82dd b2a5 b820 | 110 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n001 6 21a0 3e8e 1672 0ff2 | 76 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n002 6 41d9 4bcf 4d6b 4d59 | 38 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n003 7 775e 7125 738c 7920 | 12 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n004 4 6967 6e68 6f2d 6c73 | 11 6831 (0) 6967 (0) 6fe9 (0) 6f5f (0)\n005 3 67aa 67dc 66e7 | 3 67aa (0) 67dc (0) 66e7 (0)\n006 3 6103 60d7 605a | 3 6103 (0) 60d7 (0) 605a (0)\n============ DEPTH: 7 ==========================================\n007 1 6337 | 1 6337 (0)\n008 1 6251 | 1 6251 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","private_key":"83ebb4dfd7e07f53a417d7d2d026d506a6d45dc6ec03f3acc64b473cf238454a","name":"node_628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","services":["streamer"],"enable_msg_events":true,"port":39369},"up":true}},{"node":{"info":{"id":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","name":"node_06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","enode":"enode://299e207d28b61a8754f9056b7c66999601d85c166abf2d5e28b58bb9af5d07ae1191a60f6b7daa7f1db158847cf41042bacd8d65caced5aae6b785279c7db9c9@127.0.0.1:0","enr":"0xf88fb8405c00f8abb44fe6724d6ec81f03c33ed424ef532ff6d7f23711109c46205f12793e95b225e5830489b2b439f04128e4ee2e2aa0732db7eb8c69c53030da7f9b2f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103299e207d28b61a8754f9056b7c66999601d85c166abf2d5e28b58bb9af5d07ae","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BmGNgpqKcxepjxpA7PiGThyUxOJwqeTACCKdx8+Te34=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 06618d\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b820 b2a5 8505 e54b | 110 a653 (0) a6fb (0) a46d (0) a369 (0)\n001 4 534b 4bcf 7dbb 628e | 70 5cd2 (0) 5db0 (0) 5f00 (0) 5efb (0)\n002 5 2abb 2f32 21a0 3e8e | 32 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n003 5 1c9c 19fa 165f 1672 | 22 1b83 (0) 1a2a (0) 18f6 (0) 19fa (0)\n004 5 0af9 0de3 0c28 0ff2 | 11 0b72 (0) 0a00 (0) 0af9 (0) 0d8a (0)\n005 4 0067 00c6 03cc 0328 | 5 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n006 3 0438 0451 045b | 3 0438 (0) 0451 (0) 045b (0)\n============ DEPTH: 7 ==========================================\n007 2 0743 07a8 | 2 0743 (0) 07a8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","private_key":"8d4e48a151d1f68c567c3be3325aab9baa3b0abb8bf08d65ce6cb448cf056f5b","name":"node_06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","services":["streamer"],"enable_msg_events":true,"port":35915},"up":true}},{"node":{"info":{"id":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","name":"node_f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","enode":"enode://5b2117cf5005122b31d4139c5ecffbfb0b3b5b3ccc04122ecee2b65ddc3b5f365fc02b4df864cce4b6b626a9c76bdee3d791ae0dd8acf96c0844b2a6e5641b39@127.0.0.1:0","enr":"0xf88fb840e2d50d151f647dccd99b24b546d0c033602555711b5e9b696b397c56e0301e34144f5201dc6446c2708545baa267d5ab59974b796a1af49a6cde843af933d35e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035b2117cf5005122b31d4139c5ecffbfb0b3b5b3ccc04122ecee2b65ddc3b5f36","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9FZd0sQowD16jV+th6bdX5KucGUp62FS02+lhOfNvk0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f4565d\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7dbb 4bcf 0661 | 146 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n001 6 b820 b2a5 9fa0 9076 | 47 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n002 5 daec d3b0 c620 c1f9 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 6 ed2d eb98 e854 e883 | 18 e027 (0) e7fa (0) e775 (0) e5ad (0)\n004 3 f925 fbc8 fbf5 | 6 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n005 2 f31c f27f | 3 f31c (0) f2d5 (0) f27f (0)\n006 2 f7ba f773 | 4 f629 (0) f7fa (0) f7ba (0) f773 (0)\n007 3 f528 f5b2 f5dc | 3 f528 (0) f5dc (0) f5b2 (0)\n============ DEPTH: 8 ==========================================\n008 1 f4e0 | 1 f4e0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 f45f | 1 f45f (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","private_key":"b9015ed803b33c63a30a8abe7812408ed9cc2ba7efcdb5fcd69f0a681d123675","name":"node_f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","services":["streamer"],"enable_msg_events":true,"port":39127},"up":true}},{"node":{"info":{"id":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","name":"node_4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","enode":"enode://88c7ac31971ce995e22e0820ae73cd53e1bda565f636bea5b3c0472c44d54a66a23d6143ecad625bef9fb09e3e64da6fd629ead736b184981cb9052a1cb0489f@127.0.0.1:0","enr":"0xf88fb840c74ff09f194ac5d818ba51ea9fd29c00ac3ebd753d02ec50dfe7c1438f754d9c794455cf5ee526e53b257971614e8b756a1a4c0da3fbcac597cbf2044a14e7e20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10388c7ac31971ce995e22e0820ae73cd53e1bda565f636bea5b3c0472c44d54a66","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"S89OtTHV7Esx2Z6DVK8D+XZSTHhYoecEPptwVTJvCVI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4bcf4e\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 82dd c898 e883 f456 | 110 a653 (0) a6fb (0) a46d (0) a369 (0)\n001 6 2abb 314a 179f 1672 | 76 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n002 10 6ea5 6c73 628e 67dc | 32 6831 (0) 6967 (0) 6fe9 (0) 6f5f (0)\n003 2 5823 534b | 15 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n004 6 4636 4646 44a1 4559 | 12 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n005 4 4e5a 4d6b 4d59 4c9e | 5 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n006 3 4990 49cd 49ea | 3 4990 (0) 49cd (0) 49ea (0)\n============ DEPTH: 7 ==========================================\n007 2 4ac7 4a8b | 2 4ac7 (0) 4a8b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","private_key":"4cc4751021f2e7e361f1abe34a0ae098305a4d7cfae9fff4e3d9c198f765536c","name":"node_4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","services":["streamer"],"enable_msg_events":true,"port":37843},"up":true}},{"node":{"info":{"id":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","name":"node_82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","enode":"enode://9e0bd5f9048e54e757f441f6e806f675359f125df0759d69c99dfa05b612264f47f2e4ef3b1e8c33ea12203b3539baa8e8f7112a42c09fba13c8088012abf854@127.0.0.1:0","enr":"0xf88fb840ce5cbe31c864fb919be4b8bbaeb4aac9af3baceddb264f0fc41711cfe79eac031fef6d0c4e5186833885990f4fb8bf788dfde9ec3140e53dd617c1a301f7da460183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029e0bd5f9048e54e757f441f6e806f675359f125df0759d69c99dfa05b612264f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gt2Dg4y5griVBe8knTU6IOQ0NG3Xi3HNm4CfcdXBEto=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 82dd83\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0fc5 66e7 628e 7125 | 146 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n001 8 daec c898 c1f9 f456 | 63 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n002 6 b820 b2a5 b02b af02 | 27 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n003 5 96fc 9076 9852 9890 | 10 959f (0) 976e (0) 96fc (0) 915d (0)\n004 5 8f21 898d 886a 88a1 | 5 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n005 2 849b 8505 | 2 849b (0) 8505 (0)\n============ DEPTH: 6 ==========================================\n006 1 8025 | 1 8025 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 82f9 | 1 82f9 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","private_key":"40b87f812144699438e8ce3203329a31e5e6fd191ccc6d632b53acd2dabf009a","name":"node_82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","services":["streamer"],"enable_msg_events":true,"port":36651},"up":true}},{"node":{"info":{"id":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","name":"node_7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","enode":"enode://c6f41778e207aa191bfcc7583d517dc276591cb6e4ea45a7f640b9e296d6ac32ed466e046bd8e3cd7213d78408c82594ab0d4f91fff4af306e45e91e25568f08@127.0.0.1:0","enr":"0xf88fb840cd11dd01b07641a3cc440cc6247d249d33f4f5f6f8812ff8f209b221f42611e934dd83397f8ce608353435eff2358217cfcee195e78947e92f7f10ae9c8dface0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c6f41778e207aa191bfcc7583d517dc276591cb6e4ea45a7f640b9e296d6ac32","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fbveujcx4f9DBy+MvYbbFHdh4bYXU+6nAkd02/RpFL0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7dbbde\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f456 e54b 8505 82dd | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 8 1672 179f 0328 0661 | 76 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n002 3 524d 4d6b 4bcf | 38 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n003 9 6ea5 6f2d 6c73 6c4d | 20 6831 (0) 6967 (0) 6fe9 (0) 6f5f (0)\n004 3 738c 7125 775e | 5 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n005 3 7920 7b90 7a60 | 3 7a60 (0) 7b90 (0) 7920 (0)\n006 1 7e04 | 1 7e04 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 2 7dd3 7dc2 | 2 7dd3 (0) 7dc2 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","private_key":"30869970089e876f509073901dbe3a34c332d7a6755999e960da313f0d41bdda","name":"node_7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","services":["streamer"],"enable_msg_events":true,"port":42487},"up":true}},{"node":{"info":{"id":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","name":"node_314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","enode":"enode://2ddf028c09516742c8f18d9dc30575448afbf80f0999e2cccc53671e4b12c97af49c3251151d20ff3c38c6e4885805039f3e31e32101cdb9ccb70596e29e6e97@127.0.0.1:0","enr":"0xf88fb84084eb7ae1c3f66517fa8698e26815ca4ddd8d95653248080c4cf1ae2af93c9ae76806cd1ba9bd6bce2079c1762ba8bc13a96e07869d8fc5fde206d61c694ac4010183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032ddf028c09516742c8f18d9dc30575448afbf80f0999e2cccc53671e4b12c97a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MUo1MKXgw31WCRSbOunC4HhXM0a9j848dp666zFybsE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 314a35\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 af02 8505 daec e54b | 110 a369 (0) a34e (0) a653 (0) a6fb (0)\n001 7 534b 41d9 4d6b 4bcf | 70 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n002 6 1c9c 19fa 165f 0c28 | 44 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n003 6 2c79 2f32 2abb 256e | 15 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n004 6 39d1 3b78 3b88 3efc | 7 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n005 4 35e6 378e 3780 3630 | 4 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n006 3 3237 33b5 3373 | 3 3237 (0) 3373 (0) 33b5 (0)\n============ DEPTH: 7 ==========================================\n007 2 3089 30be | 2 3089 (0) 30be (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","private_key":"65cff60a3a02082e25d44b652a89286c56814d6e8a124c9cd481c53d6bfc7d14","name":"node_314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","services":["streamer"],"enable_msg_events":true,"port":34143},"up":true}},{"node":{"info":{"id":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","name":"node_e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","enode":"enode://2ff0f6983a8df852e410db35700f5eb2e9b6626b555eb6a0f46ed3b1039c11d99e30fa7fb8ef8a5e04f6747539a8fa3b422b0e167e3740bfd0dfc6f05b7811c0@127.0.0.1:0","enr":"0xf88fb84073d5865ea6eef52ccbd4fb0579988b8c89f10c04bf0aab24b530bccf20477019412b8e906f69332ba31a2b366d9cf41dc6b91c1c3dbf0201b5c1815aba93e7990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022ff0f6983a8df852e410db35700f5eb2e9b6626b555eb6a0f46ed3b1039c11d9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6IMPKy99CN8VvTP0soQdAdnWLBYhI0vWroZ0PlI2Dz4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e8830f\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 628e 4bcf 4d6b 103b | 146 5b63 (0) 58ed (0) 5823 (0) 5f00 (0)\n001 4 b820 9890 82dd 8505 | 47 a46d (0) a653 (0) a6fb (0) a369 (0)\n002 5 d3b0 daec c1f9 cc20 | 26 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n003 6 fbf5 fbc8 f773 f456 | 19 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n004 4 e027 e7fa e775 e54b | 8 e027 (0) e7fa (0) e775 (0) e5ad (0)\n005 4 ed2d efea ef07 ee5e | 6 ec52 (0) ed2d (0) ee5e (0) ef1b (0)\n006 1 eb98 | 1 eb98 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 e854 | 1 e854 (0)\n009 1 e8ef | 1 e8ef (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","private_key":"300d395f69d29389b4951f1054ccdecbbb0aa4ee4359e0a42916d279feed61b9","name":"node_e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","services":["streamer"],"enable_msg_events":true,"port":44709},"up":true}},{"node":{"info":{"id":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","name":"node_e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","enode":"enode://88d397dae0a821bb3ade7f8b6934b521491617f1f55ce053be63153915a1d422f16ab186007929b0232d9a7fd420cf692a7df1d9f419a191a1e9e57698485728@127.0.0.1:0","enr":"0xf88fb8405030079ea6a64ac5c86f5eb9955181bb9c23d35cbc28ed8a13410b3c9e9a234928490232594c4773176af76896b5283dffb7979ca1082589e48a45d54473d9e70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10288d397dae0a821bb3ade7f8b6934b521491617f1f55ce053be63153915a1d422","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5UtkPLyV2fXSfsN2DYkraAKYG/q/T5l5Jn1mJZ35gsc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e54b64\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 4d6b 7dbb 1672 0661 | 146 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n001 5 b820 9890 9fa0 82dd | 47 a653 (0) a6fb (0) a46d (0) a369 (0)\n002 5 daec d3b0 c898 c1f9 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 6 fbf5 fbc8 f31c f27f | 19 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n004 7 ed2d ee5e ef1b efea | 10 ec52 (0) ed2d (0) ee5e (0) ef07 (0)\n005 1 e027 | 1 e027 (0)\n006 2 e775 e7fa | 2 e7fa (0) e775 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 e5d7 e5ad | 2 e5d7 (0) e5ad (0)\n009 1 e514 | 1 e514 (0)\n010 0 | 0\n011 0 | 0\n012 1 e547 | 1 e547 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","private_key":"727ffbf99e8a4a3259aa56178cd67759e1efcf9d6a0d1bbc5eced5778195a6bb","name":"node_e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","services":["streamer"],"enable_msg_events":true,"port":35117},"up":true}},{"node":{"info":{"id":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","name":"node_850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","enode":"enode://f96b8378f9a6fdb344b192c08fa716f806c81b10d9ff1be769f2f147f0a3e59be1d63e3458c6bb0be3826901cc82855dcb176ea550580ce3c1353f45411effa8@127.0.0.1:0","enr":"0xf88fb840e608377b110a66c37a6402a52005fab9cbbd1293d2faf8ac2f2d11f21c86074e65803f9af2fd8a4652da5a03c3a8f62c56bedc2b504966b9def8bec4d14aa6f10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f96b8378f9a6fdb344b192c08fa716f806c81b10d9ff1be769f2f147f0a3e59b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hQV1V31rQgqHq6OIr0geDARML3XPKf+TTa9WdDGKYbo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 850575\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0fc5 0661 314a 7125 | 146 0a00 (0) 0af9 (0) 0b72 (0) 0e5e (0)\n001 5 c620 fbc8 f456 e883 | 63 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n002 9 af02 aeb4 a46d a6fb | 27 a369 (0) a34e (0) a653 (0) a6fb (0)\n003 6 9fa0 9852 9890 9076 | 10 959f (0) 976e (0) 96fc (0) 915d (0)\n004 5 898d 886a 88a1 88fe | 5 898d (0) 886a (0) 88fe (0) 88a1 (0)\n============ DEPTH: 5 ==========================================\n005 3 8025 82f9 82dd | 3 8025 (0) 82f9 (0) 82dd (0)\n006 0 | 0\n007 1 849b | 1 849b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","private_key":"771aa77f7ed2c88cec05f7d2bbe77ca3b3baed77808bcede79d47430b855ef8c","name":"node_850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","services":["streamer"],"enable_msg_events":true,"port":38191},"up":true}},{"node":{"info":{"id":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","name":"node_4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","enode":"enode://65fe4500b12d8a6300f6dfa00c6053c96a116b98d8c08d706534d0b0cd73def015021b00da0ea48952faaf26fb6860612ae6f05dc69e3152a60467c474513524@127.0.0.1:0","enr":"0xf88fb840e4f68b9d9c982c9d702d4e773ac1559d8ef54db673accfcab9b83cf5f16a0d191460f4acfcad1a8c86b72017692073a6ad12e178800fa4dd5c30f7958acfb4530183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10265fe4500b12d8a6300f6dfa00c6053c96a116b98d8c08d706534d0b0cd73def0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TWuTn7ZzOMSElIq5KyzupNS2Ztfgh3NnPNfI+D9JW4k=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d6b93\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c898 e54b e883 8505 | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 4 314a 2abb 0328 179f | 76 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n002 7 67dc 628e 6ea5 775e | 32 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n003 2 5823 534b | 15 5f00 (0) 5efb (0) 5db0 (0) 5cd2 (0)\n004 5 4559 44a1 4646 4636 | 12 47bf (0) 4782 (0) 46fe (0) 4646 (0)\n005 6 4bcf 4ac7 4a8b 4990 | 6 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n006 1 4e5a | 1 4e5a (0)\n007 1 4c9e | 1 4c9e (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 4d10 | 1 4d10 (0)\n010 1 4d59 | 1 4d59 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","private_key":"ec9be85f4525323e3e5fba6d38fddd6e2c490c51f04e40824f612945338ff314","name":"node_4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","services":["streamer"],"enable_msg_events":true,"port":33119},"up":true}},{"node":{"info":{"id":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","name":"node_9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","enode":"enode://74dcd08206970995c262f6fdc36f05eb33b2efd6a76f8dad6d50f4c990fdfff532b14e3a48ae9fdad2e8969bb28c472b5fa4e037266ed8ab1b223d351b00c58c@127.0.0.1:0","enr":"0xf88fb840e8a03ba6a2bd809293a3aa9fc2cd67a032f701eda802d05b9fed7988cd354f6228072d95e1279cfdbb332a0b3f7b6bcc772dd13ef98a3cab034c0beef16d15840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10274dcd08206970995c262f6fdc36f05eb33b2efd6a76f8dad6d50f4c990fdfff5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"n6AhXpgNyQffTMR6tJN/NlJ9ePmDdJMBb9T8UeYXKZw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9fa021\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2abb 21a0 1672 179f | 146 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n001 7 fbc8 f45f f456 f773 | 63 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n002 8 af02 a6fb a34e b2a5 | 27 a369 (0) a34e (0) a46d (0) a653 (0)\n003 5 8505 849b 8025 82f9 | 10 898d (0) 886a (0) 88fe (0) 88a1 (0)\n004 6 9076 90a8 915d 959f | 6 959f (0) 976e (0) 96fc (0) 915d (0)\n============ DEPTH: 5 ==========================================\n005 2 9852 9890 | 2 9852 (0) 9890 (0)\n006 1 9d0f | 1 9d0f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","private_key":"2151ae4bd0c0dbe72d08c6cc2dc2d42d45d5929d158953f98802508bcc7b6abc","name":"node_9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","services":["streamer"],"enable_msg_events":true,"port":42793},"up":true}},{"node":{"info":{"id":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","name":"node_179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","enode":"enode://45316c9ce2f7458c2170694fa0458bb6bc612e0fe7e98d5776eaa2deb243090f2112f86d6378e3fbf2bc3581294561eba34c820855dde3c62fbbd0fb00d464bc@127.0.0.1:0","enr":"0xf88fb840ba7939a13853c684f0fbba8aabd321c8c18392c860e899d661b8ae62334778bc3a1cc6bd039962763203c07b6f86aa8b247af81fb2c72e4b1e9de83cd2f02d3e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10245316c9ce2f7458c2170694fa0458bb6bc612e0fe7e98d5776eaa2deb243090f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"F58h0uBCG4BW7pomC8CYW/pkpSo20Kj7zk4D8xINHWU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 179f21\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c1f9 c898 daec fbc8 | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 3 7dbb 4bcf 4d6b | 70 6fe9 (0) 6f5f (0) 6f2d (0) 6e05 (0)\n002 3 3b88 21a0 2abb | 32 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n003 6 0ff2 0c28 00c6 0328 | 22 0b72 (0) 0a00 (0) 0af9 (0) 0e5e (0)\n004 3 19fa 1c9c 1c8a | 10 1f67 (0) 1f85 (0) 1e2a (0) 1c47 (0)\n005 3 13d6 11d4 103b | 3 13d6 (0) 11d4 (0) 103b (0)\n006 4 14df 1400 1436 154b | 4 14df (0) 1400 (0) 1436 (0) 154b (0)\n007 2 165f 1672 | 2 165f (0) 1672 (0)\n============ DEPTH: 8 ==========================================\n008 1 1704 | 1 1704 (0)\n009 1 17db | 1 17db (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","private_key":"6fc4e9abe82ac6f220359e1a24c752a8538ca3d77fa2a44721ec006e4dac96c8","name":"node_179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","services":["streamer"],"enable_msg_events":true,"port":46579},"up":true}},{"node":{"info":{"id":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","name":"node_2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","enode":"enode://079b150d46590810199925ef6914c54c274297aa5ddbaec77e0e1881fb11e67c597e4310d3fa518e919ba3530c7863fb75e67892ba8a3ee5385446aded8bd46c@127.0.0.1:0","enr":"0xf88fb840e4c34bba2889adb60fd7f03da39f9172c73803337915b8a91a787ecd1e15f7ac32b8c5ebc60e9bc30a9f10e582b6c56955e330b874275d8f785b67b3d2b7ad7a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102079b150d46590810199925ef6914c54c274297aa5ddbaec77e0e1881fb11e67c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KruTi4iaLrc1E0RimFpWBWvkjxibW4nSO2U4ZMdkJ/Q=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2abb93\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e883 c1f9 af02 9fa0 | 110 d7ac (0) d640 (0) d3b0 (0) d299 (0)\n001 6 7dbb 6967 66e7 534b | 70 6c4d (0) 6c73 (0) 6fe9 (0) 6f5f (0)\n002 6 0c28 0661 045b 19fa | 44 0b72 (0) 0a00 (0) 0af9 (0) 0e5e (0)\n003 5 3b88 3e8e 3ec5 3efc | 17 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n004 3 256e 24b8 21a0 | 6 24b8 (0) 256e (0) 20ae (0) 2101 (0)\n005 5 2d36 2c79 2c38 2ccf | 5 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n006 1 2995 | 1 2995 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 2a0a | 1 2a0a (0)\n009 0 | 0\n010 1 2a97 | 1 2a97 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","private_key":"5f2d2d97cebeab930620649942a1d9ff3fb18cfdfe20065c115c21fcc1736417","name":"node_2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","services":["streamer"],"enable_msg_events":true,"port":46385},"up":true}},{"node":{"info":{"id":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","name":"node_16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","enode":"enode://e24763610f818132ec0e495f6371f3e94f8822100ee5956998fc7585d7e09a222bbdb9a02937e628ca33f6902fe511b8711405899f5cddfa93a1035ac09af4b8@127.0.0.1:0","enr":"0xf88fb840df13ef5dcc1c0cb21d197b2cdfd5d86b8bec8a3882f2c8ba0166a590276699446bccccceac9b5ccb0bcf42d3f59ee925945d58295588d35de7077b7910c5401f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e24763610f818132ec0e495f6371f3e94f8822100ee5956998fc7585d7e09a22","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FnJeMYMiNTvvwvKroRLwmEvAEYIbsWyY4s2LOc1irqE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 16725e\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 e54b c1f9 9fa0 | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 8 4bcf 6831 66e7 628e | 70 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n002 3 3b88 21a0 2abb | 32 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n003 4 0c28 045b 0661 0328 | 22 0b72 (0) 0af9 (0) 0a00 (0) 0e5e (0)\n004 2 1c9c 19fa | 10 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n005 3 13d6 103b 11d4 | 3 13d6 (0) 103b (0) 11d4 (0)\n006 4 14df 1400 1436 154b | 4 14df (0) 1400 (0) 1436 (0) 154b (0)\n============ DEPTH: 7 ==========================================\n007 3 1704 17db 179f | 3 1704 (0) 17db (0) 179f (0)\n008 0 | 0\n009 0 | 0\n010 1 165f | 1 165f (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","private_key":"0e22a97f0fa9df60515e999107287dd670bbfba6496b95e7419f1ae24ac1430f","name":"node_16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","services":["streamer"],"enable_msg_events":true,"port":42487},"up":true}},{"node":{"info":{"id":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","name":"node_03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","enode":"enode://3960e88898c09e1856391d4ff8b0e413551efaa9d41b29dbe1d131c4c23d0f3debf2451b0019c3cd1a3cced4e5b0ead9dd73ca011cf6f319d3a6440623ce12c3@127.0.0.1:0","enr":"0xf88fb8403059f7dae44ef458aafb69f9b519e35847da261c7fc2415beb3027871fc5f55b0a37db22d9d2e503fae99b8dce9317e0aab1999b6dc73f581ac8fdabbc40cb7e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033960e88898c09e1856391d4ff8b0e413551efaa9d41b29dbe1d131c4c23d0f3d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AyheBmVwMneP7/C0OCjJZNv53mafYxca61h6oaH6zAo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 03285e\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c1f9 f31c | 110 d7ac (0) d640 (0) d3b0 (0) d299 (0)\n001 7 7dbb 7dc2 628e 6251 | 70 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n002 4 3e8e 3ec5 3b88 21a0 | 32 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n003 4 19fa 179f 165f 1672 | 22 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n004 6 0a00 0af9 0c28 0de3 | 11 0b72 (0) 0a00 (0) 0af9 (0) 0e5e (0)\n005 4 045b 0438 07a8 0661 | 6 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n006 2 0067 00c6 | 2 0067 (0) 00c6 (0)\n============ DEPTH: 7 ==========================================\n007 1 02d8 | 1 02d8 (0)\n008 1 03cc | 1 03cc (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","private_key":"eb65890ae3df82c2a8355c7b7a50e258abb0c833e93aacc2a5dbd51ee15664d4","name":"node_03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","services":["streamer"],"enable_msg_events":true,"port":37579},"up":true}},{"node":{"info":{"id":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","name":"node_21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","enode":"enode://af8cb83192683c7397ab76929a7a6ebd42a34f250c74baa77449624ec14ff1014486c342f70c70454d60192f7a52ad16cab58958b752e01feea05491ad7b7915@127.0.0.1:0","enr":"0xf88fb84060c1ac919d32f84d9c226ded0dc92ed0cb32034912167e68663f93a3644a8e6b1235368600a6006c4a63078fec8299adecdc0afc9a016fa9eace65a141581d610183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103af8cb83192683c7397ab76929a7a6ebd42a34f250c74baa77449624ec14ff101","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IaBE53K3yVX+Sm+3w6miDpXUi3/WuVGHQXgvBPXx9cI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 21a044\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 af02 9fa0 c1f9 ed2d | 110 b7ca (0) b65e (0) b626 (0) b5b2 (0)\n001 10 534b 6967 6c73 6ea5 | 70 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n002 8 19fa 1436 179f 1672 | 44 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n003 6 3ec5 3efc 3e8e 3b88 | 17 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n004 3 2f32 2c79 2abb | 9 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n005 2 256e 24b8 | 2 256e (0) 24b8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 20ae | 1 20ae (0)\n008 2 217f 2101 | 2 217f (0) 2101 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","private_key":"e8c622b14e0b37df0fd9611ed22903fd62f8b8823866163156b933c17f3fc9b3","name":"node_21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","services":["streamer"],"enable_msg_events":true,"port":40127},"up":true}},{"node":{"info":{"id":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","name":"node_f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","enode":"enode://2d511a834e682276a6f3a8650f3728bec644ab1efd34d504e37aeb317f3a3ee4c0ee0db1c4fa4fd0db73a1da15fef34b527a2587be73d68b35da971c09e6ad5e@127.0.0.1:0","enr":"0xf88fb840d947ce6d973f74d7e2c06e2aa7b0511cf2a30fb7f6565a76dd01220c3071d124635ae79845e4bf315d6a2e0e07acaf661c378ed6998c33219c8cf3158949cc840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022d511a834e682276a6f3a8650f3728bec644ab1efd34d504e37aeb317f3a3ee4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8xzHROqSH+6DZMUmmxzn7GtfDAy7aIXvv2At5bNvYWk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f31cc7\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 775e 0328 21a0 | 146 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n001 6 b95d af02 82dd 849b | 47 b65e (0) b626 (0) b7ca (0) b5b2 (0)\n002 6 d1d7 daec c898 cc20 | 26 d640 (0) d7ac (0) d3b0 (0) d299 (0)\n003 8 e027 e54b e7fa ee5e | 18 ec52 (0) ed2d (0) ee5e (0) ef07 (0)\n004 5 f925 fbc8 fbf5 ff36 | 6 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n005 9 f4e0 f45f f456 f528 | 10 f528 (0) f5b2 (0) f5dc (0) f4e0 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 f2d5 f27f | 2 f2d5 (0) f27f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","private_key":"7b96931ae2b82181dbbf1ce714ef7dcd8a73ee4ba37b6cd3e5a38c185179b50a","name":"node_f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","services":["streamer"],"enable_msg_events":true,"port":43987},"up":true}},{"node":{"info":{"id":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","name":"node_c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","enode":"enode://3e653640cb83949eb33046e1f53f3cea2dfc41dda2b5b820f8f519198a9ef5be60bb4feb02bcab43abc24d6283d318be1d4e79ff8530dfe9c9a0cd3b0583460f@127.0.0.1:0","enr":"0xf88fb84070b2190039d9877fc8133fa67fa8c4ce0339ca41fe322a61637d2f6a0501d7d41dfbf0f867138735e708a26fcc2df5419d72eb535ba75a4ab36df55305b825e40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033e653640cb83949eb33046e1f53f3cea2dfc41dda2b5b820f8f519198a9ef5be","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wfno4dUJ/r3x8me7IndB5RNCAEii5mmsnu9LBaKc8Qs=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c1f9e8\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 738c 6251 179f 1672 | 146 5b63 (0) 58ed (0) 5823 (0) 5db0 (0)\n001 6 b95d af02 82dd 849b | 47 b65e (0) b626 (0) b7ca (0) b5b2 (0)\n002 14 e883 efea ee5e ed2d | 37 ec52 (0) ed2d (0) ef07 (0) ef1b (0)\n003 4 d1d7 d3b0 d887 daec | 11 df1e (0) d863 (0) d887 (0) db6a (0)\n004 3 cc20 ca04 c898 | 6 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n============ DEPTH: 5 ==========================================\n005 7 c59e c49c c441 c43f | 7 c59e (0) c49c (0) c441 (0) c43f (0)\n006 1 c26f | 1 c26f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","private_key":"d1af3c939ccb6fbd80b3e800e90fc304fe1a95e5093d4b8a8014d2c2bcc614ef","name":"node_c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","services":["streamer"],"enable_msg_events":true,"port":38941},"up":true}},{"node":{"info":{"id":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","name":"node_f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","enode":"enode://ebdf19a2508ec342f90a571ea57e25d9fe086842827fb7122f9040f247be1782a6f73e3830e0d4a6d15fb9ba45deaefdd93c4c7ff95d9062fc9fa64149f98e39@127.0.0.1:0","enr":"0xf88fb84074708297591a962a8f10e1c5023c61300d115facd722246df478257dcb61eab468084b00d42034c7472dc28fa7dd04a6e8c31f4478bfb790e7d6a45f9a011a6f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ebdf19a2508ec342f90a571ea57e25d9fe086842827fb7122f9040f247be1782","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"93O4Pxod4qtmYO2wt2XPzOxneAYe4lxahPloYlaG72A=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f773b8\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 3ec5 045b 7dc2 | 146 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n001 5 b95d af02 849b 9fa0 | 47 b626 (0) b65e (0) b7ca (0) b5b2 (0)\n002 7 daec d299 d1d7 c898 | 26 d7ac (0) d640 (0) d3b0 (0) d299 (0)\n003 8 ed2d ee5e eb98 e854 | 18 ec52 (0) ed2d (0) ef07 (0) ef1b (0)\n004 4 fe21 f925 fbf5 fbc8 | 6 fe31 (0) fe21 (0) ff36 (0) f925 (0)\n005 3 f2d5 f27f f31c | 3 f2d5 (0) f27f (0) f31c (0)\n006 6 f528 f5b2 f5dc f4e0 | 6 f528 (0) f5b2 (0) f5dc (0) f4e0 (0)\n007 1 f629 | 1 f629 (0)\n============ DEPTH: 8 ==========================================\n008 2 f7fa f7ba | 2 f7fa (0) f7ba (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","private_key":"e898408c6a69bdbbb2b3d144d09beeb11db724b09c3b43d166192d7af9c168a9","name":"node_f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","services":["streamer"],"enable_msg_events":true,"port":37133},"up":true}},{"node":{"info":{"id":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","name":"node_7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","enode":"enode://ce63a767ab6f112649325e6862410a7e4788fec965925e83abcbc055deca8a04c3beb8619a415ae9a767691bbec01ec218ee44b8a1afd11a06ccbdd63e64d135@127.0.0.1:0","enr":"0xf88fb8400698b27f1b516079af94fb615edaac2e5afe70b2961bcf8525534071441b3b0409021a48a66ad2e700e4d9d46ee752d9aebb9a55dbcac1c6aa072024a7139b260183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ce63a767ab6f112649325e6862410a7e4788fec965925e83abcbc055deca8a04","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fcKpVz8lPzYu8bIbv8wUSxGm/rxYqjxEMCJBYOn6c4w=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7dc2a9\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9890 f45f f773 | 110 b502 (0) b5b2 (0) b7ca (0) b65e (0)\n001 3 1672 0328 045b | 76 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n002 7 524d 534b 44a1 4559 | 38 58ed (0) 5823 (0) 5b63 (0) 5f00 (0)\n003 8 6c4d 6ea5 6f2d 6831 | 20 6c73 (0) 6c4d (0) 6fe9 (0) 6f5f (0)\n004 5 775e 77d2 7125 7290 | 5 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n005 3 7a60 7b90 7920 | 3 7a60 (0) 7b90 (0) 7920 (0)\n006 1 7e04 | 1 7e04 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 7dbb | 1 7dbb (0)\n010 0 | 0\n011 1 7dd3 | 1 7dd3 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","private_key":"202bed44b0e5747d57db0077e83d62aa8814b4a640a338a0b0e200d4231f69dc","name":"node_7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","services":["streamer"],"enable_msg_events":true,"port":38091},"up":true}},{"node":{"info":{"id":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","name":"node_045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","enode":"enode://a8da5558c682d2a891ea880bbed34a14cb1087c5fe6ee20c66210ab1eac9fd69dc13a6fc924f84bb35b5dfb838f499895a1226efd887e3e0ac1e76b92ea358b8@127.0.0.1:0","enr":"0xf88fb840e00bd27f128a7ceab96f9085ff60dba7842de4f23816bc8e957a96a3d4807a3b209f5c0675fe420cd322fe7bcc131344e5aae695d4a6b95c0224634bcf102c0c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a8da5558c682d2a891ea880bbed34a14cb1087c5fe6ee20c66210ab1eac9fd69","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BFuo2kZB2j8LgFi7DZ2Kr7uBSW3ByuKj/ZwDmn4cr7Y=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 045ba8\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c1f9 f773 9890 | 110 ec52 (0) ed2d (0) ef1b (0) ef07 (0)\n001 2 775e 7dc2 | 70 5b63 (0) 58ed (0) 5823 (0) 5f00 (0)\n002 6 3b88 3efc 3ec5 314a | 32 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n003 4 1672 165f 179f 19fa | 22 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n004 4 0ff2 0fc5 0de3 0c28 | 11 0b72 (0) 0a00 (0) 0af9 (0) 0e5e (0)\n005 4 0328 02d8 0067 00c6 | 5 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n006 2 07a8 0661 | 3 0743 (0) 07a8 (0) 0661 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 0438 | 1 0438 (0)\n010 0 | 0\n011 0 | 0\n012 1 0451 | 1 0451 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","private_key":"be4604105acf932a56aeb47b672aa90728f8e2a6b5e4eac4c582dd5646f61358","name":"node_045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","services":["streamer"],"enable_msg_events":true,"port":37847},"up":true}},{"node":{"info":{"id":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","name":"node_9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","enode":"enode://9ca38a60e6b0d6f83aca233c9b27c0817b0d3ab7644e05fc12cd158726f9a752b4904052a3ec36b45ed9cd04fa8563b84a94d384ce66831e18f71cd74f9c6951@127.0.0.1:0","enr":"0xf88fb840d0e03834031b00b0b1497f467bf9bca7abd4b7e83a8a6534025d2f58b88220556789b327681ded4921f921cd6711f0f7b181b548c87ffefc722fb53c5fdb7f210183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039ca38a60e6b0d6f83aca233c9b27c0817b0d3ab7644e05fc12cd158726f9a752","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mJDm67LG+ae+xMJ3jgd+NxDOOvNW+CrptNMkgy0Vnvc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9890e6\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7dc2 775e 045b | 146 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n001 7 c1f9 e54b e883 fbc8 | 63 ec52 (0) ed2d (0) ef1b (0) ef07 (0)\n002 7 af02 a34e b95d b897 | 27 b626 (0) b65e (0) b7ca (0) b5b2 (0)\n003 3 8505 849b 82dd | 10 898d (0) 886a (0) 88fe (0) 88a1 (0)\n004 5 9076 90a8 959f 976e | 6 959f (0) 976e (0) 96fc (0) 915d (0)\n============ DEPTH: 5 ==========================================\n005 2 9d0f 9fa0 | 2 9d0f (0) 9fa0 (0)\n006 0 | 0\n007 0 | 0\n008 1 9852 | 1 9852 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","private_key":"91c1cd51e3963ac4ebcb1fe6e859426d29a1872f98d56582b779f77a16d76109","name":"node_9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","services":["streamer"],"enable_msg_events":true,"port":36407},"up":true}},{"node":{"info":{"id":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","name":"node_775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","enode":"enode://0fbe2eb4516d803819afa51e4a2f9d86b0e2500f1f9c664c51c812be957a1eb071e0ff91c18545685b7c8d58366451323dfd6e919071e515387c9a9be992b424@127.0.0.1:0","enr":"0xf88fb8407865c59fc952191a2f0320a38291d0936783b994a63bb99bcbbc58fadc871a32638de097c22553f495619842efee63e70aa5550fc1bf656088bd1938df45ed5d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020fbe2eb4516d803819afa51e4a2f9d86b0e2500f1f9c664c51c812be957a1eb0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"d1575QLfj9k4z5xC7k+sM+RgpLaZK57+uNwf993lxA8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 775e7b\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 f31c 9890 | 110 ec52 (0) ed2d (0) ef07 (0) ef1b (0)\n001 3 045b 1672 19fa | 76 2f32 (0) 2d36 (0) 2ccf (0) 2c38 (0)\n002 5 534b 524d 4bcf 4c9e | 38 5b63 (0) 58ed (0) 5823 (0) 5f00 (0)\n003 9 6ecb 6ea5 6c4d 6c73 | 20 6831 (0) 6967 (0) 6c73 (0) 6c4d (0)\n004 6 7b90 7920 7e04 7dc2 | 7 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n============ DEPTH: 5 ==========================================\n005 3 7125 7290 738c | 3 7125 (0) 7290 (0) 738c (0)\n006 0 | 0\n007 0 | 0\n008 1 77d2 | 1 77d2 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","private_key":"1d0023ab98fa043da972badeee9fd4d8df9514307a8158fdddee5c7ba1df9405","name":"node_775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","services":["streamer"],"enable_msg_events":true,"port":38817},"up":true}},{"node":{"info":{"id":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","name":"node_738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","enode":"enode://cda9d251eca9ce01ba41a3c17fa3b1f665bd822176bb5e8713e9865c8aa07e087f75d33c65c897484f96471c8877a32f746463e4fb55a0bb3d2ec550abbf66d8@127.0.0.1:0","enr":"0xf88fb8406c67c864c9f890ffca30545b73befcd0c86f9fd8ad5e355d00b6a3c631ebdab07b4d54f271fd817f63f621d48593488c298ce9abf52c8ecdc08d65dbf149c5070183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cda9d251eca9ce01ba41a3c17fa3b1f665bd822176bb5e8713e9865c8aa07e08","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"c4wtQkWJZdA8j58FXq8OPt89+ipN4KBI7AW3jnt2XJA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 738c2d\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 af02 b897 849b c1f9 | 110 915d (0) 90a8 (0) 9076 (0) 959f (0)\n001 3 21a0 1672 19fa | 76 2f32 (0) 2d36 (0) 2ccf (0) 2c38 (0)\n002 6 524d 44a1 4559 4bcf | 38 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n003 9 6c73 6c4d 6ea5 6831 | 20 6831 (0) 6967 (0) 6c73 (0) 6c4d (0)\n004 6 7920 7b90 7e04 7dbb | 7 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n005 2 77d2 775e | 2 77d2 (0) 775e (0)\n============ DEPTH: 6 ==========================================\n006 1 7125 | 1 7125 (0)\n007 1 7290 | 1 7290 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","private_key":"728881169692d835251307412b70e5bf5bab2e025d4075c0571eb4575cd8fa0a","name":"node_738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","services":["streamer"],"enable_msg_events":true,"port":44907},"up":true}},{"node":{"info":{"id":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","name":"node_e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","enode":"enode://f4feccd03c0ab9c061130b9bc469d72e44850b40c65c1dfca65ebd585d1ff154419ac9cae4b7253273128994742c14550d13d278cddc876adbe481e1a8acc07d@127.0.0.1:0","enr":"0xf88fb840c5269e2a1ffb34a29af3d3688ea0843b35546e0313938addaccbde1f97c82c823c987f0b038109c00a1a3552cef7c3dcdd95180fbe5ed39821c257e0a378f34d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f4feccd03c0ab9c061130b9bc469d72e44850b40c65c1dfca65ebd585d1ff154","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5/pxEq3HsCPdWWXmICdxIlQhU/h+r13urMilHxd4unc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e7fa71\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 3efc 19fa 67dc 738c | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 4 849b b897 b95d af02 | 47 915d (0) 90a8 (0) 9076 (0) 959f (0)\n002 6 db6a daec d299 d1d7 | 26 df1e (0) d887 (0) d863 (0) db6a (0)\n003 3 f31c f528 f45f | 19 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n004 7 eb98 e854 e8ef e883 | 10 eb98 (0) e854 (0) e8ef (0) e883 (0)\n005 1 e027 | 1 e027 (0)\n============ DEPTH: 6 ==========================================\n006 5 e5d7 e5ad e514 e547 | 5 e5d7 (0) e5ad (0) e514 (0) e547 (0)\n007 0 | 0\n008 1 e775 | 1 e775 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","private_key":"3698971ede47de5ef29ce2ab0eb433184d7570578147e4189713e90a2cfc37a6","name":"node_e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","services":["streamer"],"enable_msg_events":true,"port":44579},"up":true}},{"node":{"info":{"id":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","name":"node_f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","enode":"enode://dbf1445ea421e785c6e095596b2a52a7179cd19f387200d9c0e855c53419fefcee80384b81636c5d042ef9bbebaaa11d1b32df623a942e01ab10692f3db30324@127.0.0.1:0","enr":"0xf88fb840946cc04d7fc58d61080fd4bb13dd8e38ec6b5e85d92296892845774c4a0a3b496587cd1807eda5a924c4eb9a6d9377f0ff6c65b98f0d35e0b8cebeb91c0c49350183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102dbf1445ea421e785c6e095596b2a52a7179cd19f387200d9c0e855c53419fefc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9F8fLlnpR+BPoVvPh/hy721ztz93jhLR+biTDqFm7vw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f45f1f\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 7dc2 738c 67dc 3ec5 | 146 4109 (0) 41d9 (0) 46fe (0) 461c (0)\n001 10 82dd 849b 96fc 9fa0 | 47 915d (0) 90a8 (0) 9076 (0) 959f (0)\n002 5 daec d1d7 d299 c620 | 26 df1e (0) d863 (0) d887 (0) db6a (0)\n003 5 ee5e eb98 e027 e775 | 18 eb98 (0) e854 (0) e8ef (0) e883 (0)\n004 4 fe21 fbf5 fbc8 f925 | 6 ff36 (0) fe31 (0) fe21 (0) f925 (0)\n005 2 f31c f27f | 3 f2d5 (0) f27f (0) f31c (0)\n006 2 f7ba f773 | 4 f629 (0) f7fa (0) f7ba (0) f773 (0)\n007 3 f528 f5dc f5b2 | 3 f528 (0) f5b2 (0) f5dc (0)\n============ DEPTH: 8 ==========================================\n008 1 f4e0 | 1 f4e0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 f456 | 1 f456 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","private_key":"dbee637d6a6f6facfb47a418c9c1b36a97b04592930833d23aba31c3ca7d5c3d","name":"node_f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","services":["streamer"],"enable_msg_events":true,"port":34023},"up":true}},{"node":{"info":{"id":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","name":"node_19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","enode":"enode://f6f1250fa9e6af3e6fd9195d9f8f7c0608e1afc6f538eecc930b507ee1225cac227a89b3bf1012473ba75ab38aa7a4147f2696b9f562aeda5bdd0ad29550f285@127.0.0.1:0","enr":"0xf88fb840d2cc7d831dfc47bb778b496762213f2d10d8f52b0403aff469b5adf2362312877560ab18951eae9326f58eeba05ce563d4e39a48953e8184de4f0f55d4447d260183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f6f1250fa9e6af3e6fd9195d9f8f7c0608e1afc6f538eecc930b507ee1225cac","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GfqviR62pxaQLsKdIB3CCU7kdKz/GIrob6+XYGdLLTc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 19faaf\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e7fa f45f | 110 959f (0) 976e (0) 96fc (0) 915d (0)\n001 4 524d 775e 738c 67dc | 70 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n002 5 2abb 21a0 314a 3ec5 | 32 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n003 4 0c28 0328 0661 045b | 22 0b72 (0) 0a00 (0) 0af9 (0) 0fc5 (0)\n004 10 11d4 103b 13d6 154b | 12 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n005 3 1f85 1c8a 1c9c | 6 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n============ DEPTH: 6 ==========================================\n006 2 1a2a 1b83 | 2 1a2a (0) 1b83 (0)\n007 1 18f6 | 1 18f6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","private_key":"05c69a8793e77331075909934a1e61ac9f380584e32a35ecc8f42887d20cb77a","name":"node_19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","services":["streamer"],"enable_msg_events":true,"port":35641},"up":true}},{"node":{"info":{"id":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","name":"node_67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","enode":"enode://0f351aaf6a4b09eb918bb712e8a79718d083d4214c2406c36f0074d8ad70802689f53f164b38cb9e83e59edb887df1b27e57e48214a7070b32cdc903da0cfd38@127.0.0.1:0","enr":"0xf88fb8404bcca6e121f7562863b5b6ac375f6e953cdb6ab0c36f265ef3366ba7eefdf7ef01ad1990f3c942767f70f2e5d5887ffccb367ad0e344b78133814537196687920183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020f351aaf6a4b09eb918bb712e8a79718d083d4214c2406c36f0074d8ad708026","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z9z9IezjC0Gjm8VcCYb8qPQBuzrLqCGWlRnwnQkz6L0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67dcfd\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 e7fa f45f af02 | 110 915d (0) 90a8 (0) 9076 (0) 959f (0)\n001 3 21a0 0328 19fa | 76 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n002 5 524d 44a1 4bcf 4d6b | 38 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n003 7 7920 7e04 7dbb 7dc2 | 12 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n004 6 6c73 6c4d 6e68 6ea5 | 11 6831 (0) 6967 (0) 6c73 (0) 6c4d (0)\n005 5 6103 605a 6337 628e | 6 6103 (0) 60d7 (0) 605a (0) 6337 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 66e7 | 1 66e7 (0)\n008 0 | 0\n009 1 67aa | 1 67aa (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","private_key":"9f85db9ae6c9cd4db65d7ccb16a9d89efce6ec7d02aac8d35721d5a94ef55f76","name":"node_67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","services":["streamer"],"enable_msg_events":true,"port":45525},"up":true}},{"node":{"info":{"id":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","name":"node_af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","enode":"enode://6b4c01daeddfe0f12d5f3bf6f1e60b261982605a1312d4ddacaa9f6a761f8d4da61c42c09410ac2eff9ab2f5b4a650fc3b92480df5822f85f07f632bc7ee2fd2@127.0.0.1:0","enr":"0xf88fb840c68f36e51ad8efcb6e966d5d8b2a31e1b13e6da82559ded1950420552c3f7c4770459222d11e203f7a841ae5148f9d021adbd26d94a04210def38224db50977c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026b4c01daeddfe0f12d5f3bf6f1e60b261982605a1312d4ddacaa9f6a761f8d4d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rwK10QezoX9TnH+QIOvnQyJDRjTnDEIKf1Z3brXZ23M=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: af02b5\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 0c28 21a0 2abb 314a | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 6 c1f9 f31c f45f f773 | 63 df1e (0) d887 (0) d863 (0) db6a (0)\n002 8 96fc 9076 9fa0 9890 | 20 959f (0) 976e (0) 96fc (0) 915d (0)\n003 6 b502 b2a5 b2b5 b897 | 17 b7ca (0) b626 (0) b65e (0) b5b2 (0)\n004 5 a369 a34e a46d a653 | 5 a369 (0) a34e (0) a46d (0) a653 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 ac4d ad98 | 2 ac4d (0) ad98 (0)\n007 2 ae2b aeb4 | 2 ae2b (0) aeb4 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","private_key":"272d73cf1639238294e76d97933c731ba4d307d8b4551361e31c99a5548b352c","name":"node_af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","services":["streamer"],"enable_msg_events":true,"port":34209},"up":true}},{"node":{"info":{"id":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","name":"node_6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","enode":"enode://aacecc9f59aaf5f89dccbc0f54658dc28b0c01036b15e949465c69469611f86d685911890629199edbcc30c5f8c9de080fa95cdfc4bd9e4ba48ca6572b425efc@127.0.0.1:0","enr":"0xf88fb840466f1c17c93f63d6256f50ab183789dcb5f940f2f5965173b02e3411c452bf525d835c457a1e62bbb60313212f47c91f20e1042e0ec85130d9872724cd47b7890183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102aacecc9f59aaf5f89dccbc0f54658dc28b0c01036b15e949465c69469611f86d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YlHpVARIcmpgFpnvTNGeUMlpp0baJyKJZzOM3AnWKL8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6251e9\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ee5e daec d1d7 c1f9 | 110 df1e (0) d863 (0) d887 (0) db6a (0)\n001 3 0328 21a0 3efc | 76 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n002 3 44a1 4c9e 524d | 38 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n003 7 7920 7dc2 7dbb 7e04 | 12 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n004 6 6f2d 6e68 6c73 6c4d | 11 6831 (0) 6967 (0) 6c73 (0) 6c4d (0)\n005 3 66e7 67aa 67dc | 3 66e7 (0) 67aa (0) 67dc (0)\n006 3 6103 60d7 605a | 3 6103 (0) 60d7 (0) 605a (0)\n============ DEPTH: 7 ==========================================\n007 1 6337 | 1 6337 (0)\n008 1 628e | 1 628e (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","private_key":"60256936fed4be723c1215b22d031aac3b557568a1f9ad98436a946002f6ceb1","name":"node_6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","services":["streamer"],"enable_msg_events":true,"port":42317},"up":true}},{"node":{"info":{"id":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","name":"node_3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","enode":"enode://c250393ff34081bb09b6ee97df2aa2fe93d7335b4623376a0ede17dd046719e32496e4a67a7e160efda5985e2d384b75b04416aaa0b99627c1fc87ba118e3033@127.0.0.1:0","enr":"0xf88fb840696ee67e59754db968f1147865e6fefc0faf7d85b54e7bcefbfa391263921be65b031de9a59d4b9285fea97cbdbdbfe81217ed0070911cf050644c3c4d0b2d590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c250393ff34081bb09b6ee97df2aa2fe93d7335b4623376a0ede17dd046719e3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PvxLEgs+7qwYa/OkzULrjGR/ftsIwj7mQ+K+ydcsW+0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3efc4b\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e7fa f45f 849b af02 | 110 df1e (0) d887 (0) d863 (0) db6a (0)\n001 4 4c9e 524d 6ea5 6251 | 70 4109 (0) 41d9 (0) 46fe (0) 4646 (0)\n002 4 1c8a 19fa 045b 0c28 | 44 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n003 5 21a0 256e 24b8 2f32 | 15 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n004 4 314a 33b5 3780 378e | 10 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n005 2 3b78 3b88 | 3 39d1 (0) 3b78 (0) 3b88 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 3f94 | 1 3f94 (0)\n008 0 | 0\n009 1 3e8e | 1 3e8e (0)\n010 1 3ec5 | 1 3ec5 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","private_key":"c5e74524cfda7833835e2f15a5bdb1a551e63bf87e2ba94faf778776acaa422e","name":"node_3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","services":["streamer"],"enable_msg_events":true,"port":44145},"up":true}},{"node":{"info":{"id":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","name":"node_6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","enode":"enode://f87232a3077f74f8aadead28608baee93a2b0f196b7b40dbba13f3f3b68381bbe474b527aba8bf8df37c35ec861c9ca430a6fb1fd568aaf8ecc439e4638888bd@127.0.0.1:0","enr":"0xf88fb840e62f5938f4645beb16ccd0ff2cda19b29599be7deb95ca52b1e6c0cfe5c5d94742d1407950829383b339174f1b9927df3bda8368d7ac143d0fbc8e1e15290dd90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f87232a3077f74f8aadead28608baee93a2b0f196b7b40dbba13f3f3b68381bb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bqUftuR4PzUdu/pHtQjHjHMjPrqtpAnftVRGIX+SxL0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6ea51f\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 af02 b95d b897 | 110 df1e (0) d863 (0) d887 (0) da67 (0)\n001 3 0c28 21a0 3efc | 76 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n002 5 524d 44a1 4bcf 4d6b | 38 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n003 6 775e 738c 7920 7dbb | 12 7a60 (0) 7b90 (0) 7920 (0) 7dbb (0)\n004 4 60d7 66e7 67aa 67dc | 9 66e7 (0) 67aa (0) 67dc (0) 6103 (0)\n005 2 6831 6967 | 2 6831 (0) 6967 (0)\n006 2 6c73 6c4d | 2 6c73 (0) 6c4d (0)\n007 3 6fe9 6f5f 6f2d | 3 6fe9 (0) 6f5f (0) 6f2d (0)\n============ DEPTH: 8 ==========================================\n008 2 6e05 6e68 | 2 6e05 (0) 6e68 (0)\n009 1 6ecb | 1 6ecb (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","private_key":"ed77945ec41ca5949c86e0e85e2dcc36e3334a85b705187ec4227bcdb3122ea8","name":"node_6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","services":["streamer"],"enable_msg_events":true,"port":46181},"up":true}},{"node":{"info":{"id":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","name":"node_0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","enode":"enode://bec2d78f8d965930c57e3156c95b56aedc58439ffffea7b36857dcdfe54089c9cee8b61b907fcca85cbea54e1ccafd63b48eefd700e841fe21da9ea70d00c9a3@127.0.0.1:0","enr":"0xf88fb8407399470e3737fa8272666e8fbd34bdca814621e3e955369900b266e29c0fa58744c674080c49ca4e6b59676ee2486cb144a30a95904959d8b5878edb805a4faa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bec2d78f8d965930c57e3156c95b56aedc58439ffffea7b36857dcdfe54089c9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DCjNExWJBimJbQ/lUXUk1Ot4j3REcJwTXqaQuk5hA9U=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0c28cd\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ee5e f45f af02 b95d | 110 df1e (0) d863 (0) d887 (0) da67 (0)\n001 5 4c9e 44a1 524d 6967 | 70 4109 (0) 41d9 (0) 46fe (0) 4646 (0)\n002 7 21a0 256e 2abb 378e | 32 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n003 6 1436 179f 1672 1f85 | 22 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n004 5 0328 00c6 0661 07a8 | 11 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n005 2 0a00 0af9 | 3 0b72 (0) 0a00 (0) 0af9 (0)\n006 2 0ff2 0fc5 | 3 0e5e (0) 0ff2 (0) 0fc5 (0)\n007 2 0d8a 0de3 | 2 0d8a (0) 0de3 (0)\n============ DEPTH: 8 ==========================================\n008 1 0cf5 | 1 0cf5 (0)\n009 1 0c64 | 1 0c64 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","private_key":"e4f96de1ae6c788aee624501af093f341f540fac893f97ced8d5f1189c24c67f","name":"node_0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","services":["streamer"],"enable_msg_events":true,"port":36203},"up":true}},{"node":{"info":{"id":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","name":"node_6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","enode":"enode://e505e79cdb3fcf2ca7c4f9dd26a2c8fe2b7f6ae9b788f6a904eaf8fbc4160d011c02333c5127215f980fba718d4b3a285c2e88a4fb44a15d266a91377d3b48e5@127.0.0.1:0","enr":"0xf88fb840d716acddd75f7eb58dd24dbcafe9a68ab943a8c16e6bd0e8c2895345b80d0a91716890cb91bd5d41bcaa60a862cb05a82b25fd626cda6d8930c48fb6619437e90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e505e79cdb3fcf2ca7c4f9dd26a2c8fe2b7f6ae9b788f6a904eaf8fbc4160d01","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aWfnQ4ElwgRdV1659Ae0o40b+dzRwcGpf3UNpqIa7/c=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6967e7\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 ee5e 849b | 110 df1e (0) d863 (0) d887 (0) db6a (0)\n001 5 3b88 314a 21a0 2abb | 76 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n002 2 4c9e 524d | 38 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n003 5 7dc2 7e04 77d2 775e | 12 7a60 (0) 7b90 (0) 7920 (0) 7dbb (0)\n004 5 66e7 67aa 67dc 628e | 9 66e7 (0) 67aa (0) 67dc (0) 6103 (0)\n============ DEPTH: 5 ==========================================\n005 9 6c73 6c4d 6fe9 6f5f | 9 6c73 (0) 6c4d (0) 6fe9 (0) 6f5f (0)\n006 0 | 0\n007 1 6831 | 1 6831 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","private_key":"b2e4ecb1d88acc51fd5c7268060e5bc618f3e72b5b7c52f4e455216d80962dc0","name":"node_6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","services":["streamer"],"enable_msg_events":true,"port":35593},"up":true}},{"node":{"info":{"id":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","name":"node_849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","enode":"enode://b0afa8b09566cfd0a41f4197f7997a219c84adac6259015ce3698a009fb6abf8d1cdbe5450429b7e05c28a0d49b2b9f8f2bdd7335fc98e834b8bb0628eae7fc7@127.0.0.1:0","enr":"0xf88fb840393a953e4ec2059acf7f9d3275f18559d6680009999862bd154f9fd1ee1f999d45494fe71181ffbc753878d558571d57d1b697d91b82b240075a2dcd39fefbfb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b0afa8b09566cfd0a41f4197f7997a219c84adac6259015ce3698a009fb6abf8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hJvLub5Dt5n+/F5onvx1El2if1Nul+W3khAxUgrm5dg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 849bcb\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 0c28 3b88 3ec5 3efc | 146 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n001 7 c1f9 f31c f773 f45f | 63 df1e (0) d887 (0) d863 (0) da67 (0)\n002 6 a6fb af02 b502 b2b5 | 27 a369 (0) a34e (0) a46d (0) a653 (0)\n003 6 9fa0 9852 9890 9076 | 10 915d (0) 90a8 (0) 9076 (0) 959f (0)\n004 4 8f21 898d 88a1 88fe | 5 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n============ DEPTH: 5 ==========================================\n005 3 8025 82f9 82dd | 3 8025 (0) 82f9 (0) 82dd (0)\n006 0 | 0\n007 1 8505 | 1 8505 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","private_key":"a069eed892fd44938d06d266a1b6e95863c80eac1fa44fccaeebc41efc5ed441","name":"node_849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","services":["streamer"],"enable_msg_events":true,"port":41647},"up":true}},{"node":{"info":{"id":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","name":"node_b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","enode":"enode://616dc404ad737ba64ed652df2d9b1eb7fbc7d27072123ffacbd5768b7b3a2808cc1ea3f7273bc1a8e881a0ed5cf764d793fc0ee1fda9a62a2e5219a90f7b97e4@127.0.0.1:0","enr":"0xf88fb8403b649d56e05ba7d5845e7dc235d0b38a8817441e5e2a7dae66c6959b44f3331a4718237e4751e5b45041e65998db19f244b263394f454f246db8d863a0b2f9a80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102616dc404ad737ba64ed652df2d9b1eb7fbc7d27072123ffacbd5768b7b3a2808","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uJeTw8zZ6mQggHKHMs598zd4ZT/tPR2POiXmBnDjMyU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b89793\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 7e04 738c 6ea5 44a1 | 146 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n001 5 f45f f5dc e7fa efea | 63 df1e (0) d863 (0) d887 (0) da67 (0)\n002 5 96fc 9076 9890 9fa0 | 20 915d (0) 90a8 (0) 9076 (0) 959f (0)\n003 4 af02 a6fb a369 a34e | 10 ac4d (0) ad98 (0) aeb4 (0) ae2b (0)\n004 4 b502 b02b b2a5 b2b5 | 8 b65e (0) b626 (0) b7ca (0) b5b2 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 4 badd baf2 ba88 bb90 | 4 baf2 (0) badd (0) ba88 (0) bb90 (0)\n============ DEPTH: 7 ==========================================\n007 2 b911 b95d | 2 b911 (0) b95d (0)\n008 1 b820 | 1 b820 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","private_key":"0bc50a7b766d6bc874ba369321f3b4a7f46e967445811ba2511e2698ca848d6f","name":"node_b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","services":["streamer"],"enable_msg_events":true,"port":37439},"up":true}},{"node":{"info":{"id":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","name":"node_3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","enode":"enode://21eeb4f1bb6f01a16243e4a426ed7cc92b6fbc6f8004c7bd662db3891b43f68ff5952440f106b72cac72fb55e0d2e9efa1696011cd33351094dc6c2e13fa3a67@127.0.0.1:0","enr":"0xf88fb840be1d0ed9539666492df4644d2aed2cad4aa9462d5e4bea665e163639db67f4da335d828dd4a5e24ed611a8d48ce089696a907d9a7f47829e9c5413c90360eeec0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10321eeb4f1bb6f01a16243e4a426ed7cc92b6fbc6f8004c7bd662db3891b43f68f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PsUwdh3bh/kw/akZvmffGAdMbweVKSrdGyqR/z2cOeM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3ec530\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 ee5e ed2d f773 f5dc | 110 df1e (0) d863 (0) d887 (0) da67 (0)\n001 2 4c9e 524d | 70 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n002 7 1436 17db 19fa 0328 | 44 1e2a (0) 1f67 (0) 1f85 (0) 1c47 (0)\n003 5 21a0 24b8 256e 2f32 | 15 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n004 4 378e 33b5 30be 314a | 10 35e6 (0) 3630 (0) 3780 (0) 378e (0)\n005 2 3b78 3b88 | 3 39d1 (0) 3b78 (0) 3b88 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 3f94 | 1 3f94 (0)\n008 0 | 0\n009 1 3e8e | 1 3e8e (0)\n010 1 3efc | 1 3efc (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","private_key":"c4b8862c8a0e3546078dca8083dcf8de77697d5dc9c4287a249fe5593f2ca90d","name":"node_3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","services":["streamer"],"enable_msg_events":true,"port":37999},"up":true}},{"node":{"info":{"id":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","name":"node_524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","enode":"enode://99f219a31926c42a84a19fd9aea063ef2ccb9f87f3f3ce40a8f04c86844559a054cd3b92341e71f2c349582310c55ba9d086a6f5c3306860778bedbb03528ec0@127.0.0.1:0","enr":"0xf88fb8402ab8e87c3dbe9a6ec2cac6b5b115117c51c3fa4a47a0cdb6eb173d6c313304c33d04648bd348128c2a2214fc92458c6056d91e66d8698ef94c65f0eecbe6c2320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10299f219a31926c42a84a19fd9aea063ef2ccb9f87f3f3ce40a8f04c86844559a0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Uk24GxNa+Nwwm5QsCCpykd3bhRhm/GCHU/k37ncBW+A=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 524db8\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ee5e b897 b95d | 110 df1e (0) d863 (0) d887 (0) da67 (0)\n001 5 19fa 0c28 3b88 3efc | 76 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n002 15 7920 7dbb 7dc2 7e04 | 32 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n003 4 4636 44a1 4559 4c9e | 23 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n004 2 5823 5cd2 | 7 5b63 (0) 58ed (0) 5823 (0) 5f00 (0)\n005 1 574f | 1 574f (0)\n006 2 51db 512e | 2 51db (0) 512e (0)\n============ DEPTH: 7 ==========================================\n007 4 53a8 53fe 5308 534b | 4 53a8 (0) 53fe (0) 5308 (0) 534b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","private_key":"2f5862456985e522a96e35955f2236ea2996dbc1ae46e4cd98b90a43a097da88","name":"node_524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","services":["streamer"],"enable_msg_events":true,"port":36823},"up":true}},{"node":{"info":{"id":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","name":"node_b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","enode":"enode://36447aeebafb12ba1c78c6a46a110934e1cd8927ed11dface43f85436177abde695118ad9a8539534b4f4141d990d917f905f7ecaa18baaebc0916b0205c8e2e@127.0.0.1:0","enr":"0xf88fb84085f456734d0dc37f56567ca4283aaf0355c1fa8925ff4c21ea20d7528816d28d2f74360586c27977522735076e9fd0f4e0c89ff5e78369ea4fefb33a06c132730183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10236447aeebafb12ba1c78c6a46a110934e1cd8927ed11dface43f85436177abde","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uV2I/2US746qpr2EL6RBdcFIT8LoYBuD1Qpf+pkr+jo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b95d88\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 3b88 0c28 7e04 6ea5 | 146 103b (0) 11d4 (0) 13d6 (0) 154b (0)\n001 8 c1f9 ee5e ed2d e7fa | 63 df1e (0) d887 (0) d863 (0) db6a (0)\n002 4 9890 9fa0 96fc 849b | 20 915d (0) 90a8 (0) 9076 (0) 959f (0)\n003 3 af02 a34e a6fb | 10 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n004 4 b2b5 b2a5 b626 b502 | 8 b7ca (0) b65e (0) b626 (0) b5b2 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 3 badd baf2 bb90 | 4 ba88 (0) badd (0) baf2 (0) bb90 (0)\n============ DEPTH: 7 ==========================================\n007 2 b820 b897 | 2 b820 (0) b897 (0)\n008 0 | 0\n009 1 b911 | 1 b911 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","private_key":"7dd97b58fb51f901cffaf8552811e55ed1f745fbc8de989e59715731046e1c58","name":"node_b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","services":["streamer"],"enable_msg_events":true,"port":40425},"up":true}},{"node":{"info":{"id":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","name":"node_4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","enode":"enode://403136530469a350901a30c33fc7c809363b53c13ca95dcd6a7080ec55a3b2fcbbd3f07db1278c257db628914b8b98ebfe5410a5359cd0b5c72fcdeb559100cf@127.0.0.1:0","enr":"0xf88fb8409ef5c3e51708bd096ce7dcdf5540f7e5db79918330956f05073be4da985467075fbed23d2dba3eeb49140ac47e83bf6d93b7353a47dd6d7fd4df928eb9dc79200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103403136530469a350901a30c33fc7c809363b53c13ca95dcd6a7080ec55a3b2fc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TJ6rirRUBabUurRkMO/AS45q7B2UT4hDXspBNhkl83k=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4c9eab\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ee5e 849b b95d | 110 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n001 4 0c28 3efc 3ec5 3b88 | 76 103b (0) 11d4 (0) 13d6 (0) 154b (0)\n002 10 7dc2 7e04 738c 775e | 32 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n003 5 5823 574f 534b 53fe | 15 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n004 5 4646 4636 44a1 4559 | 12 4109 (0) 41d9 (0) 47bf (0) 4782 (0)\n005 4 49cd 4ac7 4a8b 4bcf | 6 4990 (0) 49cd (0) 49ea (0) 4ac7 (0)\n006 1 4e5a | 1 4e5a (0)\n============ DEPTH: 7 ==========================================\n007 3 4d10 4d6b 4d59 | 3 4d10 (0) 4d59 (0) 4d6b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","private_key":"7a577f1da7e66657ebe473b20ef72d95fc90848f65d8f7227f9eedb8dd2d3e36","name":"node_4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","services":["streamer"],"enable_msg_events":true,"port":38639},"up":true}},{"node":{"info":{"id":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","name":"node_ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","enode":"enode://e66e86a0d8b4fe8bc6037006527db1566125b2f17053e993b1e6e0a5cf3096da8e44246fd1f52fa9c677d078df9bf67486a1f1a1a08a9a633b509a9a01cc0d52@127.0.0.1:0","enr":"0xf88fb8404bb9f05fb11c108c893d2acac05872631cf5338eb304846ac251737b9548d01240a48e2b9001871de694d6c2f671520f9e9ffbb8005f99e4f6e949e9fed7dadb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e66e86a0d8b4fe8bc6037006527db1566125b2f17053e993b1e6e0a5cf3096da","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7l5332kDKcEy8vf8oiPP04S3vDTsOHY6TrQngOBYVlY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ee5e77\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 0c28 3ec5 524d 4c9e | 146 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n001 4 849b a6fb b95d b897 | 47 9890 (0) 9852 (0) 9d0f (0) 9fa0 (0)\n002 7 c6cf c43f c1f9 c26f | 26 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n003 6 fe21 f31c f773 f45f | 19 f925 (0) fbc8 (0) fbf5 (0) ff36 (0)\n004 4 e027 e54b e775 e7fa | 8 e027 (0) e5d7 (0) e5ad (0) e514 (0)\n005 4 eb98 e854 e8ef e883 | 4 eb98 (0) e854 (0) e8ef (0) e883 (0)\n006 2 ec52 ed2d | 2 ec52 (0) ed2d (0)\n============ DEPTH: 7 ==========================================\n007 3 ef1b ef07 efea | 3 ef1b (0) ef07 (0) efea (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","private_key":"5622bc6c32ee27ea32ea20654dd0ce86eaf3f03c76b7873bae6de889e3b89961","name":"node_ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","services":["streamer"],"enable_msg_events":true,"port":39579},"up":true}},{"node":{"info":{"id":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","name":"node_68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","enode":"enode://b128b6cecc8f2cf260a135b1c480349d02ac0d60843d4e5112e6b974c18ef523effc3437092835f6f1fa3db2059063ace1de775116568700f3058a2adb47dc7b@127.0.0.1:0","enr":"0xf88fb840ceddc27e475fd5b30430a62f464bf89b48b1cae471a6a1e058e20dbf6641057e1a29eaeb0a05c85c688b1f83254fcc847704c40740dfd0ee7942ad5792f29c780183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b128b6cecc8f2cf260a135b1c480349d02ac0d60843d4e5112e6b974c18ef523","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aDF0MeT6Vb5KcA41xqV4MHzDK3IzZnm1xWGLYi7wxgI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 683174\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a6fb 849b ee5e | 110 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n001 5 1436 165f 1672 17db | 76 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n002 4 524d 4636 44a1 4c9e | 38 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n003 4 7e04 7dc2 738c 775e | 12 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n004 3 67aa 67dc 6251 | 9 66e7 (0) 67aa (0) 67dc (0) 6103 (0)\n============ DEPTH: 5 ==========================================\n005 9 6c73 6c4d 6fe9 6f5f | 9 6fe9 (0) 6f5f (0) 6f2d (0) 6e68 (0)\n006 0 | 0\n007 1 6967 | 1 6967 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","private_key":"1411ce49011b5e54719d32b3c8ee30e4e193aca2197047ff1878ec787ac339ac","name":"node_68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","services":["streamer"],"enable_msg_events":true,"port":45763},"up":true}},{"node":{"info":{"id":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","name":"node_3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","enode":"enode://f83fbc7b2e60a5ff4336bb527a72e161cd34aa8263923321c51a04ac74a3e361817581c460f34af4383da37b22729b7ba4bf4c15d7cbe276e9c889012ed3914a@127.0.0.1:0","enr":"0xf88fb840d4647a73a557c64ec9967abd7177386635f95f0ca12c9448349e1ba7e51b526e0f5690e7a06679eb95a475414adb1a6bf0d787343a9310b45114284f99eda12a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f83fbc7b2e60a5ff4336bb527a72e161cd34aa8263923321c51a04ac74a3e361","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"O4ikcr66Shj430VniIj9NZusOCOQDuz+ADf9ya1U1BY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3b88a4\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 d1d7 f5dc e027 efea | 110 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n001 8 524d 49cd 4c9e 44a1 | 70 5b63 (0) 5823 (0) 58ed (0) 5db0 (0)\n002 8 0de3 045b 07a8 0328 | 44 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n003 4 2abb 21a0 256e 24b8 | 15 256e (0) 24b8 (0) 20ae (0) 2101 (0)\n004 5 33b5 30be 314a 3780 | 10 3237 (0) 3373 (0) 33b5 (0) 3089 (0)\n005 4 3f94 3e8e 3efc 3ec5 | 4 3f94 (0) 3e8e (0) 3efc (0) 3ec5 (0)\n============ DEPTH: 6 ==========================================\n006 1 39d1 | 1 39d1 (0)\n007 0 | 0\n008 1 3b78 | 1 3b78 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","private_key":"375d6617b99adaf6d42a2645a0cf39107d821b1de2bd8a65b429b3a08f5a9bf5","name":"node_3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","services":["streamer"],"enable_msg_events":true,"port":44069},"up":true}},{"node":{"info":{"id":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","name":"node_44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","enode":"enode://2a7158451573eff25378de21fbabcff17326a0fc8247f6458d8aa97d024f7a8323240b745cfe394201f1be22313612dcbaac070227f39a01884f31e654543103@127.0.0.1:0","enr":"0xf88fb8400c1b56475eeb14186a876e72f3a08af9d4bff9d3ef73358874e77af19f982809410403a991c8fdc1f40ffdbc049f9e227cbbe0c21be45c526004d08af4db1cee0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032a7158451573eff25378de21fbabcff17326a0fc8247f6458d8aa97d024f7a83","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RKEFMMN2shW6/4Ux7rKvuNZxTE0DUNGm8ydhqXzWx+w=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 44a105\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 a6fb b95d b897 849b | 110 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n001 3 0de3 0c28 3b88 | 76 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n002 10 6251 66e7 67aa 67dc | 32 66e7 (0) 67aa (0) 67dc (0) 6103 (0)\n003 3 524d 534b 574f | 15 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n004 5 49cd 4bcf 4a8b 4c9e | 11 4990 (0) 49ea (0) 49cd (0) 4ac7 (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 6 47bf 4782 46fe 4646 | 6 47bf (0) 4782 (0) 46fe (0) 4646 (0)\n============ DEPTH: 7 ==========================================\n007 2 4558 4559 | 2 4558 (0) 4559 (0)\n008 1 4447 | 1 4447 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","private_key":"c92c1299282223ac7bd3a783268df8976213e2780f5b1fa979226ac67dc17d66","name":"node_44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","services":["streamer"],"enable_msg_events":true,"port":38773},"up":true}},{"node":{"info":{"id":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","name":"node_7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","enode":"enode://bb02c7e6af72f5794c6c0e8f70aa4cb3f84690c0f191cd8a7826c0ffb077510cf3a26fd6ad876b06f2e5944db84ec2eae05a4d0d9a5096ec4efffe3f3e3a7afc@127.0.0.1:0","enr":"0xf88fb8409f4cf59b81d3287012b59795e4be8f109968bd13739a36e9aa83cd88d152dc653f4d5471a570a8b3b5edf29c145584dcc9a9c43c40eaf96267ad7030b77ce96b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bb02c7e6af72f5794c6c0e8f70aa4cb3f84690c0f191cd8a7826c0ffb077510c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fgRY7N9wgUQ8q1QSUp85SOzmWfrKygMghJbIDdE25wQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7e0458\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 a6fb b897 b95d 849b | 110 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n001 5 0de3 1c8a 17db 1436 | 76 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n002 6 574f 524d 4c9e 4636 | 38 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n003 7 6251 67dc 6831 6967 | 20 66e7 (0) 67aa (0) 67dc (0) 6103 (0)\n004 5 7125 7290 738c 77d2 | 5 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n005 3 7a60 7b90 7920 | 3 7920 (0) 7a60 (0) 7b90 (0)\n============ DEPTH: 6 ==========================================\n006 3 7dbb 7dd3 7dc2 | 3 7dbb (0) 7dd3 (0) 7dc2 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","private_key":"ea6c1bb2edf4d57e62ea561fcc9ba70c43c2a1090c7a34f31e047846d20e1ecd","name":"node_7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","services":["streamer"],"enable_msg_events":true,"port":40827},"up":true}},{"node":{"info":{"id":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","name":"node_f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","enode":"enode://08d06f19a921d3ea71d5c21913f5a847342419531a220f0da8d9e08bcefd1a0378205d1540b494ce8614bf2735320a49b00e7e9b4c73bc7845cbb81de6b1bf3a@127.0.0.1:0","enr":"0xf88fb8408b284fdc213acbd87073a716711d397be5a8b101dd3611a4833b0871cb3afdac21356d090fbe7737468658f36f642f1e0a2dad2c4179385a98354e9c23d5669f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10208d06f19a921d3ea71d5c21913f5a847342419531a220f0da8d9e08bcefd1a03","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9dx4/3GmP8IBS5VTcj7mdsY/wHijKka3yxcvNXoRgUA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f5dc78\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 3b88 3ec5 17db 4559 | 146 103b (0) 11d4 (0) 13d6 (0) 154b (0)\n001 5 96fc 849b b897 b95d | 47 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n002 7 c898 caf6 c786 c43f | 26 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n003 4 e027 ee5e efea ed2d | 18 e5d7 (0) e5ad (0) e514 (0) e547 (0)\n004 4 fbf5 fbc8 ff36 fe21 | 6 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n005 3 f2d5 f27f f31c | 3 f2d5 (0) f27f (0) f31c (0)\n006 3 f629 f7fa f773 | 4 f629 (0) f7ba (0) f7fa (0) f773 (0)\n007 3 f4e0 f45f f456 | 3 f456 (0) f45f (0) f4e0 (0)\n============ DEPTH: 8 ==========================================\n008 1 f528 | 1 f528 (0)\n009 1 f5b2 | 1 f5b2 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","private_key":"a6746718798088d317cd7d6225dda0a32b67a827b88d4a80a28bcde59066ed49","name":"node_f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","services":["streamer"],"enable_msg_events":true,"port":33297},"up":true}},{"node":{"info":{"id":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","name":"node_a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","enode":"enode://0f12517c087f26001777a74267986c3d70abd56b9d17bd9061733e04d502ac2e7e9feb69aa0ac8aaa716add8e77c398c539e99e4665d1a48c81b74b30caafde0@127.0.0.1:0","enr":"0xf88fb840ff6e1d2403a5021cfc7a38d52571942b9c94756c73ba48c5ed420b788bc58ece089b54204b870f0a6c6a56ba811234ec38f78bb09ac098bef92436427f751c410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020f12517c087f26001777a74267986c3d70abd56b9d17bd9061733e04d502ac2e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pvvha4HSQP8vLtbJPP2VkHMd+y5+w/zhwJj+VCvt8pk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a6fbe1\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 3b88 17db 1c8a 44a1 | 146 11d4 (0) 103b (0) 13d6 (0) 154b (0)\n001 9 c6cf d299 d1d7 f4e0 | 63 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n002 7 96fc 9fa0 82dd 82f9 | 20 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n003 8 b502 b5b2 b626 b02b | 17 b7ca (0) b65e (0) b626 (0) b5b2 (0)\n004 3 ad98 aeb4 af02 | 5 ac4d (0) ad98 (0) ae2b (0) aeb4 (0)\n005 2 a369 a34e | 2 a369 (0) a34e (0)\n============ DEPTH: 6 ==========================================\n006 1 a46d | 1 a46d (0)\n007 0 | 0\n008 1 a653 | 1 a653 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","private_key":"23841056b6597d35a5a91856ad166332b11761512af382f62b98d43b330c665d","name":"node_a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","services":["streamer"],"enable_msg_events":true,"port":45043},"up":true}},{"node":{"info":{"id":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","name":"node_ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","enode":"enode://a21876606bf6da53567f80f07c547c2c1d78eec18c7a793474aa1e554ed619945557b52c8557ad72b0b0953245c3dccc6a7c2e6969fa67cdb47559104f684454@127.0.0.1:0","enr":"0xf88fb8402a854c764d8a54505e85302e872616bb82bc6a7a4b1449e2edb01bfe25178a005d5002aa7cc69c8483eacebcbcd5eba719144823d665af12e4fb859eceec2bce0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a21876606bf6da53567f80f07c547c2c1d78eec18c7a793474aa1e554ed61994","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7S0+HlaTtESUgIkHyY7FTW0IMxlF0qLAPjETD+8dJYY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ed2d3e\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 0de3 1436 1c8a 21a0 | 146 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n001 3 96fc b95d a6fb | 47 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n002 8 c6cf c43f c26f c1f9 | 26 c9f5 (0) c832 (0) c898 (0) ca04 (0)\n003 7 fe21 f31c f773 f4e0 | 19 f925 (0) fbc8 (0) fbf5 (0) ff36 (0)\n004 4 e7fa e54b e547 e027 | 8 e5d7 (0) e5ad (0) e514 (0) e54b (0)\n005 4 eb98 e854 e883 e8ef | 4 eb98 (0) e854 (0) e8ef (0) e883 (0)\n============ DEPTH: 6 ==========================================\n006 4 efea ef07 ef1b ee5e | 4 ee5e (0) ef07 (0) ef1b (0) efea (0)\n007 1 ec52 | 1 ec52 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","private_key":"2f00e9f328828c2ef1bbf37d3db3377e0b4a02e7b9f6c3c721de6b28d64e6524","name":"node_ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","services":["streamer"],"enable_msg_events":true,"port":39543},"up":true}},{"node":{"info":{"id":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","name":"node_6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","enode":"enode://c17a20dfd7be57a18cf26dcd1c304d5d01f2bb6068e09de961e1e30ffe334f151dac48d199bf561c8521dd3eaaed28583b57f2d8aca1c073f06b13ac7c771e0f@127.0.0.1:0","enr":"0xf88fb840044d1bdf571743721ed4e147a3d9a181174532883199678affb2bc6db47eca1001a2b0b3f97cc98c720570887c8551261489998bce175bfc7e7c5148b30f4b510183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c17a20dfd7be57a18cf26dcd1c304d5d01f2bb6068e09de961e1e30ffe334f15","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bE3N/e4BZKmj9BlDBybdUfkZjGX/bn3nqqb2MtzeZ5Q=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6c4dcd\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 96fc a6fb c6cf d1d7 | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 6 378e 3b88 0de3 1436 | 76 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n002 5 574f 524d 4c9e 4636 | 38 58ed (0) 5823 (0) 5b63 (0) 5db0 (0)\n003 7 738c 775e 77d2 7b90 | 12 7125 (0) 7290 (0) 738c (0) 775e (0)\n004 4 67dc 67aa 60d7 6251 | 9 6103 (0) 605a (0) 60d7 (0) 6337 (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n============ DEPTH: 6 ==========================================\n006 7 6e05 6e68 6ecb 6ea5 | 7 6e68 (0) 6e05 (0) 6ecb (0) 6ea5 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 6c73 | 1 6c73 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","private_key":"14959eff979bd6f1bd74aacbc23ad2c7cb285be7e1675fab6d17567cf10fad34","name":"node_6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","services":["streamer"],"enable_msg_events":true,"port":35017},"up":true}},{"node":{"info":{"id":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","name":"node_efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","enode":"enode://ddf6985e527e42d2f0b37b8e4efc6da2a5f68c0dcb89c92077390d6d6710adc001c172965c9ad744734a92ac1538392df4a714953a5ac33ec6e68fe8c9b0e3a3@127.0.0.1:0","enr":"0xf88fb84018e335f1758ad544ccb9a6381d6f5eeab5d27dab2936bb0dfad1e1e9623305ba03de5b05753d9cc1598585baef377ec5c714e6f06d43b7ab651e5fa82cc2c27b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ddf6985e527e42d2f0b37b8e4efc6da2a5f68c0dcb89c92077390d6d6710adc0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7+rjt/YQ3BCsxRBo53GIdtFHzXipooeIxduluzppUNw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: efeae3\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 1436 24b8 378e 3b88 | 146 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n001 3 b502 b897 96fc | 47 b7ca (0) b65e (0) b626 (0) b5b2 (0)\n002 5 c6cf c43f c1f9 c26f | 26 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n003 5 fe21 f31c f4e0 f528 | 19 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n004 6 e027 e7fa e775 e5ad | 8 e5d7 (0) e5ad (0) e514 (0) e54b (0)\n005 4 eb98 e854 e883 e8ef | 4 eb98 (0) e854 (0) e8ef (0) e883 (0)\n006 2 ed2d ec52 | 2 ec52 (0) ed2d (0)\n007 1 ee5e | 1 ee5e (0)\n============ DEPTH: 8 ==========================================\n008 2 ef1b ef07 | 2 ef07 (0) ef1b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","private_key":"3551e1831fe811a97293215d19ab637fc344bb26a2e7c28837cc25d9d3052c96","name":"node_efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","services":["streamer"],"enable_msg_events":true,"port":41545},"up":true}},{"node":{"info":{"id":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","name":"node_96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","enode":"enode://72736087dff95f03e9af1a0bbdd5858d8f4a50191b1009fa72ad6139b18353b15f3279fefbc352d1152aeb84a63f03a86daada01292ac8355b7b2cc5c0bdbb80@127.0.0.1:0","enr":"0xf88fb840a74a4a8f60d5b3cc5affc9d1801b03958b73091bc0eae33da8a9ea19859e87aa7a447fe2e68fdd6cd94e10757d1d8ce01334922460cca97c80b2dc26a2c4dd380183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10272736087dff95f03e9af1a0bbdd5858d8f4a50191b1009fa72ad6139b18353b1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lvzxTH+QNQCRrG/LWDBsz7nko409pZ+KtlaFQzKETL0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 96fcf1\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 4559 44a1 7e04 6c4d | 146 58ed (0) 5823 (0) 5b63 (0) 5db0 (0)\n001 11 c26f c786 c6cf d299 | 63 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n002 7 a6fb af02 b2b5 b5b2 | 27 bcc6 (0) ba88 (0) badd (0) baf2 (0)\n003 6 88fe 8505 849b 82f9 | 10 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n004 4 9d0f 9fa0 9852 9890 | 4 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n005 3 90a8 9076 915d | 3 90a8 (0) 9076 (0) 915d (0)\n============ DEPTH: 6 ==========================================\n006 1 959f | 1 959f (0)\n007 1 976e | 1 976e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","private_key":"dfe1f61a9d85c8c6b37a649568512c4247752f892548a5d10128c68168c53fa0","name":"node_96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","services":["streamer"],"enable_msg_events":true,"port":38025},"up":true}},{"node":{"info":{"id":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","name":"node_0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","enode":"enode://0ced9e64272a4cb6b4f08a7577cfb1318c6de0fc82b45829643a3864110c0b809d0431af3ccd8700544fb5b6bba382810ba02181f15aca5e3d22d19361ab6657@127.0.0.1:0","enr":"0xf88fb84043c00b34db2f00d166f5f835baedf82ade48ba0751e49942a1e43eea487b20731c17c117fd43602af8059005c27d4f1534b92e310f5e5c63e0a7cf7bc51ac0850183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030ced9e64272a4cb6b4f08a7577cfb1318c6de0fc82b45829643a3864110c0b80","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DeORWwvMaAQMiqdvvSz6BxTps0ydvgg4p8uoHE9zWBw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0de391\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 96fc d1d7 ed2d e027 | 110 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n001 4 6c4d 7e04 44a1 4559 | 70 58ed (0) 5823 (0) 5b63 (0) 5db0 (0)\n002 5 378e 3ec5 3b88 256e | 32 2d36 (0) 2c79 (0) 2c38 (0) 2ccf (0)\n003 5 1400 1436 17db 1f85 | 22 103b (0) 11d4 (0) 13d6 (0) 154b (0)\n004 6 02d8 0328 045b 0438 | 11 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n005 3 0b72 0a00 0af9 | 3 0b72 (0) 0a00 (0) 0af9 (0)\n006 2 0fc5 0ff2 | 3 0e5e (0) 0fc5 (0) 0ff2 (0)\n============ DEPTH: 7 ==========================================\n007 3 0cf5 0c64 0c28 | 3 0cf5 (0) 0c64 (0) 0c28 (0)\n008 0 | 0\n009 1 0d8a | 1 0d8a (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","private_key":"b229b8d1f2575dc4c211d64fbcf552eadcf00482f0c55c8dfa3336ffe81b010e","name":"node_0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","services":["streamer"],"enable_msg_events":true,"port":38979},"up":true}},{"node":{"info":{"id":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","name":"node_e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","enode":"enode://42f4817eb446d17b96c18c2538bfdf9fee4b7d278972ce27ed86dda5d91ea3ec330cbb910a82891a66844c42127955360c97e744cd8c46592d82f0ae51f31845@127.0.0.1:0","enr":"0xf88fb840c0e372772fcb685e048c3e5fa6f01d0c119feb88cdc1cb7cdee06d41fd6b143c37da7e6ff58e2fdaa90c07a05779586aa7dd6e4678007678b886c09c39a532690183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10342f4817eb446d17b96c18c2538bfdf9fee4b7d278972ce27ed86dda5d91ea3ec","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4Cep9xUmQcSkEVT4zk2v0jiVwxIVDv6oa/QVLIjQyoY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e027a9\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 7e04 3b88 1436 0de3 | 146 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n001 2 a6fb 96fc | 47 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n002 4 c43f c6cf db6a d1d7 | 26 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n003 7 fe21 f31c f773 f4e0 | 19 f925 (0) fbc8 (0) fbf5 (0) ff36 (0)\n004 6 eb98 e8ef e883 efea | 10 eb98 (0) e854 (0) e8ef (0) e883 (0)\n============ DEPTH: 5 ==========================================\n005 7 e5d7 e5ad e514 e54b | 7 e5d7 (0) e5ad (0) e514 (0) e547 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","private_key":"42236a2ba130a7a24f34201b6bceda8e237a0e2e4c4780e6dd8c423e79719722","name":"node_e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","services":["streamer"],"enable_msg_events":true,"port":33483},"up":true}},{"node":{"info":{"id":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","name":"node_d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","enode":"enode://80bb1c84b9239a4dcaca4b19398c7a54833efb060f0491e8f5efdb7549edffa41a10442da7ce9a44959a7220411d56f2ca686b1d2351ec652d3074a9bbecd50a@127.0.0.1:0","enr":"0xf88fb84099d84c8e0b6d56c16e509e6809e9057dfe42891fff4ff8e974189245419b9371212e1e3ecd5c2ec314cafb25c996d8ef320486b364a58b8f1e533b4afb42de240183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10280bb1c84b9239a4dcaca4b19398c7a54833efb060f0491e8f5efdb7549edffa4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0dcZzh3KUHWYRJr+lmOWwWCtJa1jIRKrJosdkTtJDb0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d1d719\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 4559 44a1 7e04 6251 | 146 7125 (0) 7290 (0) 738c (0) 775e (0)\n001 3 b2b5 a6fb 96fc | 47 bcc6 (0) bb90 (0) ba88 (0) baf2 (0)\n002 11 fe21 f31c f773 f45f | 37 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n003 4 c1f9 c26f c43f c6cf | 15 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n004 5 df1e d887 daec da67 | 6 df1e (0) d887 (0) d863 (0) daec (0)\n005 2 d7ac d640 | 2 d7ac (0) d640 (0)\n============ DEPTH: 6 ==========================================\n006 2 d3b0 d299 | 2 d3b0 (0) d299 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","private_key":"c8c5ea87fb82c55c9d58f48496b2fd47c86008f9ed782575bb4d64dedd096136","name":"node_d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","services":["streamer"],"enable_msg_events":true,"port":42295},"up":true}},{"node":{"info":{"id":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","name":"node_1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","enode":"enode://ccb62edd9cbb83630d2c5ca827a44633de8aa6a65c68b263563159e02cec0d8554ae6c1bbc6450aa60f4900f3acca4d2ba529b6462d17792e360a5256b0e7517@127.0.0.1:0","enr":"0xf88fb8402251f72e3876c375bdf5474dd9b47aa6a4ec1c1cb255bd976fb6a7607c35a8f45943221daba85c637fa764b89f1d4e637e7edfc5bfb242e35a690f9bc6c3109a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ccb62edd9cbb83630d2c5ca827a44633de8aa6a65c68b263563159e02cec0d85","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HIoQ7L1yrLK7u4t36lQE+ekPTb8wbsgTTP7XC0Cu85k=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1c8a10\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 96fc a6fb ed2d f4e0 | 110 bcc6 (0) bb90 (0) badd (0) baf2 (0)\n001 4 7e04 77d2 6c4d 4559 | 70 7920 (0) 7a60 (0) 7b90 (0) 7dd3 (0)\n002 6 256e 24b8 3efc 3b88 | 32 2f32 (0) 2d36 (0) 2ccf (0) 2c79 (0)\n003 4 07a8 0c28 0d8a 0de3 | 22 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n004 7 13d6 154b 1400 1436 | 12 103b (0) 11d4 (0) 13d6 (0) 154b (0)\n005 3 19fa 1a2a 1b83 | 4 18f6 (0) 19fa (0) 1a2a (0) 1b83 (0)\n006 3 1e2a 1f67 1f85 | 3 1e2a (0) 1f67 (0) 1f85 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 1c47 | 1 1c47 (0)\n009 0 | 0\n010 0 | 0\n011 1 1c9c | 1 1c9c (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","private_key":"530e6c41fc6e6889ceddd163a578f3db02856187b2f0466de53f7f29408159b3","name":"node_1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","services":["streamer"],"enable_msg_events":true,"port":45657},"up":true}},{"node":{"info":{"id":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","name":"node_17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","enode":"enode://e7d8ae7faaa3f720519c1ea490e184f238bf3e3c0be1da066ff25d1814339b79b018b95285a4db1d0d13e73503d99f590591dc1258d7bec591ae354c82a53839@127.0.0.1:0","enr":"0xf88fb840cec78fd16c7bdeaeb29d0f2f4fe3acb0f668c0432a9dac2be2d42460e02005a7493749ccc7b1b4faa5e51dae74cb0f39aac4d54d801dd26bfc466b82b76984390183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e7d8ae7faaa3f720519c1ea490e184f238bf3e3c0be1da066ff25d1814339b79","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"F9sViTvzm0JZPuHel1q6aDIEbZ2ltLST7EQnJziinO8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 17db15\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 a6fb 96fc f4e0 f5dc | 110 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n001 5 7e04 77d2 6831 6c4d | 70 7920 (0) 7a60 (0) 7b90 (0) 7dbb (0)\n002 5 24b8 256e 3b88 3ec5 | 32 2d36 (0) 2c79 (0) 2c38 (0) 2ccf (0)\n003 2 07a8 0de3 | 22 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n004 4 19fa 1b83 1f85 1c8a | 10 18f6 (0) 19fa (0) 1a2a (0) 1b83 (0)\n005 3 13d6 11d4 103b | 3 13d6 (0) 11d4 (0) 103b (0)\n006 4 1436 1400 14df 154b | 4 154b (0) 14df (0) 1400 (0) 1436 (0)\n007 2 165f 1672 | 2 165f (0) 1672 (0)\n============ DEPTH: 8 ==========================================\n008 1 1704 | 1 1704 (0)\n009 1 179f | 1 179f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","private_key":"2e941f41c9fc6b53b84ce73e68eaa0a486a0a2c4030d915897f04f366440d05e","name":"node_17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","services":["streamer"],"enable_msg_events":true,"port":41487},"up":true}},{"node":{"info":{"id":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","name":"node_455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","enode":"enode://4dc18460e3997bb0a5e9952976154083a46b2bf6b0c7f2810f7eee10b4b2254a8489d82eaed18436650b62980b531b8b1fb1808cfcc121d7749d3af1d718b12f@127.0.0.1:0","enr":"0xf88fb8402972e719eafce249c1d6c5b0af19eba09f751e4788398e88be87ee8619739c1c7d34faa74943a0227a4606a4a1c7ec1ecefdfc40a4cb0eca51ee1aa0dcaf300d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034dc18460e3997bb0a5e9952976154083a46b2bf6b0c7f2810f7eee10b4b2254a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RVk2/SLEN5Tm4hBP2R0/XSRuOCPo/46vjcJ6qfPS7gg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 455936\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 96fc f4e0 f5dc d1d7 | 110 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n001 6 378e 07a8 0de3 1c8a | 76 2ccf (0) 2c38 (0) 2c79 (0) 2d36 (0)\n002 6 77d2 738c 7dc2 7e04 | 32 7920 (0) 7a60 (0) 7b90 (0) 7dbb (0)\n003 2 574f 524d | 15 5b63 (0) 58ed (0) 5823 (0) 5db0 (0)\n004 5 49cd 4bcf 4a8b 4d6b | 11 4e5a (0) 4d10 (0) 4d59 (0) 4d6b (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 5 4646 4636 46fe 47bf | 6 47bf (0) 4782 (0) 46fe (0) 4646 (0)\n============ DEPTH: 7 ==========================================\n007 2 4447 44a1 | 2 4447 (0) 44a1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 1 4558 | 1 4558 (0)\n========================================================================="}},"config":{"id":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","private_key":"7dbb064b0d47a7fc81d65e512613d0f099b690b6148f3867d9a2a7b689e3ff0e","name":"node_455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","services":["streamer"],"enable_msg_events":true,"port":44695},"up":true}},{"node":{"info":{"id":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","name":"node_1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","enode":"enode://c5e2dced64cebb7bcf961588b05aa6135f14b133db83b9f039adea823547e6ca6a4ae66dd060942b5ddf0e35a7cf9c23aeef18cfefb07822f52a3a0d6e01b12f@127.0.0.1:0","enr":"0xf88fb84093bfc5b68fff885df3ca3ca5159f4ac4816cd313e0880bd4b9fc9dc6642606263cdb0d436c19251deec31df9fe25f1d7038d04d44f93325c8f5ee48ed202a2540183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c5e2dced64cebb7bcf961588b05aa6135f14b133db83b9f039adea823547e6ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FDaqqHcOnxxilOSfQGbBaxyqUFJOm4/QWAWeQWV9KoM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1436aa\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 96fc d299 efea ed2d | 110 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n001 5 7e04 6831 6c4d 4636 | 70 7920 (0) 7a60 (0) 7b90 (0) 7dbb (0)\n002 5 256e 24b8 21a0 3ec5 | 32 2d36 (0) 2c38 (0) 2c79 (0) 2ccf (0)\n003 3 07a8 0c28 0de3 | 22 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n004 5 1b83 19fa 1c9c 1c8a | 10 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n005 2 11d4 13d6 | 3 103b (0) 11d4 (0) 13d6 (0)\n006 5 165f 1672 1704 17db | 5 165f (0) 1672 (0) 1704 (0) 179f (0)\n007 1 154b | 1 154b (0)\n============ DEPTH: 8 ==========================================\n008 1 14df | 1 14df (0)\n009 0 | 0\n010 1 1400 | 1 1400 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","private_key":"30f78566606a3588a6ae7452aae120e984a681f8c1dfe235806102b387d1b5e1","name":"node_1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","services":["streamer"],"enable_msg_events":true,"port":37199},"up":true}},{"node":{"info":{"id":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","name":"node_378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","enode":"enode://62d1a6cca7bfbd3f31cbd86708971f47cf9eab3c318a42ca0784a3c76ed5bb697a9f7ec6987f2456c84aeaf468b4a99277dd1c85fb850c51d91f683ec2bfd821@127.0.0.1:0","enr":"0xf88fb84096dbe71818bc9bff8cab39cad479b1e8be50f63de0e73a02ab147856d3a7eb6866b2acfcb4f171d75eb8d44e9075bd3fc106e373e87ecbb2424c2c443996816f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10362d1a6cca7bfbd3f31cbd86708971f47cf9eab3c318a42ca0784a3c76ed5bb69","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"N45698wBkYbU8mmedT4tcTAvjzVlVywTt6GxxctHRDw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 378e7a\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ed2d efea f4e0 d299 | 110 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n001 6 6c4d 6f2d 77d2 49cd | 70 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n002 8 0c28 0de3 07a8 1f85 | 44 0b72 (0) 0af9 (0) 0a00 (0) 0e5e (0)\n003 2 256e 24b8 | 15 2d36 (0) 2ccf (0) 2c38 (0) 2c79 (0)\n004 3 3b88 3efc 3ec5 | 7 3f94 (0) 3e8e (0) 3efc (0) 3ec5 (0)\n005 5 3373 33b5 314a 3089 | 6 3237 (0) 3373 (0) 33b5 (0) 314a (0)\n006 1 35e6 | 1 35e6 (0)\n============ DEPTH: 7 ==========================================\n007 1 3630 | 1 3630 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 3780 | 1 3780 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","private_key":"f87ae143c4de5fb51892f311d616d4800d4963ecf3e3d1db6a4e31639d894c37","name":"node_378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","services":["streamer"],"enable_msg_events":true,"port":42999},"up":true}},{"node":{"info":{"id":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","name":"node_c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","enode":"enode://445bc4dbafd666bb2218c9ec6a582bf6bfb2fadbc7624ea9f724fb35a0b58d12a074a968505f280eb85b7240f437aac8986ba15cae3fb075b916c7620784004e@127.0.0.1:0","enr":"0xf88fb840ac8583022ed007db510135b8c593b46044e897f3fee1fd57fc3b04847325b40c5166ebd8aa464b82755d700da0d197da02f5d7be64bc2a5df55409f7040a10610183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102445bc4dbafd666bb2218c9ec6a582bf6bfb2fadbc7624ea9f724fb35a0b58d12","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xs9GI5B47fs0PGRfA5cl/e4bu6iwptoC4sxFa5IjyaI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c6cf46\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 77d2 6c4d 6f2d 4559 | 146 5db0 (0) 5cd2 (0) 5f00 (0) 5efb (0)\n001 4 a6fb b2b5 8025 96fc | 47 ac4d (0) ad98 (0) aeb4 (0) ae2b (0)\n002 5 ed2d ee5e efea e027 | 37 eb98 (0) e854 (0) e8ef (0) e883 (0)\n003 5 da67 db6a d299 d3b0 | 11 df1e (0) d863 (0) d887 (0) daec (0)\n004 4 cc20 c898 caf6 ca04 | 6 cc20 (0) caf6 (0) ca04 (0) c9f5 (0)\n005 2 c26f c1f9 | 2 c1f9 (0) c26f (0)\n006 4 c59e c49c c43f c441 | 4 c59e (0) c49c (0) c441 (0) c43f (0)\n============ DEPTH: 7 ==========================================\n007 1 c786 | 1 c786 (0)\n008 1 c620 | 1 c620 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","private_key":"1227a7906f23478558c2ff562b54e86b2e16710eb7290823a1a7587ff14161e7","name":"node_c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","services":["streamer"],"enable_msg_events":true,"port":42921},"up":true}},{"node":{"info":{"id":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","name":"node_f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","enode":"enode://d57c1ed1af3de513ab3ca9168f80d3a51ffcb3af7a20c1f854d01312afa00097dd7257ccdc5bf0bed966eaabd495e22ee59207246b35d88a2f1027f2cb696b90@127.0.0.1:0","enr":"0xf88fb840ce18c84e0bf1b525d2a1ffc03cc7281c5c032526b3c258ba6e0c1b428e830b3b56b8c158871961b7f6fb5bcee112aa4bdba312e2c333b52e613e50ef0855ac980183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d57c1ed1af3de513ab3ca9168f80d3a51ffcb3af7a20c1f854d01312afa00097","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9OCfiSh70a94M6zYW6fMcf2z/zTy9AnhzyqHjc0xg9w=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f4e09f\npopulation: 44 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 4559 6f2d 24b8 378e | 146 103b (0) 11d4 (0) 13d6 (0) 1672 (0)\n001 5 a6fb b502 b2b5 8025 | 47 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n002 11 da67 db6a d7ac d1d7 | 26 df1e (0) d863 (0) d887 (0) daec (0)\n003 4 e027 ed2d ee5e efea | 18 eb98 (0) e854 (0) e8ef (0) e883 (0)\n004 4 fe21 ff36 fbf5 fbc8 | 6 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n005 3 f2d5 f27f f31c | 3 f2d5 (0) f27f (0) f31c (0)\n006 3 f629 f7fa f773 | 4 f629 (0) f7ba (0) f7fa (0) f773 (0)\n007 3 f528 f5dc f5b2 | 3 f5b2 (0) f5dc (0) f528 (0)\n============ DEPTH: 8 ==========================================\n008 2 f45f f456 | 2 f456 (0) f45f (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","private_key":"068db7a4942ca7125ac96d19e14274fd6a94b300707941d0c28a2a334ec18d10","name":"node_f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","services":["streamer"],"enable_msg_events":true,"port":39333},"up":true}},{"node":{"info":{"id":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","name":"node_d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","enode":"enode://9921bbce6608fb1ad3311caeaf2d70b08c24b0c5097af6a7702cf8d750b57627cdfc9327ded122c82ad215e428777e2bc5bf667722eb531e3ababb25ed49e0a5@127.0.0.1:0","enr":"0xf88fb840de77d70c78a672c75090aa9196c7f37e174342b0b89db3c3d8208df199e66ae61c6c9d6d0849f2e4283008fbb2df674c815c4fadcbc9c5b1a3f5205d19eb1cca0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039921bbce6608fb1ad3311caeaf2d70b08c24b0c5097af6a7702cf8d750b57627","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0plB1ris2GzzL9HCGB2jqx2jwggxNLBoyknOKaqGt4M=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d29941\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 256e 378e 07a8 1436 | 146 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n001 4 96fc 8025 a6fb b2b5 | 47 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n002 7 e7fa ee5e ed2d fe21 | 37 eb98 (0) e854 (0) e883 (0) e8ef (0)\n003 5 ca04 c6cf c59e c43f | 15 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n004 5 d887 d863 daec da67 | 6 df1e (0) d887 (0) d863 (0) daec (0)\n005 2 d640 d7ac | 2 d640 (0) d7ac (0)\n============ DEPTH: 6 ==========================================\n006 1 d1d7 | 1 d1d7 (0)\n007 1 d3b0 | 1 d3b0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","private_key":"ed9cc2d516c3a37362d70e5337c6285651e7d1478038434939544e5f0a2558c5","name":"node_d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","services":["streamer"],"enable_msg_events":true,"port":35669},"up":true}},{"node":{"info":{"id":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","name":"node_6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","enode":"enode://6cadca795e1a9332ff620a0fa3972acbc4701938fd9ee90a2e0e3b06e0c12bc10e743b1605698003c58cbb67f3f6695e5b4a7b939a5f95e29661fdbed5c174b2@127.0.0.1:0","enr":"0xf88fb84086f29094a4468911665b009f5ad2ec7bb6dd33e9faab8e89844e394b676e514d1f1765853026e1c53a16b6a854ac35880408fdda19598f40e0550620310caa9a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026cadca795e1a9332ff620a0fa3972acbc4701938fd9ee90a2e0e3b06e0c12bc1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"by11ZWbdW0oT/+6p9ofHhRSPNAelAuKLnW7f0DuQX9w=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6f2d75\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f4e0 c6cf d299 | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 3 378e 24b8 07a8 | 76 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n002 4 4636 44a1 4559 574f | 38 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n003 8 7e04 7dbb 7dc2 7dd3 | 12 7920 (0) 7a60 (0) 7b90 (0) 7dd3 (0)\n004 4 60d7 6251 628e 67aa | 9 6337 (0) 628e (0) 6251 (0) 6103 (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n006 2 6c73 6c4d | 2 6c73 (0) 6c4d (0)\n007 4 6e68 6e05 6ecb 6ea5 | 4 6e68 (0) 6e05 (0) 6ecb (0) 6ea5 (0)\n============ DEPTH: 8 ==========================================\n008 1 6fe9 | 1 6fe9 (0)\n009 1 6f5f | 1 6f5f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","private_key":"3d64f67a082f7e4185e83ea4414849a0146c7104250ce8de6eb30c628b9b8459","name":"node_6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","services":["streamer"],"enable_msg_events":true,"port":43877},"up":true}},{"node":{"info":{"id":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","name":"node_07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","enode":"enode://3f7f839709363b1db97fd83da689de1fe397a6c4574f1186f20116ae3674c3777d47487ba386136c9f90670450caaaa8d08942f2d5b57e66e54333609ea826fb@127.0.0.1:0","enr":"0xf88fb8407eb35279cb43bd4502b17e6cf9227e0948b7d39a193d9dd1a66d0718d0f3a9ee4998694774985993b7ac021e4705e12e04741158f1838372359ff61c5a7fea0b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033f7f839709363b1db97fd83da689de1fe397a6c4574f1186f20116ae3674c377","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"B6jJAP7GxHdYDtWziEioaB3FKhnln6TNMvVx/n+yODo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 07a8c9\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 b2b5 c6cf d299 f4e0 | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 6 574f 53a8 4559 4636 | 70 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n002 4 3b88 378e 256e 24b8 | 32 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n003 6 1436 1400 17db 1b83 | 22 103b (0) 11d4 (0) 13d6 (0) 165f (0)\n004 3 0c28 0d8a 0de3 | 11 0b72 (0) 0a00 (0) 0af9 (0) 0e5e (0)\n005 3 00c6 02d8 0328 | 5 0067 (0) 00c6 (0) 02d8 (0) 03cc (0)\n006 2 0438 045b | 3 0438 (0) 0451 (0) 045b (0)\n============ DEPTH: 7 ==========================================\n007 1 0661 | 1 0661 (0)\n008 1 0743 | 1 0743 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","private_key":"57fbc15d67af2d8593073c689c611a38db6bde0721b57199615b19d8038b5653","name":"node_07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","services":["streamer"],"enable_msg_events":true,"port":38689},"up":true}},{"node":{"info":{"id":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","name":"node_24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","enode":"enode://f4d9569b664ccde6dbfd8ffeb4524cf63fb038a8310e6faacf75999847a8a2aebf5463047743c0bbe50bfbf096cd1a88cc77c287c65777fe1aa700b92ff22931@127.0.0.1:0","enr":"0xf88fb84064a70dff70951c7ae9cd2b2c670490da42501b1011736ec633815cc654d0de98202748d2e22ba9fc5a5b006d005036985328ad38f7efe4ee0a095ed6983caa3a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f4d9569b664ccde6dbfd8ffeb4524cf63fb038a8310e6faacf75999847a8a2ae","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JLhcEPCYclk46n2HzSSksQNYEpkG/Kl5D8Jm6oeEtTg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 24b85c\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 8025 96fc b502 b2b5 | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 4 4636 49cd 6f2d 77d2 | 70 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n002 7 17db 1436 1400 1c8a | 44 103b (0) 11d4 (0) 13d6 (0) 165f (0)\n003 6 3ec5 3efc 3b88 314a | 17 3f94 (0) 3e8e (0) 3efc (0) 3ec5 (0)\n004 3 2f32 2ccf 2abb | 9 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n============ DEPTH: 5 ==========================================\n005 4 20ae 2101 217f 21a0 | 4 20ae (0) 2101 (0) 217f (0) 21a0 (0)\n006 0 | 0\n007 1 256e | 1 256e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","private_key":"c43bfbf2bb506dcd5608000c4a2f2a4ad8be5b1c1d5ecb3bc1bc59109c0b6b16","name":"node_24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","services":["streamer"],"enable_msg_events":true,"port":38967},"up":true}},{"node":{"info":{"id":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","name":"node_1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","enode":"enode://73040f7d8f962f54e6691a4b9f2c4b324d3dfbbe742387c453b5950b1adfc52a5f12c4a3b6511e824f9be6bf49cf996c448cff189ae3068d639a50438b0fbd22@127.0.0.1:0","enr":"0xf88fb840976c5a30ad5f6c348eaf3a368ab63084b1eae6ff36dfd982c5aeb47271554dc577959a9ce734707a16bc9bd64d23dca99b3c766c6b4243d75249708abd5189fd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10273040f7d8f962f54e6691a4b9f2c4b324d3dfbbe742387c453b5950b1adfc52a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"H4W4wF5dzv8L2CVvj22A1LkCqXVM65UtleouEVDvnlk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1f85b8\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b2b5 fe21 f4e0 c26f | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 3 574f 4636 77d2 | 70 5823 (0) 58ed (0) 5b63 (0) 5cd2 (0)\n002 4 378e 30be 256e 24b8 | 32 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n003 4 0c28 0de3 0d8a 07a8 | 22 0b72 (0) 0a00 (0) 0af9 (0) 0ff2 (0)\n004 3 17db 1400 1436 | 12 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n005 4 19fa 18f6 1a2a 1b83 | 4 19fa (0) 18f6 (0) 1a2a (0) 1b83 (0)\n006 3 1c47 1c9c 1c8a | 3 1c47 (0) 1c9c (0) 1c8a (0)\n============ DEPTH: 7 ==========================================\n007 1 1e2a | 1 1e2a (0)\n008 1 1f67 | 1 1f67 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","private_key":"59c61bd4b5c1b4f8c1995c2c5162afae8f31e9c643be34f24fa05cc989be881e","name":"node_1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","services":["streamer"],"enable_msg_events":true,"port":38831},"up":true}},{"node":{"info":{"id":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","name":"node_77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","enode":"enode://d75b2925001a8eeae3e6c484278d65e4c64b829e79e4f4f9ffbfbfda98e713f2c194160e65c7afd3241b956106959174badaa1127f984a992d0d653bafad1ef2@127.0.0.1:0","enr":"0xf88fb84090355b49c231a49d0a8588ce047d0541ad615d101206c5f0d3460bdd3cb0046703875d1527046828aaab5698f064414207e768132bd4c870cfdefbc386c1c61a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d75b2925001a8eeae3e6c484278d65e4c64b829e79e4f4f9ffbfbfda98e713f2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"d9LsUtq9XX8ybUxq/SqtEQSHxr3/ophAYFKHFrqHNGI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 77d2ec\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d299 c26f c43f c6cf | 110 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n001 7 07a8 17db 1c8a 1f85 | 76 0b72 (0) 0af9 (0) 0a00 (0) 0e5e (0)\n002 7 4636 4559 4a8b 5f00 | 38 5efb (0) 5f00 (0) 5db0 (0) 5cd2 (0)\n003 10 67aa 67dc 6251 6103 | 20 6337 (0) 628e (0) 6251 (0) 6103 (0)\n004 5 7b90 7a60 7dd3 7dc2 | 7 7dbb (0) 7dd3 (0) 7dc2 (0) 7e04 (0)\n============ DEPTH: 5 ==========================================\n005 3 7125 738c 7290 | 3 7125 (0) 738c (0) 7290 (0)\n006 0 | 0\n007 0 | 0\n008 1 775e | 1 775e (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","private_key":"682c5165cd7b0aefc0947ef86781161eeab41ef910322502ffe6b2db732e6f00","name":"node_77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","services":["streamer"],"enable_msg_events":true,"port":36957},"up":true}},{"node":{"info":{"id":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","name":"node_256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","enode":"enode://53a39015a7a349078a4861f507013efbe2e42c44a48210c7f41dfad8fe09503c0d8604c8ba351fa6b5da4179e598f7987bd5a4f5072028ea6c35867f4e0e3452@127.0.0.1:0","enr":"0xf88fb84096ffa0a393f3fa959e87c33678cde0b74e73829a0e1cc5a53e580d06d9d9b14373e52acbfd14808c4cfdb02cb4f2511fd88bbe7fb76ff0c58d87afb2f286bd960183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10253a39015a7a349078a4861f507013efbe2e42c44a48210c7f41dfad8fe09503c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JW6Bxab7Q700M0VHf4+WqhlH8HrDKX9jGrA/BgFHsGI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 256e81\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 fe21 c6cf d299 db6a | 110 df1e (0) d887 (0) d863 (0) daec (0)\n001 5 574f 49cd 4636 67aa | 70 5b63 (0) 58ed (0) 5823 (0) 5cd2 (0)\n002 9 0c28 0d8a 0de3 07a8 | 44 0a00 (0) 0af9 (0) 0b72 (0) 0e5e (0)\n003 7 3b88 3efc 3ec5 3780 | 17 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n004 3 2f32 2ccf 2abb | 9 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n============ DEPTH: 5 ==========================================\n005 4 20ae 217f 2101 21a0 | 4 20ae (0) 217f (0) 2101 (0) 21a0 (0)\n006 0 | 0\n007 1 24b8 | 1 24b8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","private_key":"45dc210e5a7309cf6d363540be2d1d849e0f2dc92ab7bb5df059d521246f9ff1","name":"node_256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","services":["streamer"],"enable_msg_events":true,"port":41465},"up":true}},{"node":{"info":{"id":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","name":"node_8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","enode":"enode://f14e1b9f746918024f3f3b5afb64d85f230790c5f8e6f530da3723875e1ba92922eec9c790e3bcf9a0266fa565f0af0d840edb1fa61b03c7f58196c038833999@127.0.0.1:0","enr":"0xf88fb840b4e407fbcca71bbbd27293f0aa73df4b38c2e5d75e916f3bb6f68b312823e00b6e349f5500dee5e74f29eff4153d436fabd7fbccfdd803ff167002ad2244b3450183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f14e1b9f746918024f3f3b5afb64d85f230790c5f8e6f530da3723875e1ba929","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gCXB/LmOU/knZ9HUOjBXoKzR6JlLtKfj9eJEEQ4Nz5E=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8025c1\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 512e 574f 4558 4636 | 146 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n001 7 c26f c43f c6cf d299 | 63 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n002 3 a6fb b502 b2b5 | 27 ad98 (0) ac4d (0) ae2b (0) aeb4 (0)\n003 5 9d0f 9fa0 959f 96fc | 10 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n004 3 898d 886a 88fe | 5 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n005 2 8505 849b | 2 8505 (0) 849b (0)\n============ DEPTH: 6 ==========================================\n006 2 82dd 82f9 | 2 82dd (0) 82f9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","private_key":"0c41aca505e0136ca72a3c58217ecd9a78eea3796b96dd546d96472f328cf37f","name":"node_8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","services":["streamer"],"enable_msg_events":true,"port":41367},"up":true}},{"node":{"info":{"id":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","name":"node_4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","enode":"enode://10f863a5bc8ec93dee6896e14260ef8642e83ee113ee0ed55e0ee9d2ad4feba5670b38d5e529811d454fffb530187992f11f0151ac5031122b0837f845acc95c@127.0.0.1:0","enr":"0xf88fb8405098b23b6301b63dedf00769712c97314e7c701599028eabebef4e123b8d775622dfd46163d23effb9dc9e0738d925989bb5b390f4fe66a740815305619af8b60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10210f863a5bc8ec93dee6896e14260ef8642e83ee113ee0ed55e0ee9d2ad4feba5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RjbwC+YKm0lKPryatBzHy1PsCwvv8hTbLQokjcOutq8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4636f0\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8025 b2b5 | 110 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n001 6 378e 24b8 256e 07a8 | 76 0b72 (0) 0af9 (0) 0a00 (0) 0e5e (0)\n002 7 67aa 6f2d 6c4d 6831 | 32 7920 (0) 7a60 (0) 7b90 (0) 7dbb (0)\n003 3 5b63 524d 574f | 15 5db0 (0) 5cd2 (0) 5efb (0) 5f00 (0)\n004 5 49cd 4a8b 4bcf 4c9e | 11 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 4 4558 4559 4447 44a1 | 4 4447 (0) 44a1 (0) 4558 (0) 4559 (0)\n007 2 47bf 4782 | 2 47bf (0) 4782 (0)\n008 1 46fe | 1 46fe (0)\n============ DEPTH: 9 ==========================================\n009 1 4646 | 1 4646 (0)\n010 1 461c | 1 461c (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","private_key":"c7fd7cc73cf8fe60e42f0df8dba49b5b7c12529c7fabb2b5b769965ce13afb0b","name":"node_4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","services":["streamer"],"enable_msg_events":true,"port":40557},"up":true}},{"node":{"info":{"id":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","name":"node_b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","enode":"enode://d15330bc0ac2d05c53b502c8a5c9017e56f190332491742de058a920784f5ab943f482c2d1872603adc7d3bd42e77cb875434f3520ca93b47fe35a21fa62669a@127.0.0.1:0","enr":"0xf88fb840574761f8bb54fcd95cfa7b75775147cd15e5320d20cb64c70eda14db527c1ea24a6fde40dcbe9cd641f83d726c2d55878fbb2dfe0777ff514fd17b8bbfd106ee0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d15330bc0ac2d05c53b502c8a5c9017e56f190332491742de058a920784f5ab9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"srW6G7GI8Y95spXywNSMUsHR1EnsublLmYTzpheXMsc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2b5ba\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 24b8 256e 07a8 1f85 | 146 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n001 9 ca04 c6cf c26f da67 | 63 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n002 6 9076 96fc 976e 849b | 20 9852 (0) 9890 (0) 9d0f (0) 9fa0 (0)\n003 2 af02 a6fb | 10 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n004 3 baf2 b95d b897 | 9 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n005 5 b7ca b65e b626 b5b2 | 5 b7ca (0) b65e (0) b626 (0) b5b2 (0)\n============ DEPTH: 6 ==========================================\n006 1 b02b | 1 b02b (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 b2a5 | 1 b2a5 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","private_key":"6e70ae5c645585cea4f6e117e84118dcdc9efb654cc766a374ca297817172dc0","name":"node_b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","services":["streamer"],"enable_msg_events":true,"port":33709},"up":true}},{"node":{"info":{"id":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","name":"node_fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","enode":"enode://efdfaaad939ceb845670e7c93e476a841dbc743aa1d3ba9836be214025381c0bf8fe8967634b433603fc4657ee30d1b0e860ac88f70406374d23c7b72532f3f5@127.0.0.1:0","enr":"0xf88fb8402b581c48bc9b046b1ac97ca1d73ba39bd09847eb3b4ccaee9cfb8cb46ef2d7393cde50a04a69fd36f4c6a06b66252d6372ff5781a97a9eba519a182ab6ff34ae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103efdfaaad939ceb845670e7c93e476a841dbc743aa1d3ba9836be214025381c0b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/iFn/TPzgxEOs/bKp72QXKVPoMgQ8bijRIOoRvPL3as=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fe2167\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 256e 1f85 574f | 146 0b72 (0) 0af9 (0) 0a00 (0) 0e5e (0)\n001 3 8025 b502 b2b5 | 47 9fa0 (0) 9d0f (0) 9852 (0) 9890 (0)\n002 7 d1d7 d299 da67 db6a | 26 d7ac (0) d640 (0) d1d7 (0) d3b0 (0)\n003 6 ed2d ee5e efea e5ad | 18 eb98 (0) e854 (0) e883 (0) e8ef (0)\n004 8 f2d5 f31c f773 f629 | 13 f31c (0) f27f (0) f2d5 (0) f629 (0)\n005 3 f925 fbf5 fbc8 | 3 f925 (0) fbf5 (0) fbc8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 ff36 | 1 ff36 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 fe31 | 1 fe31 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","private_key":"82f871774e58e78c4be095210436adb4fb35f177d17042837b069f1793339635","name":"node_fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","services":["streamer"],"enable_msg_events":true,"port":40051},"up":true}},{"node":{"info":{"id":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","name":"node_c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","enode":"enode://89a40b4828258a45ddffc2eeca354e23356b818fc965a12c6a7e026d0e8bf72b43c98d81e2fa73356eff0f6100ae19475e42fa933113c8767b13dd5b04b84f5a@127.0.0.1:0","enr":"0xf88fb840d5565171400508ba844253cef0a659a7007e98b0ea4ea1d3174005f982b12e0f5d79bc818df366da989fde409077401d9b95cabac335c1d33761dfb511833e550183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10289a40b4828258a45ddffc2eeca354e23356b818fc965a12c6a7e026d0e8bf72b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wm/V5lBMez8KbZEz/4fJjBEOscIBxfO89rEGU/K5ctI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c26fd5\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1f85 67aa 77d2 574f | 146 0067 (0) 00c6 (0) 03cc (0) 0328 (0)\n001 6 96fc 976e 8025 82f9 | 47 ad98 (0) ac4d (0) ae2b (0) aeb4 (0)\n002 8 ed2d efea ee5e e547 | 37 eb98 (0) e854 (0) e883 (0) e8ef (0)\n003 7 da67 db6a d863 d640 | 11 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n004 4 cc20 c898 caf6 ca04 | 6 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n============ DEPTH: 5 ==========================================\n005 7 c49c c43f c441 c59e | 7 c786 (0) c620 (0) c6cf (0) c59e (0)\n006 1 c1f9 | 1 c1f9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","private_key":"736c6a6244885a1ad39fb0d125a7a2bf50d5515f38b1360dcf2c82a12f76fac5","name":"node_c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","services":["streamer"],"enable_msg_events":true,"port":39119},"up":true}},{"node":{"info":{"id":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","name":"node_574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","enode":"enode://5f9fe022355b31091330921e29c0ad61c9fdf8ee82f66c36fb03b2302f8fe2e3c32b931a30a66613a2c8f79c5788077e652cb6abdeeb0a330c9d264a8db6fad7@127.0.0.1:0","enr":"0xf88fb8404d529d52c3e76b4faa7d0a3bd82b1141a7a6c579aa512fc3f8a9d7d980c977a8626eb6d9c3351103f11cff3b7d222edf1f0c5c4b6ba304f2215882fc818b63bd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035f9fe022355b31091330921e29c0ad61c9fdf8ee82f66c36fb03b2302f8fe2e3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V09lhnSCCRruJ3QDMRbCM1Je6nEXBrWum6CbVOiW0wI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 574f65\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 8025 b2b5 b502 f528 | 110 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n001 4 256e 0d8a 07a8 1f85 | 76 0067 (0) 00c6 (0) 03cc (0) 0328 (0)\n002 7 7e04 7b90 7290 77d2 | 32 7dbb (0) 7dd3 (0) 7dc2 (0) 7e04 (0)\n003 9 4c9e 49cd 4a8b 44a1 | 23 4109 (0) 41d9 (0) 4559 (0) 4558 (0)\n004 2 5823 5b63 | 7 5cd2 (0) 5db0 (0) 5f00 (0) 5efb (0)\n============ DEPTH: 5 ==========================================\n005 7 51db 512e 5308 534b | 7 51db (0) 512e (0) 5308 (0) 534b (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","private_key":"d229f5b69bcdd60b64b4dbd3bbb0d8f06e4ce741c0ef2df9ccf7efa269b788e6","name":"node_574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","services":["streamer"],"enable_msg_events":true,"port":34895},"up":true}},{"node":{"info":{"id":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","name":"node_db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","enode":"enode://5eafc16cce4d7660bd2fbb314e96cc2cf9eb8ea56939776d7278b6d59cc46da7f9bd3236f1171a955cf401d05ba08861cadec21cd434a8fb1be4d95ba9e8334a@127.0.0.1:0","enr":"0xf88fb8405f6b3f6d51114a126675f72d0b280db019f6e5068b71d72e5a522e4083436c64689a304c802a95d836e8f5e273f123dba269e9df3e99b8b9760e25b4fef30abc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025eafc16cce4d7660bd2fbb314e96cc2cf9eb8ea56939776d7278b6d59cc46da7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"22ofazQva+lRf43wEAN5fBHIN9mu4826W3hZIws2w10=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: db6a1f\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 1f85 256e 574f | 146 0b72 (0) 0af9 (0) 0a00 (0) 0fc5 (0)\n001 5 b2b5 b502 976e 82f9 | 47 9890 (0) 9852 (0) 9d0f (0) 9fa0 (0)\n002 8 ed2d ee5e e7fa e547 | 37 eb98 (0) e854 (0) e883 (0) e8ef (0)\n003 7 c9f5 caf6 ca04 c26f | 15 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n004 5 d7ac d640 d3b0 d299 | 5 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n005 1 df1e | 1 df1e (0)\n006 2 d887 d863 | 2 d887 (0) d863 (0)\n============ DEPTH: 7 ==========================================\n007 2 daec da67 | 2 daec (0) da67 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","private_key":"dfd2fca92d5a4f222ac845159014d664d54ea1f9b33035068dc1f2572296fc46","name":"node_db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","services":["streamer"],"enable_msg_events":true,"port":39263},"up":true}},{"node":{"info":{"id":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","name":"node_c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","enode":"enode://3fc6aafc24fea946b6e17b7a684b14df9e9eb28514b7332fa30fd325816de5cc8cc49b992cd85f654a3fac88deea0804c52317cc6de693cd9f057f26fddb4c5a@127.0.0.1:0","enr":"0xf88fb840f87236d325dbf8011e68c5678b19ce6e8c0f1f66642a6a0af4028d2d16dc012e4d16b88c631287a65df9c7a7cc2267c8da224e6c804be3d605675c79e68988940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023fc6aafc24fea946b6e17b7a684b14df9e9eb28514b7332fa30fd325816de5cc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xD++6VOAAHJ0uPIx/jS81ZtcDvCDCxdJZ9RwJieYT8Y=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c43fbe\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 1400 0d8a 77d2 7290 | 146 00c6 (0) 0067 (0) 03cc (0) 0328 (0)\n001 4 976e 8025 82f9 b502 | 47 9890 (0) 9852 (0) 9d0f (0) 9fa0 (0)\n002 8 efea ee5e ed2d e027 | 37 ef07 (0) ef1b (0) efea (0) ee5e (0)\n003 5 d7ac d1d7 d299 da67 | 11 d640 (0) d7ac (0) d1d7 (0) d3b0 (0)\n004 2 caf6 ca04 | 6 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n005 2 c26f c1f9 | 2 c1f9 (0) c26f (0)\n006 3 c6cf c620 c786 | 3 c786 (0) c620 (0) c6cf (0)\n007 1 c59e | 1 c59e (0)\n============ DEPTH: 8 ==========================================\n008 1 c49c | 1 c49c (0)\n009 1 c441 | 1 c441 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","private_key":"6be49afc08c546676c011c401073a17e9b8840fa9edd1182f255e19073662d73","name":"node_c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","services":["streamer"],"enable_msg_events":true,"port":46219},"up":true}},{"node":{"info":{"id":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","name":"node_b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","enode":"enode://9d7d6722f1a51680a6f8affc6d1a10ede4ab4b4aa4ae1a4d406eec85c93875f1def190fdb2692f50153e62406fba95d939b2ca56910888b306eb3c9d50d76250@127.0.0.1:0","enr":"0xf88fb840beb0423e5654bf643406b5a5c35aa97675d9d7c3fef9bb2ddf7a0bfdb63b17b24b0224e5c5a31332fdc59e32c64eea5e59861707e1baa864e3e439cd273fcd430183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029d7d6722f1a51680a6f8affc6d1a10ede4ab4b4aa4ae1a4d406eec85c93875f1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tQJdFTWB0zO0TfS5v6adh94TiQUXLk/TF+FvcJml/Pg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b5025d\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 24b8 67aa 77d2 7290 | 146 3f94 (0) 3efc (0) 3ec5 (0) 3e8e (0)\n001 9 e5ad efea fe21 f4e0 | 63 eb98 (0) e854 (0) e883 (0) e8ef (0)\n002 6 88fe 849b 8025 82f9 | 20 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n003 3 a6fb a653 af02 | 10 ad98 (0) ac4d (0) ae2b (0) aeb4 (0)\n004 3 baf2 b95d b897 | 9 bcc6 (0) bb90 (0) ba88 (0) badd (0)\n005 2 b2a5 b2b5 | 3 b02b (0) b2a5 (0) b2b5 (0)\n============ DEPTH: 6 ==========================================\n006 3 b7ca b65e b626 | 3 b7ca (0) b65e (0) b626 (0)\n007 0 | 0\n008 1 b5b2 | 1 b5b2 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","private_key":"3a7659e35466d850264b95d5726e83847b52c4fe2ef8e76a5feac0100809deb4","name":"node_b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","services":["streamer"],"enable_msg_events":true,"port":45515},"up":true}},{"node":{"info":{"id":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","name":"node_f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","enode":"enode://9684e28e4a62f154f17f11253fb9011cc96e2d0d4ba400d12cf1b503cf26af50e7a8bf6e7f70c1536728100d6130ed58e2df364130255fbebe0d5d04b1fd70ed@127.0.0.1:0","enr":"0xf88fb8402dba0c34158122d8574a009ad32db3fe3e685cb1ca434ffbb06840fdc6eedf0918916d137d709bfd379a9142fb8a368674eaa6a9069a88209fb456b34b32b26d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039684e28e4a62f154f17f11253fb9011cc96e2d0d4ba400d12cf1b503cf26af50","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9Siqr9Z7INr9zhAdsiSqAccPk73JHBT1D6jbHb+fw4Y=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f528aa\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 574f 49cd 67aa 7290 | 146 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n001 3 b502 82f9 976e | 47 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n002 5 db6a da67 ca04 c26f | 26 d1d7 (0) d3b0 (0) d299 (0) d640 (0)\n003 7 ed2d efea e8ef e027 | 18 ee5e (0) ef1b (0) ef07 (0) efea (0)\n004 5 fbc8 fbf5 ff36 fe31 | 6 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n005 3 f31c f27f f2d5 | 3 f31c (0) f27f (0) f2d5 (0)\n006 3 f629 f7fa f773 | 4 f629 (0) f7ba (0) f7fa (0) f773 (0)\n007 3 f4e0 f45f f456 | 3 f456 (0) f45f (0) f4e0 (0)\n============ DEPTH: 8 ==========================================\n008 2 f5b2 f5dc | 2 f5b2 (0) f5dc (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","private_key":"0074e098350248a953ff96635c5646441ade6fbfa6928e7e7750f648e3b500ee","name":"node_f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","services":["streamer"],"enable_msg_events":true,"port":43141},"up":true}},{"node":{"info":{"id":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","name":"node_976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","enode":"enode://f1a481f05b3add0348b325714cd13f8a882a8d2b664914693d9941f93594ca157866eea0d82ebc7cb2fe170adeff113230c00d363f046910cd52ab0d55492ebe@127.0.0.1:0","enr":"0xf88fb84014a108662ac31a996bb4e33b0cf7555059548c4001a3ef8a193d8466ea9d19560d11b9724d49c733a3cb7a33e6b586c3c1e7d29b5cfaec3a6ae783fc8cdd11100183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f1a481f05b3add0348b325714cd13f8a882a8d2b664914693d9941f93594ca15","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"l25X0MMiJyIr/Qy7gC8mm9zVLV0zz2icZrEsAj9fqL8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 976e57\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 512e 4558 46fe 4782 | 146 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n001 7 ca04 c26f c786 c43f | 63 d1d7 (0) d3b0 (0) d299 (0) d640 (0)\n002 4 b2b5 b626 b5b2 b502 | 27 aeb4 (0) ae2b (0) af02 (0) ad98 (0)\n003 5 898d 88fe 849b 8025 | 10 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n004 4 9852 9890 9fa0 9d0f | 4 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n005 3 90a8 9076 915d | 3 90a8 (0) 9076 (0) 915d (0)\n============ DEPTH: 6 ==========================================\n006 1 959f | 1 959f (0)\n007 1 96fc | 1 96fc (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","private_key":"773efb429c0f38acad55b6036ac34ae481afe60385254d46a9bde06da2cb9688","name":"node_976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","services":["streamer"],"enable_msg_events":true,"port":34309},"up":true}},{"node":{"info":{"id":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","name":"node_7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","enode":"enode://5a17da2705e5b0debd1d99553696c4a5bbafb01aed9d25a59cc3138327b93cab177c0bcf0e776be1303d3ff5f00776f20c7014e244b21f403862867c778811b7@127.0.0.1:0","enr":"0xf88fb840e597671ce4248b4b2e417ca6323a8a567e7ef2d7410a33b01a359dbd7ecb815c2d88ee75860442c11680c729d27a72df1fb9720fae553a7935ef2d26436f68190183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035a17da2705e5b0debd1d99553696c4a5bbafb01aed9d25a59cc3138327b93cab","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cpDNOv+t5fnnKdGwNUms6vslds28Z4n9aIyVSV8Qus0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7290cd\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c43f da67 f528 b502 | 110 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n001 3 02d8 0d8a 1400 | 76 3f94 (0) 3e8e (0) 3efc (0) 3ec5 (0)\n002 9 5b63 53a8 574f 4558 | 38 51db (0) 512e (0) 524d (0) 5308 (0)\n003 5 6ecb 6fe9 6337 60d7 | 20 6967 (0) 6831 (0) 6c73 (0) 6c4d (0)\n004 5 7e04 7dd3 7dc2 7b90 | 7 7e04 (0) 7dbb (0) 7dd3 (0) 7dc2 (0)\n005 2 775e 77d2 | 2 775e (0) 77d2 (0)\n============ DEPTH: 6 ==========================================\n006 1 7125 | 1 7125 (0)\n007 1 738c | 1 738c (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","private_key":"c64631a1d6a68b8a5627d9020f3e5b7139f946885d83e07bc5704da66d3166c7","name":"node_7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","services":["streamer"],"enable_msg_events":true,"port":41897},"up":true}},{"node":{"info":{"id":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","name":"node_82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","enode":"enode://491601ffb74c3a9ebf3de209bc241d4c92ac22845e14acc401f895473f0bc655a9cfea75088a8c844eb406d545723ae828d2f12c500b0b54af2dd1fa476fb492@127.0.0.1:0","enr":"0xf88fb8403595298556b2fc3d72aad1199b8884bb4964f0329c3e542b25cdb97b44aa51647ad064f3bb12519401f2d5e1a205f0437711a1a9ae0d7ced24515e75874358490183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102491601ffb74c3a9ebf3de209bc241d4c92ac22845e14acc401f895473f0bc655","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gvnJAJ8J3i1qd7VJdtFMFCEermXYhvbtV1YMcAcW3Vw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 82f9c9\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 4558 4a8b 49cd 67aa | 146 3f94 (0) 3e8e (0) 3ec5 (0) 3efc (0)\n001 6 ca04 c26f c43f db6a | 63 cc20 (0) c9f5 (0) c832 (0) c898 (0)\n002 5 a6fb b2b5 b626 b5b2 | 27 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n003 6 9d0f 9fa0 915d 959f | 10 9890 (0) 9852 (0) 9d0f (0) 9fa0 (0)\n004 4 8f21 898d 886a 88fe | 5 8f21 (0) 898d (0) 886a (0) 88a1 (0)\n005 2 8505 849b | 2 8505 (0) 849b (0)\n============ DEPTH: 6 ==========================================\n006 1 8025 | 1 8025 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 82dd | 1 82dd (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","private_key":"0ef1f1623ac066de7c84777cf3fdec022dd693c8afd056e66d11862de46a6b46","name":"node_82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","services":["streamer"],"enable_msg_events":true,"port":35447},"up":true}},{"node":{"info":{"id":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","name":"node_67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","enode":"enode://df05a5d2153d7fb7c457936ec0e15ff559604a97443ea6452b72f52f0bf4f7141b33e639ea57beeef6f9a66105875690ff4b2ab4747566fd982574190e3de8ad@127.0.0.1:0","enr":"0xf88fb840a795f4ec6f1fdb826e6b2093cab7198649eb34d52ca4b62ce368e45ac4faa1f528a90244e6f7e816652c6b385873781f7c5100d927d40bba2c80f904ae4bfe140183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df05a5d2153d7fb7c457936ec0e15ff559604a97443ea6452b72f52f0bf4f714","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z6pUY+SzKzY7PQHSpBzLAxmUEQVydvSWLQUxYL4ppu8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67aa54\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 f528 c26f c43f da67 | 110 ef1b (0) ef07 (0) efea (0) ee5e (0)\n001 5 256e 30be 02d8 0d8a | 76 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n002 7 524d 53a8 574f 44a1 | 38 574f (0) 524d (0) 5308 (0) 534b (0)\n003 4 7a60 7b90 77d2 7290 | 12 7dd3 (0) 7dc2 (0) 7dbb (0) 7e04 (0)\n004 7 6831 6967 6c4d 6ea5 | 11 6831 (0) 6967 (0) 6c73 (0) 6c4d (0)\n005 5 6337 6251 628e 6103 | 6 628e (0) 6251 (0) 6337 (0) 6103 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 66e7 | 1 66e7 (0)\n008 0 | 0\n009 1 67dc | 1 67dc (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","private_key":"b796ff6a7ea6c2ded46cda26187abc9f36f967d9926239cfadb31eb97c349ca6","name":"node_67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","services":["streamer"],"enable_msg_events":true,"port":41807},"up":true}},{"node":{"info":{"id":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","name":"node_49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","enode":"enode://3c3dd1934b208eb8c478606579f8392337b4793113196b083d2ab9599f30a2217b82e47b41b2446956ef7bc98a5c7017010d405e89625cfaa7ec82503202e598@127.0.0.1:0","enr":"0xf88fb840bef6e7ddcbe9097f31c066f2007867456dac705bcafc0d983fafa95339cf22cf0dbe62c98d695ab072cf52a83210e68e4ccd1ae28c315d504b31c18875a7a6280183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023c3dd1934b208eb8c478606579f8392337b4793113196b083d2ab9599f30a221","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Sc0e/talanivTqSrQIEwE+dsal+50gKe4C212A9eQaY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 49cd1e\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c43f ca04 f528 b502 | 110 ad98 (0) ac4d (0) ae2b (0) aeb4 (0)\n001 10 30be 378e 3780 3b88 | 76 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n002 4 7b90 7290 60d7 67aa | 32 7dd3 (0) 7dc2 (0) 7dbb (0) 7e04 (0)\n003 5 512e 53a8 574f 5f00 | 15 574f (0) 524d (0) 5308 (0) 534b (0)\n004 8 4447 44a1 4559 4558 | 12 4109 (0) 41d9 (0) 44a1 (0) 4447 (0)\n005 3 4e5a 4c9e 4d6b | 5 4e5a (0) 4d10 (0) 4d59 (0) 4d6b (0)\n006 3 4bcf 4ac7 4a8b | 3 4bcf (0) 4ac7 (0) 4a8b (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 4990 | 1 4990 (0)\n010 1 49ea | 1 49ea (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","private_key":"563539e7699dfba87188db2ed5bd0040cfa037d5206f5a9aea1126ba8152310e","name":"node_49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","services":["streamer"],"enable_msg_events":true,"port":41057},"up":true}},{"node":{"info":{"id":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","name":"node_46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","enode":"enode://a0de85bf37f6c9a5f3721d82e07290b2aff2e6a485e2f5ddf83375faa1ce9e2d017ddc7b100b4380ed76cfdecc7b264e3c387ea994ae3e04084de10b9ce0debe@127.0.0.1:0","enr":"0xf88fb840a6baf80ae45dad3d244387e2e3306969fc26628f3f7f6d0c4db267ea2c532b6b2afab9ca8d89a8c3e90d540e1ddff77ea90e5a57af1485e6cdf579d33d54d8990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a0de85bf37f6c9a5f3721d82e07290b2aff2e6a485e2f5ddf83375faa1ce9e2d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Rv7mna2LamqH01bRDbJdg1oMThVL8Xnoj7TMZfl9ctc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 46fee6\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 b502 976e ca04 da67 | 110 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n001 3 0d8a 1b83 1400 | 76 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n002 6 7290 7a60 7b90 6fe9 | 32 6967 (0) 6831 (0) 6c73 (0) 6c4d (0)\n003 4 5b63 574f 53a8 512e | 15 574f (0) 524d (0) 5308 (0) 534b (0)\n004 3 4ac7 4a8b 49cd | 11 4e5a (0) 4d10 (0) 4d59 (0) 4d6b (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 4 4447 44a1 4559 4558 | 4 44a1 (0) 4447 (0) 4559 (0) 4558 (0)\n007 2 47bf 4782 | 2 47bf (0) 4782 (0)\n============ DEPTH: 8 ==========================================\n008 3 4646 461c 4636 | 3 4646 (0) 461c (0) 4636 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","private_key":"6fc017c68b2b6d1e4693c27cfaf816ee8b7e583f9c28e3236413cc80fef9a431","name":"node_46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","services":["streamer"],"enable_msg_events":true,"port":44839},"up":true}},{"node":{"info":{"id":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","name":"node_4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","enode":"enode://de5cedf56d1615e739c3b5ca058d2eea156785daef1c7f6e902c2bff170ea20cf2d7bbb3675b4e578abc41a540756f95f3737dc19ebd04edabd1f16878ff499b@127.0.0.1:0","enr":"0xf88fb840020d593599f4d4fdd4b673eaa585fd98665cc182ed5584ba2d601525f0a039d052b21ad75071dad2b20f02fc88ac764fb23d96be4848d01c42922b552755b01d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103de5cedf56d1615e739c3b5ca058d2eea156785daef1c7f6e902c2bff170ea20c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SothDgnTWqIcQquMPjjeYAqUTAlOa4bqVoKLXmkE8fc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4a8b61\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b502 976e 82f9 da67 | 110 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n001 2 0d8a 1400 | 76 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n002 5 60d7 7b90 7a60 77d2 | 32 7dbb (0) 7dd3 (0) 7dc2 (0) 7e04 (0)\n003 4 512e 53a8 574f 5b63 | 15 574f (0) 524d (0) 5308 (0) 534b (0)\n004 8 4447 44a1 4559 4558 | 12 41d9 (0) 4109 (0) 44a1 (0) 4447 (0)\n005 2 4d6b 4c9e | 5 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n006 3 4990 49ea 49cd | 3 4990 (0) 49ea (0) 49cd (0)\n============ DEPTH: 7 ==========================================\n007 1 4bcf | 1 4bcf (0)\n008 0 | 0\n009 1 4ac7 | 1 4ac7 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","private_key":"3deb6c6e230a0dae4c0fedc0272e1053d1abd2a0db710d50aef93887fa30a915","name":"node_4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","services":["streamer"],"enable_msg_events":true,"port":46571},"up":true}},{"node":{"info":{"id":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","name":"node_478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","enode":"enode://8fccdf07a7c9e466c0b785b6e7c08ab0f94389a6dd46b9a57854589a96a603e97aa8de47419c1d494b354330e85090d9c6caaeb9c4b9569614ed744bb18a812d@127.0.0.1:0","enr":"0xf88fb8405875381eb6fee735b5b8a7f7d40d20b341a0100ea48efe8538f28a4f40cd5a1323c240cd86add212d1642a4178d5f89048e6a9c2ddb9ff519e8baacfeffa0bbc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038fccdf07a7c9e466c0b785b6e7c08ab0f94389a6dd46b9a57854589a96a603e9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"R4J4GHzZr3megzQKL0mwt/Ei+44IwKNyqHeVQm6rNks=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 478278\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b502 976e da67 | 110 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n001 2 1400 0d8a | 76 2995 (0) 2a0a (0) 2a97 (0) 2abb (0)\n002 2 7290 60d7 | 32 775e (0) 77d2 (0) 7125 (0) 738c (0)\n003 4 5b63 574f 53a8 512e | 15 574f (0) 524d (0) 5308 (0) 534b (0)\n004 2 49cd 4a8b | 11 4e5a (0) 4d10 (0) 4d59 (0) 4d6b (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 4 4447 44a1 4559 4558 | 4 44a1 (0) 4447 (0) 4559 (0) 4558 (0)\n============ DEPTH: 7 ==========================================\n007 4 4646 461c 4636 46fe | 4 4646 (0) 461c (0) 4636 (0) 46fe (0)\n008 0 | 0\n009 0 | 0\n010 1 47bf | 1 47bf (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","private_key":"7134099c68806e422529987394e8a1ad8f242e3afdeaae1cbfc9502144f217d7","name":"node_478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","services":["streamer"],"enable_msg_events":true,"port":34389},"up":true}},{"node":{"info":{"id":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","name":"node_da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","enode":"enode://09c17ada4739980768a07f0c58b53d5a85809644bfc0eec14c46c61dc3e49b9b0464027601e91df63272219003508fbadb50af0b1e50cbf277df9393cf564a43@127.0.0.1:0","enr":"0xf88fb84026df424d93a356c6547f1236e5f3bcc0d324405bae4298855c59614f051e780b5a8e7f8b31e16a6c03c68c5b14c7f57b56aeec3423be94288bd6122dc84744bf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10309c17ada4739980768a07f0c58b53d5a85809644bfc0eec14c46c61dc3e49b9b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2mes409wdqHVULxhvCox2ojWzZ+d9DsUKoxrut4bSu4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: da67ac\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 02d8 0d8a 1400 7290 | 146 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n001 3 b2b5 976e 82f9 | 47 ad98 (0) ac4d (0) ae2b (0) aeb4 (0)\n002 6 e547 ed2d e8ef fe21 | 37 ee5e (0) ef1b (0) ef07 (0) efea (0)\n003 7 c26f c59e c43f c49c | 15 c1f9 (0) c26f (0) c620 (0) c6cf (0)\n004 4 d1d7 d299 d7ac d640 | 5 d1d7 (0) d3b0 (0) d299 (0) d640 (0)\n005 1 df1e | 1 df1e (0)\n006 2 d887 d863 | 2 d887 (0) d863 (0)\n============ DEPTH: 7 ==========================================\n007 1 db6a | 1 db6a (0)\n008 1 daec | 1 daec (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","private_key":"fe594383342620bd1c9a63e85f0d89178817a1ee319e2ae87883c4ea5095460e","name":"node_da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","services":["streamer"],"enable_msg_events":true,"port":38619},"up":true}},{"node":{"info":{"id":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","name":"node_ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","enode":"enode://314cf099608d4d93ba78e270ccccdc14e79ba93f1a35a21f22026b5185704dac75d3be0c47fa7ec804e43c36778fa2465de371bc88b65f0fe0fe7a20fcad4d41@127.0.0.1:0","enr":"0xf88fb840991f1a646d5b8c7b7ac450787d726b85d140b857b28b860546b9845b01192b1d33b0a9e2e8c65650934640d7cfda928a758c700c424697626a27fb804accd7f70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103314cf099608d4d93ba78e270ccccdc14e79ba93f1a35a21f22026b5185704dac","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ygQdoNxRRkPQF0WNCP9pYuxSyeZlcaI57DldyLJUZwk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ca041d\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 1400 02d8 0d8a 46fe | 146 2a97 (0) 2abb (0) 2a0a (0) 2995 (0)\n001 7 82f9 976e baf2 b2b5 | 47 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n002 4 e547 e5ad f4e0 f528 | 37 fbf5 (0) fbc8 (0) f925 (0) ff36 (0)\n003 5 d299 d7ac d640 db6a | 11 d1d7 (0) d3b0 (0) d299 (0) d640 (0)\n004 8 c6cf c786 c59e c49c | 9 c1f9 (0) c26f (0) c59e (0) c49c (0)\n005 1 cc20 | 1 cc20 (0)\n============ DEPTH: 6 ==========================================\n006 3 c9f5 c832 c898 | 3 c9f5 (0) c832 (0) c898 (0)\n007 0 | 0\n008 1 caf6 | 1 caf6 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","private_key":"9cc996c03300b4fbea17d12fdd08e09b69c5fb6285146a6ba449e039c93eb995","name":"node_ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","services":["streamer"],"enable_msg_events":true,"port":43867},"up":true}},{"node":{"info":{"id":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","name":"node_60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","enode":"enode://a14e22f8e8c82419c10076d96cdbe472237999f2149eee60543d344bb340cc0aba0065b6d152c59b8c5e95b6c85aad12133aa728af74492d114c66589b78a993@127.0.0.1:0","enr":"0xf88fb8408bf40ac90d17fcdb8b9194819add563ad27402ad5360ee89d31cd70ecae375697c825f76d7f9ff1386c1f4effce6a27828d685ca5f67dbdbdeffb230ebac73700183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a14e22f8e8c82419c10076d96cdbe472237999f2149eee60543d344bb340cc0a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YNczfvgGvpXMr3udZjpCifmvxo7c7WKQSrUGAc8RP0U=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 60d733\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e547 e5ad da67 ca04 | 110 ad98 (0) ac4d (0) aeb4 (0) ae2b (0)\n001 3 1b83 1400 0d8a | 76 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n002 7 512e 5b63 4a8b 49cd | 38 574f (0) 524d (0) 5308 (0) 534b (0)\n003 4 77d2 7290 7a60 7b90 | 12 775e (0) 77d2 (0) 7125 (0) 738c (0)\n004 6 6c73 6c4d 6ea5 6e05 | 11 6967 (0) 6831 (0) 6c73 (0) 6c4d (0)\n005 2 66e7 67aa | 3 66e7 (0) 67dc (0) 67aa (0)\n006 3 6337 628e 6251 | 3 6337 (0) 628e (0) 6251 (0)\n============ DEPTH: 7 ==========================================\n007 1 6103 | 1 6103 (0)\n008 1 605a | 1 605a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","private_key":"d865723cac5fd73301f42e8bd68cfc9378898c91568207d80b7594237cbee540","name":"node_60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","services":["streamer"],"enable_msg_events":true,"port":37363},"up":true}},{"node":{"info":{"id":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","name":"node_0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","enode":"enode://9f72dc03cfdcb02e051151d117994d208c6b1accb3fa75fd4c8f6973b90760fa21a742f873bbdd6abb98b45feab218b475d88600d83f3e155c0cd3a2bc8cd8e0@127.0.0.1:0","enr":"0xf88fb8401d3b8aa52b102a17d0ec1a0fbb92d0c4d45b8c64280e68a6de5c10d42ac23c57363fb8dd32efeb83e9578e85d240b6e9e6cb00753baf3d5a7877201720e406c60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029f72dc03cfdcb02e051151d117994d208c6b1accb3fa75fd4c8f6973b90760fa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DYqRkgf7LVcY6rfalfjv6wGk4a45YC0xX4ui/xdS2do=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0d8a91\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e547 da67 c43f ca04 | 110 aeb4 (0) ae2b (0) af02 (0) ad98 (0)\n001 12 53a8 574f 5b63 49cd | 70 574f (0) 524d (0) 534b (0) 5308 (0)\n002 4 256e 2ccf 3780 30be | 32 21a0 (0) 2101 (0) 217f (0) 20ae (0)\n003 4 1c8a 1f85 1b83 1400 | 22 1c47 (0) 1c9c (0) 1c8a (0) 1e2a (0)\n004 4 0438 0743 07a8 02d8 | 11 045b (0) 0451 (0) 0438 (0) 0661 (0)\n005 2 0af9 0b72 | 3 0b72 (0) 0a00 (0) 0af9 (0)\n006 3 0e5e 0fc5 0ff2 | 3 0e5e (0) 0fc5 (0) 0ff2 (0)\n============ DEPTH: 7 ==========================================\n007 3 0cf5 0c64 0c28 | 3 0cf5 (0) 0c64 (0) 0c28 (0)\n008 0 | 0\n009 1 0de3 | 1 0de3 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","private_key":"714005eb63c1f681f6e6d248618fbb384992707e07292f666ee9d475997ad0fe","name":"node_0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","services":["streamer"],"enable_msg_events":true,"port":36819},"up":true}},{"node":{"info":{"id":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","name":"node_140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","enode":"enode://e1ccb6417d15f6494ffafaa9d244c8b4dde696a72ca60fbd5dd6ad25d2b01530265fb2dff62548999fb9e9c7e4d8721cd1605b3e2259032ce3740e125a2724d9@127.0.0.1:0","enr":"0xf88fb840c1aba5fa71e995c2d05e38311251405e2aed69381bc4256421eefc3e58022db80bf4ee6dbb83cce873b18448ea8e2943c0c07ffcad5e79649279e3adec6b95d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e1ccb6417d15f6494ffafaa9d244c8b4dde696a72ca60fbd5dd6ad25d2b01530","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FAAgojqEC4hAugwsOE+FOmBjMOl0OIXplnz0lTPbKC4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 140020\npopulation: 45 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 e5ad e547 c43f ca04 | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 13 53a8 46fe 4782 4558 | 70 574f (0) 524d (0) 5308 (0) 534b (0)\n002 4 256e 24b8 378e 30be | 32 2995 (0) 2abb (0) 2a97 (0) 2a0a (0)\n003 6 0438 07a8 02d8 0cf5 | 22 045b (0) 0451 (0) 0438 (0) 0661 (0)\n004 8 1c47 1c9c 1c8a 1e2a | 10 1c47 (0) 1c9c (0) 1c8a (0) 1e2a (0)\n005 2 13d6 11d4 | 3 13d6 (0) 103b (0) 11d4 (0)\n006 4 1672 17db 179f 1704 | 5 165f (0) 1672 (0) 1704 (0) 179f (0)\n007 1 154b | 1 154b (0)\n============ DEPTH: 8 ==========================================\n008 1 14df | 1 14df (0)\n009 0 | 0\n010 1 1436 | 1 1436 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","private_key":"556950a90a1dad390b6fc5d9b5b1c233161f015de2d7fef6e8e6079733d4f698","name":"node_140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","services":["streamer"],"enable_msg_events":true,"port":35227},"up":true}},{"node":{"info":{"id":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","name":"node_7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","enode":"enode://5d077c804ebd13e7fa79b13210a9f8eaf0a72b5eb61816e9b780eb88a9794cf264334213ab605cbd538f71e0d354cc87c7c65b6ca6d492ca04a11f64dc401ee2@127.0.0.1:0","enr":"0xf88fb84044f3dd1993ede3a59f643421431f806409d41c9f6212b331bac4586d156afc1f75c391daa990c8e52046f96d52133b6b52ac0607d88f47108c0cb28b4e2ccb990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025d077c804ebd13e7fa79b13210a9f8eaf0a72b5eb61816e9b780eb88a9794cf2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"e5DpOa4qJA8NdKkjr7a78R9tW5mnv4Xxglseo2vOdEw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7b90e9\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b626 da67 e547 | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 3 1b83 1400 02d8 | 76 2995 (0) 2abb (0) 2a97 (0) 2a0a (0)\n002 10 4ac7 4a8b 49cd 46fe | 38 574f (0) 524d (0) 5308 (0) 534b (0)\n003 8 6c4d 6fe9 6f2d 6ecb | 20 66e7 (0) 67dc (0) 67aa (0) 628e (0)\n004 4 7290 738c 77d2 775e | 5 775e (0) 77d2 (0) 7125 (0) 738c (0)\n005 4 7e04 7dbb 7dd3 7dc2 | 4 7e04 (0) 7dbb (0) 7dd3 (0) 7dc2 (0)\n============ DEPTH: 6 ==========================================\n006 1 7920 | 1 7920 (0)\n007 1 7a60 | 1 7a60 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","private_key":"e008f9a954df6848345e13074de64581f826eb05f1c85014a22afe07d7afd655","name":"node_7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","services":["streamer"],"enable_msg_events":true,"port":40801},"up":true}},{"node":{"info":{"id":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","name":"node_02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","enode":"enode://92a4724c2dc7a409c261888c4cd9cf6414fc6cf9df011f8877dcafb8a0f09fccc292ad4cea02561c68b2226b6058e8803230ac5adce4d829a6be49161e9672a6@127.0.0.1:0","enr":"0xf88fb840545027bb61080c38c187a5d84369aa4b4790c385613ee02331515b99e60b1dd8228951b517cb1ff48bf5de46057359f0dfa5c064e46b20ccfbe05526e9aa9daa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10292a4724c2dc7a409c261888c4cd9cf6414fc6cf9df011f8877dcafb8a0f09fcc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Athbn45HdiJK5QiGg6h4N7grK/t+BHzzc6KDk+espuE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 02d85b\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b626 da67 ca04 e5ad | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 9 53a8 512e 5b63 4558 | 70 574f (0) 524d (0) 534b (0) 5308 (0)\n002 4 2ccf 2995 3780 30be | 32 20ae (0) 21a0 (0) 2101 (0) 217f (0)\n003 2 1b83 1400 | 22 1c47 (0) 1c9c (0) 1c8a (0) 1e2a (0)\n004 3 0cf5 0de3 0d8a | 11 0b72 (0) 0a00 (0) 0af9 (0) 0fc5 (0)\n005 5 07a8 0743 0451 045b | 6 0661 (0) 07a8 (0) 0743 (0) 045b (0)\n006 2 00c6 0067 | 2 00c6 (0) 0067 (0)\n============ DEPTH: 7 ==========================================\n007 2 03cc 0328 | 2 03cc (0) 0328 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","private_key":"e4ec3c40d474533d24394b73a40c70a533fdc023259146333c3ba30a6ef2e9ab","name":"node_02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","services":["streamer"],"enable_msg_events":true,"port":36493},"up":true}},{"node":{"info":{"id":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","name":"node_e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","enode":"enode://7171c11a093b51b6cc82078234ce48f2d0ebb3b56cc76ae5f988726c9857d7d69bc3fb5a01f4c6af0c862751c134804f1bdf13dc430fc007ae9c2dd5d0d6ff83@127.0.0.1:0","enr":"0xf88fb8408b53c905f3415f9c2c6e63f66a60385e30d6ff9285113905d760adb0db4eac275fefd5031cc64d050f70a502687314d59a1bd9c113edfd553d48a55a7a9c204e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037171c11a093b51b6cc82078234ce48f2d0ebb3b56cc76ae5f988726c9857d7d6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5UeEz7zYnDfI91iq5w7OOrS3+MMPtO91Q+BKqJ/0OGs=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e54784\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 1400 1b83 0d8a 02d8 | 146 2995 (0) 2a97 (0) 2abb (0) 2a0a (0)\n001 4 9d0f 959f 915d b626 | 47 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n002 10 c26f c786 c49c c59e | 26 df1e (0) d887 (0) d863 (0) db6a (0)\n003 3 fe21 f2d5 f528 | 19 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n004 3 e8ef ed2d efea | 10 ec52 (0) ed2d (0) ee5e (0) ef1b (0)\n005 1 e027 | 1 e027 (0)\n006 2 e775 e7fa | 2 e775 (0) e7fa (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 e5d7 e5ad | 2 e5d7 (0) e5ad (0)\n009 1 e514 | 1 e514 (0)\n010 0 | 0\n011 0 | 0\n012 1 e54b | 1 e54b (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","private_key":"6855155d7773437dde5625696c1fd21e0b93d11b8f418fe17b83735999241de6","name":"node_e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","services":["streamer"],"enable_msg_events":true,"port":44601},"up":true}},{"node":{"info":{"id":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","name":"node_45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","enode":"enode://1d85f00468f786d1f65c994867636f183a120622cffb3f2934c00dba86d528843a0c8b82e64a43212e3cb8b496fd71390b505c78ab6e3be9415fd3c56318aff7@127.0.0.1:0","enr":"0xf88fb840afb40932bf66ca7c121a0c54ece652628981b3fae02dd8c65f5de31913ddfd985cc09c42a7843bf6fc85803cae0b508643b06bb46b9c38f9c7c4570dc325063c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031d85f00468f786d1f65c994867636f183a120622cffb3f2934c00dba86d52884","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RVhKS+u5SO9fe1XUhG7FVJ12I2ghacDtyrWzUj5ox9o=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 45584a\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 8025 82f9 959f 976e | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 4 30be 02d8 1400 1b83 | 76 2101 (0) 217f (0) 21a0 (0) 20ae (0)\n002 5 60d7 6fe9 7290 7a60 | 32 66e7 (0) 67dc (0) 67aa (0) 6251 (0)\n003 4 574f 53a8 512e 5b63 | 15 574f (0) 524d (0) 5308 (0) 534b (0)\n004 3 49cd 4a8b 4ac7 | 11 4e5a (0) 4d10 (0) 4d6b (0) 4d59 (0)\n005 2 4109 41d9 | 2 4109 (0) 41d9 (0)\n006 6 4646 4636 461c 46fe | 6 4646 (0) 461c (0) 4636 (0) 46fe (0)\n============ DEPTH: 7 ==========================================\n007 2 44a1 4447 | 2 44a1 (0) 4447 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 1 4559 | 1 4559 (0)\n========================================================================="}},"config":{"id":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","private_key":"9608a1c360a2f5a546c575e523d9afd2b89f14ea1058b2f3be09cb1ba5ba4240","name":"node_45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","services":["streamer"],"enable_msg_events":true,"port":44403},"up":true}},{"node":{"info":{"id":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","name":"node_1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","enode":"enode://73130b08d35d59e21a3991dc309b956f7bcd8dc6946b53bba74e40d612c993b6b8bfc34ee4e2cebfb54120afb070360aba61e91ebf845a4d0bc2f5a94f7918b2@127.0.0.1:0","enr":"0xf88fb84087efc4c166904eeedc3b6692d887773016e8af688980eff63dbd8053a6662a994b81ef2f726fb80b4fb522f0551ebbe913fedbb471e94c6e1b6c26882f9e963b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10273130b08d35d59e21a3991dc309b956f7bcd8dc6946b53bba74e40d612c993b6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"G4MO1ISydKlux7ovmkK2hZQStTNKVkAU/z8RWX6joy0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1b830e\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c786 e547 | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 8 60d7 6fe9 7b90 7a60 | 70 66e7 (0) 67dc (0) 67aa (0) 628e (0)\n002 3 2ccf 3780 30be | 32 20ae (0) 21a0 (0) 2101 (0) 217f (0)\n003 5 07a8 0438 02d8 0cf5 | 22 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n004 4 1704 17db 1436 1400 | 12 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n005 4 1f67 1f85 1c47 1c8a | 6 1c47 (0) 1c9c (0) 1c8a (0) 1e2a (0)\n============ DEPTH: 6 ==========================================\n006 2 19fa 18f6 | 2 19fa (0) 18f6 (0)\n007 1 1a2a | 1 1a2a (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","private_key":"9a7dd3d621d32ff5a718455ac877ef986e5aaa5f787e0c07a01221179c5655a6","name":"node_1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","services":["streamer"],"enable_msg_events":true,"port":44895},"up":true}},{"node":{"info":{"id":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","name":"node_5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","enode":"enode://7180d5a2452d8f6f57da742809146caacf5d03be267b31242048646bfa4961bf2284cfeab0b4af050aca2a42f14742163ac4fdfe364bb31111ee5aad221f17da@127.0.0.1:0","enr":"0xf88fb84057305ca13e6cae11290507a0fc500d9008b375e0f3e6c6a47714cc7fe9c0c390643b679806a97c42225f87daf53e3b30ee361ed30fb4980947d7d1734dfeb46e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027180d5a2452d8f6f57da742809146caacf5d03be267b31242048646bfa4961bf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W2Mur3ANFz/xX0cnuFgX5hcyKMMEtCJDSgjCytQ4uCU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5b632e\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b626 e5ad e547 d7ac | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 4 30be 0d8a 02d8 1b83 | 76 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n002 8 6337 60d7 6e05 6fe9 | 32 66e7 (0) 67dc (0) 67aa (0) 6337 (0)\n003 9 49cd 4a8b 4ac7 4636 | 23 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n004 4 574f 53a8 51db 512e | 8 574f (0) 524d (0) 534b (0) 5308 (0)\n005 3 5cd2 5db0 5f00 | 4 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n============ DEPTH: 6 ==========================================\n006 2 5823 58ed | 2 5823 (0) 58ed (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","private_key":"745b337c790505716596b24711aeb834f9da50436f3c21c469cc58d9ed44bade","name":"node_5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","services":["streamer"],"enable_msg_events":true,"port":39847},"up":true}},{"node":{"info":{"id":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","name":"node_512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","enode":"enode://1ab954a0243f9922c7cc2353fed4531e695ab0f6c7d1f8b71ad381ce5b816d82d3e28fec5e7c29b4803a212c4b95b2e36764a217983fe60077800f6cc1042e8f@127.0.0.1:0","enr":"0xf88fb84083fbd1c8452f3f73ce4a2b36c81e402e17ae6440d2848e50b2948a3e01e62a840e4e008afd0dbb92800b63a93d399149a0cf7181d700305c34a238931bf5eca00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031ab954a0243f9922c7cc2353fed4531e695ab0f6c7d1f8b71ad381ce5b816d82","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"US7Fwua014hIJGLZQRF8gfzA5z8MFVRXlN0bTgO/IQI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 512ec5\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 915d 976e 959f 8025 | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 2 02d8 30be | 76 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n002 4 60d7 6fe9 7b90 7a60 | 32 66e7 (0) 67dc (0) 67aa (0) 6251 (0)\n003 8 49cd 4ac7 4a8b 4447 | 23 4c9e (0) 4d10 (0) 4d59 (0) 4d6b (0)\n004 2 5f00 5b63 | 7 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n005 1 574f | 1 574f (0)\n============ DEPTH: 6 ==========================================\n006 5 524d 5308 534b 53fe | 5 524d (0) 5308 (0) 534b (0) 53fe (0)\n007 0 | 0\n008 1 51db | 1 51db (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","private_key":"a9936124e7fb45265f6f877d31652c355a01c95aafa0759b600b0b01bda446eb","name":"node_512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","services":["streamer"],"enable_msg_events":true,"port":42415},"up":true}},{"node":{"info":{"id":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","name":"node_c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","enode":"enode://0f947b6b5ef1e5851a56a3a6852d472207b64d611146bc3070524184aa3530da88475fb850affcc256762fd9be921202f017475ff8cd8ffaeed209ab886fff12@127.0.0.1:0","enr":"0xf88fb840f891417b94f031211a81ebabc83fda5d22dee1e76ffbf5ed206cdfdc2e0ad84110d709ff637d2b0727e8e5968902fd13220cd26f881e0b8b8cf2978d2cf78daf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020f947b6b5ef1e5851a56a3a6852d472207b64d611146bc3070524184aa3530da","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"x4b/hmf1CbWpUZmEwdlcg6XS4ldQCnFCno8jr2EM53E=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c786ff\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 30be 1b83 5b63 512e | 146 13d6 (0) 103b (0) 11d4 (0) 165f (0)\n001 5 96fc 976e 959f 9d0f | 47 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n002 9 f5dc f4e0 f925 fe31 | 37 fbc8 (0) fbf5 (0) f925 (0) ff36 (0)\n003 5 d863 db6a da67 d640 | 11 df1e (0) d887 (0) d863 (0) db6a (0)\n004 4 c9f5 c832 ca04 caf6 | 6 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n005 2 c1f9 c26f | 2 c1f9 (0) c26f (0)\n006 4 c59e c441 c43f c49c | 4 c43f (0) c441 (0) c49c (0) c59e (0)\n============ DEPTH: 7 ==========================================\n007 2 c620 c6cf | 2 c620 (0) c6cf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","private_key":"ac3f95d0c0be51c8eb8e612f911fc75f2c7796eb845e974b365f8ca34e1cf47f","name":"node_c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","services":["streamer"],"enable_msg_events":true,"port":33023},"up":true}},{"node":{"info":{"id":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","name":"node_7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","enode":"enode://bcc004d204a81c01d6723867a47b697318eb158b54dcd5ded13d8dcc571f81e8bb51e56b4f5d2dae98a48aa41e77429bf1aed102194df88ce7a4ec9761c78733@127.0.0.1:0","enr":"0xf88fb840cdabbbf5e1facab29f6e6f89d212c7fae606ccfa0ebe589ea48a109bc0e55ada757e2d5d4c65db8cb1a08f565d4a76dc5e565ba64f9411dfb4335217027c424f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bcc004d204a81c01d6723867a47b697318eb158b54dcd5ded13d8dcc571f81e8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"emCNLPnR2cWBncH56I5csoUqreoBxA4EfC4YS2LnFjw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7a608d\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b5b2 e8ef e5ad d7ac | 110 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n001 5 02d8 0d8a 1400 1b83 | 76 13d6 (0) 103b (0) 11d4 (0) 165f (0)\n002 9 4a8b 4ac7 4558 46fe | 38 4c9e (0) 4d10 (0) 4d59 (0) 4d6b (0)\n003 9 6103 60d7 6337 67aa | 20 66e7 (0) 67dc (0) 67aa (0) 628e (0)\n004 2 77d2 7290 | 5 775e (0) 77d2 (0) 7125 (0) 738c (0)\n005 4 7e04 7dbb 7dc2 7dd3 | 4 7e04 (0) 7dbb (0) 7dc2 (0) 7dd3 (0)\n============ DEPTH: 6 ==========================================\n006 1 7920 | 1 7920 (0)\n007 1 7b90 | 1 7b90 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","private_key":"1482a769e4374b6a63d26c4cd99ac2a877d146de855386acc89bbbf8d92d634d","name":"node_7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","services":["streamer"],"enable_msg_events":true,"port":43929},"up":true}},{"node":{"info":{"id":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","name":"node_e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","enode":"enode://45396d74120c86243ba2a5201eb5c426df1e01a818cab326b1f835329328113dcbfc080c8d30f25d4b3100a6881df18cbedf46901fa1eba42e8b67217a03b6d4@127.0.0.1:0","enr":"0xf88fb840ef39cfe61b95ba34b613f30b0c843f8b08e7b8d7e1612460f235e2864e40110d59b1705cfc07c7f088345f97da1704cd0b1336fe5f79ef916551e2f99d9573240183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10245396d74120c86243ba2a5201eb5c426df1e01a818cab326b1f835329328113d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5a2gQVyS7xURsV0E7fOVl2Rkr9mtw+kpxB1NIdJeMYI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e5ada0\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 02d8 1400 30be 5b63 | 146 13d6 (0) 11d4 (0) 103b (0) 1672 (0)\n001 4 88fe b502 b5b2 b626 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 7 d7ac d640 caf6 ca04 | 26 df1e (0) d887 (0) d863 (0) db6a (0)\n003 3 fe21 f2d5 f528 | 19 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n004 3 ec52 efea e8ef | 10 ee5e (0) ef1b (0) ef07 (0) efea (0)\n005 1 e027 | 1 e027 (0)\n006 2 e775 e7fa | 2 e775 (0) e7fa (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 3 e514 e54b e547 | 3 e514 (0) e54b (0) e547 (0)\n009 1 e5d7 | 1 e5d7 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","private_key":"412a46a21e6ae42d21149e1e5a99ab8147be24ca5ca741bc0806394903c6a4e9","name":"node_e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","services":["streamer"],"enable_msg_events":true,"port":44795},"up":true}},{"node":{"info":{"id":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","name":"node_30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","enode":"enode://d4938f13c3e1a21366991a0040a5de8e8d3200ec4fa2e95ebd57bf291ae843e2e484f992690d2fbbc475b3fbf3d9ac44d29ff8b2bfaced1a76f0fca80a1e8499@127.0.0.1:0","enr":"0xf88fb840eff44640732004cd295f6d11cea92ed4934e714036a514bc63ea49a498010ad0630d6f351de844e1ad07c248cb15476b934e9ae674722be12109c12fceb667440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d4938f13c3e1a21366991a0040a5de8e8d3200ec4fa2e95ebd57bf291ae843e2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ML7HzQp9ACg5rtdlQSm9L+Lizn9CqnuuFWDov3GJVMM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 30bec7\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b626 d7ac c786 c59e | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 10 5b63 53a8 512e 49cd | 70 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n002 6 02d8 0d8a 1400 1f85 | 44 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n003 6 20ae 217f 24b8 256e | 15 20ae (0) 21a0 (0) 2101 (0) 217f (0)\n004 2 3b88 3ec5 | 7 39d1 (0) 3b78 (0) 3b88 (0) 3f94 (0)\n005 3 3630 3780 378e | 4 35e6 (0) 3630 (0) 378e (0) 3780 (0)\n006 2 3237 33b5 | 3 3373 (0) 33b5 (0) 3237 (0)\n============ DEPTH: 7 ==========================================\n007 1 314a | 1 314a (0)\n008 0 | 0\n009 0 | 0\n010 1 3089 | 1 3089 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","private_key":"457e22ce24b3272b31f979367cff7d1675ce728dd8758a7e66779eab01b1f39a","name":"node_30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","services":["streamer"],"enable_msg_events":true,"port":40077},"up":true}},{"node":{"info":{"id":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","name":"node_6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","enode":"enode://e2ff496895056d4524e8809a260658da6ceec4c10793af4bcb6c057c8e49b09e58f567ba6f5276f0b7f0a77d9fdf7faa3240a2bd679395fcedabee5b9f3351a7@127.0.0.1:0","enr":"0xf88fb84070b049df191da1faabfd595e42918747d388a4aefef434acda7b08e59e72eef27c77b287320a2242d7483326ca4c879b2a973a90e8de4f7d318ae7837f2485a20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e2ff496895056d4524e8809a260658da6ceec4c10793af4bcb6c057c8e49b09e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"b+mgLpUKXDpf8Ca3WSLtaH1ZeVuo65wJKo0JpcZNJFM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6fe9a0\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 e8ef e5ad c49c c786 | 110 fbf5 (0) fbc8 (0) f925 (0) ff36 (0)\n001 4 02d8 1400 1b83 30be | 76 13d6 (0) 103b (0) 11d4 (0) 165f (0)\n002 9 53a8 512e 5f00 5b63 | 38 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n003 3 7290 7b90 7a60 | 12 775e (0) 77d2 (0) 7125 (0) 738c (0)\n004 5 66e7 67aa 6337 6103 | 9 66e7 (0) 67dc (0) 67aa (0) 6251 (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n006 2 6c73 6c4d | 2 6c73 (0) 6c4d (0)\n007 4 6e05 6e68 6ea5 6ecb | 4 6ea5 (0) 6ecb (0) 6e68 (0) 6e05 (0)\n============ DEPTH: 8 ==========================================\n008 2 6f5f 6f2d | 2 6f5f (0) 6f2d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","private_key":"879ee7d6a5c3b9955ff62eaf879fe7b1cfccac856af66e529973919c66e623fc","name":"node_6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","services":["streamer"],"enable_msg_events":true,"port":39807},"up":true}},{"node":{"info":{"id":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","name":"node_b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","enode":"enode://bcb24f203bc073123e592cbe910596246943b55a8b23f83c44d9a9792ce617b3881167f7ea10979b8e0edbb7477d3caa2536b87ab288635a7f606b7f12e6fdf6@127.0.0.1:0","enr":"0xf88fb840bb20ffbb4f9e317c0920fd1e3c9ab49f236431a644b4ed2d281206876654ea5175878382b830f9312bf112a8799f0609ac8d280355c23d6062b4299a6d4957d40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bcb24f203bc073123e592cbe910596246943b55a8b23f83c44d9a9792ce617b3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tibUcrVV5vlQpxQng9uN60Q6dOY+9r1yqH6vGvFMqAU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b626d4\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 02d8 30be 5b63 53a8 | 146 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n001 11 f2d5 e8ef e547 e5ad | 63 fbc8 (0) fbf5 (0) f925 (0) fe31 (0)\n002 5 915d 959f 976e 82f9 | 20 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n003 3 ac4d a6fb a653 | 10 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n004 4 b95d ba88 badd baf2 | 9 bcc6 (0) b820 (0) b897 (0) b911 (0)\n005 2 b02b b2b5 | 3 b02b (0) b2a5 (0) b2b5 (0)\n006 2 b5b2 b502 | 2 b502 (0) b5b2 (0)\n============ DEPTH: 7 ==========================================\n007 1 b7ca | 1 b7ca (0)\n008 0 | 0\n009 1 b65e | 1 b65e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","private_key":"a8c00eca98c6cb671796a4d64ed46a6e68a4299a429d774c69674a2844e1b7eb","name":"node_b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","services":["streamer"],"enable_msg_events":true,"port":45367},"up":true}},{"node":{"info":{"id":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","name":"node_d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","enode":"enode://af8ad49dda536a983269aeea2d7dca08e480fe8314968145e98dc97cd7b009ed461036eccaa3b638ee49d16e627b2234eb3f362ec7d15abc46e5c36b54e53638@127.0.0.1:0","enr":"0xf88fb840e94ce96dfda68df3191de91c495debd7006cfc51027649581bd11c598e9ab2f214d984a700cab94c2e6de920ccb7f73533a32c3f8dfb71f22d53f5e21ffd7b320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102af8ad49dda536a983269aeea2d7dca08e480fe8314968145e98dc97cd7b009ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"16yo8hgrxiXSs8lCvRFhyFvPHCs07L4+L9I8+ua4qHE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d7aca8\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 30be 7a60 6fe9 5b63 | 146 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n001 3 88fe b5b2 b626 | 47 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n002 9 e8ef ec52 e547 e5ad | 37 f925 (0) fbc8 (0) fbf5 (0) ff36 (0)\n003 8 ca04 caf6 c26f c786 | 15 cc20 (0) c898 (0) c832 (0) c9f5 (0)\n004 4 df1e d863 da67 db6a | 6 df1e (0) d887 (0) d863 (0) db6a (0)\n============ DEPTH: 5 ==========================================\n005 3 d1d7 d3b0 d299 | 3 d1d7 (0) d3b0 (0) d299 (0)\n006 0 | 0\n007 1 d640 | 1 d640 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","private_key":"0301a81bf982f07c1bb98bf99f353b8d2a82b03e69c21e1d74c8ceaad8396be0","name":"node_d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","services":["streamer"],"enable_msg_events":true,"port":34989},"up":true}},{"node":{"info":{"id":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","name":"node_4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","enode":"enode://518d6f5949bd69109142c1b8c458304de346817905a7cffb3be16be375f045f0c8d104d1d8dfeb19c79400877a63ad2ee8e87d9a1f57ce8f80ae645cbf4eef67@127.0.0.1:0","enr":"0xf88fb8406bb867b351cac2f28189ea4e9784fdf036ef21c4f2f01e0e0219a597544f9e026023632fca76371095ae079ec4432604b31db489477ff2bcb07772cf56116cc20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103518d6f5949bd69109142c1b8c458304de346817905a7cffb3be16be375f045f0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SsdVEj3MZO9E25KAMRr1Hz96k+De5nNw1nMmEiA1brk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4ac755\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b5b2 b626 e8ef d7ac | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 5 0d8a 1400 1b83 3780 | 76 13d6 (0) 11d4 (0) 103b (0) 1672 (0)\n002 3 7b90 7a60 6fe9 | 32 775e (0) 77d2 (0) 7125 (0) 738c (0)\n003 4 5f00 5b63 512e 53a8 | 15 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n004 4 4447 4558 46fe 47bf | 12 41d9 (0) 4109 (0) 44a1 (0) 4447 (0)\n005 2 4c9e 4d6b | 5 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n006 3 4990 49ea 49cd | 3 4990 (0) 49ea (0) 49cd (0)\n============ DEPTH: 7 ==========================================\n007 1 4bcf | 1 4bcf (0)\n008 0 | 0\n009 1 4a8b | 1 4a8b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","private_key":"f8fa80aec89f65eae7ced03937bb7d9ffb1cfecd1ac8217600cf47c3bff7bfed","name":"node_4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","services":["streamer"],"enable_msg_events":true,"port":38749},"up":true}},{"node":{"info":{"id":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","name":"node_c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","enode":"enode://3909a562bce9e929066fb8e20922518612b890356bb3e697259c816e2517f826e527c1899afe88e6b7c605624fb9260ec468201d8baa1e17fc0ca07e1629ac74@127.0.0.1:0","enr":"0xf88fb84055d8b49729febc40ab5a07b226db8df1a30bab38bbffbcdf525ad479d3d859e360ab5dcb1431b296f0eeaff955d7f74ddc76c4af156067256afe7dd5d718293e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023909a562bce9e929066fb8e20922518612b890356bb3e697259c816e2517f826","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xZ45U7ZOW5/75TmQo1iRTy+o41UdM/krnjpEG9G68s0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c59e39\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 30be 47bf 4ac7 | 146 0b72 (0) 0a00 (0) 0af9 (0) 0fc5 (0)\n001 4 959f 88fe b5b2 b626 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 3 e8ef e547 e5ad | 37 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n003 6 da67 d863 df1e d299 | 11 df1e (0) d887 (0) d863 (0) db6a (0)\n004 2 ca04 caf6 | 6 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n005 2 c1f9 c26f | 2 c1f9 (0) c26f (0)\n006 3 c786 c620 c6cf | 3 c620 (0) c6cf (0) c786 (0)\n============ DEPTH: 7 ==========================================\n007 3 c43f c441 c49c | 3 c43f (0) c441 (0) c49c (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","private_key":"2d2665fd12ac020bb8aa6997cba5174e95d07b7f2dd9687d68abd431a6133895","name":"node_c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","services":["streamer"],"enable_msg_events":true,"port":42839},"up":true}},{"node":{"info":{"id":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","name":"node_47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","enode":"enode://99a8f99fc0cfe5ad73c6d3c6784bd3c8a36e664d0c586724f2a5dacd88ae1de2c2b2afe39786236af913ea9ea1d6f81726598d4fedf4f9698bc4d622dfa74456@127.0.0.1:0","enr":"0xf88fb84003f4b14b4db4abd57728bdc34701e10c40aa56b4937b21e60de55c6e0dc32a4e429766f47337d209a05d753ba33fb2e781dbccc3dece305fca6b5aa020f556b10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10299a8f99fc0cfe5ad73c6d3c6784bd3c8a36e664d0c586724f2a5dacd88ae1de2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"R7+jdnzvzAgx1BDVQC6TluikEsjJb69VtFHT/zEPOwI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 47bfa3\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 88fe b5b2 b626 e8ef | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 2 3780 30be | 76 13d6 (0) 103b (0) 11d4 (0) 165f (0)\n002 3 6e05 6fe9 7a60 | 32 775e (0) 77d2 (0) 7125 (0) 738c (0)\n003 4 5f00 5b63 512e 53a8 | 15 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n004 3 49cd 4a8b 4ac7 | 11 4e5a (0) 4c9e (0) 4d10 (0) 4d59 (0)\n005 2 41d9 4109 | 2 41d9 (0) 4109 (0)\n006 4 44a1 4447 4559 4558 | 4 4559 (0) 4558 (0) 44a1 (0) 4447 (0)\n============ DEPTH: 7 ==========================================\n007 4 4646 4636 461c 46fe | 4 4646 (0) 461c (0) 4636 (0) 46fe (0)\n008 0 | 0\n009 0 | 0\n010 1 4782 | 1 4782 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","private_key":"e14e52fa9b610fd29123ec266b01cb4554f23f0985eaf4f397ee8e36da9fb734","name":"node_47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","services":["streamer"],"enable_msg_events":true,"port":36519},"up":true}},{"node":{"info":{"id":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","name":"node_53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","enode":"enode://7cb2f74beeafb23eb1c3733aa06b15fcf9ec81c7bcd0c7fca13880190575b2efc50576733e125720aa8ca507c8763d15fc8c6a2d45ece04586cec04a52cf219f@127.0.0.1:0","enr":"0xf88fb8406637aa6250f6d822fa890a388e4a0568c5ba66b7f182fc1e3bde5ea9387252335b403469fdffbc037d26e4abdb86926c506f134f6bb74408cd656037fe7f8a250183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037cb2f74beeafb23eb1c3733aa06b15fcf9ec81c7bcd0c7fca13880190575b2ef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"U6iFlo1o2Ov37VFOZizBP6AxhtI2EACgNXZTH9yiol8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 53a885\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 88fe b5b2 b626 c49c | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 7 1400 0d8a 02d8 0438 | 76 0661 (0) 0743 (0) 07a8 (0) 0451 (0)\n002 6 67aa 6fe9 6e05 7290 | 32 775e (0) 77d2 (0) 7125 (0) 738c (0)\n003 8 49cd 4a8b 4ac7 4558 | 23 4e5a (0) 4d10 (0) 4d6b (0) 4d59 (0)\n004 4 5f00 5efb 5b63 5823 | 7 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n005 1 574f | 1 574f (0)\n006 2 51db 512e | 2 51db (0) 512e (0)\n007 1 524d | 1 524d (0)\n============ DEPTH: 8 ==========================================\n008 2 534b 5308 | 2 534b (0) 5308 (0)\n009 1 53fe | 1 53fe (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","private_key":"969e9079ff9417e9019194be48bd5ca8390e4b1da63300776d6ba493e5b0e3df","name":"node_53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","services":["streamer"],"enable_msg_events":true,"port":34549},"up":true}},{"node":{"info":{"id":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","name":"node_e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","enode":"enode://61681c2fcd285866105bfa4d3e47a2c7d765368cde74a62218935aecf0fd15966a88226b5f12e371f41954a0063b806cce53468884b34e817120d5b41386fe22@127.0.0.1:0","enr":"0xf88fb840276c3036a03aa8627db3a54002f6257878aa8046c3174fd3a3052160dafc7a8445e68a88d8bfd35ff1174b47c53c3fec471867db75b9f0670a68993bcf09c1f40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10261681c2fcd285866105bfa4d3e47a2c7d765368cde74a62218935aecf0fd1596","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6O/oAW/mz2SbJ1W+4i2jXMxsnFXUBNU4XWH26ie4Q4A=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e8efe8\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 30be 7a60 6fe9 4ac7 | 146 13d6 (0) 103b (0) 11d4 (0) 1704 (0)\n001 4 88fe baf2 b626 b5b2 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 6 caf6 c49c c59e da67 | 26 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n003 4 f2d5 f629 f7fa f528 | 19 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n004 5 e027 e7fa e547 e5d7 | 8 e027 (0) e775 (0) e7fa (0) e514 (0)\n005 6 ee5e ef1b ef07 efea | 6 ee5e (0) ef1b (0) ef07 (0) efea (0)\n006 1 eb98 | 1 eb98 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 e854 | 1 e854 (0)\n009 1 e883 | 1 e883 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","private_key":"8ce9e530f5c91869432f678c7427fbcae8495679b569edd4de349825b348c94a","name":"node_e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","services":["streamer"],"enable_msg_events":true,"port":41325},"up":true}},{"node":{"info":{"id":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","name":"node_d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","enode":"enode://17dda987ab35c708fe928fd6daff3da8a18784789c581cb861079dca3d05584c6516824bb15729d0d6e4ca77908c3ae96a4a8f8edfb415eef4f9f31481e0b2cf@127.0.0.1:0","enr":"0xf88fb8401e90e884b49904ec677447f4c5edbe69de30ec6df088f673b1b613313d66a2c30ec1b3b452bf12152b16f4361f665f5cbce63a6f2680effd69ef9dcda94114440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10317dda987ab35c708fe928fd6daff3da8a18784789c581cb861079dca3d05584c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1kBHI1GWmlV45UGspyt2QMWDuZX9YmB/8+4/PzE5qv0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d64047\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 47bf 53a8 | 146 13d6 (0) 11d4 (0) 103b (0) 1672 (0)\n001 4 b626 b5b2 915d 88fe | 47 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n002 7 f629 f2d5 e5d7 e5ad | 37 fbc8 (0) fbf5 (0) f925 (0) fe31 (0)\n003 8 c9f5 ca04 caf6 c26f | 15 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n004 4 df1e d863 db6a da67 | 6 df1e (0) d887 (0) d863 (0) db6a (0)\n============ DEPTH: 5 ==========================================\n005 3 d299 d3b0 d1d7 | 3 d1d7 (0) d3b0 (0) d299 (0)\n006 0 | 0\n007 1 d7ac | 1 d7ac (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","private_key":"7dda4f1f1b00b27dcba963ca38a79091c69eacbc993590b9774b515e9138ddca","name":"node_d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","services":["streamer"],"enable_msg_events":true,"port":39283},"up":true}},{"node":{"info":{"id":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","name":"node_c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","enode":"enode://0c6d8311b47b26830eeecd5200414fb26fc1147f01b938dcc610c2407af63cf617079655416b03336b0695f7ed5d42efc11803d5dbee44fd5d05c487921f1548@127.0.0.1:0","enr":"0xf88fb840154c57974260b37e441e6874dff8009220b1b7cb71ed9271d0543f018a32274012616ddf46d4aec53d939099c377e0f189c1c9259858e7ec80a7c1e23fb1c6520183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020c6d8311b47b26830eeecd5200414fb26fc1147f01b938dcc610c2407af63cf6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xJyv8Thi3AifH5uBgNbvpFVkg3VmJxknIQLE+AKHmdY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c49caf\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 7a60 6e05 6fe9 53a8 | 146 13d6 (0) 11d4 (0) 103b (0) 165f (0)\n001 5 915d 88fe b65e b626 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 8 f2d5 f629 f7fa e5d7 | 37 e027 (0) e775 (0) e7fa (0) e514 (0)\n003 5 df1e da67 d863 d7ac | 11 df1e (0) d887 (0) d863 (0) db6a (0)\n004 2 ca04 caf6 | 6 cc20 (0) c898 (0) c832 (0) c9f5 (0)\n005 2 c1f9 c26f | 2 c1f9 (0) c26f (0)\n006 2 c6cf c786 | 3 c620 (0) c6cf (0) c786 (0)\n007 1 c59e | 1 c59e (0)\n============ DEPTH: 8 ==========================================\n008 2 c441 c43f | 2 c43f (0) c441 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","private_key":"751d508bcd33604fcc32799146ee07845fc1159580d23d46d4c8f86939cfd368","name":"node_c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","services":["streamer"],"enable_msg_events":true,"port":35349},"up":true}},{"node":{"info":{"id":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","name":"node_caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","enode":"enode://032b6cb479ba63501feaba6ea9a5a1c0a5952e228ce6223a71ce74de13ee98d0b1f5167229e9609313ed643e1dbf3ff6124ec3c1158ea76885378b1867f90d54@127.0.0.1:0","enr":"0xf88fb8405c6b6d2ebf985d21c8d0ac47d9fde8e7bb43b8b2dcc9731ed7adea09b973a34f1407c6d0801c18739521dc7e60fd663a0f8888a1dfd86e3d8284aab6b811246e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102032b6cb479ba63501feaba6ea9a5a1c0a5952e228ce6223a71ce74de13ee98d0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yvao43/UHB5q13qFdc2QNUuxaTiTlSMBycrrR3nDONM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: caf6a8\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 3780 6e05 53a8 4447 | 146 13d6 (0) 103b (0) 11d4 (0) 165f (0)\n001 5 915d 88fe b65e b626 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 9 e8ef ec52 e5ad e5d7 | 37 e027 (0) e775 (0) e7fa (0) e514 (0)\n003 4 d863 db6a d7ac d640 | 11 d887 (0) d863 (0) db6a (0) daec (0)\n004 7 c26f c6cf c786 c59e | 9 c1f9 (0) c26f (0) c620 (0) c6cf (0)\n005 1 cc20 | 1 cc20 (0)\n============ DEPTH: 6 ==========================================\n006 3 c9f5 c898 c832 | 3 c9f5 (0) c898 (0) c832 (0)\n007 0 | 0\n008 1 ca04 | 1 ca04 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","private_key":"7404cb8ddf7d531f80b522df15471c04183be2225349a44f9f07d118e9b508be","name":"node_caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","services":["streamer"],"enable_msg_events":true,"port":37023},"up":true}},{"node":{"info":{"id":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","name":"node_b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","enode":"enode://6ba4f9939fe79c2fa62906da87f6145579ce26244c232ef3a0ee23ceb8298c98cefef00b37faae81fc5535255f16604e5be09f2a544cb2dd1007f489ca73d910@127.0.0.1:0","enr":"0xf88fb840a537a74b55567b80ec626e0a4a8e8e4515acc8a9fe9b893068e006a292c9609609a11873cee2c6bff37d1b5e2b0406d5b61c997e3a28f76fa0a3f561d6d293810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026ba4f9939fe79c2fa62906da87f6145579ce26244c232ef3a0ee23ceb8298c98","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tbJFMtKBDjEeELHWBrr2AH+RJLiKF4sycTzx7drgib4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b5b245\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 53a8 4ac7 4447 47bf | 146 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n001 9 f2d5 e5ad e8ef d7ac | 63 e027 (0) e775 (0) e7fa (0) e514 (0)\n002 6 959f 96fc 976e 915d | 20 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n003 4 ac4d ad98 a6fb a653 | 10 ae2b (0) aeb4 (0) af02 (0) ad98 (0)\n004 3 ba88 badd baf2 | 9 bcc6 (0) b911 (0) b95d (0) b820 (0)\n005 3 b02b b2a5 b2b5 | 3 b02b (0) b2a5 (0) b2b5 (0)\n============ DEPTH: 6 ==========================================\n006 3 b65e b626 b7ca | 3 b7ca (0) b65e (0) b626 (0)\n007 0 | 0\n008 1 b502 | 1 b502 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","private_key":"bb9cccb7fbaaf1b02e691345fdc13fbfb49ed17129b679b20e4cd008ed173b26","name":"node_b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","services":["streamer"],"enable_msg_events":true,"port":35555},"up":true}},{"node":{"info":{"id":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","name":"node_88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","enode":"enode://d002db12f24e09a012d47d716f63576d836cb4e6af9bbc4c563fffdeb4fb138675904bd4ee8ae0325a2be23e1017032cbda9124ba121b6df6bf3f129d4101cf4@127.0.0.1:0","enr":"0xf88fb840595a1f1435cf159c616f21eb11caab1ff821b51aa99b5f08bccb592945e7e073140d4625a0d25290d1a867fe36afe9b7b9740c374a72727f3375d7c9b75013190183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d002db12f24e09a012d47d716f63576d836cb4e6af9bbc4c563fffdeb4fb1386","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iP77dQYQXA4mm69SlVoBsZ9VUEsTEzusC+q0HJ9uaUI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 88fefb\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6e05 512e 53a8 4447 | 146 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n001 9 f7fa f2d5 e5ad e8ef | 63 d887 (0) d863 (0) db6a (0) daec (0)\n002 6 a653 baf2 b65e b626 | 27 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n003 5 9d0f 959f 96fc 976e | 10 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n004 5 849b 8505 8025 82dd | 5 8505 (0) 849b (0) 8025 (0) 82dd (0)\n005 1 8f21 | 1 8f21 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 898d | 1 898d (0)\n008 1 886a | 1 886a (0)\n009 1 88a1 | 1 88a1 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","private_key":"60486eb333333a142330c9bf765d7fb5ea28918c3185e0013df6b65a50992256","name":"node_88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","services":["streamer"],"enable_msg_events":true,"port":36621},"up":true}},{"node":{"info":{"id":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","name":"node_37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","enode":"enode://ebdc2cb76ffdb28b7bc171d5210f6b3747caf9ef2a30848b043adff7d009ffbbd7e98427ef4035a46cbd69fd4f3f584d1d8f3bb96e36d865e626e4d9c82e4a91@127.0.0.1:0","enr":"0xf88fb8407932c8f5686fbbe250ac8a2d185c457889e6e4a89dce92326c0617685aa6f95212bd56382e464dac57d4be61991248c9485e070205d6e4065e47d40a1ad024860183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ebdc2cb76ffdb28b7bc171d5210f6b3747caf9ef2a30848b043adff7d009ffbb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"N4AejX1GFD94kk7WYJn2WKlNN+39L1jQKsuFrdA+GJQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 37801e\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 f2d5 caf6 c441 c49c | 110 db6a (0) daec (0) da67 (0) d887 (0)\n001 6 53a8 4ac7 49cd 47bf | 70 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n002 5 1b83 02d8 0438 0cf5 | 44 103b (0) 11d4 (0) 13d6 (0) 1672 (0)\n003 6 256e 20ae 217f 2a0a | 15 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n004 3 3b88 3efc 3f94 | 7 39d1 (0) 3b78 (0) 3b88 (0) 3e8e (0)\n005 4 3373 314a 3089 30be | 6 3237 (0) 33b5 (0) 3373 (0) 314a (0)\n006 1 35e6 | 1 35e6 (0)\n============ DEPTH: 7 ==========================================\n007 1 3630 | 1 3630 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 378e | 1 378e (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","private_key":"369eb71eeb7b71c096c321177228fa31e9c9a28aa40a86cbfa645ba35b159f4f","name":"node_37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","services":["streamer"],"enable_msg_events":true,"port":46281},"up":true}},{"node":{"info":{"id":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","name":"node_915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","enode":"enode://22e79b248e289cce0fc5fa7dca0ce3cfdb2050b0151cc1435e3c0023cd1a07de7719d47f0dd8db4755266a2ec1bac0074f9753c8999c21cc1bcb5bf2f3abcd24@127.0.0.1:0","enr":"0xf88fb84078cc030ac8045a0e60c0ae70e0eb9bb3fd12770df422402905e64920ed3a568e19abd70ff4ea28b81fd7266a1eda7bb7aa25062222117467acd36f13d37fd78a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10222e79b248e289cce0fc5fa7dca0ce3cfdb2050b0151cc1435e3c0023cd1a07de","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"kV16BRC60ZJm7vjwDKDLLvw0AlN3VwZJX8qLkWC1Esw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 915d7a\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 512e 4558 4447 6e05 | 146 5cd2 (0) 5db0 (0) 5efb (0) 5f00 (0)\n001 10 f2d5 f7fa f629 ec52 | 63 d887 (0) d863 (0) db6a (0) daec (0)\n002 4 a653 baf2 b626 b5b2 | 27 af02 (0) aeb4 (0) ae2b (0) ad98 (0)\n003 4 82f9 898d 886a 88fe | 10 8505 (0) 849b (0) 8025 (0) 82dd (0)\n004 2 9fa0 9d0f | 4 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n005 3 96fc 976e 959f | 3 96fc (0) 976e (0) 959f (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 9076 90a8 | 2 9076 (0) 90a8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","private_key":"46f8ff7c336416d502bd2c3ba10235eec55193182d1b1c0e74fc4763e2f12cb2","name":"node_915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","services":["streamer"],"enable_msg_events":true,"port":37115},"up":true}},{"node":{"info":{"id":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","name":"node_6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","enode":"enode://6cb33a608378cb32052368b80030aab00ffa4d25aeab3b017a18abcc39e2a8ca270fc88bfbe418dd31d426abd53107fdd99fcc230eb92632b5444644f101ac7c@127.0.0.1:0","enr":"0xf88fb8408e844dc2f0db4b3e2208b2adec83b24a99e19229c8902879c8c81877e506b4e32d3209a9af0119e2aa59342192dba0e72b3c74064f9f23a08ae09aa91199fb080183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026cb33a608378cb32052368b80030aab00ffa4d25aeab3b017a18abcc39e2a8ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bgUXnckKj2ZU0Mmj8GFzNx3PsYuFL9138191448nMSU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6e0517\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 c49c c441 caf6 f2d5 | 110 db6a (0) daec (0) da67 (0) d887 (0)\n001 5 0743 0438 217f 2ccf | 76 103b (0) 11d4 (0) 13d6 (0) 1672 (0)\n002 5 53a8 5f00 5b63 47bf | 38 5823 (0) 58ed (0) 5b63 (0) 5cd2 (0)\n003 2 7b90 7a60 | 12 775e (0) 77d2 (0) 7125 (0) 738c (0)\n004 4 67aa 6103 60d7 6337 | 9 66e7 (0) 67dc (0) 67aa (0) 6103 (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n006 2 6c73 6c4d | 2 6c73 (0) 6c4d (0)\n007 3 6fe9 6f2d 6f5f | 3 6f2d (0) 6f5f (0) 6fe9 (0)\n============ DEPTH: 8 ==========================================\n008 2 6ea5 6ecb | 2 6ea5 (0) 6ecb (0)\n009 1 6e68 | 1 6e68 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","private_key":"1b7026a2b010aecd3db0637e03b2e0cf0bddfa9b0ad9d677056e091a03970305","name":"node_6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","services":["streamer"],"enable_msg_events":true,"port":35543},"up":true}},{"node":{"info":{"id":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","name":"node_f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","enode":"enode://0bed55a524855cf4b0ffa7a813b7cbbe61499512bd4579832af6444cce55217dc68f57f430feed9ef8214a49dbe0779600980fe1fa51afe837f8a9185d799ee6@127.0.0.1:0","enr":"0xf88fb84037c16835f858e5ccd867b9239f718531d6980f0b8d13d0eb0407dee672e37425392b42e2a352333d146fbebe5306020187121998d97f4caa33944a2667c4010c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020bed55a524855cf4b0ffa7a813b7cbbe61499512bd4579832af6444cce55217d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8tVTPu1LDBhJUthZ1n5Eq+WnWl3mERyMEGuPSy2Mz8Q=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f2d553\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 3780 217f 2ccf 4447 | 146 0b72 (0) 0af9 (0) 0a00 (0) 0fc5 (0)\n001 8 88fe 915d 959f a653 | 47 af02 (0) aeb4 (0) ae2b (0) ad98 (0)\n002 7 d863 d7ac d640 c49c | 26 d1d7 (0) d3b0 (0) d299 (0) d7ac (0)\n003 6 ef07 ef1b e8ef e547 | 18 e027 (0) e775 (0) e7fa (0) e514 (0)\n004 3 fe31 fe21 ff36 | 6 f925 (0) fbc8 (0) fbf5 (0) fe21 (0)\n005 7 f4e0 f5dc f528 f629 | 10 f456 (0) f45f (0) f4e0 (0) f5b2 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f31c | 1 f31c (0)\n008 1 f27f | 1 f27f (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","private_key":"6e3b2aeb1f3f715a86807af2cd2090519998b92df4dfd138d51b3cce2526dbb0","name":"node_f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","services":["streamer"],"enable_msg_events":true,"port":44807},"up":true}},{"node":{"info":{"id":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","name":"node_444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","enode":"enode://9ef94c855735b705843c447b2998afbb14eb30166ca1c8dbc09b763fa8e04e67376ebc830d745404753f08b76f454e3948b4546c340209c1d2e4739e170a8bec@127.0.0.1:0","enr":"0xf88fb84033c73ee216ccaa7cd66408fa60642ea37fcf44ff76073b098a962c13f1a4df8a4ce4188d4a34a26de1df6c40daa70adfb66850b5cf39eeda6218fabb91bf4ea70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029ef94c855735b705843c447b2998afbb14eb30166ca1c8dbc09b763fa8e04e67","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"REcioVsBoNjmeUeY0jn+Yh1ZvfwIgjq0fL2Lms69I7Q=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 444722\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 915d 88fe b5b2 b65e | 110 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n001 9 1a2a 0438 0cf5 3780 | 76 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n002 4 6337 6fe9 6ecb 6e05 | 32 775e (0) 77d2 (0) 7125 (0) 738c (0)\n003 5 5db0 5f00 5b63 512e | 15 5823 (0) 58ed (0) 5b63 (0) 5cd2 (0)\n004 3 49cd 4ac7 4a8b | 11 4e5a (0) 4d59 (0) 4d6b (0) 4d10 (0)\n005 2 4109 41d9 | 2 41d9 (0) 4109 (0)\n006 6 4646 4636 461c 46fe | 6 4646 (0) 4636 (0) 461c (0) 46fe (0)\n============ DEPTH: 7 ==========================================\n007 2 4559 4558 | 2 4559 (0) 4558 (0)\n008 1 44a1 | 1 44a1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","private_key":"1a57d82b5818ffcf64fda640f5ed8c9fc1578d29faabdd9297f9bafcedf16afc","name":"node_444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","services":["streamer"],"enable_msg_events":true,"port":36309},"up":true}},{"node":{"info":{"id":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","name":"node_c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","enode":"enode://9cef4cd1c3b7a978ced64f36c0c3a9098aba2c07c45787c884a7946e6d21976321f7c05ebe7abfd92c63f1ca54c46acddb27b2c6bfd01759cb09c78a4ec0544f@127.0.0.1:0","enr":"0xf88fb8400693860ca7cd4d67ebdb615eaaf42fa1ae8f5ff87a593cd0ad7e2a34020e6e2748358c72363e272974698017a897ccbb600b0be698450de6df9d6870ed976fa10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039cef4cd1c3b7a978ced64f36c0c3a9098aba2c07c45787c884a7946e6d219763","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xEHSel9KuqjjsPBApu+Fu4yXADHWpXUDpnTjaz1pFdk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c441d2\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2ccf 217f 3780 6e05 | 146 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n001 5 898d 959f 915d b65e | 47 8505 (0) 849b (0) 8025 (0) 82dd (0)\n002 5 f2d5 f629 f7fa ec52 | 37 ee5e (0) efea (0) ef1b (0) ef07 (0)\n003 4 d863 df1e d640 d7ac | 11 d3b0 (0) d299 (0) d1d7 (0) d7ac (0)\n004 4 ca04 caf6 c9f5 c832 | 6 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n005 2 c1f9 c26f | 2 c1f9 (0) c26f (0)\n006 3 c620 c6cf c786 | 3 c620 (0) c6cf (0) c786 (0)\n007 1 c59e | 1 c59e (0)\n============ DEPTH: 8 ==========================================\n008 1 c49c | 1 c49c (0)\n009 1 c43f | 1 c43f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","private_key":"a67d3fd0aeb245cdd802262166fd8226b4f6034f416053f7ef9956a99c473419","name":"node_c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","services":["streamer"],"enable_msg_events":true,"port":37581},"up":true}},{"node":{"info":{"id":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","name":"node_baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","enode":"enode://1c3d285d17974092dcbdb97e35e1885bbf94addb9dba5954e71c3ffc7348c4c58fdbf99598683dd6298c32ebaa5e7220e01715f4f5d2907af981f3b3167bdcce@127.0.0.1:0","enr":"0xf88fb840753f3903e7fa19460a5e7e20abc7555ba49cf8d52c7bbccd74918fc7f82461cb1e68b9970b23609530b70fd3059329b633f8639230949e4fe2cbdcd6af87edc40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021c3d285d17974092dcbdb97e35e1885bbf94addb9dba5954e71c3ffc7348c4c5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uvIZ6SKZIbdz0a1+t+tSFs+mDM7Ko8XEh+O3HLYAuhI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: baf219\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6e05 4447 3780 217f | 146 7125 (0) 738c (0) 7290 (0) 77d2 (0)\n001 6 f2d5 e5d7 e8ef ec52 | 63 eb98 (0) e854 (0) e883 (0) e8ef (0)\n002 3 88fe 915d 959f | 20 8505 (0) 849b (0) 8025 (0) 82dd (0)\n003 3 ad98 ac4d a653 | 10 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n004 5 b2b5 b502 b5b2 b626 | 8 b02b (0) b2a5 (0) b2b5 (0) b502 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 3 b897 b95d b911 | 4 b820 (0) b897 (0) b95d (0) b911 (0)\n007 1 bb90 | 1 bb90 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 ba88 | 1 ba88 (0)\n010 1 badd | 1 badd (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","private_key":"a5e1aa7f7374964afa85de3c3c1b2fa8a1caf2a27cf7be2844136deaf4f0ffa7","name":"node_baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","services":["streamer"],"enable_msg_events":true,"port":40635},"up":true}},{"node":{"info":{"id":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","name":"node_2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","enode":"enode://f81b4d7e1b4722dad58825039b3c38ddbebefc1a236c2080a520401e9483f6584433e2692ec15fcdc707d03bb9a6bf0ff7c912be023789af49c0a309da7631d4@127.0.0.1:0","enr":"0xf88fb8408bebaa03804d729c21adf92503814a0abf62421bf5f9a3830e95f47bcbf6fdb235a690cfd4e81ca66a5934af140d762788ac0f9c110afd2a54400eb8429453320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f81b4d7e1b4722dad58825039b3c38ddbebefc1a236c2080a520401e9483f658","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LM+1sfOSPTX++Ig4xQi5i1UWxdQJZDiB0jBK5J5Q7tM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2ccfb5\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c441 ec52 f7fa f2d5 | 110 fbc8 (0) fbf5 (0) f925 (0) fe31 (0)\n001 4 6337 6e05 49cd 4447 | 70 775e (0) 77d2 (0) 7125 (0) 738c (0)\n002 7 1b83 1c47 0438 02d8 | 44 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n003 3 30be 3089 3780 | 17 3e8e (0) 3efc (0) 3ec5 (0) 3f94 (0)\n004 5 256e 24b8 20ae 2101 | 6 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n005 4 2995 2a0a 2abb 2a97 | 4 2995 (0) 2abb (0) 2a97 (0) 2a0a (0)\n006 1 2f32 | 1 2f32 (0)\n007 1 2d36 | 1 2d36 (0)\n============ DEPTH: 8 ==========================================\n008 2 2c79 2c38 | 2 2c79 (0) 2c38 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","private_key":"056d524a765c48a6c1ab41c42f6cf836183cf10b73481f79cc49b79a3f6b5769","name":"node_2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","services":["streamer"],"enable_msg_events":true,"port":43231},"up":true}},{"node":{"info":{"id":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","name":"node_217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","enode":"enode://37f0965106672daa2a8e343623357ad538b5115d0f80fe74ef78f1d21863978762f82a776b97a1ea718ac52944af0a9e3c616d9f0c89f719a5aa940dd5b27a05@127.0.0.1:0","enr":"0xf88fb840f5488dc6acca9725c22fa1877fdf275cc7fc44feb78fb19f3cc4d712b78fa4820df8834c815cd7f6aeda861ba2236c7d6b425861780f726bd4f1277b707c2f390183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10337f0965106672daa2a8e343623357ad538b5115d0f80fe74ef78f1d218639787","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IX+ZUq8etY1cpax752NxbP4sCk883U6+S131Y/kZ4tI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 217f99\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 c441 f7fa f2d5 ec52 | 110 d1d7 (0) d299 (0) d3b0 (0) d7ac (0)\n001 4 6337 6e05 49cd 4447 | 70 775e (0) 77d2 (0) 7125 (0) 738c (0)\n002 3 0cf5 03cc 0438 | 44 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n003 4 3089 30be 3630 3780 | 17 39d1 (0) 3b88 (0) 3b78 (0) 3e8e (0)\n004 6 2995 2a97 2a0a 2d36 | 9 2995 (0) 2abb (0) 2a97 (0) 2a0a (0)\n005 2 256e 24b8 | 2 256e (0) 24b8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 20ae | 1 20ae (0)\n008 1 21a0 | 1 21a0 (0)\n009 1 2101 | 1 2101 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","private_key":"2713b4b4549ba404d31cc2bc1f2bef523f8e70e0d00cca2667bb393532c2ec78","name":"node_217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","services":["streamer"],"enable_msg_events":true,"port":36795},"up":true}},{"node":{"info":{"id":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","name":"node_0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","enode":"enode://2a609a2f7bee18e9ace30fb43ae2c4440d114f3c4888ec0a34d24ebd1fa6156d633c4f2aa0f3eaed2db3abdc5fd1f634fb8a511fce8c719cde7248d202de66df@127.0.0.1:0","enr":"0xf88fb8408d5e6847e83be24d36a5259f7935a065f251552352ee158a5edfa798e6e86fbe00cbbc7bc7f90319931c1b7398f3e81894b504f3abfde6bcdec7daa4a90062350183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032a609a2f7bee18e9ace30fb43ae2c4440d114f3c4888ec0a34d24ebd1fa6156d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BDj1ZwRdRVag56aXAo1ons/QriD56FwJtI2fH9DuR2U=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0438f5\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f7fa e5d7 b65e 959f | 110 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n001 4 53a8 4447 6e05 6337 | 70 775e (0) 77d2 (0) 7125 (0) 738c (0)\n002 4 3780 3089 2ccf 217f | 32 3b88 (0) 3b78 (0) 39d1 (0) 3f94 (0)\n003 6 1704 1400 1b83 1a2a | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 5 0b72 0de3 0d8a 0c64 | 11 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n005 5 0067 00c6 03cc 0328 | 5 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n006 3 0661 07a8 0743 | 3 0661 (0) 07a8 (0) 0743 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 2 045b 0451 | 2 045b (0) 0451 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","private_key":"7550104c3b78bd70d311385917b9e119ce140cd3584dfe07f18913b06e289257","name":"node_0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","services":["streamer"],"enable_msg_events":true,"port":39107},"up":true}},{"node":{"info":{"id":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","name":"node_959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","enode":"enode://94c05c36e8bda926576025fad9d891d1ae55f406eadb1b2a7040191907ac20a4618ab4af002e997762e3f4a747f417b9c66d3341b0819cb39514b2cfcbf633f8@127.0.0.1:0","enr":"0xf88fb840de6c271ba449dd87a205230febdcc13445277635cb2fb770e1bc7d4df1a6d488210fe6caff9e998f66112dba40d39585301fd3e88f2e0493f3f02c71a684f6e10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10294c05c36e8bda926576025fad9d891d1ae55f406eadb1b2a7040191907ac20a4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lZ/aCGbTwY6TmemEhdYnBEB51vhrB17a6pMVQC9dk5U=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 959fda\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 4558 512e 5f00 6337 | 146 574f (0) 524d (0) 534b (0) 5308 (0)\n001 9 c786 c59e c441 f7fa | 63 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n002 6 ac4d a653 baf2 b5b2 | 27 aeb4 (0) ae2b (0) af02 (0) ad98 (0)\n003 5 8025 82f9 88fe 886a | 10 8505 (0) 849b (0) 8025 (0) 82dd (0)\n004 3 9890 9fa0 9d0f | 4 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n005 3 90a8 9076 915d | 3 9076 (0) 90a8 (0) 915d (0)\n============ DEPTH: 6 ==========================================\n006 2 96fc 976e | 2 96fc (0) 976e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","private_key":"a67fcf115dfe059791011d5d3825dec2155cabd72c208e838b3fbb2f28ac41a9","name":"node_959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","services":["streamer"],"enable_msg_events":true,"port":36529},"up":true}},{"node":{"info":{"id":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","name":"node_b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","enode":"enode://26664c55fa01411c68d45ee7e420631080f79cb0864dab6839e3fbd228061380f8d6ec4ed7e0d1fccfb3a6db94d25e49381fbd05f82d256e83694b44e75d326b@127.0.0.1:0","enr":"0xf88fb840b6133c0426dafd1efb3e89f6bc48cc63eca4c7bdf38f294f43a2805d2298640c241968809a87cf5d2889912bce5dbad860521fe9d6baf1a7b79d82530f26d4a00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10326664c55fa01411c68d45ee7e420631080f79cb0864dab6839e3fbd228061380","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tl7iVJU2qAbO70p8zJVEVnyv5iBAgJKfyEffCjeBzMk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b65ee2\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6e05 5f00 4447 217f | 146 574f (0) 51db (0) 512e (0) 524d (0)\n001 9 df1e c441 c49c caf6 | 63 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n002 5 898d 886a 88fe 9d0f | 20 8505 (0) 849b (0) 8025 (0) 82dd (0)\n003 2 ac4d a653 | 10 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n004 3 ba88 badd baf2 | 9 bcc6 (0) b897 (0) b820 (0) b95d (0)\n005 2 b02b b2b5 | 3 b2a5 (0) b2b5 (0) b02b (0)\n006 2 b5b2 b502 | 2 b502 (0) b5b2 (0)\n============ DEPTH: 7 ==========================================\n007 1 b7ca | 1 b7ca (0)\n008 0 | 0\n009 1 b626 | 1 b626 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","private_key":"318a101c039a46bd0175afcb703828e82134ecef76cdcb18287938d57831ee61","name":"node_b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","services":["streamer"],"enable_msg_events":true,"port":44539},"up":true}},{"node":{"info":{"id":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","name":"node_0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","enode":"enode://450a836838f2759b33e799ec371253efe81e90e74db6f41b868bacb6429d0683dcf1fa1a8b4b761114fbc8826a796bcfc02f6a1798640d4ca58d845f064cadfd@127.0.0.1:0","enr":"0xf88fb840a59d9bcd8c093e82d30493da5fae7fd2e389dcd1428aeb3e828ddecadc97eb861f318f3f6d9652abb3e775bd5fa6fd84f4eb2b2d5c72ddb8ed22919c30f07dab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103450a836838f2759b33e799ec371253efe81e90e74db6f41b868bacb6429d0683","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DPWWr5HrmwQf5tvmsojFcwQThQMhtasXbIFEfjTvecU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0cf596\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e5d7 b65e | 110 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n001 3 4447 5f00 6337 | 70 4e5a (0) 4c9e (0) 4d59 (0) 4d6b (0)\n002 5 3780 3089 20ae 217f | 32 39d1 (0) 3b88 (0) 3b78 (0) 3e8e (0)\n003 6 1c47 18f6 1a2a 1b83 | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 6 0067 02d8 03cc 0743 | 11 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n005 3 0b72 0af9 0a00 | 3 0b72 (0) 0af9 (0) 0a00 (0)\n006 3 0fc5 0ff2 0e5e | 3 0fc5 (0) 0ff2 (0) 0e5e (0)\n007 2 0d8a 0de3 | 2 0de3 (0) 0d8a (0)\n============ DEPTH: 8 ==========================================\n008 2 0c28 0c64 | 2 0c28 (0) 0c64 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","private_key":"aa043f31ce0392fc2403ba8df2e8a31397d5e5f23c22dabce1e4f94a3ae1ae3a","name":"node_0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","services":["streamer"],"enable_msg_events":true,"port":33613},"up":true}},{"node":{"info":{"id":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","name":"node_e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","enode":"enode://62058bc379f81fa123e4296db03c67338ae62a539937d7b70a28a703624cdd451e739398d8dc6ed3f1b8c73cbb334b5cb7784d308b033ec5a9e61bedd06b050f@127.0.0.1:0","enr":"0xf88fb840e8da211f089ba6f711e92e1ad129af4bb030723cd33a3e2ad4e50fe4b81095403bbe8888a9e5b4ce5c0100c564b97767d80733b74ee5bafd5fc702364ecab3a10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10362058bc379f81fa123e4296db03c67338ae62a539937d7b70a28a703624cdd45","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5deU1kADclp0ZC8JfA7nZwbXhBm28+qBnUQLwK0Wbqw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e5d794\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 5f00 6337 3089 217f | 146 4e5a (0) 4c9e (0) 4d10 (0) 4d6b (0)\n001 6 b65e baf2 a653 9d0f | 47 8505 (0) 849b (0) 82dd (0) 82f9 (0)\n002 8 d640 d7ac d863 df1e | 26 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n003 4 ff36 f2d5 f629 f7fa | 19 fbc8 (0) fbf5 (0) f925 (0) fe21 (0)\n004 4 e8ef ef1b ef07 ec52 | 10 eb98 (0) e854 (0) e883 (0) e8ef (0)\n005 1 e027 | 1 e027 (0)\n006 2 e775 e7fa | 2 e775 (0) e7fa (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 3 e514 e54b e547 | 3 e514 (0) e54b (0) e547 (0)\n009 1 e5ad | 1 e5ad (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","private_key":"d57174d811911d6109444b6859f566feda29464787037865b1e86f3d852d82c3","name":"node_e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","services":["streamer"],"enable_msg_events":true,"port":33845},"up":true}},{"node":{"info":{"id":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","name":"node_ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","enode":"enode://78ada9ae0e9eeed303dfc34f560a3a254035857113ab0dd666ec66af33f65a057e050f3c0689eb1960f76f1cbd66ce97d03969c529ac8e264419b8c97aeb5b33@127.0.0.1:0","enr":"0xf88fb84019543c86b688b2e1ac9bb456d94ff1626ea0e8f1afe71fbd92ac278bc30265d850ecec065550473c16a03073e2eb1955d5307248437930167b599a69c298e7610183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10378ada9ae0e9eeed303dfc34f560a3a254035857113ab0dd666ec66af33f65a05","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7FInBgQAdnPRv9oe29i/qUWiEUHv2F5CtoSp8w+M3a4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ec5227\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 217f 2ccf 0743 1c47 | 146 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n001 6 9d0f 959f 915d b65e | 47 8505 (0) 849b (0) 8025 (0) 82dd (0)\n002 10 c786 c441 c49c c9f5 | 26 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n003 4 ff36 f629 f7ba f7fa | 19 fbc8 (0) fbf5 (0) f925 (0) fe21 (0)\n004 3 e514 e5ad e5d7 | 8 e027 (0) e775 (0) e7fa (0) e54b (0)\n005 2 e854 e8ef | 4 eb98 (0) e854 (0) e883 (0) e8ef (0)\n============ DEPTH: 6 ==========================================\n006 4 ee5e efea ef1b ef07 | 4 ee5e (0) efea (0) ef1b (0) ef07 (0)\n007 1 ed2d | 1 ed2d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","private_key":"2eef17b1cd655ba656219906144f6dd5423e5c13fb8cfa3888a3fd60cc378cbd","name":"node_ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","services":["streamer"],"enable_msg_events":true,"port":43813},"up":true}},{"node":{"info":{"id":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","name":"node_63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","enode":"enode://e8a75bd7d2c0fa2c24d5e2505d6498a8158fa26cb0d97c3b4b68beb3abc827f44a87c3ecf11c56c0378c0572dd72d089765fe6598de6d897bb96cf033f27e730@127.0.0.1:0","enr":"0xf88fb8402480841002b2349bc7b775205391159f0d46294fd74c074f0e498aa92ba083f758bfa4f1b5b909441c0ac5304e35b6fb23b60d61ac7ca6a63cc099dae63215e40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e8a75bd7d2c0fa2c24d5e2505d6498a8158fa26cb0d97c3b4b68beb3abc827f4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YzcOKIqy5LhAPGZ46cRK5cdJa16tYUMG/OuFmG7SnRg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 63370e\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 9d0f 959f a653 f629 | 110 8025 (0) 82dd (0) 82f9 (0) 8505 (0)\n001 12 2a0a 2ccf 20ae 2101 | 76 256e (0) 24b8 (0) 21a0 (0) 2101 (0)\n002 5 4447 5308 5b63 5f00 | 38 4e5a (0) 4c9e (0) 4d6b (0) 4d59 (0)\n003 5 7290 738c 7dd3 7b90 | 12 775e (0) 77d2 (0) 7125 (0) 7290 (0)\n004 4 6f5f 6fe9 6ecb 6e05 | 11 6967 (0) 6831 (0) 6c73 (0) 6c4d (0)\n005 3 66e7 67aa 67dc | 3 66e7 (0) 67dc (0) 67aa (0)\n006 3 60d7 605a 6103 | 3 60d7 (0) 605a (0) 6103 (0)\n============ DEPTH: 7 ==========================================\n007 2 628e 6251 | 2 628e (0) 6251 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","private_key":"abec58c20cbfc6963e54b76ae6003547d7125c820d4c878b12e7e7ffcee87cae","name":"node_63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","services":["streamer"],"enable_msg_events":true,"port":35121},"up":true}},{"node":{"info":{"id":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","name":"node_f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","enode":"enode://760e043d37f149548183d41cdc870ab25e79461d0fb8ffdea5449bc04a3a83556d528ac0d81aba167a040d28e4ed2698c1022c1c2d0363d2c5f06f81563a721d@127.0.0.1:0","enr":"0xf88fb840a766a95d16d134be07e5941a44194fdc8e04d99ff58c3a35bd21692a7e8659921b69df71c2d402ac905d91f8f8c1bfe4b13117faf6aa42d79df4319efb5ea6c00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103760e043d37f149548183d41cdc870ab25e79461d0fb8ffdea5449bc04a3a8355","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9/ophuyfhIIrEaawC9A6HdJvKg+rkLGzCPCMrq1Dz+E=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f7fa29\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 5f00 6337 2ccf 217f | 146 4e5a (0) 4c9e (0) 4d59 (0) 4d6b (0)\n001 8 9d0f 959f 915d 898d | 47 8505 (0) 849b (0) 8025 (0) 82dd (0)\n002 8 c832 c9f5 caf6 c49c | 26 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n003 5 e5d7 e8ef ef1b ef07 | 18 e027 (0) e775 (0) e7fa (0) e514 (0)\n004 3 fbf5 fe31 ff36 | 6 fbc8 (0) fbf5 (0) f925 (0) fe21 (0)\n005 2 f31c f2d5 | 3 f31c (0) f27f (0) f2d5 (0)\n006 4 f4e0 f5b2 f5dc f528 | 6 f456 (0) f45f (0) f4e0 (0) f5b2 (0)\n007 1 f629 | 1 f629 (0)\n============ DEPTH: 8 ==========================================\n008 1 f773 | 1 f773 (0)\n009 1 f7ba | 1 f7ba (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","private_key":"5b66c852efc722720d943acdff6e44cf35572b3ebc9e25c2efb6d44a44ec4f34","name":"node_f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","services":["streamer"],"enable_msg_events":true,"port":37377},"up":true}},{"node":{"info":{"id":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","name":"node_03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","enode":"enode://f5754931b229bb88a9054a16e5a825c93b24fa190fd5cb1346f9c8d3ef63f4df173e4ca8cdf98ff3be0fc5d3ab44524bd95a9089a8d071964cc628219d22c11f@127.0.0.1:0","enr":"0xf88fb84071325b9451536f678c1dfebe4f7aa8106a51d55f3bff1e449d2721a6fbededad0602cb742328ce7c26870565fea9a7efa0b78c561848cf9d9bd1a185fca960dc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f5754931b229bb88a9054a16e5a825c93b24fa190fd5cb1346f9c8d3ef63f4df","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"A8zY1SWX0YwLF4q3Nh2EfWOq06+SCig0WXeuFwodr80=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 03ccd8\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 898d 9d0f f7fa | 110 8505 (0) 849b (0) 8025 (0) 82dd (0)\n001 3 6ecb 6337 5f00 | 70 7125 (0) 738c (0) 7290 (0) 775e (0)\n002 5 2a0a 2ccf 217f 20ae | 32 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n003 5 1704 18f6 1a2a 1f67 | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 4 0a00 0e5e 0cf5 0c64 | 11 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n005 4 0661 0743 0438 0451 | 6 045b (0) 0451 (0) 0438 (0) 0661 (0)\n006 2 00c6 0067 | 2 00c6 (0) 0067 (0)\n============ DEPTH: 7 ==========================================\n007 1 02d8 | 1 02d8 (0)\n008 1 0328 | 1 0328 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","private_key":"f9bcfddd59b4cd6907137f85a165d8d1d046ea6f941259d24d6f2665345cf86b","name":"node_03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","services":["streamer"],"enable_msg_events":true,"port":41855},"up":true}},{"node":{"info":{"id":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","name":"node_1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","enode":"enode://63429a53e98ea2c805da1f72629bc2dfa38477f37e946c23a9a556e105170d09ba9fc04a92c9c002f5afacb97323330dd80c7b6facee5c66d70acb13f0a2ef07@127.0.0.1:0","enr":"0xf88fb840c8a077c9b0ef7333f8f167874fe84783be8d6e18a6017fc6cacf229dab3e7a4b1f898958a70aebef08571f0bc40a3de1545c0b4c6bd945f28c5615df92fa47050183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10363429a53e98ea2c805da1f72629bc2dfa38477f37e946c23a9a556e105170d09","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HEetW9iEb3d9r1lYf+zMMI9Nxj9tJ7E4X/gIXHW7Gqw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1c47ad\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ec52 f629 a653 | 110 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n001 2 6337 5f00 | 70 7125 (0) 738c (0) 7290 (0) 775e (0)\n002 4 3089 2ccf 2a0a 20ae | 32 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n003 6 0cf5 0c64 0451 0438 | 22 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n004 2 1400 1704 | 12 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n005 3 18f6 1b83 1a2a | 4 19fa (0) 18f6 (0) 1b83 (0) 1a2a (0)\n006 3 1e2a 1f85 1f67 | 3 1e2a (0) 1f85 (0) 1f67 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 1c9c 1c8a | 2 1c9c (0) 1c8a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","private_key":"ebc5324f8eb3a357f8d1969f069ce39c7c3fb22ccf7525110318b3ac880c1ca3","name":"node_1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","services":["streamer"],"enable_msg_events":true,"port":42947},"up":true}},{"node":{"info":{"id":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","name":"node_5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","enode":"enode://480ba1e732c94f5f601e880599ab5b96e240599a8966fe2ddda4073307a99742a535dff51f6af5bd1b53fce8537be4bc5e2fa76c49449c0415442adba987460a@127.0.0.1:0","enr":"0xf88fb8401875d2a45f120ec3d8f94c4cf3efefff3c45785956e1a09d0446b9ea48b3cb1820585e3f5ab525ca7b0fb517ce83fbebc51c66913a99e3e1a3121c9d2583f0950183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102480ba1e732c94f5f601e880599ab5b96e240599a8966fe2ddda4073307a99742","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XwCzvr7y9UhP8ThimK3WimdDoQYgCuihOifbtScU7o8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5f00b3\npopulation: 45 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 d863 df1e ec52 e5d7 | 110 cc20 (0) ca04 (0) caf6 (0) c9f5 (0)\n001 12 2a0a 2c38 2d36 2101 | 76 2f32 (0) 2d36 (0) 2c79 (0) 2c38 (0)\n002 9 7b90 7a60 77d2 6337 | 32 7125 (0) 738c (0) 7290 (0) 775e (0)\n003 6 4447 47bf 461c 4646 | 23 4e5a (0) 4c9e (0) 4d59 (0) 4d6b (0)\n004 4 53a8 5308 512e 51db | 8 574f (0) 524d (0) 53fe (0) 53a8 (0)\n005 2 5b63 58ed | 3 5b63 (0) 5823 (0) 58ed (0)\n============ DEPTH: 6 ==========================================\n006 2 5cd2 5db0 | 2 5cd2 (0) 5db0 (0)\n007 1 5efb | 1 5efb (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","private_key":"9b3dc4d343d8005de0a128e913e4ed62e5caec6a02eb7c00580bec4be6126b5e","name":"node_5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","services":["streamer"],"enable_msg_events":true,"port":36775},"up":true}},{"node":{"info":{"id":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","name":"node_0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","enode":"enode://19c7cdd72825b48029116b58a6a68b357fcc7dade4a419c159b7a1479b9aaaca9040f86319f2e30d881a255728459f53f62e11907116fb7f0d95b17cf8acd4ce@127.0.0.1:0","enr":"0xf88fb84082a5fb67d177a01d43d741c548086b575590cb32e8f8ca21ea57c96b5d3e3b247a3aa5b69c1cf6eb5ea7e667736efd50f3bf23a658d2738640b8e8f01c8684780183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10219c7cdd72825b48029116b58a6a68b357fcc7dade4a419c159b7a1479b9aaaca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"B0O88qqnfpFvSjZ9YVlHPH2A9GouTL6e80bkI9OdcHI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0743bc\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 fe31 f629 e5d7 ec52 | 110 cc20 (0) ca04 (0) caf6 (0) c9f5 (0)\n001 4 6f5f 6ecb 6e05 5f00 | 70 77d2 (0) 775e (0) 7125 (0) 738c (0)\n002 3 2a0a 20ae 3089 | 32 2f32 (0) 2c79 (0) 2c38 (0) 2ccf (0)\n003 3 1704 1f67 1c47 | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 4 0e5e 0d8a 0c64 0cf5 | 11 0af9 (0) 0a00 (0) 0b72 (0) 0fc5 (0)\n005 3 0067 03cc 02d8 | 5 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n006 2 0451 0438 | 3 045b (0) 0451 (0) 0438 (0)\n============ DEPTH: 7 ==========================================\n007 1 0661 | 1 0661 (0)\n008 1 07a8 | 1 07a8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","private_key":"47ac9bcf8a80092ec709388ead63309357c024e48a9d084b0242dfc58046fd79","name":"node_0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","services":["streamer"],"enable_msg_events":true,"port":44873},"up":true}},{"node":{"info":{"id":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","name":"node_a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","enode":"enode://613e2fd1046ee6d486077d07c0150b2097f1f5ed197194b6be66369087dcc6e8c069a8c8a08f5688f7510670ba92b71f21713a7771e353b6f2f32f07ff2050d6@127.0.0.1:0","enr":"0xf88fb84069a4ec3dacd9e94a16a63e64b329fd81c61bd7485b97b81e2469e3c26c6844cd09ddfcf98ba00def4ea96b1a61fab34b651e8087daa8b49677211a8bf3b616e00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102613e2fd1046ee6d486077d07c0150b2097f1f5ed197194b6be66369087dcc6e8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"plMwJzDfPVj3lpBqk5M6qBSU8liNlIWrdnbsOwzLtCY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a65330\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 6337 5f00 2a0a 20ae | 146 775e (0) 77d2 (0) 7125 (0) 738c (0)\n001 7 df1e d863 e5d7 ec52 | 63 cc20 (0) c9f5 (0) c898 (0) c832 (0)\n002 5 88fe 898d 9d0f 915d | 20 82dd (0) 82f9 (0) 8025 (0) 849b (0)\n003 5 baf2 b502 b5b2 b626 | 17 bcc6 (0) b95d (0) b911 (0) b820 (0)\n004 5 af02 ae2b aeb4 ad98 | 5 af02 (0) ae2b (0) aeb4 (0) ad98 (0)\n005 2 a34e a369 | 2 a34e (0) a369 (0)\n============ DEPTH: 6 ==========================================\n006 1 a46d | 1 a46d (0)\n007 0 | 0\n008 1 a6fb | 1 a6fb (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","private_key":"0b39a127c1bcb229d9f78601108abe82d675a725983831143efa53f899d08bdf","name":"node_a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","services":["streamer"],"enable_msg_events":true,"port":43953},"up":true}},{"node":{"info":{"id":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","name":"node_30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","enode":"enode://77bb6be6fe33a79ce2b05a3ea945520fb76c9262e75002a66961e3d27470fec41d9d93ee7fa847b6848f95fbf48806f4e9b0dd1a7e2a75738eaf6ff87e566696@127.0.0.1:0","enr":"0xf88fb8408975a075a76b03b6e862198c62788a23869e631fc2f37775f9a9269229cab59419c1f12dfa51ed37f6993170944a259abdee74afa02303737414e5824a67173a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10277bb6be6fe33a79ce2b05a3ea945520fb76c9262e75002a66961e3d27470fec4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MIl0koJLGVQNE+8XxwhFvm3eRV3KTk+Ez8oUosNzlp8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 308974\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 f629 e5d7 d863 df1e | 110 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n001 3 6ecb 6337 5f00 | 70 7125 (0) 738c (0) 7290 (0) 77d2 (0)\n002 9 1704 1a2a 1c47 1f67 | 44 13d6 (0) 11d4 (0) 103b (0) 154b (0)\n003 9 2ccf 2c38 2d36 2995 | 15 2f32 (0) 2ccf (0) 2c79 (0) 2c38 (0)\n004 2 39d1 3f94 | 7 3b88 (0) 3b78 (0) 39d1 (0) 3e8e (0)\n005 4 35e6 3630 378e 3780 | 4 35e6 (0) 3630 (0) 378e (0) 3780 (0)\n006 3 33b5 3373 3237 | 3 33b5 (0) 3373 (0) 3237 (0)\n============ DEPTH: 7 ==========================================\n007 1 314a | 1 314a (0)\n008 0 | 0\n009 0 | 0\n010 1 30be | 1 30be (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","private_key":"dbfd3f618dd2960c68e8eeac259fef1c20d8154f8fcafa4992bc5568c7c8a9d9","name":"node_30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","services":["streamer"],"enable_msg_events":true,"port":38135},"up":true}},{"node":{"info":{"id":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","name":"node_0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","enode":"enode://ecda090f3e2fbbd974141d7beee44746688e9b805c8a76e68f3b4ac9d9e5a22f006596991f82625fa651aebd36ccab7262fd90a08040402982a11b92c8301e4e@127.0.0.1:0","enr":"0xf88fb8400ac80bea14f01369a3774d4c98b4218c5d0d180bda798635c393bdc35befe3c72cca308d1e84b165fd5b1012e749086db6634a096cb618c14645c91e59e906480183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ecda090f3e2fbbd974141d7beee44746688e9b805c8a76e68f3b4ac9d9e5a22f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DGTlr4abFmX9QBaubQTI7t1CNjbwbXjsuUTujjJyqCo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0c64e5\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 a653 886a 898d f629 | 110 82f9 (0) 82dd (0) 8025 (0) 8505 (0)\n001 3 5f00 6337 6ecb | 70 77d2 (0) 775e (0) 7125 (0) 7290 (0)\n002 4 2d36 2a0a 20ae 3089 | 32 2f32 (0) 2ccf (0) 2c79 (0) 2c38 (0)\n003 5 1704 1f67 1e2a 1c47 | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 6 0743 0451 0438 00c6 | 11 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n005 2 0af9 0a00 | 3 0b72 (0) 0af9 (0) 0a00 (0)\n006 2 0fc5 0e5e | 3 0ff2 (0) 0fc5 (0) 0e5e (0)\n007 2 0de3 0d8a | 2 0de3 (0) 0d8a (0)\n============ DEPTH: 8 ==========================================\n008 1 0cf5 | 1 0cf5 (0)\n009 1 0c28 | 1 0c28 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","private_key":"7c777cdb8d0d0d9cf6dc20d975185908b22a1774e4e9abf683b3ee25c8ccc5a8","name":"node_0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","services":["streamer"],"enable_msg_events":true,"port":38547},"up":true}},{"node":{"info":{"id":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","name":"node_f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","enode":"enode://f12ee7006d3189d601c33a5aa4d0852e4f5aa621abedc967a106064c05dfb5de7f813d8356ae58fdad01d1453a563482e960120fb92cfa61d3ebba3c9c331b41@127.0.0.1:0","enr":"0xf88fb840d30cb092c1b2933d7cc9b7444ef7da1f3fe07ae780285ecced6998041385ca0d14e88aa1dea59469ff033450bc73e099bc2bb9773d568846e4d640c797590b160183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f12ee7006d3189d601c33a5aa4d0852e4f5aa621abedc967a106064c05dfb5de","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9im4ueecdaxVna+b9PyGcr/dWVzyxdF6iIUoJib8ZaU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f629b8\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 6ecb 6337 5f00 3089 | 146 7e04 (0) 7dc2 (0) 7dd3 (0) 7dbb (0)\n001 6 898d 915d 959f b65e | 47 8505 (0) 849b (0) 8025 (0) 82dd (0)\n002 9 c832 c9f5 caf6 c49c | 26 cc20 (0) ca04 (0) caf6 (0) c9f5 (0)\n003 5 e5d7 e8ef ef1b ef07 | 18 e027 (0) e775 (0) e7fa (0) e54b (0)\n004 4 fbf5 ff36 fe21 fe31 | 6 f925 (0) fbc8 (0) fbf5 (0) fe21 (0)\n005 2 f27f f2d5 | 3 f31c (0) f27f (0) f2d5 (0)\n006 4 f4e0 f5b2 f5dc f528 | 6 f456 (0) f45f (0) f4e0 (0) f5b2 (0)\n============ DEPTH: 7 ==========================================\n007 3 f773 f7ba f7fa | 3 f773 (0) f7ba (0) f7fa (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","private_key":"ed331558b7b08a35ac962ee04dd387cf1355874a1e4998244fb9c4530bc3036c","name":"node_f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","services":["streamer"],"enable_msg_events":true,"port":43737},"up":true}},{"node":{"info":{"id":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","name":"node_20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","enode":"enode://e0e6fe997dda2f2ae96f021131f1f3975da9807d14dbb610fd82ef3b8d37ac6934e616d60bf7cdba99b9db2edcb0991febc119d93ad7ff35e4b6ce09903446ae@127.0.0.1:0","enr":"0xf88fb840946c1b232e0d6a23993e1b0b244cc3b22c4f091277d1507a29146bda9aad796e3d1c7dcd6a3de9c37c9355fe2f6a4db100ed11f07d0acfaab3676e42175906470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e0e6fe997dda2f2ae96f021131f1f3975da9807d14dbb610fd82ef3b8d37ac69","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IK6xT1Z90W8GsNO1ibgyg9qgCl7RDkR4YL2pRrrM3S0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 20aeb1\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 a653 9d0f df1e f7fa | 110 8505 (0) 849b (0) 8025 (0) 82dd (0)\n001 4 4447 5f00 6337 6ecb | 70 7e04 (0) 7dbb (0) 7dc2 (0) 7dd3 (0)\n002 7 03cc 0743 0cf5 0c64 | 44 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n003 6 3f94 3780 3373 3237 | 17 39d1 (0) 3b88 (0) 3b78 (0) 3efc (0)\n004 6 2ccf 2c38 2d36 2995 | 9 2f32 (0) 2ccf (0) 2c79 (0) 2c38 (0)\n005 2 256e 24b8 | 2 256e (0) 24b8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 21a0 217f 2101 | 3 21a0 (0) 217f (0) 2101 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","private_key":"2e8fb7fdd8a9a42774dbb1e04397d0092d1722e16dc44ee9ec98dcceef319366","name":"node_20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","services":["streamer"],"enable_msg_events":true,"port":33621},"up":true}},{"node":{"info":{"id":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","name":"node_2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","enode":"enode://41ce2c9d43b344d3ee113b760fcf2e9254f4e650568be23a964a1cf6e0354ef3616bd129e46a868f713a9a507acdc6b219d5923a7aa09b96092f161d2f76fad4@127.0.0.1:0","enr":"0xf88fb840cb2dee7c73e503707c6b93468e93e8602d07fb552da0e1429d5e05393a553625665eaedb8ac4db4f1fc86bf952d9a3937b0d40f9df2b5d81a6900949b0cc79140183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10241ce2c9d43b344d3ee113b760fcf2e9254f4e650568be23a964a1cf6e0354ef3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KgqOrxonSeaPi4QVeMFgaZz3kH/yOELG1hatiE5fYT4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2a0a8e\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 a653 9d0f d863 df1e | 110 8505 (0) 849b (0) 82dd (0) 82f9 (0)\n001 5 5f00 5db0 4447 6337 | 70 4990 (0) 49ea (0) 49cd (0) 4bcf (0)\n002 6 0743 03cc 0c64 1f67 | 44 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n003 4 3f94 35e6 3780 3089 | 17 39d1 (0) 3b88 (0) 3b78 (0) 3ec5 (0)\n004 3 2101 217f 20ae | 6 24b8 (0) 256e (0) 21a0 (0) 217f (0)\n005 3 2d36 2ccf 2c38 | 5 2f32 (0) 2ccf (0) 2c79 (0) 2c38 (0)\n006 1 2995 | 1 2995 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 2abb 2a97 | 2 2abb (0) 2a97 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","private_key":"5ed9141147ced7a970cf200754db9d56e55104e714e7b8b6ab0372ea8e987b34","name":"node_2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","services":["streamer"],"enable_msg_events":true,"port":37145},"up":true}},{"node":{"info":{"id":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","name":"node_1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","enode":"enode://ce8284583c6db3b9420355ed2e31812b19ceb6157b78b991cf2275cba03fc42a1fc5ca4be2e339ce47a981b7c3fea09fb4ef0489234d5660488ab4cbde59044c@127.0.0.1:0","enr":"0xf88fb84069d4576c9390bdd8b0b134b81758b7b133feddbb1077abc43b3afdf7d3e40e8514903b6f2a002df47f3f977fae861bb7ad48e28cfd6037488e74e727929721ae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ce8284583c6db3b9420355ed2e31812b19ceb6157b78b991cf2275cba03fc42a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GioOC7+DzUCTaZVnRBiuRpqiuSh2pM7qvYEo9Ta316I=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1a2a0e\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d863 df1e 9d0f | 110 c26f (0) c1f9 (0) c786 (0) c620 (0)\n001 7 4447 5db0 5f00 6337 | 70 49ea (0) 49cd (0) 4990 (0) 4bcf (0)\n002 4 3089 2101 20ae 2a0a | 32 3ec5 (0) 3efc (0) 3e8e (0) 3f94 (0)\n003 5 03cc 0451 0438 0cf5 | 22 0067 (0) 00c6 (0) 02d8 (0) 0328 (0)\n004 2 1400 1704 | 12 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n005 6 1e2a 1f85 1f67 1c8a | 6 1e2a (0) 1f85 (0) 1f67 (0) 1c8a (0)\n============ DEPTH: 6 ==========================================\n006 2 19fa 18f6 | 2 19fa (0) 18f6 (0)\n007 1 1b83 | 1 1b83 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","private_key":"66cedc68f62643418971c63cf6032c5cbfd77b99e9d052c406d568d23ad4a0a9","name":"node_1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","services":["streamer"],"enable_msg_events":true,"port":43217},"up":true}},{"node":{"info":{"id":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","name":"node_9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","enode":"enode://12a7d6a36db53d873c0acc5a559d296451cf06d07aa94a306ace9b6043fb3c2d9e1e1c49b9ebfc9564a9611e315d5fb1eb7967526de503234970b110793753da@127.0.0.1:0","enr":"0xf88fb8408f502648e715faaf2434932bad996cfe6aeb6abb2a2ea6e7c78e3397d1b442a6242b093c33df73b486aede52745c085f7081b037099ed3a238e285da2177b9bb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10212a7d6a36db53d873c0acc5a559d296451cf06d07aa94a306ace9b6043fb3c2d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nQ+ASEm3I5dka6SCCLoeAdz03gTniAFsShoMk+ZQ3fU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9d0f80\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 6337 6ecb 3089 2d36 | 146 4e5a (0) 4c9e (0) 4d59 (0) 4d6b (0)\n001 8 f7fa ff36 ec52 e547 | 63 eb98 (0) e854 (0) e883 (0) e8ef (0)\n002 5 badd b7ca b65e a653 | 27 bcc6 (0) b820 (0) b897 (0) b911 (0)\n003 6 8025 82f9 8f21 88fe | 10 8505 (0) 849b (0) 8025 (0) 82dd (0)\n004 6 9076 90a8 915d 96fc | 6 9076 (0) 90a8 (0) 915d (0) 96fc (0)\n============ DEPTH: 5 ==========================================\n005 2 9852 9890 | 2 9852 (0) 9890 (0)\n006 1 9fa0 | 1 9fa0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","private_key":"5a3b48cfd6ec1d644a7c6a7c880a16141fb04b6362ca8b077c18e25508f97a8a","name":"node_9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","services":["streamer"],"enable_msg_events":true,"port":41537},"up":true}},{"node":{"info":{"id":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","name":"node_df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","enode":"enode://43a859488ad22646b38f98737b2ac09af8c9280038408f13c72deb3aa3bc0405f6d6b9d25961b7a83efe20f7700411dd0c70215ffce26d0b46e6581c902a6a6d@127.0.0.1:0","enr":"0xf88fb84024940eb9de5536da259f0f58a1e16285099071949f0e9ad9ed71742a5af3100c76f2ab3c852b256f9db69e18317adbb05ecf1dcff3e87fed713d59174e0c61780183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10343a859488ad22646b38f98737b2ac09af8c9280038408f13c72deb3aa3bc0405","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3x5ORujsJsrXS081qwcPEsj2/dyjWsRMEhj/YP4ea6s=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: df1e4e\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 5f00 6ecb 3089 2d36 | 146 4990 (0) 49ea (0) 49cd (0) 4bcf (0)\n001 6 b65e a653 ac4d 886a | 47 bcc6 (0) b897 (0) b820 (0) b911 (0)\n002 8 ec52 ef07 ef1b e514 | 37 eb98 (0) e854 (0) e883 (0) e8ef (0)\n003 5 c832 c9f5 c59e c49c | 15 c1f9 (0) c26f (0) c786 (0) c6cf (0)\n004 3 d1d7 d7ac d640 | 5 d3b0 (0) d299 (0) d1d7 (0) d7ac (0)\n============ DEPTH: 5 ==========================================\n005 5 daec da67 db6a d887 | 5 daec (0) da67 (0) db6a (0) d887 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","private_key":"374fa339ea3cf4a0d8163261f0d431dfec275bd3323d60ffdd0e99868f234d3b","name":"node_df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","services":["streamer"],"enable_msg_events":true,"port":33131},"up":true}},{"node":{"info":{"id":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","name":"node_1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","enode":"enode://b38f84e3fb5c5995741a2a998215c68d6eee0548072f49bea0d3e3f638779977df96caf15932edea56c8b18e27fb660a269dffcdb628ef6fea0c86a8faa6c560@127.0.0.1:0","enr":"0xf88fb840060e7e6c9c1f7f7cfbf60354cd454fa5d169bf184f13f458845764571079a9e6070092d3d33322c88d0eb91c50376453e016e118f6636745d50bf17b9bee95190183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b38f84e3fb5c5995741a2a998215c68d6eee0548072f49bea0d3e3f638779977","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"H2cMU7TFl76v+s2E46aXIlsEze2SGdCijh/lJaPK3PU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1f670c\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ac4d d863 df1e | 110 bcc6 (0) b911 (0) b95d (0) b820 (0)\n001 3 6103 6f5f 6ecb | 70 49cd (0) 49ea (0) 4990 (0) 4bcf (0)\n002 6 3089 2d36 2a0a 2995 | 32 3b88 (0) 3b78 (0) 39d1 (0) 3e8e (0)\n003 6 0c64 0067 03cc 0451 | 22 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n004 4 11d4 14df 154b 1704 | 12 13d6 (0) 103b (0) 11d4 (0) 1436 (0)\n005 3 1b83 1a2a 18f6 | 4 19fa (0) 18f6 (0) 1b83 (0) 1a2a (0)\n006 3 1c8a 1c9c 1c47 | 3 1c8a (0) 1c9c (0) 1c47 (0)\n============ DEPTH: 7 ==========================================\n007 1 1e2a | 1 1e2a (0)\n008 1 1f85 | 1 1f85 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","private_key":"8b2847a2b9e1ffbd91e4f0e7386339eb2dbf3391956547ad876d3d7fafbdda9c","name":"node_1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","services":["streamer"],"enable_msg_events":true,"port":43053},"up":true}},{"node":{"info":{"id":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","name":"node_d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","enode":"enode://f9a61c9819677e84a716705685a63dc1bc77bfc1e9c23cf9127e4e00228d82f7487a4133ee6f5a39686c64e5f95e222dbefdbd0d2c59ea4d4ed69e49843236d5@127.0.0.1:0","enr":"0xf88fb8407f43c74479afec5cde0df2a8e4c7452558c0414e10ac7319c29567d1fe9706597c8d0fac508af58ce2b580e31877a08fa7ea9a712348c98bbf5debbdbb5a3e640183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f9a61c9819677e84a716705685a63dc1bc77bfc1e9c23cf9127e4e00228d82f7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2GO6dAXrB8zdvx0077y+woZ6k6EJ7ZQT2a7PMNNkWmo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d863ba\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 5f00 6ecb 0743 1704 | 146 4bcf (0) 4a8b (0) 4ac7 (0) 4990 (0)\n001 4 898d 9d0f ac4d a653 | 47 9076 (0) 90a8 (0) 915d (0) 96fc (0)\n002 6 ff36 f2d5 f629 f7fa | 37 eb98 (0) e854 (0) e883 (0) e8ef (0)\n003 8 c26f c786 c441 c49c | 15 c1f9 (0) c26f (0) c620 (0) c6cf (0)\n004 3 d299 d7ac d640 | 5 d1d7 (0) d3b0 (0) d299 (0) d7ac (0)\n005 1 df1e | 1 df1e (0)\n============ DEPTH: 6 ==========================================\n006 3 daec da67 db6a | 3 daec (0) da67 (0) db6a (0)\n007 0 | 0\n008 1 d887 | 1 d887 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","private_key":"8febd8aeb1300031923fe49da5869050860d96d11eb4508c497687c8ccddc31f","name":"node_d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","services":["streamer"],"enable_msg_events":true,"port":39911},"up":true}},{"node":{"info":{"id":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","name":"node_2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","enode":"enode://5a16cc82bdff422be5114cecf38c16efaa5cf372e4b9da981b04bf795e5d6dd58f2128d1ea860d1fc5ab50341562b3fe220930224978c5fc9cc470236e731f8a@127.0.0.1:0","enr":"0xf88fb8402065a0e31a085320c01f09fe4cac1f3443c89d2aa42a78120ab8af3197c6c3a00501e91b9adefc7a55eccc59b6a25a614cea33a121aa6e794419d8a9990d90ce0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025a16cc82bdff422be5114cecf38c16efaa5cf372e4b9da981b04bf795e5d6dd5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LTZFxP35ooCakJB2ue5fuY+ogPb67/kU8aKYevkozXk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2d3645\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ac4d 9d0f ff36 f629 | 110 9076 (0) 90a8 (0) 915d (0) 96fc (0)\n001 2 5f00 6ecb | 70 4bcf (0) 4a8b (0) 4ac7 (0) 49cd (0)\n002 4 1f67 1704 0c64 0451 | 44 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n003 7 39d1 3b78 3f94 35e6 | 17 3b88 (0) 3b78 (0) 39d1 (0) 3ec5 (0)\n004 3 20ae 217f 2101 | 6 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n005 4 2995 2abb 2a97 2a0a | 4 2abb (0) 2a97 (0) 2a0a (0) 2995 (0)\n006 1 2f32 | 1 2f32 (0)\n============ DEPTH: 7 ==========================================\n007 3 2c79 2c38 2ccf | 3 2ccf (0) 2c79 (0) 2c38 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","private_key":"60acfdf5adccd8cecfff6c7041a09ca32eaa3aa3a70df16eb20f58826c441ecd","name":"node_2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","services":["streamer"],"enable_msg_events":true,"port":41863},"up":true}},{"node":{"info":{"id":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","name":"node_6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","enode":"enode://04684e9608ae1597b26dcf982a1102e6cdd9d2437b9b0d2e4dc0c1acada0b112d11b3d80dd326baea3005f626e94985b91e0cca937f63323a0ff9dd434f31601@127.0.0.1:0","enr":"0xf88fb8401c006cfaa1eed4491442b8516c8bdf525694e5c4b6e1e65cfd0409927b90027e5242612b7461f7b42127f5f0de749f08eec7d18fe8b3292fdf06dd809f43c4d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10304684e9608ae1597b26dcf982a1102e6cdd9d2437b9b0d2e4dc0c1acada0b112","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bstcNvwBUMKHRGroqGgtYpodOTQSMHFyBiGbq+O99lk=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6ecb5c\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 898d 9d0f f629 ff36 | 110 eb98 (0) e854 (0) e883 (0) e8ef (0)\n001 12 0c64 03cc 0743 0451 | 76 0af9 (0) 0a00 (0) 0b72 (0) 0ff2 (0)\n002 8 58ed 5f00 5db0 5308 | 38 49cd (0) 49ea (0) 4990 (0) 4bcf (0)\n003 5 7290 77d2 775e 7b90 | 12 7125 (0) 738c (0) 7290 (0) 77d2 (0)\n004 2 6337 6103 | 9 67dc (0) 67aa (0) 66e7 (0) 605a (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n006 2 6c4d 6c73 | 2 6c73 (0) 6c4d (0)\n007 3 6fe9 6f2d 6f5f | 3 6fe9 (0) 6f2d (0) 6f5f (0)\n============ DEPTH: 8 ==========================================\n008 2 6e68 6e05 | 2 6e68 (0) 6e05 (0)\n009 1 6ea5 | 1 6ea5 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","private_key":"6ccda16d24593d76eeb7948a4af3fb05397678300cffc7c91a33b30131038c07","name":"node_6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","services":["streamer"],"enable_msg_events":true,"port":45685},"up":true}},{"node":{"info":{"id":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","name":"node_21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","enode":"enode://98c213523753d4a7653cb5b73bab12b51338713fea9dc6f12a63a8336614c389ffdf44b011e51bd2c8083da8e80e4f1918739bbae11667d68f310f526fd020cb@127.0.0.1:0","enr":"0xf88fb840abbddde7f121cefe95a32471993c96b1df78fac759c6d32c3c2f3a5442d3b96d0f4cb71c4dabeadd6ea7962640f6d04e731dc0b3d6f37c63316c9e7b10919cd40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10398c213523753d4a7653cb5b73bab12b51338713fea9dc6f12a63a8336614c389","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IQEqOm7x7OSP2dfP/mLcdYOd0GLvzzrF+WLCN4FNpAc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 21012a\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 df1e ff36 9d0f ac4d | 110 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n001 5 51db 5f00 6337 6103 | 70 49ea (0) 49cd (0) 4990 (0) 4bcf (0)\n002 5 0451 1f67 1a2a 18f6 | 44 0a00 (0) 0af9 (0) 0b72 (0) 0ff2 (0)\n003 5 3b78 39d1 3f94 35e6 | 17 3b88 (0) 3b78 (0) 39d1 (0) 3ec5 (0)\n004 8 2a0a 2a97 2995 2f32 | 9 2abb (0) 2a97 (0) 2a0a (0) 2995 (0)\n005 2 256e 24b8 | 2 256e (0) 24b8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 20ae | 1 20ae (0)\n008 1 21a0 | 1 21a0 (0)\n009 1 217f | 1 217f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","private_key":"0c649ddaf655f9e8eee8b3a2d2050c9b93305a4e7a28f3684f68aee88ab0ef2e","name":"node_21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","services":["streamer"],"enable_msg_events":true,"port":38963},"up":true}},{"node":{"info":{"id":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","name":"node_17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","enode":"enode://319cd6619ea64ca816341d84c8b1ca4aa41b3a0eca34fbdf923acd1396287078e2808d85b58fbb61dbffc5c14b726c002731803095ec20ebe8079edf94ef274c@127.0.0.1:0","enr":"0xf88fb8402778c296526d28fd3bd0b985c90367db08c61a457ddf60dd9e79024d56fdd6dc78b02d84ec47cdabda998e2326ffca652eeb8fad6517d8e5238bdacffc6fdeba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102319cd6619ea64ca816341d84c8b1ca4aa41b3a0eca34fbdf923acd1396287078","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FwQKOq1ZMNjg3hAR/SmWt9CSJZifDcGuj356Ut0mq04=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 17040a\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 d863 ff36 898d ac4d | 110 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n001 3 5db0 6f5f 6ecb | 70 4990 (0) 49cd (0) 49ea (0) 4bcf (0)\n002 6 3089 2d36 2c38 2995 | 32 3b88 (0) 3b78 (0) 39d1 (0) 3e8e (0)\n003 8 0e5e 0cf5 0c64 03cc | 22 0b72 (0) 0af9 (0) 0a00 (0) 0ff2 (0)\n004 6 1c47 1e2a 1f67 1b83 | 10 1b83 (0) 1a2a (0) 19fa (0) 18f6 (0)\n005 2 103b 11d4 | 3 13d6 (0) 103b (0) 11d4 (0)\n006 4 154b 1436 1400 14df | 4 154b (0) 1436 (0) 1400 (0) 14df (0)\n007 2 165f 1672 | 2 165f (0) 1672 (0)\n============ DEPTH: 8 ==========================================\n008 2 179f 17db | 2 179f (0) 17db (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","private_key":"6fd569b047d43c53be962cedfa9155cbdd5b612bf6ae51d3b02aa8c1bab608c1","name":"node_17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","services":["streamer"],"enable_msg_events":true,"port":38715},"up":true}},{"node":{"info":{"id":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","name":"node_04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","enode":"enode://52bb359e4ef492631139b8f55c6bd84f6fdf764b06373ff664baec44a296aefa8a30ce0f4a3792af214e4f1025f5d4f5d67c52b754720ee7f8cff0b069716439@127.0.0.1:0","enr":"0xf88fb840cab6c885934f1ff7d8d41a71e525765c7eec705d6d47779bc453c39f000c9be43e5d2c812ef5c9fddbf705cfba32604383775a77297727a3b98fbe0937845b110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10352bb359e4ef492631139b8f55c6bd84f6fdf764b06373ff664baec44a296aefa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BFGNcSD6ilKNmDyh7m1dCbokpOhT+yK8kITN80mV6V8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 04518d\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fe31 ff36 898d ac4d | 110 c1f9 (0) c26f (0) c786 (0) c6cf (0)\n001 4 5db0 6f5f 6ecb 6103 | 70 4990 (0) 49cd (0) 49ea (0) 4bcf (0)\n002 5 2101 2a97 2995 2d36 | 32 3b88 (0) 3b78 (0) 39d1 (0) 3ec5 (0)\n003 6 1f67 1e2a 1c47 1a2a | 22 1c8a (0) 1c9c (0) 1c47 (0) 1e2a (0)\n004 5 0a00 0b72 0e5e 0cf5 | 11 0b72 (0) 0af9 (0) 0a00 (0) 0fc5 (0)\n005 3 02d8 03cc 0067 | 5 00c6 (0) 0067 (0) 02d8 (0) 0328 (0)\n006 2 0661 0743 | 3 0661 (0) 07a8 (0) 0743 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 0438 | 1 0438 (0)\n010 0 | 0\n011 0 | 0\n012 1 045b | 1 045b (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","private_key":"2e166ac09eefef316a31e45dc6fa94185d8d91cc1d537f03044c7cb46ab00347","name":"node_04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","services":["streamer"],"enable_msg_events":true,"port":33881},"up":true}},{"node":{"info":{"id":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","name":"node_610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","enode":"enode://27461fddb23d01661d9e0752253b5f1ff25fd09606c0f07fd3161be1d08015a00addcfe28ebcdd5bd3974ce43579047df1d16e2de978b55a62885a3f9b919aeb@127.0.0.1:0","enr":"0xf88fb8402aa36d20ffb02eb4363c646927544d3ef64e739c150d0cf86e67c9f1e55d968171dc7a65d680a25f704a35163488cb3427ded17d666bdb22ef7be92242260d3c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10327461fddb23d01661d9e0752253b5f1ff25fd09606c0f07fd3161be1d08015a0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YQM0oHctNBRlK1dfLKpvLbMiJJB8JNBv2mQ9ufLsKv4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 610334\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ff36 898d ac4d | 110 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n001 7 2101 2995 2c38 1f67 | 76 378e (0) 3780 (0) 3630 (0) 35e6 (0)\n002 8 4109 461c 4d10 5308 | 38 4ac7 (0) 4a8b (0) 4bcf (0) 49cd (0)\n003 6 7dd3 7dbb 7920 7a60 | 12 775e (0) 77d2 (0) 7290 (0) 738c (0)\n004 5 6fe9 6f5f 6e68 6e05 | 11 6967 (0) 6831 (0) 6c4d (0) 6c73 (0)\n005 3 66e7 67aa 67dc | 3 66e7 (0) 67aa (0) 67dc (0)\n006 3 6251 628e 6337 | 3 6251 (0) 628e (0) 6337 (0)\n============ DEPTH: 7 ==========================================\n007 2 60d7 605a | 2 60d7 (0) 605a (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","private_key":"a239693a1557643d38ba187a95721a30768f347591e6f8868b289ec3f95b5e3f","name":"node_610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","services":["streamer"],"enable_msg_events":true,"port":46809},"up":true}},{"node":{"info":{"id":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","name":"node_ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","enode":"enode://134ad215979bb59e0854da374768a63faad6b7322ab9e96996f9d5121bf3f3093736c2b9e465cc3141fe55ae189e6e708af53bdb2f165ddfb934adbfd15f8b13@127.0.0.1:0","enr":"0xf88fb8400b13e5d05cf91166873c521a1779fec8d2519ba5960b369a7ca65f83fcc01cea397a6dec2e9098a898ae93a78056944abf096f46e1a62592a7d067b013da30f00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103134ad215979bb59e0854da374768a63faad6b7322ab9e96996f9d5121bf3f309","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rE0taDbizfTIgiH2ATqscKRR3RW8QDKIvRDQuRHNmis=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ac4d2d\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 2c38 2d36 2a97 2995 | 146 3ec5 (0) 3efc (0) 3e8e (0) 3f94 (0)\n001 6 c832 df1e d863 f629 | 63 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n002 3 959f 9d0f 898d | 20 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n003 6 b5b2 b626 b65e ba88 | 17 bcc6 (0) b897 (0) b820 (0) b95d (0)\n004 2 a369 a653 | 5 a34e (0) a369 (0) a46d (0) a6fb (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 3 af02 aeb4 ae2b | 3 af02 (0) aeb4 (0) ae2b (0)\n007 1 ad98 | 1 ad98 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","private_key":"aaaa8d07b535646ac07aef1d6dbe233da8938015e1fbb22d29bb1667cccdbd9c","name":"node_ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","services":["streamer"],"enable_msg_events":true,"port":44875},"up":true}},{"node":{"info":{"id":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","name":"node_ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","enode":"enode://caea642b8d5bd71c4dc4f25c29351b369cae4b0b2cc5c09805f09dbe91dff565c639652d2997ef93df5a8814a088dcb6eeb10cde26ef5114f39f86f96c61dfe1@127.0.0.1:0","enr":"0xf88fb840a8727941728a486f3f2399e65bacb4139c6b4ffcda9c78b7ba54db0561b8b3496543e9ac4ddc130e407c629d8346439a2ac645f858ff17da07fa89b93e4cfbe00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103caea642b8d5bd71c4dc4f25c29351b369cae4b0b2cc5c09805f09dbe91dff565","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/zaogQ3UT20fpCqpH/Yga8+0wf+6sN9zoYHa7OMp4OM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ff36a8\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 6f5f 6ecb 6103 18f6 | 146 1c9c (0) 1c8a (0) 1c47 (0) 1e2a (0)\n001 5 9d0f 886a 898d ad98 | 47 96fc (0) 976e (0) 959f (0) 9076 (0)\n002 5 c786 c9f5 c832 d863 | 26 c26f (0) c1f9 (0) c6cf (0) c620 (0)\n003 5 e514 e5d7 ec52 ef1b | 18 e027 (0) e775 (0) e7fa (0) e54b (0)\n004 9 f31c f2d5 f528 f5dc | 13 f31c (0) f27f (0) f2d5 (0) f45f (0)\n005 3 fbf5 fbc8 f925 | 3 fbf5 (0) fbc8 (0) f925 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 fe21 fe31 | 2 fe21 (0) fe31 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","private_key":"2e244474154628879e0fe12f4e3f1fbd5803d0a643d609efa8b704912812cd68","name":"node_ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","services":["streamer"],"enable_msg_events":true,"port":44299},"up":true}},{"node":{"info":{"id":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","name":"node_2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","enode":"enode://47952da4c6b64e3f0d74a7444c626ac5ec1dc5cc34a4a62e8cbfb6016015afddb5e37081dbee4fd825dddc79d455d4ed6e589e93bb20b43dd9be174c885c9a19@127.0.0.1:0","enr":"0xf88fb840adbbd5eaf9c32e9a2af15ed32ea2cfb62da1704c409d35e7467a4a3290586ef679381b40e61f36d843e27f7fa96add6a5c419f50d30455c897732b2ba0a615b80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10347952da4c6b64e3f0d74a7444c626ac5ec1dc5cc34a4a62e8cbfb6016015afdd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LDiUtuR88ZrH7p/iExljEvZ2JW9nDf8lsDVjSSVQvHQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2c3894\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ff36 ac4d 898d | 110 d299 (0) d3b0 (0) d1d7 (0) d7ac (0)\n001 6 4447 461c 51db 5f00 | 70 775e (0) 77d2 (0) 7125 (0) 738c (0)\n002 5 18f6 1e2a 1704 0067 | 44 0b72 (0) 0af9 (0) 0a00 (0) 0fc5 (0)\n003 8 39d1 3f94 3373 3237 | 17 378e (0) 3780 (0) 3630 (0) 35e6 (0)\n004 3 20ae 217f 2101 | 6 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n005 4 2abb 2a97 2a0a 2995 | 4 2a0a (0) 2abb (0) 2a97 (0) 2995 (0)\n006 1 2f32 | 1 2f32 (0)\n007 1 2d36 | 1 2d36 (0)\n============ DEPTH: 8 ==========================================\n008 1 2ccf | 1 2ccf (0)\n009 1 2c79 | 1 2c79 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","private_key":"1fb0fb0f5bfcd2c5012cb4dcbf3d383d99034d7fc8646fe2fa0239e1f7b51453","name":"node_2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","services":["streamer"],"enable_msg_events":true,"port":33033},"up":true}},{"node":{"info":{"id":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","name":"node_898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","enode":"enode://29ee8c7cc132a4f84a34e6c9a61e9f98998e563662619c46f89e5a5c92e5b62c66230acaaf18ebc8b957a8a49a939fb01da5f5a3493fc7730cfc9e060c72b79f@127.0.0.1:0","enr":"0xf88fb840293b9155cb46e3fe29d5d357c867f2782ac2bc5187314b335ebef943733badfd73796b642fdbc11e618e294d62120f11f47d2c59854f164e09788562a607f4ef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10329ee8c7cc132a4f84a34e6c9a61e9f98998e563662619c46f89e5a5c92e5b62c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iY0vfUa0lhtkbVphQtVNYjO3+A9mjOI0Ui3QLizFRcs=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 898d2f\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 5db0 6103 6ecb 2a97 | 146 775e (0) 77d2 (0) 738c (0) 7290 (0)\n001 7 df1e d863 c441 c832 | 63 d1d7 (0) d3b0 (0) d299 (0) d7ac (0)\n002 7 b7ca b65e badd ba88 | 27 bcc6 (0) b820 (0) b897 (0) b95d (0)\n003 5 90a8 915d 976e 959f | 10 96fc (0) 976e (0) 959f (0) 915d (0)\n004 5 8505 849b 8025 82dd | 5 8505 (0) 849b (0) 8025 (0) 82dd (0)\n005 1 8f21 | 1 8f21 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 886a 88fe 88a1 | 3 88a1 (0) 88fe (0) 886a (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","private_key":"25e10afa4ffc02c1856aaba9b6fa69c4caf4ae6c8d973c1750b152061c409dad","name":"node_898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","services":["streamer"],"enable_msg_events":true,"port":35709},"up":true}},{"node":{"info":{"id":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","name":"node_18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","enode":"enode://df37042646f5b0435bb902440a5d413958bd9962f689e0d6961bae39f3d57cb89b2d3d68f1c1fabd9e003f19da6adafaa8ff0562d694b0971ef0f8e2e0f86ed0@127.0.0.1:0","enr":"0xf88fb84034efdfae1a4a243bc8ceefd19e7c4e762ea36361737f82c06ef963c92c4d112353472336b474557faf93d9ce5a1c58bd8b9bcba68785b4e52629ee8ffd7354590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102df37042646f5b0435bb902440a5d413958bd9962f689e0d6961bae39f3d57cb8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GPbmbhzI5iCAiQG1cf31Je6PQYUPrAvQ5cWk3nDF+HM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 18f6e6\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ff36 df1e c832 ad98 | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 2 5db0 6103 | 70 775e (0) 77d2 (0) 7290 (0) 738c (0)\n002 3 2101 2c38 2a97 | 32 378e (0) 3780 (0) 3630 (0) 35e6 (0)\n003 6 0b72 0e5e 0cf5 03cc | 22 0a00 (0) 0af9 (0) 0b72 (0) 0ff2 (0)\n004 3 11d4 154b 1704 | 12 13d6 (0) 103b (0) 11d4 (0) 1436 (0)\n005 5 1c9c 1c47 1f85 1f67 | 6 1c8a (0) 1c9c (0) 1c47 (0) 1f85 (0)\n============ DEPTH: 6 ==========================================\n006 2 1a2a 1b83 | 2 1b83 (0) 1a2a (0)\n007 1 19fa | 1 19fa (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","private_key":"f7529dd416080bdc3c1016be896cd1e6d87fb71bc55f747c44045c3c9402c95b","name":"node_18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","services":["streamer"],"enable_msg_events":true,"port":43611},"up":true}},{"node":{"info":{"id":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","name":"node_2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","enode":"enode://c54171c617812d43a66bacc6697a272aefbfe1ea882f9a9842b2e79e50d9db13428c9eaff2ffcfc8e81379c05ecfb7c2ffbf49be202d77295d7a5fec2acb9871@127.0.0.1:0","enr":"0xf88fb840eaa8f6fbd8efdf7f4ac5c88ea73f5cee6af1b1758a94af489c271983e5bb2c4f3bb50aeb95ce0a622acd1b27df421f79272a7b9c7586105d10d13eff4da67a590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c54171c617812d43a66bacc6697a272aefbfe1ea882f9a9842b2e79e50d9db13","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KpfTCKcgJ0pEDfppAcoKVICvm6tY3YpsSv25yD6pZMM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2a97d3\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 898d ad98 ac4d c832 | 110 9076 (0) 90a8 (0) 915d (0) 96fc (0)\n001 4 6f5f 461c 51db 5db0 | 70 7125 (0) 7290 (0) 738c (0) 775e (0)\n002 5 0e5e 0451 0067 1704 | 44 0a00 (0) 0af9 (0) 0b72 (0) 0de3 (0)\n003 7 39d1 3f94 35e6 3630 | 17 314a (0) 30be (0) 3089 (0) 3237 (0)\n004 3 20ae 2101 217f | 6 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n005 5 2f32 2ccf 2c79 2c38 | 5 2f32 (0) 2d36 (0) 2ccf (0) 2c79 (0)\n006 1 2995 | 1 2995 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 2a0a | 1 2a0a (0)\n009 0 | 0\n010 1 2abb | 1 2abb (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","private_key":"2b2842453e6ed09eca9428c5db19b8b65672776bc2596ca6a169f7e0c1f3267e","name":"node_2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","services":["streamer"],"enable_msg_events":true,"port":37171},"up":true}},{"node":{"info":{"id":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","name":"node_29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","enode":"enode://3d3730044b8ce4d12ccf3b85eb20d027bf821a3bc0bba763f66d0e201835ec7251c7e983adadb9fc9ad2fb49970947d933cfe6879c5177ee537e2296f637da44@127.0.0.1:0","enr":"0xf88fb840d429fc88603170892285ce1f6086380d3216e336fd781e762f59b9bafe65394e20fb7f1b86aa2fa9cb38deb354e1d1f709002da5bc651bfefc311dac483657af0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023d3730044b8ce4d12ccf3b85eb20d027bf821a3bc0bba763f66d0e201835ec72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KZV+jpKSWox5vfUTKV2Wv7Yvv8WX7hz3Z8fvQI8bEpU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 29957e\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ef07 ff36 c832 ac4d | 110 e027 (0) e775 (0) e7fa (0) e5d7 (0)\n001 4 461c 5db0 6103 6f5f | 70 4bcf (0) 4ac7 (0) 4a8b (0) 49cd (0)\n002 5 1704 1f67 02d8 0067 | 44 1c8a (0) 1c9c (0) 1c47 (0) 1e2a (0)\n003 6 3b78 3f94 3089 3237 | 17 314a (0) 30be (0) 3089 (0) 3237 (0)\n004 3 20ae 217f 2101 | 6 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n005 4 2d36 2ccf 2c79 2c38 | 5 2f32 (0) 2d36 (0) 2ccf (0) 2c79 (0)\n============ DEPTH: 6 ==========================================\n006 3 2a0a 2abb 2a97 | 3 2a0a (0) 2abb (0) 2a97 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","private_key":"ecb685b96196b2b1ed90974c8c85cfed18d6274a7639640eecea3d33df729790","name":"node_29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","services":["streamer"],"enable_msg_events":true,"port":40859},"up":true}},{"node":{"info":{"id":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","name":"node_6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","enode":"enode://86a0201b07812ffcb8509f76f8966046bb1d05e0aee48cb884b9929d0a20359fe1ac35441ba1519a58dbfa6590727410bae272f3d71a30b917d894e1e5cc8989@127.0.0.1:0","enr":"0xf88fb8401f19a5134f5248a512cc0875add535eef2498e2fac24985b79b3428e94f87a440936fb0de43a4848b4b08bb438377153809518e99bd2b3b41ab92877893578fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10386a0201b07812ffcb8509f76f8966046bb1d05e0aee48cb884b9929d0a20359f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"b19ad+YJLiXlMIQT4CumLBxVkCSJOn+5jiaw80/ti/4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6f5f5a\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 ef07 f7ba ff36 c9f5 | 110 fbf5 (0) fbc8 (0) f925 (0) fe21 (0)\n001 8 0451 0743 1f67 1e2a | 76 1c9c (0) 1c8a (0) 1c47 (0) 1e2a (0)\n002 9 4d10 4109 4646 461c | 38 4bcf (0) 4a8b (0) 4ac7 (0) 49cd (0)\n003 2 77d2 7a60 | 12 738c (0) 7290 (0) 7125 (0) 775e (0)\n004 2 6337 6103 | 9 66e7 (0) 67dc (0) 67aa (0) 628e (0)\n005 2 6967 6831 | 2 6967 (0) 6831 (0)\n006 2 6c4d 6c73 | 2 6c4d (0) 6c73 (0)\n007 4 6e68 6e05 6ea5 6ecb | 4 6e68 (0) 6e05 (0) 6ea5 (0) 6ecb (0)\n============ DEPTH: 8 ==========================================\n008 1 6fe9 | 1 6fe9 (0)\n009 1 6f2d | 1 6f2d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","private_key":"92f754c50871b54e305f835a6faf7722bfb219adcd6aea6b430a4fe082d5dca5","name":"node_6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","services":["streamer"],"enable_msg_events":true,"port":38657},"up":true}},{"node":{"info":{"id":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","name":"node_886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","enode":"enode://d5df6e2d4f88e0e6096cd3273f0008286a9f7a36e5c6705f89116595e4ea8c52e37570e6afe957ff70d0a32871c3e5a6a3ab64e9d2927eeba8ef68030010c6c4@127.0.0.1:0","enr":"0xf88fb840f7ff3872ab2265f9c5aafbf228e1003c7903bf3c757e67fdff401a6bfd8a886223114715cada6784003648d4e7484150b8ec46c245a46acf0330afde54cefd7e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d5df6e2d4f88e0e6096cd3273f0008286a9f7a36e5c6705f89116595e4ea8c52","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iGr/Hx47hr/pAQZrt5SEUcGP4/jNG3MYsFFUiQyo9zg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 886aff\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0c64 0067 2995 461c | 146 1c8a (0) 1c9c (0) 1c47 (0) 1e2a (0)\n001 8 fe31 ff36 f7fa f7ba | 63 fbf5 (0) fbc8 (0) f925 (0) fe21 (0)\n002 5 b65e b7ca ba88 badd | 27 b2b5 (0) b2a5 (0) b02b (0) b502 (0)\n003 4 959f 915d 90a8 9d0f | 10 96fc (0) 976e (0) 959f (0) 915d (0)\n004 4 8505 82f9 82dd 8025 | 5 8025 (0) 82dd (0) 82f9 (0) 849b (0)\n005 1 8f21 | 1 8f21 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 898d | 1 898d (0)\n008 2 88a1 88fe | 2 88a1 (0) 88fe (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","private_key":"4cb5893d2151dd13ceab60cbb42058108639b9cc2b3914cbc6145530b864a491","name":"node_886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","services":["streamer"],"enable_msg_events":true,"port":39861},"up":true}},{"node":{"info":{"id":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","name":"node_5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","enode":"enode://a13bd5a44dd15b8d08f8dd72bb7a2c87930d339c65d0073457d89576d4efa9aae2dc8c1cf98cf1849ffbb3025d74e4ba6d7ab69d0f7de9a01b3fcd1c33602678@127.0.0.1:0","enr":"0xf88fb840c81df54245181d95cd7921f23a74ae3d33fd56b42989c6460164f5738ac8b5153164e33366793fcadd86b527e176f78b30442e14f9d726c55e28e808ff75a6860183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a13bd5a44dd15b8d08f8dd72bb7a2c87930d339c65d0073457d89576d4efa9aa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XbCENsZPTMnis5UONbyK1zmCXj76Z6ZCx3HZWzTLQgw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5db084\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f7ba ad98 898d 886a | 110 f925 (0) fbf5 (0) fbc8 (0) fe21 (0)\n001 9 1704 1a2a 18f6 0451 | 76 1c8a (0) 1c9c (0) 1c47 (0) 1f85 (0)\n002 4 6337 6103 6ecb 6f5f | 32 775e (0) 77d2 (0) 738c (0) 7290 (0)\n003 3 4d10 4447 461c | 23 4ac7 (0) 4a8b (0) 4bcf (0) 49cd (0)\n004 2 5308 51db | 8 574f (0) 524d (0) 53a8 (0) 53fe (0)\n005 3 58ed 5823 5b63 | 3 5b63 (0) 5823 (0) 58ed (0)\n============ DEPTH: 6 ==========================================\n006 2 5efb 5f00 | 2 5efb (0) 5f00 (0)\n007 1 5cd2 | 1 5cd2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","private_key":"3ded975bfe84c252cd54697144ffcd0ac6978fc1c80ab6663d4c0b2cb7338d2a","name":"node_5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","services":["streamer"],"enable_msg_events":true,"port":34077},"up":true}},{"node":{"info":{"id":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","name":"node_ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","enode":"enode://909113f035bbc97985e3d769ea806d56160d43b644c84bde7c5f980a314c36cf1016ceab475ccd4f4bda05f0e4143c2d74ac98f7f9ccb910d7864406f2f8865e@127.0.0.1:0","enr":"0xf88fb840148b90cf90d9ca81f69924d5705f155d5adc230d87a2b48d4b1bdedf4936c9a8421003eef921a088bbc6e7b5cdf66d0f50b88dadfff07ee128418404cc5314c90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102909113f035bbc97985e3d769ea806d56160d43b644c84bde7c5f980a314c36cf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rZiZ94ZZSS7CSKiEknp1fz87TnbNKrxGrYdmJR/Yr+0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ad9899\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 2a97 18f6 0067 6f5f | 146 314a (0) 30be (0) 3089 (0) 3237 (0)\n001 6 fe31 ff36 f7ba ef07 | 63 fbc8 (0) fbf5 (0) f925 (0) fe21 (0)\n002 3 9076 898d 886a | 20 96fc (0) 976e (0) 959f (0) 915d (0)\n003 6 b5b2 b7ca bb90 badd | 17 bcc6 (0) b820 (0) b897 (0) b95d (0)\n004 4 a369 a46d a6fb a653 | 5 a46d (0) a6fb (0) a653 (0) a34e (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 3 af02 ae2b aeb4 | 3 af02 (0) aeb4 (0) ae2b (0)\n007 1 ac4d | 1 ac4d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","private_key":"c8586e1c253506ff671677e75e7d636dfd48f90798d59c6b42bfb77250056cba","name":"node_ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","services":["streamer"],"enable_msg_events":true,"port":33071},"up":true}},{"node":{"info":{"id":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","name":"node_c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","enode":"enode://76942d9ce0d444b30dbb6499273c4aca434d908d0bbe244316cd5621a4921967b8be1024dc9585544e08d91e53aa2e00ad209181beffa6caccc40b66f975dc55@127.0.0.1:0","enr":"0xf88fb840bf9df113c1a80e0937a0f28c991d4bb2c73ebc27ac1aa51c6db9806d3de0ec1439b8249fa929666c4c5b8cfee951e52e670ec77c7a2d5ec4ecd12bc3609e127e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10376942d9ce0d444b30dbb6499273c4aca434d908d0bbe244316cd5621a4921967","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yDK0rWShfaS3lv/KxkbCqmZrJ2qrt+s7/nmB1kpNpAI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c832b4\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 18f6 0067 2a97 2995 | 146 314a (0) 30be (0) 3089 (0) 3237 (0)\n001 4 898d 886a ac4d ad98 | 47 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n002 9 e514 ec52 ef1b ef07 | 37 fbf5 (0) fbc8 (0) f925 (0) ff36 (0)\n003 4 d3b0 df1e d887 d863 | 11 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n004 3 c620 c786 c441 | 9 c1f9 (0) c26f (0) c6cf (0) c620 (0)\n005 1 cc20 | 1 cc20 (0)\n006 2 ca04 caf6 | 2 ca04 (0) caf6 (0)\n============ DEPTH: 7 ==========================================\n007 1 c9f5 | 1 c9f5 (0)\n008 1 c898 | 1 c898 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","private_key":"c35521b3ce161ef9f4891093a65fe799e2f359c3418a145bbe0b8d59330fd18a","name":"node_c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","services":["streamer"],"enable_msg_events":true,"port":41037},"up":true}},{"node":{"info":{"id":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","name":"node_461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","enode":"enode://7edde69d3daf04827701687380c3a97d52cdc2358ddae6c097ff34bc5eeeeac0aa926cd6fb97c888a0c344fb17b07929f21de48835de2a3c805e343f66814cf2@127.0.0.1:0","enr":"0xf88fb84011bf54c1453a78871d09dfbf3b20f2efedcd347c5a3fce32edf95929f083231527adad0d0e0ceb8cad68d1bcb7dc5c32ead8fd94aca4aca3e9bb6abc8b1bce3b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027edde69d3daf04827701687380c3a97d52cdc2358ddae6c097ff34bc5eeeeac0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RhzJ8GTm9PBv844NHz8A74gHujHHJY5FPMaC6VUbscY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 461cc9\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ad98 886a ef07 c9f5 | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 7 0067 3f94 3237 3373 | 76 314a (0) 30be (0) 3089 (0) 3237 (0)\n002 3 6103 6ecb 6f5f | 32 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n003 6 5308 51db 58ed 5f00 | 15 5efb (0) 5f00 (0) 5cd2 (0) 5db0 (0)\n004 2 4e5a 4d10 | 11 4ac7 (0) 4a8b (0) 4bcf (0) 49cd (0)\n005 2 41d9 4109 | 2 41d9 (0) 4109 (0)\n006 3 4558 44a1 4447 | 4 4559 (0) 4558 (0) 44a1 (0) 4447 (0)\n007 2 4782 47bf | 2 4782 (0) 47bf (0)\n008 1 46fe | 1 46fe (0)\n============ DEPTH: 9 ==========================================\n009 1 4646 | 1 4646 (0)\n010 1 4636 | 1 4636 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","private_key":"af9f5d0414462a64a90ff3a2fee02742a99043e9971bd04754fbca5a117064c8","name":"node_461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","services":["streamer"],"enable_msg_events":true,"port":45431},"up":true}},{"node":{"info":{"id":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","name":"node_ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","enode":"enode://2d13e3fbcf2f401951af67ee410e6785e91904619b76822ce4337ddae7965c663773cfd671554e0c6ede7518907b8911f6676b5565313b08c451c90a8dcba823@127.0.0.1:0","enr":"0xf88fb84024126a4f41bfdaa7a672735c056cbdcd6917db518e518e9ad6d43d687a7275bb61f0232ccea5eeefd3ee8ffa770501c2a89ba614f63ec29b1f2ac08ba2bb5b8c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032d13e3fbcf2f401951af67ee410e6785e91904619b76822ce4337ddae7965c66","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7we+VZkU7EtZMNkNjYtvMtq566I6zDbxTVEjB/mXQ0g=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ef07be\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2a97 2995 0067 6f5f | 146 314a (0) 30be (0) 3089 (0) 3237 (0)\n001 4 8f21 886a badd ad98 | 47 976e (0) 96fc (0) 959f (0) 915d (0)\n002 3 df1e c9f5 c832 | 26 d1d7 (0) d299 (0) d3b0 (0) d7ac (0)\n003 6 ff36 fe31 f2d5 f629 | 19 fbc8 (0) fbf5 (0) f925 (0) ff36 (0)\n004 2 e5d7 e514 | 8 e027 (0) e7fa (0) e775 (0) e5ad (0)\n005 4 eb98 e854 e883 e8ef | 4 eb98 (0) e854 (0) e883 (0) e8ef (0)\n006 2 ed2d ec52 | 2 ed2d (0) ec52 (0)\n007 1 ee5e | 1 ee5e (0)\n============ DEPTH: 8 ==========================================\n008 1 efea | 1 efea (0)\n009 0 | 0\n010 0 | 0\n011 1 ef1b | 1 ef1b (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","private_key":"cffbac62882babf0b4dfc14cd40307088b5ce5ccaa138a4f172914575e6393a3","name":"node_ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","services":["streamer"],"enable_msg_events":true,"port":38781},"up":true}},{"node":{"info":{"id":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","name":"node_006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","enode":"enode://f73c1f0ca14af6b0b8fb1eba1c49d0d653a7833cb03dd69d112260a24154d15515ed2fa276e27d6e70ac92d7f11b594ce55a25be21a9637d56289ac3b2294306@127.0.0.1:0","enr":"0xf88fb8400367dfb7465473b46b2a6502bf1f47fd2b2fe0f11e74a750c1c44e3d798efceb606a9f68a49de5f6c4d6a5606653c80257a8f993dd8f600042cbb5cea1b908ab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f73c1f0ca14af6b0b8fb1eba1c49d0d653a7833cb03dd69d112260a24154d155","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AGcn3G9ZsSCyTBe45j+A7zQ5EF+BGP/u1AjxBaSO5gw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 006727\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 886a ad98 c832 fe31 | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 4 461c 51db 58ed 5db0 | 70 775e (0) 77d2 (0) 7290 (0) 738c (0)\n002 3 2c38 2a97 2995 | 32 314a (0) 30be (0) 3089 (0) 3237 (0)\n003 6 11d4 14df 1704 18f6 | 22 13d6 (0) 103b (0) 11d4 (0) 154b (0)\n004 7 0af9 0a00 0b72 0cf5 | 11 0af9 (0) 0a00 (0) 0b72 (0) 0d8a (0)\n005 5 0661 0743 0438 045b | 6 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n============ DEPTH: 6 ==========================================\n006 3 02d8 0328 03cc | 3 02d8 (0) 0328 (0) 03cc (0)\n007 0 | 0\n008 1 00c6 | 1 00c6 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","private_key":"5eb85f550595a12882aba16bce31535a88504fca1f6f49492226c3baed943110","name":"node_006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","services":["streamer"],"enable_msg_events":true,"port":45081},"up":true}},{"node":{"info":{"id":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","name":"node_f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","enode":"enode://17cec2abc9a0e660f7fe13e3aab5154a566cbbde2e9e0abea28d40e39eb63ec0a917c1040c10c1b2522fc87afce58949b5d8512d66bd953577e7c8ffe29b2727@127.0.0.1:0","enr":"0xf88fb840d12213ec977f33e55ead3ff1c891eadaf9d35e5d9f80da8f41e1723cfc228d17411a705b829183356338bfb66a6e6a3f22d4cd095d3e916ee50c79501b6a92f20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10317cec2abc9a0e660f7fe13e3aab5154a566cbbde2e9e0abea28d40e39eb63ec0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"97rvh2piuS6+XKnsagheDrVP0x4kJeZi7sdH3zzXdZI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f7baef\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6f5f 58ed 5db0 0067 | 146 775e (0) 77d2 (0) 7125 (0) 7290 (0)\n001 6 8f21 886a ac4d ad98 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 2 c832 c9f5 | 26 d3b0 (0) d299 (0) d1d7 (0) d7ac (0)\n003 4 e514 ec52 ef1b ef07 | 18 e027 (0) e7fa (0) e775 (0) e5ad (0)\n004 4 fbf5 f925 ff36 fe31 | 6 fbc8 (0) fbf5 (0) f925 (0) ff36 (0)\n005 3 f31c f27f f2d5 | 3 f31c (0) f27f (0) f2d5 (0)\n006 3 f45f f456 f5b2 | 6 f4e0 (0) f45f (0) f456 (0) f528 (0)\n007 1 f629 | 1 f629 (0)\n============ DEPTH: 8 ==========================================\n008 1 f773 | 1 f773 (0)\n009 1 f7fa | 1 f7fa (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","private_key":"bd8f1323739a31a9df6d3249c8a7c3b7f087513627688a48ae214cdf08c40828","name":"node_f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","services":["streamer"],"enable_msg_events":true,"port":35911},"up":true}},{"node":{"info":{"id":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","name":"node_c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","enode":"enode://ef16c8f953e0c91672402036963d6771c490e9e0b99eca6f2d42e524b671f062bd499b0de306fe5eed171f48df7bc9f34bd943010925328c9d60ef086579968b@127.0.0.1:0","enr":"0xf88fb840262713d5977cf6a3bafd1062509bc016e5c191c3afe9c7a08a48ed97868b7d933211c89aba69029de45bd8e766b7ff6f2d419b47a5c830ca236eeb4da5ffee270183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ef16c8f953e0c91672402036963d6771c490e9e0b99eca6f2d42e524b671f062","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yfWsr7v4xmZH3gWwhI15RR7uSQcJ1T8Rj8IFFBDMggM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c9f5ac\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6f5f 461c 58ed 5308 | 146 02d8 (0) 0328 (0) 03cc (0) 00c6 (0)\n001 5 886a b7ca badd ba88 | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 12 e5d7 e514 ec52 ef1b | 37 e027 (0) e775 (0) e7fa (0) e5ad (0)\n003 6 d640 df1e daec db6a | 11 d1d7 (0) d299 (0) d3b0 (0) d7ac (0)\n004 3 c441 c620 c786 | 9 c26f (0) c1f9 (0) c6cf (0) c620 (0)\n005 1 cc20 | 1 cc20 (0)\n006 2 ca04 caf6 | 2 ca04 (0) caf6 (0)\n============ DEPTH: 7 ==========================================\n007 2 c898 c832 | 2 c898 (0) c832 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","private_key":"a8e9d35f1da0d512396196bd7847bf29fbc3e45dab549c77015562a5cd6c1d01","name":"node_c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","services":["streamer"],"enable_msg_events":true,"port":36247},"up":true}},{"node":{"info":{"id":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","name":"node_fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","enode":"enode://29c3a81b46834e3d0f6c4169b27c4ce7dea09b4f8ecdf8cafa3b4705fa9fd804d95a4d7f8639754533998af29d1c1681ffd26bf51aa4576a6bf66fd4e59c4636@127.0.0.1:0","enr":"0xf88fb8406318ee2852832b8479302a86a8c52101e4032df0a3751458a30005834cac33085a7c35b08af5014dc752719fbe5642f4752139c909996b751458d0b79ff759420183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10229c3a81b46834e3d0f6c4169b27c4ce7dea09b4f8ecdf8cafa3b4705fa9fd804","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/jFmeeyg4OuCMyWBKlb9J9oCZTsGraL9A7J1Ab2oNxo=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fe3166\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0b72 0067 0743 0451 | 146 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n001 6 8f21 886a ad98 b7ca | 47 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n002 3 c786 c832 c9f5 | 26 d1d7 (0) d299 (0) d3b0 (0) d7ac (0)\n003 3 e514 ef1b ef07 | 18 e027 (0) e775 (0) e7fa (0) e5ad (0)\n004 5 f2d5 f528 f629 f7fa | 13 f31c (0) f27f (0) f2d5 (0) f4e0 (0)\n005 3 fbc8 fbf5 f925 | 3 fbc8 (0) fbf5 (0) f925 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 ff36 | 1 ff36 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 fe21 | 1 fe21 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","private_key":"4cb7e774b4209f69e673c60ecdf42b2d97a6c7acee80dac037fc744274c03d0c","name":"node_fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","services":["streamer"],"enable_msg_events":true,"port":36479},"up":true}},{"node":{"info":{"id":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","name":"node_51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","enode":"enode://c015318af105b1c0aaec79e08f9e9487e8c204c3decc0f161307ee66a71cc5eb7857085301967316982edbd1b3af1895278747273ba557b313f39de6467cef30@127.0.0.1:0","enr":"0xf88fb84065c1481d82bab43cf2b73a6409653ca03d1143d68af8825b5abe412f0ffc61ac5d2f9f6521e6f02a0242b8fb6bff45bbfe129f271e03dd3a7df92a3ddf9a9b990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c015318af105b1c0aaec79e08f9e9487e8c204c3decc0f161307ee66a71cc5eb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UdsRSlKCf1t0CIvQ/IfTUinndA59EhvXaZKYOWUWqIA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 51db11\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 b7ca badd c9f5 fe31 | 110 9852 (0) 9890 (0) 9fa0 (0) 9d0f (0)\n001 7 39d1 3f94 2101 2a97 | 76 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n002 3 6103 6ecb 6f5f | 32 775e (0) 77d2 (0) 7290 (0) 738c (0)\n003 4 4d10 4109 4646 461c | 23 4a8b (0) 4ac7 (0) 4bcf (0) 49cd (0)\n004 7 5efb 5f00 5cd2 5db0 | 7 5efb (0) 5f00 (0) 5cd2 (0) 5db0 (0)\n005 1 574f | 1 574f (0)\n============ DEPTH: 6 ==========================================\n006 5 524d 53a8 53fe 534b | 5 524d (0) 53a8 (0) 53fe (0) 534b (0)\n007 0 | 0\n008 1 512e | 1 512e (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","private_key":"463982e5e17d8853a2119047040024cc3e05d9d4fed44bca081b9a757de79e78","name":"node_51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","services":["streamer"],"enable_msg_events":true,"port":46747},"up":true}},{"node":{"info":{"id":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","name":"node_58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","enode":"enode://35dd66ee032741a2c01c7184c5d372ac89b1bfa19121e0208b6bc4554e26a48e2866d923d323b999aa49db2e9c87ad0ba78da81a35d099d44b2ac12e4577c026@127.0.0.1:0","enr":"0xf88fb840043496ba46ff1222fe7d2927803a795654e938ed8bb711b917672f048ef3180357b54d37aa9fd541158c55dea24adf4c62ed7d291e7875c0d5f76a14a12be1670183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10235dd66ee032741a2c01c7184c5d372ac89b1bfa19121e0208b6bc4554e26a48e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WO10aVv1J7rJo1DIbTBeU+CMSZl5XhHNOyo29c0l1jc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 58ed74\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c9f5 ef1b f7ba b7ca | 110 e027 (0) e7fa (0) e775 (0) e5ad (0)\n001 5 3f94 35e6 0b72 0e5e | 76 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n002 3 6103 6ecb 6f5f | 32 775e (0) 77d2 (0) 7290 (0) 738c (0)\n003 3 4d10 4109 461c | 23 4ac7 (0) 4a8b (0) 4bcf (0) 49cd (0)\n004 3 53fe 5308 51db | 8 574f (0) 524d (0) 53a8 (0) 53fe (0)\n005 4 5db0 5cd2 5efb 5f00 | 4 5efb (0) 5f00 (0) 5cd2 (0) 5db0 (0)\n============ DEPTH: 6 ==========================================\n006 1 5b63 | 1 5b63 (0)\n007 0 | 0\n008 1 5823 | 1 5823 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","private_key":"6eeff6ab23e21598ffa4724e7f1c6d198e55378b5315c3e87a2b049bdec8dbba","name":"node_58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","services":["streamer"],"enable_msg_events":true,"port":46637},"up":true}},{"node":{"info":{"id":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","name":"node_baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","enode":"enode://4c1086d46d650500110758f88911d8de08c282320cb28b478685c979ba504a460324e40bf1c4d18435044daf1db70bf50fbad5e5bc783f75141ee51671da1c2a@127.0.0.1:0","enr":"0xf88fb84011f51bcd70f0e65f6e7ff877cd39d60fca04b7df569eecb3f9200c5983c30c66090beb6cfac47e9a17f3d69aa7771c4d48640fc4436bbb1499789941189d0bb00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024c1086d46d650500110758f88911d8de08c282320cb28b478685c979ba504a46","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ut3HeK6pes27tbyZdEpVRaurn2BHyB8yh2FkUoesORw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: baddc7\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0e5e 5308 51db 58ed | 146 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n001 5 c9f5 ef07 ef1b fe31 | 63 fbf5 (0) fbc8 (0) f925 (0) ff36 (0)\n002 4 9d0f 90a8 898d 886a | 20 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n003 5 a369 aeb4 ae2b ad98 | 10 a46d (0) a6fb (0) a653 (0) a34e (0)\n004 6 b2a5 b02b b5b2 b626 | 8 b02b (0) b2b5 (0) b2a5 (0) b502 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 4 b820 b897 b95d b911 | 4 b897 (0) b820 (0) b95d (0) b911 (0)\n007 1 bb90 | 1 bb90 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 ba88 | 1 ba88 (0)\n010 1 baf2 | 1 baf2 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","private_key":"1b341e606e667d2dee5a1c605b8ab560bf7350972aac6daa482f10d3fcced991","name":"node_baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","services":["streamer"],"enable_msg_events":true,"port":42801},"up":true}},{"node":{"info":{"id":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","name":"node_b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","enode":"enode://830e8810ca164c9d2a65e2235aba3b15b5907afbf93dabb8c5a00c2a21f50b3a0f3f17a4add3a9dc11b898dfaffb40ed51faeaf15f8e8ca83bc7f9bdb499650b@127.0.0.1:0","enr":"0xf88fb8409a15792c3e8fda0fc6163a89bf642573178c1828ebfac480954ce5384512a9144d6ab33233a340364e8b2b24cbce1de306889b420de971650d2efea448ac33f10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103830e8810ca164c9d2a65e2235aba3b15b5907afbf93dabb8c5a00c2a21f50b3a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"t8r+1B2sAd1Z4ryuqqtVHr/quOqh+XwYZv4N2udygHs=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b7cafe\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0e5e 3f94 35e6 5308 | 146 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n001 5 c9f5 e514 ef1b f7ba | 63 d1d7 (0) d299 (0) d3b0 (0) d7ac (0)\n002 6 90a8 9d0f 8f21 898d | 20 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n003 3 a369 ae2b ad98 | 10 a46d (0) a6fb (0) a653 (0) a34e (0)\n004 5 bcc6 b911 bb90 ba88 | 9 bcc6 (0) b897 (0) b820 (0) b95d (0)\n005 3 b2b5 b2a5 b02b | 3 b2b5 (0) b2a5 (0) b02b (0)\n006 2 b502 b5b2 | 2 b502 (0) b5b2 (0)\n============ DEPTH: 7 ==========================================\n007 2 b626 b65e | 2 b626 (0) b65e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","private_key":"8734418063f761c7aebb5bd811d651e4eefd0a332a238b3407eab389d174d344","name":"node_b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","services":["streamer"],"enable_msg_events":true,"port":35765},"up":true}},{"node":{"info":{"id":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","name":"node_ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","enode":"enode://e65f236dc029e0361b5115dc919118463ccd09476638ef7c4cf88151a41986426bd3623c7dee6acc1cb636f084e8f2c1cd6a783627bbf0cb45ddbafd57e1c4d2@127.0.0.1:0","enr":"0xf88fb840673785f36dc917ec90991ef9b8599a3710d9a0c7d36ea2aecdc3ebc730f1f9531104d6620e68027de87d0f8574a91458fb0346324b22795901a3dffe062dc4540183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e65f236dc029e0361b5115dc919118463ccd09476638ef7c4cf88151a4198642","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uohOXPoe5us4IXGBcR4Buww3s+M9FCTfqJ7T4p72IFs=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ba884e\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0e5e 3f94 3373 35e6 | 146 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n001 4 c9f5 ef1b e514 fe31 | 63 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n002 4 90a8 8f21 898d 886a | 20 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n003 4 a369 ae2b ac4d ad98 | 10 a6fb (0) a653 (0) a46d (0) a34e (0)\n004 6 b2a5 b02b b5b2 b626 | 8 b2b5 (0) b2a5 (0) b02b (0) b502 (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 3 b897 b820 b911 | 4 b820 (0) b897 (0) b95d (0) b911 (0)\n007 1 bb90 | 1 bb90 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 2 baf2 badd | 2 baf2 (0) badd (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","private_key":"ea93ee284f5d410641b1a5125b7deca5a425eb767d97519816ce904c9a5109d4","name":"node_ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","services":["streamer"],"enable_msg_events":true,"port":41725},"up":true}},{"node":{"info":{"id":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","name":"node_53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","enode":"enode://7faeabed37c1721532d3cf55386ceb61d7127283ea741074062c7387ae1b7c9ff851941e9c92460053143e3f856fd6defb1749214ca54c839ac64fe96a8a0c13@127.0.0.1:0","enr":"0xf88fb84025b6f7edf9c4cdbcc94eaa1b1c4f4a202e55a443e4ace9d9896d487de9e2b050369275954c54148b295eb47404201100c10320546a8e4ad3516ba4c280288ea20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037faeabed37c1721532d3cf55386ceb61d7127283ea741074062c7387ae1b7c9f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UwhwhHCMxe5jrEWbGPoQrlKoIxObTsumyGkdSTTy+XE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 530870\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c9f5 e514 ef1b b7ca | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 5 3f94 39d1 3630 1e2a | 76 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n002 6 7dd3 605a 6103 6337 | 32 77d2 (0) 775e (0) 7290 (0) 738c (0)\n003 5 4e5a 4d10 4646 461c | 23 4559 (0) 4558 (0) 44a1 (0) 4447 (0)\n004 5 5f00 5cd2 5db0 5823 | 7 5efb (0) 5f00 (0) 5cd2 (0) 5db0 (0)\n005 1 574f | 1 574f (0)\n006 2 512e 51db | 2 512e (0) 51db (0)\n007 1 524d | 1 524d (0)\n============ DEPTH: 8 ==========================================\n008 2 53a8 53fe | 2 53a8 (0) 53fe (0)\n009 1 534b | 1 534b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","private_key":"9d1b128357783fdd85833562ee5ae70767a77d42c4a39b16e33cfceae74fe8cd","name":"node_53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","services":["streamer"],"enable_msg_events":true,"port":43957},"up":true}},{"node":{"info":{"id":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","name":"node_0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","enode":"enode://9de20b1b75da752d129b0fbd52eda941af9eceb5d14f591ba77175f5f153ab996b82146163328ca097a16b7fb0ed20190dd92ac98b14c785e70658a8c5be1929@127.0.0.1:0","enr":"0xf88fb8406df78c1282722ffe5f759e7116db3a62ef5c3b47ea34e4cef4aa028184b113d7735724260b3e1bf01753094e4c48687c79e5c9e7c7f58b547bec67fbeb7c49c80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039de20b1b75da752d129b0fbd52eda941af9eceb5d14f591ba77175f5f153ab99","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Dl4LsTg7LsVpsVeh0q5pAFkquJKig2f1YTpOKcsmUIg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e5e0b\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 90a8 b7ca ba88 badd | 110 8025 (0) 82f9 (0) 82dd (0) 849b (0)\n001 3 4d10 58ed 5308 | 70 7b90 (0) 7a60 (0) 7920 (0) 7e04 (0)\n002 4 2a97 3f94 3373 35e6 | 32 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n003 5 1704 14df 11d4 18f6 | 22 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n004 4 0743 0451 03cc 0067 | 11 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n005 3 0af9 0a00 0b72 | 3 0af9 (0) 0a00 (0) 0b72 (0)\n006 3 0d8a 0cf5 0c64 | 5 0de3 (0) 0d8a (0) 0cf5 (0) 0c28 (0)\n============ DEPTH: 7 ==========================================\n007 2 0ff2 0fc5 | 2 0fc5 (0) 0ff2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","private_key":"46271e4b8bcd11ac7ea284e6e69d5fbfdab7754d5a04213ffd66697dfea46bcd","name":"node_0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","services":["streamer"],"enable_msg_events":true,"port":36611},"up":true}},{"node":{"info":{"id":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","name":"node_ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","enode":"enode://eac5fa35e65602ec70fd918c6e95a35d1a117b246fe5000ae4bafc6295f7671e4c06e415eb09e684abf780512fc18b2d866c3b71bb3b3c9d43fc4398da38f10e@127.0.0.1:0","enr":"0xf88fb8400fa87d3bd5c13cdf564484f96122c2ebb1bdcce71fdd18d75afe908594a3866c456fe3a118e4261abc0ecce7cbb42c18f1d8566d6c83c5ebd5d07919eb17d5a40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102eac5fa35e65602ec70fd918c6e95a35d1a117b246fe5000ae4bafc6295f7671e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7xtwvwkLyZlLHUXigSxW7LQwqJw0akNr0QiAvNpwA1E=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ef1b70\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 4d10 58ed 5308 3f94 | 146 7e04 (0) 7dbb (0) 7dc2 (0) 7dd3 (0)\n001 8 8f21 88a1 90a8 a369 | 47 8025 (0) 82dd (0) 82f9 (0) 849b (0)\n002 4 df1e d887 c9f5 c832 | 26 d299 (0) d3b0 (0) d1d7 (0) d7ac (0)\n003 9 f27f f2d5 f5b2 f629 | 19 f925 (0) fbf5 (0) fbc8 (0) ff36 (0)\n004 4 e775 e5d7 e54b e514 | 8 e027 (0) e7fa (0) e775 (0) e5ad (0)\n005 3 eb98 e8ef e854 | 4 e883 (0) e8ef (0) e854 (0) eb98 (0)\n006 2 ed2d ec52 | 2 ed2d (0) ec52 (0)\n007 1 ee5e | 1 ee5e (0)\n============ DEPTH: 8 ==========================================\n008 1 efea | 1 efea (0)\n009 0 | 0\n010 0 | 0\n011 1 ef07 | 1 ef07 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","private_key":"108631b63afbc1b7d0f969a4d149576ac6bc3f55beffefa542345c2ff98ac10b","name":"node_ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","services":["streamer"],"enable_msg_events":true,"port":40971},"up":true}},{"node":{"info":{"id":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","name":"node_1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","enode":"enode://35cb12ad89b825a27459675abdf8b7d44cf40ebf61f8a6c848840c068f6cd8a7604420513fa6d34094211e2874d871f3664257b8bbde8d919848cf1ee30c9173@127.0.0.1:0","enr":"0xf88fb840eeddfc21dd882af77ed82462e015105a4fee9ec50091947b3ffb91eadd0bb4f061e244bedab8fcf2d9bd87b0d1c83cbaa50258bc33fac86e0dabb2d263e2f6c40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10335cb12ad89b825a27459675abdf8b7d44cf40ebf61f8a6c848840c068f6cd8a7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HirKk/qUQqADSujSlVMN3hb8v6jDcifi5oY7q7D4fDQ=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1e2aca\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e514 ef1b | 110 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n001 4 6f5f 51db 5308 4d10 | 70 7290 (0) 738c (0) 7125 (0) 77d2 (0)\n002 7 2c38 3373 3237 3630 | 32 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n003 7 0451 0067 0b72 0af9 | 22 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n004 8 11d4 103b 13d6 165f | 12 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n005 2 1a2a 18f6 | 4 1b83 (0) 1a2a (0) 19fa (0) 18f6 (0)\n006 3 1c8a 1c9c 1c47 | 3 1c47 (0) 1c8a (0) 1c9c (0)\n============ DEPTH: 7 ==========================================\n007 2 1f67 1f85 | 2 1f85 (0) 1f67 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","private_key":"ca298ecc80c2176e1dce1fbf5ccfa90cf337a507c12be6f986d2de3350d01f28","name":"node_1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","services":["streamer"],"enable_msg_events":true,"port":34411},"up":true}},{"node":{"info":{"id":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","name":"node_e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","enode":"enode://fd27bc291857dfd075b45f5afda76cffc42c2fd3c6cbbd041160f4468daccd297f427de0a2d6d348a61fd628559798012d4a700d99f5d9c2ccefc12424e71a9e@127.0.0.1:0","enr":"0xf88fb8406833bd658c2dee1b0266e4979790bf604d3a078226e16c2bfcfbba4b009599331864bee8af31e7b121cd49e9caf0d21533f91bc0cdac69a7ff3660f0093e1a320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fd27bc291857dfd075b45f5afda76cffc42c2fd3c6cbbd041160f4468daccd29","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5RSc7dmQBy8qqpc1qSWfKJc8RYdmYMLYasEF5WzKjmg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e5149c\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 5308 4d10 3f94 3373 | 146 775e (0) 77d2 (0) 7290 (0) 738c (0)\n001 7 8f21 88a1 90a8 ae2b | 47 849b (0) 8505 (0) 8025 (0) 82dd (0)\n002 4 df1e d887 c832 c9f5 | 26 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n003 5 f5b2 f7ba f925 ff36 | 19 fbc8 (0) fbf5 (0) f925 (0) ff36 (0)\n004 4 eb98 ec52 ef07 ef1b | 10 e854 (0) e883 (0) e8ef (0) eb98 (0)\n005 1 e027 | 1 e027 (0)\n006 2 e7fa e775 | 2 e7fa (0) e775 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 e5ad e5d7 | 2 e5ad (0) e5d7 (0)\n009 2 e547 e54b | 2 e547 (0) e54b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","private_key":"4f4ad194adef3b2bc3e2726a7b609ae7bda912d4e2086f1a13e4c4ba668c60ac","name":"node_e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","services":["streamer"],"enable_msg_events":true,"port":42997},"up":true}},{"node":{"info":{"id":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","name":"node_35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","enode":"enode://6c8c3cbf0d25b5021ca9930a6ec6a174a1408d306e91b340285357ce11ef1be7595292e2c9d678ecaad46e85c67e2548b6f8d001240ab47711a7bf12d84ccf82@127.0.0.1:0","enr":"0xf88fb84040cae853fa9515e6bbe0adcbf29a86d0a760543dcbc0e6d834dbbf0fa17b67074b1ac65a884606be1e2fd6bce5dee242940fccc40d35cb5189481b6a539a036f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026c8c3cbf0d25b5021ca9930a6ec6a174a1408d306e91b340285357ce11ef1be7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Neax0x9ZTAa3WVJUNKfnF+vm8nygGI8kftEkdmSlBWM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 35e6b1\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 8f21 90a8 ae2b ba88 | 110 849b (0) 8505 (0) 8025 (0) 82dd (0)\n001 2 58ed 4d10 | 70 7920 (0) 7a60 (0) 7b90 (0) 7e04 (0)\n002 2 0e5e 1e2a | 44 07a8 (0) 0743 (0) 0661 (0) 0438 (0)\n003 7 2101 2d36 2c79 2c38 | 15 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n004 3 39d1 3b78 3f94 | 7 3b88 (0) 3b78 (0) 39d1 (0) 3ec5 (0)\n005 5 314a 3089 3373 33b5 | 6 314a (0) 30be (0) 3089 (0) 3237 (0)\n============ DEPTH: 6 ==========================================\n006 3 3630 378e 3780 | 3 378e (0) 3780 (0) 3630 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","private_key":"2a62a26311a24b08194c69ebc1ed52e217472f0342db63d881497f987b889e06","name":"node_35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","services":["streamer"],"enable_msg_events":true,"port":46321},"up":true}},{"node":{"info":{"id":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","name":"node_3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","enode":"enode://218760aa13e26a18b74d2337eef240198ccd4014e8a65b603ed92ccdb48ccd8b943f256eb6e58c6fbdce24b409b2775b2d6004401320c919188e7fcb09244fd1@127.0.0.1:0","enr":"0xf88fb840177a2dfc1f89c96d70eddc71b4f1b0bac49f90fee6d0eac21cbb5d5d2405a3a942e28c9535399cbe5914256c761ecb4a5f3f6563090d48314533f0c5234aa2dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103218760aa13e26a18b74d2337eef240198ccd4014e8a65b603ed92ccdb48ccd8b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"P5RpV9kQF5x+GoPEQ2mqz8MfVyexpkIaAcipeMzTSaI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3f9469\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 e514 ef1b 90a8 a369 | 110 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n001 5 5308 51db 58ed 461c | 70 738c (0) 7290 (0) 7125 (0) 77d2 (0)\n002 3 0e5e 0b72 1e2a | 44 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n003 7 20ae 2101 2a0a 2a97 | 15 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n004 7 3089 3237 33b5 3373 | 10 314a (0) 30be (0) 3089 (0) 3237 (0)\n005 3 3b88 3b78 39d1 | 3 3b88 (0) 3b78 (0) 39d1 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 3ec5 3efc 3e8e | 3 3ec5 (0) 3efc (0) 3e8e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","private_key":"de36f03ed3bf0ec0a7710fc3c4999f66c685bbfddcfb8e9d4317b92303a74e11","name":"node_3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","services":["streamer"],"enable_msg_events":true,"port":33705},"up":true}},{"node":{"info":{"id":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","name":"node_4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","enode":"enode://9fecc8c4179e541e1fdf6df9acbe9fae124b26643c32c708bf43248ffa03ddc74085be1fbc7c6b26380bd54278b407e48f5ec005564f3715ddefef423e750ba0@127.0.0.1:0","enr":"0xf88fb84029f04153f5367d5275a8df9d644838126a5b32d2c4a8f463c54a8609f02f5ad3544851613d9bb9b0bd12cf4b0dfc60c0172093608372dfa04498cc981d46ed330183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029fecc8c4179e541e1fdf6df9acbe9fae124b26643c32c708bf43248ffa03ddc7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TRA+xa/uVZpakkLo1lC2cwHq7BDpb8LxhONNSFVBCKI=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d103e\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 90a8 ef1b e514 | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 9 1e2a 0e5e 0b72 3630 | 76 13d6 (0) 103b (0) 11d4 (0) 1672 (0)\n002 3 6f5f 6ecb 6103 | 32 7125 (0) 7290 (0) 738c (0) 77d2 (0)\n003 5 5308 51db 5efb 5db0 | 15 5cd2 (0) 5db0 (0) 5f00 (0) 5efb (0)\n004 3 461c 4646 4109 | 12 4558 (0) 4559 (0) 44a1 (0) 4447 (0)\n005 2 49ea 4990 | 6 4a8b (0) 4ac7 (0) 4bcf (0) 49cd (0)\n006 1 4e5a | 1 4e5a (0)\n007 1 4c9e | 1 4c9e (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 2 4d6b 4d59 | 2 4d6b (0) 4d59 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","private_key":"ad04bf4b2168140a7de043f21b791b383b022dac606699911e318f75f7e012a6","name":"node_4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","services":["streamer"],"enable_msg_events":true,"port":33673},"up":true}},{"node":{"info":{"id":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","name":"node_33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","enode":"enode://50cec87bfc82507362c651f325c755f33d697e3e496e3eb72eb1c8f641ced88174ccc2b56cb7eba56579b61aceb18409c188d359f42f940805f5719740feb48e@127.0.0.1:0","enr":"0xf88fb840fd82bf7592c1d6a7814691efa8bd411452d956b60e269042831484ddceacc538104f0cb3828b7c706e383762f656ed7ec9fd288aa59b3c8d81f301a7a7f324f10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10250cec87bfc82507362c651f325c755f33d697e3e496e3eb72eb1c8f641ced881","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"M3N991u6wbQcY/Beos8VI7ly3xfyK9oCbbhKSaw14eM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 33737d\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ef1b e514 ae2b a369 | 110 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n001 3 461c 4109 4d10 | 70 7b90 (0) 7a60 (0) 7920 (0) 7e04 (0)\n002 4 1e2a 0e5e 0a00 0b72 | 44 13d6 (0) 103b (0) 11d4 (0) 17db (0)\n003 5 20ae 2c38 2c79 2995 | 15 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n004 4 3b78 39d1 3e8e 3f94 | 7 3b88 (0) 3b78 (0) 39d1 (0) 3ec5 (0)\n005 4 35e6 378e 3780 3630 | 4 378e (0) 3780 (0) 3630 (0) 35e6 (0)\n006 2 314a 3089 | 3 314a (0) 30be (0) 3089 (0)\n============ DEPTH: 7 ==========================================\n007 1 3237 | 1 3237 (0)\n008 1 33b5 | 1 33b5 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","private_key":"9f972993b709e1ac19e7f49e4661fb3fb6e83534f66a12560073a6b5f59e7a0c","name":"node_33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","services":["streamer"],"enable_msg_events":true,"port":45909},"up":true}},{"node":{"info":{"id":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","name":"node_0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","enode":"enode://54b6d4a2a040be9a1af28fe91fcc2b187d4d6db27d970a10e744a69da4ac97260a7c57234a2c4e8ca82d46c4c72fd473d0023c622618c46fa794574590533fc8@127.0.0.1:0","enr":"0xf88fb840557305af7ee9557cc3f0d4e0ddc142adc3005a0b56e35a383a8f246c5b42adb234b65621b68d96643290b25ed4e6fc5777c5fa7a380d5f7806b6778a185a98340183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10254b6d4a2a040be9a1af28fe91fcc2b187d4d6db27d970a10e744a69da4ac9726","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"C3IFRAP3imSnh/Runya/Dee7ulpgyxBeau6kbLSh2f4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0b7205\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 fe31 e514 a369 ae2b | 110 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n001 3 58ed 4109 4d10 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 5 39d1 3f94 3630 3237 | 32 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n003 6 1e2a 18f6 13d6 11d4 | 22 103b (0) 11d4 (0) 13d6 (0) 17db (0)\n004 4 0438 0451 00c6 0067 | 11 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n005 6 0d8a 0de3 0cf5 0ff2 | 8 0d8a (0) 0de3 (0) 0cf5 (0) 0c64 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 0af9 0a00 | 2 0a00 (0) 0af9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","private_key":"2f67175c7773d3b089b81b72210bd644855f6736a44e7e931e02c64a35326338","name":"node_0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","services":["streamer"],"enable_msg_events":true,"port":38921},"up":true}},{"node":{"info":{"id":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","name":"node_90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","enode":"enode://a2ad93ada8513b3feec771d73b08d372a7b89a5c6454e82f911e9fcd3b0f23929a604336b8501f89709f9eec253ed726d85e6c8ab08fc2473ba7fc9e96850147@127.0.0.1:0","enr":"0xf88fb840254e8f00ffa322391cdce60e7cd38fdbd46e5ee8cafdd7062a8985c381f69bce78fbb9bd468d7bd2d237a777c29badc74945574f72987aa21368ce6417bd55280183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a2ad93ada8513b3feec771d73b08d372a7b89a5c6454e82f911e9fcd3b0f2392","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"kKhctzY+3hYewhzIn4udQ1DlZs8QWGpm0xsKhndiCqE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 90a85c\npopulation: 42 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 4109 4990 4d10 39d1 | 146 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n001 5 d887 f5b2 f925 ef1b | 63 f31c (0) f2d5 (0) f27f (0) f629 (0)\n002 11 b02b b7ca bcc6 b911 | 27 b2b5 (0) b2a5 (0) b02b (0) b502 (0)\n003 5 8505 898d 886a 88a1 | 10 8025 (0) 82f9 (0) 82dd (0) 849b (0)\n004 4 9fa0 9d0f 9852 9890 | 4 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n005 3 96fc 976e 959f | 3 96fc (0) 976e (0) 959f (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 915d | 1 915d (0)\n008 1 9076 | 1 9076 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","private_key":"ffbd3e52d4e07351ecaee805eb3df2eb83b6551d4ccecf49abe430b00d7b91ef","name":"node_90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","services":["streamer"],"enable_msg_events":true,"port":39339},"up":true}},{"node":{"info":{"id":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","name":"node_32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","enode":"enode://e26885995135217d285cbb3b0e44b2071d1247163affddea0fcd9f8b15a18fa900829a0118a2b2d366315f76b3811f4eb2be6a1edeaee8822be120da9629c074@127.0.0.1:0","enr":"0xf88fb8402421fb3a7727b2a4dbe62787a620aae3cda4704b08fd927939ffcf06d34d03a2386a8a340e265804a54d9c97eafe0cd662091e66bc27ad1a15fb88004c154a800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e26885995135217d285cbb3b0e44b2071d1247163affddea0fcd9f8b15a18fa9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MjcXRBY/Czrv05VdxId+frgrF++VQcMzypwKn4rsMEU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 323717\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a369 88a1 90a8 | 110 fbc8 (0) fbf5 (0) f925 (0) ff36 (0)\n001 3 4d10 461c 4109 | 70 7b90 (0) 7a60 (0) 7920 (0) 7e04 (0)\n002 6 0b72 0af9 0a00 14df | 44 13d6 (0) 103b (0) 11d4 (0) 17db (0)\n003 6 20ae 2a97 2995 2d36 | 15 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n004 3 3f94 3b78 39d1 | 7 3ec5 (0) 3efc (0) 3e8e (0) 3f94 (0)\n005 2 35e6 3630 | 4 35e6 (0) 378e (0) 3780 (0) 3630 (0)\n006 3 314a 30be 3089 | 3 314a (0) 30be (0) 3089 (0)\n============ DEPTH: 7 ==========================================\n007 2 33b5 3373 | 2 33b5 (0) 3373 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","private_key":"109c5f2cf1f93926c20d740de91bde530a1068766dcdbd6f5a6c9eb561fad11e","name":"node_32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","services":["streamer"],"enable_msg_events":true,"port":40865},"up":true}},{"node":{"info":{"id":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","name":"node_3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","enode":"enode://902e0d821e6d4faadd41284e24f3566060b4d34a47a6a0b333365eef089321dbf8bf9a37c56df31c9f8d4d8489a329022bff87a8cb8bd8017a3b18f328fd984e@127.0.0.1:0","enr":"0xf88fb8401181684970ecc7675258fe5a3c5d354b1a7cab6dd97d2507ab00388013e7c8a76456556bdd0950ab1348bc7afa60ba1c68dae5634f81e10f5b475f7e83ba68c50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102902e0d821e6d4faadd41284e24f3566060b4d34a47a6a0b333365eef089321db","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NjDgUya6zqj8xznexCCF+EX0Ft3GmMdv+R8JnrHcUAc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3630e0\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ae2b 90a8 88a1 | 110 f31c (0) f2d5 (0) f27f (0) f629 (0)\n001 4 5308 5efb 4d10 4109 | 70 6831 (0) 6967 (0) 6c4d (0) 6c73 (0)\n002 6 0af9 0a00 0b72 1e2a | 44 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n003 4 217f 2c79 2c38 2a97 | 15 256e (0) 24b8 (0) 21a0 (0) 217f (0)\n004 3 3f94 3b78 39d1 | 7 3efc (0) 3ec5 (0) 3e8e (0) 3f94 (0)\n005 6 30be 3089 314a 33b5 | 6 30be (0) 3089 (0) 314a (0) 33b5 (0)\n006 1 35e6 | 1 35e6 (0)\n============ DEPTH: 7 ==========================================\n007 2 378e 3780 | 2 378e (0) 3780 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","private_key":"4f229a82b34c1d7a77db8b8205e0b0b31f129792a80377a9f140d310e6b27d84","name":"node_3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","services":["streamer"],"enable_msg_events":true,"port":43205},"up":true}},{"node":{"info":{"id":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","name":"node_88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","enode":"enode://748dfc4bce4346bdaee02bcdfc7b514fc6f9f0b74a7a2004e7beed2f9d7aa6eb82f41ede70c832e42af0767aaca3b7057427d140425ca9c052769d13382a475e@127.0.0.1:0","enr":"0xf88fb840e79a123d27b2f56ef3ee3b91fba3d7b33bade6191df9567cb607d85c896d09d51ee353973b9b6f21075dbea43685d639fa90e16d920e31bc814d94e1e55fe06d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102748dfc4bce4346bdaee02bcdfc7b514fc6f9f0b74a7a2004e7beed2f9d7aa6eb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iKFBxgcBlHfHsSClBihachjK0vqgOAguC53fzJy3jQc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 88a141\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 4990 4109 14df 3b78 | 146 77d2 (0) 775e (0) 7290 (0) 738c (0)\n001 5 f925 f5b2 e514 ef1b | 63 eb98 (0) e854 (0) e8ef (0) e883 (0)\n002 9 b7ca b02b bcc6 b911 | 27 b5b2 (0) b502 (0) b626 (0) b65e (0)\n003 3 9852 9076 90a8 | 10 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n004 3 849b 8505 82dd | 5 8025 (0) 82f9 (0) 82dd (0) 849b (0)\n005 1 8f21 | 1 8f21 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 898d | 1 898d (0)\n008 1 886a | 1 886a (0)\n009 1 88fe | 1 88fe (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","private_key":"7c46b2b4c2eb41cbdc91b22dd94083a9d5a9ebcefddb2dca52e0356c8ab2d0f2","name":"node_88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","services":["streamer"],"enable_msg_events":true,"port":33659},"up":true}},{"node":{"info":{"id":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","name":"node_a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","enode":"enode://fc254f0aa0e39064101549ffcc69b2251433b96a80b540da96bfcde9c4e3f979f38f7351eb100fb11660b20a5da1e8c221073a719d331eaae06053de933916b8@127.0.0.1:0","enr":"0xf88fb840b3a10df042ede6a04af90f6ea1f32e3cc6144419c04ed87f500e8da294aec02e0a48ec2a277af3cf3663ad966204d93a0e74d0c581f38b72819a5f3bb3439db20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fc254f0aa0e39064101549ffcc69b2251433b96a80b540da96bfcde9c4e3f979","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"o2k4AakRgEEM8+hdfAmsgFSnaeex1VyeekaFDLghfaA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a36938\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 0b72 14df 11d4 3373 | 146 0661 (0) 07a8 (0) 0743 (0) 0438 (0)\n001 5 d887 f5b2 f925 ef1b | 63 eb98 (0) e883 (0) e8ef (0) e854 (0)\n002 4 90a8 8505 8f21 88a1 | 20 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n003 5 b7ca b897 badd ba88 | 17 b502 (0) b5b2 (0) b626 (0) b65e (0)\n004 5 ac4d ad98 af02 aeb4 | 5 ac4d (0) ad98 (0) af02 (0) aeb4 (0)\n============ DEPTH: 5 ==========================================\n005 3 a46d a6fb a653 | 3 a6fb (0) a653 (0) a46d (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 a34e | 1 a34e (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","private_key":"9086c71a5873a4830e93448202ba724d3b0a168a8ef3a9fc05037416ae0e9ac9","name":"node_a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","services":["streamer"],"enable_msg_events":true,"port":41127},"up":true}},{"node":{"info":{"id":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","name":"node_41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","enode":"enode://48e3c3f7c9a9799de669a30ca9e8a74ed910aafd4ec3152cfe8688c9ce67997a955265bf9d18f30d988b81bcadb058fdfcd5822e37085fafd1cf3e3f0994a91c@127.0.0.1:0","enr":"0xf88fb840217cf3239a54cb3b089cbdc4bfa0fc3bd9e7921e1d28b05f7310e8c3a6f02b7c041bc83c1b95c201a33cbeedb581a51ce4fbdf683bc86ac1d6aaaa1127b7b8cd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10248e3c3f7c9a9799de669a30ca9e8a74ed910aafd4ec3152cfe8688c9ce67997a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QQkshS+sYw3yqcoIYnFvjp+4VmyQSknJY4kHEEa8aZ0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 41092c\npopulation: 45 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d887 90a8 8f21 88a1 | 110 e854 (0) e8ef (0) e883 (0) eb98 (0)\n001 9 0af9 0b72 11d4 14df | 76 07a8 (0) 0743 (0) 0661 (0) 0438 (0)\n002 7 6f5f 6e68 66e7 6103 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 6 5cd2 5823 58ed 51db | 15 574f (0) 524d (0) 53a8 (0) 53fe (0)\n004 6 4bcf 49ea 4990 4e5a | 11 4a8b (0) 4ac7 (0) 4bcf (0) 49cd (0)\n============ DEPTH: 5 ==========================================\n005 10 4559 4558 4447 44a1 | 10 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n006 0 | 0\n007 0 | 0\n008 1 41d9 | 1 41d9 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","private_key":"6ddd3b1c12e06aba0ea262fc99bafec26b2f94fb5f347ab60518afc39741fdc9","name":"node_41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","services":["streamer"],"enable_msg_events":true,"port":39355},"up":true}},{"node":{"info":{"id":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","name":"node_ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","enode":"enode://63c769772cdc9c83c9254df508ecd82cf62909028da5d232e02375859a0c0e16ab09257681fccde8b6f99302465f29d7119a5a679e9eb722dd84aeeafad3290e@127.0.0.1:0","enr":"0xf88fb840ffd15988f81a75ca61b73d7267d740abba2f0fc56d28354888cf7f21cc6d5c006b2b1189d3572d77a3d8fb9067ff3678f24b6eff94085bb0fa0693f5ea885f8a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10263c769772cdc9c83c9254df508ecd82cf62909028da5d232e02375859a0c0e16","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ris4dr29Y4h4G2XjHeGCVkxdgfRRHK+WWIsaKHdgs90=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ae2b38\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 0b72 14df 3373 35e6 | 146 0438 (0) 045b (0) 0451 (0) 07a8 (0)\n001 5 f925 f5b2 ef1b e514 | 63 eb98 (0) e854 (0) e8ef (0) e883 (0)\n002 4 9076 90a8 8f21 88a1 | 20 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n003 6 b7ca b02b bcc6 badd | 17 b5b2 (0) b502 (0) b626 (0) b65e (0)\n004 4 a653 a46d a34e a369 | 5 a653 (0) a6fb (0) a46d (0) a34e (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 ac4d ad98 | 2 ac4d (0) ad98 (0)\n007 1 af02 | 1 af02 (0)\n008 1 aeb4 | 1 aeb4 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","private_key":"9812258a3e70549d501e1fb2b90b4728c6dcfc8ccbbb9892c370214b60d40535","name":"node_ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","services":["streamer"],"enable_msg_events":true,"port":36649},"up":true}},{"node":{"info":{"id":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","name":"node_39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","enode":"enode://64dd3388d784dcfff0bac93ac16b10d6a237024d609e79fd786f239d70d11292965e419f1feda3335a52b909229e85aeaa913d608cae51f7e22ea404a014b802@127.0.0.1:0","enr":"0xf88fb8403d980a1425e3cf5c0382d08284c76c76c84e06a2cc0019ff0fc7dbeb15976c6172bfe4f485c7d23c69f0e8139964ba0c7e55a3e460b1b9a18b3da2df51b4ae950183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10264dd3388d784dcfff0bac93ac16b10d6a237024d609e79fd786f239d70d11292","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OdH8ri0jx3UhSYglFQXFd7mse2hRVY3fmkN9/hQ/OEU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 39d1fc\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 f5b2 d887 90a8 88a1 | 110 e854 (0) e8ef (0) e883 (0) eb98 (0)\n001 12 7125 7dd3 605a 6e68 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 8 00c6 0b72 0af9 0a00 | 44 0438 (0) 045b (0) 0451 (0) 07a8 (0)\n003 5 2a97 2d36 2c38 2c79 | 15 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n004 7 314a 3089 33b5 3373 | 10 314a (0) 30be (0) 3089 (0) 33b5 (0)\n005 2 3e8e 3f94 | 4 3ec5 (0) 3efc (0) 3e8e (0) 3f94 (0)\n============ DEPTH: 6 ==========================================\n006 2 3b88 3b78 | 2 3b88 (0) 3b78 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","private_key":"3cba669ea7a686fe849ec5128b993a7fec64971638bff4ec54c386bff7214559","name":"node_39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","services":["streamer"],"enable_msg_events":true,"port":42159},"up":true}},{"node":{"info":{"id":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","name":"node_8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","enode":"enode://c61eb191e326e233f19223d31784f89dd3cb5712942a686877717d74afd735e118acf5e05da708b122eed47a681888a14c93072ccb1b425c3c58ffc60b1b6f7c@127.0.0.1:0","enr":"0xf88fb8401d4e08ac54c6ca41a0cbd145e8a06eada8b2a58062c2c9552957749da5bbd29c371325ed9de3b9214139dda907e2c2be86e1710583b02f6fe8550c6fa50e022c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c61eb191e326e233f19223d31784f89dd3cb5712942a686877717d74afd735e1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jyGCwsLQ7rLoh9vDUK5yV4GfU2AyhR/98p54QssaYsw=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8f2182\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 4646 4109 11d4 35e6 | 146 67aa (0) 67dc (0) 66e7 (0) 6251 (0)\n001 10 d887 ef1b ef07 e514 | 63 e854 (0) e8ef (0) e883 (0) eb98 (0)\n002 10 b02b b7ca bcc6 b911 | 27 b502 (0) b5b2 (0) b626 (0) b65e (0)\n003 4 9d0f 9852 9076 90a8 | 10 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n004 4 82dd 82f9 849b 8505 | 5 8025 (0) 82f9 (0) 82dd (0) 849b (0)\n============ DEPTH: 5 ==========================================\n005 4 898d 886a 88fe 88a1 | 4 898d (0) 886a (0) 88fe (0) 88a1 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","private_key":"7da220e22f5a60bbb45c6c72883ee7c9680618b47c02741e3ffa840db42e0d8e","name":"node_8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","services":["streamer"],"enable_msg_events":true,"port":33809},"up":true}},{"node":{"info":{"id":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","name":"node_11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","enode":"enode://5a7570e6530a10db24b16f65a03b866013f409038c203dbdd432072f7d5048d389a66e7235576389e8633012bd367d983c5325a693ebc5bfe2b18a86e22ae598@127.0.0.1:0","enr":"0xf88fb840227240ac5b5e7e60e5754fbd36dadae2db7ba6a39745b0b02fc5303803afa203490c7fba99331c4338d767e68ce601f95e92d0cc9d4136708fca9cc5d9766a110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025a7570e6530a10db24b16f65a03b866013f409038c203dbdd432072f7d5048d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EdQ/btDd1a+lyKer98YqT6hlt6Je4pW/GklwHvMIE2M=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 11d43f\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 d887 bb90 a369 8f21 | 110 eb98 (0) e8ef (0) e883 (0) e854 (0)\n001 5 7dd3 4990 49ea 4109 | 70 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n002 4 3237 3630 39d1 3b78 | 32 256e (0) 24b8 (0) 20ae (0) 217f (0)\n003 6 00c6 0067 0e5e 0b72 | 22 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n004 5 18f6 19fa 1e2a 1f67 | 10 1b83 (0) 1a2a (0) 19fa (0) 18f6 (0)\n005 9 1704 17db 179f 1672 | 9 1704 (0) 17db (0) 179f (0) 1672 (0)\n============ DEPTH: 6 ==========================================\n006 1 13d6 | 1 13d6 (0)\n007 1 103b | 1 103b (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","private_key":"219dac0c9e412e884796b76e8f34df3ab01ed79aec554cede6881de4d40236f8","name":"node_11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","services":["streamer"],"enable_msg_events":true,"port":40541},"up":true}},{"node":{"info":{"id":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","name":"node_3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","enode":"enode://24fd229270ea0d538333b0a4aafd5aff71f1783569175335b1d90f0edffade66ba7c66972ba0e5e1862b468c0cb4245f1852e5778d8eefc014daa1f55136a7af@127.0.0.1:0","enr":"0xf88fb840c92aeac9460bef8b28eecae10683b0871da8063062965e99ecc8a759dfdc230820f2a00376fb89d159b3f24bd098f7f2689ad9750ad6e7b960138598b3afc0b10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10324fd229270ea0d538333b0a4aafd5aff71f1783569175335b1d90f0edffade66","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"O3i8mHx8MclOitqbSxG125OH/nDdAc5/PpdtO+xDPew=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3b78bc\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 88a1 bb90 a369 ae2b | 110 9890 (0) 9852 (0) 9fa0 (0) 9d0f (0)\n001 4 5efb 4990 4646 4109 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 6 00c6 0af9 0a00 14df | 44 07a8 (0) 0743 (0) 0661 (0) 0438 (0)\n003 5 2101 2995 2f32 2d36 | 15 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n004 6 3630 35e6 314a 3237 | 10 314a (0) 30be (0) 3089 (0) 33b5 (0)\n005 4 3e8e 3ec5 3efc 3f94 | 4 3ec5 (0) 3efc (0) 3e8e (0) 3f94 (0)\n============ DEPTH: 6 ==========================================\n006 1 39d1 | 1 39d1 (0)\n007 0 | 0\n008 1 3b88 | 1 3b88 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","private_key":"005d083eb3a257750c097d09e17a10c58264917fa06535586128643b104277c2","name":"node_3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","services":["streamer"],"enable_msg_events":true,"port":36675},"up":true}},{"node":{"info":{"id":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","name":"node_14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","enode":"enode://2a6142cda1601b228a9c6960fa90278c011610caf1c0109047931f409d5c69beb1383db75c7edd51dcae1b4a0a74af47ddbfb3cb14d4b9adac497d92c870ee2c@127.0.0.1:0","enr":"0xf88fb840a90ca3b818792d943f2120428d70855db44a6aa36d9a209e3ef9aadc13b3a3380939a0ea38235e3a786c5fa856c56bee157f75c45bc64251e000f5110bccf84c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022a6142cda1601b228a9c6960fa90278c011610caf1c0109047931f409d5c69be","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FN+4QU0Xst8V6vWVcajP7Jmx/WdFYdpj7pmvhTvaB9o=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 14dfb8\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 88a1 a369 ae2b d887 | 110 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n001 4 49ea 4990 4109 4646 | 70 77d2 (0) 775e (0) 738c (0) 7290 (0)\n002 4 3237 3630 39d1 3b78 | 32 256e (0) 24b8 (0) 20ae (0) 217f (0)\n003 6 0067 00c6 0e5e 0b72 | 22 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n004 3 1c9c 1f67 1e2a | 10 1b83 (0) 1a2a (0) 18f6 (0) 19fa (0)\n005 3 13d6 103b 11d4 | 3 13d6 (0) 103b (0) 11d4 (0)\n006 5 1704 17db 179f 1672 | 5 1704 (0) 17db (0) 179f (0) 1672 (0)\n007 1 154b | 1 154b (0)\n============ DEPTH: 8 ==========================================\n008 2 1400 1436 | 2 1400 (0) 1436 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","private_key":"9f60424e94bf49f4831f8875a348ff8684b25041feb915b3062e329bc6bde720","name":"node_14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","services":["streamer"],"enable_msg_events":true,"port":33225},"up":true}},{"node":{"info":{"id":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","name":"node_d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","enode":"enode://e27e5fe8c0fc1d5c19e4c43062e74e25d5b285ab4d87d9f6f0639f977473f6132ebec497112fb9ae28257aba65e66cff848d950d90d74301faee81243b2b354e@127.0.0.1:0","enr":"0xf88fb840d61802d9193750fd40278a66d4f73473dfb6ff6577a0f122efdee8265ca9f02a080bed7a061796672fa8e20230725617a89f348724b82705106550e47856543e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e27e5fe8c0fc1d5c19e4c43062e74e25d5b285ab4d87d9f6f0639f977473f613","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2IcHCgVoKCxp6WzmVhK6ctXqJrXIBnFDXW4e0sS0kwE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d88707\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 49ea 4109 4646 39d1 | 146 775e (0) 77d2 (0) 7290 (0) 738c (0)\n001 9 90a8 8f21 88a1 a369 | 47 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n002 5 eb98 ef1b e514 f925 | 37 e027 (0) e7fa (0) e775 (0) e5ad (0)\n003 6 c1f9 c620 c9f5 c898 | 15 c26f (0) c1f9 (0) c49c (0) c441 (0)\n004 3 d1d7 d299 d3b0 | 5 d640 (0) d7ac (0) d1d7 (0) d299 (0)\n005 1 df1e | 1 df1e (0)\n============ DEPTH: 6 ==========================================\n006 3 db6a daec da67 | 3 db6a (0) da67 (0) daec (0)\n007 0 | 0\n008 1 d863 | 1 d863 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","private_key":"04afc55a06d4cfd448c6d6574905560d45f4bc8fffe230c686d444d678257ec8","name":"node_d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","services":["streamer"],"enable_msg_events":true,"port":46277},"up":true}},{"node":{"info":{"id":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","name":"node_0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","enode":"enode://ba05d71907202ec66f1ef7f46da693468efea28d0cff6a320b4ed04465b73789f7fb6a9b638d00d75c054815a86c8c71512c605c8a5328aa4f3de656dc83aa4b@127.0.0.1:0","enr":"0xf88fb84081e05173f55c4568ba75436e5ec395bddec7a8bbae9c3c65a8f91b42698bda8407a5e40cacce44a4cecb0384cc14285aaa07669a28a9e69cceb2ec18a4e73f2c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ba05d71907202ec66f1ef7f46da693468efea28d0cff6a320b4ed04465b73789","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CgBeucEMXMn3IM/sKmVYEdORZxWXtPMtEt8pHsdrLBM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0a005e\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bb90 d887 | 110 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n001 4 5efb 49ea 4990 4646 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 5 3630 3373 3237 3b78 | 32 256e (0) 24b8 (0) 20ae (0) 21a0 (0)\n003 3 1e2a 11d4 14df | 22 1b83 (0) 1a2a (0) 19fa (0) 18f6 (0)\n004 5 0451 03cc 0328 0067 | 11 07a8 (0) 0743 (0) 0661 (0) 0438 (0)\n005 7 0de3 0cf5 0c28 0c64 | 8 0d8a (0) 0de3 (0) 0cf5 (0) 0c28 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 0b72 | 1 0b72 (0)\n008 1 0af9 | 1 0af9 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","private_key":"f1681c7b1205d9314840edd16ac9c55cfd362b4feeb60b0066c0a1c69f42f1c4","name":"node_0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","services":["streamer"],"enable_msg_events":true,"port":35965},"up":true}},{"node":{"info":{"id":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","name":"node_0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","enode":"enode://58412ea457c3c490d9c0792f1b0274281f17c3794c31304f2eed90d45520cc37cf639e4f5f2194743af16fedabea43bbc5071077a286b03cc4b65601983ab04d@127.0.0.1:0","enr":"0xf88fb8407fbed396b8c08f1a08e239904d9fbd388627aec4b0e21c946b6d6112154a7d327f8f868440c35fb7a46ceb36684ebaf4437f4472cd88a0983375e4f5b50d610a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10358412ea457c3c490d9c0792f1b0274281f17c3794c31304f2eed90d45520cc37","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Cvmlei9mg1zT5OcbwCYBOoqZyjN6e2tsw04R2NohKk8=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0af9a5\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 bb90 f5b2 d887 | 110 e027 (0) e7fa (0) e775 (0) e5ad (0)\n001 4 4990 49ea 4109 4646 | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 4 3630 3237 3b78 39d1 | 32 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n003 6 1c9c 1e2a 11d4 103b | 22 1b83 (0) 1a2a (0) 19fa (0) 18f6 (0)\n004 4 0661 0328 0067 00c6 | 11 0438 (0) 0451 (0) 045b (0) 0743 (0)\n005 8 0d8a 0de3 0cf5 0c28 | 8 0d8a (0) 0de3 (0) 0cf5 (0) 0c64 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 0b72 | 1 0b72 (0)\n008 1 0a00 | 1 0a00 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","private_key":"b5347eaddd49eda049687bb250949eca56628c3bddafbccae680b571175f1efe","name":"node_0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","services":["streamer"],"enable_msg_events":true,"port":45487},"up":true}},{"node":{"info":{"id":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","name":"node_4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","enode":"enode://29467abcaeb0c2dcf2dbb6835fbab644652983d04c3c5964c37eaed3c9b33a41f488528f8f11c8b4a73ae223a7c738bc6b1f8e56a5f319556a4c1ffd68865d13@127.0.0.1:0","enr":"0xf88fb84050850c1513e8379df0027113c46bb5f7df2ee2338d8768c7c7e14d4552813c9939b9417c32904d11dcdb010051f77a9f697ea2b46d603e852665b5a9293f08e70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10329467abcaeb0c2dcf2dbb6835fbab644652983d04c3c5964c37eaed3c9b33a41","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Rkb+TBGQeHOGErRKNWCJs8c6COEc/ZEGddIRrmsguP0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4646fe\npopulation: 42 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f5b2 d887 8f21 aeb4 | 110 c26f (0) c1f9 (0) c59e (0) c49c (0)\n001 6 3b78 39d1 11d4 14df | 76 256e (0) 24b8 (0) 20ae (0) 217f (0)\n002 6 605a 6c73 6f5f 6e68 | 32 77d2 (0) 775e (0) 7290 (0) 738c (0)\n003 6 51db 5308 53fe 5f00 | 15 574f (0) 512e (0) 51db (0) 524d (0)\n004 8 4e5a 4c9e 4d10 4d6b | 11 4c9e (0) 4d10 (0) 4d6b (0) 4d59 (0)\n005 2 41d9 4109 | 2 41d9 (0) 4109 (0)\n006 4 4558 4559 4447 44a1 | 4 4558 (0) 4559 (0) 4447 (0) 44a1 (0)\n007 2 47bf 4782 | 2 4782 (0) 47bf (0)\n008 1 46fe | 1 46fe (0)\n============ DEPTH: 9 ==========================================\n009 2 461c 4636 | 2 461c (0) 4636 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","private_key":"d31b7865721d5d0ce0dcf9cca1a8187d793be7b377d9d03fc2cb2ee745bee6f3","name":"node_4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","services":["streamer"],"enable_msg_events":true,"port":41715},"up":true}},{"node":{"info":{"id":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","name":"node_bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","enode":"enode://ca69ebb1f7477323104e6a62f28c17ba29b748f75e2f49756f4cbe9393dc68781a244148d0137abd6fb1e4a1b33ffb03045681754e7ddbb371a57dbb88a315c8@127.0.0.1:0","enr":"0xf88fb840fb7786d0be189148e7144a7b9550267ba300810396855dd94b67bc0ba2072fd71c282ccdb2547c15206ad380a71a34fbf70dbfcfecd67df851f468c0b5294c050183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ca69ebb1f7477323104e6a62f28c17ba29b748f75e2f49756f4cbe9393dc6878","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"u5BGT3aahVScFQ+GF3WqZ5JMfGUfOT9scHcnBzdqXH4=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bb9046\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 3b78 11d4 0a00 0af9 | 146 256e (0) 24b8 (0) 20ae (0) 217f (0)\n001 3 d887 f925 f5b2 | 63 c26f (0) c1f9 (0) c59e (0) c43f (0)\n002 3 90a8 88a1 8f21 | 20 9fa0 (0) 9d0f (0) 9890 (0) 9852 (0)\n003 5 ad98 aeb4 ae2b a46d | 10 a6fb (0) a653 (0) a46d (0) a34e (0)\n004 3 b7ca b2a5 b02b | 8 b5b2 (0) b502 (0) b626 (0) b65e (0)\n005 1 bcc6 | 1 bcc6 (0)\n006 4 b897 b820 b95d b911 | 4 b897 (0) b820 (0) b95d (0) b911 (0)\n============ DEPTH: 7 ==========================================\n007 3 ba88 baf2 badd | 3 baf2 (0) badd (0) ba88 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","private_key":"1681a07f3bae8df9da96df7d590316463371480d0ff13eeb1581b97efa00c074","name":"node_bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","services":["streamer"],"enable_msg_events":true,"port":42761},"up":true}},{"node":{"info":{"id":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","name":"node_49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","enode":"enode://00ec342238cfe51f0c655c27411369dca96d92b20f550c84552b0a23cbe14033c1624dff2ff2418e3d11c01f508f68c296985b7f14b508613b8b93d45b743aa7@127.0.0.1:0","enr":"0xf88fb840b31c9684d99503737f5f45f02a3a43e20c768eed666bd2e56982eebc3d5167b06146d790a41a931e1aa570ebfd5928fceb5d9fc58e3520d92c42f2296c8384ce0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10300ec342238cfe51f0c655c27411369dca96d92b20f550c84552b0a23cbe14033","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SeqtaNI91j7yYCn6P04lePPeyocIu8g4dQ2Lbb6eqjg=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 49eaad\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f5b2 f925 d887 bb90 | 110 c26f (0) c1f9 (0) c59e (0) c49c (0)\n001 7 39d1 14df 11d4 103b | 76 24b8 (0) 256e (0) 20ae (0) 217f (0)\n002 5 7125 7dd3 605a 6c73 | 32 67aa (0) 67dc (0) 66e7 (0) 6337 (0)\n003 2 5cd2 5efb | 15 574f (0) 512e (0) 51db (0) 524d (0)\n004 3 4109 41d9 4646 | 12 41d9 (0) 4109 (0) 4447 (0) 44a1 (0)\n005 4 4e5a 4d10 4d6b 4d59 | 5 4c9e (0) 4d10 (0) 4d6b (0) 4d59 (0)\n006 3 4ac7 4a8b 4bcf | 3 4ac7 (0) 4a8b (0) 4bcf (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 1 4990 | 1 4990 (0)\n010 1 49cd | 1 49cd (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","private_key":"9ab9903f8ffceadd1d6a7976373b073696a0ee0055a7208414a8f1679f35e70f","name":"node_49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","services":["streamer"],"enable_msg_events":true,"port":38883},"up":true}},{"node":{"info":{"id":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","name":"node_499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","enode":"enode://c582e81e3c1308e84e2faa3d0e6bc500e0b221cb23082c6d74785246b56e0cef2e971f545dfa3adef1ab1beff9b70e5325cdeff37b7b9c5dd20e1440a73fb632@127.0.0.1:0","enr":"0xf88fb840387099c7431e9b63d69d94cae6d580f16aebc307b79c74b73b25243f0bbf6c8216bc5d70f677116c8007b76373d3e7b4f18e47409a9965230fcc2373473836dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c582e81e3c1308e84e2faa3d0e6bc500e0b221cb23082c6d74785246b56e0cef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SZA2650Q/AA8kD8J6g7gDA0ns5VkmI1nrhEfNHPSLwc=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 499036\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b911 b02b 90a8 88a1 | 110 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n001 6 3b78 11d4 14df 0a00 | 76 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n002 4 7125 7dd3 6e68 605a | 32 77d2 (0) 775e (0) 7290 (0) 738c (0)\n003 2 5cd2 5efb | 15 574f (0) 512e (0) 51db (0) 524d (0)\n004 3 4109 41d9 4646 | 12 41d9 (0) 4109 (0) 4447 (0) 44a1 (0)\n005 4 4d10 4d6b 4d59 4e5a | 5 4c9e (0) 4d59 (0) 4d6b (0) 4d10 (0)\n006 3 4ac7 4a8b 4bcf | 3 4ac7 (0) 4a8b (0) 4bcf (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 2 49cd 49ea | 2 49cd (0) 49ea (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","private_key":"c1e2eeef980866cd77150633a76d6a829b17e8cfd20808fb1e2d37307ba092bd","name":"node_499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","services":["streamer"],"enable_msg_events":true,"port":44049},"up":true}},{"node":{"info":{"id":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","name":"node_f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","enode":"enode://e46f5b92ac1643853152ba3b247bd5b51cca33a1be2f8811912a8a4c5a5eb0164fb72f56315e64256925e324661087a4c7a679a181f5afc78f2294e6b2c4d482@127.0.0.1:0","enr":"0xf88fb840a9aa17d842225b019dc9bfc778d998c52b179d856b377bca673ec81ba5fc96043cd2edc2a04f0e9115fe2b78b12778948c8db42f5dd89e0826f0f3ab746be0960183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e46f5b92ac1643853152ba3b247bd5b51cca33a1be2f8811912a8a4c5a5eb016","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9bJKH9LNKQi0CFYvmiZe4aaSsTfncBN6+l/foHsjciE=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f5b24a\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 39d1 0af9 00c6 5efb | 146 24b8 (0) 256e (0) 20ae (0) 21a0 (0)\n001 8 90a8 8f21 88a1 bcc6 | 47 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n002 5 c620 c898 cc20 d3b0 | 26 c26f (0) c1f9 (0) c59e (0) c49c (0)\n003 5 e514 e775 ef1b e854 | 18 e027 (0) e7fa (0) e775 (0) e5ad (0)\n004 4 ff36 fbf5 fbc8 f925 | 6 fe21 (0) fe31 (0) ff36 (0) fbc8 (0)\n005 2 f31c f27f | 3 f31c (0) f2d5 (0) f27f (0)\n006 4 f629 f7fa f7ba f773 | 4 f629 (0) f7fa (0) f7ba (0) f773 (0)\n007 3 f4e0 f45f f456 | 3 f4e0 (0) f45f (0) f456 (0)\n============ DEPTH: 8 ==========================================\n008 1 f528 | 1 f528 (0)\n009 1 f5dc | 1 f5dc (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","private_key":"dbbb9c96e746abd3f4c880d9fbab46e390a208e8a8fca9b24e83fc12054d6601","name":"node_f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","services":["streamer"],"enable_msg_events":true,"port":38193},"up":true}},{"node":{"info":{"id":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","name":"node_aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","enode":"enode://408575dfa357953549c9a106e6944f5fe874044b6931be8662fe92bda869094fc8a63d0beb139bef8cc4084fea888f605755214a178949930042d4111a9d863f@127.0.0.1:0","enr":"0xf88fb84023e003cb4dba2e193bfda36d19918aba6afe1dd732715d94307795abadfc3f161cda9e4fa8067ebb95e9ee4e057d4be121f96ce68c706483ca3d278da0d210950183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103408575dfa357953549c9a106e6944f5fe874044b6931be8662fe92bda869094f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rrTHWlfM/JrAU6PTY898Hj4gFAZYd2mrZhXVwvhqVBA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aeb4c7\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 154b 00c6 4646 5efb | 146 256e (0) 24b8 (0) 20ae (0) 217f (0)\n001 5 d887 cc20 e775 f925 | 63 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n002 6 9852 90a8 9076 8505 | 20 9d0f (0) 9fa0 (0) 9890 (0) 9852 (0)\n003 5 b2a5 b02b bb90 badd | 17 b502 (0) b5b2 (0) b626 (0) b65e (0)\n004 5 a6fb a653 a46d a34e | 5 a6fb (0) a653 (0) a46d (0) a34e (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 ac4d ad98 | 2 ac4d (0) ad98 (0)\n007 1 af02 | 1 af02 (0)\n008 1 ae2b | 1 ae2b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","private_key":"557f3cfbd77e4d7aed5ee5eb12fe2b64a66b62b1565779336756894798686fba","name":"node_aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","services":["streamer"],"enable_msg_events":true,"port":41457},"up":true}},{"node":{"info":{"id":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","name":"node_5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","enode":"enode://09a213671160d6c9f446228ec2692c94080d1b2dc94c9d7731e95b0bc481bee4fc4ab0d06fd374a143939d8f7edec35b9412902e448f760d46dce08de953fbfc@127.0.0.1:0","enr":"0xf88fb84028e698a16106eee1826e468d8c150a43995c15e006336c12f9f855178ab5b7e5299f2f54ccdab44826172fc7c3b95fe6748aadccbfe2abc713b61a087af3a3540183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10209a213671160d6c9f446228ec2692c94080d1b2dc94c9d7731e95b0bc481bee4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XNI3ciaCXcfqWCMVzRCNI1At9OnHwJ/AfntKpWRA3ik=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5cd237\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f925 bcc6 aeb4 | 110 df1e (0) db6a (0) da67 (0) daec (0)\n001 4 39d1 00c6 154b 103b | 76 24b8 (0) 256e (0) 20ae (0) 217f (0)\n002 4 7dd3 7125 6e68 605a | 32 77d2 (0) 775e (0) 7290 (0) 738c (0)\n003 8 41d9 4109 461c 4646 | 23 41d9 (0) 4109 (0) 4558 (0) 4559 (0)\n004 5 51db 524d 5308 534b | 8 574f (0) 512e (0) 51db (0) 524d (0)\n005 3 5b63 5823 58ed | 3 5b63 (0) 58ed (0) 5823 (0)\n============ DEPTH: 6 ==========================================\n006 2 5f00 5efb | 2 5f00 (0) 5efb (0)\n007 1 5db0 | 1 5db0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","private_key":"a4284995d54ea16fb6c05b66a7661d7af0bcad9d23da505a56922f494792bcac","name":"node_5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","services":["streamer"],"enable_msg_events":true,"port":37509},"up":true}},{"node":{"info":{"id":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","name":"node_f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","enode":"enode://77fb0fa620b93ebe2af5e929eaa9f0cdaad26a3530f84e2026b2870c54d5e3f5204889e8ceb85a934b36b96f787031eae04a738bc4b32a53ff25d06f890ccd3f@127.0.0.1:0","enr":"0xf88fb84036fe76e82d48bc24b57dc4307d10a6168bc316938eedbd1a097ba018675fb30b1ab095482cf7f33c126a535acd04e34af2ab224d982993c49222da20f868a17d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10377fb0fa620b93ebe2af5e929eaa9f0cdaad26a3530f84e2026b2870c54d5e3f5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+SXIXmRXrAHwzWspcVX5065hFgOJDY86ReE5bZN/hoA=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f925c8\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 154b 00c6 49ea 5cd2 | 146 35e6 (0) 378e (0) 3780 (0) 3630 (0)\n001 9 8f21 88a1 90a8 a369 | 47 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n002 6 d887 d3b0 c786 c620 | 26 d7ac (0) d640 (0) d1d7 (0) d299 (0)\n003 4 e514 e775 e854 eb98 | 18 e027 (0) e5ad (0) e5d7 (0) e547 (0)\n004 7 f31c f27f f773 f7ba | 13 f31c (0) f2d5 (0) f27f (0) f629 (0)\n005 3 ff36 fe21 fe31 | 3 ff36 (0) fe21 (0) fe31 (0)\n============ DEPTH: 6 ==========================================\n006 2 fbf5 fbc8 | 2 fbc8 (0) fbf5 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","private_key":"68be1214b78195a55f8a0048f9bec727e50425b7c72b445f3e9b0cba006ce587","name":"node_f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","services":["streamer"],"enable_msg_events":true,"port":46319},"up":true}},{"node":{"info":{"id":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","name":"node_5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","enode":"enode://f0602e87ed48ff8c9e5b32418ddf3f1b1342911057a98f5c3cb1cb1c8053887b84f07d0aef26934db2ee88c543ffa8c5e60dbccbc693e1162466a2a84304ac34@127.0.0.1:0","enr":"0xf88fb8400ca2ddfc019ef6efe386c9432134ddcf621cc7d5d6d6c2a4df4b691968397ad32e8730138bac99bdfa701024d5590bb583ac57b4a314223baf49ba604b6daa7a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f0602e87ed48ff8c9e5b32418ddf3f1b1342911057a98f5c3cb1cb1c8053887b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Xvs7/BmfVAj3m9a9UXG0vzMsaKjkkkLrT2pYm5Y1ZcY=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5efb3b\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 aeb4 f5b2 f925 | 110 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n001 6 3630 39d1 3b78 154b | 76 3237 (0) 3373 (0) 33b5 (0) 30be (0)\n002 4 7dd3 7125 6e68 605a | 32 77d2 (0) 775e (0) 7290 (0) 738c (0)\n003 5 4d10 4990 49ea 41d9 | 23 4109 (0) 41d9 (0) 4447 (0) 44a1 (0)\n004 4 51db 53fe 53a8 534b | 8 574f (0) 512e (0) 51db (0) 524d (0)\n005 2 58ed 5823 | 3 5b63 (0) 58ed (0) 5823 (0)\n============ DEPTH: 6 ==========================================\n006 2 5db0 5cd2 | 2 5db0 (0) 5cd2 (0)\n007 1 5f00 | 1 5f00 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","private_key":"dc9b24b93ea85bbf21ab6cc53fa814b1e43b7c727edeef705de678992d971ee6","name":"node_5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","services":["streamer"],"enable_msg_events":true,"port":40995},"up":true}},{"node":{"info":{"id":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","name":"node_00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","enode":"enode://7ca882c01f3ef0c979b3991b30d470a4e12d4daddb20ff5209e75e679be8d75e9d6b98c06a763dc9d6340daa2d98079a8ed5348c7b332d26dbe72cf162227e37@127.0.0.1:0","enr":"0xf88fb8400b62eaff12a9192a15e894c5eab3f37b7ed634294a51288c0c6a83ecf0fd4a6b542b6cb20fb7bd8435de98cc27008a3cf625eadd4938433921102803ed3c11cb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037ca882c01f3ef0c979b3991b30d470a4e12d4daddb20ff5209e75e679be8d75e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AMZIioQuznqLDa8GTkBd4DpCV9MIhA6lK/1I0j9U2JU=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 00c648\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 cc20 f925 f5b2 a46d | 110 df1e (0) db6a (0) da67 (0) daec (0)\n001 4 49ea 4990 5cd2 5efb | 70 7a60 (0) 7b90 (0) 7920 (0) 7e04 (0)\n002 4 3b78 39d1 33b5 2c79 | 32 378e (0) 3780 (0) 3630 (0) 35e6 (0)\n003 7 1c9c 179f 14df 154b | 22 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n004 7 0b72 0af9 0a00 0c64 | 11 0d8a (0) 0de3 (0) 0cf5 (0) 0c64 (0)\n005 4 0438 045b 07a8 0661 | 6 0743 (0) 07a8 (0) 0661 (0) 0438 (0)\n============ DEPTH: 6 ==========================================\n006 3 02d8 03cc 0328 | 3 02d8 (0) 03cc (0) 0328 (0)\n007 0 | 0\n008 1 0067 | 1 0067 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","private_key":"264248088585a6d226623f7f606b7d9b2a5a80474bb9fbe6c2194848b7dc0586","name":"node_00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","services":["streamer"],"enable_msg_events":true,"port":46209},"up":true}},{"node":{"info":{"id":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","name":"node_bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","enode":"enode://e9d6493fb95f0cead7320163b4766f3eeb98040a441ca69854ad152ecc40f844b80748c9a40686ed50aeb691c54ebc32ed19e793294170171e644ac9cc903756@127.0.0.1:0","enr":"0xf88fb84006b4143a56faaab9a4674c3bf9dccdab55411262af7d7178d0d90275ac6bf97b13323f2de3c85480f392843ae1172ab763680293f68350afae51376861d75f460183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e9d6493fb95f0cead7320163b4766f3eeb98040a441ca69854ad152ecc40f844","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vMZyTlT3YTYfhRR+sQKo0aGjiBCpQM52seNh3crayqM=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bcc672\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5cd2 103b 00c6 | 146 77d2 (0) 775e (0) 7290 (0) 738c (0)\n001 3 d887 f5b2 f925 | 63 df1e (0) db6a (0) da67 (0) daec (0)\n002 5 90a8 9076 9852 8f21 | 20 849b (0) 8505 (0) 8025 (0) 82f9 (0)\n003 4 a34e a46d ae2b aeb4 | 10 ac4d (0) ad98 (0) af02 (0) ae2b (0)\n004 3 b7ca b2a5 b02b | 8 b5b2 (0) b502 (0) b626 (0) b65e (0)\n============ DEPTH: 5 ==========================================\n005 8 baf2 badd ba88 bb90 | 8 baf2 (0) badd (0) ba88 (0) bb90 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","private_key":"abbd7b59425714f0316c2a0b0d09c70ac6a18bf91c5c6f8bacc927aa55e2e249","name":"node_bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","services":["streamer"],"enable_msg_events":true,"port":36589},"up":true}},{"node":{"info":{"id":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","name":"node_103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","enode":"enode://ab61a89b8c96d76938394e59d68d35411dd069a2913459c3b93753e155054808072826f8c3486e851277442229448a9a5aea76f1e5677d9d63bd233f662349f8@127.0.0.1:0","enr":"0xf88fb840ef3ce505f3f25f1acbd8cb9d485be9cf25dcd915112ff3c33982c65dce7331c020dc2aaedc07c497e5b48c7aafb32221e5879fd926cb39cce242f3fc1e70182c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ab61a89b8c96d76938394e59d68d35411dd069a2913459c3b93753e155054808","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EDsjJVK5QJAjIZXciPhII3AfNa5Ta1r23TP6ZVozy64=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 103b23\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 eb98 e883 e854 e775 | 110 e027 (0) e5ad (0) e5d7 (0) e547 (0)\n001 5 605a 49ea 4e5a 53fe | 70 77d2 (0) 775e (0) 7290 (0) 738c (0)\n002 3 3b78 39d1 2c79 | 32 3f94 (0) 3ec5 (0) 3efc (0) 3e8e (0)\n003 2 0af9 00c6 | 22 0b72 (0) 0a00 (0) 0af9 (0) 0d8a (0)\n004 3 19fa 1e2a 1c9c | 10 1b83 (0) 1a2a (0) 18f6 (0) 19fa (0)\n005 7 1704 17db 179f 1672 | 9 1704 (0) 17db (0) 179f (0) 1672 (0)\n============ DEPTH: 6 ==========================================\n006 1 13d6 | 1 13d6 (0)\n007 1 11d4 | 1 11d4 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","private_key":"416b236190cb9412038f2b53f7d6d2b804e6e2e47266fed6212b9950c7aaaa19","name":"node_103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","services":["streamer"],"enable_msg_events":true,"port":35829},"up":true}},{"node":{"info":{"id":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","name":"node_154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","enode":"enode://175ecd2838e0febb3825043e19c3da58fc7b0dbc13785420d0f6a9c558cf1f58bdebd47f93bac8cf9eb1b7fd91b13f8888481aa8a08adcb1ccad83d11306e4e1@127.0.0.1:0","enr":"0xf88fb840818f538de2e08485786c679ee895bb4922fb60fe5137ed730e676b8d4e033cbb5bf437ded58aeb37c30db94ed1d80e76fb52d999f936280a4107b502891b09710183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103175ecd2838e0febb3825043e19c3da58fc7b0dbc13785420d0f6a9c558cf1f58","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FUvpJV6a69E0qRQHD15vPUu6B52cpzi3QkTbFOG1ht0=","hive":"\n=========================================================================\nThu Feb 28 18:13:01 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 154be9\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fbf5 f925 aeb4 a46d | 110 e027 (0) e5ad (0) e5d7 (0) e514 (0)\n001 5 7dd3 605a 5cd2 5efb | 70 775e (0) 77d2 (0) 7290 (0) 738c (0)\n002 2 33b5 2c79 | 32 3f94 (0) 3ec5 (0) 3efc (0) 3e8e (0)\n003 3 0ff2 0fc5 00c6 | 22 0b72 (0) 0a00 (0) 0af9 (0) 0d8a (0)\n004 6 18f6 19fa 1f67 1e2a | 10 1a2a (0) 1b83 (0) 18f6 (0) 19fa (0)\n005 3 13d6 11d4 103b | 3 13d6 (0) 11d4 (0) 103b (0)\n006 5 1704 17db 179f 1672 | 5 1704 (0) 17db (0) 179f (0) 1672 (0)\n============ DEPTH: 7 ==========================================\n007 3 14df 1400 1436 | 3 14df (0) 1400 (0) 1436 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","private_key":"324821a542a5b9cbe5f5cde557280f1fa601cbb5592c2b60a578fd741be35770","name":"node_154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","services":["streamer"],"enable_msg_events":true,"port":41653},"up":true}}],"conns":[{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","other":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","other":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","up":true},{"one":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"4d59cf1aeecf370e94a7a231887450cef97053b9c88a7fd11e210840af070e29","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"3e8efcaf3002522b39065ea30c15426d1eb55916499eff8eb5a814e39d41853c","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","up":true},{"one":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","up":true},{"one":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"b65ee2549536a806ceef4a7ccc9544567cafe6204080929fc847df0a3781ccc9","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","up":true},{"one":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"58ed74695bf527bac9a350c86d305e53e08c4999795e11cd3b2a36f5cd25d637","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"e8830f2b2f7d08df15bd33f4b2841d01d9d62c1621234bd6ae86743e52360f3e","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","up":true},{"one":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"8025c1fcb98e53f92767d1d43a3057a0acd1e8994bb4a7e3f5e244110e0dcf91","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"154be9255e9aebd134a914070f5e6f3d4bba079d9ca738b74244db14e1b586dd","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","up":true},{"one":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"7dc2a9573f253f362ef1b21bbfcc144b11a6febc58aa3c4430224160e9fa738c","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","up":true},{"one":"bcc6724e54f761361f85147eb102a8d1a1a38810a940ce76b1e361ddcadacaa3","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"b911b8e2d72532b7c66ff5f7bffa70f5ddbeea6903a86f9333399f0c4b5f0fe8","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"18f6e66e1cc8e620808901b571fdf525ee8f41850fac0bd0e5c5a4de70c5f873","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","other":"1b830ed484b274a96ec7ba2f9a42b6859412b5334a564014ff3f11597ea3a32d","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"07a8c900fec6c477580ed5b38848a8681dc52a19e59fa4cd32f571fe7fb2383a","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"524db81b135af8dc309b942c082a7291dddb851866fc608753f937ee77015be0","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"605a46991af15cd60e67413c712b99ff8f21173c96a7990f2728ad6cac2bb9d8","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","other":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"caf6a8e37fd41c1e6ad77a8575cd90354bb1693893952301c9caeb4779c338d3","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"1c47ad5bd8846f777daf59587feccc308f4dc63f6d27b1385ff8085c75bb1aac","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","other":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"a34ea2e87d4c12adb27d66c2c95300603ff50415974e000bbcc69a5ae059dbf1","up":true},{"one":"f4565dd2c428c03d7a8d5fad87a6dd5f92ae706529eb6152d36fa584e7cdbe4d","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"f5dc78ff71a63fc2014b9553723ee676c63fc078a32a46b7cb172f357a118140","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"c6cf46239078edfb343c645f039725fdee1bbba8b0a6da02e2cc456b9223c9a2","other":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"ae2b3876bdbd6388781b65e31de182564c5d81f4511caf96588b1a287760b3dd","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"0438f567045d4556a0e7a697028d689ecfd0ae20f9e85c09b48d9f1fd0ee4765","other":"045ba8da4641da3f0b8058bb0d9d8aafbb81496dc1cae2a3fd9c039a7e1cafb6","up":true},{"one":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"d640472351969a5578e541aca72b7640c583b995fd62607ff3ee3f3f3139aafd","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","up":true},{"one":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"5db08436c64f4cc9e2b3950e35bc8ad739825e3efa67a642c771d95b34cb420c","other":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"29957e8e92925a8c79bdf513295d96bfb62fbfc597ee1cf767c7ef408f1b1295","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"b626d472b555e6f950a7142783db8deb443a74e63ef6bd72a87eaf1af14ca805","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"eb98fb45dd5754f24f9df0c9ecbb93932e3d9d7735cd6d0ddd4a8675bb4ef554","other":"e8efe8016fe6cf649b2755bee22da35ccc6c9c55d404d5385d61f6ea27b84380","up":true},{"one":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","up":true},{"one":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","other":"d863ba7405eb07ccddbf1d34efbcbec2867a93a109ed9413d9aecf30d3645a6a","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","other":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","up":true},{"one":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"2c3894b6e47cf19ac7ee9fe213196312f676256f670dff25b03563492550bc74","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"aeb4c75a57ccfc9ac053a3d363cf7c1e3e201406587769ab6615d5c2f86a5410","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","other":"bb90464f769a85549c150f861775aa67924c7c651f393f6c70772707376a5c7e","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"7920d69cf7e458fce0781ea1a4e07768e1a69f6818090eff0abf0b4a0c2c35f8","up":true},{"one":"775e7be502df8fd938cf9c42ee4fac33e460a4b6992b9efeb8dc1ff7dde5c40f","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"7b90e939ae2a240f0d74a923afb6bbf11f6d5b99a7bf85f1825b1ea36bce744c","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","up":true},{"one":"7dbbdeba3731e1ff43072f8cbd86db147761e1b61753eea7024774dbf46914bd","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"c59e3953b64e5b9ffbe53990a358914f2fa8e3551d33f92b9e3a441bd1baf2cd","other":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","up":true},{"one":"3efc4b120b3eeeac186bf3a4cd42eb8c647f7edb08c23ee643e2bec9d72c5bed","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","other":"37801e8d7d46143f78924ed66099f658a94d37edfd2f58d02acb85add03e1894","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f2d5533eed4b0c184952d859d67e44abe5a75a5de6111c8c106b8f4b2d8ccfc4","up":true},{"one":"9890e6ebb2c6f9a7bec4c2778e077e3710ce3af356f82ae9b4d324832d159ef7","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"04518d7120fa8a528d983ca1ee6d5d09ba24a4e853fb22bc9084cdf34995e95f","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","other":"e54b643cbc95d9f5d27ec3760d892b6802981bfabf4f9979267d66259df982c7","up":true},{"one":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","other":"b2b5ba1bb188f18f79b295f2c0d48c52c1d1d449ecb9b94b9984f3a6179732c7","up":true},{"one":"e027a9f7152641c4a41154f8ce4dafd23895c312150efea86bf4152c88d0ca86","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","up":true},{"one":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","other":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","up":true},{"one":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","other":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","up":true},{"one":"006727dc6f59b120b24c17b8e63f80ef3439105f8118ffeed408f105a48ee60c","other":"03285e06657032778feff0b43828c964dbf9de669f63171aeb587aa1a1facc0a","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"5b632eaf700d173ff15f4727b85817e6173228c304b422434a08c2cad438b825","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","up":true},{"one":"886aff1f1e3b86bfe901066bb7948451c18fe3f8cd1b7318b05154890ca8f738","other":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c786ff8667f509b5a9519984c1d95c83a5d2e257500a71429e8f23af610ce771","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"f27f1044777e05f3f60165d0d2fc3e7667fe148e0ca7a097805d60b9f61025f7","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"67dcfd21ece30b41a39bc55c0986fca8f401bb3acba821969519f09d0933e8bd","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"2d3645c4fdf9a2809a909076b9ee5fb98fa880f6faeff914f1a2987af928cd79","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"88a141c607019477c7b120a506285a7218cad2faa038082e0b9ddfcc9cb78d07","other":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","up":true},{"one":"849bcbb9be43b799fefc5e689efc75125da27f536e97e5b7921031520ae6e5d8","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"ad9899f78659492ec248a884927a757f3f3b4e76cd2abc46ad8766251fd8afed","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","up":true},{"one":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","other":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","up":true},{"one":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"7e0458ecdf7081443cab5412529f3948ece659facaca03208496c80dd136e704","other":"7a608d2cf9d1d9c5819dc1f9e88e5cb2852aadea01c40e047c2e184b62e7163c","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","up":true},{"one":"5cd2377226825dc7ea582315cd108d23502df4e9c7c09fc07e7b4aa56440de29","other":"5f00b3bebef2f5484ff1386298add68a6743a106200ae8a13a27dbb52714ee8f","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"efeae3b7f610dc10acc51068e7718876d147cd78a9a28788c5dba5bb3a6950dc","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"9852ce267d53106a6e584d6eddb08e0062eb4a422d2a8d39ad6dccaebac552ff","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"e7fa7112adc7b023dd5965e620277122542153f87eaf5deeacc8a51f1778ba77","other":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"a6fbe16b81d240ff2f2ed6c93cfd9590731dfb2e7ec3fce1c098fe542bedf299","other":"a3693801a91180410cf3e85d7c09ac8054a769e7b1d55c9e7a46850cb8217da0","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"f528aaafd67b20dafdce101db224aa01c70f93bdc91c14f50fa8db1dbf9fc386","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","other":"f925c85e6457ac01f0cd6b297155f9d3ae611603890d8f3a45e1396d937f8680","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"2a97d308a720274a440dfa6901ca0a5480af9bab58dd8a6c4afdb9c83ea964c3","other":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"1436aaa8770e9f1c6294e49f4066c16b1caa50524e9b8fd058059e41657d2a83","up":true},{"one":"6ea51fb6e4783f351dbbfa47b508c78c73233ebaada409dfb55446217f92c4bd","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"2c79af7ea85f96db7897cf8cdb4d002ad2308194e03981876edb8d904ef65137","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"ba884e5cfa1ee6eb38217181711e01bb0c37b3e33d1424dfa89ed3e29ef6205b","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"4a8b610e09d35aa21c42ab8c3e38de600a944c094e6b86ea56828b5e6904f1f7","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"2ccfb5b1f3923d35fef88838c508b98b5516c5d409643881d2304ae49e50eed3","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","up":true},{"one":"baf219e9229921b773d1ad7eb7eb5216cfa60ccecaa3c5c487e3b71cb600ba12","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","other":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"0ff2d2c49547eebc96675e0b88073dea5e9091bee1843ffe567127e34486c348","up":true},{"one":"af02b5d107b3a17f539c7f9020ebe74322434634e70c420a7f56776eb5d9db73","other":"ac4d2d6836e2cdf4c88221f6013aac70a451dd15bc403288bd10d0b911cd9a2b","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"ff36a8810dd44f6d1fa42aa91ff6206bcfb4c1ffbab0df73a181daece329e0e3","up":true},{"one":"fbf5e917be45e909697a9393c4778206333cf1dd9a103978e8d71622ca3b1cc8","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"a653302730df3d58f796906a93933aa81494f2588d9485ab7676ec3b0ccbb426","other":"a46dd535e3bc8f111a8b2ce5594b62e87741c395e8a2b8fbae33edd29cb8caf8","up":true},{"one":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","other":"6f2d756566dd5b4a13ffeea9f687c785148f3407a502e28b9d6edfd03b905fdc","up":true},{"one":"103b232552b94090232195dc88f84823701f35ae536b5af6dd33fa655a33cbae","other":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"9fa0215e980dc907df4cc47ab4937f36527d78f9837493016fd4fc51e617299c","other":"959fda0866d3c18e9399e98485d627044079d6f86b075edaea9315402f5d9395","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"e5ada0415c92ef1511b15d04edf395976464afd9adc3e929c41d4d21d25e3182","up":true},{"one":"d3b0dea1dd3ac71e7e4a30941632eec53cb980aa7cb6cdac95042a5400a878c3","other":"d7aca8f2182bc625d2b3c942bd1161c85bcf1c2b34ecbe3e2fd23cfae6b8a871","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c43fbee95380007274b8f231fe34bcd59b5c0ef0830b174967d4702627984fc6","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6fe9a02e950a5c3a5ff026b75922ed687d59795ba8eb9c092a8d09a5c64d2453","up":true},{"one":"0cf596af91eb9b041fe6dbe6b288c5730413850321b5ab176c81447e34ef79c5","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"512ec5c2e6b4d788482462d941117c81fcc0e73f0c15545794dd1b4e03bf2102","other":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"35e6b1d31f594c06b759525434a7e717ebe6f27ca0188f247ed1247664a50563","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"2f32d54f06989efb6ca5431b74cd759fba05dbef36ecff8fd506e662026af983","other":"24b85c10f098725938ea7d87cd24a4b10358129906fca9790fc266ea8784b538","up":true},{"one":"628e7da3359ed6d9dcfbafc7581966e4e09245c321ec78ca75587c9cbb44697f","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"1c9caf028df31681b1457a54d4b3ab20009f9fa5bd12417a1ba7efe0c660e6bd","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"da67ace34f7076a1d550bc61bc2a31da88d6cd9f9df43b142a8c6bbade1b4aee","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"534bcaa98cf9192b35b6014c650ae067e74332c015ebb516d63601427d7376b8","up":true},{"one":"33b5c521b4208e26414db2e05c9a8ccc001a524d928579d44d2e74d14a56593e","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"88fefb7506105c0e269baf52955a01b19f55504b13133bac0beab41c9f6e6942","other":"8f2182c2c2d0eeb2e887dbc350ae7257819f536032851ffdf29e7842cb1a62cc","up":true},{"one":"c620752a083ca1ff0398937235cf964133939452c293c799ce07ff8aa2bde420","other":"c26fd5e6504c7b3f0a6d9133ff87c98c110eb1c201c5f3bcf6b10653f2b972d2","up":true},{"one":"256e81c5a6fb43bd343345477f8f96aa1947f07ac3297f631ab03f060147b062","other":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"4d103ec5afee559a5a9242e8d650b67301eaec10e96fc2f184e34d48554108a2","other":"4c9eab8ab45405a6d4bab46430efc04b8e6aec1d944f88435eca41361925f379","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6e05179dc90a8f6654d0c9a3f06173371dcfb18b852fdd77f35f75e38f273125","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","up":true},{"one":"4bcf4eb531d5ec4b31d99e8354af03f976524c7858a1e7043e9b7055326f0952","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"3b78bc987c7c31c94e8ada9b4b11b5db9387fe70dd01ce7f3e976d3bec433dec","up":true},{"one":"478278187cd9af799e83340a2f49b0b7f122fb8e08c0a372a87795426eab364b","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"6251e9540448726a601699ef4cd19e50c969a746da27228967338cdc09d628bf","up":true},{"one":"5efb3bfc199f5408f79bd6bd5171b4bf332c68a8e49242eb4f6a589b963565c6","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","other":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","up":true},{"one":"32371744163f0b3aefd3955dc4877e7eb82b17ef9541c333ca9c0a9f8aec3045","other":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","up":true},{"one":"582330d8b8c49331b2aec790dc7325b9cd483fc8129323d31ec429d545042964","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"4636f00be60a9b494a3ebc9ab41cc7cb53ec0b0beff214db2d0a248dc3aeb6af","other":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","up":true},{"one":"738c2d42458965d03c8f9f055eaf0e3edf3dfa2a4de0a048ec05b78e7b765c90","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"1e2aca93fa9442a0034ae8d295530dde16fcbfa8c37227e2e6863babb0f87c34","other":"1f85b8c05e5dceff0bd8256f8f6d80d4b902a9754ceb952d95ea2e1150ef9e59","up":true},{"one":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","other":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","up":true},{"one":"ef07be559914ec4b5930d90d8d8b6f32dab9eba23acc36f14d512307f9974348","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"db6a1f6b342f6be9517f8df01003797c11c837d9aee3cdba5b7859230b36c35d","other":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"63370e288ab2e4b8403c6678e9c44ae5c7496b5ead614306fceb85986ed29d18","up":true},{"one":"30bec7cd0a7d002839aed7654129bd2fe2e2ce7f42aa7bae1560e8bf718954c3","other":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","up":true},{"one":"53fe2c13926507a7a6c27d0fb30a2c358c4c7bfa40df8b5fa8ec8986c2450519","other":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","up":true},{"one":"cc2037c08942a094df12f45831f28e0015fc3ac04d5b8f24ffea9bf3a0b02c39","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"30897492824b19540d13ef17c70845be6dde455dca4e4f84cfca14a2c373969f","other":"314a3530a5e0c37d5609149b3ae9c2e078573346bd8fce3c769ebaeb31726ec1","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"1f670c53b4c597beaffacd84e3a697225b04cded9219d0a28e1fe525a3cadcf5","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"3ec530761ddb87f930fda919be67df18074c6f0795292add1b2a91ff3d9c39e3","other":"3f946957d910179c7e1a83c44369aacfc31f5727b1a6421a01c8a978ccd349a2","up":true},{"one":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"0743bcf2aaa77e916f4a367d6159473c7d80f46a2e4cbe9ef346e423d39d7072","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","up":true},{"one":"82f9c9009f09de2d6a77b54976d14c14211eae65d886f6ed57560c700716dd5c","other":"850575577d6b420a87aba388af481e0c044c2f75cf29ff934daf5674318a61ba","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b820e480354000c837b1781ec1c493e8776b4834252e6453425ac05b925b5a58","up":true},{"one":"e8548b5df15adf0f2a997ff5709827beb5e1d36bb08a2f2d017746d5c0e83fca","other":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","up":true},{"one":"165f1af67aa1d24569e0bdff61d29b3c39e93250071d8f25b5be6face209ac6a","other":"17040a3aad5930d8e0de1011fd2996b7d09225989f0dc1ae8f7e7a52dd26ab4e","up":true},{"one":"16725e318322353befc2f2aba112f0984bc011821bb16c98e2cd8b39cd62aea1","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"33737df75bbac1b41c63f05ea2cf1523b972df17f22bda026db84a49ac35e1e3","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"4d6b939fb67338c484948ab92b2ceea4d4b666d7e08773673cd7c8f83f495b89","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"daec45eca40f48843b41f70267c07e94996ced829f02710f15354fbe26e177e7","other":"df1e4e46e8ec26cad74b4f35ab070f12c8f6fddca35ac44c1218ff60fe1e6bab","up":true},{"one":"53a885968d68d8ebf7ed514e662cc13fa03186d2361000a03576531fdca2a25f","other":"51db114a52827f5b74088bd0fc87d35229e7740e7d121bd7699298396516a880","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"7125e05bf1bfe6df948c9276b62bc755fc6b0ec8d4ac7724b61ea49591adcf25","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"b2a563ac59bab4dfddf7b6e27b80ee7afdeb2e4295411107903f484bcf9fc4f2","up":true},{"one":"68317431e4fa55be4a700e35c6a578307cc32b72336679b5c5618b622ef0c602","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"c832b4ad64a17da4b796ffcac646c2aa666b276aabb7eb3bfe7981d64a4da402","other":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","up":true},{"one":"e5149cedd990072f2aaa9735a9259f28973c45876660c2d86ac105e56cca8e68","other":"e54784cfbcd89c37c8f758aae70ece3ab4b7f8c30fb4ef7543e04aa89ff4386b","up":true},{"one":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"d1d719ce1dca507598449afe966396c160ad25ad632112ab268b1d913b490dbd","up":true},{"one":"461cc9f064e6f4f06ff38e0d1f3f00ef8807ba31c7258e453cc682e9551bb1c6","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"44a10530c376b215baff8531eeb2afb8d6714c4d0350d1a6f32761a97cd6c7ec","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"2abb938b889a2eb735134462985a56056be48f189b5b89d23b653864c76427f4","other":"2a0a8eaf1a2749e68f8b841578c160699cf7907ff23842c6d616ad884e5f613e","up":true},{"one":"915d7a0510bad19266eef8f00ca0cb2efc340253775706495fca8b9160b512cc","other":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"9d0f804849b72397646ba48208ba1e01dcf4de04e788016c4a1a0c93e650ddf5","up":true},{"one":"21012a3a6ef1ece48fd9d7cffe62dc75839dd062efcf3ac5f962c237814da407","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"179f21d2e0421b8056ee9a260bc0985bfa64a52a36d0a8fbce4e03f3120d1d65","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"6c73150490e8be9677c40086de0aefed1939581048e26f4a93f5ca26571a1a8f","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"ef1b70bf090bc9994b1d45e2812c56ecb430a89c346a436bd10880bcda700351","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"1c8a10ecbd72acb2bbbb8b77ea5404f9e90f4dbf306ec8134cfed70b40aef399","up":true},{"one":"3b88a472beba4a18f8df45678888fd359bac3823900eecfe0037fdc9ad54d416","other":"39d1fcae2d23c775214988251505c577b9ac7b6851558ddf9a437dfe143f3845","up":true},{"one":"67aa5463e4b32b363b3d01d2a41ccb03199411057276f4962d053160be29a6ef","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"ca041da0dc514643d017458d08ff6962ec52c9e66571a239ec395dc8b2546709","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b95d88ff6512ef8eaaa6bd842fa44175c1484fc2e8601b83d50a5ffa992bfa3a","up":true},{"one":"455936fd22c43794e6e2104fd91d3f5d246e3823e8ff8eaf8dc27aa9f3d2ee08","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"e775e9759d4701bd9b43c22f1d1be73c1262b2752bb23cb3857485daf1dcad2d","other":"e5d794d64003725a74642f097c0ee76706d78419b6f3ea819d440bc0ad166eac","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"fe2167fd33f383110eb3f6caa7bd905ca54fa0c810f1b8a34483a846f3cbddab","up":true},{"one":"c8986871e46f001d15ed8b70f2aa0fea8ae309d5e5671a500f619e3b348c8c15","other":"c9f5acafbbf8c66647de05b0848d79451eee490709d53f118fc2051410cc8203","up":true},{"one":"f5b24a1fd2cd2908b408562f9a265ee1a692b137e770137afa5fdfa07b237221","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"66e7fc2df51f5df8d7329851fe9357d895e9d5dfdc25f8d92bdb10a960f7e15a","other":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","up":true},{"one":"90765b72283f59be4cf9bf7a9e9a22fd6db701c3603cbc0817b4adf2f8e9ce08","other":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","up":true},{"one":"c441d27a5f4abaa8e3b0f040a6ef85bb8c970031d6a57503a674e36b3d6915d9","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","up":true},{"one":"baddc778aea97acdbbb5bc99744a5545abab9f6047c81f328761645287ac391c","other":"b89793c3ccd9ea642080728732ce7df33778653fed3d1d8f3a25e60670e33325","up":true},{"one":"6e68ea86440706a0d73a9508f2247492543163f8fa7e2dc2aa62b74d50261b8b","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"c49caff13862dc089f1f9b8180d6efa455648375662719272102c4f8028799d6","other":"c1f9e8e1d509febdf1f267bb227741e513420048a2e669ac9eef4b05a29cf10b","up":true},{"one":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","other":"46fee69dad8b6a6a87d356d10db25d835a0c4e154bf179e88fb4cc65f97d72d7","up":true},{"one":"fe316679eca0e0eb823325812a56fd27da02653b06ada2fd03b27501bda8371a","other":"fbc8087a723c564ca0139329902e79748af46699ea7be24d57909a7e8e96f681","up":true},{"one":"20aeb14f567dd16f06b0d3b589b83283daa00a5ed10e447860bda946baccdd2d","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"b5025d153581d333b44df4b9bfa69d87de138905172e4fd317e16f7099a5fcf8","other":"b7cafed41dac01dd59e2bcaeaaab551ebfeab8eaa1f97c1866fe0ddae772807b","up":true},{"one":"49eaad68d23dd63ef26029fa3f4e2578f3deca8708bbc838750d8b6dbe9eaa38","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"b5b24532d2810e311e10b1d606baf6007f9124b88a178b32713cf1eddae089be","other":"b02b01a5c37cb05c287a3dc7d04e305de26f8d62dc388542eeb43e97db7b4282","up":true},{"one":"03ccd8d52597d18c0b178ab7361d847d63aad3af920a28345977ae170a1dafcd","other":"06618d829a8a7317a98f1a40ecf8864e1c94c4e270a9e4c008229dc7cf937b7e","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","up":true},{"one":"02d85b9f8e4776224ae5088683a87837b82b2bfb7e047cf373a28393e7aca6e1","other":"00c6488a842ece7a8b0daf064e405de03a4257d308840ea52bfd48d23f54d895","up":true},{"one":"0c64e5af869b1665fd4016ae6d04c8eedd423636f06d78ecb944ee8e3272a82a","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6ecb5c36fc0150c287446ae8a8682d629a1d39341230717206219babe3bdf659","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","up":true},{"one":"17db15893bf39b42593ee1de975aba6832046d9da5b4b493ec44272738a29cef","other":"11d43f6ed0ddd5afa5c8a7abf7c62a4fa865b7a25ee295bf1a49701ef3081363","up":true},{"one":"d887070a0568282c69e96ce65612ba72d5ea26b5c80671435d6e1ed2c4b49301","other":"d29941d6b8acd86cf32fd1c2181da3ab1da3c2083134b068ca49ce29aa86b783","up":true},{"one":"3630e05326bacea8fcc739dec42085f845f416ddc698c76ff91f099eb1dc5007","other":"378e7af7cc019186d4f2699e753e2d71302f8f3565572c13b7a1b1c5cb47443c","up":true},{"one":"47bfa3767cefcc0831d410d5402e9396e8a412c8c96faf55b451d3ff310f3b02","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"4ac755123dcc64ef44db9280311af51f3f7a93e0dee67370d673261220356eb9","up":true},{"one":"53087084708cc5ee63ac459b18fa10ae52a823139b4ecba6c8691d4934f2f971","other":"574f65867482091aee2774033116c233525eea711706b5ae9ba09b54e896d302","up":true},{"one":"f7baef876a62b92ebe5ca9ec6a085e0eb54fd31e2425e662eec747df3cd77592","other":"f45f1f2e59e947e04fa15bcf87f872ef6d73b73f778e12d1f9b8930ea166eefc","up":true},{"one":"7290cd3affade5f9e729d1b03549aceafb2576cdbc6789fd688c95495f10bacd","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"4e5a46c004e85cf86a02fdfbf2243018825d015debfb9a077a1283d302293b3a","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"976e57d0c32227222bfd0cbb802f269bdcd52d5d33cf689c66b12c023f5fa8bf","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"ed2d3e1e5693b44494808907c98ec54d6d08331945d2a2c03e31130fef1d2586","up":true},{"one":"0a005eb9c10c5cc9f720cfec2a655811d391671597b4f32d12df291ec76b2c13","other":"0c28cd1315890629896d0fe5517524d4eb788f7444709c135ea690ba4e6103d5","up":true},{"one":"610334a0772d3414652b575f2caa6f2db32224907c24d06fda643db9f2ec2afe","other":"60d7337ef806be95ccaf7b9d663a4289f9afc68edced62904ab50601cf113f45","up":true},{"one":"0de3915b0bcc68040c8aa76fbd2cfa0714e9b34c9dbe0838a7cba81c4f73581c","other":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","up":true},{"one":"f773b83f1a1de2ab6660edb0b765cfccec6778061ee25c5a84f968625686ef60","other":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","up":true},{"one":"ec52270604007673d1bfda1edbd8bfa945a21141efd85e42b684a9f30f8cddae","other":"ee5e77df690329c132f2f7fca223cfd384b7bc34ec38763a4eb42780e0585656","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true},{"one":"82dd83838cb982b89505ef249d353a20e434346dd78b71cd9b809f71d5c112da","other":"898d2f7d46b4961b646d5a6142d54d6233b7f80f668ce234522dd02e2cc545cb","up":true},{"one":"6c4dcdfdee0164a9a3f419430726dd51f9198c65ff6e7de7aaa6f632dcde6794","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"6967e7438125c2045d575eb9f407b4a38d1bf9dcd1c1c1a97f750da6a21aeff7","other":"6f5f5a77e6092e25e5308413e02ba62c1c559024893a7fb98e26b0f34fed8bfe","up":true},{"one":"13d6cb9316e289923e2d1de7f3c966d0cbabce3acdb8017122944f4abb140912","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"f7fa2986ec9f84822b11a6b00bd03a1dd26f2a0fab90b1b308f08caead43cfe1","other":"f31cc744ea921fee8364c5269b1ce7ec6b5f0c0cbb6885efbf602de5b36f6169","up":true},{"one":"14dfb8414d17b2df15eaf59571a8cfec99b1fd674561da63ee99af853bda07da","other":"140020a23a840b8840ba0c2c384f853a606330e9743885e9967cf49533db282e","up":true},{"one":"45584a4bebb948ef5f7b55d4846ec5549d7623682169c0edcab5b3523e68c7da","other":"41092c852fac630df2a9ca0862716f8e9fb8566c904a49c96389071046bc699d","up":true},{"one":"499036eb9d10fc003c903f09ea0ee00c0d27b39564988d67ae111f3473d22f07","other":"49cd1efed6a56a78af4ea4ab40813013e76c6a5fb9d2029ee02db5d80f5e41a6","up":true},{"one":"1a2a0e0bbf83cd40936995674418ae469aa2b92876a4ceeabd8128f536b7d7a2","other":"19faaf891eb6a716902ec29d201dc2094ee474acff188ae86faf9760674b2d37","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"4646fe4c119078738612b44a356089b3c73a08e11cfd910675d211ae6b20b8fd","up":true},{"one":"77d2ec52dabd5d7f326d4c6afd2aad110487c6bdffa2984060528716ba873462","other":"7dd3078c71087ab88d4d26a962820bcb79b8ce30e91c1f9a69d4bf8d38086960","up":true},{"one":"217f9952af1eb58d5ca5ac7be763716cfe2c0a4f3cdd4ebe4b5df563f919e2d2","other":"21a044e772b7c955fe4a6fb7c3a9a20e95d48b7fd6b9518741782f04f5f1f5c2","up":true},{"one":"444722a15b01a0d8e6794798d239fe621d59bdfc08823ab47cbd8b9acebd23b4","other":"41d9c03e44bec3f84a6139ce40ef1e390530f38ed11860575acfad03a49db095","up":true},{"one":"0af9a57a2f66835cd3e4e71bc026013a8a99ca337a7b6b6cc34e11d8da212a4f","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"0e5e0bb1383b2ec569b157a1d2ae6900592ab892a28367f5613a4e29cb265088","up":true},{"one":"0b72054403f78a64a787f46e9f26bf0de7bbba5a60cb105e6aeea46cb4a1d9fe","other":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","up":true},{"one":"96fcf14c7f90350091ac6fcb58306ccfb9e4a38d3da59f8ab656854332844cbd","other":"90a85cb7363ede161ec21cc89f8b9d4350e566cf10586a66d31b0a8677620aa1","up":true},{"one":"0d8a919207fb2d5718eab7da95f8efeb01a4e1ae39602d315f8ba2ff1752d9da","other":"0fc59bd04ac9de3195e3c9d0eb573952a5805dd2e7e572078b6e996778adec73","up":true},{"one":"f629b8b9e79c75ac559daf9bf4fc8672bfdd595cf2c5d17a8885282626fc65a5","other":"f4e09f89287bd1af7833acd85ba7cc71fdb3ff34f2f409e1cf2a878dcd3183dc","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_32.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_32.json index 55bd2f22..527474d0 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_32.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_32.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","private_key":"b571efd8e722db149f98412648275074a828e5137b46722413039489eb617b36","name":"node_d2a392e9e7383b895587a7d6eea4a157de20caa9e2c62b4da5a8ff3186d129fee1330ddf3d180b1f59e1aa83686cd163222e38c84a84a0f60139968d6a56cbca","services":["streamer"],"enable_msg_events":true,"port":61468},"up":true}},{"node":{"config":{"id":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","private_key":"fbd2e7bb8b511ed0878fc14a5923105866ab2c3bdf5ee2c52c1a2bc7c00a185e","name":"node_6c0b3b7c1c08bb558d92f0172fb8bfabe52a4bf8348b2f82e50c6d492a595dd0677b4559d7d2cd5a6e51ecdaf9a0f898f154730b87a8d9b265c6a54f9f6802a7","services":["streamer"],"enable_msg_events":true,"port":61469},"up":true}},{"node":{"config":{"id":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","private_key":"60a362da222a74d3d81ed679549417d55a92c79b8e0aab1bf05eb2d01f82c0b2","name":"node_dc63b83b488b7b505d5b2a60680b7dc87b1c5b61509e8030ebc67512ba72c0f616c1594946878dfb29e79f351d7134306778a74d5f5b7d5e08dbdb6dd6ade359","services":["streamer"],"enable_msg_events":true,"port":61470},"up":true}},{"node":{"config":{"id":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","private_key":"00625fb0f90ed61656987faecdd0690f0a97c88e33f6e339fa3a8f4bfc1e640f","name":"node_eaa3ad48682b08d9c91907a79e82938c1b30108745b276788c830dfcb0c0e752134369d751230e95fb7ab9777c38dcd105ad123ec5cc86ef6dbdd11fe31aea93","services":["streamer"],"enable_msg_events":true,"port":61471},"up":true}},{"node":{"config":{"id":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","private_key":"fbb38d0ed3ef4726052fdec97ddd7eb3a3feb3d2fd5ea6cffe8ff97b621958ce","name":"node_331084cce2884ad912d5a20467c68fc261a02d6df0b60ff5b1427edc0885eab66a4f0f7e7fc9c676e994842f8126a3b34dbde91243f26bed6a0ba14babed56cc","services":["streamer"],"enable_msg_events":true,"port":61472},"up":true}},{"node":{"config":{"id":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","private_key":"b5c12698375aa5215df48003ed13c94e00e6bee1a0b05277237d40f0fcfc625e","name":"node_e00f9a5611008d54bbbfe6a1cf402e011c92f540b47a82b7795508d1b857eee4a522e26c8351ddf6e303d353ee35afecbf9f54d7aae36e6736174473ac4caf73","services":["streamer"],"enable_msg_events":true,"port":61473},"up":true}},{"node":{"config":{"id":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","private_key":"90e044c682c33ed90f5f5cac9b8181ee978d2cc9d3d3f545140858d324f1d7e1","name":"node_e4b7b3bbeda388842ecb3688c041fe58bbd7e4566818a58b679e96215553dbf8569032a3ae941b3f8bb3e75886852d245bda5abf0c3cf70f532c38235e1a2175","services":["streamer"],"enable_msg_events":true,"port":61474},"up":true}},{"node":{"config":{"id":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","private_key":"2371e6ff2ecc4144ee61efa958488eed6c1f739e81f27bf775db1e9b66e89054","name":"node_0679dbbb51fa0283bcba387daa2180955d402a0ed42155095fcaffb96dbfd6b4b1bb0ed2ccf11cd990dfed4a3b320ee3f64286116a7b617a35989a448c367119","services":["streamer"],"enable_msg_events":true,"port":61475},"up":true}},{"node":{"config":{"id":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","private_key":"87a3816c95159c72a7ad1b466ae9a095f12c7db210fcddd8dbaaa697220f88bb","name":"node_a197cd9e7e2d19287745f486582b7242c991f36183e8b2bf4983d7a9b9026e9884e3295183f376cd796b814fdf352b1c8c5c609a0e5f5d5155ab925d4b6fdeb9","services":["streamer"],"enable_msg_events":true,"port":61476},"up":true}},{"node":{"config":{"id":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","private_key":"6729988ebc04b9398883c068277630ff0de16f16e3f67114380acfdb0d1b530b","name":"node_eb11498b8cebc767d535481938c664359c6c84674da4d8fac729df64e288248bb020477ad4422cf1b7cea844db5ee12bb5cea82ac6e89a338d8ca1073e061f4c","services":["streamer"],"enable_msg_events":true,"port":61477},"up":true}},{"node":{"config":{"id":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","private_key":"208068d7a920e42db04340bf473f822d4d663f5139d664c4375294dd61b1dff3","name":"node_d3b5df108f35a82e569016a06fefadb52797dafb505de1981f6678e2156574893a169b0adcc595377267dec0b7d620b5b50c7e7696c39eecee2c3e5f7bf71d18","services":["streamer"],"enable_msg_events":true,"port":61478},"up":true}},{"node":{"config":{"id":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","private_key":"b3a7fa29c4cbf15e8fbbf289ab9876b438bc80092284efedde8e8d41ac76ad78","name":"node_1be1903b1104bfae07438fb888993cb3e812fc38c8f26af2e68bff9f1758e9a69b29be3636ee24060c09ce900bad2004681e1083792b2a6e532bbfc07a3a0459","services":["streamer"],"enable_msg_events":true,"port":61479},"up":true}},{"node":{"config":{"id":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","private_key":"91b7188a3178bda6cd2991a615801d744f4963a3de963adb8afb3f12d02cbc0d","name":"node_26a6b8d30e0a8954bd9a0424b817ff79fec2e0521c1313c8262be9a3b9a0d1ee7f109be78d65ca9eb811a1634a813f4ba609887fd3c0085628b2a8ebd3426031","services":["streamer"],"enable_msg_events":true,"port":61480},"up":true}},{"node":{"config":{"id":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","private_key":"235b967cd72cdb90b423f2b5604e9157f660b253cd2df62369f204f45c3c4d7e","name":"node_255c353a7585ab1bab41bcca409383dcdff5837bdcd7cebece1b6896fc06d0f65346ba618dc057c77734439612cb8cc3fd8aa068eb7569f0ad9e9e172daea678","services":["streamer"],"enable_msg_events":true,"port":61481},"up":true}},{"node":{"config":{"id":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","private_key":"f97bf73ba53833e4f4c44023e87cef8ef7aeae380553e4a5a4f3215748646a27","name":"node_c88ceea7f4d5148de8e2d71ffefc5c336cc62d322eb4371e457cbb97573b6323d200ff7678f94ef481c7b9daca3a9a7bab1e658d51fa279d433e19305df57814","services":["streamer"],"enable_msg_events":true,"port":61482},"up":true}},{"node":{"config":{"id":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","private_key":"c4c2ee3b5792dc5d86b51c4e13c813df452094ff2f6296403d801adb1f75a500","name":"node_4299205173b81c2822767a53cb4728fd5c0e1602d5976ee5db63b8118e489e4645ccdad399d9367e9b87b0a1f39e7988db86af687fe8cfff35d618b19d64b1a9","services":["streamer"],"enable_msg_events":true,"port":61483},"up":true}},{"node":{"config":{"id":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","private_key":"b39dd34865d2f02c1d4c5ef2ca635ef5be43c4b2318b133d281b02dacd8f5420","name":"node_5ed2923d11037da9799d933ea62cd23ce1aacec66a83a6d3a7e420ea0c66ec00af37977a78374df12dc0facb426d0c39cf306bea15abaf40f9072eacc4cf40fe","services":["streamer"],"enable_msg_events":true,"port":61484},"up":true}},{"node":{"config":{"id":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","private_key":"a93bc07ea3d259a03c75a6777e9401f062a8064f6837fda8a1abd518774a75ac","name":"node_66ce6e2c75f429c4bc7de6f1c785258686cfd66867336a1030830bbcc78bf642f4d1920ab5fc68953b70b7aca02ec518515d48d20397ed207ccbeb88c36e7057","services":["streamer"],"enable_msg_events":true,"port":61485},"up":true}},{"node":{"config":{"id":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","private_key":"787adc2aab8500ce6ca1768040b4c81511e7982f525c0280830f8c32486a6fa0","name":"node_cf7d1a8ec1c3e68e862ef18947098ccbf6238fa7f85ee0018b7ac63b5387d6a9dbf194e3aad7edd1fda63ea63f2f5b8692ff885084adfd1f7b6613593960afc4","services":["streamer"],"enable_msg_events":true,"port":61486},"up":true}},{"node":{"config":{"id":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","private_key":"6a830e44eac33e88e29c9119fef789abd89503a44ae8b8dd64c0a26046df4bf7","name":"node_a54b9c0cbc07e65b216f78bc0f56cd7003896641f1aa361fdc11e0bc208ee6bc876a455e89dee8abf67c259c7b6a82e7ac0d6d06cc304ee05fbc26783c09863a","services":["streamer"],"enable_msg_events":true,"port":61487},"up":true}},{"node":{"config":{"id":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","private_key":"71341041894a268f86cf62e8e80605911c19f38266bc49358c54f9955b4bd984","name":"node_82bd5207dec292f911ff7dbcd242bf8962ab256057b1173dba2d71cd8cc77d41f38bf8d9a4eed83edeeb0e6f5bfabe8c7cae9490cc17dca1f454b9ad1b76224b","services":["streamer"],"enable_msg_events":true,"port":61488},"up":true}},{"node":{"config":{"id":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","private_key":"1a7bf17688ee55a634ddbf081213180f5a6e171a4b04679f50a949e88287591f","name":"node_61cbdddf6163152f5f8bbe3c710eeb9afb22dbec78d8f7eb3fd45ba44493b9387765527f059a10e694842786959c501303b1e62d3454c84870c14e0f36a58b0a","services":["streamer"],"enable_msg_events":true,"port":61489},"up":true}},{"node":{"config":{"id":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","private_key":"87d1292398bace7bdd961dc2e1f028d405eeafebf90ef8d8f4b411fdfd74d767","name":"node_74d5d4ec7fdc749d9148b1a338b643e0a06abe03720b1d20b505da1ff1585b09d2cf7053293544fae1409cf26a27144870125787a473a73a1c4ca98509dc67ca","services":["streamer"],"enable_msg_events":true,"port":61490},"up":true}},{"node":{"config":{"id":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","private_key":"1d65bea3808741aeabc5293fcb863c594c7ec07c955b3f23e28d2ef4b0b6e578","name":"node_12934e06d8821c5e149d944ee7a831428dc6c9eee8705f3b21046fdadc2864a9ffe2bdad60a4ba5a34d7a79c22631d52b62d511e81971b6b98896acae9427e94","services":["streamer"],"enable_msg_events":true,"port":61491},"up":true}},{"node":{"config":{"id":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","private_key":"f067299a421cd124f8652427793dc41c8a5e6bf1dc2c4de59ef396ca08e80256","name":"node_e0e0e90fa669023a1a9c564727cc657ce564c23e05b1c2b61f6bfbd5eb03feb75d34b029886e3426e1bbe4a49398794dfefa0557b7db57c15700c69c0e038029","services":["streamer"],"enable_msg_events":true,"port":61492},"up":true}},{"node":{"config":{"id":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","private_key":"5f76a5630d4f1979d6d03dfb0c8836de7852e4ad14536f4b999e565b599027b8","name":"node_1149e4bcd71c75b14ba7492587fa77e4a4de14e5c580a165ad8835258d1afcb15e65d02257ad8884b0e47be061d3129d8e3af90cbe4a1a96f828a1f84e0d72c6","services":["streamer"],"enable_msg_events":true,"port":61493},"up":true}},{"node":{"config":{"id":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","private_key":"0e4febbd0bb937f5992d0e640d5b599a0dfc3b40740d7a0a5fd16423dfcc87fb","name":"node_695e5706cece9d923c19a147283b772dd1ffa79e8d08506d2ed897d89545ffbdac1a130bd7ceeb82a2a57f2b4a613aa6e7264911b909fb9bff27cd435b802687","services":["streamer"],"enable_msg_events":true,"port":61494},"up":true}},{"node":{"config":{"id":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","private_key":"54d714717b902eb733a693d473a4b4b243318a9fd68d1b8abe98eabcbaa8c015","name":"node_e28c769630f19e79966bc354bb38313522778e4f06cd0872db8bd3afd7651882eba7b0403d82701cd063cbaee4ba0ba4a97c0c488fb44e8c8b72368d6881fdcf","services":["streamer"],"enable_msg_events":true,"port":61495},"up":true}},{"node":{"config":{"id":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","private_key":"43e07e3593646f9ec6c3b630daa34ba80dc37bc0f5c57e3f3097f3503de413dc","name":"node_2b1d1ec3ee35fa63571f46a2781d5fb14379319da2d67e482c24b27bacc2b792cd61a2c1138b8ba27673b1c08588064fdf9c73c80f0278e4f0ba133d78127337","services":["streamer"],"enable_msg_events":true,"port":61496},"up":true}},{"node":{"config":{"id":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","private_key":"ef8ebfc1df0b19885db4b08df697c11a86c2442bce48d5f6f807b7e8dec70e04","name":"node_b5e3b3cc7ac15224ff10cf8974ceaf7ad2ebb18ab9505bbb342c42e6ca65fe3541c14e1ee10ac3a0e7a0d87c29e25114e0c0d957d5dbbadf6136805be3046b4c","services":["streamer"],"enable_msg_events":true,"port":61497},"up":true}},{"node":{"config":{"id":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","private_key":"1cb586254c20e9a6f4cc428f878dcfbcc8257f00c21efa88519de7a425cb5e4f","name":"node_fb6e36b9de5eef05780efcf16113fc9098a699ac525bd970dc5b6a92f596da6ffca044e434b97cd712a4035c38dd3ab08488042519f6269bc5057853b643bbcc","services":["streamer"],"enable_msg_events":true,"port":61498},"up":true}},{"node":{"config":{"id":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","private_key":"2621e61b3b896a37c2b4ee05a264bb685f4a70c3caf8a162eee28dd6e64fa2fd","name":"node_aca2af376ef1c983514f75cd717c0852e9d4321e705517196fab4fafe109c1f3581866e1865d41977f8c23a31ec7fa218c11db0c87eb4bb96390025a96386f9a","services":["streamer"],"enable_msg_events":true,"port":61499},"up":true}}],"conns":[{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","other":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","name":"node_427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","enode":"enode://e94f375f0c1c7974305cf5d1fecd64491ad73661ce194a272f674e89051c5d5b951abfebae5a5fa9dbc8a26adeec802ea6188fdf67b7577fabf7355e92cc5d27@127.0.0.1:0","enr":"0xf88fb840ec3deb0830cbb5f0f9a78c5de4a7ca5fdecd378778a9255dad6ed45bd13d5ee61278d01af7de31abfce7aeb9e6d5421c0f614db1be5e98fc2fc82806a56fdd590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e94f375f0c1c7974305cf5d1fecd64491ad73661ce194a272f674e89051c5d5b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Qn9L39OFeWivXaNu7qBBk46ncbxsXpDujTWFz1efE7c=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 427f4b\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e4f7 d756 | 15 e4f7 (0) eed4 (0) f4b8 (0) fb64 (0)\n001 2 2529 2f17 | 5 2f17 (0) 2529 (0) 2643 (0) 08ff (0)\n002 2 76cb 6ef5 | 8 76cb (0) 74b7 (0) 729a (0) 6646 (0)\n003 1 577b | 1 577b (0)\n============ DEPTH: 4 ==========================================\n004 1 4c5f | 1 4c5f (0)\n005 1 4601 | 1 4601 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","private_key":"fcb9f591c3d058107af08804ccd4dfda279051673a0b48360a625d6df6a02de9","name":"node_427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","services":["streamer"],"enable_msg_events":true,"port":45919},"up":true}},{"node":{"info":{"id":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","name":"node_6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","enode":"enode://bad4b2d1652369de53e8b0f8f6c150f6bc3b38fb2f0d308b9f04d67964fa9440fc07581d83ba0e665be33aeadaf738bd53f4bbecfe55e4fc31c5af587ef74c8e@127.0.0.1:0","enr":"0xf88fb840f17e139df282d76ab7238fe8faa15fb41d782a0664a4732df0f7ade8fbb865db350f23fdf65ac06bff32805a321d85092a22e6b315fc0400a4ef16b16f215f200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bad4b2d1652369de53e8b0f8f6c150f6bc3b38fb2f0d308b9f04d67964fa9440","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bvXeXByOVbyJlIvxCnoq0RsHFw87XwSeQKheJEEk7uQ=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6ef5de\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 eed4 e4f7 | 15 e4f7 (0) eed4 (0) f4b8 (0) fb64 (0)\n001 2 2643 11bd | 5 2f17 (0) 2529 (0) 2643 (0) 08ff (0)\n002 2 577b 427f | 4 577b (0) 4c5f (0) 4601 (0) 427f (0)\n003 2 729a 76cb | 3 76cb (0) 74b7 (0) 729a (0)\n============ DEPTH: 4 ==========================================\n004 4 6013 6304 62ac 6646 | 4 6646 (0) 6013 (0) 62ac (0) 6304 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","private_key":"9f0d5a60a7b0980371a7eef29848b7d3c4273955e10456b6bdc71881ee7154eb","name":"node_6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","services":["streamer"],"enable_msg_events":true,"port":37449},"up":true}},{"node":{"info":{"id":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","name":"node_11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","enode":"enode://4b00f923b2c2e9c70b840f0c0e90d0941bb0875cca7fa12ec8f43c5eeb563448b209ae04c2a8e7e6e9cf2a9e9ab9ffb3c6d463db1351d8a990be553742f34fe7@127.0.0.1:0","enr":"0xf88fb8400c58fcc017555e27e75db6ed84521f731670fb55dd5e1f57543d23daf810a39a4ea3d74ca6680f4fb340829a17fd81d21c970e3feb3f9a04b8d1c29f974c75930183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034b00f923b2c2e9c70b840f0c0e90d0941bb0875cca7fa12ec8f43c5eeb563448","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Eb2BD3ukH0SBbzOhnZxwPSbyzK6ijEr4JfUoiAcK2Nc=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 11bd81\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 cbd4 9e27 | 15 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n001 6 577b 729a 76cb 6304 | 12 577b (0) 4c5f (0) 4601 (0) 427f (0)\n============ DEPTH: 2 ==========================================\n002 3 2529 2643 2f17 | 3 2f17 (0) 2529 (0) 2643 (0)\n003 1 08ff | 1 08ff (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","private_key":"ff99d767a883944922bbba96c25e19cb78641c0e9f32b2de37db70a29151473f","name":"node_11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","services":["streamer"],"enable_msg_events":true,"port":43277},"up":true}},{"node":{"info":{"id":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","name":"node_9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","enode":"enode://1140e5da7f3da364ca5e55f8598cd121887f4b1c780b8900f090cd35ef5b52873dad20397e7d2d1ba3da0c1c16df19be8d373165c5fe8af1fcab7c3daaa501aa@127.0.0.1:0","enr":"0xf88fb8400194560390e74c85e87bea47d73cf330581219f8acc6a7c4e5941f10b3d2970326116cf7258109729e7226bcc66d4624264aa4d717825090b70494d0664452810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021140e5da7f3da364ca5e55f8598cd121887f4b1c780b8900f090cd35ef5b5287","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nids22IiFQifDyAlKmq6IPV1Id+U1AHvoT9gS2JTTIA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9e276c\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 11bd 4c5f | 17 2f17 (0) 2529 (0) 2643 (0) 08ff (0)\n001 2 d756 cbd4 | 7 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n002 2 a11b bf27 | 4 bf27 (0) a11b (0) aa7e (0) ad46 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 94a2 | 1 94a2 (0)\n005 1 9934 | 1 9934 (0)\n006 1 9c93 | 1 9c93 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","private_key":"5509584c52b0fc75d12256db74098c2d08e2a03d515c415f6760c94ee65396a7","name":"node_9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","services":["streamer"],"enable_msg_events":true,"port":42197},"up":true}},{"node":{"info":{"id":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","name":"node_4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","enode":"enode://b4b928549c694b7d425330835de106ba3900fed27db077d7ef47b9de24d3f171dce1edfb7bc05dbb087d1935b11690fdefeeb8d52cb86c400241c739408077b0@127.0.0.1:0","enr":"0xf88fb8404932a241c860d9e3781f3d3e3dc57c0d0e9aa03ee53aa2e9cf343ca198f189e26f5912ca878cccc0b0e91669105af390f60cd802aa9c4d858eec97139ead6ab40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b4b928549c694b7d425330835de106ba3900fed27db077d7ef47b9de24d3f171","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TF+rt6F8Oj9YnH0uyjwN1aa4IXqrxUMjurdbavODrGw=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4c5fab\npopulation: 16 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ad46 9934 9c93 9e27 | 15 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n001 2 2529 2f17 | 5 2f17 (0) 2529 (0) 2643 (0) 08ff (0)\n002 7 6304 62ac 6013 6646 | 8 729a (0) 76cb (0) 74b7 (0) 6646 (0)\n003 1 577b | 1 577b (0)\n============ DEPTH: 4 ==========================================\n004 2 4601 427f | 2 427f (0) 4601 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","private_key":"c8a57fa979d839a728714a0cc091d9c35560d850ce2faa0431b758abd3363c79","name":"node_4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","services":["streamer"],"enable_msg_events":true,"port":37685},"up":true}},{"node":{"info":{"id":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","name":"node_ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","enode":"enode://a1662488c10698fca196fe9453c596e65bcc779371b4d765754a24a188cd6b680c1c8e07e21686f6caf4241f9e661ceddbbf57663a59fd739d4d01d845ca26f5@127.0.0.1:0","enr":"0xf88fb840e0f39d0e5ddeae60c3fd876087f642a075cea50df66869f0ab54b49f320750ed3f59eb3a2f096cbf67fbc0eb018b819416073d12c1d4c8d14b02697b305448fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a1662488c10698fca196fe9453c596e65bcc779371b4d765754a24a188cd6b68","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rUZDWDqggrO+984buNz1X+LjIbiVQADPrGvHLEnoX1A=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ad4643\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2643 4c5f | 17 11bd (0) 08ff (0) 2f17 (0) 2529 (0)\n001 2 d756 cbd4 | 7 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n002 2 9c93 9934 | 4 9934 (0) 9c93 (0) 9e27 (0) 94a2 (0)\n003 1 bf27 | 1 bf27 (0)\n============ DEPTH: 4 ==========================================\n004 1 a11b | 1 a11b (0)\n005 1 aa7e | 1 aa7e (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","private_key":"4bfc56ea8d973de3d6f451825ca9fcfcb36e1d6624c0f1d1641bee8e6683bc59","name":"node_ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","services":["streamer"],"enable_msg_events":true,"port":45407},"up":true}},{"node":{"info":{"id":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","name":"node_2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","enode":"enode://40b0f23d8cdc7ece33f3ebe012b2ad3c7b5d78c141883364116214d980d525cbd06bfce04c2312415cdbf028886a45ce1ff0e8b997c2a8b692415d5087f34641@127.0.0.1:0","enr":"0xf88fb8402fa9bc618382dbb09eb218dc9c159ceaf6b7f5daf74d44a16a47906fc9beaa9e2bdb5b7f188450d97625ec4536570e127e386356252f969bfe411c70d4c6d6390183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10340b0f23d8cdc7ece33f3ebe012b2ad3c7b5d78c141883364116214d980d525cb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JkMINELunmlRf1AI5MpU2/pAcmveIiFrU7+QOJWqCuA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 264308\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f9ca ad46 94a2 | 15 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n001 4 6013 6646 6ef5 74b7 | 12 6ef5 (0) 6646 (0) 62ac (0) 6304 (0)\n002 2 08ff 11bd | 2 11bd (0) 08ff (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 2f17 | 1 2f17 (0)\n005 0 | 0\n006 1 2529 | 1 2529 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","private_key":"de0328d5a7218ee32122b35212270355692c913773c59472d65894e53fac078c","name":"node_2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","services":["streamer"],"enable_msg_events":true,"port":37731},"up":true}},{"node":{"info":{"id":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","name":"node_94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","enode":"enode://943fb91f74aa53ab508162a6a27dec3da1265ead68613c62d2a8f6b75ca0862b94fb31c62d341adfaf3cba1b76a202633d46fc3b36115454b2fa4eaed4697376@127.0.0.1:0","enr":"0xf88fb8402f7f395a5e543c79b6700821d943be0527fff861c0faa5ad5ba3084922ac6733115483c5bb7d7d238ca7689f756d5814d916c5cefb739e622cfd7842f0392daa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102943fb91f74aa53ab508162a6a27dec3da1265ead68613c62d2a8f6b75ca0862b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lKKvprwS/pV2Xwn1eCjHfMnqRzzQ6eZVyp9G4burriI=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 94a2af\npopulation: 13 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 62ac 2529 2643 | 17 6ef5 (0) 6646 (0) 62ac (0) 6304 (0)\n001 5 eed4 e4f7 f4b8 fb64 | 7 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n002 2 a11b bf27 | 4 bf27 (0) a11b (0) aa7e (0) ad46 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 3 9c93 9e27 9934 | 3 9934 (0) 9c93 (0) 9e27 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","private_key":"830a6d825c4e4bd95f3f10d11739fcceb8aa5299d256b9530ee1c7928d4daa83","name":"node_94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","services":["streamer"],"enable_msg_events":true,"port":39189},"up":true}},{"node":{"info":{"id":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","name":"node_f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","enode":"enode://c65f56752b8a6c94d1b6aff48cdcb120cc05451e84e37a9af3284bc09212a1418f67818e62449dc6939cde59f698b48437516d84c29f89cb8ac9078838c53549@127.0.0.1:0","enr":"0xf88fb840dfd8ab1f1fa9679d9c6e818c3b9e3fc25c9ae3d006363c318df0eca480300692324e71c7c66011df3e78f5b8044c0714a7ac208dcddf8a1cb59fad30400d4f8e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c65f56752b8a6c94d1b6aff48cdcb120cc05451e84e37a9af3284bc09212a141","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+crJW0yRvqZw5eZyvGTkAOY94LVcQj7aXxSZzyGOskQ=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f9cac9\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2643 74b7 | 17 2643 (0) 2529 (0) 2f17 (0) 11bd (0)\n001 2 bf27 94a2 | 8 bf27 (0) a11b (0) ad46 (0) aa7e (0)\n002 2 d756 cbd4 | 2 cbd4 (0) d756 (0)\n003 2 e4f7 eed4 | 2 eed4 (0) e4f7 (0)\n============ DEPTH: 4 ==========================================\n004 1 f4b8 | 1 f4b8 (0)\n005 0 | 0\n006 1 fb64 | 1 fb64 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","private_key":"74feff500b31c6440e380f5bdd141aa2925f0abf00745572b50929d2244efe98","name":"node_f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","services":["streamer"],"enable_msg_events":true,"port":37021},"up":true}},{"node":{"info":{"id":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","name":"node_74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","enode":"enode://68cd12c71355f1284f696a0c62da83c4088e91a867af6368efdd74ce3d7eff265e1589cb822ef12e50c8626eeb8eb774893fc9016f33d8458f268c44bfe7074c@127.0.0.1:0","enr":"0xf88fb840d287a3644573ef6ebbc18a1e6fb2782814e728d6a430103bf57e1dc4ff67c6c24f44514803e4eb41bce24de090ffbe118ebebe127131f9ab9a60dc1ac8a8f0c60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10268cd12c71355f1284f696a0c62da83c4088e91a867af6368efdd74ce3d7eff26","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dLcg/Nk/+QfgovnI9i6TFeZML80CMYTr3f1IXXgrqV8=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 74b720\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bf27 f9ca | 15 bf27 (0) a11b (0) ad46 (0) aa7e (0)\n001 2 2529 2643 | 5 2643 (0) 2529 (0) 2f17 (0) 11bd (0)\n002 2 4c5f 577b | 4 577b (0) 4c5f (0) 427f (0) 4601 (0)\n003 4 6646 6304 62ac 6013 | 5 6ef5 (0) 6646 (0) 62ac (0) 6304 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 1 729a | 1 729a (0)\n006 1 76cb | 1 76cb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","private_key":"83492b92e97ad908351537aa0f01d5614452490cf85d56215d3006e338bb389c","name":"node_74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","services":["streamer"],"enable_msg_events":true,"port":44117},"up":true}},{"node":{"info":{"id":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","name":"node_6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","enode":"enode://8cda75928f71a74705a2ed5f5be1de1c8691e042595382f84f23bebbbe69477e0ba0a568d97fe91e18861bdc4e7c9c0d9a466e22f6e00beab183543e864f4769@127.0.0.1:0","enr":"0xf88fb840a1c957342355083dacdeffbfef817d1a37e22e1bbb4ff136c9815dcf336050f93ae809fb2490493975a93d6f949147035cc66f88d474bf97f76a3eb34134c9b60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038cda75928f71a74705a2ed5f5be1de1c8691e042595382f84f23bebbbe69477e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YBPUDAwV9aex3dWo72qAdX3pAisghTWTiwk3uRUHceA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6013d4\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bf27 e4f7 | 15 bf27 (0) a11b (0) ad46 (0) aa7e (0)\n001 2 2643 2f17 | 5 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n002 2 4c5f 577b | 4 577b (0) 4c5f (0) 427f (0) 4601 (0)\n003 2 729a 74b7 | 3 729a (0) 76cb (0) 74b7 (0)\n004 1 6ef5 | 1 6ef5 (0)\n005 1 6646 | 1 6646 (0)\n============ DEPTH: 6 ==========================================\n006 2 6304 62ac | 2 62ac (0) 6304 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","private_key":"2275b1fd6c200d65748673efc3a9afdd59ff34baf765acaf0f008a928367dd28","name":"node_6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","services":["streamer"],"enable_msg_events":true,"port":40301},"up":true}},{"node":{"info":{"id":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","name":"node_e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","enode":"enode://69efa89de7d90f3f3edad743eef4e6e36934a6a14fa9e9e1080320e890a94a7da29546296e7bcd07d2b061ee43e244f07340fb03a1a3b269f92feddacd0a9b67@127.0.0.1:0","enr":"0xf88fb840ff8a7a209199998d93974593321244f0a2ee30732cdda0e24ea6aa4dc0d6f9a42a576b74fd95f259aa67c31deec2b7d34e85330281f60bfceca4d877a7745cda0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10369efa89de7d90f3f3edad743eef4e6e36934a6a14fa9e9e1080320e890a94a7d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5Pd23d2eR2YI+zNasi//GDYwm5RA7k7g/Teiun/KhQc=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e4f776\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 427f 6ef5 6013 | 17 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n001 2 9934 94a2 | 8 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n002 2 d756 cbd4 | 2 cbd4 (0) d756 (0)\n============ DEPTH: 3 ==========================================\n003 3 f4b8 f9ca fb64 | 3 f4b8 (0) f9ca (0) fb64 (0)\n004 1 eed4 | 1 eed4 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","private_key":"4c402cd5bad71d24a8e1c56fa5ee6561720f8305502388535804bdc29597dc94","name":"node_e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","services":["streamer"],"enable_msg_events":true,"port":43119},"up":true}},{"node":{"info":{"id":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","name":"node_fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","enode":"enode://d50974428f44cbaf9fd8c7fa9472900980d63e4682d2997b985c1185abe3450c25406281ce806a8529ce399d671123ea32b363c7ea7f65d1d897bdc336f701d3@127.0.0.1:0","enr":"0xf88fb840848de2e989e6ff63e20a5895cf88ae9de52c8db2f19690ec42f4e41e7ee318a04c3600ad148eb7bcad1aa256c4dbef4597fea0e324996af6c61d7d8fdb252db20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d50974428f44cbaf9fd8c7fa9472900980d63e4682d2997b985c1185abe3450c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+2Q3C8BwchXkGvsNoaU/irpeEfRxuuT43EvYWjtmgno=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fb6437\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2f17 4601 | 17 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n001 2 9934 94a2 | 8 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n002 2 d756 cbd4 | 2 cbd4 (0) d756 (0)\n003 2 eed4 e4f7 | 2 eed4 (0) e4f7 (0)\n============ DEPTH: 4 ==========================================\n004 1 f4b8 | 1 f4b8 (0)\n005 0 | 0\n006 1 f9ca | 1 f9ca (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","private_key":"fba40333131adaf83dd0444a5f805a739af0de3f2e625a2d2a02ecbe0efbe070","name":"node_fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","services":["streamer"],"enable_msg_events":true,"port":46323},"up":true}},{"node":{"info":{"id":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","name":"node_460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","enode":"enode://7c183d9bceaff51f943081c68a318028c043466b0910f4bcdb80d8cea48ece224b458ac2c812cce8dd550b35a4fd52d07622f970b2c1aa6638ec8e62550c1da8@127.0.0.1:0","enr":"0xf88fb840fa49b18d0242ef72eb77b319e3a923d60f566facee5a69e8115a614a4be438dc4578fdb50fbfa54de817c0d391bbe60368231734f291232d222b7ea9e70ae5b30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027c183d9bceaff51f943081c68a318028c043466b0910f4bcdb80d8cea48ece22","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RgFIuERLcUtH8JKFqgzijcNBjLa59Fi1ICwFMyBfgqQ=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 460148\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 fb64 9c93 aa7e | 15 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n001 2 08ff 2f17 | 5 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n002 4 76cb 729a 6646 6304 | 8 729a (0) 76cb (0) 74b7 (0) 6ef5 (0)\n003 1 577b | 1 577b (0)\n============ DEPTH: 4 ==========================================\n004 1 4c5f | 1 4c5f (0)\n005 1 427f | 1 427f (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","private_key":"459d2f0468a2f990289cf0a0ec59948f82ede34b97dbab4f8ddd68dd7fc9639c","name":"node_460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","services":["streamer"],"enable_msg_events":true,"port":35919},"up":true}},{"node":{"info":{"id":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","name":"node_aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","enode":"enode://15ce819f63a4f20fde81216cd54aa442b1e47a86085d2a887e8b482da64bc15a125a2e31dfc8b65aff9a7babe1813162e591c204e8ec3e2d37ece40c9f42eb1e@127.0.0.1:0","enr":"0xf88fb8407e05321ea1e0ebf79e030cf98817c8e7b61df62645db829c2b2699afba8443297692b19615479f37442bec12f5a6d72301a8a661cc3e391997e699f0377c87e00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10215ce819f63a4f20fde81216cd54aa442b1e47a86085d2a887e8b482da64bc15a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qn5F1Fg1cP44KCjk/z1gzNUmzqATJSEdh87rbMFK91M=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aa7e45\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 2f17 4601 | 17 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n001 2 d756 cbd4 | 7 cbd4 (0) d756 (0) eed4 (0) e4f7 (0)\n002 2 9934 9c93 | 4 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n003 1 bf27 | 1 bf27 (0)\n============ DEPTH: 4 ==========================================\n004 1 a11b | 1 a11b (0)\n005 1 ad46 | 1 ad46 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","private_key":"b623e785770ec4f9bbecb44c624cc704b1a8cfbb565744fa329235d240453d32","name":"node_aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","services":["streamer"],"enable_msg_events":true,"port":36243},"up":true}},{"node":{"info":{"id":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","name":"node_9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","enode":"enode://8eb7c4844662e4bec44d1a6c0eeea367815e9c378910f5891c6d1288ef8e695c7d1970934d8f00c26efe46d0119ba01c90f3564e2f56e3ca062713cf0161d960@127.0.0.1:0","enr":"0xf88fb8409f6890c59e203693b5137924950100d7ea0bb4095f006df9c4ea5520bc66d3536d3a5a0f8f684b7301e33c0bd9e07a11139776e1f1072758400835dbd411fa7f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028eb7c4844662e4bec44d1a6c0eeea367815e9c378910f5891c6d1288ef8e695c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nJNfqvtBp7072hiovQIoeBBb+EU6W4PSv6TaRtjJCPg=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9c935f\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 4c5f 4601 | 17 4c5f (0) 4601 (0) 427f (0) 577b (0)\n001 2 d756 cbd4 | 7 cbd4 (0) d756 (0) fb64 (0) f9ca (0)\n002 2 ad46 aa7e | 4 bf27 (0) a11b (0) ad46 (0) aa7e (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 94a2 | 1 94a2 (0)\n005 1 9934 | 1 9934 (0)\n006 1 9e27 | 1 9e27 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","private_key":"3a9fc1630c5328ae9c4cfded644dab18a8eae96ddac7dc65542f37918447df3f","name":"node_9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","services":["streamer"],"enable_msg_events":true,"port":43587},"up":true}},{"node":{"info":{"id":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","name":"node_9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","enode":"enode://8f2dd1bb62e9253f7a43f26fd9de2181d827183eef6b578c4246637ed66324ef4487bcf99259f32b59dd66d2d314b939e0ec66b08917a933b4697615252093ab@127.0.0.1:0","enr":"0xf88fb8403e5081fcaca0fe89abed76a93405df6e2416d260e7986ad71d2b554ff81be728584602b1049e0767ecce05662e43acff92a0c720e9ff3068782c88c5333f53c20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038f2dd1bb62e9253f7a43f26fd9de2181d827183eef6b578c4246637ed66324ef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mTQpX73jfUp/hnyafh9kKMSZbRtDhj28Wi9SpUZknvA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 993429\npopulation: 17 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6304 62ac 4c5f 2f17 | 17 4c5f (0) 4601 (0) 427f (0) 577b (0)\n001 6 fb64 f4b8 eed4 e4f7 | 7 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n002 3 a11b aa7e ad46 | 4 aa7e (0) ad46 (0) a11b (0) bf27 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 94a2 | 1 94a2 (0)\n005 2 9e27 9c93 | 2 9e27 (0) 9c93 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","private_key":"498b023a2d77a2bcdf5fc8faee54349c6d9bcc7bcc3847c665145494c6395e63","name":"node_9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","services":["streamer"],"enable_msg_events":true,"port":33825},"up":true}},{"node":{"info":{"id":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","name":"node_08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","enode":"enode://0dd78993fa0c2b78e8abf537fef7b683f90255b48e4c5d62a676b4c5c06f0a9deba8777bfc8476e26af45438819993b89ab9697465a52396923ab63ea46de6d1@127.0.0.1:0","enr":"0xf88fb840df5e81a8734f5835674758db9c12bdea17ce6724347b9b3ee12ef8b19e645abe7a9ba7898badf352fe74e273f66e00800fc1a64cf4a1d94de871ef51116c5e670183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030dd78993fa0c2b78e8abf537fef7b683f90255b48e4c5d62a676b4c5c06f0a9d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CP9UtgMHz7vZsgm/B8em8WQZK4DJ3V7q3SbjaK28fbw=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 08ff54\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bf27 9934 | 15 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n001 4 729a 76cb 4601 577b | 12 4c5f (0) 4601 (0) 427f (0) 577b (0)\n============ DEPTH: 2 ==========================================\n002 3 2643 2529 2f17 | 3 2f17 (0) 2643 (0) 2529 (0)\n003 1 11bd | 1 11bd (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","private_key":"ee655daff35bf421813437b35da4b5cbc518cfadeb319c82c5211d697a821466","name":"node_08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","services":["streamer"],"enable_msg_events":true,"port":45679},"up":true}},{"node":{"info":{"id":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","name":"node_bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","enode":"enode://890aca84b10caa9057d6dca9730544992a7bcdf38b78e82508f5be6e0b2149592fbcd837b829232ccaa8310759a27aab18addec6239becffddc5942760d3aac4@127.0.0.1:0","enr":"0xf88fb840a1b52878b681cfd6dffb3a53f24aa4920cf5b65dc92c1bed8511407085072b7f5ebc71f1a59fae35d1e8e4896b3a9ee980cb318061f8c6a6652a353633b98f700183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102890aca84b10caa9057d6dca9730544992a7bcdf38b78e82508f5be6e0b214959","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vyfczW95zIbTitejdbgzElrqrQYL4RfCPBtxKXsHLAA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bf27dc\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 74b7 6013 6646 08ff | 17 4c5f (0) 4601 (0) 427f (0) 577b (0)\n001 3 f9ca cbd4 d756 | 7 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n002 2 9e27 94a2 | 4 94a2 (0) 9e27 (0) 9c93 (0) 9934 (0)\n============ DEPTH: 3 ==========================================\n003 3 a11b ad46 aa7e | 3 aa7e (0) ad46 (0) a11b (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","private_key":"d572f42e4c4b69acd62f2ced7411ffb238c6b5abd9039b6e3c47f01f6d1fde1b","name":"node_bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","services":["streamer"],"enable_msg_events":true,"port":44805},"up":true}},{"node":{"info":{"id":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","name":"node_6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","enode":"enode://fb3cece5266da81615d3398f3c34f6552eaaa9e55c79123f7282951226be7fab8db0cd0487ebcc3a5799d7dd25b91d3b4064c1959bc590ca6ddb8f10508e196b@127.0.0.1:0","enr":"0xf88fb84076bdf43d4d5251b70d43c1c650b2da1304cc4d6762d8368b75fa7063f92cde8b5129e9443fe40a0f3f421fb7a430eb451780ef473ce3caccde600cc00bafbc2f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fb3cece5266da81615d3398f3c34f6552eaaa9e55c79123f7282951226be7fab","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZkbsyHOY4J5UsOsZ5X1UPTE8PnNX/4TcqIhrg/ra4PQ=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6646ec\npopulation: 13 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a11b bf27 | 15 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n001 2 2643 2f17 | 5 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n002 2 4601 4c5f | 4 4c5f (0) 4601 (0) 427f (0) 577b (0)\n003 3 74b7 76cb 729a | 3 729a (0) 74b7 (0) 76cb (0)\n004 1 6ef5 | 1 6ef5 (0)\n============ DEPTH: 5 ==========================================\n005 3 62ac 6304 6013 | 3 62ac (0) 6304 (0) 6013 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","private_key":"685914c526e3efe92ebef3400b22a51a7a4771de5c87ffd5f9da4e8db9d1282c","name":"node_6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","services":["streamer"],"enable_msg_events":true,"port":40729},"up":true}},{"node":{"info":{"id":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","name":"node_a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","enode":"enode://3c0855f7cf4fc19e61b4aeb52f69cc6eafe9800738da596b60366854eec2b55e1b82583803a6564d6f3f5fac83bcf41748cd8f4a316e131afe54b1a93ba235ec@127.0.0.1:0","enr":"0xf88fb84005478b240adc6c61921f460140f141ddceb6ae0cdbdf49cb0952cb457849b3ce4080fcf91b3b80ac6eb08e75e78f0ed80169a9269845bb24999a1828b5b7fd3d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023c0855f7cf4fc19e61b4aeb52f69cc6eafe9800738da596b60366854eec2b55e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oRs8Z+o21BJk/clxI6QchYaDcZlJZ4LnmUtr6DFXG3c=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a11b3c\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6646 577b | 17 2f17 (0) 2643 (0) 2529 (0) 11bd (0)\n001 2 cbd4 d756 | 7 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n002 3 9e27 9934 94a2 | 4 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n003 1 bf27 | 1 bf27 (0)\n============ DEPTH: 4 ==========================================\n004 2 ad46 aa7e | 2 aa7e (0) ad46 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","private_key":"100fcd428dcc5043b3dbdd4bbb18ee89cd22a1e122e6daa5173b38d971e81dd4","name":"node_a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","services":["streamer"],"enable_msg_events":true,"port":40597},"up":true}},{"node":{"info":{"id":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","name":"node_577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","enode":"enode://20ee1cefe65d31d3bbef59fc59deb8cd34a06204403fef7c4c52143e62d207bce55396cf2cd302a103fb15ef7df24832502feab7478b558c6d549555a4b9fbda@127.0.0.1:0","enr":"0xf88fb8402bb8237b2f944ce884436ea3d41fb22fda669660233b5844733075ba1d9e8e4163169f20b8fcb972c30375d9fa5af751434559d55d174c300c2842f899763ee40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10220ee1cefe65d31d3bbef59fc59deb8cd34a06204403fef7c4c52143e62d207bc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V3szQogDWbn6Qm/c6PwxXOpkBZK3h+bjrb3sZpn0sqo=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 577b33\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d756 a11b | 15 d756 (0) cbd4 (0) fb64 (0) f9ca (0)\n001 2 11bd 08ff | 5 11bd (0) 08ff (0) 2f17 (0) 2643 (0)\n002 4 74b7 6ef5 6013 62ac | 8 729a (0) 74b7 (0) 76cb (0) 6ef5 (0)\n============ DEPTH: 3 ==========================================\n003 3 4c5f 4601 427f | 3 4c5f (0) 4601 (0) 427f (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","private_key":"8b2f5863391217a259d77ab4007f410d37eb2f81f76b87497e738c1a6dc07042","name":"node_577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","services":["streamer"],"enable_msg_events":true,"port":41231},"up":true}},{"node":{"info":{"id":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","name":"node_62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","enode":"enode://0761ae452c8e6d8803e4dd3dd4b66a50b5f17ba7c25babf1f41b273572d90ba7fa6de5b9ff53bd29fb89c0f0aee57b9d4bd7508b58411c184c27c6b4d113c38c@127.0.0.1:0","enr":"0xf88fb840e15454baf140946f84455b01b25479ab82d8df1e547d32eb511a08db1b6d2fa13417e78cfaa91a62ff85b5be203ca4c525537fc21651ab6b721781ebe2367eba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020761ae452c8e6d8803e4dd3dd4b66a50b5f17ba7c25babf1f41b273572d90ba7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Yqxq8IrhZrDVYSvGWgfkFIdqOKNVIJHUYcgIxfa0cbA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 62ac6a\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9934 94a2 | 15 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n001 2 11bd 2529 | 5 11bd (0) 08ff (0) 2f17 (0) 2643 (0)\n002 2 4c5f 577b | 4 4c5f (0) 4601 (0) 427f (0) 577b (0)\n003 2 74b7 729a | 3 729a (0) 74b7 (0) 76cb (0)\n004 1 6ef5 | 1 6ef5 (0)\n005 1 6646 | 1 6646 (0)\n============ DEPTH: 6 ==========================================\n006 1 6013 | 1 6013 (0)\n007 1 6304 | 1 6304 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","private_key":"c094ade67efd8691772e76ed09d41e9dcd2d0c478331223fdd1c7736d84736e8","name":"node_62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","services":["streamer"],"enable_msg_events":true,"port":33431},"up":true}},{"node":{"info":{"id":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","name":"node_2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","enode":"enode://d31fbb6c9836fc684468eaa5865756779ef13e13bfc5af8a819f68a3d388b5e9c8c54b17cbd5ddfb355e15fee71d1ec86dfed0472309edcfa84dce531caf3e4d@127.0.0.1:0","enr":"0xf88fb8404566296b99cb998abb9c6d5f61d4df6674dfed5706ae4bd804f2b0d1d2088bd35e152e18aaca113522024b0ed409292b8d596c50093d18e319240bb27f055fe00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d31fbb6c9836fc684468eaa5865756779ef13e13bfc5af8a819f68a3d388b5e9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JSnrbvu61FE8Ev//9yLCwklnWbXrPZUwL/m/fqzA1Cc=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2529eb\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 94a2 eed4 | 15 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n001 4 427f 4c5f 74b7 62ac | 12 4c5f (0) 4601 (0) 427f (0) 577b (0)\n002 2 11bd 08ff | 2 11bd (0) 08ff (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 2f17 | 1 2f17 (0)\n005 0 | 0\n006 1 2643 | 1 2643 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","private_key":"f8cc4cad963f73aff2b340dfcf30ab658e08f58928824419a15246c2532c43e7","name":"node_2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","services":["streamer"],"enable_msg_events":true,"port":35361},"up":true}},{"node":{"info":{"id":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","name":"node_eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","enode":"enode://e11c49200047bdb02fac35163462fdeb3e40477670420f345db00b3f0cc008ed768b308bce67bf5ddf3c5728ccadf39f8362d18eafedd9c7c0f916e62d491470@127.0.0.1:0","enr":"0xf88fb8403e683663f20a82e4d0a4a2750956048ae4f294e82db9c02f2d31e574d2564b9605f5ca54db82f1e460613dbfa8570cb35a0badd8fdc581ce43f6fcab0026556a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e11c49200047bdb02fac35163462fdeb3e40477670420f345db00b3f0cc008ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7tS5oGvI+gtxlb7v8b+3l53zfHIN7JyJFGggq/SDaBo=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eed4b9\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6ef5 76cb 2529 | 17 4c5f (0) 4601 (0) 427f (0) 577b (0)\n001 2 9934 94a2 | 8 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n002 2 cbd4 d756 | 2 d756 (0) cbd4 (0)\n============ DEPTH: 3 ==========================================\n003 3 f4b8 fb64 f9ca | 3 fb64 (0) f9ca (0) f4b8 (0)\n004 1 e4f7 | 1 e4f7 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","private_key":"00b0480a2de8f0b9a04988e6b64da01d184d36d84da1b6c377b19d991c6bfdc2","name":"node_eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","services":["streamer"],"enable_msg_events":true,"port":39613},"up":true}},{"node":{"info":{"id":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","name":"node_76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","enode":"enode://eb693286d13dd7d22dbf20c8a7bd9df2cec24474ed4f059cff8fbbb7013081d12ca2caa7d5e2084225ae04d7c6070fc61158f0f7de6e16213b48c01aea446f47@127.0.0.1:0","enr":"0xf88fb840af4b0c315818be89b44fbbed80450d4973e3ae933823e9dd5302edce8e5059744c616a175dc2d6d818ce0ad591f864fa0d9381df6d8a065beef99449ec3ecbb20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103eb693286d13dd7d22dbf20c8a7bd9df2cec24474ed4f059cff8fbbb7013081d1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dstH66hKeuDp8A8TgbqFwu3p+n+JmoePlOSTt+KrQBc=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 76cb47\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 f4b8 eed4 | 15 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n001 2 11bd 08ff | 5 11bd (0) 08ff (0) 2f17 (0) 2643 (0)\n002 3 427f 4601 4c5f | 4 4c5f (0) 4601 (0) 427f (0) 577b (0)\n003 2 6646 6ef5 | 5 6ef5 (0) 6646 (0) 6013 (0) 6304 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 1 729a | 1 729a (0)\n006 1 74b7 | 1 74b7 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","private_key":"8ddfa941097daa1adbf355c69b301a9b9b4e984f51fbc021d6abbd2df8eb5391","name":"node_76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","services":["streamer"],"enable_msg_events":true,"port":33051},"up":true}},{"node":{"info":{"id":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","name":"node_f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","enode":"enode://8e1bd7a84722a0d831f2ce96f52c463bc3232306ab90de59ad821884df222db8cf6204e33398d2ccb347156b73088661c96f16da9b37a53c48f1cdc00897700e@127.0.0.1:0","enr":"0xf88fb840e5deda0993da1e8b4297c89a66ddf4b197118fc19c40d2eb65d35c08c607922252bfa120d52fcdacaa4d68bd36af44be179038dce4b9857b9b3b29737d9b508a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028e1bd7a84722a0d831f2ce96f52c463bc3232306ab90de59ad821884df222db8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9LipUFZzCgOm0XtnVDhg+V7tJrbkPwWhmS8nOZ09MSY=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f4b8a9\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6304 76cb | 17 11bd (0) 08ff (0) 2f17 (0) 2643 (0)\n001 2 9934 94a2 | 8 94a2 (0) 9934 (0) 9e27 (0) 9c93 (0)\n002 2 cbd4 d756 | 2 d756 (0) cbd4 (0)\n003 2 eed4 e4f7 | 2 e4f7 (0) eed4 (0)\n============ DEPTH: 4 ==========================================\n004 2 f9ca fb64 | 2 fb64 (0) f9ca (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","private_key":"ffe54ea17543345a77321ae2e3776751db00762580f661c0f15896f42500959e","name":"node_f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","services":["streamer"],"enable_msg_events":true,"port":33473},"up":true}},{"node":{"info":{"id":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","name":"node_6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","enode":"enode://d07fabc00b19f95c1732019dafb44716ccc4e19dce5e9985d4dc8237790811a6e7973a650f98183de314b6061f815b190dd620fd33a6ae2e398c10c57614224e@127.0.0.1:0","enr":"0xf88fb8408d97738fe8da5aeda2e04c10e3c563f61ecc6911afcf669e9e50b306b67b4e023292aec1a2d35c5dcec0c612b0d5cd02f21098fd8b3e3ad40679b1778be6dcc10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d07fabc00b19f95c1732019dafb44716ccc4e19dce5e9985d4dc8237790811a6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YwTisTVFXOAiA+vD9RS19ik+a7DJqYEpt7DW9svJjO8=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6304e2\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9934 f4b8 | 15 9934 (0) 9e27 (0) 9c93 (0) 94a2 (0)\n001 2 11bd 2f17 | 5 11bd (0) 08ff (0) 2643 (0) 2529 (0)\n002 2 4c5f 4601 | 4 4c5f (0) 4601 (0) 427f (0) 577b (0)\n003 2 74b7 729a | 3 729a (0) 74b7 (0) 76cb (0)\n004 1 6ef5 | 1 6ef5 (0)\n005 1 6646 | 1 6646 (0)\n============ DEPTH: 6 ==========================================\n006 1 6013 | 1 6013 (0)\n007 1 62ac | 1 62ac (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","private_key":"80cf26c0793a22bf69aa3bf4d71052a9ede84d73135a7b39d1ec068bdd2929c7","name":"node_6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","services":["streamer"],"enable_msg_events":true,"port":34879},"up":true}},{"node":{"info":{"id":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","name":"node_2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","enode":"enode://df8c978c17fbed86c3fc257bb0d3aca0a8831d358b13cf87413888240c12cf92840bd89e98350dc7aeb45c91a97a7bace5b60b42bac6831972ef0eecb5180c03@127.0.0.1:0","enr":"0xf88fb84015eb3d3b46b7b35f89720cf53396e495bda8dee9ac4fe55ad75cc91a7a3358f23e5c8fe05da05dbd5ecba9d42d131646b563810ac1603f78569e9b059c719fd60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df8c978c17fbed86c3fc257bb0d3aca0a8831d358b13cf87413888240c12cf92","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LxfhgNB4MkaOaqkVlknNabGZMTyyxv6S8VmNhvY02jM=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2f17e1\npopulation: 14 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 aa7e 9934 fb64 cbd4 | 15 9934 (0) 9e27 (0) 9c93 (0) 94a2 (0)\n001 6 4601 427f 4c5f 6646 | 12 577b (0) 4c5f (0) 4601 (0) 427f (0)\n002 2 08ff 11bd | 2 11bd (0) 08ff (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 2 2529 2643 | 2 2643 (0) 2529 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","private_key":"256815d05345b0618e277d6f2618ac89ef4fa493b339bf65f0eaec5cbd404e92","name":"node_2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","services":["streamer"],"enable_msg_events":true,"port":37517},"up":true}},{"node":{"info":{"id":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","name":"node_cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","enode":"enode://5cca6a56e89c4aed55749ad75c465e9fb86ff85723c02abb5037ef5db3c05b5fc45dc735575b737fec5a5bc572466e636c0fe7bdd56d98ea684a5314ea065f84@127.0.0.1:0","enr":"0xf88fb8405b51d4e5f768fab1263aad5fc3d836b5a9299f2e915bd7fde99ee1632440e56c40d1fae3bad1fc292927c07694c0a31e4bdaa4214df6ab41b5bd9eb847202c170183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025cca6a56e89c4aed55749ad75c465e9fb86ff85723c02abb5037ef5db3c05b5f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"y9SqXhRWbEepN1W1N9LRB3U0bvEabGQis30GYclImUE=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cbd4aa\npopulation: 16 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 729a 11bd 2f17 | 17 577b (0) 4c5f (0) 4601 (0) 427f (0)\n001 7 bf27 a11b aa7e ad46 | 8 9934 (0) 9e27 (0) 9c93 (0) 94a2 (0)\n============ DEPTH: 2 ==========================================\n002 5 eed4 e4f7 f4b8 fb64 | 5 e4f7 (0) eed4 (0) fb64 (0) f9ca (0)\n003 1 d756 | 1 d756 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","private_key":"c8cfa60b5e127e3bacb81f83e2b754b73a42724cda004a2a5ed5fbcf22dfddd4","name":"node_cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","services":["streamer"],"enable_msg_events":true,"port":44323},"up":true}},{"node":{"info":{"id":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","name":"node_729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","enode":"enode://fd9832b9b0eef81dc9fcab0852581e32bd63572f5e46a85c7aa0ad26596ca899a680f1c02bc80e2f9d9834a24a79071b26a4e040c8d4e7acfacfd07d1d8f7939@127.0.0.1:0","enr":"0xf88fb8402f0c70d6cc93f4019ac80464fe97225e30532a384869ad2228660e40a240ca1852d6750396d22e257cb2a1b79b4eeeb4c65303d87a91af08ce3c213c0751abf30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fd9832b9b0eef81dc9fcab0852581e32bd63572f5e46a85c7aa0ad26596ca899","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cpoYV5+tL8dda0RRZ+c1YV6Au3A3nnqSR6CbppFlecA=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 729a18\npopulation: 13 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d756 cbd4 | 15 9934 (0) 9e27 (0) 9c93 (0) 94a2 (0)\n001 2 11bd 08ff | 5 11bd (0) 08ff (0) 2529 (0) 2643 (0)\n002 2 4601 4c5f | 4 577b (0) 4c5f (0) 4601 (0) 427f (0)\n003 5 6ef5 6646 6013 62ac | 5 6ef5 (0) 6646 (0) 6013 (0) 62ac (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 2 74b7 76cb | 2 74b7 (0) 76cb (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","private_key":"675a65f43358f973c940f285b96994d598a5a63b511de041e959d415fc38f605","name":"node_729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","services":["streamer"],"enable_msg_events":true,"port":41717},"up":true}},{"node":{"info":{"id":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","name":"node_d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","enode":"enode://46a796a7e0ef14bf01598dafad914d15b6e16a7a15252f2e318dfb509897cc5e25fe3727de0e8cfd6d6ee2ed1c27981737b15038237650981465e6410f49e6b9@127.0.0.1:0","enr":"0xf88fb84039e08ba3a29f958abdbd524c52eb953e01d52dfc9c1f0259d81debaa7bf88aeb11819630685dbe6939805e57357068d0768dc6a4c7233564b1b783b45a4a4fc90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10346a796a7e0ef14bf01598dafad914d15b6e16a7a15252f2e318dfb509897cc5e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"11Y9bcagN4QGs3WOHMpCiklLdlJuBvrq20M1DK2YZ5I=","hive":"\n=========================================================================\nThu Feb 28 18:01:09 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d7563d\npopulation: 16 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 577b 427f 729a | 17 11bd (0) 08ff (0) 2529 (0) 2643 (0)\n001 7 bf27 aa7e ad46 a11b | 8 9934 (0) 9e27 (0) 9c93 (0) 94a2 (0)\n============ DEPTH: 2 ==========================================\n002 5 e4f7 eed4 f9ca fb64 | 5 e4f7 (0) eed4 (0) fb64 (0) f9ca (0)\n003 1 cbd4 | 1 cbd4 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","private_key":"eeeffb7fefb163eb424dbeedafc3a4b2de7c7aff8f531b8969b5bc809c4232ab","name":"node_d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","services":["streamer"],"enable_msg_events":true,"port":37925},"up":true}}],"conns":[{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","other":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","up":true},{"one":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","other":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","other":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","up":true},{"one":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","other":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","other":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","other":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","other":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","other":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","up":true},{"one":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","other":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"08ff54b60307cfbbd9b209bf07c7a6f164192b80c9dd5eeadd26e368adbc7dbc","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","other":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","up":true},{"one":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","other":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","up":true},{"one":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","other":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","up":true},{"one":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","other":"94a2afa6bc12fe95765f09f57828c77cc9ea473cd0e9e655ca9f46e1bbabae22","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","up":true},{"one":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","other":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","up":true},{"one":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"cbd4aa5e14566c47a93755b537d2d10775346ef11a6c6422b37d0661c9489941","other":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"6ef5de5c1c8e55bc89948bf10a7a2ad11b07170f3b5f049e40a85e244124eee4","other":"577b3342880359b9fa426fdce8fc315cea640592b787e6e3adbdec6699f4b2aa","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"2f17e180d07832468e6aa9159649cd69b199313cb2c6fe92f1598d86f634da33","up":true},{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","up":true},{"one":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","other":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","up":true},{"one":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","other":"fb64370bc0707215e41afb0da1a53f8aba5e11f471bae4f8dc4bd85a3b66827a","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"460148b8444b714b47f09285aa0ce28dc3418cb6b9f458b5202c0533205f82a4","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","up":true},{"one":"e4f776dddd9e476608fb335ab22fff1836309b9440ee4ee0fd37a2ba7fca8507","other":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","up":true},{"one":"f4b8a95056730a03a6d17b67543860f95eed26b6e43f05a1992f27399d3d3126","other":"eed4b9a06bc8fa0b7195beeff1bfb7979df37c720dec9c89146820abf483681a","up":true},{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"ad4643583aa082b3bef7ce1bb8dcf55fe2e321b8954000cfac6bc72c49e85f50","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"aa7e45d4583570fe382828e4ff3d60ccd526cea01325211d87ceeb6cc14af753","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"f9cac95b4c91bea670e5e672bc64e400e63de0b55c423eda5f1499cf218eb244","other":"bf27dccd6f79cc86d38ad7a375b833125aeaad060be117c23c1b71297b072c00","up":true},{"one":"9e276cdb622215089f0f20252a6aba20f57521df94d401efa13f604b62534c80","other":"a11b3c67ea36d41264fdc97123a41c8586837199496782e7994b6be831571b77","up":true},{"one":"9c935faafb41a7bd3bda18a8bd022878105bf8453a5b83d2bfa4da46d8c908f8","other":"d7563d6dc6a0378406b3758e1cca428a494b76526e06faeadb43350cad986792","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"2529eb6efbbad4513c12fffff722c2c2496759b5eb3d95302ff9bf7eacc0d427","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","up":true},{"one":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","other":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","up":true},{"one":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","other":"6646ecc87398e09e54b0eb19e57d543d313c3e7357ff84dca8886b83fadae0f4","up":true},{"one":"427f4bdfd3857968af5da36eeea041938ea771bc6c5e90ee8d3585cf579f13b7","other":"76cb47eba84a7ae0e9f00f1381ba85c2ede9fa7f899a878f94e493b7e2ab4017","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"2643083442ee9e69517f5008e4ca54dbfa40726bde22216b53bf903895aa0ae0","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"9934295fbde37d4a7f867c9a7e1f6428c4996d1b43863dbc5a2f52a546649ef0","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","up":true},{"one":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"11bd810f7ba41f44816f33a19d9c703d26f2ccaea28c4af825f52888070ad8d7","up":true},{"one":"6013d40c0c15f5a7b1ddd5a8ef6a80757de9022b208535938b0937b9150771e0","other":"729a18579fad2fc75d6b445167e735615e80bb70379e7a9247a09ba6916579c0","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","up":true},{"one":"4c5fabb7a17c3a3f589c7d2eca3c0dd5a6b8217aabc54323bab75b6af383ac6c","other":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","up":true},{"one":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","other":"62ac6af08ae166b0d5612bc65a07e414876a38a3552091d461c808c5f6b471b0","up":true},{"one":"6304e2b135455ce02203ebc3f514b5f6293e6bb0c9a98129b7b0d6f6cbc98cef","other":"74b720fcd93ff907e0a2f9c8f62e9315e64c2fcd023184ebddfd485d782ba95f","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_4.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_4.json index a8b61740..81afb03f 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_4.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_4.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true}]} +{"nodes":[{"node":{"info":{"id":"0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","name":"node_0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","enode":"enode://918f13e29fcea21b47e553c60ea0ae63f856db5745c6010e31b566f819195f9a5f250788862c43b230dd93fbc24cb6b3d33c86069cc21de3a3612b2f32eeccbe@127.0.0.1:0","enr":"0xf88fb840ad1a67c3b07299bb50337351be97595ef05e5ab7988ab7831e06a3003d1fc4ad74e925ec495ab312ccc889eb9c05f2e14f625e56f813a76dc53ddd94ea0955f90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102918f13e29fcea21b47e553c60ea0ae63f856db5745c6010e31b566f819195f9a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"C0Bd7YfOTnEqrrswVecHFslx/gSaVJYSlMenoEcdEvY=","hive":"\n=========================================================================\nThu Feb 28 17:59:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0b405d\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 a430 | 1 a430 (0)\n============ DEPTH: 1 ==========================================\n001 2 77ba 675c | 2 77ba (0) 675c (0)\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","private_key":"173c23bc3aec26afe7d299eb9556e7c189851378fe56125d929966ac7207bcb6","name":"node_0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","services":["streamer"],"enable_msg_events":true,"port":38277},"up":true}},{"node":{"info":{"id":"a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","name":"node_a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","enode":"enode://89b66f574168570cc5d347051c0e2b05b33578d42142ef8cc930f1fbb384266f2827e4b087f5e2985a32d8f2b353fb7be416193632da5c692cace99d1b9e4274@127.0.0.1:0","enr":"0xf88fb8402e6392d3d5377977fc4b4d29f4dbf4ca96e963df056ead84ec2fcb7ee071996670a935d3b49250455e02c392baacb4c8499f815f74b09c405316a5d2fdee94e60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10289b66f574168570cc5d347051c0e2b05b33578d42142ef8cc930f1fbb384266f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pDAQRcDN5ay1QG4fukbshowFZDmrQ+95WDB0j7a6Llo=","hive":"\n=========================================================================\nThu Feb 28 17:59:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a43010\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 3 675c 77ba 0b40 | 3 675c (0) 77ba (0) 0b40 (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","private_key":"5bcd3bbb886e5ad2317a6ac1de2b19ebe27db9337ba8e7daa76a1cdaa6a3d158","name":"node_a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","services":["streamer"],"enable_msg_events":true,"port":41325},"up":true}},{"node":{"info":{"id":"77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","name":"node_77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","enode":"enode://ecb56004a128067628a3198244080ba4ac79860cb2cf74407d7571955a80fb9243ad5f8265063a5aa209ea95329b4b57d0f1b492a85835ab87fce79881a895a9@127.0.0.1:0","enr":"0xf88fb84035ed878b2a99ed1bbd55df1701cd82115aebc649b1e8e68302e7caf5480a61322c74189d1fe66f2d16e79174f0e3479213f0bf963a4518d583078e164bd94a220183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ecb56004a128067628a3198244080ba4ac79860cb2cf74407d7571955a80fb92","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"d7oUWkYjucg+ChSjdbpJxocZ8qvhYv/KZt5+8uMadfg=","hive":"\n=========================================================================\nThu Feb 28 17:59:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 77ba14\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 a430 | 1 a430 (0)\n============ DEPTH: 1 ==========================================\n001 1 0b40 | 1 0b40 (0)\n002 0 | 0\n003 1 675c | 1 675c (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","private_key":"6f30c3d0135202cbf540669c8c76d9144bd53764aaf4ae18e8bee98ce05c6211","name":"node_77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","services":["streamer"],"enable_msg_events":true,"port":40785},"up":true}},{"node":{"info":{"id":"675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","name":"node_675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","enode":"enode://64a6b33b028b818a1961272651d1d7a976329e541b6e3e983f518d89326d7427f4c9243f78bb03fd2e2dc059f610ee50d1e664e3107db01ac603b9c3b20ebb4f@127.0.0.1:0","enr":"0xf88fb8407dbbb99300e04c6917c27d61bf396481aae19287c2869e8dd74e11b0f2ebb74174376a6152c26af95173a4868a0349aaf3be5d063918590fd5962f4af174e0010183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10364a6b33b028b818a1961272651d1d7a976329e541b6e3e983f518d89326d7427","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z1z+0Ke0YfQ8/r1qEOzIho01skU4HXMavsRgi23OJQo=","hive":"\n=========================================================================\nThu Feb 28 17:59:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 675cfe\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 a430 | 1 a430 (0)\n============ DEPTH: 1 ==========================================\n001 1 0b40 | 1 0b40 (0)\n002 0 | 0\n003 1 77ba | 1 77ba (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","private_key":"d77006035afa5194053c0347021f7825a71f9643028c45b65756ef88ee53e6dd","name":"node_675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","services":["streamer"],"enable_msg_events":true,"port":37069},"up":true}}],"conns":[{"one":"0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","other":"a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","up":true},{"one":"a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","other":"77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","up":true},{"one":"77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","other":"675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","up":true},{"one":"675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","other":"0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","up":true},{"one":"77ba145a4623b9c83e0a14a375ba49c68719f2abe162ffca66de7ef2e31a75f8","other":"0b405ded87ce4e712aaebb3055e70716c971fe049a54961294c7a7a0471d12f6","up":true},{"one":"a4301045c0cde5acb5406e1fba46ec868c056439ab43ef795830748fb6ba2e5a","other":"675cfed0a7b461f43cfebd6a10ecc8868d35b245381d731abec4608b6dce250a","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_64.json b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_64.json index 8785c9e0..71548556 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_64.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/testing/snapshot_64.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","private_key":"0736b1ccd6a1d7c513e312d29a8afa6e1231954e17a66886d0bbcf0dc191b170","name":"node_a48a667469a1344cb70f269b21fb3ca9e83823226749fd9c232be1b86ab9427888f2ecb20ddfa56da361463a061e192570f2f8da3fa967c473320ca85e382c53","services":["streamer"],"enable_msg_events":true,"port":62976},"up":true}},{"node":{"config":{"id":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","private_key":"edcc0061564101058d0caf2a7dd7cd178a2fd7f5de93263f1b2abac25ce28360","name":"node_8f6fb4a5baf715e001b060ce72378829279ce06a3247bd4a6faa3c725ee1b949570373e4231de82981020563e704297e77172506101b1444fcacfcc5f211827e","services":["streamer"],"enable_msg_events":true,"port":62977},"up":true}},{"node":{"config":{"id":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","private_key":"911635b150029a2a56d4a5b647162774df1ff5e6946c727ba21e3e8cad2c41ce","name":"node_e7b1563d6e089e030983b075b590abb8a3205e9bce953f562b755ba150a3edc2dc3377259d96c05cc7363a23aed613711ca049e26253fd9273ac4c0483087015","services":["streamer"],"enable_msg_events":true,"port":62978},"up":true}},{"node":{"config":{"id":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","private_key":"4bd5083735663222c8e8948125c8f606952ef887a4a07888d39d8aa6af0568e8","name":"node_d0718ce0dafea66ee16c79626e020355273cdd062c0fceb122e391c4ca6e4e408a1b0e8230c4ade5bc95803916bdd6d98c99d2b6ea70c32e17fa1f2c98741a90","services":["streamer"],"enable_msg_events":true,"port":62979},"up":true}},{"node":{"config":{"id":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","private_key":"8cb2a950934e687c8aea0a72114b26989bccfcdf508f584a549d05091aef2c3f","name":"node_af3f9dc00ce3cc156000f16a06c55c123ccdfabed89c9aee4478ff439b6f52a89d0501cff626d36b7f1852737955f7a036b25cf259580e8f46a3e0e44340b539","services":["streamer"],"enable_msg_events":true,"port":62980},"up":true}},{"node":{"config":{"id":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","private_key":"3c147cdf4e85087a9c0e37ff5d96de7d977ce3d3711090f64d2c3bea39790167","name":"node_95c3ca2362de2eb0ac8efdd243918ed216f5d124bc6f5b9d83a6ee1aaf8a0fbdbd70ca1710d1ed825d6871f13a15954725f1aa1b27b48307844c0bc27baec0db","services":["streamer"],"enable_msg_events":true,"port":62981},"up":true}},{"node":{"config":{"id":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","private_key":"fb505af88aa3fc8134b3ad647d78f182e0aee007261c066024d9fdda0bd9d297","name":"node_c73f8fe9f54b89634cb0e8e332407a3a90cbbd347c0abc93823db13a7a39c46e7bd30d3f557316d92dd731cfc686afc308448682ff06c77246e3fb02b9a025ba","services":["streamer"],"enable_msg_events":true,"port":62982},"up":true}},{"node":{"config":{"id":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","private_key":"833d044f5a00d0018f8b2a7d4d825831f351dbe3f3e7074d96103c3597bb0a37","name":"node_9529ff2b0692ad2608b55ec8ec0d1c9ccb8ee300412d99d389009162a76f7eec28d1090cbfb571aa8396b365074770b17106bfa3354857878dff164f42686142","services":["streamer"],"enable_msg_events":true,"port":62983},"up":true}},{"node":{"config":{"id":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","private_key":"f08b159c68739d221adc0060225f8feb89dc3aa1f016cef59508d2787a4232a9","name":"node_5b456e429f7adae30366206e681ba46439a3372fec3806f666425cb3f12983c0b427e089fb163b70e6a56220b1529ee392ff701bc2f4621d51e23aa6305150e8","services":["streamer"],"enable_msg_events":true,"port":62984},"up":true}},{"node":{"config":{"id":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","private_key":"bbadcfc9e554aabf08f9cdea8f1174f4f47b85c5a615efa6f0d5a4db7e6e9f67","name":"node_5e92b025cc087c8823423c287f274a32a3dc0065afdf189475ba96b0da7b785cd493b7f2a7f3bb8195c73025bfbb402cbb4e0f6ae0d5e0caab223193cf6f2e5c","services":["streamer"],"enable_msg_events":true,"port":62985},"up":true}},{"node":{"config":{"id":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","private_key":"91980cc1a6aa75dabe27a4bed1a4a2299ed286387f066d12c1a05ab514245966","name":"node_f6e4b1dc1fa95ceae2b932b178afdc2dd515832a191e0f49c916d5a04548d58ef9f8c1dda3fbc93a45e6d82517e6a573310b7bfb14bc38c57000aec9ff010391","services":["streamer"],"enable_msg_events":true,"port":62986},"up":true}},{"node":{"config":{"id":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","private_key":"9f2513f57cafcbb35e549fae622387037b8da11772eef7bbb45d44f81712155b","name":"node_707a9ae4bc8b37fff43dc3ba83ecb735bd428b720a751a11112452eec1ca49c09139bc437666add2823dd205e45cc793f8657c66ccbc6911cc60771d4512e038","services":["streamer"],"enable_msg_events":true,"port":62987},"up":true}},{"node":{"config":{"id":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","private_key":"a198f5ac31e6bef23d8f266075f8363ce66698d0f8b1193072f813b2a1717236","name":"node_78216c6660fff0b96e38084941a2f237996732118033bf842e5f9e533b22b36c2da996df28e866424311b7b6414d4627db1f22a235ae777f7de34d9696043ecb","services":["streamer"],"enable_msg_events":true,"port":62988},"up":true}},{"node":{"config":{"id":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","private_key":"9f8eddf3160bc4b13285e9587f6736c82305632b55fe833a12f1f821c0f311e4","name":"node_d472383c453e6b0f1a632010bdd6c42a9668d328a8f8071e0407069f6fe413e2a0fd0551a09cc56ee5245d472e39a7b6295491dd256ae42e200a257f297743e3","services":["streamer"],"enable_msg_events":true,"port":62989},"up":true}},{"node":{"config":{"id":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","private_key":"601ed94a775c7129de2ddd82e23249e13176478817e5376a1c18389de0016283","name":"node_351ceaf2e95e098a8e15e81c82073b523f641848326d1bbd379f40f886b50ce2c377c4e3a2dfc2662d6f25ac04dede41063a075cf00be1cf36f95b0267717ab8","services":["streamer"],"enable_msg_events":true,"port":62990},"up":true}},{"node":{"config":{"id":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","private_key":"dd64b8659254425a4553501bcc275b1dc0a6c7bc79a538f780716cd64d46a8c2","name":"node_8da9cdb3c78776ed230497b21d4ac172f0ce73e921dfddd483da7bc6bbcd1951dd78fd5f70a0acbad855b2984e4c4bdb408c4bc25cab40684fe5a4408ec7ab9c","services":["streamer"],"enable_msg_events":true,"port":62991},"up":true}},{"node":{"config":{"id":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","private_key":"7216dc13943bfd0a8c2e93d621a44a2dd4baab7b68fa87be06f2e649f533f72c","name":"node_0a45a0aa4b4eee71b2828c794281d698019667288cf51311ffae7d8ea895f8ae29f7958dbfcda8763d9d8e9c097dccc5f92ac9d09fb4ccbde178d7f5ebda4d35","services":["streamer"],"enable_msg_events":true,"port":62992},"up":true}},{"node":{"config":{"id":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","private_key":"01a2779483d6e089da8b3943f81cff48c8bfd1bd7d0281bceb152e41a7f5acb7","name":"node_f70c92be150cb3f65f6bd904c8c161bfb0cea717bab0b24da63714de83e0872c8c369960ada1629607a1e166a19b6cfa887603e4868e7912ae5512744e8cc1c0","services":["streamer"],"enable_msg_events":true,"port":62993},"up":true}},{"node":{"config":{"id":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","private_key":"2954d35fce94938f074043b9f9dd87157a6730bdd8e3a1b6f19b8a55ad1505df","name":"node_d563716fbe2068cc940f7b12dc2bacb345c95f01e78e3b1f0105a441f300fdb00cc72e677aec102360fb904b63055d8581555f5b74b8f2392706569d8357c53f","services":["streamer"],"enable_msg_events":true,"port":62994},"up":true}},{"node":{"config":{"id":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","private_key":"6f87c529d5b17354bd3ba6b59d6ff3a0f71550a41d949d702e27f50957cfc3ba","name":"node_46bb2acc087482d40ab2ccbb387723158411ff4931423414e4d09891be8a31d11929e939e4be94b0cc355c49883e1835785ba1955d865f78748c2a0a2f6eee0a","services":["streamer"],"enable_msg_events":true,"port":62995},"up":true}},{"node":{"config":{"id":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","private_key":"ea386dc625e681a5d5d7c4e8ede4b3ffb8f2f13061c65acdde2750e2a19ef417","name":"node_8da75cb4e63d968a7999ca4b49572b5ae592a91fa442d44bb7c42fb4b174a365e1affa1dbc45b2a0406444505f178100768e7783831f2886d53e7d1b8a3a7291","services":["streamer"],"enable_msg_events":true,"port":62996},"up":true}},{"node":{"config":{"id":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","private_key":"e9b9261c569da5418d3aeabf28dff1faada23ae1a3a1552035aefe56bdf3136d","name":"node_6d1af44ab259cc080a14c07bf5efabfd70cb847fe338f016c00138c84bddf6a6ce94047d1bffcfc7e9bc772dd7a080468a84655d5351d0056f97f13358b91547","services":["streamer"],"enable_msg_events":true,"port":62997},"up":true}},{"node":{"config":{"id":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","private_key":"19334395c71250dd3eeeef4eb4032e2769839d57cd6080f2f51e1de3630789fe","name":"node_0dcef49b94fdcff024d706030fd4f513d0c6ad5f00b06a8b67abc454bbe5c2c74e939d491c0700e47ecee5cd7c7084603f62e626c34b454868b8f22d8c2dfb10","services":["streamer"],"enable_msg_events":true,"port":62998},"up":true}},{"node":{"config":{"id":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","private_key":"d587a8503da404e7a74e24d731daf63b9585ae41b555035979da013ab723b4b8","name":"node_e7d4478b412ef497741943736946a3b0679d21ae0c4cbdde6809c7236dcf1a40291088d872e469f06da19ed4ef77b9844aee7066c40fcd45b0931aff847de1d7","services":["streamer"],"enable_msg_events":true,"port":62999},"up":true}},{"node":{"config":{"id":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","private_key":"724511e7e57416a6b4627079b0b9079fb4fd5649dd018d7f3a64dbf6a1dd9adc","name":"node_7722d7d06c66afb0642d5f9ae0b22ed812c632f2d62ce64315da40eb003feb3fae1b337c10df21d297beabe51b3879f2c0a725f08ee78a8e09c75f86bd0e2092","services":["streamer"],"enable_msg_events":true,"port":63000},"up":true}},{"node":{"config":{"id":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","private_key":"922f3ca85ccc577429654b566f1561a301bbad054e4f3a8f312db841329899c9","name":"node_e479930845e1dac2d5908894548cc06c132fc5820810c6f46d9adc2bc252dd40b64642a3b2005ad3688d2637c43967f570bd153db9ee6742e1b23dbfb72537fa","services":["streamer"],"enable_msg_events":true,"port":63001},"up":true}},{"node":{"config":{"id":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","private_key":"c94a8e8e535d7431b0610ebfaa70d76c37bf6fbcaaa83ec4be0bed5527780670","name":"node_61b32cded1b5ea3e2ca545a55c84251daaaacf51e6fed98fbdf4c5b6b91a554081e1e577aaaaaa4f911780f92703c1d715695d86c1be641b0bd1794f4107c2be","services":["streamer"],"enable_msg_events":true,"port":63002},"up":true}},{"node":{"config":{"id":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","private_key":"7a1378d2cad0ac18e37694b3ec5c08580aa1887916e98030c66accf6197f615b","name":"node_9e51eb48f59886e70eb8d02e1c0c4423de3f0ce79c7a62bfd91bc2048cf643f40a91e2d2a1a8a19a9e4ba4a96aed0965aefcd941c068208abe8bf5029eb27d55","services":["streamer"],"enable_msg_events":true,"port":63003},"up":true}},{"node":{"config":{"id":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","private_key":"6e834fb9046bc38179a4c8be1cd4c2c540df1f73aa208e9794701234202211ca","name":"node_7a1f97c41c9efd7a2903af78f72d02cfff3631dc6260d3ceb2364c2a8e06965710e8feae6aa9f99b48b2475da10b2f9581c76d47b4cd2bfee09c43dcb5e3e5d9","services":["streamer"],"enable_msg_events":true,"port":63004},"up":true}},{"node":{"config":{"id":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","private_key":"819e80fcd487bf15502fff3d31651efcd9b5e7d5e18ca4d836ce53736bf23d11","name":"node_7a45fa46f161fae3ef9013e9ab81145f4a76fa6ae22160424d6dc111acbd477ce43d4c10db89cb7451c97ea1fbd78428997d01fd17e1851f8b559b404ede6da7","services":["streamer"],"enable_msg_events":true,"port":63005},"up":true}},{"node":{"config":{"id":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","private_key":"c2fff99bd9d70ab2149a1ace8ad0dc26b4b78cbfd60fe9215e0f69885e0cede6","name":"node_07138ce506125910af81bd1bae11c22bfab9a81e1e057cc3d84769475c5da9873eb3f11edc6aca83ef486bfb63eba15a6233676d29d93ac9e774f10cd42c8cbd","services":["streamer"],"enable_msg_events":true,"port":63006},"up":true}},{"node":{"config":{"id":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","private_key":"5d8862df181e186646d6fa8accaceed89b18a384ce5e63de34ecd1bd80d7f0c9","name":"node_f360c6599a0911337c7b96365fda1b2f64890bdb4483bb7e86bca15484f24c4efc0d1f6f56aa0c4fa5c205e6c1dbbf20d2ca3c2f8734f703fe6d672fa76a0d45","services":["streamer"],"enable_msg_events":true,"port":63007},"up":true}},{"node":{"config":{"id":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","private_key":"411b4485e7f793c1db7387d9e8f179d02d939de2702166248953f8f0813cb5f0","name":"node_f5272b71c228eb14b9e0e221deefc0a91353a5f17d01475f57fad54bb8e50e375f58019c7200a9ca45b0f1da6538708c61242e478d917499871df7a9d5857f1a","services":["streamer"],"enable_msg_events":true,"port":63008},"up":true}},{"node":{"config":{"id":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","private_key":"9b1297e565c13eeb81e2b19c31f635253081d34a65eb1ebf889f30635e4eccea","name":"node_e53cfad611bc38a1090d28e4cc58e4738ccaa83a00bf5447cd30ec70e492dea5811b67e79b9ca8856e79801741a675c6f54eb7a1c39e95ab735164855eae0fb7","services":["streamer"],"enable_msg_events":true,"port":63009},"up":true}},{"node":{"config":{"id":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","private_key":"eb698ae5696bf1cef4f4e6cb8ef2eb5e79cd298fcb55e0449bbaab6d048e09b6","name":"node_4f1a219f31e135208bf4caa314a14d8d48a5682941793431539efb5666b06bb5e3e9cb29b019ca414fb32961460556f2d99a04b12dc8ecbf05f43efe108803f5","services":["streamer"],"enable_msg_events":true,"port":63010},"up":true}},{"node":{"config":{"id":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","private_key":"cc474d341e32e674a1c1d607789df8bb6097ab392eace2d366da2496c5413cef","name":"node_25c64a52c298035be2184243082b5eba8a3a5d55c5334cea76e177d722945c8bf014a4ce9ef2ed76dc17a44234c97697337c6e001261533e72cc8266ee0e2fe4","services":["streamer"],"enable_msg_events":true,"port":63011},"up":true}},{"node":{"config":{"id":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","private_key":"4ec4a7d75323558dd822f09ab9f992afd016604bc77aec05f89cfdae6f50611b","name":"node_1691538e4cc41441c18fc92969c0c59f51da063814e8c45311605405284293503ee1570722cc7ae12f9cd63b899afaf5b3e66ca012115996074e8aaa71fda48c","services":["streamer"],"enable_msg_events":true,"port":63012},"up":true}},{"node":{"config":{"id":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","private_key":"b049d01349524a669db50fd817ef70811ea5cb5517adaa016f4ae426184188e8","name":"node_8e1a66c9029330c25b9abe95a11878f41cef1a32b567a931ffa781c2f70a1336efa03ba1a66dac0080304803c1239be443991a251f24d0e9c2e26aebeb5437f8","services":["streamer"],"enable_msg_events":true,"port":63013},"up":true}},{"node":{"config":{"id":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","private_key":"9eb7b1e41bd77e46a9746723ab4367fcdb9950d5f99c32bb1efddc9b5c60daf7","name":"node_c8e9cc707ce2a278371d1b4f64714cdae425b7c3606d18af6588dacaca35c7a171a07629247af351e667d2ddd9e71598f862125c827cc869c463cf87e4daeed0","services":["streamer"],"enable_msg_events":true,"port":63014},"up":true}},{"node":{"config":{"id":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","private_key":"229b6c150e858a0e81d1c720a9697bda4c9f26e531d85db8837ca5d1a24ff8dd","name":"node_43b91c24dd7fd217a76f00ab97920e4223bd2ee085abe7ac34e915e8676400e1643d3bbb4a864c8a6df1298bf229cabd1bdc9879eafdcbcab064708e8266e88d","services":["streamer"],"enable_msg_events":true,"port":63015},"up":true}},{"node":{"config":{"id":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","private_key":"ab42d800bd5b0bcaedd3009d4805e827ca6c41f54fb7fd38cc021f9c72bf3aed","name":"node_14136fa967f2d4825845ba4a43a5921d8fcf03f9c71c5595037e000b2ef6ff0a5eaad0980aea0a170cafda3529f982aea1107f58aa42485550c9480e86f5e9f3","services":["streamer"],"enable_msg_events":true,"port":63016},"up":true}},{"node":{"config":{"id":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","private_key":"15e0330ce9f82833faa08bbacae92d3eff516eeb4bfd1be0b7d8ecc8a311d8a8","name":"node_39d0aa13a6d7e709c9b914cb16f007c3f16af40532afa47c8cf9abf6d604d4380883103c995ec696ca593c4dc9bf0290979b965c9c6ade7c616d3973c5f0b1f0","services":["streamer"],"enable_msg_events":true,"port":63017},"up":true}},{"node":{"config":{"id":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","private_key":"a2ffbdb8b486d91c6d2b579b5ae3f1a8f09feaf0451b375d8985f0ddea952926","name":"node_e73af1e2a834ee132564dd2e983c877b3ae230808d2b42da2ec91472eee6ee6595c439800ce980186b4b0d9a56b96babf747006c07b07513543eead8e102fff7","services":["streamer"],"enable_msg_events":true,"port":63018},"up":true}},{"node":{"config":{"id":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","private_key":"48bdb744f1c9b25e7b2170b88fb956619976670186b82382029c84f3ef780930","name":"node_c0f2f1409cf83d7a777f6af95931181eb5a36b14a156f444075071c896fc5b435638ead23c65a242105db527c809e2c46f7805c862c0eb5d444749ddf22a5060","services":["streamer"],"enable_msg_events":true,"port":63019},"up":true}},{"node":{"config":{"id":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","private_key":"49376794edff5cc56583fc3ce9e6987e0210c537f798bfc00cd523927052bbf2","name":"node_e021950ce89ce2bd79649aad2ed504789636b09870d0652fefa5e16631cb32a5d41c6cc4a540b7a0fca6bc3d5adf9b372a22cf714adc7b3e9b968d4c840017d4","services":["streamer"],"enable_msg_events":true,"port":63020},"up":true}},{"node":{"config":{"id":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","private_key":"b59aef84a0b7166aab7dc4edd8bfc66f56b77097cbbb4e937277ecd23c051473","name":"node_16bd57b6590df0c69c440d178da8359b0a3e00b9c5362155eae42709bdc4d0488e437fa7e8396d5b429cebe356ebd1407039b21eefa8d9164b357845132edb28","services":["streamer"],"enable_msg_events":true,"port":63021},"up":true}},{"node":{"config":{"id":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","private_key":"961cb451a05a1f043539e0417e0c612286d8a86116a4bd3ac4f301444bc0abc7","name":"node_393eb8d2acf9244f1cdc220711c00d8fa7619394893643bc32e1ee0f821e5a2afed07badbdf97d710843c4ea6de3f74c113ad4c548afd23534d6dea5c37c6d9d","services":["streamer"],"enable_msg_events":true,"port":63022},"up":true}},{"node":{"config":{"id":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","private_key":"a56a9d4ff921fba9e03ecffbd71d75f97cc9b7c5f389cf54b9bf66e689bb60b5","name":"node_62b8e67a4ca956c1cf2ba7a538d39bfe8bccf747fe65be48c88270ad44ee7711c0e9a43bb3821feffc492dba9b58397768c755810121add9c980c9a2c696feb0","services":["streamer"],"enable_msg_events":true,"port":63023},"up":true}},{"node":{"config":{"id":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","private_key":"f80db180b4c58031447688bd4b5f9d32cfee3dc85506153782a0368873110317","name":"node_17c7eb5833687a98087daadda564e54b1c770f946efb7efd69370a9caf6e6939e408f04a3fa1aa042d9463992a711786e504072fae56d007d696851696fc5643","services":["streamer"],"enable_msg_events":true,"port":63024},"up":true}},{"node":{"config":{"id":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","private_key":"5750e8b20da0147e055f965d6ba4ee434812f658663383ebfe7e88f13fdf59ab","name":"node_f5efffc8e894cecc065f6892ad2a846c8fc4982d1c8c7fc729421d5108d519c501cc9f2f7a0046ec08d47cf2369753aaf287dfc3ef7ecd34d24d294efb933658","services":["streamer"],"enable_msg_events":true,"port":63025},"up":true}},{"node":{"config":{"id":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","private_key":"f841751579683b856a59eb75f3493a4b3e39183d8818a2638559100bb6f5e66a","name":"node_7c273dd4218e9e5b92e19d250832a424ff2ac5482ad70953746de780100669eb143247e15ccfca14cce9a49a003c82be71ca034a2900bed4c89fb10bdbfcc7c3","services":["streamer"],"enable_msg_events":true,"port":63026},"up":true}},{"node":{"config":{"id":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","private_key":"be9f2207e4e7a93758129c0d6fa34877b685210cf0e8f8d233e5425d8fa461f9","name":"node_8959c5cf825ebab14efeacf2807ad9498256a9e89a2ef00690c9ee23a3e934e111c52a5ddcc791b93f49424ac008095d8cb0da6905dfdeb62309fc4f6672e59e","services":["streamer"],"enable_msg_events":true,"port":63027},"up":true}},{"node":{"config":{"id":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","private_key":"4a245ec64e442d4cad2468d96914df5728633c568ed3d063990ac8932be63222","name":"node_dcf2401cbc26f3db27bb85c24984b1d755b3503fe400c139a0bedbe5de24db3f27c8f4f40adc1880b6142d20e67a40f3d45d36ba7fce122ffa44703e65622198","services":["streamer"],"enable_msg_events":true,"port":63028},"up":true}},{"node":{"config":{"id":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","private_key":"1771927f1f06912915f5498e857816fd8f73b2bde10f88ba4a856684bcc2a6fa","name":"node_38b3adde25c6407f29c2a721f1f5c082cc94ddad09fc5afda2bbb2309212a9b54b1553731a65ec8b58769fc11d488169c8000ee15fe8966bd44a3879e0c9e534","services":["streamer"],"enable_msg_events":true,"port":63029},"up":true}},{"node":{"config":{"id":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","private_key":"986bc0252067c4c3ace80099cbc843d6f16f7483719e9ecf7a3a0f876a461ee8","name":"node_6593097e880701f3d0573df7bff9ba7af40f4f83b828bfc11bdabea62fb94ed39c8233d8d40275c2af9ceddae44514e029a546fe9df73abbd3821d37933aba49","services":["streamer"],"enable_msg_events":true,"port":63030},"up":true}},{"node":{"config":{"id":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","private_key":"39848c3aa21a67751f95ffc8938b36264eeee342816d41b37816f2164e59858e","name":"node_578666c4113e196a7c738fdbae0bd68ade450283eb835efd06591798f1893f7f7d9cde0691faff670b5ae24e58cbc2f549d2196f244dddc00e82852c38e8539e","services":["streamer"],"enable_msg_events":true,"port":63031},"up":true}},{"node":{"config":{"id":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","private_key":"d5dee04f1435fa7ab6d65e89de8c4c6bf156111bfb9ee5de0ab617cc3be19681","name":"node_e1082b4577aa370a5171b7602282208697dcead854f0c82acb5628d179fa5990a0fc85c5343a47177aab81c7fa6c1be8a27a3484acddc353582ddeb61892ef94","services":["streamer"],"enable_msg_events":true,"port":63032},"up":true}},{"node":{"config":{"id":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","private_key":"044a1acc0d565f7080db7b625baefe8a5f7aef9009a7bcd338fc31a02d704d8c","name":"node_a4fbd2ffc25d2c3bd37beecd637dda5983cb5817ecb6da62aec16ea59aaf7e71966649211461564ba808174361898a1d2265f1a42e94434bc00d5d3e04b67a8a","services":["streamer"],"enable_msg_events":true,"port":63033},"up":true}},{"node":{"config":{"id":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","private_key":"8be74288552caed392476d39780f806f2c21b50a9990c5a3a5ed37397b218a6d","name":"node_eb08a7774ca5252237d059a8bbad68044c83b2c332024be98bdc0c58508867a80cd34cb4162bd55a47fecc93301c8b2a7a1edbfd807ebb5623499cac80ea42de","services":["streamer"],"enable_msg_events":true,"port":63034},"up":true}},{"node":{"config":{"id":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","private_key":"e644c54ce52ddb2788fc683264f175a24485082eb88ebe0a83c94ecce77d7175","name":"node_6eeb951b8f6d5ac519132910222777d5a409325e6c64d89708a00e55cb0fe85889aac1baa724e29fa7f064323b164a9c40c5114a65736e3dd16f0336283d9c7b","services":["streamer"],"enable_msg_events":true,"port":63035},"up":true}},{"node":{"config":{"id":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","private_key":"77445377572b915c2e3802f70fc9eae8d29e767f54f80a29701ae5d1fe0c8677","name":"node_6419279b600da3e2ee8d0b2a5b0319bc6cd496086955b49a8d2168fd4c35d5688291bc9313076b1b8e070f25dc593788d72b8f8c1d2ad828741a45deea35e58d","services":["streamer"],"enable_msg_events":true,"port":63036},"up":true}},{"node":{"config":{"id":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","private_key":"f6b20f29a1cdcad8f8bd88acc4f6ffba7b3027e46ab60784e2c2b77edb3d3630","name":"node_032b1ce6881413b7ade1918e56691c7acd9f24111f47792ca50c33e570afba433caa132ad2326d03f9c0544fdc09fa0ca65f61de9fe61d6dd92c5d25a8df69af","services":["streamer"],"enable_msg_events":true,"port":63037},"up":true}},{"node":{"config":{"id":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","private_key":"25bb03224302b9c89585681c4bb30dc9d95fe417e5c0f13627154083cda7492b","name":"node_86d55ece15e6bb4da7601f6587654505f760ee2b87abdb115091eefa93f61cf29fd695601bb8c6ae2c76400de24b8bca9ca32b50e4b849ae76f5320b03276bfc","services":["streamer"],"enable_msg_events":true,"port":63038},"up":true}},{"node":{"config":{"id":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","private_key":"a4eb160b838f392946a844b9fbc36006c459ff6f9ef46a832d000f17f2aa834c","name":"node_31cbd7c029d69715e59f31bccf362cd76e0a87839f1f63c6623be437d2af227a38f12c5fb9c659cc543976833caf22a52f5191c7c465a9ba36ac4235c12add72","services":["streamer"],"enable_msg_events":true,"port":63039},"up":true}}],"conns":[{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":false},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","name":"node_33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","enode":"enode://189f684252bf3145e01947ecea3430ca79da66c9c79baba0c7afac7577fd8eb6cc663b270219bf730d98b9221eaea5dfeaf64c3a0097aba12ccc9bd2fea77174@127.0.0.1:0","enr":"0xf88fb8409210a452686c812613891a7481ab1ecb134964d862f61460027f50b5b112d39a256f7cd8dc529b01f133a7fb15be96b7a8ee77dcb92f1c3e39cb0d2cd3af09830183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102189f684252bf3145e01947ecea3430ca79da66c9c79baba0c7afac7577fd8eb6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"M/5taXBpDo2eKwj/I0yx6vM2uqU7OYURzQeNzOLIsto=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 33fe6d\npopulation: 26 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 c05d c67d c62e ff06 | 35 ce82 (0) c851 (0) c34b (0) c05d (0)\n001 8 5bf6 4e4e 4853 4443 | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 5 0e8f 041c 10d5 1a93 | 8 10d5 (0) 12b8 (0) 1a93 (0) 1dd4 (0)\n============ DEPTH: 3 ==========================================\n003 5 2f1a 2b80 2b79 27c2 | 5 2293 (0) 27c2 (0) 2f1a (0) 2b79 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","private_key":"58cdd771550771fd62cd26564dda083ef20e140c1d5530cd86a85b7df1f7f269","name":"node_33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","services":["streamer"],"enable_msg_events":true,"port":45167},"up":true}},{"node":{"info":{"id":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","name":"node_b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","enode":"enode://b91f0615ca78edb614985f7643eeb09bdc0476aa30b73d0b711f87d59eaf466246423fc97d81dbd96192287bf373174ed814b96413bfcd872d4ccd53d3c4841c@127.0.0.1:0","enr":"0xf88fb8405b40eaf3f4b6452b70caa681969bd278b3912b26df53438d01543d219a38254e1ea4b61d25c38733700b16acb82ee9c22c26a62e9d21bbac2e105c734fd985ef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b91f0615ca78edb614985f7643eeb09bdc0476aa30b73d0b711f87d59eaf4662","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"sml6Py3m6g0TWGplVGN4JQlpHW8F2Q9F/QiCPn6vWgs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2697a\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6049 46af 5b93 33fe | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 4 ec08 c034 c67d c62e | 21 ce82 (0) c851 (0) c34b (0) c05d (0)\n002 2 83aa 8934 | 6 9861 (0) 9009 (0) 9637 (0) 83aa (0)\n003 4 a259 ab25 aeff adfd | 4 a259 (0) aeff (0) adfd (0) ab25 (0)\n============ DEPTH: 4 ==========================================\n004 3 bbbc bc3e be5d | 3 be5d (0) bc3e (0) bbbc (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","private_key":"f7d4ee33924c6fecc03e8531d4a760dfa3f045c2070ead81351cc717118b94c4","name":"node_b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","services":["streamer"],"enable_msg_events":true,"port":45247},"up":true}},{"node":{"info":{"id":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","name":"node_8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","enode":"enode://594fd2ab5b614c45fcf39e323750e1d17a2f4054d8a9939c433993f5050e3990638006f044b8fe5f095108e0df4bb507375ddde04c9973283856f126fc553237@127.0.0.1:0","enr":"0xf88fb840c50ff8109fb29d7550e93a6b0c1e4411d83ff6d612cef057b29b0fe5d8f7fa193cc9d16dec8587e4b27c4cdc32c7304cf80b7c32087c779c819970be16ba18830183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103594fd2ab5b614c45fcf39e323750e1d17a2f4054d8a9939c433993f5050e3990","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iTTua7/JyRKlpfsATrPfC2UxPiLozrjcPz4T0QhTIo8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8934ee\npopulation: 27 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 0e8f 1dd4 2b79 27c2 | 29 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n001 9 f16d fef2 ec3e e59a | 21 ce82 (0) c851 (0) c34b (0) c05d (0)\n002 5 aeff adfd ab25 be5d | 8 a259 (0) aeff (0) adfd (0) ab25 (0)\n003 3 9637 9009 9861 | 3 9861 (0) 9009 (0) 9637 (0)\n============ DEPTH: 4 ==========================================\n004 1 83aa | 1 83aa (0)\n005 1 8cb7 | 1 8cb7 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","private_key":"c1a5ff4b52beb6e91e007799d9b94a2afe91ad74a387ea3de8ae5a1b3daddcc0","name":"node_8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","services":["streamer"],"enable_msg_events":true,"port":35697},"up":true}},{"node":{"info":{"id":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","name":"node_4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","enode":"enode://426b52190ebc9cfa8e1d426d495ed10688ea702182bb347c25a37f362f2fc457df723fbafc48abbfcfb00d71ed2fb35bc642ea3fe52cf099a2513006165fa780@127.0.0.1:0","enr":"0xf88fb840f9687dee63db3d7523fc5e5345328e7d01d34286124dfb1d8565aebf86f3f2fb5c22b30d3c61ac8c8a3692d3c5dd1b4702c24da65bcd3c9e06c35e9eef56e5ed0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102426b52190ebc9cfa8e1d426d495ed10688ea702182bb347c25a37f362f2fc457","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"REOzSXCSyfIA/n1DwypTP4/J+nEpIm4eLH/V9/J+FxE=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4443b3\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 ce82 8934 | 35 ce82 (0) c851 (0) c34b (0) c05d (0)\n001 3 33fe 2293 2b80 | 14 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n002 2 6271 62c0 | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 2 55a2 5bf6 | 4 55a2 (0) 5b87 (0) 5b93 (0) 5bf6 (0)\n004 2 4853 4e4e | 2 4e4e (0) 4853 (0)\n005 1 404b | 1 404b (0)\n============ DEPTH: 6 ==========================================\n006 1 46af | 1 46af (0)\n007 1 4541 | 1 4541 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","private_key":"1fdc1683e025dbb4aabcc2b580cac31c8d7bd3862f5eaa0786c55ba1d5fe2e3a","name":"node_4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","services":["streamer"],"enable_msg_events":true,"port":35969},"up":true}},{"node":{"info":{"id":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","name":"node_5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","enode":"enode://d7953737b7f648f15413610ae2e027887e3ac47d3a49ff0c53b5813d980758bf1d3f12e711e824d7948bc24e2ba00d5558fccb7155232570ecd58236c2aa35ff@127.0.0.1:0","enr":"0xf88fb840f2731673fc9ef09cb16f3be083528cdc666e5d0e3ad5a8473aeda9cca202c5683d9af6f21212e6f6711983b993e9bcddb6b061addbacabed0e1ae01fd8061f9c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d7953737b7f648f15413610ae2e027887e3ac47d3a49ff0c53b5813d980758bf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W/ai/kgUErGyDwzCMloRGf2p40xN7z0fQCaojcDJkqw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5bf6a2\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d165 adfd bbbc | 35 d165 (0) dbef (0) d87b (0) dd48 (0)\n001 3 33fe 2293 2b80 | 14 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n002 3 62c0 6049 75bf | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 5 4853 4e4e 404b 4541 | 6 4e4e (0) 4853 (0) 404b (0) 46af (0)\n004 1 55a2 | 1 55a2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 2 5b93 5b87 | 2 5b87 (0) 5b93 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","private_key":"fa8bc1f234fa77f91ac5a9338da6e6f227e45a18646baf568d4d6dfd6d1450ac","name":"node_5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","services":["streamer"],"enable_msg_events":true,"port":38467},"up":true}},{"node":{"info":{"id":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","name":"node_bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","enode":"enode://cc1d8b904cb61eeebf263eab856b6a39494abcc5f24a872d894cebb307123b3c21d4ad23093725c55431ea19b33f656d149a1546c5f4160410c2f15a3b8e96f0@127.0.0.1:0","enr":"0xf88fb840055d7f85d85a26105bc7165f2a6b6f5d76cdd64185015fc469f27b2f031c50ff47437f48acadbc971a934d387191f68159ab7cbbfcd0e9eadfffc11d84ba76150183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cc1d8b904cb61eeebf263eab856b6a39494abcc5f24a872d894cebb307123b3c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"u7zMAYD+JgW+dI2uq7H8AubIhws383E1nzjuEU8Jdx8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bbbccc\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7a5c 46af 5bf6 | 29 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n001 3 ec08 c034 d165 | 21 d165 (0) d87b (0) dbef (0) dd48 (0)\n002 2 9861 9637 | 6 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n003 3 aeff adfd a259 | 4 a259 (0) adfd (0) aeff (0) ab25 (0)\n004 1 b269 | 1 b269 (0)\n============ DEPTH: 5 ==========================================\n005 2 bc3e be5d | 2 bc3e (0) be5d (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","private_key":"8e11dcf297e93d5064f7c16e21897f433b43b84640233484bdcb47c2986f8804","name":"node_bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","services":["streamer"],"enable_msg_events":true,"port":39121},"up":true}},{"node":{"info":{"id":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","name":"node_7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","enode":"enode://4aab8f1241e23af8e2dd0e60b55405d53a91654a387bd7cf812ae58bcd9d4a0402a8f608c6e0db8c43437c367f31326f3820f08d7afed4ee75622a2f05b37eaa@127.0.0.1:0","enr":"0xf88fb84038eea6fad2a04f841af87c2daf250d05a7047b23a61c49705e63401965b90bb16420d5734fe9622caa7b9e22f7c11e69f5c992a8d326d6f7addef874754fc92a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024aab8f1241e23af8e2dd0e60b55405d53a91654a387bd7cf812ae58bcd9d4a04","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"elxEaT3iCtw8U7EwL7AKqzKkYmWrx1Y726M/flxPnXQ=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7a5c44\npopulation: 20 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 d87b dbef c34b ec3e | 35 d165 (0) d87b (0) dbef (0) dd48 (0)\n001 5 10d5 041c 2b79 2293 | 14 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n002 4 46af 4853 4e4e 5b93 | 10 4e4e (0) 4853 (0) 404b (0) 46af (0)\n============ DEPTH: 3 ==========================================\n003 3 62c0 6271 6049 | 3 6049 (0) 62c0 (0) 6271 (0)\n004 1 75bf | 1 75bf (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","private_key":"d779095ed5a31b33c8a0b0b0198e6417edf79f53b2a14a0eb5eb1e1e7369f12e","name":"node_7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","services":["streamer"],"enable_msg_events":true,"port":35791},"up":true}},{"node":{"info":{"id":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","name":"node_f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","enode":"enode://5901c788ea558d95661b2e50b68ca1e5e3c79c6293c1bcc73361993fa647db34891c6bc5d5952c43bc105ee6eb5d115a6eef3f26c87229b10777f2d86b12f587@127.0.0.1:0","enr":"0xf88fb840288340dcdbed401c8ce3bde43d0216d5df3e47dcc1c7d7d0a0d0ca4cc681176764d55a2920e5817f97fae70545a30a44acbfc65d43eb435f829b28d2655444590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035901c788ea558d95661b2e50b68ca1e5e3c79c6293c1bcc73361993fa647db34","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9vMY4lokxEnnJ8YMYQcZqqNtC6+CajpJMa1oSr+by7o=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f6f318\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2f1a 404b 6271 7a5c | 29 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n001 2 a259 ab25 | 14 a259 (0) adfd (0) aeff (0) ab25 (0)\n002 2 c67d dd48 | 12 d165 (0) dbef (0) d87b (0) dd48 (0)\n003 2 ec08 ec3e | 3 e59a (0) ec3e (0) ec08 (0)\n004 2 ff06 fef2 | 2 fef2 (0) ff06 (0)\n============ DEPTH: 5 ==========================================\n005 3 f090 f16d f1e1 | 3 f1e1 (0) f16d (0) f090 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","private_key":"4d482c4424098c2a71c88f47c73227e568fcab0f63d5a6a716f3e716773f19b4","name":"node_f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","services":["streamer"],"enable_msg_events":true,"port":45669},"up":true}},{"node":{"info":{"id":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","name":"node_627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","enode":"enode://2ee80aae24fb663157cb638843b9fb21700a01f5ea5dcec4c69214f2b80eec02717985080fed1618333c85522a39caf9a7ba76b52ba0f480ff3ebb8186f5a69c@127.0.0.1:0","enr":"0xf88fb840fa1436482f2747ab816902e843a51484a4cbc4152e7ec2ad801cae3ded5c889236cca1756f6f103cc630767f9ff82a3a2f4e736ea92418c62499f129946c4bbb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022ee80aae24fb663157cb638843b9fb21700a01f5ea5dcec4c69214f2b80eec02","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YnEFlXqgtYepuhsPJz/BlAO2lVlA55SjWa3onNfUDfs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 627105\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 de4f c62e f6f3 | 35 a259 (0) adfd (0) aeff (0) ab25 (0)\n001 3 1a93 27c2 33fe | 14 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n002 3 4443 55a2 5b87 | 10 55a2 (0) 5b87 (0) 5b93 (0) 5bf6 (0)\n003 2 75bf 7a5c | 2 75bf (0) 7a5c (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 6049 | 1 6049 (0)\n007 0 | 0\n008 1 62c0 | 1 62c0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","private_key":"23966103833d36e192d35e9cfe2670b5319f5499072ede1f11cedd9024940533","name":"node_627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","services":["streamer"],"enable_msg_events":true,"port":32927},"up":true}},{"node":{"info":{"id":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","name":"node_c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","enode":"enode://a5b7729faa9896d27289883c8cec64d7eb741cd7cb745f93db938d30ad11655e5e6d8db4b9a81aba84c7112ea14816c7726c946678e0554b909627c400069fce@127.0.0.1:0","enr":"0xf88fb840e2e531e37debff2425fab0e7db5ecc75f9746078803605fb200a96a2a92984c5671e0f4b88fc7cdc89c9c09b97f9ef3f5a97d6a1be898e5e0594bf71e977c1280183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a5b7729faa9896d27289883c8cec64d7eb741cd7cb745f93db938d30ad11655e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xi5LIwLNYvV4yMZHrcOkr/7232WlI2MChl24WJfvwBU=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c62e4b\npopulation: 19 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2293 33fe 4853 6271 | 29 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n001 3 b269 8934 9637 | 14 a259 (0) adfd (0) aeff (0) ab25 (0)\n002 4 f1e1 e59a ec3e ec08 | 9 e59a (0) ec3e (0) ec08 (0) fef2 (0)\n003 2 d87b dbef | 5 d87b (0) dbef (0) dd48 (0) de4f (0)\n004 2 ce82 c851 | 2 c851 (0) ce82 (0)\n============ DEPTH: 5 ==========================================\n005 3 c034 c05d c34b | 3 c34b (0) c05d (0) c034 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 c67d | 1 c67d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","private_key":"d56adf646d4edd18118697876a2b6c8f969d89f806dd57944e91d7ea8678c854","name":"node_c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","services":["streamer"],"enable_msg_events":true,"port":42935},"up":true}},{"node":{"info":{"id":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","name":"node_9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","enode":"enode://b2038dcdc21c0342ed4add7724ca7f5c70acbda4803e675e7a927cddf0d0acd0f8c470e2424aed644fe6369b849182c846e00a92c6ccb376fe303c1a46818595@127.0.0.1:0","enr":"0xf88fb840198e6a345712a2e48389ef9eb36c43f88bb2b34aa5711694ec4d386a7517b5cf5223d928910d5887731c99bcc03fcf179cb74267e67df478cae4059bab7e31740183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b2038dcdc21c0342ed4add7724ca7f5c70acbda4803e675e7a927cddf0d0acd0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ljf6XsgL1ASjZv6G96iaVzUpgzCXwTARSzAVdUiGVF0=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9637fa\npopulation: 12 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 55a2 2b80 0f03 | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 2 ce82 c62e | 21 f6f3 (0) f090 (0) f1e1 (0) f16d (0)\n002 2 a259 bbbc | 8 b269 (0) bc3e (0) be5d (0) bbbc (0)\n003 3 83aa 8cb7 8934 | 3 8cb7 (0) 8934 (0) 83aa (0)\n============ DEPTH: 4 ==========================================\n004 1 9861 | 1 9861 (0)\n005 1 9009 | 1 9009 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","private_key":"6cb0afbaa74888bcc3ca1555cc1235945258f49c75828c56a9e5c4d47637bbc2","name":"node_9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","services":["streamer"],"enable_msg_events":true,"port":41485},"up":true}},{"node":{"info":{"id":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","name":"node_0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","enode":"enode://287e97ae6cca5147329515ea229510ab6fbbed836fcf6267080988eb4521ca19fca56a67c19b8cdcc1818525d01765fdfa986478d2d22e10dc38f511bf9f66c1@127.0.0.1:0","enr":"0xf88fb8400a5646e83f67d36a442e286b23ed0eb1938e670917068d01ce00c8b6a1a44f471b7807fd83e22f4eb89c4398eeae14885b253e135d5d201bea3b4af9af1c89240183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103287e97ae6cca5147329515ea229510ab6fbbed836fcf6267080988eb4521ca19","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DwOlu1HD9ZlGnP6eXaChC40GulAaieGAB3p18cWXFGc=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0f03a5\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8cb7 9637 | 35 f6f3 (0) f090 (0) f1e1 (0) f16d (0)\n001 3 62c0 6049 404b | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 3 2b80 27c2 2293 | 6 33fe (0) 2293 (0) 27c2 (0) 2b79 (0)\n003 4 12b8 10d5 1a93 1dd4 | 4 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n004 1 041c | 1 041c (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 0d7f | 1 0d7f (0)\n007 1 0e8f | 1 0e8f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","private_key":"f3151faafed66691b7c7fe654fb8b3e32de80b36c07bfaf63b9ce5d571749b79","name":"node_0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","services":["streamer"],"enable_msg_events":true,"port":38513},"up":true}},{"node":{"info":{"id":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","name":"node_404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","enode":"enode://35c2c08791cc1c705a6126041e3383cba8baf51922829224bd290662116349bb20ac4774bbbeca9adf7266b8731664ad8255a17469fde0fdeffc60b1287b0b5a@127.0.0.1:0","enr":"0xf88fb840f7059937b3fb094126531a32fa1c349cd67da70cefdb5158e95ef285d03af1ec44ff0691cbeb5bc2a09af995303f9a5a61923166d8f92f1811559758e6c8be700183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10235c2c08791cc1c705a6126041e3383cba8baf51922829224bd290662116349bb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QEtwxqxylyz9nnzxFcfwQ70V0OS5qVm/wpJMci63Evc=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 404b70\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f090 f6f3 ff06 | 35 f6f3 (0) f090 (0) f1e1 (0) f16d (0)\n001 2 2f1a 0f03 | 14 33fe (0) 2293 (0) 27c2 (0) 2b80 (0)\n002 2 62c0 6049 | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 3 55a2 5bf6 5b93 | 4 55a2 (0) 5bf6 (0) 5b87 (0) 5b93 (0)\n004 2 4853 4e4e | 2 4e4e (0) 4853 (0)\n============ DEPTH: 5 ==========================================\n005 3 46af 4541 4443 | 3 46af (0) 4443 (0) 4541 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","private_key":"39ac08b99ed5a6af6a54d2ac5321be553f9143d2695a8505e15e42661d1e037e","name":"node_404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","services":["streamer"],"enable_msg_events":true,"port":40259},"up":true}},{"node":{"info":{"id":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","name":"node_2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","enode":"enode://13799436c7d312b56cc9e0e3efc7a244cd310752235ed2d531f3756fb4c329b8f4beed1ae628979c46857255291e4a89eca3d777309d735ccd52a1fd086eb37a@127.0.0.1:0","enr":"0xf88fb840a18583a1a4a283a6cb8ec25c1bf4c3f964e23314193307d2b5cb271cde21b81b48c60cf629544c76de4d3e4616a1311dfc70306df454ce056bfa7231738b81580183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10213799436c7d312b56cc9e0e3efc7a244cd310752235ed2d531f3756fb4c329b8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LxoVw5vLDpU/jBYJM/aePdopuDRXV0LE9DLrOExd2d8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2f1a15\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f090 f6f3 ab25 | 35 f6f3 (0) f090 (0) f1e1 (0) f16d (0)\n001 4 62c0 6049 4853 404b | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 3 1dd4 1a93 12b8 | 8 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n003 1 33fe | 1 33fe (0)\n004 2 27c2 2293 | 2 2293 (0) 27c2 (0)\n============ DEPTH: 5 ==========================================\n005 2 2b79 2b80 | 2 2b80 (0) 2b79 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","private_key":"edc9fc2f574b8ae4c0f349dcfca0fb04cfdf47fc9405889b34be78c770fc4acf","name":"node_2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","services":["streamer"],"enable_msg_events":true,"port":45277},"up":true}},{"node":{"info":{"id":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","name":"node_ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","enode":"enode://d7dddfa4efbb58706320eaf3223ec745504d5d8d4b2bc5385b5dc670985287398ee138b1cb976bc08fe72de2b0b59452a0194bce9614f4df7c5e9faf58ef85d4@127.0.0.1:0","enr":"0xf88fb840d1e80f4b38afbcd783a882fe818fc87a0fc6df4a9e49d2d21e51e3494648bf771a06c6b548b8e2242ea69ad4c3677834df3e83510ddc5010347390435467866d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d7dddfa4efbb58706320eaf3223ec745504d5d8d4b2bc5385b5dc67098528739","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qyVcQOObqP0vtDn/JtE1qrOUT7kVnlQ3D0/nNZBtAxM=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ab255c\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 041c 2f1a | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 3 dd48 f090 f6f3 | 21 fef2 (0) ff06 (0) f6f3 (0) f090 (0)\n002 2 8cb7 8934 | 6 8934 (0) 8cb7 (0) 83aa (0) 9009 (0)\n003 3 b269 be5d bc3e | 4 b269 (0) bc3e (0) be5d (0) bbbc (0)\n004 1 a259 | 1 a259 (0)\n============ DEPTH: 5 ==========================================\n005 2 aeff adfd | 2 adfd (0) aeff (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","private_key":"e097903ff73cba0125e376909f8f08ea09638c36b5e540c8b86d2c0370445bf7","name":"node_ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","services":["streamer"],"enable_msg_events":true,"port":40173},"up":true}},{"node":{"info":{"id":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","name":"node_041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","enode":"enode://bf082dde14615af13c8a4cd17d9d4aba390cb871d34006a5e4e27eeac55c37ed4b160b1c7fa573b079291477f5c34df7389fb207202d36cb020bb1e11b1770ae@127.0.0.1:0","enr":"0xf88fb840ee4895d2879885f7fcb08b7d5d3a2ebdb4617198888190d13eed5f53b6e2c48518e2429a8c73ab55c0f5bfb46f4144cf3d97557bf7a6065d62c6bf38af64d1f90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bf082dde14615af13c8a4cd17d9d4aba390cb871d34006a5e4e27eeac55c37ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BBxKP5QlNuZ68IfaMFQD4moZ4DDc9RRzpZdDF1OivsI=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 041c4a\npopulation: 20 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 dd48 c034 8cb7 ab25 | 35 fef2 (0) ff06 (0) f6f3 (0) f090 (0)\n001 6 4541 5b87 55a2 62c0 | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 3 2b80 2293 33fe | 6 33fe (0) 2293 (0) 27c2 (0) 2b80 (0)\n003 4 1dd4 1a93 12b8 10d5 | 4 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n============ DEPTH: 4 ==========================================\n004 3 0d7f 0f03 0e8f | 3 0d7f (0) 0e8f (0) 0f03 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","private_key":"0c395ad41017794ece1bb20e02f995d3d71b784e80b6972127d60e11b9416033","name":"node_041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","services":["streamer"],"enable_msg_events":true,"port":45519},"up":true}},{"node":{"info":{"id":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","name":"node_c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","enode":"enode://56c5533688bc45c78eab8abe6fdbcc89c9ff51b6b2e78b4aa94c1e9d24f9269468c3d7061b1898f46535308665012ae49ce7768fe52a097e0f29eba58264f339@127.0.0.1:0","enr":"0xf88fb8402ff8750dfe7251a484fddf76d16ae3c3704a2faf12eb06a51b8f7409190bb26958d90e58f0a89ef2e488bb66c090ec33b0434b315fc7d2aafca5ac24482e5deb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10356c5533688bc45c78eab8abe6fdbcc89c9ff51b6b2e78b4aa94c1e9d24f92694","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wDRxluyH9R+XIpFAtdZgFc//J4HMGv9tPiB8P6NTJzI=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c03471\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6049 041c | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 3 b269 bc3e bbbc | 14 b269 (0) bc3e (0) be5d (0) bbbc (0)\n002 2 ff06 fef2 | 9 fef2 (0) ff06 (0) f6f3 (0) f090 (0)\n003 2 de4f d165 | 5 dd48 (0) de4f (0) d87b (0) dbef (0)\n004 2 c851 ce82 | 2 ce82 (0) c851 (0)\n005 2 c62e c67d | 2 c67d (0) c62e (0)\n============ DEPTH: 6 ==========================================\n006 1 c34b | 1 c34b (0)\n007 0 | 0\n008 0 | 0\n009 1 c05d | 1 c05d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","private_key":"5a906a787cb78df16ad69dfd4eefb997694bce2b8b171b223cd01db89f2cfe56","name":"node_c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","services":["streamer"],"enable_msg_events":true,"port":42833},"up":true}},{"node":{"info":{"id":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","name":"node_d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","enode":"enode://d3715cf48dd521184951b76f82e30bef59b728fb780c33aafac3b501ec3a082cabdd4fbf1d191b0fc6fd4e329aca56f96d8820b1d3d7c38ff169bb66398379ef@127.0.0.1:0","enr":"0xf88fb84082fc9a1da6b7ab89a49f98c25a59627c4f54319e0d439c5f8605a75ddf74b1f0099cb2a276f366bd085ef8f6fbfbc4ae9b86b4530d0a31ce50fe3cbd8c98c6670183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d3715cf48dd521184951b76f82e30bef59b728fb780c33aafac3b501ec3a082c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0WUT8w1IXTF1MhwaCqWlJcEVrhPDlff6Pesc9NHsabw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d16513\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5bf6 1a93 12b8 | 29 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n001 2 bbbc 9861 | 14 b269 (0) bc3e (0) be5d (0) bbbc (0)\n002 3 f090 ff06 fef2 | 9 fef2 (0) ff06 (0) f6f3 (0) f090 (0)\n003 5 ce82 c67d c34b c05d | 7 ce82 (0) c851 (0) c67d (0) c62e (0)\n============ DEPTH: 4 ==========================================\n004 4 dd48 de4f d87b dbef | 4 dd48 (0) de4f (0) d87b (0) dbef (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","private_key":"18698a5fd9c496b1d243f171696350d10fc3580717073a40f6d99520412f83d5","name":"node_d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","services":["streamer"],"enable_msg_events":true,"port":45987},"up":true}},{"node":{"info":{"id":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","name":"node_9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","enode":"enode://17306034b66dfcdbc97a6f9ba35033107edc8cbb03353fe5e6eb8df030ac6752cd0ed1f6edfcd7b57c456a10519e1563141ab10a463ab00d6c46cc315805d60f@127.0.0.1:0","enr":"0xf88fb84064b8824d317bdfdbd6d0f8e6d48f0b8a8faef43af8108d93c63e8d5b3b0239bd0221d18dbfe9bc21d49506094150e4abc556274dca3f62cf87b393001cdfbbab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10317306034b66dfcdbc97a6f9ba35033107edc8cbb03353fe5e6eb8df030ac6752","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mGHXyrFf13zlRKoEb52vYa9/fHjaf4TJ07wcGfny4HE=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9861d7\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 2b80 55a2 4541 | 29 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n001 4 f16d f090 ce82 d165 | 21 ff06 (0) fef2 (0) f6f3 (0) f090 (0)\n002 3 bbbc a259 aeff | 8 b269 (0) bc3e (0) be5d (0) bbbc (0)\n003 3 83aa 8cb7 8934 | 3 8934 (0) 8cb7 (0) 83aa (0)\n============ DEPTH: 4 ==========================================\n004 2 9637 9009 | 2 9009 (0) 9637 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","private_key":"4df06f9461343c2fda87c2dad86b4b3cf8a4f9ca58c88bae635d03da92ea006b","name":"node_9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","services":["streamer"],"enable_msg_events":true,"port":46151},"up":true}},{"node":{"info":{"id":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","name":"node_45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","enode":"enode://a686970d89c6c9d2e4c69d94f1b6694d904581304de0fc9efb180891260b3099a5b46700b2aa72d09afb7266ef786abc5dada1f9b0fe5f3a78daec8cc6f66c53@127.0.0.1:0","enr":"0xf88fb840241ea258a71f40249cdf5e63289c8632db6eca503178586fa7803de62e853e4a3dd497f51b52eb68afac7dce913cf61574c069499d3a4f31f727f83262c49b180183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a686970d89c6c9d2e4c69d94f1b6694d904581304de0fc9efb180891260b3099","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RUEadILK5Q3R3Y2QE4oowNxhsEuqlZL5J/nUFbCXClM=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 45411a\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 ec08 9861 | 35 ce82 (0) c851 (0) c67d (0) c62e (0)\n001 3 041c 0d7f 0e8f | 14 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n002 2 6049 62c0 | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 2 5bf6 55a2 | 4 55a2 (0) 5bf6 (0) 5b87 (0) 5b93 (0)\n004 2 4853 4e4e | 2 4e4e (0) 4853 (0)\n005 1 404b | 1 404b (0)\n============ DEPTH: 6 ==========================================\n006 1 46af | 1 46af (0)\n007 1 4443 | 1 4443 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","private_key":"e7b54819c42e18dc0898157b7f12a62003c3ca0b175bb3478c3e18364ad4d72d","name":"node_45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","services":["streamer"],"enable_msg_events":true,"port":39521},"up":true}},{"node":{"info":{"id":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","name":"node_ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","enode":"enode://d4e917601f1e529ba3150bc6547ed2baa812c622541b179807e35b3d19b6f024b3babc685cc9052d03ac6af21cd734b458f7010c55cf32997f230b64626a5a37@127.0.0.1:0","enr":"0xf88fb8406a26e3870ba17f1f806d807b45527a32c7fb63b96a757f20b191a4b827cb4f840cbfeef46ad28b8d65bb14e1677cff14604cd8e288cf6f25367dac70f3fc1e740183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d4e917601f1e529ba3150bc6547ed2baa812c622541b179807e35b3d19b6f024","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7AhSQ2Rcbl/b7/sTfM0RkFO9ZV52sdmmteAiEYN2TkM=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ec0852\npopulation: 23 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6049 4e4e 4541 5b93 | 29 041c (0) 0d7f (0) 0f03 (0) 0e8f (0)\n001 5 a259 b269 be5d bc3e | 14 b269 (0) bc3e (0) be5d (0) bbbc (0)\n002 8 d87b dd48 c851 ce82 | 12 ce82 (0) c851 (0) c67d (0) c62e (0)\n003 4 fef2 ff06 f6f3 f1e1 | 6 ff06 (0) fef2 (0) f6f3 (0) f090 (0)\n============ DEPTH: 4 ==========================================\n004 1 e59a | 1 e59a (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 ec3e | 1 ec3e (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","private_key":"564658b59ef3923b2cfa270f76d2885719f4d8d5a4640218cef7fd7cc5803538","name":"node_ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","services":["streamer"],"enable_msg_events":true,"port":43959},"up":true}},{"node":{"info":{"id":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","name":"node_5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","enode":"enode://7cfb88f94a2ce6d8382ad72e15d58c728ccf68134cada4852553c46446caf2244b21821d261c193ef0f96bd15aa704cc0ff3c808d6f46572af769d98f5662856@127.0.0.1:0","enr":"0xf88fb8404835ccf9f26f0c1ced47b4f024d3eb722f652257cb4bbf0c7122ea46b1f338d061f8d1c3ff1e6a17350e0a573500841cd7eaa7b532e66ac094ad8f5e2642d0740183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027cfb88f94a2ce6d8382ad72e15d58c728ccf68134cada4852553c46446caf224","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W5NjQdpwnRGzS23wB/OP/wOWt4WhT5RlOq+SHY5FCj8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5b9363\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 bc3e b269 ec08 | 35 b269 (0) bc3e (0) be5d (0) bbbc (0)\n001 4 1dd4 0e8f 2293 27c2 | 14 041c (0) 0d7f (0) 0f03 (0) 0e8f (0)\n002 3 62c0 6049 7a5c | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 3 4e4e 46af 404b | 6 404b (0) 46af (0) 4443 (0) 4541 (0)\n004 1 55a2 | 1 55a2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 5bf6 | 1 5bf6 (0)\n010 0 | 0\n011 1 5b87 | 1 5b87 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","private_key":"10d7b03ff60d1351f7b6be0726cb6c950befc858ef8f870ef7f19335efe1b2e9","name":"node_5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","services":["streamer"],"enable_msg_events":true,"port":41261},"up":true}},{"node":{"info":{"id":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","name":"node_27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","enode":"enode://643ed7e6dce73138a35c06ad2e7dd22b9fb60bfe8c62df0e78ba66158a01ee8c5105a61257adc96ceefe709d7f1a33501118a7f788cfc64a9ab1d5f8dabd02f0@127.0.0.1:0","enr":"0xf88fb8404d9287db19102ad4463ec35d232a539755701e2fa7d275048045a82a349c00ac7db9f3d723cc349a77840cb6643cf59aafffac21d27bfa52933fedcd68b91a4c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102643ed7e6dce73138a35c06ad2e7dd22b9fb60bfe8c62df0e78ba66158a01ee8c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"J8I2WD3/cUowAKyvv9MwhWbIEnH4JerI9PDP+Dp/8Sc=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 27c236\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 c05d c67d fef2 ff06 | 35 ff06 (0) fef2 (0) f6f3 (0) f090 (0)\n001 5 6271 7a5c 46af 4e4e | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 3 1dd4 10d5 0f03 | 8 041c (0) 0d7f (0) 0f03 (0) 0e8f (0)\n003 1 33fe | 1 33fe (0)\n============ DEPTH: 4 ==========================================\n004 3 2b79 2b80 2f1a | 3 2f1a (0) 2b80 (0) 2b79 (0)\n005 1 2293 | 1 2293 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","private_key":"d83c8e0152983bd8a5e3e5bbbe5fcd0962af9a8d3c3e74b2766a616a662ce1fc","name":"node_27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","services":["streamer"],"enable_msg_events":true,"port":33423},"up":true}},{"node":{"info":{"id":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","name":"node_83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","enode":"enode://124f0cb5dff8cbe3f2b4879314e1c7e445847ab4107a0172bdb2cc3c8c117e31f5b7d10237c9a2e01cf4b308684c6ae532267b2316bec3efd66e418e51df05c4@127.0.0.1:0","enr":"0xf88fb840e0882134a9c0bab94463ea2fb53f1227c478c4b6573df8c6e0d225495bff145000ae070b7539cc26f159f626b7ce494e2f7830c5cb9a091059ccf0b950947b200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102124f0cb5dff8cbe3f2b4879314e1c7e445847ab4107a0172bdb2cc3c8c117e31","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g6rVuX4eqMQFN+VZPeSBDHs1+rFWBTQC3adY1unqkFU=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 83aad5\npopulation: 26 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 5b87 4853 0e8f 1dd4 | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 10 f16d f1e1 fef2 e59a | 21 ce82 (0) c851 (0) c67d (0) c62e (0)\n002 5 aeff adfd be5d bc3e | 8 b269 (0) bc3e (0) be5d (0) bbbc (0)\n003 3 9861 9009 9637 | 3 9637 (0) 9009 (0) 9861 (0)\n============ DEPTH: 4 ==========================================\n004 2 8cb7 8934 | 2 8cb7 (0) 8934 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","private_key":"cb01a75bc3c400c6de710019b74759a8aa1dd7e7362e86928ef1ea2b04805e0f","name":"node_83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","services":["streamer"],"enable_msg_events":true,"port":45083},"up":true}},{"node":{"info":{"id":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","name":"node_48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","enode":"enode://8cd9a1d7a69bf057290a9f420a465a9e82ca398b542cb8cbd444121f06a56a50a1488496a7786bc41fa750eebde2519b30e91d6a254979aafe5b362f291b3342@127.0.0.1:0","enr":"0xf88fb8405c96c6659930b28d8e7fc70e709db26a72cfb94922dbf7d4cfb4fac0083d70037a3eb75c1117b50851f09570ca994003cebee249134d8c8f7f1604ba717afaac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028cd9a1d7a69bf057290a9f420a465a9e82ca398b542cb8cbd444121f06a56a50","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SFNKU4/XCMDmFsvfqUhZYEi32qd+8J3WnBZSpfbQXvw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48534a\npopulation: 18 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c62e c851 ce82 83aa | 35 ce82 (0) c851 (0) c62e (0) c67d (0)\n001 3 2f1a 33fe 12b8 | 14 33fe (0) 2f1a (0) 2b80 (0) 2b79 (0)\n002 3 7a5c 62c0 6049 | 5 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n003 3 55a2 5bf6 5b87 | 4 55a2 (0) 5bf6 (0) 5b87 (0) 5b93 (0)\n============ DEPTH: 4 ==========================================\n004 4 404b 4443 4541 46af | 4 404b (0) 46af (0) 4443 (0) 4541 (0)\n005 1 4e4e | 1 4e4e (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","private_key":"8b7949320c5ad8130070a34702abd57dc0f7b7ddd7da1abd2b8a3aabad87dca1","name":"node_48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","services":["streamer"],"enable_msg_events":true,"port":38627},"up":true}},{"node":{"info":{"id":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","name":"node_12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","enode":"enode://149300b78ce42863b2bff34e21322a35ae2558dfe528efca3cbcc8b9a90003d8cba8a3cb24dba7d83d923e4565689cef7d48c1988c109bb94b1bc92bf348c5dd@127.0.0.1:0","enr":"0xf88fb840731cd5d3da6e6990435abc04b71ca41ee0c7e99f6f7baf78f4f4dd25cc64f546516fdf07f114321703f8ad413ff912c769f3e636e3f2435ad48390bf3325da4f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103149300b78ce42863b2bff34e21322a35ae2558dfe528efca3cbcc8b9a90003d8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Erh2ng6ZYBHO/0iaP1a6jlVdVFtprMtbQ5berXM1qNs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 12b876\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d165 aeff | 35 ce82 (0) c851 (0) c62e (0) c67d (0)\n001 3 62c0 6049 4853 | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 2 2b79 2f1a | 6 33fe (0) 2f1a (0) 2b80 (0) 2b79 (0)\n003 4 041c 0f03 0e8f 0d7f | 4 041c (0) 0d7f (0) 0f03 (0) 0e8f (0)\n============ DEPTH: 4 ==========================================\n004 2 1a93 1dd4 | 2 1a93 (0) 1dd4 (0)\n005 0 | 0\n006 1 10d5 | 1 10d5 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","private_key":"2508a321d22ccd27c53ebf00259ba720d9dee11266d3f043f356c7a542bf5213","name":"node_12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","services":["streamer"],"enable_msg_events":true,"port":38733},"up":true}},{"node":{"info":{"id":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","name":"node_aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","enode":"enode://680e1e24fb480dd22e272d12a2154d05d2da6969852d46f6b506b4a1282fb34600add98e4ca61da2fb843cf9cda458b570644726887f2050db271b98b1c0db17@127.0.0.1:0","enr":"0xf88fb8408aac439c83ee5ca37fe399d1d5b6c1e934d183768e15180da3383420881be7c53b0a80526aadd31a64143fd0a5260c48f9d7d5737a91adacae76980c9c76f9110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103680e1e24fb480dd22e272d12a2154d05d2da6969852d46f6b506b4a1282fb346","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rv+IpcdJczcH+ZuHbB7PfbcbMqaRbPm70mavPmn5ToI=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aeff88\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 62c0 6049 12b8 | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 3 dd48 ce82 ec3e | 21 ce82 (0) c851 (0) c62e (0) c67d (0)\n002 3 8934 83aa 9861 | 6 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n003 2 bbbc b269 | 4 b269 (0) bbbc (0) bc3e (0) be5d (0)\n004 1 a259 | 1 a259 (0)\n============ DEPTH: 5 ==========================================\n005 1 ab25 | 1 ab25 (0)\n006 1 adfd | 1 adfd (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","private_key":"6362a429c515516bd38d57f294a819e354a5c339c513bbaab341d2c5a7f13394","name":"node_aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","services":["streamer"],"enable_msg_events":true,"port":40299},"up":true}},{"node":{"info":{"id":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","name":"node_ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","enode":"enode://78e0de844f3eb1a777d730bab86c1a0b567be81f22b68a37e6982ea9125e90bd7bc29f61d61244aa891f590fbfd8b5007806f51cf694267bb8e3b97a08572afb@127.0.0.1:0","enr":"0xf88fb840ee54b5b6a8c22c569f160e440cf7be54568f91bb8830054e562bf3befdd1d714319c55af25103db7e6a23762cbe773952246ac5142ec549a063fbea2b66725470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10378e0de844f3eb1a777d730bab86c1a0b567be81f22b68a37e6982ea9125e90bd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7D6E+Aq3HfCaRMecjUr42mj98919vOdFE2O4qhZjBJM=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ec3e84\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 4e4e 6049 7a5c 75bf | 29 75bf (0) 7a5c (0) 6049 (0) 6271 (0)\n001 4 8934 be5d a259 aeff | 14 8934 (0) 8cb7 (0) 83aa (0) 9637 (0)\n002 5 dd48 de4f c62e ce82 | 12 ce82 (0) c851 (0) c62e (0) c67d (0)\n003 5 fef2 ff06 f6f3 f16d | 6 ff06 (0) fef2 (0) f6f3 (0) f090 (0)\n============ DEPTH: 4 ==========================================\n004 1 e59a | 1 e59a (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 ec08 | 1 ec08 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","private_key":"9cd9fa1a605cd0ed1669a0dd7bdedc839592f58445855d00f026f10b963dcafc","name":"node_ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","services":["streamer"],"enable_msg_events":true,"port":36709},"up":true}},{"node":{"info":{"id":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","name":"node_2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","enode":"enode://e5b1f4c67a9ddf4aa86df910ed695036a223dd512855d568edab958376cdd219581d2630660fde2afdc7ee817e216363ceb5fe859fe22b1cac314f5ca41d5c6a@127.0.0.1:0","enr":"0xf88fb840d2019a30e5ccc8ec4bcbdee28917513d1f3af8f8d0a0ca778e4198ff0de51ae22ac27b43f7d4c6a255487960932f592d5cde6b85398068b56960e6b05ee82faa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e5b1f4c67a9ddf4aa86df910ed695036a223dd512855d568edab958376cdd219","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"IpOx6ftE7m2znbk2YpH8C04obDVVR3UN4Z6Wwy4Cvfk=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2293b1\npopulation: 22 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8934 c62e c05d ec3e | 35 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n001 6 75bf 7a5c 46af 4443 | 15 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n002 7 10d5 1dd4 1a93 041c | 8 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n003 1 33fe | 1 33fe (0)\n============ DEPTH: 4 ==========================================\n004 3 2b80 2b79 2f1a | 3 2f1a (0) 2b80 (0) 2b79 (0)\n005 1 27c2 | 1 27c2 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","private_key":"a7e22c8e32897aa84673ffac362e3ce8b479502494dc0749e76bdfd84a0adb9c","name":"node_2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","services":["streamer"],"enable_msg_events":true,"port":42613},"up":true}},{"node":{"info":{"id":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","name":"node_0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","enode":"enode://0c0ef588e8b1199c6721bf84dcb2c30de56f14db707cb02e310a245b8b3ce5c62ae119bc2950db881cc79b4bc1a2386f24bc14b0b3b7ba4e2e2f37b5a1cff032@127.0.0.1:0","enr":"0xf88fb8403221a6d46572817f3fc0af52de678dc02fff0e264b852ad32144056b20ebe5eb256f63a332afe90b856b498ea1e44ba84e339efbe95ed453fbb8bf7eb3be2f0e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020c0ef588e8b1199c6721bf84dcb2c30de56f14db707cb02e310a245b8b3ce5c6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Do+z4ldGp/GPM+McECAOXsIetUrVkrrVNpubWE/oDhs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e8fb3\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8cb7 8934 83aa f16d | 35 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n001 3 4541 5b87 5b93 | 15 75bf (0) 7a5c (0) 6049 (0) 6271 (0)\n002 2 33fe 2293 | 6 33fe (0) 2f1a (0) 2b80 (0) 2b79 (0)\n003 4 10d5 12b8 1a93 1dd4 | 4 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n004 1 041c | 1 041c (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 0d7f | 1 0d7f (0)\n007 1 0f03 | 1 0f03 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","private_key":"e4fb6f87c8b9945ae6a519e730732fdde0730aca6c9f6337c91d93cd6c1c2480","name":"node_0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","services":["streamer"],"enable_msg_events":true,"port":42649},"up":true}},{"node":{"info":{"id":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","name":"node_f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","enode":"enode://d53eecb3d3f3d9ff017ec25bcdfcb2f3ce3232f6231b66d85ed3be04cf3f6cc65c8dde5e8fe596ad8525a3e57a7f32f6978897df1999e44a5d45eb5cd6b8e9a7@127.0.0.1:0","enr":"0xf88fb8406945726d8a4e02936737ad2da763a772efedf913a0000b71b47a1f44d9a385ea6b033e2dfc7fd4744edcf9516d7af9601eff2844b8039d985f9b575cd4a993dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d53eecb3d3f3d9ff017ec25bcdfcb2f3ce3232f6231b66d85ed3be04cf3f6cc6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8W3GW1ip+lBgZ0ynQVMYkf1Etj2axeq+oYV0UEnkdMo=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f16dc6\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 75bf 0d7f 0e8f | 29 75bf (0) 7a5c (0) 6049 (0) 6271 (0)\n001 3 8934 83aa 9861 | 14 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n002 2 ce82 dbef | 12 ce82 (0) c851 (0) c62e (0) c67d (0)\n003 2 e59a ec3e | 3 ec08 (0) ec3e (0) e59a (0)\n004 2 fef2 ff06 | 2 ff06 (0) fef2 (0)\n005 1 f6f3 | 1 f6f3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f090 | 1 f090 (0)\n008 1 f1e1 | 1 f1e1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","private_key":"6e17a7cb8b4de986f9326d40d3f75a0548c328b5dcee6251d75d9660ff38b25f","name":"node_f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","services":["streamer"],"enable_msg_events":true,"port":36431},"up":true}},{"node":{"info":{"id":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","name":"node_dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","enode":"enode://a8545ee5288608aa97011ceaad769754e2fef8de716fde9f03da6fd3443dee98a58ad2f20866d444df2aff3ebb9178512cbe0a88c70c13d763ad2f21a2d31518@127.0.0.1:0","enr":"0xf88fb840a5d951670a83dfbad4108b1a6e4daad3ec8234952811451a02187bb09cecbb095ae0eb3bb7f2c41e5a07f629cc716628c546b82b93c5895b8749b0af44aa53440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a8545ee5288608aa97011ceaad769754e2fef8de716fde9f03da6fd3443dee98","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2+/TIuTzfz4UKtFRoIyL13hPsNskkySv9Hn1tmMhLnY=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dbefd3\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7a5c 75bf 62c0 | 29 75bf (0) 7a5c (0) 6049 (0) 6271 (0)\n001 3 83aa 8cb7 8934 | 14 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n002 2 e59a f16d | 9 ec08 (0) ec3e (0) e59a (0) ff06 (0)\n003 3 c67d c62e c34b | 7 ce82 (0) c851 (0) c62e (0) c67d (0)\n004 1 d165 | 1 d165 (0)\n============ DEPTH: 5 ==========================================\n005 2 de4f dd48 | 2 dd48 (0) de4f (0)\n006 1 d87b | 1 d87b (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","private_key":"8537c2f509c410459184963d560347c250fc3f2631bcc456ac9b79da484bc101","name":"node_dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","services":["streamer"],"enable_msg_events":true,"port":35725},"up":true}},{"node":{"info":{"id":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","name":"node_c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","enode":"enode://0245124f48570389a2866e65303f7d57c8a4254666fb9e7ec6e6f3ace35f5e45ca64226350e6b6445dfd1091d1394796df617f005159041b940524f8adda73a1@127.0.0.1:0","enr":"0xf88fb8404535d47dbfda01f3c3a68b4bd60c11c4768d1649b38384b158512d85b4e5cc43499e0e607bddd4361d5b54a390b17ae72e26d3080276c9d687c9efae40f005860183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030245124f48570389a2866e65303f7d57c8a4254666fb9e7ec6e6f3ace35f5e45","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"w0vS4gn8EeJ/geE1lUXyjIFnhxJ7QYEdwXEPpOU/zvo=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c34bd2\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 75bf 7a5c 62c0 | 29 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n001 3 83aa 8cb7 8934 | 14 83aa (0) 8934 (0) 8cb7 (0) 9637 (0)\n002 2 ec08 f090 | 9 ec08 (0) ec3e (0) e59a (0) ff06 (0)\n003 2 d165 dbef | 5 d165 (0) dd48 (0) de4f (0) d87b (0)\n004 2 c851 ce82 | 2 ce82 (0) c851 (0)\n005 2 c67d c62e | 2 c62e (0) c67d (0)\n============ DEPTH: 6 ==========================================\n006 2 c05d c034 | 2 c034 (0) c05d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","private_key":"ecb3f67dada43226ea1f5c5c177ca97188784e759b87b5d7701b36bbbcee941b","name":"node_c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","services":["streamer"],"enable_msg_events":true,"port":38173},"up":true}},{"node":{"info":{"id":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","name":"node_f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","enode":"enode://796dd862e2916c5900370aa18abb58eb7ba061bd52bf8bb48806ac1deec33d5f6627fbd4cdccb07ca96c2661bc2e8b28c2899f2dc77b58affcbb938e197868b7@127.0.0.1:0","enr":"0xf88fb84022132521c6b77045f87c62858e909b70e05b1eb03074a66cdbf5ddd612c6497c0d7965fa4bf8da77b47dd9876098ae4e83e897a656a7fead1080c84ad489a9800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103796dd862e2916c5900370aa18abb58eb7ba061bd52bf8bb48806ac1deec33d5f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8JDZCflPaXDQdJSBFeT0bmfk+1c19TeIntKxaf8r02g=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f090d9\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 404b 2f1a 2b79 | 29 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n001 2 9861 ab25 | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 2 d165 c34b | 12 d165 (0) dd48 (0) de4f (0) d87b (0)\n003 2 e59a ec3e | 3 ec08 (0) ec3e (0) e59a (0)\n004 2 fef2 ff06 | 2 ff06 (0) fef2 (0)\n005 1 f6f3 | 1 f6f3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 f1e1 f16d | 2 f1e1 (0) f16d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","private_key":"3dfe370e85ca228b6903e2d360a8514dce89675639f3a9264664edb96fdca3dc","name":"node_f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","services":["streamer"],"enable_msg_events":true,"port":41687},"up":true}},{"node":{"info":{"id":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","name":"node_2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","enode":"enode://370dcdd12168f383c15bd0ec87531e7bdaa52736c12bcea00741789b1751854b7e14b84fc913da88db24c127860eef70289cd36c30e870b2e60ae232f705b520@127.0.0.1:0","enr":"0xf88fb8403028d93ddd84c729bf844b16597a912772cc40c7db867507dad911da33bfe6d55295b0a2878cb609e92f19940ef46dd3702138aec69e6760ec1467fbce88f9fb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102370dcdd12168f383c15bd0ec87531e7bdaa52736c12bcea00741789b1751854b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"K3kPvKjadMfelxW0kZzgPNzxSkYIZxzUc5srmaBS5jY=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2b790f\npopulation: 12 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 8934 83aa f090 | 35 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n001 2 7a5c 5b87 | 15 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n002 2 0d7f 12b8 | 8 041c (0) 0e8f (0) 0f03 (0) 0d7f (0)\n003 1 33fe | 1 33fe (0)\n004 2 2293 27c2 | 2 27c2 (0) 2293 (0)\n============ DEPTH: 5 ==========================================\n005 1 2f1a | 1 2f1a (0)\n006 0 | 0\n007 0 | 0\n008 1 2b80 | 1 2b80 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","private_key":"d4f121c855c9e92f96585641e9e11a9f25db6aa8086675165215c749e9931cc6","name":"node_2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","services":["streamer"],"enable_msg_events":true,"port":39687},"up":true}},{"node":{"info":{"id":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","name":"node_5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","enode":"enode://c1760651e80b5c22381bc3145277a8ea0e69ca9ccb7eec2abbf5d25763af1434adb24df08ef0563f360c47e13df5274f4a306c6c58d563001c737b1a6e8f6077@127.0.0.1:0","enr":"0xf88fb84049138c3a1759cf719d4a36e6e0af5ed94ddcc90a5151a6bf2f2c4a1ab71fb59e1c02d825fd42a203c2b2638a1e777ba95a1f07e2a1b276029d6f689aa0dd9c6f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c1760651e80b5c22381bc3145277a8ea0e69ca9ccb7eec2abbf5d25763af1434","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W4dHjOb5aYjVctJJFAymcW9mrsj24ENef4vp/KXtOKA=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5b8747\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 adfd 8cb7 8934 83aa | 35 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n001 4 1dd4 0e8f 041c 2b79 | 14 041c (0) 0e8f (0) 0f03 (0) 0d7f (0)\n002 2 6271 75bf | 5 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n003 2 46af 4853 | 6 404b (0) 46af (0) 4443 (0) 4541 (0)\n004 1 55a2 | 1 55a2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 5bf6 | 1 5bf6 (0)\n010 0 | 0\n011 1 5b93 | 1 5b93 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","private_key":"8d3cdf3d5a28844fd7e67364be1e82e3718d8f5eb3b28b7c219f3bfd3a4482ff","name":"node_5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","services":["streamer"],"enable_msg_events":true,"port":45565},"up":true}},{"node":{"info":{"id":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","name":"node_c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","enode":"enode://8efe3d05a04ad75bac960e82749f90285a60965cbabf117520172a430cee7e1beabe22d9402056d1fcd0bd54060e8aef112a62ab850079d330d861bcdd7816cb@127.0.0.1:0","enr":"0xf88fb8405e37f5ab79e815ac91da5441a580c06abf98a4ea7d3ed49b9aaa5dd4b5c8356a4a4a3a5f0f457122d3ef8ef8d3d0ab266d55390d8c1dec965faa04061944e7180183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038efe3d05a04ad75bac960e82749f90285a60965cbabf117520172a430cee7e1b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yFEfiJbTxCJtXYyGAJbGqQg5/OUAp3uDBDlfW0gzsoQ=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c8511f\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1dd4 1a93 4853 5b87 | 29 1a93 (0) 1dd4 (0) 10d5 (0) 12b8 (0)\n001 2 8cb7 83aa | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 3 e59a ec08 ec3e | 9 ec08 (0) ec3e (0) e59a (0) f090 (0)\n003 2 dd48 d87b | 5 d165 (0) de4f (0) dd48 (0) dbef (0)\n============ DEPTH: 4 ==========================================\n004 5 c34b c034 c05d c62e | 5 c62e (0) c67d (0) c034 (0) c05d (0)\n005 1 ce82 | 1 ce82 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","private_key":"7edb500de3d27c2f1c20281b4a363269e854385d629b21f00110159d97b3607e","name":"node_c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","services":["streamer"],"enable_msg_events":true,"port":44825},"up":true}},{"node":{"info":{"id":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","name":"node_d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","enode":"enode://df025390a37a450f77f57f29730f1cdcf861dafe454be915480b15a7618c3dd0fa0614cd563fafc92b49c299f8ca1a67fa45a5e339ef81f7eb0313063ec7fcd7@127.0.0.1:0","enr":"0xf88fb840f20d1eb7eba00a7c4cad26a78536b6a072c53c985418b4cca4a279004d36316d3b04274929a19f4967819c2b69986716fdb97b7224be8c43b3152c9a09b6f1450183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df025390a37a450f77f57f29730f1cdcf861dafe454be915480b15a7618c3dd0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2HumV1dpaAWPzIZXnD9SqniQWQmwqUOTivYhxu2Z++o=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d87ba6\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6049 7a5c 75bf | 29 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n001 3 8cb7 8934 83aa | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 2 ec08 f1e1 | 9 ec08 (0) ec3e (0) e59a (0) ff06 (0)\n003 2 c62e c851 | 7 c62e (0) c67d (0) c034 (0) c05d (0)\n004 1 d165 | 1 d165 (0)\n============ DEPTH: 5 ==========================================\n005 2 de4f dd48 | 2 de4f (0) dd48 (0)\n006 1 dbef | 1 dbef (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","private_key":"93f0687cbba5779fbb6cb10ab57fdb2d731263d9454254b0d068517de95318c3","name":"node_d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","services":["streamer"],"enable_msg_events":true,"port":42845},"up":true}},{"node":{"info":{"id":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","name":"node_f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","enode":"enode://484250cb629a55eb8908406ea682b88bd1095dbc5c8b47d7dcf788b58af2aca80bcc8048c730f61123f714da50af301fbf0bb5544d6a12265dd64f6d6caa7622@127.0.0.1:0","enr":"0xf88fb840c0b62c373941d77a9db85a25dd2254d9ed63ab322b5103757f67b539c0637fa45e0227414a8f3c80030c5c4f3c63066f12d2f43a348b054df1baec631a2b24ab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102484250cb629a55eb8908406ea682b88bd1095dbc5c8b47d7dcf788b58af2aca8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8eFRvu8MIllmmslQElqgBLArpweL8thySKS30lxiWF4=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f1e151\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0d7f 10d5 | 29 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n001 3 adfd 83aa 8cb7 | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 3 c67d c62e d87b | 12 c62e (0) c67d (0) c34b (0) c034 (0)\n003 2 e59a ec08 | 3 ec08 (0) ec3e (0) e59a (0)\n004 2 ff06 fef2 | 2 ff06 (0) fef2 (0)\n005 1 f6f3 | 1 f6f3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f090 | 1 f090 (0)\n008 1 f16d | 1 f16d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","private_key":"acc2b5405b67970f8bd4ed395c8d529244748d6ac6a154cb9ff921ece215fb88","name":"node_f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","services":["streamer"],"enable_msg_events":true,"port":41401},"up":true}},{"node":{"info":{"id":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","name":"node_10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","enode":"enode://89a7090143be61d5f0802e125024559acf78c2f4425833355773894fb50f276b8fdda028da973cf879caedfc187dd1addcdf96518411c22acaa2481c2e286f0e@127.0.0.1:0","enr":"0xf88fb8406fe88139d195b80e137f45124e24df45a21c7cd29b132466d90f172da4a4bc3827089aa2a8a2e90d2dffe86715fe8fa4fcb3e92946b1d1ba13c05fced90ccdf10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10289a7090143be61d5f0802e125024559acf78c2f4425833355773894fb50f276b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ENV5UjrLrTDj5Q1hDw0ykfdRhIZ3PI2UBIVr8TSRKL8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 10d579\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 fef2 f1e1 | 35 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n001 3 6049 7a5c 75bf | 15 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n002 3 33fe 2293 27c2 | 6 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n003 3 0f03 0e8f 041c | 4 041c (0) 0e8f (0) 0f03 (0) 0d7f (0)\n============ DEPTH: 4 ==========================================\n004 2 1a93 1dd4 | 2 1a93 (0) 1dd4 (0)\n005 0 | 0\n006 1 12b8 | 1 12b8 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","private_key":"aed9b1cd2e417b73e0eafef6d800fb05144bbd30fde59e856931febfceef38fa","name":"node_10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","services":["streamer"],"enable_msg_events":true,"port":36265},"up":true}},{"node":{"info":{"id":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","name":"node_fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","enode":"enode://336313478a56abfa3294828046976fbf1cb48cdea139aa491ca1cd88448e89b3740139f57abadcff5bc46002f2e491114ae0145b2dd38143675777c06d03ef60@127.0.0.1:0","enr":"0xf88fb840aa6cf0fb83fdcdc187e00d76cbbbcb8be6d3beceab21d139ad8b0e8380aafaa62f686200f97847175179cad675ea37ee3c5b6db44cd6241386602d8d410691ba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102336313478a56abfa3294828046976fbf1cb48cdea139aa491ca1cd88448e89b3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/vJ6NgQIF56v1RTfxxAW898IW8sug7vetfueXNGTVpY=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fef27a\npopulation: 18 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 75bf 7a5c 27c2 10d5 | 29 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n001 3 83aa 8934 8cb7 | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 3 d165 c034 c05d | 12 d165 (0) de4f (0) dd48 (0) dbef (0)\n003 3 e59a ec3e ec08 | 3 ec08 (0) ec3e (0) e59a (0)\n============ DEPTH: 4 ==========================================\n004 4 f090 f1e1 f16d f6f3 | 4 f6f3 (0) f090 (0) f16d (0) f1e1 (0)\n005 0 | 0\n006 0 | 0\n007 1 ff06 | 1 ff06 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","private_key":"49a6d4a219bf4b1ad421bd6639b794b3f12fabb5f218155ca4722238da50e33f","name":"node_fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","services":["streamer"],"enable_msg_events":true,"port":45845},"up":true}},{"node":{"info":{"id":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","name":"node_c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","enode":"enode://611dae74107d3503af1ac4fa2d17a00533063b2247085dd393337640911e8c5ca30c1e485845c6dc12c408705af5ecfcfc593bb6503d859b9ddd51eb2b40fa71@127.0.0.1:0","enr":"0xf88fb8401cb70183d2bfd84ae541dc21ef3417ac61c4e11bc8d80f2adc3b475b1ea5011a7767542e90a84bd5e76da6acfe25c5d8b7c0236a7b7ff85fc81506fbe874e1b00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103611dae74107d3503af1ac4fa2d17a00533063b2247085dd393337640911e8c5c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wF2dkZnBsb+Er0uIabNpIDgvA1DVjdUQBwDNDSfxZas=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c05d9d\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 33fe 27c2 2293 | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 3 8934 83aa be5d | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 2 ec08 fef2 | 9 ec08 (0) ec3e (0) e59a (0) f090 (0)\n003 2 d165 de4f | 5 d165 (0) de4f (0) dd48 (0) dbef (0)\n004 2 c851 ce82 | 2 ce82 (0) c851 (0)\n005 2 c67d c62e | 2 c62e (0) c67d (0)\n============ DEPTH: 6 ==========================================\n006 1 c34b | 1 c34b (0)\n007 0 | 0\n008 0 | 0\n009 1 c034 | 1 c034 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","private_key":"d8106f622a5e169381999bd3370e0a0ee143ac4bd5f679a957c78402600e345b","name":"node_c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","services":["streamer"],"enable_msg_events":true,"port":41355},"up":true}},{"node":{"info":{"id":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","name":"node_be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","enode":"enode://1461c352c31d8c7158d0bae6915d42f1353f1b5608ebca9ab6ef2bc08035155f3fb075962f54495806fe9b8cd85a22b42ac099cbf299571ff5e5ba91271a2f17@127.0.0.1:0","enr":"0xf88fb840a191693ed026822c26a8b3823cb888fc5e2607612bcfe9d4a6ee5ede28060aef2608c9121b792343c21884f298aa1dcff8431d0acf48205f66a6cd156b4089360183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031461c352c31d8c7158d0bae6915d42f1353f1b5608ebca9ab6ef2bc08035155f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vl2g60vHbAyjpjQjVo2/ok04VJmUWwaDCKKHTtQkPrM=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: be5da0\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 27c2 33fe 4e4e | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 3 ec3e ec08 c05d | 21 ec08 (0) ec3e (0) e59a (0) f090 (0)\n002 3 83aa 8934 8cb7 | 6 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n003 2 ab25 a259 | 4 a259 (0) ab25 (0) aeff (0) adfd (0)\n004 1 b269 | 1 b269 (0)\n============ DEPTH: 5 ==========================================\n005 1 bbbc | 1 bbbc (0)\n006 1 bc3e | 1 bc3e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","private_key":"9d95c4e61d120dc2c67a63e93da0b69a257ae7dd8ca30eda036335366d1508de","name":"node_be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","services":["streamer"],"enable_msg_events":true,"port":36717},"up":true}},{"node":{"info":{"id":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","name":"node_4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","enode":"enode://41e5ef400615590acfce1feaa4f723da88b7fee03c125e8feeb03201c364a22a14bfab06b86ce8c50bbf67843d5c300284b03c113f769c22ec8d0c0efa7bdb88@127.0.0.1:0","enr":"0xf88fb840d9ed9f340c2d0edc3d9f2fb6dc8cab0028f8ad74cb6931445c8752a95d3d1f0905c1ba22a04418eeb093a35bafd184eff3faa6fd110606e175e07ece0216c8930183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10241e5ef400615590acfce1feaa4f723da88b7fee03c125e8feeb03201c364a22a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Tk7V+Q3FOZ4zYtJpHLVYevhieuVCxSTi8qEpQouRqJs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4e4ed5\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e59a ec3e ec08 be5d | 35 ec08 (0) ec3e (0) e59a (0) f090 (0)\n001 3 27c2 33fe 0d7f | 14 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n002 2 7a5c 75bf | 5 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n003 2 5bf6 5b93 | 4 5bf6 (0) 5b87 (0) 5b93 (0) 55a2 (0)\n============ DEPTH: 4 ==========================================\n004 4 46af 4541 4443 404b | 4 404b (0) 4443 (0) 4541 (0) 46af (0)\n005 1 4853 | 1 4853 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","private_key":"30dde001235a31362e50d4c106edd3ceaf6526ef026eca049fedc0a8fc0b96e1","name":"node_4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","services":["streamer"],"enable_msg_events":true,"port":42507},"up":true}},{"node":{"info":{"id":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","name":"node_0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","enode":"enode://91e81df107a4406cac255c8d4ba60fd18e5dcd96fd1cb877eb7024c046b695df3f48d299aeef695da5d4fea7069487cc20c4c48c1fd27528eb3f2f627b952342@127.0.0.1:0","enr":"0xf88fb8401644e0ac4bf24a23935aa075cfd9c4d6d785825325cbf7a21768c96abc96a92e5f47057330b9c09e916850fddfb4b3d689a4a0b98ba012c7b01e0123da1726900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10291e81df107a4406cac255c8d4ba60fd18e5dcd96fd1cb877eb7024c046b695df","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DX9KZirMctL+2ZnhOIDNEHDXu4aKku40OlLc+EzwY5U=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0d7f4a\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 dd48 f16d f1e1 8cb7 | 35 f1e1 (0) f16d (0) f090 (0) f6f3 (0)\n001 3 55a2 4541 4e4e | 15 7a5c (0) 75bf (0) 6049 (0) 6271 (0)\n002 2 2b79 2293 | 6 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n003 2 1a93 12b8 | 4 10d5 (0) 12b8 (0) 1a93 (0) 1dd4 (0)\n004 1 041c | 1 041c (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 0e8f 0f03 | 2 0f03 (0) 0e8f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","private_key":"52ff6622d57b5556228f56e411af84d7d5e876ec0b0ef9a3910cf4dacf19295a","name":"node_0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","services":["streamer"],"enable_msg_events":true,"port":35159},"up":true}},{"node":{"info":{"id":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","name":"node_adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","enode":"enode://b05e0fa469e2a12f94369fc64122362af6019a567958df1faa114a1d2c667a835201b99b789eff01bddf4da25a4801ca96f3eaa056156808eeff5f4ecbd9cd36@127.0.0.1:0","enr":"0xf88fb840e775dd44d761e5b3b2c18b047cd086b5c5ca6dbba08ba0744c495cde6f289bf958930628ace3e04c30d4347c0ed18bcc9d021bcc5bfa395a05423d6042f5fe600183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b05e0fa469e2a12f94369fc64122362af6019a567958df1faa114a1d2c667a83","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rf0mQdjlet4ua4AsvrDAtzNkMKZ9HR86vFFStN8Ga5E=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: adfd26\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5b87 5bf6 0d7f | 29 5bf6 (0) 5b87 (0) 5b93 (0) 55a2 (0)\n001 2 f1e1 ff06 | 21 f1e1 (0) f16d (0) f090 (0) f6f3 (0)\n002 3 8934 83aa 9009 | 6 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n003 3 bbbc bc3e b269 | 4 b269 (0) bbbc (0) be5d (0) bc3e (0)\n004 1 a259 | 1 a259 (0)\n============ DEPTH: 5 ==========================================\n005 1 ab25 | 1 ab25 (0)\n006 1 aeff | 1 aeff (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","private_key":"0315f5fb99c9777433fed108cc4c6deb7db717796e405b5e6a3aa389299b87b4","name":"node_adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","services":["streamer"],"enable_msg_events":true,"port":35001},"up":true}},{"node":{"info":{"id":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","name":"node_9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","enode":"enode://093522f714ffd69ed9f6db15bb1cde0bc555925225a9e372b375bd301de6cb9d950b7b8c0b78c4de65bbeee2cd2ac0dcb1901f0bc3de835e1a24d76ca813c2ae@127.0.0.1:0","enr":"0xf88fb840c1c3fa0a54f8946b866c65b93538aac7322c9d5b26aff75c0dd8033fde1dde1627786a0478d2407b93c96f661b093b4a13d1aa4b5bd03a067492d76988b6a6800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102093522f714ffd69ed9f6db15bb1cde0bc555925225a9e372b375bd301de6cb9d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"kAnO8yucxC6XuBK6OjW5d9pdNzmQu5UhpRbflGZAHV0=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9009ce\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 27c2 33fe 62c0 | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 3 ce82 de4f ff06 | 21 d165 (0) de4f (0) dd48 (0) dbef (0)\n002 2 bc3e adfd | 8 b269 (0) bbbc (0) be5d (0) bc3e (0)\n003 3 83aa 8934 8cb7 | 3 83aa (0) 8934 (0) 8cb7 (0)\n============ DEPTH: 4 ==========================================\n004 1 9861 | 1 9861 (0)\n005 1 9637 | 1 9637 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","private_key":"1bc6fe30378e57ca0c15b6f6f5f2d74ba8cdafbe43f76592ab80c52dc0f52728","name":"node_9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","services":["streamer"],"enable_msg_events":true,"port":35487},"up":true}},{"node":{"info":{"id":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","name":"node_62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","enode":"enode://c81f541ba227667d8becb3345c579943bfbb3a8bcd62b439cb005efda334f6c8c1d6d2af9fa49dad450a5875a0646b9a04f7083c19087bd7c433ab3db9094628@127.0.0.1:0","enr":"0xf88fb8403f4920feda458e968679a926fd71a565a684927ea66ae2650f2db9bd6c6ee43e1fc9cd1d73b370ecd2ba7c6b42518f316edc250d1e926c34b391d1b6480cdb330183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c81f541ba227667d8becb3345c579943bfbb3a8bcd62b439cb005efda334f6c8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YsCWkN1xeE4GtDjXxWJW4Ql8Bf5+uDuQ/lsCd6S4hWg=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 62c096\npopulation: 23 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 de4f dbef c34b e59a | 35 d165 (0) de4f (0) dd48 (0) dbef (0)\n001 6 0f03 041c 12b8 1a93 | 14 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n002 7 4853 404b 4443 4541 | 10 5b87 (0) 5b93 (0) 5bf6 (0) 55a2 (0)\n003 2 75bf 7a5c | 2 7a5c (0) 75bf (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 6049 | 1 6049 (0)\n007 0 | 0\n008 1 6271 | 1 6271 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","private_key":"269dd3ac6136b86cb9f66421970333cf6b067b5e2ad659c74a12a454391a781b","name":"node_62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","services":["streamer"],"enable_msg_events":true,"port":43131},"up":true}},{"node":{"info":{"id":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","name":"node_e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","enode":"enode://f5fe3b4e018db5568948b9ef30185053e250d458a82b652689af29835dd52c49183ff839f32d445eb8106cc99df2f214878755161589f635c59336b92e24fdad@127.0.0.1:0","enr":"0xf88fb840a740cd0c6245b675fe0d492a0d4d735796337ec26f5662c4f9da84de9e48a03f5558dc622db428dea3a93145610b4c70871ada7d76383a1148c2343ac86a40bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f5fe3b4e018db5568948b9ef30185053e250d458a82b652689af29835dd52c49","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5Zp0tlcJzZ521NUx0HioowVQYe3cTVFa/7/A+ZyuIqw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e59a74\npopulation: 19 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1dd4 4e4e 6049 62c0 | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 4 a259 83aa 8934 8cb7 | 14 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n002 5 c62e c851 ce82 de4f | 12 d165 (0) dbef (0) d87b (0) de4f (0)\n003 4 fef2 f16d f1e1 f090 | 6 f090 (0) f1e1 (0) f16d (0) f6f3 (0)\n============ DEPTH: 4 ==========================================\n004 2 ec3e ec08 | 2 ec08 (0) ec3e (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","private_key":"6e4dcbf79fca1a42fc07f76fb66b645ff15ad89bf3b5ee627bc4294089d2770b","name":"node_e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","services":["streamer"],"enable_msg_events":true,"port":41179},"up":true}},{"node":{"info":{"id":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","name":"node_1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","enode":"enode://091c7d3991885b5205a7ad94190d2c5ca8169b7a2b7cee4fd6892d2dbe13ae3471441239ab4accb7bcd14852193c18d5617b8862678cc87887b11e6d41649b11@127.0.0.1:0","enr":"0xf88fb840c63763385c1eda51cd29a392364bf9f8be18399e4f9607b47bab1b59152f0587723422ca8629675ecacc5ffa0aeb859c37e02ffc2af0369b0979891a56d18e5d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103091c7d3991885b5205a7ad94190d2c5ca8169b7a2b7cee4fd6892d2dbe13ae34","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HdTCyNrGRlJrGv0YfzJnEtp17Xpxdmi/yJx3A6lk1IA=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1dd4c2\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8934 83aa c851 e59a | 35 83aa (0) 8934 (0) 8cb7 (0) 9861 (0)\n001 3 5b87 5b93 75bf | 15 5b93 (0) 5b87 (0) 5bf6 (0) 55a2 (0)\n002 4 2f1a 2293 27c2 33fe | 6 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n003 3 041c 0f03 0e8f | 4 041c (0) 0d7f (0) 0f03 (0) 0e8f (0)\n============ DEPTH: 4 ==========================================\n004 2 10d5 12b8 | 2 12b8 (0) 10d5 (0)\n005 1 1a93 | 1 1a93 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","private_key":"15434ad1577984b2ae25fc53d127261f8a1d1b643edf1cfe7f49714a1ed8619b","name":"node_1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","services":["streamer"],"enable_msg_events":true,"port":46023},"up":true}},{"node":{"info":{"id":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","name":"node_75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","enode":"enode://5196fd22b79e08c920e19716c9cf53c83634acda9a39d03f9e09e1241417eb955553103a82a5e58351a4696f61b7910bb9ce0e40105fef8f988d891d2b37b63d@127.0.0.1:0","enr":"0xf88fb840924cb202bf2e42bbe4204422d11630c955bb55e1c35949af2ab69a72a890f7c00a9429df6f78ec5295745029133eccea9fdd9c81b7ff637c884cd01bc527398b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035196fd22b79e08c920e19716c9cf53c83634acda9a39d03f9e09e1241417eb95","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"db+IG2rL9RLyq89C5dhqwy5d2EnnpBbjknWXmitr9Do=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 75bf88\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 f16d fef2 ec3e c34b | 35 e59a (0) ec08 (0) ec3e (0) f090 (0)\n001 3 2293 10d5 1dd4 | 14 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n002 3 4e4e 5bf6 5b87 | 10 5b93 (0) 5b87 (0) 5bf6 (0) 55a2 (0)\n============ DEPTH: 3 ==========================================\n003 3 6049 62c0 6271 | 3 6271 (0) 62c0 (0) 6049 (0)\n004 1 7a5c | 1 7a5c (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","private_key":"1d04f36e8b1b0b6d54f6361f0951803d47e9635eca0750c712509153f7ecf942","name":"node_75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","services":["streamer"],"enable_msg_events":true,"port":35973},"up":true}},{"node":{"info":{"id":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","name":"node_a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","enode":"enode://a475a32447cded8bbb47d0d8fe2373bdd01422752a81c31c2845b8f630c501c57e5e1df81ac50100e84cc9c7c29c7a5217d80933bb076ae900c4e9b39b8d3192@127.0.0.1:0","enr":"0xf88fb840c305671d9a97ae99f8a21d0af8cb920e8343e1157f891978be2c6593c9ccd2b606f3d350e8f146686ba9e55de1988b02886a36cb7782c11fbed93a7a1987a3ff0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a475a32447cded8bbb47d0d8fe2373bdd01422752a81c31c2845b8f630c501c5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"olkE+YxzoJo3A09XnYZBP+Mf2aBSoD10Jmdg1OpzuOk=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a25904\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6049 75bf | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 4 ec3e ec08 e59a f6f3 | 21 e59a (0) ec08 (0) ec3e (0) f090 (0)\n002 2 9637 9861 | 6 9861 (0) 9637 (0) 9009 (0) 83aa (0)\n003 3 b269 bbbc be5d | 4 b269 (0) bbbc (0) be5d (0) bc3e (0)\n============ DEPTH: 4 ==========================================\n004 3 ab25 aeff adfd | 3 ab25 (0) aeff (0) adfd (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","private_key":"9c19a3fae05635da15fc8499e2d30b15ab154d5aebd6e911ffe18c8b9bdf7e06","name":"node_a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","services":["streamer"],"enable_msg_events":true,"port":37579},"up":true}},{"node":{"info":{"id":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","name":"node_604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","enode":"enode://f7775a8758c3725f763c0806ba1d52f74e6b312de69eaf6ed8cc0c7a88625c53e47053e304eb9b567843da94010ca4447b98699a541ba1425f0aa147e444b86e@127.0.0.1:0","enr":"0xf88fb8403f292e1bf244a35875921965cd6bb6dd93bb0241082ee3ebf32a0ed161c646941d2ff14e735c34f9cda2916a1e96e9f80b22d2c60195d45433c614157e330c900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f7775a8758c3725f763c0806ba1d52f74e6b312de69eaf6ed8cc0c7a88625c53","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YEli8AZKyWEqGbRZlk9y2ifFR8cKW/Evuf8++cBsWkE=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 604962\npopulation: 27 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 c034 d87b de4f ec3e | 35 e59a (0) ec08 (0) ec3e (0) f090 (0)\n001 7 1a93 10d5 12b8 0f03 | 14 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n002 6 5b93 5bf6 4853 404b | 10 5b93 (0) 5b87 (0) 5bf6 (0) 55a2 (0)\n003 2 75bf 7a5c | 2 7a5c (0) 75bf (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 62c0 6271 | 2 6271 (0) 62c0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","private_key":"d43fc183927a1d97aee7b09b4977f66657a79a7132440f1085e72dac4f111b29","name":"node_604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","services":["streamer"],"enable_msg_events":true,"port":36711},"up":true}},{"node":{"info":{"id":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","name":"node_46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","enode":"enode://51afc950250580c6016fe6e1cc591b90a31257d89b57df0cee54184ed0fe09c1e5777398b9ea7cbf355e475dff29a8a57cf7af461f2544f09595281730b0421b@127.0.0.1:0","enr":"0xf88fb840c55fc03f59e481c9056bb420d743110b252edb232b677c6eded69cb1f9de070f214517d43e7bd121063ff69d83b53ef77f2cb60ea36ee3fd501c4ce5f941c5d00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10351afc950250580c6016fe6e1cc591b90a31257d89b57df0cee54184ed0fe09c1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Rq+9e3Hp9VeBNe9Xxumvrx7ekUJf1YB9ayV+R/k9gwo=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 46afbd\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 bbbc b269 c67d | 35 b269 (0) bbbc (0) be5d (0) bc3e (0)\n001 3 2293 27c2 33fe | 14 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n002 2 7a5c 6049 | 5 7a5c (0) 75bf (0) 6271 (0) 62c0 (0)\n003 2 5b93 5b87 | 4 5b93 (0) 5b87 (0) 5bf6 (0) 55a2 (0)\n004 2 4e4e 4853 | 2 4853 (0) 4e4e (0)\n005 1 404b | 1 404b (0)\n============ DEPTH: 6 ==========================================\n006 2 4443 4541 | 2 4541 (0) 4443 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","private_key":"c83d6d9cc57a48d84d57d3c6bb8bea3f077d62d280265de50dcd32e06d248f03","name":"node_46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","services":["streamer"],"enable_msg_events":true,"port":34261},"up":true}},{"node":{"info":{"id":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","name":"node_c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","enode":"enode://9f5e3ba7425458e07339268d779ab9edafb03e2b1b67169a1123d0c6082374c60f34ef62398c7fff491e9a586e010737c16cc6fee1c969b773e5d9036bb2d2d5@127.0.0.1:0","enr":"0xf88fb840331107dbd5f067ec688710841e8f2feb84a5139e0b4b8b5fc9e775a99353e7c160a1dfa9939df3d039103b453a571a574a36f7ba55ed3f64ea23917b4f1d48570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039f5e3ba7425458e07339268d779ab9edafb03e2b1b67169a1123d0c6082374c6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xn2ygvie5cf+M8zrbWBmcsBPJz+SR0ePMjyCJ/cJty0=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c67db2\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 27c2 33fe 46af | 29 33fe (0) 27c2 (0) 2293 (0) 2f1a (0)\n001 2 b269 8cb7 | 14 b269 (0) bbbc (0) be5d (0) bc3e (0)\n002 3 ec08 f1e1 f6f3 | 9 ec08 (0) ec3e (0) e59a (0) f090 (0)\n003 2 d165 dbef | 5 d165 (0) dbef (0) d87b (0) de4f (0)\n004 2 ce82 c851 | 2 c851 (0) ce82 (0)\n============ DEPTH: 5 ==========================================\n005 3 c05d c034 c34b | 3 c34b (0) c034 (0) c05d (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 c62e | 1 c62e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","private_key":"c5f0dbfaf1bc89108010b5a6b4fdd44434a9c6f91328d5eadbbfa0108072ccb8","name":"node_c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","services":["streamer"],"enable_msg_events":true,"port":36251},"up":true}},{"node":{"info":{"id":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","name":"node_8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","enode":"enode://de0a8da74b3df44a50a35257ac834a3fe752fa615fb7d9b39d2c716b9b5f7edc32874d826d50224f2e37fb1a07f7526070f08674414124367465abf02cbf5ff4@127.0.0.1:0","enr":"0xf88fb840189409bc37dbd9a8810613dce78f7b24e5c24579fe5ede271045352b0a50969802f6e75f3b631cb61f415fbb4a7a68e994cb620ba81be2ece91909c5f01e673f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102de0a8da74b3df44a50a35257ac834a3fe752fa615fb7d9b39d2c716b9b5f7edc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jLfaTvIVjQfCIsDwjex/m1gDdiP0ZYJLQRmp8lsxoAU=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8cb7da\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 5b87 041c 0d7f 0e8f | 29 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n001 9 e59a fef2 f1e1 c851 | 21 ec08 (0) ec3e (0) e59a (0) f090 (0)\n002 2 ab25 be5d | 8 b269 (0) bbbc (0) be5d (0) bc3e (0)\n003 3 9861 9637 9009 | 3 9861 (0) 9637 (0) 9009 (0)\n============ DEPTH: 4 ==========================================\n004 1 83aa | 1 83aa (0)\n005 1 8934 | 1 8934 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","private_key":"6cb4589e98325b9101a5f706969483cdb93fe451d2fe83dcbec1e6fde1986836","name":"node_8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","services":["streamer"],"enable_msg_events":true,"port":38013},"up":true}},{"node":{"info":{"id":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","name":"node_dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","enode":"enode://89555a99503427e59874c6cfce334350add1c85b4b935dad096d2755bb8bda4223becd8f73fc3bda4dc5239d7407dac529cf3f943d1129f29af26dc8c10b04d9@127.0.0.1:0","enr":"0xf88fb8402389226733f4287a4f18cdd6b9ca854dded27d7f7c9cdf1fe5f0ff2b60a3e75a1ea809d39554ccd2b2c97c0b8cff5ea61d51f91c69e821da8b45ed186c4833570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10389555a99503427e59874c6cfce334350add1c85b4b935dad096d2755bb8bda42","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3UgRJxAH+QtkpRt1ivx+vIxa8wbLahuIzNwsyI/ZaEs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dd4811\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0d7f 041c 2b80 | 29 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n001 3 aeff ab25 8cb7 | 14 ab25 (0) aeff (0) adfd (0) a259 (0)\n002 3 ec3e ec08 f6f3 | 9 ec08 (0) ec3e (0) e59a (0) f090 (0)\n003 2 ce82 c851 | 7 c851 (0) ce82 (0) c34b (0) c034 (0)\n004 1 d165 | 1 d165 (0)\n============ DEPTH: 5 ==========================================\n005 2 d87b dbef | 2 dbef (0) d87b (0)\n006 1 de4f | 1 de4f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","private_key":"4a8e7f4ee986a36520c7faff2f4957ba20b7db18fd59de5604f3889db1eb8dd9","name":"node_dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","services":["streamer"],"enable_msg_events":true,"port":33135},"up":true}},{"node":{"info":{"id":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","name":"node_2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","enode":"enode://f6640b5930abb9a111010f89da0b40002e956167f60a2bd769b53430ab64bdce724abbd610813dc99a92fbe4e15cc33c164bb6ae05e965490ebd84c5cfecf306@127.0.0.1:0","enr":"0xf88fb840f9d875b3913769d2201f5c0a0b1dddddb9416184e14f986671f98b799fb7bc7c3b1853a972ca0dce95c27a7f6195e3f8fd87da8e9708d9ce4b224e940a2d319b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f6640b5930abb9a111010f89da0b40002e956167f60a2bd769b53430ab64bdce","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"K4BPbSojVEHPC1tSp/sqqGLIRRDtSC8KWuySxNiatIQ=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2b804f\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9637 9861 dd48 | 35 9861 (0) 9637 (0) 9009 (0) 83aa (0)\n001 3 4443 5bf6 55a2 | 15 6049 (0) 6271 (0) 62c0 (0) 7a5c (0)\n002 2 041c 0f03 | 8 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n003 1 33fe | 1 33fe (0)\n004 2 2293 27c2 | 2 27c2 (0) 2293 (0)\n============ DEPTH: 5 ==========================================\n005 1 2f1a | 1 2f1a (0)\n006 0 | 0\n007 0 | 0\n008 1 2b79 | 1 2b79 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","private_key":"482d8c479e055a2cd97d27a00578bfbe177ae0ca405f9b3a2a08e55ad11f0da8","name":"node_2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","services":["streamer"],"enable_msg_events":true,"port":42125},"up":true}},{"node":{"info":{"id":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","name":"node_55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","enode":"enode://0e1f60835d710b5bce7825c96b4002cfe63ef0308ad175b5e4e4bcf6fbf5187d01c5b296ce5a87affae58239bbbd0d8bbd425a558e2d5eee41d6cddbea15b939@127.0.0.1:0","enr":"0xf88fb84058ce2d6dde0e4febc7e1b9b68901a2399228ed0dc3972db83041f6511414997e295b9340c70b1cb50884a5dd3f193a346b3aac3f8d2d860c2ef0066ad6315cbe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030e1f60835d710b5bce7825c96b4002cfe63ef0308ad175b5e4e4bcf6fbf5187d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VaJDtL33j/JGBTPFIWILEbTOqmejyWdg4qn6zGcn9Q8=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 55a243\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9637 9861 ce82 | 35 9861 (0) 9637 (0) 9009 (0) 83aa (0)\n001 3 0d7f 041c 2b80 | 14 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n002 2 6271 62c0 | 5 6049 (0) 62c0 (0) 6271 (0) 7a5c (0)\n003 4 4853 404b 4541 4443 | 6 46af (0) 4541 (0) 4443 (0) 404b (0)\n============ DEPTH: 4 ==========================================\n004 3 5b87 5b93 5bf6 | 3 5b87 (0) 5b93 (0) 5bf6 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","private_key":"22bc669edb33e88cc2edf332fe24eeb77672294a38ee9ad3fa4a1cc3a2b6c916","name":"node_55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","services":["streamer"],"enable_msg_events":true,"port":35969},"up":true}},{"node":{"info":{"id":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","name":"node_ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","enode":"enode://a7e3b7f8243c44f711eaa63305c75e94cc5c280f85bba57a8153591777c08edd2c46d54768f3e3be5682ceb74a4b7d51c3404faadcead2f9abf0fca9e08496d9@127.0.0.1:0","enr":"0xf88fb84089be519b3e126e4daefeb96ab3a6fad77d8957bcec90ad01848bdae2a1158d7b0625a8ca5453dbac3b83c87abe19b7ee6d9db1a0a469dd9455c871eddc751eef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a7e3b7f8243c44f711eaa63305c75e94cc5c280f85bba57a8153591777c08edd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zoK5gFv6We8/GLRtXi2MRRPhM/hlAN+DtV4TMxrkKYw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ce82b9\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1a93 4443 4853 55a2 | 29 33fe (0) 2293 (0) 27c2 (0) 2f1a (0)\n001 5 aeff 83aa 9861 9009 | 14 9861 (0) 9637 (0) 9009 (0) 83aa (0)\n002 4 f16d e59a ec3e ec08 | 9 e59a (0) ec3e (0) ec08 (0) f090 (0)\n003 2 d165 dd48 | 5 d165 (0) dbef (0) d87b (0) de4f (0)\n============ DEPTH: 4 ==========================================\n004 5 c62e c67d c34b c034 | 5 c34b (0) c034 (0) c05d (0) c67d (0)\n005 1 c851 | 1 c851 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","private_key":"755137d90f904038ad62a2a3a4c884831de662050430fc5bc44c0e776122f890","name":"node_ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","services":["streamer"],"enable_msg_events":true,"port":34417},"up":true}},{"node":{"info":{"id":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","name":"node_1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","enode":"enode://6441a0fb862b2ad19dca82baf54880795e459ccb977d3dec2f5945041080887d4e18924c1f76a70f0cc6aa5e516d4bff2813cba7fd94f9f5990af5d7ba081ba2@127.0.0.1:0","enr":"0xf88fb84089526e1437560f8885e8dec6fdcb7f89033526e82f59e94698507fa850c9e19a3fb9333403aa92eb996e936774dcf266d18fc8c2210f28637ab27102e7f5d0390183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026441a0fb862b2ad19dca82baf54880795e459ccb977d3dec2f5945041080887d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GpMQvGFQXQjEWOq6DnzRtcHnpk4A/LogNNoaF6L6oVw=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1a9310\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 bc3e d165 c851 ce82 | 35 9861 (0) 9009 (0) 9637 (0) 83aa (0)\n001 3 6049 6271 62c0 | 15 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n002 3 2f1a 2293 33fe | 6 33fe (0) 2293 (0) 27c2 (0) 2f1a (0)\n003 4 041c 0e8f 0f03 0d7f | 4 041c (0) 0d7f (0) 0e8f (0) 0f03 (0)\n============ DEPTH: 4 ==========================================\n004 2 10d5 12b8 | 2 12b8 (0) 10d5 (0)\n005 1 1dd4 | 1 1dd4 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","private_key":"3d1bc8c36e5611d1524cba438ab612087f7fe9210a0ddb9f80b7bb94bebf28d0","name":"node_1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","services":["streamer"],"enable_msg_events":true,"port":38755},"up":true}},{"node":{"info":{"id":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","name":"node_bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","enode":"enode://c8fb04e5496759ed67612814155cdc9e564c33e6151e1328db3e3d733ef3be481febd2026453482338b6cf323c0293a196cc120abffb4ee215877ecce683dcea@127.0.0.1:0","enr":"0xf88fb8409592035288ec2ea45833c8d7fcd2795780db3698a74d8f87077300514fcd2205330b0bab53a6dfebdf54779337d6761e4bf024cc5038e4dd4a9f7941eb7d19570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c8fb04e5496759ed67612814155cdc9e564c33e6151e1328db3e3d733ef3be48","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vD4H7gmLrdc5xOm5ZSdfb79jMfdraSCJYErEQCXPC8w=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bc3e07\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6049 5b93 1a93 | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 3 ec08 c034 de4f | 21 e59a (0) ec3e (0) ec08 (0) f1e1 (0)\n002 2 83aa 9009 | 6 9861 (0) 9009 (0) 9637 (0) 83aa (0)\n003 2 ab25 adfd | 4 aeff (0) adfd (0) ab25 (0) a259 (0)\n004 1 b269 | 1 b269 (0)\n============ DEPTH: 5 ==========================================\n005 1 bbbc | 1 bbbc (0)\n006 1 be5d | 1 be5d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","private_key":"aedc9b1c86a50c21ebc168086896d03dc0ff1d2d366426a35678be1bb1f8cd46","name":"node_bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","services":["streamer"],"enable_msg_events":true,"port":38905},"up":true}},{"node":{"info":{"id":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","name":"node_de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","enode":"enode://9f62e657f5258fdc9d473a088077877e003e1ad5e336214b8517cafa34581a7b83eeb731bdaeaee23b09a1739c0c1cbfc75fd0715b014baf301c3ce66dea9210@127.0.0.1:0","enr":"0xf88fb8403b3bfb23ac7a5fe81b2cac041477fe3f148ec11dce658a17042c6be5047af9766810b4b7d33d10350eef6ae57c979f6400cdb549c72f79b6d1938b73ed206c5a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029f62e657f5258fdc9d473a088077877e003e1ad5e336214b8517cafa34581a7b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3k8Wi3tnDBNI2AHbcNmp5/pE3XKQMLpcBd+WI5Z8QLE=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: de4f16\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6049 6271 62c0 | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 2 9009 bc3e | 14 9861 (0) 9009 (0) 9637 (0) 83aa (0)\n002 3 ec3e e59a ff06 | 9 e59a (0) ec3e (0) ec08 (0) f1e1 (0)\n003 2 c034 c05d | 7 ce82 (0) c851 (0) c34b (0) c034 (0)\n004 1 d165 | 1 d165 (0)\n============ DEPTH: 5 ==========================================\n005 2 d87b dbef | 2 d87b (0) dbef (0)\n006 1 dd48 | 1 dd48 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","private_key":"56f97537df39cd2e28da49629a002972b36e5ac32df3a117fa710b9cabe52aa8","name":"node_de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","services":["streamer"],"enable_msg_events":true,"port":46139},"up":true}},{"node":{"info":{"id":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","name":"node_ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","enode":"enode://cb17dde808303f1bbd012517614e105867070959f82e17c94a6af3d5ac085fb14656af8db156f67f5f64480d8221e11c6f8b172b785e6e9c57848833f437b8d8@127.0.0.1:0","enr":"0xf88fb840d2fed0376fa9577d9adabbeb81ace57c4cbf4073222b71a010f99d6b9c4228fc2ad8ec5bcefbfce0225b7f05d0e59e4b02c99cec57387ef602959f4b90d9ed820183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cb17dde808303f1bbd012517614e105867070959f82e17c94a6af3d5ac085fb1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/wbWzDUh0gwKm813nIcvV2AjyOqvrXKJhkFAsxOlxHs=","hive":"\n=========================================================================\nThu Feb 28 18:02:46 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ff06d6\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 404b 27c2 33fe | 29 6049 (0) 62c0 (0) 6271 (0) 75bf (0)\n001 2 9009 adfd | 14 9861 (0) 9009 (0) 9637 (0) 83aa (0)\n002 3 c034 d165 de4f | 12 ce82 (0) c851 (0) c34b (0) c05d (0)\n003 2 ec3e ec08 | 3 e59a (0) ec3e (0) ec08 (0)\n============ DEPTH: 4 ==========================================\n004 4 f6f3 f090 f1e1 f16d | 4 f1e1 (0) f16d (0) f090 (0) f6f3 (0)\n005 0 | 0\n006 0 | 0\n007 1 fef2 | 1 fef2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","private_key":"a519551fcbce37d32e6dbc7b4489172d0fb096ebd57e6ee332422c809ae61862","name":"node_ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","services":["streamer"],"enable_msg_events":true,"port":45295},"up":true}}],"conns":[{"one":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","other":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","other":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","other":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","other":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","other":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","other":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","other":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","other":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","up":true},{"one":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","other":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","up":true},{"one":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","up":true},{"one":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","up":true},{"one":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"9637fa5ec80bd404a366fe86f7a89a573529833097c130114b3015754886545d","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","up":true},{"one":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","up":true},{"one":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"12b8769e0e996011ceff489a3f56ba8e555d545b69accb5b4396dead7335a8db","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","other":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"a25904f98c73a09a37034f579d86413fe31fd9a052a03d74266760d4ea73b8e9","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","other":"9861d7cab15fd77ce544aa046f9daf61af7f7c78da7f84c9d3bc1c19f9f2e071","up":true},{"one":"2b790fbca8da74c7de9715b4919ce03cdcf14a4608671cd4739b2b99a052e636","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"10d579523acbad30e3e50d610f0d3291f7518486773c8d9404856bf1349128bf","other":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"bbbccc0180fe2605be748daeabb1fc02e6c8870b37f371359f38ee114f09771f","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"041c4a3f942536e67af087da305403e26a19e030dcf51473a597431753a2bec2","other":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","up":true},{"one":"2b804f6d2a235441cf0b5b52a7fb2aa862c84510ed482f0a5aec92c4d89ab484","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","up":true},{"one":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"9009cef32b9cc42e97b812ba3a35b977da5d373990bb9521a516df9466401d5d","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","other":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","other":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"ff06d6cc3521d20c0a9bcd779c872f576023c8eaafad7289864140b313a5c47b","other":"f6f318e25a24c449e727c60c610719aaa36d0baf826a3a4931ad684abf9bcbba","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"0e8fb3e25746a7f18f33e31c10200e5ec21eb54ad592bad5369b9b584fe80e1b","other":"5b87478ce6f96988d572d249140ca6716f66aec8f6e0435e7f8be9fca5ed38a0","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"75bf881b6acbf512f2abcf42e5d86ac32e5dd849e7a416e39275979a2b6bf43a","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"627105957aa0b587a9ba1b0f273fc19403b6955940e794a359ade89cd7d40dfb","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"0f03a5bb51c3f599469cfe9e5da0a10b8d06ba501a89e180077a75f1c5971467","other":"1a9310bc61505d08c458eaba0e7cd1b5c1e7a64e00fcba2034da1a17a2faa15c","up":true},{"one":"f090d909f94f6970d074948115e4f46e67e4fb5735f537889ed2b169ff2bd368","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"0d7f4a662acc72d2fed999e13880cd1070d7bb868a92ee343a52dcf84cf06395","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"b2697a3f2de6ea0d13586a655463782509691d6f05d90f45fd08823e7eaf5a0b","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"aeff88a5c749733707f99b876c1ecf7db71b32a6916cf9bbd266af3e69f94e82","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"45411a7482cae50dd1dd8d90138a28c0dc61b04baa9592f927f9d415b0970a53","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"33fe6d6970690e8d9e2b08ff234cb1eaf336baa53b398511cd078dcce2c8b2da","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","other":"dbefd322e4f37f3e142ad151a08c8bd7784fb0db249324aff479f5b663212e76","up":true},{"one":"f1e151beef0c2259669ac950125aa004b02ba7078bf2d87248a4b7d25c62585e","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"2f1a15c39bcb0e953f8c160933f69e3dda29b834575742c4f432eb384c5dd9df","other":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","up":true},{"one":"27c236583dff714a3000acafbfd3308566c81271f825eac8f4f0cff83a7ff127","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"dd4811271007f90b64a51b758afc7ebc8c5af306cb6a1b88ccdc2cc88fd9684b","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","other":"c8511f8896d3c4226d5d8c860096c6a90839fce500a77b8304395f5b4833b284","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"4e4ed5f90dc5399e3362d2691cb5587af8627ae542c524e2f2a129428b91a89b","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","other":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","up":true},{"one":"62c09690dd71784e06b438d7c56256e1097c05fe7eb83b90fe5b0277a4b88568","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","other":"c67db282f89ee5c7fe33cceb6d606672c04f273f9247478f323c8227f709b72d","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"55a243b4bdf78ff2460533c521620b11b4ceaa67a3c96760e2a9facc6727f50f","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"8cb7da4ef2158d07c222c0f08dec7f9b58037623f465824b4119a9f25b31a005","up":true},{"one":"1dd4c2c8dac646526b1afd187f326712da75ed7a717668bfc89c7703a964d480","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"f16dc65b58a9fa5060674ca741531891fd44b63d9ac5eabea185745049e474ca","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"d87ba657576968058fcc86579c3f52aa78905909b0a943938af621c6ed99fbea","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","other":"2293b1e9fb44ee6db39db9366291fc0b4e286c355547750de19e96c32e02bdf9","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"83aad5b97e1ea8c40537e5593de4810c7b35fab156053402dda758d6e9ea9055","up":true},{"one":"c62e4b2302cd62f578c8c647adc3a4affef6df65a5236302865db85897efc015","other":"ce82b9805bfa59ef3f18b46d5e2d8c4513e133f86500df83b55e13331ae4298c","up":true},{"one":"604962f0064ac9612a19b459964f72da27c547c70a5bf12fb9ff3ef9c06c5a41","other":"5b936341da709d11b34b6df007f38fff0396b785a14f94653aaf921d8e450a3f","up":true},{"one":"48534a538fd708c0e616cbdfa948596048b7daa77ef09dd69c1652a5f6d05efc","other":"4443b3497092c9f200fe7d43c32a533f8fc9fa7129226e1e2c7fd5f7f27e1711","up":true},{"one":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","up":true},{"one":"ab255c40e39ba8fd2fb439ff26d135aab3944fb9159e54370f4fe735906d0313","other":"be5da0eb4bc76c0ca3a63423568dbfa24d385499945b068308a2874ed4243eb3","up":true},{"one":"404b70c6ac72972cfd9e7cf115c7f043bd15d0e4b9a959bfc2924c722eb712f7","other":"5bf6a2fe481412b1b20f0cc2325a1119fda9e34c4def3d1f4026a88dc0c992ac","up":true},{"one":"46afbd7b71e9f5578135ef57c6e9afaf1ede91425fd5807d6b257e47f93d830a","other":"7a5c44693de20adc3c53b1302fb00aab32a46265abc7563bdba33f7e5c4f9d74","up":true},{"one":"c34bd2e209fc11e27f81e1359545f28c816787127b41811dc1710fa4e53fcefa","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true},{"one":"e59a74b65709cd9e76d4d531d078a8a3055061eddc4d515affbfc0f99cae22ac","other":"fef27a360408179eafd514dfc71016f3df085bcb2e83bbdeb5fb9e5cd1935696","up":true},{"one":"8934ee6bbfc9c912a5a5fb004eb3df0b65313e22e8ceb8dc3f3e13d10853228f","other":"adfd2641d8e57ade2e6b802cbeb0c0b7336430a67d1d1f3abc5152b4df066b91","up":true},{"one":"bc3e07ee098badd739c4e9b965275f6fbf6331f76b692089604ac44025cf0bcc","other":"c0347196ec87f51f97229140b5d66015cfff2781cc1aff6d3e207c3fa3532732","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"ec085243645c6e5fdbeffb137ccd119053bd655e76b1d9a6b5e0221183764e43","up":true},{"one":"de4f168b7b670c1348d801db70d9a9e7fa44dd729030ba5c05df9623967c40b1","other":"ec3e84f80ab71df09a44c79c8d4af8da68fdf3dd7dbce7451363b8aa16630493","up":true},{"one":"c05d9d9199c1b1bf84af4b8869b36920382f0350d58dd5100700cd0d27f165ab","other":"d16513f30d485d3175321c1a0aa5a525c115ae13c395f7fa3deb1cf4d1ec69bc","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/visualized_snapshot_sync_sim_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/visualized_snapshot_sync_sim_test.go deleted file mode 100644 index cf4405ec..00000000 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/visualized_snapshot_sync_sim_test.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build withserver - -package stream - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -/* -The tests in this file need to be executed with - - -tags=withserver - -Also, they will stall if executed stand-alone, because they wait -for the visualization frontend to send a POST /runsim message. -*/ - -//setup the sim, evaluate nodeCount and chunkCount and create the sim -func setupSim(serviceMap map[string]simulation.ServiceFunc) (int, int, *simulation.Simulation) { - nodeCount := *nodes - chunkCount := *chunks - - if nodeCount == 0 || chunkCount == 0 { - nodeCount = 32 - chunkCount = 1 - } - - //setup the simulation with server, which means the sim won't run - //until it receives a POST /runsim from the frontend - sim := simulation.New(serviceMap).WithServer(":8888") - return nodeCount, chunkCount, sim -} - -//This test requests bogus hashes into the network -func TestNonExistingHashesWithServer(t *testing.T) { - - nodeCount, _, sim := setupSim(retrievalSimServiceMap) - defer sim.Close() - - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - panic(err) - } - - //in order to get some meaningful visualization, it is beneficial - //to define a minimum duration of this test - testDuration := 20 * time.Second - - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil { - if yes, ok := disconnected.Load().(bool); ok && yes { - err = errors.New("disconnect events received") - } - } - }() - - //check on the node's FileStore (netstore) - id := sim.Net.GetRandomUpNode().ID() - item, ok := sim.NodeItem(id, bucketKeyFileStore) - if !ok { - return errors.New("No filestore") - } - fileStore := item.(*storage.FileStore) - //create a bogus hash - fakeHash := storage.GenerateRandomChunk(1000).Address() - //try to retrieve it - will propagate RetrieveRequestMsg into the network - reader, _ := fileStore.Retrieve(context.TODO(), fakeHash) - if _, err := reader.Size(ctx, nil); err != nil { - log.Debug("expected error for non-existing chunk") - } - //sleep so that the frontend can have something to display - time.Sleep(testDuration) - - return nil - }) - if result.Error != nil { - sendSimTerminatedEvent(sim) - t.Fatal(result.Error) - } - - sendSimTerminatedEvent(sim) - -} - -//send a termination event to the frontend -func sendSimTerminatedEvent(sim *simulation.Simulation) { - evt := &simulations.Event{ - Type: EventTypeSimTerminated, - Control: false, - } - sim.Net.Events().Send(evt) -} - -//This test is the same as the snapshot sync test, -//but with a HTTP server -//It also sends some custom events so that the frontend -//can visualize messages like SendOfferedMsg, WantedHashesMsg, DeliveryMsg -func TestSnapshotSyncWithServer(t *testing.T) { - //t.Skip("temporarily disabled as simulations.WaitTillHealthy cannot be trusted") - - //define a wrapper object to be able to pass around data - wrapper := &netWrapper{} - - nodeCount := *nodes - chunkCount := *chunks - - if nodeCount == 0 || chunkCount == 0 { - nodeCount = 32 - chunkCount = 1 - } - - log.Info(fmt.Sprintf("Running the simulation with %d nodes and %d chunks", nodeCount, chunkCount)) - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDeliveryWithRequestFunc(ctx, bucket, dummyRequestFromPeers) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - SyncUpdateDelay: 3 * time.Second, - }, nil) - - tr := &testRegistry{ - Registry: r, - w: wrapper, - } - - bucket.Store(bucketKeyRegistry, tr) - - cleanup = func() { - tr.Close() - clean() - } - - return tr, cleanup, nil - }, - }).WithServer(":8888") //start with the HTTP server - - nodeCount, chunkCount, sim := setupSim(simServiceMap) - defer sim.Close() - - log.Info("Initializing test config") - - conf := &synctestConfig{} - //map of discover ID to indexes of chunks expected at that ID - conf.idToChunksMap = make(map[enode.ID][]int) - //map of overlay address to discover ID - conf.addrToIDMap = make(map[string]enode.ID) - //array where the generated chunk hashes will be stored - conf.hashes = make([]storage.Address, 0) - //pass the network to the wrapper object - wrapper.setNetwork(sim.Net) - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - panic(err) - } - - //run the sim - result := runSim(conf, ctx, sim, chunkCount) - - //send terminated event - evt := &simulations.Event{ - Type: EventTypeSimTerminated, - Control: false, - } - go sim.Net.Events().Send(evt) - - if result.Error != nil { - panic(result.Error) - } - log.Info("Simulation ended") -} - -//testRegistry embeds registry -//it allows to replace the protocol run function -type testRegistry struct { - *Registry - w *netWrapper -} - -//Protocols replaces the protocol's run function -func (tr *testRegistry) Protocols() []p2p.Protocol { - regProto := tr.Registry.Protocols() - //set the `stream` protocol's run function with the testRegistry's one - regProto[0].Run = tr.runProto - return regProto -} - -//runProto is the new overwritten protocol's run function for this test -func (tr *testRegistry) runProto(p *p2p.Peer, rw p2p.MsgReadWriter) error { - //create a custom rw message ReadWriter - testRw := &testMsgReadWriter{ - MsgReadWriter: rw, - Peer: p, - w: tr.w, - Registry: tr.Registry, - } - //now run the actual upper layer `Registry`'s protocol function - return tr.runProtocol(p, testRw) -} - -//testMsgReadWriter is a custom rw -//it will allow us to re-use the message twice -type testMsgReadWriter struct { - *Registry - p2p.MsgReadWriter - *p2p.Peer - w *netWrapper -} - -//netWrapper wrapper object so we can pass data around -type netWrapper struct { - net *simulations.Network -} - -//set the network to the wrapper for later use (used inside the custom rw) -func (w *netWrapper) setNetwork(n *simulations.Network) { - w.net = n -} - -//get he network from the wrapper (used inside the custom rw) -func (w *netWrapper) getNetwork() *simulations.Network { - return w.net -} - -// ReadMsg reads a message from the underlying MsgReadWriter and emits a -// "message received" event -//we do this because we are interested in the Payload of the message for custom use -//in this test, but messages can only be consumed once (stream io.Reader) -func (ev *testMsgReadWriter) ReadMsg() (p2p.Msg, error) { - //read the message from the underlying rw - msg, err := ev.MsgReadWriter.ReadMsg() - if err != nil { - return msg, err - } - - //don't do anything with message codes we actually are not needing/reading - subCodes := []uint64{1, 2, 10} - found := false - for _, c := range subCodes { - if c == msg.Code { - found = true - } - } - //just return if not a msg code we are interested in - if !found { - return msg, nil - } - - //we use a io.TeeReader so that we can read the message twice - //the Payload is a io.Reader, so if we read from it, the actual protocol handler - //cannot access it anymore. - //But we need that handler to be able to consume the message as normal, - //as if we would not do anything here with that message - var buf bytes.Buffer - tee := io.TeeReader(msg.Payload, &buf) - - mcp := &p2p.Msg{ - Code: msg.Code, - Size: msg.Size, - ReceivedAt: msg.ReceivedAt, - Payload: tee, - } - //assign the copy for later use - msg.Payload = &buf - - //now let's look into the message - var wmsg protocols.WrappedMsg - err = mcp.Decode(&wmsg) - if err != nil { - log.Error(err.Error()) - return msg, err - } - //create a new message from the code - val, ok := ev.Registry.GetSpec().NewMsg(mcp.Code) - if !ok { - return msg, errors.New(fmt.Sprintf("Invalid message code: %v", msg.Code)) - } - //decode it - if err := rlp.DecodeBytes(wmsg.Payload, val); err != nil { - return msg, errors.New(fmt.Sprintf("Decoding error <= %v: %v", msg, err)) - } - //now for every message type we are interested in, create a custom event and send it - var evt *simulations.Event - switch val := val.(type) { - case *OfferedHashesMsg: - evt = &simulations.Event{ - Type: EventTypeChunkOffered, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - Data: val.Hashes, - } - case *WantedHashesMsg: - evt = &simulations.Event{ - Type: EventTypeChunkWanted, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - } - case *ChunkDeliveryMsgSyncing: - evt = &simulations.Event{ - Type: EventTypeChunkDelivered, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - Data: val.Addr.String(), - } - } - if evt != nil { - //send custom event to feed; frontend will listen to it and display - ev.w.getNetwork().Events().Send(evt) - } - return msg, nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/network_test.go index 71d4b8f1..97bdd07b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/network_test.go @@ -28,6 +28,8 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/swarm/testutil" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" @@ -36,7 +38,7 @@ import ( "github.com/ethereum/go-ethereum/swarm/api" "github.com/ethereum/go-ethereum/swarm/network/simulation" "github.com/ethereum/go-ethereum/swarm/storage" - colorable "github.com/mattn/go-colorable" + "github.com/mattn/go-colorable" ) var ( @@ -57,12 +59,7 @@ func init() { // static and dynamic Swarm nodes in network simulation, by // uploading files to every node and retrieving them. func TestSwarmNetwork(t *testing.T) { - for _, tc := range []struct { - name string - steps []testSwarmNetworkStep - options *testSwarmNetworkOptions - disabled bool - }{ + var tests = []testSwarmNetworkCase{ { name: "10_nodes", steps: []testSwarmNetworkStep{ @@ -86,6 +83,61 @@ func TestSwarmNetwork(t *testing.T) { SkipCheck: true, }, }, + { + name: "dec_inc_node_count", + steps: []testSwarmNetworkStep{ + { + nodeCount: 3, + }, + { + nodeCount: 1, + }, + { + nodeCount: 5, + }, + }, + options: &testSwarmNetworkOptions{ + Timeout: 90 * time.Second, + }, + }, + } + + if *longrunning { + tests = append(tests, longRunningCases()...) + } else if testutil.RaceEnabled { + tests = shortCaseForRace() + + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + testSwarmNetwork(t, tc.options, tc.steps...) + }) + } +} + +type testSwarmNetworkCase struct { + name string + steps []testSwarmNetworkStep + options *testSwarmNetworkOptions +} + +// testSwarmNetworkStep is the configuration +// for the state of the simulation network. +type testSwarmNetworkStep struct { + // number of swarm nodes that must be in the Up state + nodeCount int +} + +// testSwarmNetworkOptions contains optional parameters for running +// testSwarmNetwork. +type testSwarmNetworkOptions struct { + Timeout time.Duration + SkipCheck bool +} + +func longRunningCases() []testSwarmNetworkCase { + return []testSwarmNetworkCase{ { name: "50_nodes", steps: []testSwarmNetworkStep{ @@ -96,7 +148,6 @@ func TestSwarmNetwork(t *testing.T) { options: &testSwarmNetworkOptions{ Timeout: 3 * time.Minute, }, - disabled: !*longrunning, }, { name: "50_nodes_skip_check", @@ -109,7 +160,6 @@ func TestSwarmNetwork(t *testing.T) { Timeout: 3 * time.Minute, SkipCheck: true, }, - disabled: !*longrunning, }, { name: "inc_node_count", @@ -127,7 +177,6 @@ func TestSwarmNetwork(t *testing.T) { options: &testSwarmNetworkOptions{ Timeout: 90 * time.Second, }, - disabled: !*longrunning, }, { name: "dec_node_count", @@ -145,24 +194,6 @@ func TestSwarmNetwork(t *testing.T) { options: &testSwarmNetworkOptions{ Timeout: 90 * time.Second, }, - disabled: !*longrunning, - }, - { - name: "dec_inc_node_count", - steps: []testSwarmNetworkStep{ - { - nodeCount: 3, - }, - { - nodeCount: 1, - }, - { - nodeCount: 5, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 90 * time.Second, - }, }, { name: "inc_dec_node_count", @@ -186,7 +217,6 @@ func TestSwarmNetwork(t *testing.T) { options: &testSwarmNetworkOptions{ Timeout: 5 * time.Minute, }, - disabled: !*longrunning, }, { name: "inc_dec_node_count_skip_check", @@ -211,23 +241,25 @@ func TestSwarmNetwork(t *testing.T) { Timeout: 5 * time.Minute, SkipCheck: true, }, - disabled: !*longrunning, }, - } { - if tc.disabled { - continue - } - t.Run(tc.name, func(t *testing.T) { - testSwarmNetwork(t, tc.options, tc.steps...) - }) } } -// testSwarmNetworkStep is the configuration -// for the state of the simulation network. -type testSwarmNetworkStep struct { - // number of swarm nodes that must be in the Up state - nodeCount int +func shortCaseForRace() []testSwarmNetworkCase { + // As for now, Travis with -race can only run 8 nodes + return []testSwarmNetworkCase{ + { + name: "8_nodes", + steps: []testSwarmNetworkStep{ + { + nodeCount: 8, + }, + }, + options: &testSwarmNetworkOptions{ + Timeout: 1 * time.Minute, + }, + }, + } } // file represents the file uploaded on a particular node. @@ -244,13 +276,6 @@ type check struct { nodeID enode.ID } -// testSwarmNetworkOptions contains optional parameters for running -// testSwarmNetwork. -type testSwarmNetworkOptions struct { - Timeout time.Duration - SkipCheck bool -} - // testSwarmNetwork is a helper function used for testing different // static and dynamic Swarm network simulations. // It is responsible for: @@ -259,6 +284,7 @@ type testSwarmNetworkOptions struct { // - May wait for Kademlia on every node to be healthy. // - Checking if a file is retrievable from all nodes. func testSwarmNetwork(t *testing.T, o *testSwarmNetworkOptions, steps ...testSwarmNetworkStep) { + t.Helper() if o == nil { o = new(testSwarmNetworkOptions) @@ -285,8 +311,12 @@ func testSwarmNetwork(t *testing.T, o *testSwarmNetworkOptions, steps ...testSwa if err != nil { return nil, cleanup, err } + nodekey, err := crypto.GenerateKey() + if err != nil { + return nil, cleanup, err + } - config.Init(privkey) + config.Init(privkey, nodekey) config.DeliverySkipCheck = o.SkipCheck config.Port = "" diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/client/client_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/client/client_test.go index 1c6f2e52..1bd340cf 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/client/client_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/client/client_test.go @@ -23,7 +23,6 @@ import ( "fmt" "math/rand" "os" - "sync" "testing" "time" @@ -286,18 +285,3 @@ func newServices() adapters.Services { }, } } - -// copied from swarm/network/protocol_test_go -type testStore struct { - sync.Mutex - - values map[string][]byte -} - -func (t *testStore) Load(key string) ([]byte, error) { - return nil, nil -} - -func (t *testStore) Save(key string, v []byte) error { - return nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake.go index bb67b515..ec3bffa3 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake.go @@ -106,6 +106,7 @@ func NewHandshakeParams() *HandshakeParams { type HandshakeController struct { pss *Pss keyC map[string]chan []string // adds a channel to report when a handshake succeeds + keyCMu sync.Mutex // protects keyC map lock sync.Mutex symKeyRequestTimeout time.Duration symKeyExpiryTimeout time.Duration @@ -165,9 +166,9 @@ func (ctl *HandshakeController) validKeys(pubkeyid string, topic *Topic, in bool for _, key := range *keystore { if key.limit <= key.count { - ctl.releaseKey(*key.symKeyID, topic) + ctl.releaseKeyNoLock(*key.symKeyID, topic) } else if !key.expiredAt.IsZero() && key.expiredAt.Before(now) { - ctl.releaseKey(*key.symKeyID, topic) + ctl.releaseKeyNoLock(*key.symKeyID, topic) } else { validkeys = append(validkeys, key.symKeyID) } @@ -205,15 +206,23 @@ func (ctl *HandshakeController) updateKeys(pubkeyid string, topic *Topic, in boo limit: limit, } *keystore = append(*keystore, storekey) + ctl.pss.mx.Lock() ctl.pss.symKeyPool[*storekey.symKeyID][*topic].protected = true + ctl.pss.mx.Unlock() } for i := 0; i < len(*keystore); i++ { ctl.symKeyIndex[*(*keystore)[i].symKeyID] = &((*keystore)[i]) } } -// Expire a symmetric key, making it elegible for garbage collection func (ctl *HandshakeController) releaseKey(symkeyid string, topic *Topic) bool { + ctl.lock.Lock() + defer ctl.lock.Unlock() + return ctl.releaseKeyNoLock(symkeyid, topic) +} + +// Expire a symmetric key, making it eligible for garbage collection +func (ctl *HandshakeController) releaseKeyNoLock(symkeyid string, topic *Topic) bool { if ctl.symKeyIndex[symkeyid] == nil { log.Debug("no symkey", "symkeyid", symkeyid) return false @@ -276,30 +285,49 @@ func (ctl *HandshakeController) clean() { } } +func (ctl *HandshakeController) getSymKey(symkeyid string) *handshakeKey { + ctl.lock.Lock() + defer ctl.lock.Unlock() + return ctl.symKeyIndex[symkeyid] +} + // Passed as a PssMsg handler for the topic handshake is activated on // Handles incoming key exchange messages and -// ccunts message usage by symmetric key (expiry limit control) +// counts message usage by symmetric key (expiry limit control) // Only returns error if key handler fails func (ctl *HandshakeController) handler(msg []byte, p *p2p.Peer, asymmetric bool, symkeyid string) error { - if !asymmetric { - if ctl.symKeyIndex[symkeyid] != nil { - if ctl.symKeyIndex[symkeyid].count >= ctl.symKeyIndex[symkeyid].limit { - return fmt.Errorf("discarding message using expired key: %s", symkeyid) + if asymmetric { + keymsg := &handshakeMsg{} + err := rlp.DecodeBytes(msg, keymsg) + if err == nil { + err := ctl.handleKeys(symkeyid, keymsg) + if err != nil { + log.Error("handlekeys fail", "error", err) } - ctl.symKeyIndex[symkeyid].count++ - log.Trace("increment symkey recv use", "symsymkeyid", symkeyid, "count", ctl.symKeyIndex[symkeyid].count, "limit", ctl.symKeyIndex[symkeyid].limit, "receiver", common.ToHex(crypto.FromECDSAPub(ctl.pss.PublicKey()))) + return err } return nil } - keymsg := &handshakeMsg{} - err := rlp.DecodeBytes(msg, keymsg) - if err == nil { - err := ctl.handleKeys(symkeyid, keymsg) - if err != nil { - log.Error("handlekeys fail", "error", err) - } - return err + return ctl.registerSymKeyUse(symkeyid) +} + +func (ctl *HandshakeController) registerSymKeyUse(symkeyid string) error { + ctl.lock.Lock() + defer ctl.lock.Unlock() + + symKey, ok := ctl.symKeyIndex[symkeyid] + if !ok { + return nil } + + if symKey.count >= symKey.limit { + return fmt.Errorf("symetric key expired (id: %s)", symkeyid) + } + symKey.count++ + + receiver := common.ToHex(crypto.FromECDSAPub(ctl.pss.PublicKey())) + log.Trace("increment symkey recv use", "symsymkeyid", symkeyid, "count", symKey.count, "limit", symKey.limit, "receiver", receiver) + return nil } @@ -417,6 +445,8 @@ func (ctl *HandshakeController) sendKey(pubkeyid string, topic *Topic, keycount // Enables callback for keys received from a key exchange request func (ctl *HandshakeController) alertHandshake(pubkeyid string, symkeys []string) chan []string { + ctl.keyCMu.Lock() + defer ctl.keyCMu.Unlock() if len(symkeys) > 0 { if _, ok := ctl.keyC[pubkeyid]; ok { ctl.keyC[pubkeyid] <- symkeys @@ -519,7 +549,7 @@ func (api *HandshakeAPI) GetHandshakeKeys(pubkeyid string, topic Topic, in bool, // Returns the amount of messages the specified symmetric key // is still valid for under the handshake scheme func (api *HandshakeAPI) GetHandshakeKeyCapacity(symkeyid string) (uint16, error) { - storekey := api.ctrl.symKeyIndex[symkeyid] + storekey := api.ctrl.getSymKey(symkeyid) if storekey == nil { return 0, fmt.Errorf("invalid symkey id %s", symkeyid) } @@ -529,7 +559,7 @@ func (api *HandshakeAPI) GetHandshakeKeyCapacity(symkeyid string) (uint16, error // Returns the byte representation of the public key in ascii hex // associated with the given symmetric key func (api *HandshakeAPI) GetHandshakePublicKey(symkeyid string) (string, error) { - storekey := api.ctrl.symKeyIndex[symkeyid] + storekey := api.ctrl.getSymKey(symkeyid) if storekey == nil { return "", fmt.Errorf("invalid symkey id %s", symkeyid) } @@ -555,12 +585,8 @@ func (api *HandshakeAPI) ReleaseHandshakeKey(pubkeyid string, topic Topic, symke // for message expiry control func (api *HandshakeAPI) SendSym(symkeyid string, topic Topic, msg hexutil.Bytes) (err error) { err = api.ctrl.pss.SendSym(symkeyid, topic, msg[:]) - if api.ctrl.symKeyIndex[symkeyid] != nil { - if api.ctrl.symKeyIndex[symkeyid].count >= api.ctrl.symKeyIndex[symkeyid].limit { - return errors.New("attempted send with expired key") - } - api.ctrl.symKeyIndex[symkeyid].count++ - log.Trace("increment symkey send use", "symkeyid", symkeyid, "count", api.ctrl.symKeyIndex[symkeyid].count, "limit", api.ctrl.symKeyIndex[symkeyid].limit, "receiver", common.ToHex(crypto.FromECDSAPub(api.ctrl.pss.PublicKey()))) + if otherErr := api.ctrl.registerSymKeyUse(symkeyid); otherErr != nil { + return otherErr } return err } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake_test.go index 895163f3..f4effc02 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/handshake_test.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build foo - package pss import ( @@ -30,7 +28,6 @@ import ( // asymmetrical key exchange between two directly connected peers // full address, partial address (8 bytes) and empty address func TestHandshake(t *testing.T) { - t.Skip("handshakes are not adapted to current pss core code") t.Run("32", testHandshake) t.Run("8", testHandshake) t.Run("0", testHandshake) @@ -47,7 +44,7 @@ func testHandshake(t *testing.T) { // set up two nodes directly connected // (we are not testing pss routing here) - clients, err := setupNetwork(2) + clients, err := setupNetwork(2, true) if err != nil { t.Fatal(err) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/keystore.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/keystore.go index 510d21bc..5c44cb24 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/keystore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/keystore.go @@ -210,6 +210,8 @@ func (ks *Pss) processAsym(envelope *whisper.Envelope) (*whisper.ReceivedMessage // - it is not marked as protected // - it is not in the incoming decryption cache func (ks *Pss) cleanKeys() (count int) { + ks.mx.Lock() + defer ks.mx.Unlock() for keyid, peertopics := range ks.symKeyPool { var expiredtopics []Topic for topic, psp := range peertopics { @@ -229,10 +231,8 @@ func (ks *Pss) cleanKeys() (count int) { } } for _, topic := range expiredtopics { - ks.mx.Lock() delete(ks.symKeyPool[keyid], topic) log.Trace("symkey cleanup deletion", "symkeyid", keyid, "topic", topic, "val", ks.symKeyPool[keyid]) - ks.mx.Unlock() count++ } } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/notify/notify_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/notify/notify_test.go index bd9b2a4c..cda069b9 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/notify/notify_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/notify/notify_test.go @@ -51,6 +51,7 @@ func TestStart(t *testing.T) { ID: "0", DefaultService: "bzz", }) + defer net.Shutdown() leftNodeConf := adapters.RandomNodeConfig() leftNodeConf.Services = []string{"bzz", "pss"} leftNode, err := net.NewNodeWithConfig(leftNodeConf) @@ -128,7 +129,7 @@ func TestStart(t *testing.T) { defer rightSub.Unsubscribe() updateC := make(chan []byte) - updateMsg := []byte{} + var updateMsg []byte ctrlClient := NewController(psses[rightPub]) ctrlNotifier := NewController(psses[leftPub]) ctrlNotifier.NewNotifier("foo.eth", 2, updateC) @@ -145,17 +146,24 @@ func TestStart(t *testing.T) { if err != nil { t.Fatal(err) } + + copyOfUpdateMsg := make([]byte, len(updateMsg)) + copy(copyOfUpdateMsg, updateMsg) + ctrlClientError := make(chan error, 1) ctrlClient.Subscribe(rsrcName, pubkey, addrbytes, func(s string, b []byte) error { - if s != "foo.eth" || !bytes.Equal(updateMsg, b) { - t.Fatalf("unexpected result in client handler: '%s':'%x'", s, b) + if s != "foo.eth" || !bytes.Equal(copyOfUpdateMsg, b) { + ctrlClientError <- fmt.Errorf("unexpected result in client handler: '%s':'%x'", s, b) + } else { + log.Info("client handler receive", "s", s, "b", b) } - log.Info("client handler receive", "s", s, "b", b) return nil }) var inMsg *pss.APIMsg select { case inMsg = <-rmsgC: + case err := <-ctrlClientError: + t.Fatal(err) case <-ctx.Done(): t.Fatal(ctx.Err()) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/prox_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/prox_test.go new file mode 100644 index 00000000..bc32e612 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/prox_test.go @@ -0,0 +1,473 @@ +package pss + +import ( + "context" + "crypto/ecdsa" + "encoding/binary" + "errors" + "fmt" + "strconv" + "strings" + "sync" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/swarm/network" + "github.com/ethereum/go-ethereum/swarm/network/simulation" + "github.com/ethereum/go-ethereum/swarm/pot" + "github.com/ethereum/go-ethereum/swarm/state" +) + +// needed to make the enode id of the receiving node available to the handler for triggers +type handlerContextFunc func(*testData, *adapters.NodeConfig) *handler + +// struct to notify reception of messages to simulation driver +// TODO To make code cleaner: +// - consider a separate pss unwrap to message event in sim framework (this will make eventual message propagation analysis with pss easier/possible in the future) +// - consider also test api calls to inspect handling results of messages +type handlerNotification struct { + id enode.ID + serial uint64 +} + +type testData struct { + mu sync.Mutex + sim *simulation.Simulation + handlerDone bool // set to true on termination of the simulation run + requiredMessages int + allowedMessages int + messageCount int + kademlias map[enode.ID]*network.Kademlia + nodeAddrs map[enode.ID][]byte // make predictable overlay addresses from the generated random enode ids + recipients map[int][]enode.ID // for logging output only + allowed map[int][]enode.ID // allowed recipients + expectedMsgs map[enode.ID][]uint64 // message serials we expect respective nodes to receive + allowedMsgs map[enode.ID][]uint64 // message serials we expect respective nodes to receive + senders map[int]enode.ID // originating nodes of the messages (intention is to choose as far as possible from the receiving neighborhood) + handlerC chan handlerNotification // passes message from pss message handler to simulation driver + doneC chan struct{} // terminates the handler channel listener + errC chan error // error to pass to main sim thread + msgC chan handlerNotification // message receipt notification to main sim thread + msgs [][]byte // recipient addresses of messages +} + +var ( + pof = pot.DefaultPof(256) // generate messages and index them + topic = BytesToTopic([]byte{0xf3, 0x9e, 0x06, 0x82}) +) + +func (d *testData) getMsgCount() int { + d.mu.Lock() + defer d.mu.Unlock() + return d.messageCount +} + +func (d *testData) incrementMsgCount() int { + d.mu.Lock() + defer d.mu.Unlock() + d.messageCount++ + return d.messageCount +} + +func (d *testData) isDone() bool { + d.mu.Lock() + defer d.mu.Unlock() + return d.handlerDone +} + +func (d *testData) setDone() { + d.mu.Lock() + defer d.mu.Unlock() + d.handlerDone = true +} + +func getCmdParams(t *testing.T) (int, int, time.Duration) { + args := strings.Split(t.Name(), "/") + msgCount, err := strconv.ParseInt(args[2], 10, 16) + if err != nil { + t.Fatal(err) + } + nodeCount, err := strconv.ParseInt(args[1], 10, 16) + if err != nil { + t.Fatal(err) + } + timeoutStr := fmt.Sprintf("%ss", args[3]) + timeoutDur, err := time.ParseDuration(timeoutStr) + if err != nil { + t.Fatal(err) + } + return int(msgCount), int(nodeCount), timeoutDur +} + +func newTestData() *testData { + return &testData{ + kademlias: make(map[enode.ID]*network.Kademlia), + nodeAddrs: make(map[enode.ID][]byte), + recipients: make(map[int][]enode.ID), + allowed: make(map[int][]enode.ID), + expectedMsgs: make(map[enode.ID][]uint64), + allowedMsgs: make(map[enode.ID][]uint64), + senders: make(map[int]enode.ID), + handlerC: make(chan handlerNotification), + doneC: make(chan struct{}), + errC: make(chan error), + msgC: make(chan handlerNotification), + } +} + +func (d *testData) getKademlia(nodeId *enode.ID) (*network.Kademlia, error) { + kadif, ok := d.sim.NodeItem(*nodeId, simulation.BucketKeyKademlia) + if !ok { + return nil, fmt.Errorf("no kademlia entry for %v", nodeId) + } + kad, ok := kadif.(*network.Kademlia) + if !ok { + return nil, fmt.Errorf("invalid kademlia entry for %v", nodeId) + } + return kad, nil +} + +func (d *testData) init(msgCount int) error { + log.Debug("TestProxNetwork start") + + for _, nodeId := range d.sim.NodeIDs() { + kad, err := d.getKademlia(&nodeId) + if err != nil { + return err + } + d.nodeAddrs[nodeId] = kad.BaseAddr() + } + + for i := 0; i < int(msgCount); i++ { + msgAddr := pot.RandomAddress() // we choose message addresses randomly + d.msgs = append(d.msgs, msgAddr.Bytes()) + smallestPo := 256 + var targets []enode.ID + var closestPO int + + // loop through all nodes and find the required and allowed recipients of each message + // (for more information, please see the comment to the main test function) + for _, nod := range d.sim.Net.GetNodes() { + po, _ := pof(d.msgs[i], d.nodeAddrs[nod.ID()], 0) + depth := d.kademlias[nod.ID()].NeighbourhoodDepth() + + // only nodes with closest IDs (wrt the msg address) will be required recipients + if po > closestPO { + closestPO = po + targets = nil + targets = append(targets, nod.ID()) + } else if po == closestPO { + targets = append(targets, nod.ID()) + } + + if po >= depth { + d.allowedMessages++ + d.allowed[i] = append(d.allowed[i], nod.ID()) + d.allowedMsgs[nod.ID()] = append(d.allowedMsgs[nod.ID()], uint64(i)) + } + + // a node with the smallest PO (wrt msg) will be the sender, + // in order to increase the distance the msg must travel + if po < smallestPo { + smallestPo = po + d.senders[i] = nod.ID() + } + } + + d.requiredMessages += len(targets) + for _, id := range targets { + d.recipients[i] = append(d.recipients[i], id) + d.expectedMsgs[id] = append(d.expectedMsgs[id], uint64(i)) + } + + log.Debug("nn for msg", "targets", len(d.recipients[i]), "msgidx", i, "msg", common.Bytes2Hex(msgAddr[:8]), "sender", d.senders[i], "senderpo", smallestPo) + } + log.Debug("msgs to receive", "count", d.requiredMessages) + return nil +} + +// Here we test specific functionality of the pss, setting the prox property of +// the handler. The tests generate a number of messages with random addresses. +// Then, for each message it calculates which nodes have the msg address +// within its nearest neighborhood depth, and stores those nodes as possible +// recipients. Those nodes that are the closest to the message address (nodes +// belonging to the deepest PO wrt the msg address) are stored as required +// recipients. The difference between allowed and required recipients results +// from the fact that the nearest neighbours are not necessarily reciprocal. +// Upon sending the messages, the test verifies that the respective message is +// passed to the message handlers of these required recipients. The test fails +// if a message is handled by recipient which is not listed among the allowed +// recipients of this particular message. It also fails after timeout, if not +// all the required recipients have received their respective messages. +// +// For example, if proximity order of certain msg address is 4, and node X +// has PO=5 wrt the message address, and nodes Y and Z have PO=6, then: +// nodes Y and Z will be considered required recipients of the msg, +// whereas nodes X, Y and Z will be allowed recipients. +func TestProxNetwork(t *testing.T) { + t.Run("16/16/15", testProxNetwork) +} + +// params in run name: nodes/msgs +func TestProxNetworkLong(t *testing.T) { + if !*longrunning { + t.Skip("run with --longrunning flag to run extensive network tests") + } + t.Run("8/100/30", testProxNetwork) + t.Run("16/100/30", testProxNetwork) + t.Run("32/100/60", testProxNetwork) + t.Run("64/100/60", testProxNetwork) + t.Run("128/100/120", testProxNetwork) +} + +func testProxNetwork(t *testing.T) { + tstdata := newTestData() + msgCount, nodeCount, timeout := getCmdParams(t) + handlerContextFuncs := make(map[Topic]handlerContextFunc) + handlerContextFuncs[topic] = nodeMsgHandler + services := newProxServices(tstdata, true, handlerContextFuncs, tstdata.kademlias) + tstdata.sim = simulation.New(services) + defer tstdata.sim.Close() + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + filename := fmt.Sprintf("testdata/snapshot_%d.json", nodeCount) + err := tstdata.sim.UploadSnapshot(ctx, filename) + if err != nil { + t.Fatal(err) + } + err = tstdata.init(msgCount) // initialize the test data + if err != nil { + t.Fatal(err) + } + wrapper := func(c context.Context, _ *simulation.Simulation) error { + return testRoutine(tstdata, c) + } + result := tstdata.sim.Run(ctx, wrapper) // call the main test function + if result.Error != nil { + // context deadline exceeded + // however, it might just mean that not all possible messages are received + // now we must check if all required messages are received + cnt := tstdata.getMsgCount() + log.Debug("TestProxNetwork finished", "rcv", cnt) + if cnt < tstdata.requiredMessages { + t.Fatal(result.Error) + } + } + t.Logf("completed %d", result.Duration) +} + +func (tstdata *testData) sendAllMsgs() { + for i, msg := range tstdata.msgs { + log.Debug("sending msg", "idx", i, "from", tstdata.senders[i]) + nodeClient, err := tstdata.sim.Net.GetNode(tstdata.senders[i]).Client() + if err != nil { + tstdata.errC <- err + } + var uvarByte [8]byte + binary.PutUvarint(uvarByte[:], uint64(i)) + nodeClient.Call(nil, "pss_sendRaw", hexutil.Encode(msg), hexutil.Encode(topic[:]), hexutil.Encode(uvarByte[:])) + } + log.Debug("all messages sent") +} + +// testRoutine is the main test function, called by Simulation.Run() +func testRoutine(tstdata *testData, ctx context.Context) error { + go handlerChannelListener(tstdata, ctx) + go tstdata.sendAllMsgs() + received := 0 + + // collect incoming messages and terminate with corresponding status when message handler listener ends + for { + select { + case err := <-tstdata.errC: + return err + case hn := <-tstdata.msgC: + received++ + log.Debug("msg received", "msgs_received", received, "total_expected", tstdata.requiredMessages, "id", hn.id, "serial", hn.serial) + if received == tstdata.allowedMessages { + close(tstdata.doneC) + return nil + } + } + } + return nil +} + +func handlerChannelListener(tstdata *testData, ctx context.Context) { + for { + select { + case <-tstdata.doneC: // graceful exit + tstdata.setDone() + tstdata.errC <- nil + return + + case <-ctx.Done(): // timeout or cancel + tstdata.setDone() + tstdata.errC <- ctx.Err() + return + + // incoming message from pss message handler + case handlerNotification := <-tstdata.handlerC: + // check if recipient has already received all its messages and notify to fail the test if so + aMsgs := tstdata.allowedMsgs[handlerNotification.id] + if len(aMsgs) == 0 { + tstdata.setDone() + tstdata.errC <- fmt.Errorf("too many messages received by recipient %x", handlerNotification.id) + return + } + + // check if message serial is in expected messages for this recipient and notify to fail the test if not + idx := -1 + for i, msg := range aMsgs { + if handlerNotification.serial == msg { + idx = i + break + } + } + if idx == -1 { + tstdata.setDone() + tstdata.errC <- fmt.Errorf("message %d received by wrong recipient %v", handlerNotification.serial, handlerNotification.id) + return + } + + // message is ok, so remove that message serial from the recipient expectation array and notify the main sim thread + aMsgs[idx] = aMsgs[len(aMsgs)-1] + aMsgs = aMsgs[:len(aMsgs)-1] + tstdata.msgC <- handlerNotification + } + } +} + +func nodeMsgHandler(tstdata *testData, config *adapters.NodeConfig) *handler { + return &handler{ + f: func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { + cnt := tstdata.incrementMsgCount() + log.Debug("nodeMsgHandler rcv", "cnt", cnt) + + // using simple serial in message body, makes it easy to keep track of who's getting what + serial, c := binary.Uvarint(msg) + if c <= 0 { + log.Crit(fmt.Sprintf("corrupt message received by %x (uvarint parse returned %d)", config.ID, c)) + } + + if tstdata.isDone() { + return errors.New("handlers aborted") // terminate if simulation is over + } + + // pass message context to the listener in the simulation + tstdata.handlerC <- handlerNotification{ + id: config.ID, + serial: serial, + } + return nil + }, + caps: &handlerCaps{ + raw: true, // we use raw messages for simplicity + prox: true, + }, + } +} + +// an adaptation of the same services setup as in pss_test.go +// replaces pss_test.go when those tests are rewritten to the new swarm/network/simulation package +func newProxServices(tstdata *testData, allowRaw bool, handlerContextFuncs map[Topic]handlerContextFunc, kademlias map[enode.ID]*network.Kademlia) map[string]simulation.ServiceFunc { + stateStore := state.NewInmemoryStore() + kademlia := func(id enode.ID, bzzkey []byte) *network.Kademlia { + if k, ok := kademlias[id]; ok { + return k + } + params := network.NewKadParams() + params.MaxBinSize = 3 + params.MinBinSize = 1 + params.MaxRetries = 1000 + params.RetryExponent = 2 + params.RetryInterval = 1000000 + kademlias[id] = network.NewKademlia(bzzkey, params) + return kademlias[id] + } + return map[string]simulation.ServiceFunc{ + "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { + var err error + var bzzPrivateKey *ecdsa.PrivateKey + // normally translation of enode id to swarm address is concealed by the network package + // however, we need to keep track of it in the test driver as well. + // if the translation in the network package changes, that can cause these tests to unpredictably fail + // therefore we keep a local copy of the translation here + addr := network.NewAddr(ctx.Config.Node()) + bzzPrivateKey, err = simulation.BzzPrivateKeyFromConfig(ctx.Config) + if err != nil { + return nil, nil, err + } + addr.OAddr = network.PrivateKeyToBzzKey(bzzPrivateKey) + b.Store(simulation.BucketKeyBzzPrivateKey, bzzPrivateKey) + hp := network.NewHiveParams() + hp.Discovery = false + config := &network.BzzConfig{ + OverlayAddr: addr.Over(), + UnderlayAddr: addr.Under(), + HiveParams: hp, + } + return network.NewBzz(config, kademlia(ctx.Config.ID, addr.OAddr), stateStore, nil, nil), nil, nil + }, + "pss": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { + // execadapter does not exec init() + initTest() + + // create keys in whisper and set up the pss object + ctxlocal, cancel := context.WithTimeout(context.Background(), time.Second*3) + defer cancel() + keys, err := wapi.NewKeyPair(ctxlocal) + privkey, err := w.GetPrivateKey(keys) + pssp := NewPssParams().WithPrivateKey(privkey) + pssp.AllowRaw = allowRaw + bzzPrivateKey, err := simulation.BzzPrivateKeyFromConfig(ctx.Config) + if err != nil { + return nil, nil, err + } + bzzKey := network.PrivateKeyToBzzKey(bzzPrivateKey) + pskad := kademlia(ctx.Config.ID, bzzKey) + ps, err := NewPss(pskad, pssp) + if err != nil { + return nil, nil, err + } + + // register the handlers we've been passed + var deregisters []func() + for tpc, hndlrFunc := range handlerContextFuncs { + deregisters = append(deregisters, ps.Register(&tpc, hndlrFunc(tstdata, ctx.Config))) + } + + // if handshake mode is set, add the controller + // TODO: This should be hooked to the handshake test file + if useHandshake { + SetHandshakeController(ps, NewHandshakeParams()) + } + + // we expose some api calls for cheating + ps.addAPI(rpc.API{ + Namespace: "psstest", + Version: "0.3", + Service: NewAPITest(ps), + Public: false, + }) + + b.Store(simulation.BucketKeyKademlia, pskad) + + // return Pss and cleanups + return ps, func() { + // run the handler deregister functions in reverse order + for i := len(deregisters); i > 0; i-- { + deregisters[i-1]() + } + }, nil + }, + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss.go index 183aab04..0d02c9b8 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss.go @@ -130,10 +130,11 @@ type Pss struct { outbox chan *PssMsg // message handling - handlers map[Topic]map[*handler]bool // topic and version based pss payload handlers. See pss.Handle() - handlersMu sync.RWMutex - hashPool sync.Pool - topicHandlerCaps map[Topic]*handlerCaps // caches capabilities of each topic's handlers (see handlerCap* consts in types.go) + handlers map[Topic]map[*handler]bool // topic and version based pss payload handlers. See pss.Handle() + handlersMu sync.RWMutex + hashPool sync.Pool + topicHandlerCaps map[Topic]*handlerCaps // caches capabilities of each topic's handlers + topicHandlerCapsMu sync.RWMutex // process quitC chan struct{} @@ -295,6 +296,19 @@ func (p *Pss) PublicKey() *ecdsa.PublicKey { // SECTION: Message handling ///////////////////////////////////////////////////////////////////// +func (p *Pss) getTopicHandlerCaps(topic Topic) (hc *handlerCaps, found bool) { + p.topicHandlerCapsMu.RLock() + defer p.topicHandlerCapsMu.RUnlock() + hc, found = p.topicHandlerCaps[topic] + return +} + +func (p *Pss) setTopicHandlerCaps(topic Topic, hc *handlerCaps) { + p.topicHandlerCapsMu.Lock() + defer p.topicHandlerCapsMu.Unlock() + p.topicHandlerCaps[topic] = hc +} + // Links a handler function to a Topic // // All incoming messages with an envelope Topic matching the @@ -311,23 +325,28 @@ func (p *Pss) Register(topic *Topic, hndlr *handler) func() { if handlers == nil { handlers = make(map[*handler]bool) p.handlers[*topic] = handlers - log.Debug("registered handler", "caps", hndlr.caps) + log.Debug("registered handler", "capabilities", hndlr.caps) } if hndlr.caps == nil { hndlr.caps = &handlerCaps{} } handlers[hndlr] = true - if _, ok := p.topicHandlerCaps[*topic]; !ok { - p.topicHandlerCaps[*topic] = &handlerCaps{} + + capabilities, ok := p.getTopicHandlerCaps(*topic) + if !ok { + capabilities = &handlerCaps{} + p.setTopicHandlerCaps(*topic, capabilities) } + if hndlr.caps.raw { - p.topicHandlerCaps[*topic].raw = true + capabilities.raw = true } if hndlr.caps.prox { - p.topicHandlerCaps[*topic].prox = true + capabilities.prox = true } return func() { p.deregister(topic, hndlr) } } + func (p *Pss) deregister(topic *Topic, hndlr *handler) { p.handlersMu.Lock() defer p.handlersMu.Unlock() @@ -344,19 +363,12 @@ func (p *Pss) deregister(topic *Topic, hndlr *handler) { caps.prox = true } } - p.topicHandlerCaps[*topic] = caps + p.setTopicHandlerCaps(*topic, caps) return } delete(handlers, hndlr) } -// get all registered handlers for respective topics -func (p *Pss) getHandlers(topic Topic) map[*handler]bool { - p.handlersMu.RLock() - defer p.handlersMu.RUnlock() - return p.handlers[topic] -} - // Filters incoming messages for processing or forwarding. // Check if address partially matches // If yes, it CAN be for us, and we process it @@ -384,8 +396,8 @@ func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error { // raw is simplest handler contingency to check, so check that first var isRaw bool if pssmsg.isRaw() { - if _, ok := p.topicHandlerCaps[psstopic]; ok { - if !p.topicHandlerCaps[psstopic].raw { + if capabilities, ok := p.getTopicHandlerCaps(psstopic); ok { + if !capabilities.raw { log.Debug("No handler for raw message", "topic", psstopic) return nil } @@ -398,16 +410,16 @@ func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error { // - prox handler on message and we are in prox regardless of partial address match // store this result so we don't calculate again on every handler var isProx bool - if _, ok := p.topicHandlerCaps[psstopic]; ok { - isProx = p.topicHandlerCaps[psstopic].prox + if capabilities, ok := p.getTopicHandlerCaps(psstopic); ok { + isProx = capabilities.prox } isRecipient := p.isSelfPossibleRecipient(pssmsg, isProx) if !isRecipient { - log.Trace("pss was for someone else :'( ... forwarding", "pss", common.ToHex(p.BaseAddr()), "prox", isProx) + log.Trace("pss msg forwarding ===>", "pss", common.ToHex(p.BaseAddr()), "prox", isProx) return p.enqueue(pssmsg) } - log.Trace("pss for us, yay! ... let's process!", "pss", common.ToHex(p.BaseAddr()), "prox", isProx, "raw", isRaw, "topic", label(pssmsg.Payload.Topic[:])) + log.Trace("pss msg processing <===", "pss", common.ToHex(p.BaseAddr()), "prox", isProx, "raw", isRaw, "topic", label(pssmsg.Payload.Topic[:])) if err := p.process(pssmsg, isRaw, isProx); err != nil { qerr := p.enqueue(pssmsg) if qerr != nil { @@ -415,7 +427,6 @@ func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error { } } return nil - } // Entry point to processing a message for which the current node can be the intended recipient. @@ -452,21 +463,27 @@ func (p *Pss) process(pssmsg *PssMsg, raw bool, prox bool) error { payload = recvmsg.Payload } - if len(pssmsg.To) < addressLength { - if err := p.enqueue(pssmsg); err != nil { - return err - } + if len(pssmsg.To) < addressLength || prox { + err = p.enqueue(pssmsg) } p.executeHandlers(psstopic, payload, from, raw, prox, asymmetric, keyid) + return err +} - return nil - +// copy all registered handlers for respective topic in order to avoid data race or deadlock +func (p *Pss) getHandlers(topic Topic) (ret []*handler) { + p.handlersMu.RLock() + defer p.handlersMu.RUnlock() + for k := range p.handlers[topic] { + ret = append(ret, k) + } + return ret } func (p *Pss) executeHandlers(topic Topic, payload []byte, from PssAddress, raw bool, prox bool, asymmetric bool, keyid string) { handlers := p.getHandlers(topic) peer := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%x", from), []p2p.Cap{}) - for h := range handlers { + for _, h := range handlers { if !h.caps.raw && raw { log.Warn("norawhandler") continue @@ -548,8 +565,8 @@ func (p *Pss) SendRaw(address PssAddress, topic Topic, msg []byte) error { // if we have a proxhandler on this topic // also deliver message to ourselves - if _, ok := p.topicHandlerCaps[topic]; ok { - if p.isSelfPossibleRecipient(pssMsg, true) && p.topicHandlerCaps[topic].prox { + if capabilities, ok := p.getTopicHandlerCaps(topic); ok { + if p.isSelfPossibleRecipient(pssMsg, true) && capabilities.prox { return p.process(pssMsg, true, true) } } @@ -646,8 +663,8 @@ func (p *Pss) send(to []byte, topic Topic, msg []byte, asymmetric bool, key []by if err != nil { return err } - if _, ok := p.topicHandlerCaps[topic]; ok { - if p.isSelfPossibleRecipient(pssMsg, true) && p.topicHandlerCaps[topic].prox { + if capabilities, ok := p.getTopicHandlerCaps(topic); ok { + if p.isSelfPossibleRecipient(pssMsg, true) && capabilities.prox { return p.process(pssMsg, true, true) } } @@ -656,7 +673,7 @@ func (p *Pss) send(to []byte, topic Topic, msg []byte, asymmetric bool, key []by // sendFunc is a helper function that tries to send a message and returns true on success. // It is set here for usage in production, and optionally overridden in tests. -var sendFunc func(p *Pss, sp *network.Peer, msg *PssMsg) bool = sendMsg +var sendFunc = sendMsg // tries to send a message, returns true if successful func sendMsg(p *Pss, sp *network.Peer, msg *PssMsg) bool { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss_test.go index 675b4cfc..ea7a591b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/pss_test.go @@ -38,8 +38,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/metrics/influxdb" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" @@ -1369,8 +1367,6 @@ func TestNetwork(t *testing.T) { // nodes/msgs/addrbytes/adaptertype // if adaptertype is exec uses execadapter, simadapter otherwise func TestNetwork2000(t *testing.T) { - //enableMetrics() - if !*longrunning { t.Skip("run with --longrunning flag to run extensive network tests") } @@ -1381,8 +1377,6 @@ func TestNetwork2000(t *testing.T) { } func TestNetwork5000(t *testing.T) { - //enableMetrics() - if !*longrunning { t.Skip("run with --longrunning flag to run extensive network tests") } @@ -1393,8 +1387,6 @@ func TestNetwork5000(t *testing.T) { } func TestNetwork10000(t *testing.T) { - //enableMetrics() - if !*longrunning { t.Skip("run with --longrunning flag to run extensive network tests") } @@ -2098,11 +2090,3 @@ func (apitest *APITest) SetSymKeys(pubkeyid string, recvsymkey []byte, sendsymke func (apitest *APITest) Clean() (int, error) { return apitest.Pss.cleanKeys(), nil } - -// enableMetrics is starting InfluxDB reporter so that we collect stats when running tests locally -func enableMetrics() { - metrics.Enabled = true - go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 1*time.Second, "http://localhost:8086", "metrics", "admin", "admin", "swarm.", map[string]string{ - "host": "test", - }) -} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl deleted file mode 100644 index b75cc989..00000000 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/perl - -use JSON; - -my $f; -my $jsontext; -my $nodelist; -my $network; - -open($f, "<", $ARGV[0]) || die "cant open " . $ARGV[0]; -while (<$f>) { - $jsontext .= $_; -} -close($f); - -$network = decode_json($jsontext); -$nodelist = $network->{'nodes'}; - -for ($i = 0; $i < 0+@$nodelist; $i++) { - #my $protocollist = $$nodelist[$i]{'node'}{'info'}{'protocols'}; - #$$protocollist{'pss'} = "pss"; - my $svc = $$nodelist[$i]{'node'}{'config'}{'services'}; - pop(@$svc); - push(@$svc, "pss"); - push(@$svc, "bzz"); -} - -print encode_json($network); diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh deleted file mode 100644 index 7d3c2849..00000000 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -sed -e 's/\(\"services\"\):\["discovery\"]/\1:["pss","bzz"]/' diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_128.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_128.json index 7bafd358..8e1bc88b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_128.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_128.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","private_key":"79eaaa1c3a9339a90cf54c511649caf683f2910588a872d2c12919355b7d5d28","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","private_key":"b067839f81534251ade8651e682dbd8324dfb83c7034aff4a48909e9310c990a","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","private_key":"4233e4c480ae197c265975cc7c83cc7b0cf1a8d67e4728bac4bcecaee63ad935","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","private_key":"ca0c9f1baad4f60ddeaafe287d43b4ef8ec4b96c4ef12da194074325ca6cc4ef","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","private_key":"b6c09a581c2a6d85a63c11e586391346fe9d9d24292de15333ae230a33c52c1e","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","private_key":"378e3e11e738557d2eea27e070d52c8355f8abe0c5f8607ac0792455a1d50bae","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","private_key":"e6710b29bb9b7f00ee1e921bd548fc7622d73a0aae3f25de7a3f3650191147a8","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","private_key":"2bed1cf9737dbf8239f560ab8b4e57dc47cf57a28ebd203e6fb159093fbe52c0","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","private_key":"3f63c3dd3bf2b5be6e9af3ce596eb65cb58a36749d0baff1759d8dc6f4da8993","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","private_key":"38ffbfff1b5ab2f905daabcbbc12a5e28aad826a80d0a40988a04d6653942a50","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","private_key":"aa2cc30f2f6e589ca122890fc95845f4a81ad7e57f2661343ff6af3d401c46f3","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","private_key":"5b4a4da121c72f3d0d453394e6f09fc9ddaa5a13e44acb1ef6684867b4cac14c","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","private_key":"98f5b9f4be5d997b66834ae619c58f54d941623dfcb9a6783bfce77fdb3f3d4b","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","private_key":"cbbe3c5ab5aafd2dae03deda6db9a3e7e58ffaad5c1edd37d7a13951aa733590","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","private_key":"62a83d45655860933bf8a2348695dd695176f3225f4ba72e70284b648130d330","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","private_key":"8c72a0c564073065c5300e822a476fe3dd8b373cfd0dabaf0cdb056ca0ece2f9","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","private_key":"b6eb72555f9952a32406b7576ac85ead5cbe9004f37b6ebe8f7c3b6e17973104","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","private_key":"e9bdb2a275f0f2fd6ef4266bca55fad475c5d9e4ee0db2951ae91fd629cb2029","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","private_key":"d9a2bcdb02288fd5844d0be689ea4286f27991bfc82c76f6050a3e3d2f0858a1","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","private_key":"8ee0c4634570903c3d7383adb12cd35a82bb1c9be593755bd77c90a1bd6bbdfe","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","private_key":"16df12116ebc93bdc671ba1351bf03b763d3e67b2c9c468e56177c80b0dcbf84","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","private_key":"1a78b7fedaab9310b17675717481b1331eed3fa3c77cd96addf6bf9abd778aae","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","private_key":"3d37e996f181b4f57d5c5a61a07f86f1869c760604dfe9166d5b3552acf1a43b","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","private_key":"5895ce723440eaa77daf0a8779cc52992427524e420e3ce71ce1b24f3bd4658c","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","private_key":"cf20ef905d7d3d1141c472afefd12332bff10edecc695e409af38086c7a1a5d1","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","private_key":"1a7c744024c7baee8c43425861a5a4ff2ea80533fe6549a58e61b50c93059fed","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","private_key":"7399aa5562abb3ca2add08c810d607ad6fed7a036622eaea561da8a5aa51c0af","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","private_key":"ded7b34b0c8218bfba59e8d061b50cea365a9f137b9a66064e2287ef660dc789","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","private_key":"39ac5498c92329fc18c4eb0ec36cca3c5270f322084a1fc42fad1be0b5f32081","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","private_key":"add3ad2926ebf0b30f111796475cf160bcd1f1756866dfaa19e048c6954975c9","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","private_key":"d5290ae40b68ae7b51fe7ce7d83ab96841aa97a3457fc1bcf70065a2d2b60c20","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","private_key":"ba7abd532b10496c6363f35e231ff80aef25246315302fd138dd977d5ece20e5","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","private_key":"e58bb287592c2b89814ed3475004f5c9b2eb226483fcb8235619b6b42747d10c","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","private_key":"53e9afc6c039fee226bd9a0b537355f23e93457dc0eabbdce75e4d1ad7a473e6","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","private_key":"079cf6730627562bbbff031d22ab1ae9e65b7747497adc327830e5d6768d6b04","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","private_key":"c3157fe034d3a477f697b756cd9ae1de532b0ae42bb5039f6d2bf399bb2ddbbd","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","private_key":"d4472d7bc821536231d70dbdb3f0a5e3fdd104dcbf5a97c9521b0778d9491680","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","private_key":"23c79a6a5af06f9e9cdb6f4b4e40e25eca8793ac91db22cde17e0a3851c1f48e","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","private_key":"0295fa1706ccdcbdc8d7943b8d2011c6f46225d85b574d2d02b4a8dec66f9a29","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","private_key":"34d1685a48b56e62b30247fffb44ba2b41f2d806344fe52f7dc9049a778c667f","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","private_key":"b6273af6a94c07db54566d0d2f93121d0ddf239921e8e46af19babd2fa9930a7","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","private_key":"362244251a7f1bf4bc855ff3b272b1c7c7fe5d8338af0c581fee2f49e2939ed8","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","private_key":"bf6cd10025d018c0abfae2c88aa7c46c3d12d612580e6b4aacdc51fd52476270","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","private_key":"0659e3a41adc716b493c6ad765c5b26d35c95a1edb254efc8ab967e71e3e0a16","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","private_key":"f6d48b4c10f3257bba2f626d48192d94a1b1de3ab1480b618a0bff07eb20396e","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","private_key":"4a487eb7a3b924414d988104fce6f87a70502db2d5d71dcbc1a115b37212cb06","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","private_key":"9e2309fa485ace73ce907035f5113e7b13e5719c819479b10fd9386a3ad5236f","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","private_key":"e511c730e803371042c631512a12d74b1c31a53caab237719b8fa007e4cef9ea","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","private_key":"bb4c6b3c0931311ef5e31087f74a1a95aa39da470737c4c1a2a730ea2cac1c76","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","private_key":"88c0abdb64c6dee8117b7b720d5782321ce583fcc76e6eed2ee1f6279a82ea39","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","private_key":"e6eef1e846329e10e247843f7cee455af8ad3579e5a1e6360aea0ecc51982759","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","private_key":"ffd961376b67cbfafd47d89610291ec8fc2af2c16bc31e6851f804e15b2e9cd7","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","private_key":"db9ca337fd3ecf30fa6c217606072c214028b8d723ce82de57cfb4f0266a653d","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","private_key":"40e9de0543bd2c35509ebfcf51aa5a543d9616831505b5644e982144f4971f3a","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","private_key":"f2806927e5ba924b002b05116a66bdd62d4eed7900e91f3e31892288bd06ebd1","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","private_key":"f38a84e8d30f9c12d52071b696ff7fbd355dc875cbf937d2f491f4f3e193fc8e","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","private_key":"a3895eb5276ca39ba15c02895c3537a6c3a7be75de7b2ee2bee1fc5b9a313240","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","private_key":"8135cdd3f1b3d517b1f4a11407dfcdf6a31b3dc087ddfe2224999f16ee7ca9de","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","private_key":"29e270aecc8603f2224bee7f11039231b7a28efc5b29deeb9d98d0af388a87d0","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","private_key":"04d1ab0b03908f14773c60464c51526f925e192645efc3781a7117f22bdc4835","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","private_key":"f7320ebd494ac4fd8d6871123b7531dee97fba428ff30994f4d3ecc3f9312001","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","private_key":"b71a899f42faf2bdf9824d145f6f5959178f61f05e460e888c862ba8b03b5448","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","private_key":"43ea846524b82ef37cdaa1546b555e1a8d7510fc0cc7f11a6e040b79a5fcf054","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","private_key":"0f863dee7eca46274fc2ec03645bf96424ffebbe6f5c26631051127cf730e223","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","private_key":"a70d3a2696371a3cdee8702bbc4b008a564f36a8570b3bef778d00e5c4bc7da6","name":"node65","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","private_key":"24cc61b4c4e59317c2927bd635bd3ad2863c0598321f0e5d60c3b534ed151558","name":"node66","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","private_key":"36459a9e26fc4c00dd4c89bdf4c86c717b9701169ad7154228b8fbfff55661d9","name":"node67","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","private_key":"b947082437b645032dfff6e9d20e2eed52aace2d5e29cc268b06898cededdabd","name":"node68","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","private_key":"5ac248334fa8c619d900ac284274784dc99fe0ae517e749c989a15bad1652ccf","name":"node69","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","private_key":"7c46fa70253c48efad70d0b3da97e5c5680b1fb430147ac6f821729a836c667d","name":"node70","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","private_key":"2d39f1bc0c0b3b7bdd1b9ef4fdfd54dd5b7db9743a16baa7c5f8b50948062e8d","name":"node71","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","private_key":"d4e45cb0946161c0f4333c4db19bdeabceb81b4db44982a776556e8da0bf3928","name":"node72","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","private_key":"df8fd4bcf5cb62281500f76bc0b09d7ac1576ffd0edadbb8d39301406ac8e0fd","name":"node73","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","private_key":"5ec7e6e237997309e30846fed2a2074e5a150ae82804f581cb4a69ea69fe0118","name":"node74","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","private_key":"06d5dc287feafe3797b6302002258d7ea058679dc501e7a05f64fabd41b1b701","name":"node75","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","private_key":"a06a77e7469d86991954524d4a1495b5aeb80bb413c0b1293479dcc8ce511108","name":"node76","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","private_key":"9e6c3d21c05d371fd69225b2eef1d1eabedad577ae026b6d8ad8f728a53d657b","name":"node77","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","private_key":"cd8b5f4a6c0d361bc118318b1f1c5e69ef7b546e5ded44742e97124cfb80c52e","name":"node78","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","private_key":"04ed808eb12d991a68104f16e8965f3e6d60ba0b0dabff4fe33b3878c63d25f7","name":"node79","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","private_key":"175d97bb42b8f0effb21274a929a499f0e49e8e6ecad97b853a164464ad20bde","name":"node80","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","private_key":"34dbf4adc051f2ab18ea18c1faaec6726857cc5e0fcb3181fb296a723d2971c7","name":"node81","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","private_key":"21c776bf36961c727b36ff521a7527764077944b7932dfb901ca6489b2e123e7","name":"node82","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","private_key":"db4ace065dad27967a83ad918dedd4b4d7b1aaa331057ca1a2033fcba3e16df6","name":"node83","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","private_key":"2642ed9d36375a48a74d6aee878a935a15e7bd219d39bbdf455b0a168c98a8b5","name":"node84","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","private_key":"c1c1f7cd104f6f7163fe144041570269558b335ae6ddbdb80c79687faf55f5bb","name":"node85","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","private_key":"89501ac0b58fa2ee82ba6ef2b45a3c0ab6d8f54f4b92da1111d97ecfedbf5fc3","name":"node86","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","private_key":"cf649d632a25375b28cc6f7821de3e0df16b52ad9e0ff8978b231e20d6ed37ee","name":"node87","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","private_key":"bceddc4ac81042ad71089e4c861518f8d018601263d1faa17238f1c326e4b317","name":"node88","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","private_key":"a870aecb16e345ef241f69348d08489eb250b113f2072ab6371dda815d799f3f","name":"node89","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","private_key":"07af0af8e7e43f2822c2c0c3d34a1742faf6e11328b6194a760e9acefb5dedc8","name":"node90","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","private_key":"683b9cd98aab26ece4c2e53dd44a1fde3ae2303f80f99dc7e7e5d4b80e5a40e2","name":"node91","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","private_key":"31b3da34d338fb902b718378f7b5ebbdcdff30e4e3d3deff8b021e3979a7c6de","name":"node92","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","private_key":"997bcdc19c47350a268aa991a33d767bb6fc29de16593e0b099e793aa1db638d","name":"node93","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","private_key":"393e54787cdfec2d8d987f785700170fbcb31fd541c9c05199cd77d3a16a6dc4","name":"node94","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","private_key":"0cd4a911f2b1193b22efc0823fc2ed9beddafb7705f5597ce6d7335aadae0e1a","name":"node95","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","private_key":"fb0590eb4eb2624363f0740cbc794f9adb8356ccbaf6650c8baca183edfde3b8","name":"node96","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","private_key":"40d4caee240073f0bfc9307eed26d4286f944f467837b7250ee206f40d2880d4","name":"node97","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","private_key":"207c5a4e99506c7afdfff66611cf0baefe929f7c8a1a7a802cb44df3fa650618","name":"node98","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","private_key":"fa964e311f099e564ffa3ff9820a9ad3a8723f738fce6da11be604636f275831","name":"node99","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","private_key":"23f2913103e5295ddfdc6485c2ea3c33bfda3e0ceea62cac5401ceabdda0668a","name":"node100","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","private_key":"f3c37d7a8e80e1e71fba834055bf934536fd9e117f496b156d46bca96632ba5c","name":"node101","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","private_key":"f4151729479b0ae76a7b853aa9d3460ee67adcedc364ac97248fb383478ba113","name":"node102","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","private_key":"482aa546e8e665988c7329424342961c10084e439d562aed129d21a8c212d007","name":"node103","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","private_key":"2641708c3c6101db41db1a7eba5ed6b54e7ebc3014cb575ed71d291a6aacfc28","name":"node104","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","private_key":"9b9c1c2253292c4de58f82fd6bba15922acfa246fa0717a869c0d651ce19e826","name":"node105","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","private_key":"7cc79c34ac4847aaba7f1e2de8d23910301dbfe606d052cce33ad0340a1f82fb","name":"node106","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","private_key":"4047502d07951bf2380ef595036f9e99db3b0f7e1229040e21da5fbc49e7d820","name":"node107","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","private_key":"02a6713184cf6e413a6ed6a6839150cad9c72d40951b265a754e56b5bdb74cbf","name":"node108","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","private_key":"12d74d71de5166524deeed2ba475f9ad46c296668af272f0ade12162bed0f50f","name":"node109","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","private_key":"4fff513c0f905a42d6d18a90ae6a78c60757490480579162c9e0760361baf184","name":"node110","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","private_key":"5db638bd9bfaf4c2e1af1f3f1dc1e89382a6a2982f303fc80504b44aac1a6264","name":"node111","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","private_key":"6caa9dcb10b84a658d4ef791909b6532395f0793f9f8bce99a3a1b985ce619b9","name":"node112","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","private_key":"63375740be7dc5d3a76a7b3249786a4c7382eaf8b648e5a39a7a850722bad29a","name":"node113","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","private_key":"110a610c6c2f1720584929baf4ab9c8490923fc7b421bd251e444b752f8f8957","name":"node114","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","private_key":"7a8380aa7312fe4859408a51876e9f44b56151086e4bc36569a8f55bfb3a007b","name":"node115","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","private_key":"1e498dce32dcdfdf4b6c691fa203e3809fddf1b19b1b1da0b1162b9037ecc303","name":"node116","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","private_key":"03de0803048f078de61e3eef039a9ecb0e761216573392a6692630f3f291cc25","name":"node117","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","private_key":"934aa39349989614a1b0a71785880e61c60bb2579a9d52b832887849de94ec24","name":"node118","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","private_key":"011d6fce7eed10fc8c5a7a9ca21769efc6581023c2c857c28d97a6ebb1c43a53","name":"node119","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","private_key":"76d98f9c684d01fe8121cf715f01457e9fc38146a717958c8bb325a3b4ea44ce","name":"node120","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","private_key":"7aa614585809bea3b748e6df2e1a8da2b201a9ae84f11c819b5669234a10f76d","name":"node121","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","private_key":"71857ed16ee507ae0dd576370348a196d43274a3895f26fb8659ec79c1ecb79c","name":"node122","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","private_key":"3e5c543d406054ba1338ea28c37198eb8153a157eb5a0aecc186dceb04e10632","name":"node123","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","private_key":"3771d716bd74a4be3b8e154d3aa3b2302700b5ca1607923f7414c147a7cf67b7","name":"node124","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","private_key":"25dc939bff90ac541a61b59e0d2b4d3b9891379de3893645f06891c5be0d5695","name":"node125","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","private_key":"e6ad803abcef9554bdff08a4f4b6a7a65dc574bf92d32ee882413c9269fd31f3","name":"node126","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","private_key":"a482a87960aae2e446cd2aeb304e7baeff9a24d2bace4d5f919b5bda00a5f0eb","name":"node127","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","private_key":"214126811a121d6fc0443ce66e59372bc72dea9e220ab6e7d6da961741590d47","name":"node128","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","up":true},{"one":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":false},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":false},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":false},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":false},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":false},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":false},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":false},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":false},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":false},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":false},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":false},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":false},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":false},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":false},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","up":false},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":false},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":false},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":false},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":false},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":false},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":false},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":false},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":false},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":false},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":false},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":false},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":false},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":false},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":false},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":false},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":false},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":false},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":false},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":false}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","name":"node_7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","enode":"enode://0c52fa76a36dd072dbe11c5e7ebc82ef6efdd0fa3da10a006f64a34abc8a9f4d721a5c4fc4ef5415438ff721ed76effac71cb456683d037aace2db5f49026522@127.0.0.1:0","enr":"0xf88fb84036d1f0bc1cc1963dccf82616505bc245b2af797a3ded53470756e0453fd7fde54210f291c7326eae82253d256d7367b7b8568b05250d5a2f08e6c83b1981d1cb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020c52fa76a36dd072dbe11c5e7ebc82ef6efdd0fa3da10a006f64a34abc8a9f4d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fcXo2BgMG8frvuEaR/yW6P6LLXHDDLxKoc+Z6Otq/Kw=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7dc5e8\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 cfbb c3a1 d6ff d0f3 | 63 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n001 2 0bcf 027f | 27 286a (0) 2a22 (0) 213b (0) 2434 (0)\n002 3 539d 48b6 4b24 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 7 6742 667e 6982 6e5c | 11 6210 (0) 645b (0) 667e (0) 6742 (0)\n004 5 73b8 734e 7355 772e | 6 7639 (0) 772e (0) 757a (0) 73b8 (0)\n005 2 78cb 7b92 | 2 78cb (0) 7b92 (0)\n============ DEPTH: 6 ==========================================\n006 2 7f87 7fbc | 2 7f87 (0) 7fbc (0)\n007 1 7cf4 | 1 7cf4 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","private_key":"c917cec67eeafea4150785766f590f1c97310aa195be916d29051a26b3171a53","name":"node_7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","services":["bzz","pss"],"enable_msg_events":true,"port":33259},"up":true}},{"node":{"info":{"id":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","name":"node_027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","enode":"enode://d49541d31306ef162578a3f30e389a71136992741d3611b524f2a1b37836ce7ee1dd57cc939af45575d8d483f71883fd82b19a52373b635a06117cf4a4ef067e@127.0.0.1:0","enr":"0xf88fb840ca9a8de2b1e9313144320c6cda217eccf7965c113dfd13a673882f078c78b4c16eaa6a88000df314c35dbc9734baea21b359cead3b4fc396d771f9ddb0347d1e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d49541d31306ef162578a3f30e389a71136992741d3611b524f2a1b37836ce7e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"An+0lkOHglg/ePt2mZM27tf7ZyqcnqUNBN9YDm6yE3c=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 027fb4\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 9d3c 9626 91eb aebd | 63 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n001 8 4cd0 4b24 6c82 667e | 38 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n002 5 3cb1 3ee4 2459 26d1 | 12 286a (0) 2a22 (0) 213b (0) 2434 (0)\n003 4 1929 1be4 109e 13bc | 4 109e (0) 13bc (0) 1be4 (0) 1929 (0)\n004 3 0ff6 0ab9 0bcf | 3 0ff6 (0) 0ab9 (0) 0bcf (0)\n005 3 06b9 0427 0506 | 3 06b9 (0) 0427 (0) 0506 (0)\n006 1 018a | 1 018a (0)\n007 1 0390 | 1 0390 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 0218 | 1 0218 (0)\n010 0 | 0\n011 1 026d | 1 026d (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","private_key":"35e8d68fdca3b15bdf43c1cde2ec85199450a4588a06d9669dadc25c6921fa02","name":"node_027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","services":["bzz","pss"],"enable_msg_events":true,"port":41117},"up":true}},{"node":{"info":{"id":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","name":"node_03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","enode":"enode://fec12f13138cbdff7808d59f28b3b381ead6ce29e9e229304138d734fe76ca3c3a45e95962022868018fcf1f1fa0e1ac1d8882564c7e0cde1529db9b3232b19a@127.0.0.1:0","enr":"0xf88fb840dfe0f2eb384187472aca67b943618b6dbaf1909ced3442bcc018bee08cc8a00a216115d3306fae614384ddd4ecedd94e35505ba6c7a8f8a8fc9a2f17ea862a4b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fec12f13138cbdff7808d59f28b3b381ead6ce29e9e229304138d734fe76ca3c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"A5BzgK/NUiOPPYSo3uPfWZx/L5uQ+8EnHuiL21KsvVg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 039073\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 91eb 9d3c ed32 e16b | 63 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n001 4 4b24 757a 667e 6ecb | 38 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n002 5 39db 3ee4 3cb1 26d1 | 12 286a (0) 2a22 (0) 213b (0) 2459 (0)\n003 4 13bc 109e 1be4 1929 | 4 109e (0) 13bc (0) 1be4 (0) 1929 (0)\n004 3 0ab9 0bcf 0ff6 | 3 0ff6 (0) 0ab9 (0) 0bcf (0)\n005 3 06b9 0427 0506 | 3 06b9 (0) 0427 (0) 0506 (0)\n006 1 018a | 1 018a (0)\n============ DEPTH: 7 ==========================================\n007 3 0218 026d 027f | 3 0218 (0) 026d (0) 027f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","private_key":"b4db734c8cd058c2d749fff4c60c20dc42442061273efc31e209e2410ea38934","name":"node_03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","services":["bzz","pss"],"enable_msg_events":true,"port":33597},"up":true}},{"node":{"info":{"id":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","name":"node_1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","enode":"enode://7b0a4f58064407b6a89a456dd7c991fa39ac01667f7731f4086a9e77cac79dbcaad821bf88ef0eae4cc2a07b14ea9bfea96ab342de836f2071b9a1a92bef83f4@127.0.0.1:0","enr":"0xf88fb840a4ea2bad27e691d6f015407aeb49fd6ef8e053ce798b351ed6925d81856bfe6736edaccb49c93ac2255f173fa0fda36fed07b165e6efe95bf93d54cd4bffabf30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027b0a4f58064407b6a89a456dd7c991fa39ac01667f7731f4086a9e77cac79dbc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GSmoS81kvwAtCvsWJJRmxbZgEjF0ofwb+IGRP4yH0f0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1929a8\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 a2ba 9d3c 895b e16b | 63 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n001 3 4b24 757a 6ecb | 38 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n002 9 2459 26d1 2a22 3ee4 | 12 286a (0) 2a22 (0) 213b (0) 2434 (0)\n003 10 0ff6 0bcf 0ab9 0427 | 11 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n============ DEPTH: 4 ==========================================\n004 2 109e 13bc | 2 109e (0) 13bc (0)\n005 0 | 0\n006 1 1be4 | 1 1be4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","private_key":"db5a5448de2eddbf38d0c7d1521fef311345df8517384c0d6b57a7e674ddad53","name":"node_1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","services":["bzz","pss"],"enable_msg_events":true,"port":45321},"up":true}},{"node":{"info":{"id":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","name":"node_6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","enode":"enode://e21a50afba059b155fdd0211a966f7169bcbdb74404cb9ed08f192236eceea4c7b9ced1604b358e45c7153c5a7f75a6749f191d7021e0208d4df9aae45f23804@127.0.0.1:0","enr":"0xf88fb840997c2ef382cf15d5ad18e430d159fc5502d452c770bd172de18a323d9d5f59bc6432167188e9894a86efc4fa5721f7d28bafc11fee19e45a03f76624374b4fa30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e21a50afba059b155fdd0211a966f7169bcbdb74404cb9ed08f192236eceea4c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bssR/FrMFuzXA1FBD6GOxEoqg9nneM8luFp1NUk0Vrc=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6ecb11\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 f410 f5c4 e16b e0b1 | 63 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n001 3 3ee4 0390 1929 | 27 286a (0) 2a22 (0) 213b (0) 2459 (0)\n002 9 5d60 5abc 539d 5776 | 15 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n003 7 7355 734e 73b8 772e | 12 78cb (0) 7b92 (0) 7fbc (0) 7f87 (0)\n004 2 667e 6728 | 5 6210 (0) 645b (0) 667e (0) 6742 (0)\n005 1 6982 | 1 6982 (0)\n============ DEPTH: 6 ==========================================\n006 3 6c82 6c02 6d60 | 3 6d60 (0) 6c82 (0) 6c02 (0)\n007 0 | 0\n008 1 6e5c | 1 6e5c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","private_key":"28fb42373087a7839e6469456ad91bd1d4c1ac2998d4255bdb18559e6594b6d8","name":"node_6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","services":["bzz","pss"],"enable_msg_events":true,"port":44113},"up":true}},{"node":{"info":{"id":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","name":"node_ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","enode":"enode://3d426d150fd9ee0de2b594986006891aed8ab3f74cde7ad6cc686e3a10992f727c3211fd7e1c70bd5d1a018adf0672f4c56fe30638e9c51da6156884ccb284e5@127.0.0.1:0","enr":"0xf88fb84061b157c270f717e96d2170c813f51c28cb513f10730481c1f0dd8325c02d72c512a23741c2968d0ca703d403e549c557be9ccba33b9817ab6cff09ec2630c41e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033d426d150fd9ee0de2b594986006891aed8ab3f74cde7ad6cc686e3a10992f72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rQ0NxdQRTuRILWyb1ORmgzJ6vyuS3w0kLXkBmWOHZmg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ad0d0d\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 109e 0bcf 6210 6ecb | 65 286a (0) 2a22 (0) 213b (0) 2434 (0)\n001 2 cfbb d0f3 | 30 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n002 11 8cf9 895b 89c8 8be4 | 16 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n003 5 b70e b2b9 b381 b841 | 8 b8e1 (0) b841 (0) b92a (0) b486 (0)\n004 5 a7a6 a75a a085 a320 | 5 a320 (0) a2ba (0) a085 (0) a7a6 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 3 afa3 ae67 aebd | 3 ae67 (0) aebd (0) afa3 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","private_key":"d01704345488dae1946ebc66f4903380ce4b938bed28d2aca5e644e493351f6d","name":"node_ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","services":["bzz","pss"],"enable_msg_events":true,"port":34797},"up":true}},{"node":{"info":{"id":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","name":"node_d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","enode":"enode://4237bb190c2cafcef9ac7ba0cbccf2e75e97a4e8c624e8adc279e935d9c7c0738ab94cb32406678bb61010467d21fc56071334a2860ca5d3e2fd5d414d293f73@127.0.0.1:0","enr":"0xf88fb8405ab3e3f555db63f58404371549be2cf78e94aa9475e7f4b9adc6aa73b5e878df2480291bc05f8cf0166ddea6c24f0fa246e9646d59fce792c15ea71c97be36010183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034237bb190c2cafcef9ac7ba0cbccf2e75e97a4e8c624e8adc279e935d9c7c073","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0POYlpSA8981h/bUdUb/EmHK1NLpwm/zB341rhsmFT4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d0f398\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 38ab 26d1 2a22 4b24 | 65 286a (0) 2a22 (0) 213b (0) 2434 (0)\n001 4 895b 92a1 a75a ad0d | 33 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n002 6 ebca e55d e0b1 e16b | 15 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n003 5 c3a1 c8e5 ca03 cbc5 | 9 c181 (0) c3a1 (0) c8e5 (0) ca03 (0)\n004 3 db08 dfae dc97 | 3 db08 (0) dfae (0) dc97 (0)\n============ DEPTH: 5 ==========================================\n005 1 d6ff | 1 d6ff (0)\n006 1 d224 | 1 d224 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","private_key":"875e777570710eaf1d860d33b1d4e4afa6b44b0660cfe5be4aa6cc294c546e66","name":"node_d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","services":["bzz","pss"],"enable_msg_events":true,"port":33929},"up":true}},{"node":{"info":{"id":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","name":"node_cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","enode":"enode://8efcf09e90d2d51bd3c092605c42b4779dd2e58033f47e0334f6888cb53a11d9671659ea85a7b0c22913977f61e1a604b39360d562853873d8b3def8ab011126@127.0.0.1:0","enr":"0xf88fb840f2c79356478735337278a426353488d61e749b316e38e2d4f04fe88cd92f738a2546d62d6fe2bcce1af65b06b7d7345dc3f7c8571101680d66301f4a71c87b3a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028efcf09e90d2d51bd3c092605c42b4779dd2e58033f47e0334f6888cb53a11d9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"z7uepoK+yt6rELvQgLqOk1EAhah6xRnkNJZPqiIvwnU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cfbb9e\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 4b24 6d60 6c02 7fbc | 65 286a (0) 2a22 (0) 213b (0) 2434 (0)\n001 4 92a1 9d3c b381 ad0d | 33 86ca (0) 83dc (0) 82f0 (0) 8b76 (0)\n002 5 e55d e0ea e0b1 e16b | 15 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n003 4 dc97 d6ff d224 d0f3 | 6 db08 (0) dfae (0) dc97 (0) d6ff (0)\n004 2 c181 c3a1 | 2 c181 (0) c3a1 (0)\n005 3 c8e5 ca03 cbc5 | 3 c8e5 (0) ca03 (0) cbc5 (0)\n006 1 cdcd | 1 cdcd (0)\n============ DEPTH: 7 ==========================================\n007 2 cec3 ce99 | 2 cec3 (0) ce99 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","private_key":"4269717f6ea28ec4c5441c5b5423a2e7c38b7d2b7d7ccc5172da8fad2d709f3b","name":"node_cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","services":["bzz","pss"],"enable_msg_events":true,"port":35713},"up":true}},{"node":{"info":{"id":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","name":"node_734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","enode":"enode://8bf678fe58741608b5ef92a443588c6eb7f2fe2cf9185e03f908d034e13b4c764e4ed1dc17c36b695812a5c110abb0c18ef88c32727ee10b3868acd09bba0cb4@127.0.0.1:0","enr":"0xf88fb84070de48a3c1c962367c4ff449d327203595b0e1c1ca9e490abd350b47ea74aa7e444e094ec367c1f4ebac57f0289314f2e165f40c16cd4631859c490adce7dc3e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028bf678fe58741608b5ef92a443588c6eb7f2fe2cf9185e03f908d034e13b4c76","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"c04CntJUhe3Um5PdnoW252V/hg5N7UvIpQlPUSrlg2s=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 734e02\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 e55d f5c4 d6ff d0f3 | 63 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n001 2 2a22 0bcf | 27 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n002 7 5abc 539d 419a 4167 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 10 6c02 6d60 6ecb 6e5c | 11 6210 (0) 645b (0) 667e (0) 6742 (0)\n004 4 7b92 7f87 7dc5 7cf4 | 6 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n005 3 7639 772e 757a | 3 7639 (0) 772e (0) 757a (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 1 73b8 | 1 73b8 (0)\n009 0 | 0\n010 0 | 0\n011 1 7355 | 1 7355 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","private_key":"0bb7de51881b72244a45a762173749b52aac74eb3a8c1d48f3a62ccd0302fc4a","name":"node_734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","services":["bzz","pss"],"enable_msg_events":true,"port":41955},"up":true}},{"node":{"info":{"id":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","name":"node_f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","enode":"enode://961a9e131513a2c5774c0dc13eb30f2ef01d760ff0d89e535cfda5a6f9295b8f3b0bd2e14350fd396460c2dfab8522f1257f4331f3ea483868e6079a1fb5da7a@127.0.0.1:0","enr":"0xf88fb8409230987fe11342ff370645f1e38d4fdf2d2d9d2c49f2cd3207b760f02c7c517c15952dc852b3d4d0c2dc88387b2c301f5f0ae7c0e668b9616d8ed680cad31ca10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102961a9e131513a2c5774c0dc13eb30f2ef01d760ff0d89e535cfda5a6f9295b8f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9cTSjfWXPsApIiGodehEYyPzOUCdk/D3OFmQEmkIo8M=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f5c4d2\npopulation: 39 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 3ee4 13bc 1929 027f | 65 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n001 11 b70e b381 b2b9 a085 | 33 b486 (0) b70e (0) b16d (0) b2b9 (0)\n002 6 c3a1 ca03 cfbb d6ff | 15 db08 (0) dfae (0) dc97 (0) d6ff (0)\n003 6 ed32 ea0e ebca e16b | 10 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 2 f361 f360 | 2 f361 (0) f360 (0)\n006 1 f74e | 1 f74e (0)\n007 1 f410 | 1 f410 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","private_key":"46e5632ca34485b42e08ec702fe84421169074e80c41bc39e596de3815c6e021","name":"node_f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","services":["bzz","pss"],"enable_msg_events":true,"port":39029},"up":true}},{"node":{"info":{"id":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","name":"node_91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","enode":"enode://ae0bd86a797b580157ab4c21533c6f6c1780cb3c0cee9d7e2ff134e014f06b850f6d15e48654d074b11ee4d02fe3ea740579c66308e511746fd4105e2d21afff@127.0.0.1:0","enr":"0xf88fb84001756e4ad603612a22013c330b2cf03e87dc2141a015bede20c5765ed475cacb68aa1b9cec229906947a5e70ca06f66834998d2f887e2017ac427b638f9a09220183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ae0bd86a797b580157ab4c21533c6f6c1780cb3c0cee9d7e2ff134e014f06b85","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"keup+cjykp049DoMfvqAnA0tWaMcvydgyQ5z0gJm1Sg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 91eba9\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 7b92 39db 109e 0390 | 65 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n001 3 c3a1 e16b f5c4 | 30 db08 (0) dfae (0) dc97 (0) d6ff (0)\n002 6 afa3 a320 b70e b2b9 | 17 b486 (0) b70e (0) b16d (0) b2b9 (0)\n003 2 89c8 895b | 8 86ca (0) 83dc (0) 82f0 (0) 8b76 (0)\n004 4 9d3c 9e02 9ee7 9a92 | 4 9a92 (0) 9ee7 (0) 9e02 (0) 9d3c (0)\n============ DEPTH: 5 ==========================================\n005 2 9626 957d | 2 957d (0) 9626 (0)\n006 1 92a1 | 1 92a1 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","private_key":"4836585cbd3b3547cff5060ac87f6987ada66424120a9b9538775f47d0f7df73","name":"node_91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","services":["bzz","pss"],"enable_msg_events":true,"port":44261},"up":true}},{"node":{"info":{"id":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","name":"node_e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","enode":"enode://13b2a9865ee51fe3d87fc17ec8cfe97872514aba0eff2dd9a2c4ad9fc1c23b95d14c057a24db7f653bd6a8beb80be7154482ae88ebd1c6a6cfbea08c7fc93951@127.0.0.1:0","enr":"0xf88fb84082f8084805a5a7bd16721d9d3440e711bcb186978b79670fdd73217dd65bbb844a407d171eebfa8bfacff33277985dddc10db2c12f6a3e2bdc0e776ca994dad80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10313b2a9865ee51fe3d87fc17ec8cfe97872514aba0eff2dd9a2c4ad9fc1c23b95","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4WsSxwi8XgVFAJ2u1EczxS10UMzHl9FY3UGjvJUHtr4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e16b12\npopulation: 41 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 6728 6ecb 6982 7dc5 | 65 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n001 10 b381 afa3 a085 8cf9 | 33 b486 (0) b70e (0) b16d (0) b2b9 (0)\n002 5 c3a1 cfbb dfae d224 | 15 db08 (0) dfae (0) dc97 (0) d6ff (0)\n003 5 f360 f361 f410 f5c4 | 5 f361 (0) f360 (0) f74e (0) f410 (0)\n004 3 ed32 edc8 ea0e | 5 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n005 2 e77f e55d | 2 e77f (0) e55d (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 e0ea e0b1 | 2 e0ea (0) e0b1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","private_key":"5ea17901397d5aaeb179c857d6c09266e923a0215431888d768e5539165ad4e8","name":"node_e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","services":["bzz","pss"],"enable_msg_events":true,"port":37359},"up":true}},{"node":{"info":{"id":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","name":"node_962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","enode":"enode://bfd89002d57335d3e459e80f6a6d01e10639d4fcc760c399b6ca84a4ac5af371aae339acaf6d3a3af784091aec154057c194534e146eec65c841ee33441bf00f@127.0.0.1:0","enr":"0xf88fb84052f31a4caf0d9b1de4fc6c97990f405550c3648b4538d159b61e3b3e25d7125368269c12bc6fbf114ab141f378f013d37094dee41bd8ca773529195ea998253e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bfd89002d57335d3e459e80f6a6d01e10639d4fcc760c399b6ca84a4ac5af371","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"liZ2gYwX+uH/xS/CkxjET5uMmAr9bT6YIXtAiNVoqAg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 962676\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 0ab9 0bcf 0506 018a | 65 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n001 3 c3a1 f361 e16b | 30 db08 (0) dfae (0) dc97 (0) d6ff (0)\n002 3 b92a a320 ad0d | 17 b486 (0) b70e (0) b16d (0) b2b9 (0)\n003 7 86ca 83dc 82f0 8cf9 | 8 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n004 3 9d3c 9e02 9a92 | 4 9d3c (0) 9ee7 (0) 9e02 (0) 9a92 (0)\n============ DEPTH: 5 ==========================================\n005 2 92a1 91eb | 2 92a1 (0) 91eb (0)\n006 1 957d | 1 957d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","private_key":"85a02e6c73fe7d4d4c93334d0c723acd5ff2e71b08e80169c82302596e77fc01","name":"node_962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","services":["bzz","pss"],"enable_msg_events":true,"port":45605},"up":true}},{"node":{"info":{"id":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","name":"node_6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","enode":"enode://e19d4c9793aa8f6a9a32bb81ca986936d9ea49e442c801424ae1b66b0494fc290b62403e22282d1d77439b36dfe907efe0b60126280ca75babc23becb470b1e7@127.0.0.1:0","enr":"0xf88fb84081ecd7a679832795b6c915559cf9bcd02e9b61f37e131f88935755d13d0ff6ab34c388d54a00d8d71d670052b1bac1301f7ff0527db702b60863ca194d14f1210183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e19d4c9793aa8f6a9a32bb81ca986936d9ea49e442c801424ae1b66b0494fc29","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bAKRFKn3PWmkLlkc8tExB+/wONPtqKuwJC2dbRafBcc=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6c0291\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 f410 cfbb c3a1 d0f3 | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 2 3ee4 372d | 27 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n002 7 539d 558e 5a01 5abc | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 6 7b92 7dc5 734e 7355 | 12 78cb (0) 7b92 (0) 7fbc (0) 7f87 (0)\n004 2 667e 6728 | 5 6210 (0) 645b (0) 6742 (0) 6728 (0)\n005 1 6982 | 1 6982 (0)\n006 2 6ecb 6e5c | 2 6e5c (0) 6ecb (0)\n============ DEPTH: 7 ==========================================\n007 1 6d60 | 1 6d60 (0)\n008 1 6c82 | 1 6c82 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","private_key":"40e5884353d6096401012e695c215b05187562c0e32a97ee4abcd43c25a0ad55","name":"node_6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","services":["bzz","pss"],"enable_msg_events":true,"port":37519},"up":true}},{"node":{"info":{"id":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","name":"node_372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","enode":"enode://7cd3bb16716b1076e17d80959f4ef0fc541fc21ed845356a47f3bda9b1b7cc3c69114f4f796a56b301fa411ec706f696106d9b052accfc958fcd51e391c51ffb@127.0.0.1:0","enr":"0xf88fb8406c50fb4ef43704e45da206358753811875825f0bb9f88f7e4510685d0045fdf252af80cdb5e4d427ca21741e0b0fda40d2b789a1cd793aef76efcceebf4250040183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037cd3bb16716b1076e17d80959f4ef0fc541fc21ed845356a47f3bda9b1b7cc3c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Ny1HN0pX0YzxNKH4/C0vwQ36z8C+ntiDGDo0nIlrN5M=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 372d47\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ea60 89c8 895b a085 | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 8 4a18 48b6 539d 558e | 38 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n002 5 0506 0218 0bcf 1be4 | 15 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n003 5 2a22 213b 2459 2434 | 6 213b (0) 2459 (0) 2434 (0) 26d1 (0)\n============ DEPTH: 4 ==========================================\n004 5 38ab 39db 3e56 3ee4 | 5 39db (0) 38ab (0) 3e56 (0) 3ee4 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","private_key":"1be8d297f334edb94c9ea51d8debf701671d9b6417ac0686d6602848d866ee4e","name":"node_372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","services":["bzz","pss"],"enable_msg_events":true,"port":33327},"up":true}},{"node":{"info":{"id":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","name":"node_a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","enode":"enode://1018042bdefdc2e798c3ddd700486aba9fc20a89da51cae3496187cb9d6255d2b13be34e59108f3b3d1eab3f56f7a0988c0e866f58fcf360f6249fa89511f07d@127.0.0.1:0","enr":"0xf88fb84022e9bba09d0d2e41131e876b802569733bf1059ce20eb77f6b4b622ece181037505657543d3b05deec3ede00996d0c039955058490a884ad00126337c3b92eba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031018042bdefdc2e798c3ddd700486aba9fc20a89da51cae3496187cb9d6255d2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"p1q9Dc5aSIt+Bvkfq3qS7EKKshvek3LJ6PpIn0jns/4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a75abd\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 757a 109e 372d | 65 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n001 8 cdcd cbc5 c3a1 dc97 | 30 db08 (0) dfae (0) dc97 (0) d6ff (0)\n002 5 9a92 8b76 89c8 895b | 16 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n003 5 b8e1 b92a b381 b2b9 | 8 b16d (0) b2b9 (0) b381 (0) b486 (0)\n004 3 ad0d afa3 ae67 | 4 aebd (0) ae67 (0) afa3 (0) ad0d (0)\n============ DEPTH: 5 ==========================================\n005 3 a320 a2ba a085 | 3 a085 (0) a320 (0) a2ba (0)\n006 0 | 0\n007 0 | 0\n008 1 a7a6 | 1 a7a6 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","private_key":"f0d55a442b4523bc34a50224cf58a48983f8e13bf68ed7aef1f210ec4181e4ba","name":"node_a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","services":["bzz","pss"],"enable_msg_events":true,"port":34721},"up":true}},{"node":{"info":{"id":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","name":"node_757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","enode":"enode://bcc2e6a83deced98cbb219f3952ee89113bb72388f8db9468b0ccedc5c9efd497340ca0dab2f4ad807e2a6f7c2083c9c6ff638d982c98e7742df1f7b926737ad@127.0.0.1:0","enr":"0xf88fb840292c38ff3ee7ca5696840d594c2568dfdb75ecbbeefd9b86d835dfc88808eb3b4bc9021d750154c42b701172f70e6763d08126f1989ed3bfbab925235bc983220183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bcc2e6a83deced98cbb219f3952ee89113bb72388f8db9468b0ccedc5c9efd49","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dXpVdCTDOtie/YGF7BjXHAJYMOyyrtlR4zyMjZhtWTM=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 757a55\npopulation: 46 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 e55d ed32 ea0e f410 | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 11 2459 26d1 0bcf 0ab9 | 27 0ff6 (0) 0ab9 (0) 0bcf (0) 0427 (0)\n002 8 517a 539d 558e 5d60 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 5 6ecb 6c02 645b 667e | 11 6982 (0) 6e5c (0) 6ecb (0) 6c82 (0)\n004 5 78cb 7b92 7f87 7cf4 | 6 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n005 3 7355 734e 73b8 | 3 73b8 (0) 7355 (0) 734e (0)\n============ DEPTH: 6 ==========================================\n006 2 7639 772e | 2 7639 (0) 772e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","private_key":"da2903aa985ff2bebcff008fe5e6086043ded662b94bf703bdd33aa8abbcad68","name":"node_757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","services":["bzz","pss"],"enable_msg_events":true,"port":33351},"up":true}},{"node":{"info":{"id":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","name":"node_4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","enode":"enode://54c96640ca98c787831ec404bd53cf02cf312f521c34f5484e8c9bc0b9b0d95be546ccb2dc35f2350b6b457a5f8d57ec62dfc95fd3f82be2cf6acabfad9383b7@127.0.0.1:0","enr":"0xf88fb840701b1435264d1443865d19c0d29add0cf76d12020726e2685d8e4da0a8eeab31323b97fafbbd0ca3d01635cd7f3b27615bc73d27b4fdbf67c108954bd567c8b00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10354c96640ca98c787831ec404bd53cf02cf312f521c34f5484e8c9bc0b9b0d95b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SyQ6Wuq+xtsOSoCpwlUwDNlFkab74OCqFw2k9s4U7f8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4b243a\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b2b9 d0f3 cfbb | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 10 26d1 2a22 1929 13bc | 27 0ff6 (0) 0ab9 (0) 0bcf (0) 0427 (0)\n002 10 6ecb 6e5c 6d60 6c02 | 23 6982 (0) 6ecb (0) 6e5c (0) 6c82 (0)\n003 5 5abc 558e 5776 517a | 7 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n004 3 47c3 4167 41b9 | 4 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n005 1 4cd0 | 1 4cd0 (0)\n============ DEPTH: 6 ==========================================\n006 1 48b6 | 1 48b6 (0)\n007 1 4a18 | 1 4a18 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","private_key":"4f3791027f035431649d9fcd7cb9f8fd3c894da3f485f2c0e24c2a851fab97fb","name":"node_4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","services":["bzz","pss"],"enable_msg_events":true,"port":36491},"up":true}},{"node":{"info":{"id":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","name":"node_667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","enode":"enode://03bb27a5efeec49cef6564a99f3d8f48962be8be00db2ace069c57a131607c55bf856022b21bd4ec25e48b349b52b09fa2041ed165d3a8385ec34a5d7280d6d7@127.0.0.1:0","enr":"0xf88fb840307d719c21165c858e0413d4b18af8363443e8bba70afc6cc2b8dd5ff08a43a66e9ee7aec6b62b965901f872ab5832443df4fae667d7b3557eaea3c1e9052e020183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10303bb27a5efeec49cef6564a99f3d8f48962be8be00db2ace069c57a131607c55","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Zn7wQuna4YaUWB4EBMPYegmADotCFz0mVxw7+X4po3I=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 667ef0\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 b2b9 957d dc97 dfae | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 4 0ab9 0bcf 027f 0390 | 27 0ff6 (0) 0ab9 (0) 0bcf (0) 06b9 (0)\n002 5 539d 5abc 5a01 48b6 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 7 7b92 7dc5 757a 772e | 12 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n004 5 6e5c 6ecb 6c82 6c02 | 6 6982 (0) 6ecb (0) 6e5c (0) 6c82 (0)\n005 1 6210 | 1 6210 (0)\n006 1 645b | 1 645b (0)\n============ DEPTH: 7 ==========================================\n007 2 6742 6728 | 2 6742 (0) 6728 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","private_key":"b61f7c457f7b07d448f38101f0b9a63485fa37f50da9a92362a48addc997a396","name":"node_667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","services":["bzz","pss"],"enable_msg_events":true,"port":46521},"up":true}},{"node":{"info":{"id":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","name":"node_6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","enode":"enode://5fd6f8ed3cd810ee8b1f94209e80e357d598434625f8644da0ebe3e07eb25a80c5ca8fef356aba34c04ca2acbed317344c504ffe32fd7635f0b94c3ce5f5eff2@127.0.0.1:0","enr":"0xf88fb840236d92a5eae6b161341b01c489cd53ae1380191a314d7106c6984b0eb94d216b3bf8b891301e7486d39136a85d0a085f7cd70f33df587aeb879ce0600b7663720183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025fd6f8ed3cd810ee8b1f94209e80e357d598434625f8644da0ebe3e07eb25a80","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bWAZUnk1ibxrVzQMRRpqvwLqLBZjfpEO7QTN5u3f4Xo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6d6019\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 b2b9 957d d0f3 d224 | 63 db08 (0) dfae (0) dc97 (0) d6ff (0)\n001 2 3ee4 3cb1 | 27 0ff6 (0) 0bcf (0) 0ab9 (0) 06b9 (0)\n002 5 48b6 4a18 4b24 5abc | 15 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n003 7 78cb 7b92 7f87 7dc5 | 12 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n004 4 645b 6742 6728 667e | 5 6210 (0) 645b (0) 6742 (0) 6728 (0)\n005 1 6982 | 1 6982 (0)\n006 2 6e5c 6ecb | 2 6ecb (0) 6e5c (0)\n============ DEPTH: 7 ==========================================\n007 2 6c02 6c82 | 2 6c82 (0) 6c02 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","private_key":"18bc5eca469877f8bfa545da0ad2bd73daec62af973abe276fb20f1d04863e95","name":"node_6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","services":["bzz","pss"],"enable_msg_events":true,"port":33319},"up":true}},{"node":{"info":{"id":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","name":"node_3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","enode":"enode://5fd4ee4ef3698df17ace9e5c9df83f75a95f7e5f95f649cc8bdd52f61a7fac2171d1ee5f86535eee24bae2effb9f7ff69670824dbe6eb14a35b7665c2223da3d@127.0.0.1:0","enr":"0xf88fb840aff409e698e8f4f5cf56ca52947c18b6d9809b5f1e525fc10e843e36ee2ca5241e81898a9433b16d0a08764e529c7fb084f389f43419ee06e71bf301a946d2900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035fd4ee4ef3698df17ace9e5c9df83f75a95f7e5f95f649cc8bdd52f61a7fac21","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PLG0Bpcn3DI6aHyrTKJ2T2QVRQSIcG8bl8XLjKRjRv8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3cb1b4\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 89c8 8cf9 ae67 a085 | 63 db08 (0) dfae (0) dc97 (0) d224 (0)\n001 4 48b6 7355 6e5c 6d60 | 38 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n002 9 1929 0427 0506 018a | 15 0ff6 (0) 0bcf (0) 0ab9 (0) 06b9 (0)\n003 6 213b 2434 2459 26d1 | 6 213b (0) 2459 (0) 2434 (0) 26d1 (0)\n004 1 372d | 1 372d (0)\n005 2 39db 38ab | 2 39db (0) 38ab (0)\n============ DEPTH: 6 ==========================================\n006 2 3ee4 3e56 | 2 3e56 (0) 3ee4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","private_key":"f18fca734e8631f11eebe52259a8080c6109a0f5fe18f736743c0a34181f2eae","name":"node_3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","services":["bzz","pss"],"enable_msg_events":true,"port":43603},"up":true}},{"node":{"info":{"id":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","name":"node_b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","enode":"enode://c8fe782387da875269f14c7cd4bb3380d51b007537929342fbbdc7ea61b444f205d4e3bc17b6fd54daf1f730ce4aaca7e4af914aff70e0f3dbb2e8edabb226a1@127.0.0.1:0","enr":"0xf88fb840a624988c579ed3e88f99fb8ca769e17361f6331458d1424eff6108f9c6b1152a56461c35819897506a2c1c17c8d17c05b4e88113489bfa3ec2b477dc8e29997e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c8fe782387da875269f14c7cd4bb3380d51b007537929342fbbdc7ea61b444f2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uSpxpPw3HgWWU4p/sqM+hTKcOcRAnJl5jZMYvCY6BKE=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b92a71\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0218 2a22 3cb1 | 65 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n001 4 e55d dc97 d6ff c3a1 | 30 db08 (0) dfae (0) dc97 (0) d224 (0)\n002 7 82f0 9a92 9d3c 9e02 | 16 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n003 5 a75a a085 a2ba afa3 | 9 aebd (0) ae67 (0) afa3 (0) ad0d (0)\n004 5 b486 b70e b16d b2b9 | 5 b16d (0) b2b9 (0) b381 (0) b486 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 2 b8e1 b841 | 2 b8e1 (0) b841 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","private_key":"6c47e1823351c4f8273293dc991f5d3e47a310824dc99d1d52beef8c89294f01","name":"node_b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","services":["bzz","pss"],"enable_msg_events":true,"port":42797},"up":true}},{"node":{"info":{"id":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","name":"node_2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","enode":"enode://a7c716f7518d16f027fc0d58cc55ab8ae2162f10c0cf5d81c251ca7871aa0987c94ba79fbe53061f70754735133653680cec4e97749c0ece47ae3d0087d943d4@127.0.0.1:0","enr":"0xf88fb84080004a46ab4e22a502d41f7bfe521c7b28973328433a5a30cba401e5f2fe9a1c100aecae60a1cc71aaac717ef8f08b2e07149090f6be981f06b7f4aa3a2bf7d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a7c716f7518d16f027fc0d58cc55ab8ae2162f10c0cf5d81c251ca7871aa0987","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KiLb7nGg7yfIQCIdtKWS1tyPFxr+2GX/gUo31jOj6qk=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2a22db\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 9d3c 89c8 a085 b92a | 63 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n001 6 7639 7355 734e 4b24 | 38 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n002 12 1929 13bc 109e 0ab9 | 15 0ff6 (0) 0bcf (0) 0ab9 (0) 06b9 (0)\n003 5 372d 38ab 39db 3e56 | 6 372d (0) 39db (0) 38ab (0) 3e56 (0)\n============ DEPTH: 4 ==========================================\n004 4 2459 2434 26d1 213b | 4 213b (0) 2459 (0) 2434 (0) 26d1 (0)\n005 0 | 0\n006 1 286a | 1 286a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","private_key":"983e054d5c73ca85071b2217c801a3085251fb1b921de91548a7a6a233b24777","name":"node_2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","services":["bzz","pss"],"enable_msg_events":true,"port":46129},"up":true}},{"node":{"info":{"id":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","name":"node_c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","enode":"enode://7defcbf17d10e9ee01953d449616f3699518c4d3585397ff9bc8593c072c9a6b812acfd3433a4089f86c780620500a11b9e3e2801b235000453c067ad2311f82@127.0.0.1:0","enr":"0xf88fb840de5af3f26f6196388d0546896aa7bf5ac6fc698d19f254306f9dc81a408a11586b063e732170349d2f8894e5ae2b69572727cb59a416373c82b651eca0cb6c580183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027defcbf17d10e9ee01953d449616f3699518c4d3585397ff9bc8593c072c9a6b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"w6GzAb8Yf9gyaDEZfZOgJmrAzIKHuQCGMSQOK+yc8zc=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c3a1b3\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 7dc5 757a 667e 6982 | 65 41b9 (0) 419a (0) 4167 (0) 47c3 (0)\n001 7 a75a b381 b92a 82f0 | 33 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n002 7 f5c4 f74e ea0e ed32 | 15 f360 (0) f361 (0) f74e (0) f410 (0)\n003 5 dfae dc97 d6ff d224 | 6 db08 (0) dc97 (0) dfae (0) d224 (0)\n============ DEPTH: 4 ==========================================\n004 7 c8e5 ca03 cbc5 cdcd | 7 c8e5 (0) ca03 (0) cbc5 (0) cdcd (0)\n005 0 | 0\n006 1 c181 | 1 c181 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","private_key":"484569ae37b3c147f07f84fa525f767a19cb38f2839bdc5ea2c5e66a29a71514","name":"node_c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","services":["bzz","pss"],"enable_msg_events":true,"port":40743},"up":true}},{"node":{"info":{"id":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","name":"node_e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","enode":"enode://9bf89be750b3f7b410f5c7f487664a2e0984a1869ab3028316d121edb1de9c7d0044a57a07671607f39b16c19b4afd6bb65be16f70a2edda4a6c8cfef676f9e7@127.0.0.1:0","enr":"0xf88fb8407f93d5d7b618515bd5cba4bb810d1e7c011dcd28c79b7a11da77ca28ff0159924f52b0a9855f06e431c27bfc00244284259f11bcc2db35e6f81fa2d3e1901f6e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039bf89be750b3f7b410f5c7f487664a2e0984a1869ab3028316d121edb1de9c7d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5V2M2355QLEZKeflyUnva+t5mOUYCh8KPAv2Gu858bg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e55d8c\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 0390 13bc 1929 6ecb | 65 47c3 (0) 41b9 (0) 419a (0) 4167 (0)\n001 10 afa3 ae67 b92a b841 | 33 b16d (0) b2b9 (0) b381 (0) b486 (0)\n002 5 db08 dfae d0f3 cfbb | 15 db08 (0) dfae (0) dc97 (0) d224 (0)\n003 3 f361 f74e f5c4 | 5 f360 (0) f361 (0) f74e (0) f410 (0)\n004 4 ebca ea0e ed32 edc8 | 5 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n============ DEPTH: 5 ==========================================\n005 3 e16b e0b1 e0ea | 3 e0ea (0) e0b1 (0) e16b (0)\n006 1 e77f | 1 e77f (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","private_key":"70bfa2dd7936c527af87ad8ba7b3d514378ae9415b80790afbeb8c145ef60da3","name":"node_e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","services":["bzz","pss"],"enable_msg_events":true,"port":40869},"up":true}},{"node":{"info":{"id":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","name":"node_895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","enode":"enode://bdad63bb5585a3b586e639b7f3a5a588a466508ceda1e479e1a9b680bf7306e84cff0f49d32225c68a8e8c4ce351565f80823ea4eb59625cfa0f4e4a4c778940@127.0.0.1:0","enr":"0xf88fb840cf3575b7f89341293c93e42a94e09971765ed95f6b2e7b14e280dbe9f820d785440bcb6c7546cd319062f61ac1ccf8d316d6e62e604ccbdf856585b699e3d0b60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bdad63bb5585a3b586e639b7f3a5a588a466508ceda1e479e1a9b680bf7306e8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iVvc0gDMTX7Fwk8XItCo6+3aeLeM3xzMjCKpgZgPV4Y=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 895bdc\npopulation: 37 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 0ab9 0bcf 018a 026d | 65 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n001 8 d6ff d0f3 d224 dc97 | 30 db08 (0) dfae (0) dc97 (0) d224 (0)\n002 6 b8e1 ad0d afa3 a75a | 17 b16d (0) b2b9 (0) b381 (0) b486 (0)\n003 5 9a92 9e02 9d3c 9626 | 8 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n004 3 86ca 83dc 82f0 | 3 86ca (0) 83dc (0) 82f0 (0)\n005 1 8cf9 | 1 8cf9 (0)\n============ DEPTH: 6 ==========================================\n006 2 8b76 8be4 | 2 8be4 (0) 8b76 (0)\n007 0 | 0\n008 1 89c8 | 1 89c8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","private_key":"dcb06c1695510d0ebdf81de665b6c30b1bc31fcffcdeb5a1d949119e3323d009","name":"node_895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","services":["bzz","pss"],"enable_msg_events":true,"port":36481},"up":true}},{"node":{"info":{"id":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","name":"node_a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","enode":"enode://200a1baeeb12eaff4957c04f960bc136c15c981b4ed91f50b6a3cd72f60ce1a9670bf2aada7c27159b884f728294220ddf2f7ab7c25bda08e51af6e0d2ac59cc@127.0.0.1:0","enr":"0xf88fb8409ac56bef876fd1aa5cf1e9dc9750872b7b31e85abe3b3bd7bcbe11b451f4a4a41eca4dab1ec561a4e4e38d69fcf6daf208f8b8a3ffae014bd67e43b9be5e10800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102200a1baeeb12eaff4957c04f960bc136c15c981b4ed91f50b6a3cd72f60ce1a9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"orq+SUEK4Ae8Qf8rfer3Ce2Eni9pZmzlqudqO3H0cIE=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a2babe\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0bcf 109e 13bc 1929 | 65 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n001 2 e0b1 d6ff | 30 f360 (0) f361 (0) f74e (0) f410 (0)\n002 5 83dc 82f0 8cf9 8b76 | 16 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n003 5 b70e b381 b2b9 b8e1 | 8 b16d (0) b2b9 (0) b381 (0) b486 (0)\n004 4 ad0d afa3 aebd ae67 | 4 aebd (0) ae67 (0) afa3 (0) ad0d (0)\n005 2 a7a6 a75a | 2 a7a6 (0) a75a (0)\n============ DEPTH: 6 ==========================================\n006 1 a085 | 1 a085 (0)\n007 1 a320 | 1 a320 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","private_key":"d2327e3f9e0f7d479fd3a5ab6629e91631a909dcea933881e6981e4d8f65f4b1","name":"node_a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","services":["bzz","pss"],"enable_msg_events":true,"port":42677},"up":true}},{"node":{"info":{"id":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","name":"node_8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","enode":"enode://81d1c6b434a911a8540ccca92dc7eb5f6af3c9f8e8661331630b961b9beebbc774961f8c9b6764495cd176cdc7a2234e00b1fe437cf0e0e62ffdebffe804300b@127.0.0.1:0","enr":"0xf88fb840282e7b8b2c9fe6bfd46ecfa1ef9c05c0ce8aa561d6727b69e6112e3458aa1bbd1e729fe940bc2ed0879a33afffe03e9bb6645ef7c6ed882f20af71d138c235810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10381d1c6b434a911a8540ccca92dc7eb5f6af3c9f8e8661331630b961b9beebbc7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jPlXv5WmKcYMMdvP517MoUmoHHYfizSFiwT4MY5cdL0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8cf957\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 7b92 018a 026d 0ab9 | 65 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n001 11 cec3 f361 f5c4 e0ea | 30 f360 (0) f361 (0) f74e (0) f410 (0)\n002 6 b8e1 ad0d afa3 a75a | 17 b841 (0) b8e1 (0) b92a (0) b16d (0)\n003 4 9626 9a92 9d3c 9e02 | 8 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n004 3 86ca 83dc 82f0 | 3 86ca (0) 83dc (0) 82f0 (0)\n============ DEPTH: 5 ==========================================\n005 4 8be4 8b76 895b 89c8 | 4 8be4 (0) 8b76 (0) 89c8 (0) 895b (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","private_key":"7cbecf45c8af825ad55165ca14a5390dc79b63f7d21abc54c8a3baadb93b0050","name":"node_8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","services":["bzz","pss"],"enable_msg_events":true,"port":38617},"up":true}},{"node":{"info":{"id":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","name":"node_9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","enode":"enode://1f9a4a0c1be2d3dc6cbe8fe451547748f181485a135d11125e490c4554edcb2a9c3915bce098a7a2d347392cbed94f9329000fa47ab5bd6611ae18f398feadf2@127.0.0.1:0","enr":"0xf88fb84073df5e59956667788fb2912ac8df533ca51baf49e3d0ab14bd339845667a29bd706b855764a6ae9a2143bd63225a6a73a0e252aaf849de6071447977ffc144f60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021f9a4a0c1be2d3dc6cbe8fe451547748f181485a135d11125e490c4554edcb2a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ngLFOEYCpU6QDPpG1Zh7d/FudMunRayFD8raAcevkAQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9e02c5\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 39db 2434 018a 026d | 65 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n001 3 f361 c3a1 d6ff | 30 f360 (0) f361 (0) f74e (0) f410 (0)\n002 6 a320 ad0d afa3 b70e | 17 b841 (0) b8e1 (0) b92a (0) b16d (0)\n003 6 83dc 82f0 8b76 895b | 8 86ca (0) 83dc (0) 82f0 (0) 8be4 (0)\n004 4 91eb 92a1 957d 9626 | 4 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n005 1 9a92 | 1 9a92 (0)\n============ DEPTH: 6 ==========================================\n006 1 9d3c | 1 9d3c (0)\n007 0 | 0\n008 1 9ee7 | 1 9ee7 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","private_key":"a54d320f74dbd164c2e978d7a70edcb4a6c116debd0e98aeaafdf18a0caf5810","name":"node_9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","services":["bzz","pss"],"enable_msg_events":true,"port":45685},"up":true}},{"node":{"info":{"id":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","name":"node_539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","enode":"enode://79b76c3f04c3fe8a4d8e15ba7832fa0e0cb07d122736b0ddd187f783af4f63fd91451132a818a91e2aaee43e9e6b4aace8e002ee76166005b9a2fe9553283f1a@127.0.0.1:0","enr":"0xf88fb840267a7455083f7f198cb282b60318c8fc45fa5d66c3aa1d1b7cea64ea5940f4dd140ae387c995877ba388099faf98c6e647e66c692c3a237bcb78321b457f26ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10279b76c3f04c3fe8a4d8e15ba7832fa0e0cb07d122736b0ddd187f783af4f63fd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"U535AtQtyZfGsOJNFq1otUxVfVa0HJcqMg1XYy2/vjw=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 539df9\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 dc97 e55d b2b9 9e02 | 63 f360 (0) f361 (0) f74e (0) f410 (0)\n001 3 2a22 372d 38ab | 27 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n002 12 667e 6728 6742 6ecb | 23 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n003 8 47c3 4167 419a 41b9 | 8 4167 (0) 41b9 (0) 419a (0) 47c3 (0)\n004 3 5d60 5a01 5abc | 3 5d60 (0) 5a01 (0) 5abc (0)\n============ DEPTH: 5 ==========================================\n005 2 5776 558e | 2 5776 (0) 558e (0)\n006 1 517a | 1 517a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","private_key":"af360c6fe75b63f4d38464596d6a86faff221f4c287bfde6f06204cdadaaa7f8","name":"node_539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","services":["bzz","pss"],"enable_msg_events":true,"port":46373},"up":true}},{"node":{"info":{"id":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","name":"node_38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","enode":"enode://b59c9de0746cb3c3d75539274cc8216e4fe0ba577923dae16c2c38b2459f36f451764f8027ec684def5e6452ba84a2afc62f3729d3889e9c65307ecb10ae0496@127.0.0.1:0","enr":"0xf88fb840e51c952cba32bef6455c273e05c4252fc1e13ec6b7deee195982262b858831046faa9872c55686e7dc575653a070c1ec4d282cf32c09f2426240fa8250585f870183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b59c9de0746cb3c3d75539274cc8216e4fe0ba577923dae16c2c38b2459f36f4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OKs9e9+yk7iBIkBMt8ULX7iQznZkwHXalVhVV6QwxAM=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 38ab3d\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 d0f3 a085 ae67 b70e | 63 f410 (0) f5c4 (0) f74e (0) f360 (0)\n001 4 7b92 7355 5abc 539d | 38 7f87 (0) 7fbc (0) 7dc5 (0) 7cf4 (0)\n002 6 0bcf 0ab9 0506 0218 | 15 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n003 4 2a22 2459 2434 213b | 6 213b (0) 26d1 (0) 2459 (0) 2434 (0)\n004 1 372d | 1 372d (0)\n============ DEPTH: 5 ==========================================\n005 3 3ee4 3e56 3cb1 | 3 3e56 (0) 3ee4 (0) 3cb1 (0)\n006 0 | 0\n007 1 39db | 1 39db (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","private_key":"90080ed19445f25b61f6f51c31c7b5f0901bcc8b4d2af5754eb6200898460782","name":"node_38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","services":["bzz","pss"],"enable_msg_events":true,"port":44377},"up":true}},{"node":{"info":{"id":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","name":"node_b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","enode":"enode://8908b549b763c33a6d64dd794edf15467674ab7744abc8dadfe0a9ffe7edb0f232d68be0ce2cab3a1f1f4c1eb5bc265d2b5d241edb189daedf12f94294f83ece@127.0.0.1:0","enr":"0xf88fb840bd4af476eac6bae70a9bf4b3556d02f449fe1467ed3cb54cea8bcc7e51c1579a6949b225f34052028d4a72b4c7f804c49f2e12d4894046aedad89e4ffbf78d380183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028908b549b763c33a6d64dd794edf15467674ab7744abc8dadfe0a9ffe7edb0f2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tw6W8BrIlH0t5jIEEq4zEDFsq6ZcJxCK0WsvIAQlW+Q=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b70e96\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6e5c 0218 109e 38ab | 65 7fbc (0) 7f87 (0) 7cf4 (0) 7dc5 (0)\n001 5 db08 f5c4 f361 e55d | 30 f360 (0) f361 (0) f410 (0) f5c4 (0)\n002 7 91eb 9a92 9d3c 9e02 | 16 86ca (0) 82f0 (0) 83dc (0) 8be4 (0)\n003 8 a2ba a320 a085 a75a | 9 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n004 2 b8e1 b92a | 3 b841 (0) b8e1 (0) b92a (0)\n============ DEPTH: 5 ==========================================\n005 3 b2b9 b381 b16d | 3 b2b9 (0) b381 (0) b16d (0)\n006 1 b486 | 1 b486 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","private_key":"356f88370186e91459aaa1a01150f9a0a07c6ba89835476be5ee3177f2456a90","name":"node_b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","services":["bzz","pss"],"enable_msg_events":true,"port":36567},"up":true}},{"node":{"info":{"id":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","name":"node_6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","enode":"enode://aa49209c98c2acfa233719cd8ab7c559b1a4024986f005f61450405205031b502c13b39557ac3df31f081a1bcc3cf8de29357f78400a37d679e179bd1f15b597@127.0.0.1:0","enr":"0xf88fb840cfbea5c6873c85a8951ee4931c303f2eff6e82813d5e4d86c25d48a82b1a49e341d8b0c006a2036a8eb6cc687fdb9c38595d982c2da6d56ff80606137b1fb5090183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103aa49209c98c2acfa233719cd8ab7c559b1a4024986f005f61450405205031b50","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"blwhOi21fq8uHhrMNBxy76uJsOQrbNGNtPmawa8VHWU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6e5c21\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 d6ff a320 b486 b70e | 63 f360 (0) f361 (0) f410 (0) f5c4 (0)\n001 3 3cb1 0218 109e | 27 2459 (0) 2434 (0) 26d1 (0) 213b (0)\n002 5 41b9 4b24 539d 5a01 | 15 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n003 7 7f87 7dc5 7b92 78cb | 12 78cb (0) 7b92 (0) 7fbc (0) 7f87 (0)\n004 3 667e 6728 645b | 5 6210 (0) 645b (0) 6742 (0) 6728 (0)\n005 1 6982 | 1 6982 (0)\n============ DEPTH: 6 ==========================================\n006 3 6d60 6c82 6c02 | 3 6c82 (0) 6c02 (0) 6d60 (0)\n007 0 | 0\n008 1 6ecb | 1 6ecb (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","private_key":"5f2bdd7f08afe412e3fe6ff84df44e66752bb9b256a47fbc9581d982eadffdd4","name":"node_6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","services":["bzz","pss"],"enable_msg_events":true,"port":33895},"up":true}},{"node":{"info":{"id":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","name":"node_772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","enode":"enode://31b2a3729f35e5f4dd4e1ee95642c5672d2770f7624b097db81350287a180c1e49fff42d6c63128a806950d4128d494b8268a2b96fde995d89607b612ecec782@127.0.0.1:0","enr":"0xf88fb8404462b449bcf2410c7f21823b369db50987ba625ab6e4a803cdc4559caf61851a17783540a154b7d6f3a1d7ab7d08cd0851226dbccd517da51f555ad7c40bf5540183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10231b2a3729f35e5f4dd4e1ee95642c5672d2770f7624b097db81350287a180c1e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dy5MgNEo3rUq3wJKDrb+m76hyDNR7ZP1X0kM1eXGkmA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 772e4c\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b486 d6ff f74e ea0e | 63 f360 (0) f361 (0) f410 (0) f5c4 (0)\n001 2 109e 0ab9 | 27 286a (0) 2a22 (0) 2459 (0) 2434 (0)\n002 8 4a18 41b9 5d60 5abc | 15 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n003 6 667e 645b 6d60 6c02 | 11 6210 (0) 645b (0) 6742 (0) 6728 (0)\n004 6 7f87 7fbc 7dc5 7cf4 | 6 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n005 3 73b8 734e 7355 | 3 73b8 (0) 7355 (0) 734e (0)\n============ DEPTH: 6 ==========================================\n006 1 757a | 1 757a (0)\n007 1 7639 | 1 7639 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","private_key":"8efd5800758dcfdbeb2cf4d84f54e399c106e2c731f6685f720a2eea4c481817","name":"node_772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","services":["bzz","pss"],"enable_msg_events":true,"port":37837},"up":true}},{"node":{"info":{"id":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","name":"node_0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","enode":"enode://76fd52545682d9fdd0ca8f38321e9b37b84ca6a997956e0069744d0cb0bccb1a617f66c8eafe8dd5ed392d7e9c2efa928347aefe1c976201f3abd3e7a54bfb88@127.0.0.1:0","enr":"0xf88fb84097a8f0f039558e79fbee580fbec1d41e14fbba47472a75f290402f4076cad6492048d5e3a00ebc8742f93aa523bf57f954a31dda07673ea76280d76e01e4c5190183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10276fd52545682d9fdd0ca8f38321e9b37b84ca6a997956e0069744d0cb0bccb1a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CrmEXCiQsKZKPlkyJBJF4AuBe3iAlPnuSPhvgLcmT+o=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0ab984\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 ea60 e16b 91eb 9626 | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 6 5776 4b24 667e 7b92 | 38 4167 (0) 41b9 (0) 419a (0) 47c3 (0)\n002 6 2a22 2434 3ee4 3cb1 | 12 26d1 (0) 2459 (0) 2434 (0) 213b (0)\n003 4 13bc 109e 1929 1be4 | 4 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n004 8 06b9 0506 0427 0390 | 8 06b9 (0) 0427 (0) 0506 (0) 018a (0)\n============ DEPTH: 5 ==========================================\n005 1 0ff6 | 1 0ff6 (0)\n006 0 | 0\n007 1 0bcf | 1 0bcf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","private_key":"846db675d9c428c99df430ba38d3d3faf984abbe2f55df43af95bb096f86e896","name":"node_0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","services":["bzz","pss"],"enable_msg_events":true,"port":34333},"up":true}},{"node":{"info":{"id":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","name":"node_39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","enode":"enode://6ccc67d35840435af60a0430406169efc0037b4828edb5cd76e9bd5ac1e5aca65dd7a77219313f8a6c26f1ca7f5df41afd47dc389720d30b19e6979b52954c32@127.0.0.1:0","enr":"0xf88fb84055b20a8008a1872c0413f0ceea3a6a7121cc4e0dabef2b310f5bc43817bff888247a073d6946b7988936af22a7d1639fa5f109db9887292d255e6e771f8cda810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026ccc67d35840435af60a0430406169efc0037b4828edb5cd76e9bd5ac1e5aca6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OdvVRiyQ2sdfSdmveZaEWUO76Sl1TvgSXu5/WnY+ne8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 39dbd5\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 ae67 a085 8cf9 89c8 | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 5 7355 48b6 41b9 558e | 38 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n002 5 1929 0506 0390 0bcf | 15 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n003 4 2a22 213b 26d1 2434 | 6 26d1 (0) 2459 (0) 2434 (0) 213b (0)\n004 1 372d | 1 372d (0)\n============ DEPTH: 5 ==========================================\n005 3 3e56 3ee4 3cb1 | 3 3e56 (0) 3ee4 (0) 3cb1 (0)\n006 0 | 0\n007 1 38ab | 1 38ab (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","private_key":"791b9811412b1579e2e6d5f9fe6ddc88ce78a499b261b22e8817e02440f9e875","name":"node_39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","services":["bzz","pss"],"enable_msg_events":true,"port":36547},"up":true}},{"node":{"info":{"id":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","name":"node_d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","enode":"enode://72cbbeef82764d1b224a5af28e3e60dda17a49ccfe5b92cb84263bec1524623133bc14c9d0c60f36575f469f986b97d0bd09896ad8a7a068f1d52c4000c0d8d8@127.0.0.1:0","enr":"0xf88fb840ffaffd6544c636f742b7379273dcff32de002122a72f3ec80a94c93dd7f0347b5c5ab37d8762f17cce7877ddd4a925cb05ac0c19a51a71330445ff05ad5969450183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10272cbbeef82764d1b224a5af28e3e60dda17a49ccfe5b92cb84263bec15246231","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1v+3/SZo6bexM72RRBVvRzYZHvDW5ysHJ1l4LYOTHyI=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d6ffb7\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 6e5c 6d60 6c02 645b | 65 7b92 (0) 78cb (0) 7f87 (0) 7fbc (0)\n001 6 b16d b92a a75a a2ba | 33 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n002 5 f5c4 f74e ea0e ed32 | 15 f360 (0) f361 (0) f410 (0) f5c4 (0)\n003 4 c3a1 ca03 cdcd cfbb | 9 c8e5 (0) ca03 (0) cbc5 (0) cdcd (0)\n004 3 db08 dfae dc97 | 3 db08 (0) dfae (0) dc97 (0)\n============ DEPTH: 5 ==========================================\n005 2 d224 d0f3 | 2 d224 (0) d0f3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","private_key":"7d3834d39e62cf1e8548683eec363e19d020ce2f4971d98743bc58ffe1c91611","name":"node_d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","services":["bzz","pss"],"enable_msg_events":true,"port":42483},"up":true}},{"node":{"info":{"id":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","name":"node_e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","enode":"enode://c7e6fc03f7b10c7235bdd7ae9fd28ea2f96d514a90ddb54312b6f45c15873e47227b36c1c4f9d29e28b16527dc7bf154702a6ec4352a8d7eab15b325c2aba1b6@127.0.0.1:0","enr":"0xf88fb84024831e3097e6342c87a066a5ae145abdf8366f26e351a7a8d3f22d5e5802c8e963e13a456db9f0b08665eb9108b71d23537dd415c9dde62127fc947b89158b630183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c7e6fc03f7b10c7235bdd7ae9fd28ea2f96d514a90ddb54312b6f45c15873e47","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4LHE61tbTfwiNE7mXLlxbOyzjcyACZeT8gZBiE6uSFQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e0b1c4\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 0390 13bc 1be4 1929 | 65 7fbc (0) 7f87 (0) 7cf4 (0) 7dc5 (0)\n001 3 83dc a2ba a320 | 33 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n002 8 c3a1 c181 cdcd cfbb | 15 c8e5 (0) cbc5 (0) ca03 (0) cdcd (0)\n003 3 f361 f5c4 f74e | 5 f360 (0) f361 (0) f410 (0) f5c4 (0)\n004 5 ed32 edc8 ebca ea60 | 5 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n005 2 e77f e55d | 2 e77f (0) e55d (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 e16b | 1 e16b (0)\n008 0 | 0\n009 1 e0ea | 1 e0ea (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","private_key":"42fe12311467a8adbbfb209a06319e950148da4433177621af050a2a0b74e82c","name":"node_e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","services":["bzz","pss"],"enable_msg_events":true,"port":45685},"up":true}},{"node":{"info":{"id":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","name":"node_5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","enode":"enode://019ddc346857752f742b93cabbfc6b3c47c958ee5ad67be36c3c2f8e5acfa786f70344ce1d9b34c190ce414ca4af09b467ca8fdde6fcf4c8b09696c76c45b520@127.0.0.1:0","enr":"0xf88fb840153a0d6eeb5dc102fd9f75d0b8c51c7f01252e5cf45d6a4c5f3b65d4bd90a4d17affa644ffc8fca2d95c9ed93c70e093431ce452acb11d876cd55ca5dd802dba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102019ddc346857752f742b93cabbfc6b3c47c958ee5ad67be36c3c2f8e5acfa786","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WryW9Pp4gS22+3EP1CTdR0FF9+XQC0ztxTc7TFL0LPU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5abc96\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 dc97 e0ea e0b1 89c8 | 63 c8e5 (0) ca03 (0) cbc5 (0) cdcd (0)\n001 3 372d 39db 38ab | 27 213b (0) 26d1 (0) 2459 (0) 2434 (0)\n002 12 78cb 734e 7355 772e | 23 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n003 4 4b24 4a18 48b6 41b9 | 8 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n004 4 558e 5776 517a 539d | 4 517a (0) 539d (0) 5776 (0) 558e (0)\n============ DEPTH: 5 ==========================================\n005 1 5d60 | 1 5d60 (0)\n006 0 | 0\n007 0 | 0\n008 1 5a01 | 1 5a01 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","private_key":"4e526a63f698dcdb8bb4a8c1a4a54fb1c3ba10476f285012af7137b504bdc215","name":"node_5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","services":["bzz","pss"],"enable_msg_events":true,"port":34327},"up":true}},{"node":{"info":{"id":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","name":"node_89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","enode":"enode://577ed924a2a73d22ee8998f00a82acbe7ce1e410878d5daa4d988ead6ad2cf4f385217ff0580f3dc311e0d8f79040dcb3e7f2b765f5e89fab86703f153374ace@127.0.0.1:0","enr":"0xf88fb8400137468cd822d505da53b9784f8a1606bb49e810dc372191a35921c562eb016d27a5cfcb4511315e38eefce0dfd07c703aa57dadbd6c14d29c0a504607c089900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102577ed924a2a73d22ee8998f00a82acbe7ce1e410878d5daa4d988ead6ad2cf4f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iciD1qhUcr2jKGZ+P9gFxwh2vFgspnY6uXrmNrF3K+Q=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 89c883\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 018a 026d 39db 3cb1 | 65 213b (0) 26d1 (0) 2459 (0) 2434 (0)\n001 7 ea0e ea60 f74e f5c4 | 30 f360 (0) f361 (0) f410 (0) f5c4 (0)\n002 5 ad0d a320 a75a b8e1 | 17 b92a (0) b841 (0) b8e1 (0) b16d (0)\n003 3 91eb 9626 9e02 | 8 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n004 2 82f0 83dc | 3 86ca (0) 82f0 (0) 83dc (0)\n005 1 8cf9 | 1 8cf9 (0)\n============ DEPTH: 6 ==========================================\n006 2 8be4 8b76 | 2 8be4 (0) 8b76 (0)\n007 0 | 0\n008 1 895b | 1 895b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","private_key":"17570e86447615758ea636804ecb65f791a12a421e904e723fbec9ab52e466f6","name":"node_89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","services":["bzz","pss"],"enable_msg_events":true,"port":42067},"up":true}},{"node":{"info":{"id":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","name":"node_dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","enode":"enode://0563ccfaae48ee129eb27f5c779f0c8349a22919de381a54c9a4f704070532a72d2f1926c6767afba2f9b4de908bf854498f5800374956e8c66ea2346df662c1@127.0.0.1:0","enr":"0xf88fb840fba3f24508ab6de5f8772b5dd896fc9b869cb17c48af0bc23b3c14145ef2aa0f76f8eb05025bcc10df608aa7979bda2203c12a4b429d308ce15aa4afabe8f1c50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030563ccfaae48ee129eb27f5c779f0c8349a22919de381a54c9a4f704070532a7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3JfBoAGbSCoEi40VlB3+TDwaNEPZste0BGNwvISn5W8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dc97c1\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 6728 667e 6d60 6c02 | 65 5d60 (0) 5abc (0) 5a01 (0) 517a (0)\n001 4 a75a b92a 895b 89c8 | 33 b92a (0) b841 (0) b8e1 (0) b381 (0)\n002 3 f74e f361 e0ea | 15 f360 (0) f361 (0) f410 (0) f5c4 (0)\n003 4 c181 c3a1 cdcd cfbb | 9 c8e5 (0) ca03 (0) cbc5 (0) cdcd (0)\n004 3 d224 d0f3 d6ff | 3 d224 (0) d0f3 (0) d6ff (0)\n============ DEPTH: 5 ==========================================\n005 1 db08 | 1 db08 (0)\n006 1 dfae | 1 dfae (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","private_key":"9599415f62de56a6422afea8e7ebbc2b460cd56cc0f7b1fc73e96b6c8857e728","name":"node_dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","services":["bzz","pss"],"enable_msg_events":true,"port":41683},"up":true}},{"node":{"info":{"id":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","name":"node_e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","enode":"enode://bfb412d3f9e09403659416f8864d6a739bc396ae53bc9e2f6cb30239814538e65dbbf0339670dac268002695d39b8eb59b6c3a51420aa827ee75dce465a22669@127.0.0.1:0","enr":"0xf88fb8402b1a38e980290999c2f075d625bccda4a9614d6097ae9733957386a11a9be0804a2f004dc1383d9b4a35162a400684675d560cd72ec18d107d08e4d5cad01f490183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bfb412d3f9e09403659416f8864d6a739bc396ae53bc9e2f6cb30239814538e6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4OpXXQ4u+ii8UfSdHiwkGWoZbaOzGW86Wial4xCAmvU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e0ea57\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 7dc5 6ecb 6728 517a | 65 5d60 (0) 5abc (0) 5a01 (0) 517a (0)\n001 5 957d 8cf9 83dc ae67 | 33 b92a (0) b841 (0) b8e1 (0) b381 (0)\n002 6 cdcd cfbb c181 db08 | 15 c8e5 (0) cbc5 (0) ca03 (0) cdcd (0)\n003 2 f361 f74e | 5 f360 (0) f361 (0) f410 (0) f5c4 (0)\n004 4 ed32 edc8 ea60 ea0e | 5 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n005 2 e77f e55d | 2 e77f (0) e55d (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 e16b | 1 e16b (0)\n008 0 | 0\n009 1 e0b1 | 1 e0b1 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","private_key":"50f25d60500eb49b33f8855dbff5167ed90ae947f01800ca6e143886d4e2129e","name":"node_e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","services":["bzz","pss"],"enable_msg_events":true,"port":44889},"up":true}},{"node":{"info":{"id":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","name":"node_021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","enode":"enode://abd8116f367c9d2e1d15debf2ceadc5df783db3523482238cc8b10c5a61df20eee4a6ca29b99d2e09094fec869b212002aa3e56708b4d7c535f0edb00f6c6abf@127.0.0.1:0","enr":"0xf88fb840c3192e46a155becce8c64f9a7cce7f0bf743a33baf0b74dbde83751433990fe5215de0e3947206cfab59584d2e93f3075825686d26ddd6b4a7cca931dbec15f80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103abd8116f367c9d2e1d15debf2ceadc5df783db3523482238cc8b10c5a61df20e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AhgRpnV73N0voPtoQB3+AJ1ajhKZWM0wT7Qs9R3F0dM=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 021811\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 9626 b70e b486 b16d | 63 b92a (0) b841 (0) b8e1 (0) b2b9 (0)\n001 4 4b24 558e 757a 6e5c | 38 7cf4 (0) 7dc5 (0) 7fbc (0) 7f87 (0)\n002 7 2a22 26d1 2434 213b | 12 213b (0) 26d1 (0) 2459 (0) 2434 (0)\n003 4 1be4 1929 13bc 109e | 4 1be4 (0) 1929 (0) 13bc (0) 109e (0)\n004 3 0ff6 0bcf 0ab9 | 3 0ff6 (0) 0bcf (0) 0ab9 (0)\n005 3 06b9 0427 0506 | 3 06b9 (0) 0427 (0) 0506 (0)\n006 1 018a | 1 018a (0)\n007 1 0390 | 1 0390 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 2 027f 026d | 2 027f (0) 026d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","private_key":"f24fd4a4e7b3587f483542c46fe764f2846e84158cfc2282188fac740cb9939f","name":"node_021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","services":["bzz","pss"],"enable_msg_events":true,"port":38993},"up":true}},{"node":{"info":{"id":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","name":"node_109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","enode":"enode://f4df36e91a014ba253c93cc4a738dbeafed71095b9ad41b0e62616bad9b4f4301acd54ced99e80858045d79da80ac42f6d0d594ce127b880a5838fccc7f93da7@127.0.0.1:0","enr":"0xf88fb840a626a87192ca066e77595198c84a535d734661e1db5553a18cb8b62fbb77b6797af9aad58e1149921f53ec0a226a806dd29f5fa2c3f1f4c0309113f09ad4380c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f4df36e91a014ba253c93cc4a738dbeafed71095b9ad41b0e62616bad9b4f430","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EJ7xfIkBBL/FpIl9UmoK+qjJkcnSE2FgMvMFjQ/rfwA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 109ef1\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 91eb 895b a2ba a085 | 63 b92a (0) b841 (0) b8e1 (0) b2b9 (0)\n001 4 4b24 757a 772e 6e5c | 38 7fbc (0) 7f87 (0) 7cf4 (0) 7dc5 (0)\n002 3 2a22 213b 38ab | 12 286a (0) 2a22 (0) 26d1 (0) 2459 (0)\n003 9 0bcf 0ab9 0506 0427 | 11 0ff6 (0) 0bcf (0) 0ab9 (0) 06b9 (0)\n============ DEPTH: 4 ==========================================\n004 2 1929 1be4 | 2 1be4 (0) 1929 (0)\n005 0 | 0\n006 1 13bc | 1 13bc (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","private_key":"e9e24085b5783d5c7c9c652c4de2009dc89e215530c57e92cc3321481e56a5b4","name":"node_109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","services":["bzz","pss"],"enable_msg_events":true,"port":43049},"up":true}},{"node":{"info":{"id":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","name":"node_ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","enode":"enode://627fb4b3d57ec52bd28b0461d1ad5bd965015b0356be2d0727f9b548907a213a877ae14589528acf227113a87fff774a08eb7ca18e9860c62fc2f08a92941b8b@127.0.0.1:0","enr":"0xf88fb840626a2b83b4c2a20b607631df4b27b8945d07fd0ef4ccfce7f4ad41f83fd72d7931a5938937c2d2c8c99a377c59a782b69f9b5c99fd60f7e2d7d1727fb003eccc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103627fb4b3d57ec52bd28b0461d1ad5bd965015b0356be2d0727f9b548907a213a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7TLXTZvgZJ3h6ya5kVE3/kbsiQxlbJa+Uulmq24u0mA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ed32d7\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6ecb 7dc5 757a 772e | 65 7fbc (0) 7f87 (0) 7cf4 (0) 7dc5 (0)\n001 3 957d 8cf9 8b76 | 33 b16d (0) b2b9 (0) b381 (0) b486 (0)\n002 4 c3a1 cdcd dfae d6ff | 15 c181 (0) c3a1 (0) c8e5 (0) cbc5 (0)\n003 3 f5c4 f74e f361 | 5 f360 (0) f361 (0) f410 (0) f5c4 (0)\n004 5 e55d e77f e16b e0ea | 5 e77f (0) e55d (0) e16b (0) e0ea (0)\n============ DEPTH: 5 ==========================================\n005 3 ebca ea60 ea0e | 3 ebca (0) ea60 (0) ea0e (0)\n006 0 | 0\n007 0 | 0\n008 1 edc8 | 1 edc8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","private_key":"e60060a92fe8c46ac4f8a127abbd9c4d9e36cd927cfe0313a8fc445e8394b94b","name":"node_ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","services":["bzz","pss"],"enable_msg_events":true,"port":42957},"up":true}},{"node":{"info":{"id":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","name":"node_8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","enode":"enode://5552d93b800376a18cd819cd566ae575dedbe4b312bf6130b1c3c5f61d63b0b88680f68f25fb55b72c4fda4a23b178ee3c08e471cbe510bcf6c5c1de2f29cf24@127.0.0.1:0","enr":"0xf88fb840a9d59867b862012cf06f08dc04de0e6cac8ccec89f0305e926bf4a6cb8efcb3a74c771665a71443904b3e60d17b1ee22a23d29ba0a06925d1587f8bd8153e23d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025552d93b800376a18cd819cd566ae575dedbe4b312bf6130b1c3c5f61d63b0b8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"i3YZTxKTCDJMfQBmUw4CysJBDuC6lSgi8OyGbhJGHkQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8b7619\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 018a 39db 2434 213b | 65 7cf4 (0) 7dc5 (0) 7fbc (0) 7f87 (0)\n001 6 c181 cdcd dfae f361 | 30 c181 (0) c3a1 (0) c8e5 (0) ca03 (0)\n002 10 b70e b486 b16d b8e1 | 17 b2b9 (0) b381 (0) b16d (0) b486 (0)\n003 2 9626 9e02 | 8 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n004 3 86ca 82f0 83dc | 3 86ca (0) 82f0 (0) 83dc (0)\n005 1 8cf9 | 1 8cf9 (0)\n============ DEPTH: 6 ==========================================\n006 2 895b 89c8 | 2 895b (0) 89c8 (0)\n007 0 | 0\n008 1 8be4 | 1 8be4 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","private_key":"e322c8c203344ce73e706dae3f4f6f7e500bb780f43fb03a222aacf8adaef519","name":"node_8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","services":["bzz","pss"],"enable_msg_events":true,"port":44125},"up":true}},{"node":{"info":{"id":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","name":"node_f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","enode":"enode://553cba5427fc16ce1f7fcf4b551e79c45f56c2fe6425442401a0d11eeb052ee63de2ce6c5458a79c564e3744bad912c50520c1369f52e0767e09ed40e9993ff8@127.0.0.1:0","enr":"0xf88fb8400139f5b8abcf514eef980efc398f34b1a0d66124a43a20c323ad1fc720ca5c40626fc02a811970e8641b50a20d6b4aca333b145cddf67c6614ee2cfb65b869fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102553cba5427fc16ce1f7fcf4b551e79c45f56c2fe6425442401a0d11eeb052ee6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"907N4Luqe2Uh+yBbWrnqY3kJJ39uHuHTSQ9c0B0PchY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f74ecd\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1be4 772e 5d60 558e | 65 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n001 4 a320 83dc 89c8 8b76 | 33 b2b9 (0) b381 (0) b16d (0) b486 (0)\n002 8 db08 dfae dc97 d6ff | 15 c181 (0) c3a1 (0) c8e5 (0) cbc5 (0)\n003 10 edc8 ed32 ebca ea0e | 10 e77f (0) e55d (0) e16b (0) e0ea (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 2 f361 f360 | 2 f360 (0) f361 (0)\n006 2 f5c4 f410 | 2 f410 (0) f5c4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","private_key":"3e6b050dabdb0eb2468be45fc539a79410db1729eeba39afff4688885dc9b8ef","name":"node_f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","services":["bzz","pss"],"enable_msg_events":true,"port":42027},"up":true}},{"node":{"info":{"id":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","name":"node_a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","enode":"enode://4fd8fe083cbe1905328dfcdefb64a314acbfdec10223d8d960f4b9168ef65580fd762356abcbf5cf995c88f00464d41163bf422cd1d80a6e9f2c6dbea37e12dd@127.0.0.1:0","enr":"0xf88fb8406f2350c3165bd627d97c3623d2fb90d4ded4cd6dd1aa554d6c4c4e017a729e743f44b2ec69aaed61a87bdebb7e1c67143b222f796b4b902b3b820dca88419b690183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034fd8fe083cbe1905328dfcdefb64a314acbfdec10223d8d960f4b9168ef65580","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oyBcHE+bcoFPDbaOiI48fviPJ8aB7Q1zHd5fCZn5LMw=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a3205c\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6e5c 645b | 65 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n001 4 e77f e0b1 ea0e f74e | 30 c181 (0) c3a1 (0) c8e5 (0) ca03 (0)\n002 8 8b76 89c8 895b 8cf9 | 16 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n003 4 b8e1 b16d b70e b486 | 8 b381 (0) b2b9 (0) b16d (0) b486 (0)\n004 3 ad0d aebd ae67 | 4 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n005 2 a7a6 a75a | 2 a7a6 (0) a75a (0)\n============ DEPTH: 6 ==========================================\n006 1 a085 | 1 a085 (0)\n007 1 a2ba | 1 a2ba (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","private_key":"ab56cc2e159cf59b59a2b8abae5e8c927fd16d7844425b0c048bdf0c1c03f561","name":"node_a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","services":["bzz","pss"],"enable_msg_events":true,"port":38749},"up":true}},{"node":{"info":{"id":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","name":"node_ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","enode":"enode://27bd511098d142435c42d80c87870c55f35ecba4851735487a8148f63556be851405b124502231ff210e6674abc11534f6c8d43d28611d0564497cff8b0bbdb2@127.0.0.1:0","enr":"0xf88fb840d7c884944fcfd5f801f1a40862426a14631c18017bf1e8679ce01d826fb6b98e2a2a8e3e2ce8c35859ef1bdf9e6bb1ddc6717e5bd286dc5436a440b6066608200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10227bd511098d142435c42d80c87870c55f35ecba4851735487a8148f63556be85","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6g4d1B/gQrCfJzyY8CEolJz1Vh0g3ASz1COWHv7VIyc=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ea0e1d\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 5d60 6ecb 78cb 7f87 | 65 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n001 4 957d 89c8 8cf9 a320 | 33 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n002 5 db08 dfae d6ff c3a1 | 15 c181 (0) c3a1 (0) c8e5 (0) ca03 (0)\n003 3 f5c4 f74e f361 | 5 f360 (0) f361 (0) f410 (0) f5c4 (0)\n004 5 e55d e77f e16b e0b1 | 5 e55d (0) e77f (0) e16b (0) e0ea (0)\n005 2 ed32 edc8 | 2 edc8 (0) ed32 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 ebca | 1 ebca (0)\n008 0 | 0\n009 1 ea60 | 1 ea60 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","private_key":"7a2a65840183134657aedc7f4311c4428e3b8341628df92550577eb8c5f61b1c","name":"node_ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","services":["bzz","pss"],"enable_msg_events":true,"port":43851},"up":true}},{"node":{"info":{"id":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","name":"node_2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","enode":"enode://634c327216fdc24e18f6724944cc2cdd81cd854a381e49a422c900ddb07bdbd3355b7de6240c4c3916088e39de937b6cc42f11fc8790d22d7721d0230a62273d@127.0.0.1:0","enr":"0xf88fb8403c29ef7a8afe4804b361f57edb95e1148ca1043464b23d9b238123129fcac29171eaf9a0a70e770cfe8185a3fb3fd61e5c5878f5b71c12487b79da7ab75e0e8d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103634c327216fdc24e18f6724944cc2cdd81cd854a381e49a422c900ddb07bdbd3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JDTGPn8ouD5/7t5/5o6pm5ifhTT2TWOwRnM+L0dFOPU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2434c6\npopulation: 41 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 a085 b8e1 9626 9e02 | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 11 6c82 7639 7b92 78cb | 38 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n002 8 1be4 0ff6 0ab9 0218 | 15 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n003 4 372d 3cb1 38ab 39db | 6 372d (0) 3e56 (0) 3ee4 (0) 3cb1 (0)\n004 2 2a22 286a | 2 286a (0) 2a22 (0)\n005 1 213b | 1 213b (0)\n============ DEPTH: 6 ==========================================\n006 1 26d1 | 1 26d1 (0)\n007 0 | 0\n008 0 | 0\n009 1 2459 | 1 2459 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","private_key":"ea68ee64cd7bec8f6c5c0c14a4f6d55bc6c371c676c88a1657b73135e8183c29","name":"node_2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","services":["bzz","pss"],"enable_msg_events":true,"port":33513},"up":true}},{"node":{"info":{"id":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","name":"node_4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","enode":"enode://2e826c3eb8d5f9e300988ffa5fd5445a26ff486a0170c8b0d79fa439b3801c1851e45d69941f3bea632b20a7fcb3f1a53d0a504a3e886756ca25f61547eb71a3@127.0.0.1:0","enr":"0xf88fb8407eb028f17f3be43ac26f9c531d0ebeb3d8ed2e0920745e17760e6af36431612a5f81dc55334372f469f36342623f7ccd5b59f0b4e084f7aecbb474fe5ac68dc00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032e826c3eb8d5f9e300988ffa5fd5445a26ff486a0170c8b0d79fa439b3801c18","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ShgR3Z/r3hgBpgStgd6EotFTZtC1wzDzDzOY2g0QeCQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4a1811\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8b76 dc97 | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 4 018a 026d 372d 2434 | 27 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n002 7 772e 757a 7cf4 7f87 | 23 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n003 7 539d 517a 5776 558e | 7 5d60 (0) 5abc (0) 5a01 (0) 539d (0)\n004 4 4167 419a 41b9 47c3 | 4 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n005 1 4cd0 | 1 4cd0 (0)\n============ DEPTH: 6 ==========================================\n006 1 48b6 | 1 48b6 (0)\n007 1 4b24 | 1 4b24 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","private_key":"29e672b50332ffce13e3c1e62ab1c36c98284e8526e6c2010adc9fc40aa4e5a8","name":"node_4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","services":["bzz","pss"],"enable_msg_events":true,"port":45219},"up":true}},{"node":{"info":{"id":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","name":"node_026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","enode":"enode://1bdd224735ef8e9603bb3af3eb143963367ef184ba9c3a6266ffd8c7ea1c9825b0a565da1820ae283c905d35ad9c00c27d94edea8d308d28bb61b153a5c23831@127.0.0.1:0","enr":"0xf88fb840f1a2ef34af51d5a668030bf51780e698f351d5619a059fc5cf9c66b59b570ebc5e4bc9b8580fcb8e3f6196fc3a39e83a9220bf1726189b8e347b96e2818be9cf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031bdd224735ef8e9603bb3af3eb143963367ef184ba9c3a6266ffd8c7ea1c9825","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Am0uQbgtUG2mhaMMznzFdy9sHhZ7fVV+BTH7m3ndT/I=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 026d2e\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 83dc 8cf9 89c8 895b | 63 91eb (0) 92a1 (0) 957d (0) 9626 (0)\n001 8 757a 78cb 7cf4 7f87 | 38 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n002 4 3cb1 2a22 2434 213b | 12 372d (0) 3e56 (0) 3ee4 (0) 3cb1 (0)\n003 4 109e 13bc 1929 1be4 | 4 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n004 3 0ff6 0bcf 0ab9 | 3 0ff6 (0) 0bcf (0) 0ab9 (0)\n005 3 06b9 0506 0427 | 3 06b9 (0) 0427 (0) 0506 (0)\n006 1 018a | 1 018a (0)\n007 1 0390 | 1 0390 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 0218 | 1 0218 (0)\n010 0 | 0\n011 1 027f | 1 027f (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","private_key":"66e31ccc21cf370ceb1e2bceac1499aeab637ee09f233711ef38ba3a8ba0e258","name":"node_026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","services":["bzz","pss"],"enable_msg_events":true,"port":45529},"up":true}},{"node":{"info":{"id":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","name":"node_dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","enode":"enode://b854fc358c548e135da5fc791782f459cceb3528a48cd2ebb3c35942f92414b98eea4f354c64e8292a610ee59517399f6a9ec07a68e65dce31bb82f1df156b0d@127.0.0.1:0","enr":"0xf88fb840111fd0a9953783fdda698a6547ff1c8670f1b423fe5bcb157c98582d193a643c42c531c98d7b5114d96b1547a7ccc63a03fef119855f7697e1e124a3dbdc6ae90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b854fc358c548e135da5fc791782f459cceb3528a48cd2ebb3c35942f92414b9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"367ryOKcao+FGxK4DPQlZ80qQ+Ndl3MFo8EOUb9BFwo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dfaeeb\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6728 667e 6c02 6d60 | 65 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n001 5 a75a b16d b8e1 895b | 33 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n002 10 ed32 ea60 ea0e e16b | 15 e55d (0) e77f (0) e16b (0) e0b1 (0)\n003 5 c181 c3a1 ca03 cbc5 | 9 c3a1 (0) c181 (0) c8e5 (0) ca03 (0)\n004 3 d0f3 d224 d6ff | 3 d224 (0) d0f3 (0) d6ff (0)\n============ DEPTH: 5 ==========================================\n005 1 db08 | 1 db08 (0)\n006 1 dc97 | 1 dc97 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","private_key":"f2ca8fe02aa5e39a2995330d19104fe94adc0b9bb890ce50c15ac8987c368a64","name":"node_dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","services":["bzz","pss"],"enable_msg_events":true,"port":46381},"up":true}},{"node":{"info":{"id":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","name":"node_558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","enode":"enode://670a610cec9046cca8a6097ddf0772fcc8b207ce9c573c71356934060ecf3e756298aac965d239846a16ab795b8f20f2d33d1379d6b4da7b0785eac9cb0e706f@127.0.0.1:0","enr":"0xf88fb84039cbdcd9c4550e92047787028d8613d1d69e444a7a231d53694347cc8a8cf913329ac3d692c8320f28ceb7867eb72c22b4b490db3b9c28951b511d6b72692e410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103670a610cec9046cca8a6097ddf0772fcc8b207ce9c573c71356934060ecf3e75","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VY6wIXRL4ZODvprJG5934HR54OslV2vTKjr6qUwjEXg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 558eb0\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 8b76 ae67 f74e dc97 | 63 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n001 5 0218 39db 372d 2434 | 27 3cb1 (0) 3e56 (0) 3ee4 (0) 38ab (0)\n002 6 6c02 6ecb 645b 78cb | 23 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n003 5 41b9 47c3 48b6 4b24 | 8 4167 (0) 419a (0) 41b9 (0) 47c3 (0)\n004 3 5abc 5a01 5d60 | 3 5d60 (0) 5abc (0) 5a01 (0)\n============ DEPTH: 5 ==========================================\n005 2 517a 539d | 2 539d (0) 517a (0)\n006 1 5776 | 1 5776 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","private_key":"5de3f27f03f0565eb69405082120c753d823e962ee08c8e89dfca48ef957830c","name":"node_558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","services":["bzz","pss"],"enable_msg_events":true,"port":45963},"up":true}},{"node":{"info":{"id":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","name":"node_ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","enode":"enode://d5ac1961e227bd9f303a8273244adeaf02add8f9f4007c2f9d9c849ff3b9bbd9950d263905ac606d6dc5c4dd723e991ee27c80acf9584e36de09197b4db5ace5@127.0.0.1:0","enr":"0xf88fb8408715cddf6466f5cf540b8e6c8689a5881979f2696a0160c48f2274fb2ce56db820361055605b93b01a3f4324962a745010a973c17fab26ee763a8ada01abca260183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d5ac1961e227bd9f303a8273244adeaf02add8f9f4007c2f9d9c849ff3b9bbd9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rmf65JkNphyokiHFsWdcmSurtNcVtZk55HvRSRs78fQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ae67fa\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 39db 38ab 3cb1 3ee4 | 65 3e56 (0) 3ee4 (0) 3cb1 (0) 38ab (0)\n001 4 e55d e77f e0ea f361 | 30 c181 (0) c3a1 (0) c8e5 (0) cbc5 (0)\n002 3 9d3c 83dc 8b76 | 16 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n003 4 b8e1 b16d b486 b70e | 8 b2b9 (0) b381 (0) b16d (0) b486 (0)\n004 5 a7a6 a75a a085 a320 | 5 a7a6 (0) a75a (0) a085 (0) a2ba (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 ad0d | 1 ad0d (0)\n007 1 afa3 | 1 afa3 (0)\n008 1 aebd | 1 aebd (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","private_key":"20deaabb607e4c2f3c7df5c3c5e310bf29e1fdadae1b52f9d107d40cfb6b264c","name":"node_ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","services":["bzz","pss"],"enable_msg_events":true,"port":33595},"up":true}},{"node":{"info":{"id":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","name":"node_f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","enode":"enode://49397d0356ecc13c5bc27b3b5630f3bbab8e7c1ca7d2d4b5e074ca3c8b8dcfaf2fe2945ba899807de702c7eb3c40a572c9771d6e3211cc0b0d333e96c7990987@127.0.0.1:0","enr":"0xf88fb840a198329ff362f39bc5de95d22e342a70da5fadfb466b8eed4eb1b9f57dd6dc454815ce25795082edc3e776e68b01dc3a5d782775450daba93f28d4b4509f3dab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10349397d0356ecc13c5bc27b3b5630f3bbab8e7c1ca7d2d4b5e074ca3c8b8dcfaf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"82Eg/yULnnFk6WAhR5MyBU9n3mXNL+W240vFHQ/k0pw=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f36120\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5d60 517a 1be4 0506 | 65 5776 (0) 558e (0) 539d (0) 517a (0)\n001 10 9e02 9626 8b76 89c8 | 33 9a92 (0) 9d3c (0) 9ee7 (0) 9e02 (0)\n002 5 ce99 c181 db08 dc97 | 15 d224 (0) d0f3 (0) d6ff (0) db08 (0)\n003 10 edc8 ed32 ebca ea0e | 10 e77f (0) e55d (0) e16b (0) e0b1 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 3 f74e f410 f5c4 | 3 f410 (0) f5c4 (0) f74e (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 1 f360 | 1 f360 (0)\n========================================================================="}},"config":{"id":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","private_key":"71622f176e027738b9284c5ca316f6736d1af20a0c5b2874bc826a6493d3e403","name":"node_f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","services":["bzz","pss"],"enable_msg_events":true,"port":40147},"up":true}},{"node":{"info":{"id":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","name":"node_0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","enode":"enode://c7d55b42435ae9eebddd09b4960f97586b686903470dd4b908acfc157b42c2d6dfc9b4a54f29dfeb3fb84963511229a1b277bac428b07daf80036a03c9075180@127.0.0.1:0","enr":"0xf88fb84017229330778245921bef57e2428e7cec260ff8ddf2ca65fd32d601b6deb58561107253d30829606a2a6848f578bc6a7a38854ff60ef6c34af5b9b791d3c0e5e40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c7d55b42435ae9eebddd09b4960f97586b686903470dd4b908acfc157b42c2d6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BQbpSXSLYtodNrZj331qfnYCf3LO1dUvdGd/sx1+FQU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0506e9\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 9626 a7a6 db08 c181 | 63 91eb (0) 92a1 (0) 957d (0) 9626 (0)\n001 3 7b92 5d60 517a | 38 558e (0) 5776 (0) 539d (0) 517a (0)\n002 8 372d 39db 38ab 3cb1 | 12 3e56 (0) 3ee4 (0) 3cb1 (0) 38ab (0)\n003 4 13bc 109e 1929 1be4 | 4 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n004 3 0ab9 0bcf 0ff6 | 3 0ff6 (0) 0bcf (0) 0ab9 (0)\n005 5 018a 0390 026d 027f | 5 0390 (0) 0218 (0) 027f (0) 026d (0)\n============ DEPTH: 6 ==========================================\n006 1 06b9 | 1 06b9 (0)\n007 1 0427 | 1 0427 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","private_key":"d54090bceb0325e7d681953c0c9b885b52b9fde17c87981f51927d5458bdec1f","name":"node_0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","services":["bzz","pss"],"enable_msg_events":true,"port":42705},"up":true}},{"node":{"info":{"id":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","name":"node_cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","enode":"enode://15721bb131c5000be7e9d400500ccf12cd6a04edf750c1fc78e225c6728baa8fb5c18e2e68c16d05b26f9642d009b6ca670eb011fce286318a4281ec930da572@127.0.0.1:0","enr":"0xf88fb840c585ecd30f00f1f4839d519a833ff3434caa90c288ae094854454e6f9b846c84292aa12c66d3327f9e57934efb3cd562b9c14ba7c2c39303c39271dc148bab390183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10215721bb131c5000be7e9d400500ccf12cd6a04edf750c1fc78e225c6728baa8f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zc0WVyH2hR82H60LO6iMiHC+mtbWuMvOzHyJ4QaNl5o=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cdcd16\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6d60 645b 0506 | 65 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n001 4 a75a b16d 8b76 83dc | 33 9a92 (0) 9d3c (0) 9e02 (0) 9ee7 (0)\n002 6 f74e e0ea e0b1 edc8 | 15 e55d (0) e77f (0) e16b (0) e0b1 (0)\n003 5 d224 d6ff dc97 dfae | 6 d224 (0) d0f3 (0) d6ff (0) db08 (0)\n004 2 c181 c3a1 | 2 c3a1 (0) c181 (0)\n005 3 c8e5 ca03 cbc5 | 3 c8e5 (0) ca03 (0) cbc5 (0)\n============ DEPTH: 6 ==========================================\n006 3 cfbb ce99 cec3 | 3 cfbb (0) cec3 (0) ce99 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","private_key":"dc9c6faeb1b0ed2241977e5e119fb047b527baa72b57faf6a490bfa2463702b1","name":"node_cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","services":["bzz","pss"],"enable_msg_events":true,"port":44531},"up":true}},{"node":{"info":{"id":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","name":"node_645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","enode":"enode://c5df28a427ebcae9a135bf8f4e05d5507d48467c55937ae432e5453a53516d1d67d16f232b7ec71929f992ebb8d25fa8442c2e4ec12b9b9c2e90365d0ec58d62@127.0.0.1:0","enr":"0xf88fb8407d96a32e90f5234bc9b785b90e5ecbbc3c002e4307bfc19f4141f794943d59ac256d05f75f0afd515d598bdd6a82b8db9167d584b304303c4db1bc563447b0f70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c5df28a427ebcae9a135bf8f4e05d5507d48467c55937ae432e5453a53516d1d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZFtOazb8GShyX2J67tJ49GxafWsP/3zP9VoEaNR7I+g=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 645b4e\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8b76 a320 d6ff cdcd | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 2 1be4 213b | 27 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n002 9 5d60 5abc 5a01 5776 | 15 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n003 6 734e 757a 772e 7cf4 | 12 7fbc (0) 7f87 (0) 7dc5 (0) 7cf4 (0)\n004 3 6c82 6d60 6e5c | 6 6982 (0) 6c82 (0) 6c02 (0) 6d60 (0)\n005 1 6210 | 1 6210 (0)\n============ DEPTH: 6 ==========================================\n006 3 667e 6742 6728 | 3 667e (0) 6742 (0) 6728 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","private_key":"04fc1c10d7b313a061609b0eed8efdc7b1d9fd9169d7d7d5381d5ef4a53086f9","name":"node_645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","services":["bzz","pss"],"enable_msg_events":true,"port":35261},"up":true}},{"node":{"info":{"id":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","name":"node_213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","enode":"enode://761923555d54e992f473a9407939c25446dcfdda08081916f298c2fb2c8380ed0cf602deba79e7ff4ebd2c17f9cece98ae0e15539870f66a634b733171e0ec27@127.0.0.1:0","enr":"0xf88fb84009b10445736e612ea99db7cb50e94305fdfee64d061a1bb4fb2cf291ff6ecffc7311805dc59471a2997aa537f1c1d964a2d26f94a8433a498003cd0ed5bace8b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103761923555d54e992f473a9407939c25446dcfdda08081916f298c2fb2c8380ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ITv2544CpXWFkIx1bwllKXFSw8QAoO1MQHpBHh7FlC0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 213bf6\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ea60 cec3 b16d 89c8 | 63 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n001 4 41b9 5776 558e 645b | 38 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n002 7 1be4 109e 0506 0427 | 15 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n003 4 372d 3cb1 38ab 39db | 6 3ee4 (0) 3e56 (0) 3cb1 (0) 38ab (0)\n004 2 286a 2a22 | 2 2a22 (0) 286a (0)\n============ DEPTH: 5 ==========================================\n005 3 26d1 2459 2434 | 3 26d1 (0) 2459 (0) 2434 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","private_key":"bb9e629d827643ea4b3d2c1f6c8a26cc16d191cec7709cdbdbf10fcfa47361b6","name":"node_213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","services":["bzz","pss"],"enable_msg_events":true,"port":33711},"up":true}},{"node":{"info":{"id":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","name":"node_018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","enode":"enode://e176b178b7c28353b25e6ae0584c3cd889c856b2bffd5c41cfb6b013ef2ebf3ee736f96dc0ebbb82bb3ebb2fefd70e8465cc77fe5bda8ab3068748044122bae4@127.0.0.1:0","enr":"0xf88fb8402a03da3911096a8fd7d223cc3dbf67101905e23b5b0c57af60f84593af3ac73e58f9d55a0d7ff7284740335e16e4305a45484856e16b8428743a7862d89b2f4d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e176b178b7c28353b25e6ae0584c3cd889c856b2bffd5c41cfb6b013ef2ebf3e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AYrcYT941uyHYnT4ISUf0EnrNlFkbNaeJ+/iEf6I2TY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 018adc\npopulation: 42 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 83dc 8cf9 89c8 895b | 63 957d (0) 9626 (0) 92a1 (0) 91eb (0)\n001 11 6c82 7639 7b92 7f87 | 38 734e (0) 7355 (0) 73b8 (0) 757a (0)\n002 3 3cb1 2a22 213b | 12 372d (0) 3e56 (0) 3ee4 (0) 3cb1 (0)\n003 4 109e 13bc 1929 1be4 | 4 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n004 3 0ff6 0bcf 0ab9 | 3 0ff6 (0) 0bcf (0) 0ab9 (0)\n005 3 0506 0427 06b9 | 3 06b9 (0) 0427 (0) 0506 (0)\n============ DEPTH: 6 ==========================================\n006 4 0390 0218 027f 026d | 4 0390 (0) 0218 (0) 027f (0) 026d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","private_key":"b416fa1edc6a9481a2700407cc6b4cf1fe22447bcfced748269842bb79bd7be1","name":"node_018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","services":["bzz","pss"],"enable_msg_events":true,"port":38849},"up":true}},{"node":{"info":{"id":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","name":"node_edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","enode":"enode://bcb2c62558ac0c921253415556bb8521bb1f361278884453958a4ad1c6d2d761d9c4ea778253061cbb4a18a63c700bd5ec3b4e98d0ee89f4d68789a49a255c1a@127.0.0.1:0","enr":"0xf88fb840969cc1e8767d29e18d752912b07d4f68a5612caf1a3d7e4b924b03fb8f6f41da1725d64bd2cda2fabf6d5df9b87ac5e7873946a70a71fc605d58f5091e260e2c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bcb2c62558ac0c921253415556bb8521bb1f361278884453958a4ad1c6d2d761","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7ch5QVP7UXCF0nqDpLAOjDs38i0iQrhCyy+rZnZN6f4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: edc879\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 772e 5d60 5a01 1be4 | 65 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n001 3 a7a6 8cf9 83dc | 33 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n002 6 db08 ce99 cdcd ca03 | 15 c8e5 (0) ca03 (0) cbc5 (0) cfbb (0)\n003 3 f361 f360 f74e | 5 f5c4 (0) f410 (0) f74e (0) f360 (0)\n004 5 e16b e0b1 e0ea e55d | 5 e16b (0) e0ea (0) e0b1 (0) e55d (0)\n============ DEPTH: 5 ==========================================\n005 3 ebca ea0e ea60 | 3 ebca (0) ea0e (0) ea60 (0)\n006 0 | 0\n007 0 | 0\n008 1 ed32 | 1 ed32 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","private_key":"cc8bb9100f25964f245e87e3f9bf408be100ad3a6d25298aaf5c1cec3309e03c","name":"node_edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","services":["bzz","pss"],"enable_msg_events":true,"port":46185},"up":true}},{"node":{"info":{"id":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","name":"node_5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","enode":"enode://be300889154a90ed33d9cf94b4ff711ba4b0fd2831f1c923f836379f54c554a322b2ffd67ad31b60921194ecbaf36fb2ae1fcaf4f83b5f8d09d04771a8bd6fde@127.0.0.1:0","enr":"0xf88fb84021eb12c9a4bca577771c8a61b0f665dda93925bca15665a86baca81ba20608c50975baba6dfbe9f8d7c81aed39d6fd56b12badc27b7e8cae94445a3bdf1cc94f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102be300889154a90ed33d9cf94b4ff711ba4b0fd2831f1c923f836379f54c554a3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WgGZP/e0vRL9slnpayagNtDPXUrpybUWvmS2Os7CRDo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5a0199\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 dc97 e0ea edc8 b2b9 | 63 ca03 (0) cbc5 (0) c8e5 (0) cdcd (0)\n001 3 372d 2434 1be4 | 27 372d (0) 3cb1 (0) 3ee4 (0) 3e56 (0)\n002 6 757a 667e 645b 6c02 | 23 6210 (0) 6742 (0) 6728 (0) 667e (0)\n003 6 4167 41b9 419a 47c3 | 8 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n004 4 5776 558e 517a 539d | 4 558e (0) 5776 (0) 539d (0) 517a (0)\n============ DEPTH: 5 ==========================================\n005 1 5d60 | 1 5d60 (0)\n006 0 | 0\n007 0 | 0\n008 1 5abc | 1 5abc (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","private_key":"33fe2e9d121fb48e9e8ff1552b58a42c5f6d078b47223f83f9aecc781953dd8a","name":"node_5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","services":["bzz","pss"],"enable_msg_events":true,"port":39861},"up":true}},{"node":{"info":{"id":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","name":"node_b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","enode":"enode://3bd0292e58c0d4c952c3d2ff221410cb20c7ffac7848e2c5d351e32cbb578ddba8be42843dd17f2daa62079d6ce7886946d545db1845f9d31cf67dcd9e285c66@127.0.0.1:0","enr":"0xf88fb84069b7f53f8dde1ec32c5ac7119d271f0c63fdcfddf4ba67b3bd0f4a190049baee56b5a605f02fcefc86416f72d03d3a21fe91db5629d059a026b8a2ff9f3450ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023bd0292e58c0d4c952c3d2ff221410cb20c7ffac7848e2c5d351e32cbb578ddb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uOGoDZEhb9X4vD90E8r2it5/EkNU1E/nvRVaCJE0pwo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8e1a8\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2434 109e 0218 06b9 | 65 372d (0) 3cb1 (0) 3e56 (0) 3ee4 (0)\n001 5 e77f e55d db08 dfae | 30 ca03 (0) cbc5 (0) c8e5 (0) cdcd (0)\n002 7 83dc 89c8 895b 8b76 | 16 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n003 5 ae67 a320 a2ba a75a | 9 a085 (0) a2ba (0) a320 (0) a75a (0)\n004 5 b2b9 b381 b16d b70e | 5 b2b9 (0) b381 (0) b16d (0) b70e (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 1 b92a | 1 b92a (0)\n008 1 b841 | 1 b841 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","private_key":"dac5558d2b06b587645b8308b63c3c7a7d9d90ec36353760cb9c656ee41fe6d5","name":"node_b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","services":["bzz","pss"],"enable_msg_events":true,"port":33565},"up":true}},{"node":{"info":{"id":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","name":"node_b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","enode":"enode://f3da79d322438356e44f3b4036211300b07efa604f756ee0e60b1cfa5bd21fe2339ddf44138c970dd83db24f66b75d48e7b97492d75cae27dac3d1da16205d45@127.0.0.1:0","enr":"0xf88fb8403f9763127c7628679fe7fcaba9c97b58e29d4bab1758c67f241c249a66177230530b8da7ce97ec138bedc08717a7e96f184614db39decae489ad12dfe3d606090183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f3da79d322438356e44f3b4036211300b07efa604f756ee0e60b1cfa5bd21fe2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tIbOMc6IDbOqoXoKwsLzVUtv5x+cBR7bVyl0NCr0rbk=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b486ce\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 6c82 6c02 6e5c 7cf4 | 65 734e (0) 7355 (0) 73b8 (0) 757a (0)\n001 2 db08 c181 | 30 ca03 (0) cbc5 (0) c8e5 (0) cdcd (0)\n002 3 9ee7 8b76 83dc | 16 91eb (0) 92a1 (0) 957d (0) 9626 (0)\n003 4 a7a6 a320 afa3 ae67 | 9 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n004 3 b92a b841 b8e1 | 3 b92a (0) b841 (0) b8e1 (0)\n============ DEPTH: 5 ==========================================\n005 3 b2b9 b381 b16d | 3 b2b9 (0) b381 (0) b16d (0)\n006 1 b70e | 1 b70e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","private_key":"60109f1a20e5d694e88f021d4e588994aae7c2ecfca6a950149c53652f4a5b3a","name":"node_b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","services":["bzz","pss"],"enable_msg_events":true,"port":44351},"up":true}},{"node":{"info":{"id":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","name":"node_1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","enode":"enode://8375557348b05531d3d6a4b6f494f44e33c0a1862c0c63fce6ab3e8a389adb299f4fb14a74d2ef9160d2df04f362af2e9c7021f0cabc9bf4a116663b62dce076@127.0.0.1:0","enr":"0xf88fb8404ea89c730deaca09ae7f36423dd170ee83ef05e71559ce57692a4cb2a14e79a73f552356028fc016ecbee9961b2691884662145357a4c9db80d0d3156feda59c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028375557348b05531d3d6a4b6f494f44e33c0a1862c0c63fce6ab3e8a389adb29","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"G+Q0jsVnDNxPFk13sTVueRC20b5Km3IOVJ0C5Ugqnng=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1be434\npopulation: 41 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 14 cec3 cbc5 ea0e ea60 | 63 f5c4 (0) f410 (0) f74e (0) f360 (0)\n001 9 78cb 7f87 6c82 645b | 38 73b8 (0) 7355 (0) 734e (0) 757a (0)\n002 4 372d 286a 213b 2434 | 12 3e56 (0) 3ee4 (0) 3cb1 (0) 38ab (0)\n003 11 0ff6 0bcf 0ab9 018a | 11 0ff6 (0) 0bcf (0) 0ab9 (0) 06b9 (0)\n============ DEPTH: 4 ==========================================\n004 2 13bc 109e | 2 13bc (0) 109e (0)\n005 0 | 0\n006 1 1929 | 1 1929 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","private_key":"f4c9d012e654cc97f045dbff8811d75d2bc28f743389ed83138c83f208c0c4a3","name":"node_1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","services":["bzz","pss"],"enable_msg_events":true,"port":39499},"up":true}},{"node":{"info":{"id":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","name":"node_517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","enode":"enode://84e56a199123357e4baa395c602310fd7ee347f259e1a71c6f6fea49356dee106bdd2103681d15f896df139363b8caf91a70e2927012eb4ed3189abc8574c05f@127.0.0.1:0","enr":"0xf88fb84006dac2d9b267151a93241e398113497441d145d87211a3c352c7f87348ac8ce506d1e2d81d2e99f9e4320692bb2519b52e0ec44d5b98dd50de8964f0f869abef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10384e56a199123357e4baa395c602310fd7ee347f259e1a71c6f6fea49356dee10","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UXqpdwSCR9XRatUaKG/6xNj5EHM/BXiyIiATCMMtGV4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 517aa9\npopulation: 21 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 dc97 e0ea e77f f361 | 63 f410 (0) f5c4 (0) f74e (0) f360 (0)\n001 3 018a 0506 1be4 | 27 3cb1 (0) 3e56 (0) 3ee4 (0) 38ab (0)\n002 3 757a 772e 645b | 23 73b8 (0) 734e (0) 7355 (0) 757a (0)\n003 5 4a18 4b24 419a 41b9 | 8 47c3 (0) 4167 (0) 419a (0) 41b9 (0)\n004 3 5abc 5a01 5d60 | 3 5abc (0) 5a01 (0) 5d60 (0)\n============ DEPTH: 5 ==========================================\n005 2 558e 5776 | 2 558e (0) 5776 (0)\n006 1 539d | 1 539d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","private_key":"468bb419433b15b2933469b68aecf09e25fe8872c8128a2ee0198d626c5e16a9","name":"node_517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","services":["bzz","pss"],"enable_msg_events":true,"port":43881},"up":true}},{"node":{"info":{"id":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","name":"node_5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","enode":"enode://04a81661386177d0609fc1bd233738fbb96b9280ab323c85ceac159c0854dc725e4c84c8957ba802498745365c937a581e09c8a4a1580b0dce82e5dcaef08ee4@127.0.0.1:0","enr":"0xf88fb840dee34144fcdd9b6e5d1be0361509c91c011d627a6a3b69edbbcb3a90f7252f5b4aa02cec8d59613ac817a9336ddf3e1673f6509927af5c0b4bc44d01a9fb7f440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10204a81661386177d0609fc1bd233738fbb96b9280ab323c85ceac159c0854dc72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XWCOZqF0QgkREctHJyP+OuofK67KpUa1fUlQfGOmHNo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5d608e\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 f74e f361 edc8 ea0e | 63 f5c4 (0) f410 (0) f74e (0) f360 (0)\n001 2 018a 0506 | 27 38ab (0) 39db (0) 3e56 (0) 3ee4 (0)\n002 7 6ecb 645b 757a 772e | 23 73b8 (0) 734e (0) 7355 (0) 757a (0)\n003 3 47c3 41b9 4a18 | 8 4cd0 (0) 48b6 (0) 4b24 (0) 4a18 (0)\n004 4 5776 558e 539d 517a | 4 558e (0) 5776 (0) 539d (0) 517a (0)\n============ DEPTH: 5 ==========================================\n005 2 5abc 5a01 | 2 5abc (0) 5a01 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","private_key":"81c50622bdad71d45180a827fe4f2709ac6e73ab5b1d7f135ae6c563bdf67dfc","name":"node_5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","services":["bzz","pss"],"enable_msg_events":true,"port":46869},"up":true}},{"node":{"info":{"id":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","name":"node_83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","enode":"enode://9903840de4085e02bf4b40b91137ea82baf327272e40f2a68b0bacc22064465e695d1053d48ade3cc707fe05b2f395540b7e8aaed800b8a746085969ea98a8c1@127.0.0.1:0","enr":"0xf88fb840ef8ed31b921f8a77d4906bb0fa6b72a27e794b68d3615d8c5035c35186f636a554ccec2b28662884c8454b4134c077320be3b5e6472693c92cf8945deab453840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039903840de4085e02bf4b40b91137ea82baf327272e40f2a68b0bacc22064465e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g9xVbtNvN9BnZb4lVP6G6vHsIeKTH7IkAyOEU78CHfs=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 83dc55\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 018a 026d 2434 213b | 65 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n001 11 f361 f74e e77f e0b1 | 30 f410 (0) f5c4 (0) f74e (0) f360 (0)\n002 8 a7a6 a2ba a320 ae67 | 17 b70e (0) b486 (0) b2b9 (0) b381 (0)\n003 5 9626 9a92 9d3c 9e02 | 8 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n004 5 8cf9 895b 89c8 8be4 | 5 8cf9 (0) 8be4 (0) 8b76 (0) 895b (0)\n============ DEPTH: 5 ==========================================\n005 1 86ca | 1 86ca (0)\n006 0 | 0\n007 1 82f0 | 1 82f0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","private_key":"996588cd689e21ae98c63522cc84c5ca8c59901f1738bf888136a0d84745625a","name":"node_83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","services":["bzz","pss"],"enable_msg_events":true,"port":44859},"up":true}},{"node":{"info":{"id":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","name":"node_db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","enode":"enode://0620b99063bcbdca96543150c5bcaa6bbae76cfa9d6a5700cec06bcac3f80ddbb3e87099c7516c8bf7e1fc7bbe1a2c74decdb9beacdc44ed6b5ea859a7681da9@127.0.0.1:0","enr":"0xf88fb8409dedfae6e6fc520e43e7d06cb137d94f183daa858fb40bef2a6b1e677ec9e96c7ae3a0fdbc5513424aed12e0358fad4c8358f48c69e806c50c7d002c899356370183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030620b99063bcbdca96543150c5bcaa6bbae76cfa9d6a5700cec06bcac3f80ddb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2wiBA/O28seE127Nmci0p3/Tm7Occt39kcmcGp3Tt1s=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: db0881\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7fbc 0427 0506 | 65 3cb1 (0) 3e56 (0) 3ee4 (0) 38ab (0)\n001 6 b16d b486 b70e b841 | 33 b92a (0) b841 (0) b8e1 (0) b70e (0)\n002 11 f74e f360 f361 e77f | 15 f410 (0) f5c4 (0) f74e (0) f360 (0)\n003 7 ca03 cbc5 c8e5 cdcd | 9 ca03 (0) cbc5 (0) c8e5 (0) cdcd (0)\n004 3 d0f3 d224 d6ff | 3 d224 (0) d0f3 (0) d6ff (0)\n============ DEPTH: 5 ==========================================\n005 2 dc97 dfae | 2 dc97 (0) dfae (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","private_key":"531ff73ac55db42d259eda258c322099463847f19f0e133a69fe506626d432c8","name":"node_db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","services":["bzz","pss"],"enable_msg_events":true,"port":33251},"up":true}},{"node":{"info":{"id":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","name":"node_c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","enode":"enode://c09ff8bce7f3f84fda572912d07e2fd5303e8a9bcd69f3794ebec6268fba90310761b6f73741b9701a1928f9af099bb8eda1d9d38e849a12fd21d9a8a6f43b37@127.0.0.1:0","enr":"0xf88fb8408bae0ad58fe6f74ee5e733985301353441b70d767126573c80639676f5d3c0d94ab77ee9239739d4a1b3ab7328206c2d561f9468e37e76fe16c2d02be7e0c5ab0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c09ff8bce7f3f84fda572912d07e2fd5303e8a9bcd69f3794ebec6268fba9031","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wYEFqjAqQ+NS2Zl0Wg+Aavn4y4u4M0k1faXIXol1rNE=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c18105\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 286a 0427 0506 | 65 3cb1 (0) 3ee4 (0) 3e56 (0) 38ab (0)\n001 5 8b76 b16d b486 b8e1 | 33 91eb (0) 92a1 (0) 9626 (0) 957d (0)\n002 5 e0b1 e0ea f74e f360 | 15 f5c4 (0) f410 (0) f74e (0) f360 (0)\n003 4 d224 dc97 dfae db08 | 6 d0f3 (0) d224 (0) d6ff (0) dc97 (0)\n============ DEPTH: 4 ==========================================\n004 7 c8e5 ca03 cbc5 cdcd | 7 ca03 (0) cbc5 (0) c8e5 (0) cdcd (0)\n005 0 | 0\n006 1 c3a1 | 1 c3a1 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","private_key":"7a2924b057c33f05e57a60b815f1c80855c3acc417bf37cd31d281f670cba443","name":"node_c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","services":["bzz","pss"],"enable_msg_events":true,"port":40633},"up":true}},{"node":{"info":{"id":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","name":"node_a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","enode":"enode://f06cb29c4ffab0c600cf7e7834032f1aab24cf48200d31c1c67b6ba2ee38195c9596df70c664d38cc53bdbcda0bb8c9bda598d0e0f3b377f5f6568b3725f7ba2@127.0.0.1:0","enr":"0xf88fb8404d99eb2b83e49511188c6105f0ef75fc98bd4e9871cb3b328d0fbec9f69153952df139a6d1d39c45e99b4baf70040b97087c9ccdf54aed111a2cf7435a6f574b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f06cb29c4ffab0c600cf7e7834032f1aab24cf48200d31c1c67b6ba2ee38195c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"p6YYBNJw7WwnpLHopjTDDXzbr2RKHGfLxrCM2EmnEds=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a7a618\npopulation: 38 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 109e 0ff6 06b9 0506 | 65 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n001 8 f360 f361 f410 ebca | 30 f74e (0) f5c4 (0) f410 (0) f361 (0)\n002 6 92a1 9ee7 8b76 8be4 | 16 957d (0) 9626 (0) 91eb (0) 92a1 (0)\n003 6 b841 b8e1 b486 b70e | 8 b92a (0) b841 (0) b8e1 (0) b70e (0)\n004 4 ad0d afa3 aebd ae67 | 4 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n============ DEPTH: 5 ==========================================\n005 3 a085 a320 a2ba | 3 a085 (0) a2ba (0) a320 (0)\n006 0 | 0\n007 0 | 0\n008 1 a75a | 1 a75a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","private_key":"78a5f9f36119c4686d8fb667f830f052885e6485e92dd09b9fed7f9e01368f83","name":"node_a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","services":["bzz","pss"],"enable_msg_events":true,"port":35649},"up":true}},{"node":{"info":{"id":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","name":"node_b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","enode":"enode://3a9f619551e6b60c9edcac716ff28cd93af12dbc9b07a2c9ea541a8e3666f513d0b05e82cae81eb72534d3784d41a948cba2a1d9db8b3764feee40d52290427b@127.0.0.1:0","enr":"0xf88fb8403bcb9b72c0dd4b343993b4c02c8d3dfd1a66f01fd355938b0d91547730d0fdef30e0150cbf8f5999ecd82b2ba083bb019e0fc5d96ed35baf82b80b3645eb4c4f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033a9f619551e6b60c9edcac716ff28cd93af12dbc9b07a2c9ea541a8e3666f513","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"sW3N8f8aVtSeN0Ux2YhdWcG8+7YoYEUg2bHYRmLtuco=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b16dcd\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 7f87 78cb 41b9 47c3 | 65 38ab (0) 39db (0) 3cb1 (0) 3e56 (0)\n001 10 ce99 cdcd c8e5 cbc5 | 30 d224 (0) d0f3 (0) d6ff (0) dc97 (0)\n002 4 9d3c 9ee7 8b76 83dc | 16 9626 (0) 957d (0) 91eb (0) 92a1 (0)\n003 3 ae67 a320 a7a6 | 9 ad0d (0) afa3 (0) aebd (0) ae67 (0)\n004 3 b92a b841 b8e1 | 3 b92a (0) b841 (0) b8e1 (0)\n005 2 b70e b486 | 2 b70e (0) b486 (0)\n============ DEPTH: 6 ==========================================\n006 2 b2b9 b381 | 2 b2b9 (0) b381 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","private_key":"ede19b96340b0babe7021d81a8ec746406996af53908a387cd2e9f1551651869","name":"node_b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","services":["bzz","pss"],"enable_msg_events":true,"port":33287},"up":true}},{"node":{"info":{"id":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","name":"node_ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","enode":"enode://a3a82e04610c3851f4b6b80bdd5666f8c2eb2a5c4fe7a79dbfc5fa38de9bbd36ca8dd8a3d794ead924e43a0812bbbcaf1f394e4d77e9662238f80ccac0d8e52a@127.0.0.1:0","enr":"0xf88fb84090c476d24643383a66557141b62c940150453a05a838e91c6eaa1441befcedd441f7ac293638f5a01132227c8daf970bb3ec76d938fcd2257ef6282b758c36a30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a3a82e04610c3851f4b6b80bdd5666f8c2eb2a5c4fe7a79dbfc5fa38de9bbd36","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6mDvfLPyFmpcjihsiFmElDoupa/0cwAVvmoVAxBAzs8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ea60ef\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 0ab9 1be4 372d 3e56 | 65 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n001 8 83dc 86ca 89c8 895b | 33 8cf9 (0) 8b76 (0) 8be4 (0) 895b (0)\n002 5 c8e5 ca03 d224 dfae | 15 d224 (0) d0f3 (0) d6ff (0) dc97 (0)\n003 4 f410 f74e f360 f361 | 5 f5c4 (0) f410 (0) f74e (0) f361 (0)\n004 3 e0b1 e0ea e77f | 5 e16b (0) e0ea (0) e0b1 (0) e55d (0)\n005 2 ed32 edc8 | 2 ed32 (0) edc8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 ebca | 1 ebca (0)\n008 0 | 0\n009 1 ea0e | 1 ea0e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","private_key":"34572c71c9f4767ddfaee3aa21c52f966a73447695fe12dee7eb9ff693417140","name":"node_ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","services":["bzz","pss"],"enable_msg_events":true,"port":43863},"up":true}},{"node":{"info":{"id":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","name":"node_57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","enode":"enode://802bb2984957e4187577dba69e5a73714c65bc176e785c46c52c725e8cb118d05f0b0840a373188d1ccd56465c20ba7aedf21b7e5411c1c96ac32e6adad2e184@127.0.0.1:0","enr":"0xf88fb8401f7f3cc91efaede856461ce79b9ff9df6ced9d7358d2004d24fd403a006dd7604de40bc6b4f4e14b0292d0f15079e6c6aa69988b38698efb340481039bef5c300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102802bb2984957e4187577dba69e5a73714c65bc176e785c46c52c725e8cb118d0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V3ZFIhYmIMGtCxZqnEN3IlXQzAHknyEi7wnbBGgEpXA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 577645\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c8e5 dc97 e77f ea60 | 63 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n001 12 3ee4 286a 213b 2434 | 27 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n002 8 645b 6ecb 6c82 772e | 23 734e (0) 7355 (0) 73b8 (0) 757a (0)\n003 5 4a18 4b24 47c3 4167 | 8 4cd0 (0) 48b6 (0) 4b24 (0) 4a18 (0)\n004 3 5d60 5abc 5a01 | 3 5abc (0) 5a01 (0) 5d60 (0)\n============ DEPTH: 5 ==========================================\n005 2 539d 517a | 2 539d (0) 517a (0)\n006 1 558e | 1 558e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","private_key":"9de036860d3dc63ef40d3981f65da10bae27dd10ce542c76134e247073f512f4","name":"node_57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","services":["bzz","pss"],"enable_msg_events":true,"port":37591},"up":true}},{"node":{"info":{"id":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","name":"node_e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","enode":"enode://c80b19cf5a0bbf10af5ae60bf60765387031caab06906033df96362e07dd4e51e043bb824328834e600c0b6affc36df0d06ecd955103721482c11bedfe78e06e@127.0.0.1:0","enr":"0xf88fb84026a761e6c2aae397880443de1d6bb3b7770c8206f473451199148dcb9b74c03849739e4806e81c1ca8482e0712620998d9e4666d25b65e36e773f3c0f543a70f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c80b19cf5a0bbf10af5ae60bf60765387031caab06906033df96362e07dd4e51","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"539qqePfzOCi5dt5RwMiQkmrpgWVB1st+aWwswhVz0Y=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e77f6a\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1be4 5d60 517a 5776 | 65 38ab (0) 39db (0) 3cb1 (0) 3ee4 (0)\n001 13 92a1 957d 9ee7 83dc | 33 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n002 5 db08 dfae c8e5 ca03 | 15 d6ff (0) d224 (0) d0f3 (0) dc97 (0)\n003 4 f74e f410 f361 f360 | 5 f5c4 (0) f410 (0) f74e (0) f361 (0)\n004 5 ed32 edc8 ebca ea0e | 5 ed32 (0) edc8 (0) ebca (0) ea0e (0)\n============ DEPTH: 5 ==========================================\n005 3 e16b e0b1 e0ea | 3 e16b (0) e0b1 (0) e0ea (0)\n006 1 e55d | 1 e55d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","private_key":"c230ff1d7220134fe04e59de10522a8e372830d5b3eccbfbccf4b8e57536d4f9","name":"node_e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","services":["bzz","pss"],"enable_msg_events":true,"port":38009},"up":true}},{"node":{"info":{"id":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","name":"node_cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","enode":"enode://c9307563a6ac3d784c348187f2942d2aa64fb15afdb55d6fdfd6fa0bfc5e4a65281f9b0ef5dc5b155c0c97971411d8decd17c66ad96e3a0bca0f7bbfb6674ce8@127.0.0.1:0","enr":"0xf88fb8409fdaea6e03e3c24cf8967a46c99aaa146e74b7e455c4b7012f9c4b72fe74cbe831d49545d8fd8a8092b357b370922dfafe86853f004fb9f862395a41a00504000183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c9307563a6ac3d784c348187f2942d2aa64fb15afdb55d6fdfd6fa0bfc5e4a65","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zsPAHBR7NPJRBN3QslB2zvY6wiTq2p2fWgC4UTMxNU8=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cec3c0\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 0506 06b9 018a 0ff6 | 65 372d (0) 3cb1 (0) 3ee4 (0) 3e56 (0)\n001 9 b381 83dc 82f0 86ca | 33 86ca (0) 82f0 (0) 83dc (0) 8cf9 (0)\n002 2 f360 e77f | 15 f74e (0) f5c4 (0) f410 (0) f361 (0)\n003 2 d224 db08 | 6 d0f3 (0) d224 (0) d6ff (0) dc97 (0)\n004 2 c3a1 c181 | 2 c3a1 (0) c181 (0)\n005 3 c8e5 ca03 cbc5 | 3 cbc5 (0) ca03 (0) c8e5 (0)\n006 1 cdcd | 1 cdcd (0)\n============ DEPTH: 7 ==========================================\n007 1 cfbb | 1 cfbb (0)\n008 0 | 0\n009 1 ce99 | 1 ce99 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","private_key":"a43b0e0e48e2e4dbd79184eaade1af54404a0a89d0d250b881a1c131de5b2174","name":"node_cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","services":["bzz","pss"],"enable_msg_events":true,"port":44913},"up":true}},{"node":{"info":{"id":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","name":"node_6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","enode":"enode://e94d070b0cd5336bdebbdb63309d23c431e87c6bfa03474b5ffe002182e1fe617f0cb27a3e399ff36cc6eff93a64eae9ce3958400eba3b644a878ec673bc5a6a@127.0.0.1:0","enr":"0xf88fb840ac1282029a97bfacb7298ac94161d57a84cd6347e9fa18bd1e71f37ded792f352b8491cf02668d2daea43f1e02089f892431108a7e4a5708307096b4a57c4cd80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e94d070b0cd5336bdebbdb63309d23c431e87c6bfa03474b5ffe002182e1fe61","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bIL9q9CeDp0PxQdhOgWVHAKylT12OgYqXzKq9cxHfBk=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6c82fd\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b486 c8e5 cec3 | 63 86ca (0) 82f0 (0) 83dc (0) 8cf9 (0)\n001 9 286a 2459 2434 3e56 | 27 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n002 6 5a01 5776 47c3 41b9 | 15 5d60 (0) 5abc (0) 5a01 (0) 539d (0)\n003 5 78cb 7fbc 7f87 7cf4 | 12 7355 (0) 734e (0) 73b8 (0) 757a (0)\n004 4 6210 645b 667e 6742 | 5 645b (0) 667e (0) 6728 (0) 6742 (0)\n005 1 6982 | 1 6982 (0)\n006 2 6ecb 6e5c | 2 6ecb (0) 6e5c (0)\n============ DEPTH: 7 ==========================================\n007 1 6d60 | 1 6d60 (0)\n008 1 6c02 | 1 6c02 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","private_key":"fdb64dd6356458c4ea0b68ad6552a972f6b174e8db0fecb40fb8c03a61e39561","name":"node_6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","services":["bzz","pss"],"enable_msg_events":true,"port":36231},"up":true}},{"node":{"info":{"id":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","name":"node_c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","enode":"enode://bb7389fc8693197348309cc5f82cd99b2d73b478cefbdcf901844a69e35ea841449888e8cf056b1a4475970b6815a0a091c37e89df251953b7ba15fecb352b8b@127.0.0.1:0","enr":"0xf88fb840ceee340c58b4bfd938dbe46f60634de3127f2f253a2ba4925a2309b4e89c1c276391c132d230217a48dbfe44934f0a5204f62163714f90b0a7901404b5cc51c90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bb7389fc8693197348309cc5f82cd99b2d73b478cefbdcf901844a69e35ea841","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yOWhtFM90N4SrO5NMTafOXhReFaHGLk7vDIeyD4HFPA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c8e5a1\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 0427 0506 06b9 018a | 65 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n001 6 b16d 8be4 83dc 82f0 | 33 86ca (0) 82f0 (0) 83dc (0) 8cf9 (0)\n002 5 e77f ea60 ebca edc8 | 15 f74e (0) f5c4 (0) f410 (0) f361 (0)\n003 3 d0f3 d224 db08 | 6 d6ff (0) d224 (0) d0f3 (0) dc97 (0)\n004 2 c3a1 c181 | 2 c3a1 (0) c181 (0)\n005 4 cdcd cfbb cec3 ce99 | 4 cdcd (0) cfbb (0) cec3 (0) ce99 (0)\n============ DEPTH: 6 ==========================================\n006 2 ca03 cbc5 | 2 cbc5 (0) ca03 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","private_key":"71b41bd09467c47283a158151bded935639f103d9452befe2459162ec74df521","name":"node_c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","services":["bzz","pss"],"enable_msg_events":true,"port":46751},"up":true}},{"node":{"info":{"id":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","name":"node_ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","enode":"enode://18280baf1cb264a91130e6abae9d7e90b21447733bc8929577cb926538b2b17dc0add3d3467b320fae85519f6415afb36e9e18ba27105b5d0d33b8636fb5a711@127.0.0.1:0","enr":"0xf88fb840de9d966e41db3e276b1d1d67ae48e915d7689ef8081e41029aea9165c3ac62ff7805be7f8862a63d07c38f176d370349ab59f6917ada9b5ae644e87897df08600183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10318280baf1cb264a91130e6abae9d7e90b21447733bc8929577cb926538b2b17d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zpnp03ERxS6Smxh/4gF5CxpVXfuLa23lTpTffMLUP9Q=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ce99e9\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7fbc 286a 0427 | 65 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n001 6 b381 b16d a7a6 86ca | 33 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n002 4 edc8 ebca f361 f360 | 15 f74e (0) f410 (0) f5c4 (0) f361 (0)\n003 2 db08 d224 | 6 d6ff (0) d0f3 (0) d224 (0) dc97 (0)\n004 2 c3a1 c181 | 2 c3a1 (0) c181 (0)\n005 3 cbc5 ca03 c8e5 | 3 cbc5 (0) ca03 (0) c8e5 (0)\n006 1 cdcd | 1 cdcd (0)\n============ DEPTH: 7 ==========================================\n007 1 cfbb | 1 cfbb (0)\n008 0 | 0\n009 1 cec3 | 1 cec3 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","private_key":"f6a40f6cecf0cb1296f7e100e8ee72b402405531fc277f70a99355650e3d7248","name":"node_ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","services":["bzz","pss"],"enable_msg_events":true,"port":43447},"up":true}},{"node":{"info":{"id":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","name":"node_042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","enode":"enode://0220d1612c3a461835407833a67a205cdc87d1df9aabc985243ad449332e2d38b80f52f8973a28babecac8fc22daf2862497c79efdbeaf82cce5ffe402efde4a@127.0.0.1:0","enr":"0xf88fb84007dcb9c1db66f2f7829bea3542a0b3053a1cae6b9452c7619ecc9080f00be44a7842d6a03474709be30cb31e8a773adaafd033c60d684af4d63ae57f729b446d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020220d1612c3a461835407833a67a205cdc87d1df9aabc985243ad449332e2d38","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BCeI1bcsuEo3VWXRINI5orFP3ziz9fmSKE14U1B3FIo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 042788\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 aebd a7a6 b16d f410 | 63 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n001 4 7639 5776 4cd0 41b9 | 38 6ecb (0) 6e5c (0) 6d60 (0) 6c02 (0)\n002 8 3ee4 3e56 3cb1 2459 | 12 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n003 4 13bc 109e 1929 1be4 | 4 13bc (0) 109e (0) 1929 (0) 1be4 (0)\n004 2 0ab9 0ff6 | 3 0bcf (0) 0ab9 (0) 0ff6 (0)\n005 5 0390 0218 027f 026d | 5 0390 (0) 0218 (0) 027f (0) 026d (0)\n============ DEPTH: 6 ==========================================\n006 1 06b9 | 1 06b9 (0)\n007 1 0506 | 1 0506 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","private_key":"ef2c90067d97cab14a4cf2eff2fa9332bc6149d7c6ddc78f3dfddf9fa938b9ba","name":"node_042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","services":["bzz","pss"],"enable_msg_events":true,"port":46141},"up":true}},{"node":{"info":{"id":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","name":"node_41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","enode":"enode://2a29ba5bbf7e82989e16f954d13795448cfffbc9f0d87a5e01c809de44cee798cba2568c3318ad4e7ac48915e5e99c46b3973d7ca9da44d169ced570e274088c@127.0.0.1:0","enr":"0xf88fb8407a50ecfb4ac26fa2aa0595d78a631d0be7ee8d3588ddd05dda07c3dedcfe07d83f0e6e095a3fe0d3382f43949ae3f633f5a780c1ee3921341dbe3c17cf9eec0a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022a29ba5bbf7e82989e16f954d13795448cfffbc9f0d87a5e01c809de44cee798","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QbnuetGWmOl1ibBZrTMzy2TwLBYAbZT7PQutfO2P8jg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 41b9ee\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b16d a7a6 | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 11 39db 286a 2434 2459 | 27 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n002 9 645b 6c02 6c82 6ecb | 23 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n003 7 5a01 5abc 5d60 539d | 7 5a01 (0) 5abc (0) 5d60 (0) 539d (0)\n004 3 4cd0 4b24 4a18 | 4 4cd0 (0) 48b6 (0) 4b24 (0) 4a18 (0)\n005 1 47c3 | 1 47c3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 1 4167 | 1 4167 (0)\n009 0 | 0\n010 1 419a | 1 419a (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","private_key":"beb43b0ce6c2e3a4e7f2ec5be3324f334a3bed25b9becf17d1738a61f2613c93","name":"node_41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","services":["bzz","pss"],"enable_msg_events":true,"port":40537},"up":true}},{"node":{"info":{"id":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","name":"node_78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","enode":"enode://8fe37769462119a45a588a0a6abcb43165093a0ad74a8e18016277a214169950e9f5c7d10bc217d0b80998c4cee74c344027362a9b3ca485d8c98f12dc287640@127.0.0.1:0","enr":"0xf88fb840a0f01bac92cac5d6526e266529aebd70a42a5e443d9e68bb1da73f022bb2fe79551dbcdcaa994812c375e725c8126e32ef46d373f744fcecd8f7bc0ef3f26d1b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028fe37769462119a45a588a0a6abcb43165093a0ad74a8e18016277a214169950","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eMvBmiTQlat4WISQWMZcBhxSKJuR3dks7jS+2YruSlk=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 78cbc1\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ea0e b486 b16d a7a6 | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 6 026d 0ff6 1be4 286a | 27 372d (0) 38ab (0) 39db (0) 3e56 (0)\n002 9 5abc 5d60 558e 5776 | 15 5a01 (0) 5abc (0) 5d60 (0) 539d (0)\n003 6 6982 6e5c 6d60 6c82 | 11 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n004 4 73b8 757a 772e 7639 | 6 734e (0) 7355 (0) 73b8 (0) 757a (0)\n============ DEPTH: 5 ==========================================\n005 4 7dc5 7cf4 7fbc 7f87 | 4 7dc5 (0) 7cf4 (0) 7fbc (0) 7f87 (0)\n006 1 7b92 | 1 7b92 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","private_key":"7de1fbbba1cd14694bd6b63bb00d807182ac42a8ffabee58c1eb352d696871cc","name":"node_78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","services":["bzz","pss"],"enable_msg_events":true,"port":45671},"up":true}},{"node":{"info":{"id":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","name":"node_7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","enode":"enode://a63ffc43cec6078c4261ca9a8bc556c4694f55f153d5ec2065743f7151a3b8e16a1f329f2db489e9646c33005a30ccd6947c2be1189038b9497b1634608cf116@127.0.0.1:0","enr":"0xf88fb84074c9fcda11cf86d8033a7ec003b37f4192bc99d18862396df30d040e21b6ed611ad763446b7690ea37ef1d4237ca2dcec449f1cb3a2df4176f2099ce8b39a9960183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a63ffc43cec6078c4261ca9a8bc556c4694f55f153d5ec2065743f7151a3b8e1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"f4fafuVbTIyPnVVBH/iNOgtjv+5qUWkX1J+mJz+1uGo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7f87da\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ea0e b486 b16d a7a6 | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 6 026d 018a 0ff6 1be4 | 27 372d (0) 3cb1 (0) 3e56 (0) 3ee4 (0)\n002 6 5d60 5776 4a18 419a | 15 5abc (0) 5a01 (0) 5d60 (0) 539d (0)\n003 7 6e5c 6d60 6c82 6982 | 11 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n004 5 734e 73b8 757a 772e | 6 7355 (0) 734e (0) 73b8 (0) 757a (0)\n005 2 7b92 78cb | 2 7b92 (0) 78cb (0)\n============ DEPTH: 6 ==========================================\n006 2 7dc5 7cf4 | 2 7dc5 (0) 7cf4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 7fbc | 1 7fbc (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","private_key":"a7e3fdde74aed0e2ae459190f839adf63156aa7982bde3d6ab0f33a8e8526b9d","name":"node_7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","services":["bzz","pss"],"enable_msg_events":true,"port":39359},"up":true}},{"node":{"info":{"id":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","name":"node_47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","enode":"enode://9b43113635c9212f3a25073df459dd4340386c80a79823d1931a15f6efe8cfa8bc4887bfa1237da6956b72e5c06e1c9a79a8daad206a3e91916b29e0a2027bc5@127.0.0.1:0","enr":"0xf88fb840a37ee48405baa3c5ff376e49a1443eb509afff243b04f89c05b8f4e6eb8c9c7a5756c4c8a97256b7c92d95133662d4d5fb77bc09cf085f06283d82d85c5a62630183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039b43113635c9212f3a25073df459dd4340386c80a79823d1931a15f6efe8cfa8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"R8Pg37v86+7OeIZcjJiVdzYM2cxGo7Q/S3sB7RTcMOY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 47c3e0\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 dc97 b16d aebd a7a6 | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 9 3ee4 286a 2434 2459 | 27 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n002 5 645b 6c82 7639 78cb | 23 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n003 6 5a01 5d60 539d 517a | 7 5abc (0) 5a01 (0) 5d60 (0) 539d (0)\n004 4 4cd0 48b6 4b24 4a18 | 4 4cd0 (0) 48b6 (0) 4b24 (0) 4a18 (0)\n============ DEPTH: 5 ==========================================\n005 3 4167 419a 41b9 | 3 4167 (0) 41b9 (0) 419a (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","private_key":"760e9a634e4459a6137e0a4164c2ff06b954c6bb74a19084566e563f864b8de4","name":"node_47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","services":["bzz","pss"],"enable_msg_events":true,"port":34401},"up":true}},{"node":{"info":{"id":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","name":"node_06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","enode":"enode://5e63692a1ce43cab6bc865e299006fcb429319aa159f11fa0e2d5cde573fce9a20be804b3baa55b8f64ceec46e9e671021661f6724946f19d2ab392d2f6772c7@127.0.0.1:0","enr":"0xf88fb8405aa541c395a887f464be5f1f9cf2706523e11b6aed11376895a795f591303d765ad2220baf9fc3dd3ccf472503e282fb7698969f2cc2a6d9df6ad10f2c7dd32a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035e63692a1ce43cab6bc865e299006fcb429319aa159f11fa0e2d5cde573fce9a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BrlfG6x2ykkl1QmwYhbyETrF3PBR71qgoyCuZAaeC20=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 06b95f\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 cec3 c8e5 cbc5 f410 | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 11 6c82 7639 7b92 7cf4 | 38 6982 (0) 6e5c (0) 6ecb (0) 6d60 (0)\n002 5 3ee4 26d1 2434 2459 | 12 372d (0) 38ab (0) 39db (0) 3cb1 (0)\n003 2 13bc 1be4 | 4 109e (0) 13bc (0) 1929 (0) 1be4 (0)\n004 2 0ab9 0ff6 | 3 0bcf (0) 0ab9 (0) 0ff6 (0)\n005 5 0390 026d 027f 0218 | 5 0390 (0) 0218 (0) 026d (0) 027f (0)\n============ DEPTH: 6 ==========================================\n006 2 0427 0506 | 2 0506 (0) 0427 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","private_key":"f46e1e932cac23f40da5e48808b19557c22164c16823eea2720fa52ea9286449","name":"node_06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","services":["bzz","pss"],"enable_msg_events":true,"port":35629},"up":true}},{"node":{"info":{"id":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","name":"node_0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","enode":"enode://f907d19b4970dee3081d1119e31908cb0ebcc915b2aa05c1dde8014b35d9aa0d3d2786013bad40ee4a9b54b615ed3a7236e9f526787cd201f18ab4a210e87ed2@127.0.0.1:0","enr":"0xf88fb840c0b7ab20a60ff949e9036939be157446dee043fa8688afcf67585ec1ce0377cd5af23af126525f9bd3f6170033dc2bd748394bc9398c95fa363d5c317c84bc480183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f907d19b4970dee3081d1119e31908cb0ebcc915b2aa05c1dde8014b35d9aa0d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"D/Z7Dp7GUJx3hklbez3bF2tPgiH/MA9AnwCj04noh0w=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0ff67b\npopulation: 40 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 b381 b2b9 b486 aebd | 63 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n001 13 5776 4cd0 47c3 4167 | 38 6982 (0) 6ecb (0) 6e5c (0) 6d60 (0)\n002 4 3e56 2434 2459 286a | 12 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n003 3 13bc 1929 1be4 | 4 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n004 8 0390 026d 027f 0218 | 8 0390 (0) 0218 (0) 026d (0) 027f (0)\n============ DEPTH: 5 ==========================================\n005 2 0ab9 0bcf | 2 0ab9 (0) 0bcf (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","private_key":"b19b4a43edf29d1bbb5774dd2c0f184ba873cf22764297c41af632f4d4521b57","name":"node_0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","services":["bzz","pss"],"enable_msg_events":true,"port":41299},"up":true}},{"node":{"info":{"id":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","name":"node_ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","enode":"enode://f32d87347fa320045d0437419b4f64bc07721d44cdc75a314bce969b021b92855772ec300a5cffcbd948b59461a4880ae1a8c59dc3e802876989a9edfc7c1efd@127.0.0.1:0","enr":"0xf88fb84014d558cfdcb467455447b89e2c52d929511fbde130fe2234fc3b57ca137a2f4a479c493406c6012eab1fd459e6315d30b354b20cfaca4f8bdbdecd4949c911af0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f32d87347fa320045d0437419b4f64bc07721d44cdc75a314bce969b021b9285","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ygNtHvnmzjZU8tdp8WkmqhSVcZNYZCZInhVTnfqPd2M=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ca036d\npopulation: 30 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 6982 7fbc 7639 0ff6 | 65 5a01 (0) 5abc (0) 5d60 (0) 517a (0)\n001 5 b381 b16d 86ca 92a1 | 33 ad0d (0) afa3 (0) ae67 (0) aebd (0)\n002 8 edc8 ebca ea60 e77f | 15 e16b (0) e0ea (0) e0b1 (0) e55d (0)\n003 5 dfae db08 d6ff d224 | 6 dc97 (0) dfae (0) db08 (0) d6ff (0)\n004 2 c3a1 c181 | 2 c3a1 (0) c181 (0)\n005 4 cdcd cfbb ce99 cec3 | 4 cdcd (0) cfbb (0) ce99 (0) cec3 (0)\n============ DEPTH: 6 ==========================================\n006 1 c8e5 | 1 c8e5 (0)\n007 1 cbc5 | 1 cbc5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","private_key":"b23dda65c58838a9d2ba74acdddbfc1935094baca5b3b23176f48999f0ebc423","name":"node_ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","services":["bzz","pss"],"enable_msg_events":true,"port":41163},"up":true}},{"node":{"info":{"id":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","name":"node_7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","enode":"enode://c7b74655869120b2c4706d8c143ddf837a6d4ff7ba2cb1a30bdd8096b461cbd9af42aa144a134bdf16b6ad9b6b03829d1987131098736c2fe041122be46acd7d@127.0.0.1:0","enr":"0xf88fb840ac1c45c3987cfa0bec095840df22a0a404d1b8972dbd3231eb99168cfdad644a4c5f06f117723a23bc327ac428b9d187a2a9f1e96f0f9924e76b7e7b5415ef250183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c7b74655869120b2c4706d8c143ddf837a6d4ff7ba2cb1a30bdd8096b461cbd9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"djn5pm6P9w9VTDRvqiX3gUCVfClbdI/EKhLfeXL0/MY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7639f9\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 b486 92a1 f360 ca03 | 63 a320 (0) a2ba (0) a085 (0) a75a (0)\n001 12 018a 027f 06b9 0427 | 27 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n002 5 5776 4cd0 47c3 419a | 15 5d60 (0) 5abc (0) 5a01 (0) 539d (0)\n003 4 6742 6210 6982 6c82 | 11 6ecb (0) 6e5c (0) 6d60 (0) 6c02 (0)\n004 5 7f87 7fbc 7cf4 78cb | 6 7b92 (0) 78cb (0) 7dc5 (0) 7cf4 (0)\n005 3 734e 7355 73b8 | 3 734e (0) 7355 (0) 73b8 (0)\n============ DEPTH: 6 ==========================================\n006 1 757a | 1 757a (0)\n007 1 772e | 1 772e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","private_key":"1f28b72e347e6a5c993f2226d06196d963341d6dffe3204efca5eb82a9707088","name":"node_7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","services":["bzz","pss"],"enable_msg_events":true,"port":34577},"up":true}},{"node":{"info":{"id":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","name":"node_f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","enode":"enode://a3b1ef5f74c19769b24261107a80bcb5c7314e85dadcf17d941563517510613feeba9bc1b3b3f57abccfc02fb83d4cb78cd9c7da05a955ce6fe67f03479ad64a@127.0.0.1:0","enr":"0xf88fb840fce892c7ce07a80ebaf87930e850fbe62526831641a569b7c882e674fe6429995831d7b67c7a099dfc693d60591b92835664b864ff2db071138b0c37efa03dc70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a3b1ef5f74c19769b24261107a80bcb5c7314e85dadcf17d941563517510613f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"82CEBIvw/5had/UYN5b3s3twhe5u6ou8X8YlWIVMzmc=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f36084\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1be4 419a 6982 7639 | 65 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n001 7 957d 82f0 8be4 a7a6 | 33 a320 (0) a2ba (0) a085 (0) a75a (0)\n002 8 db08 d0f3 c181 cec3 | 15 dfae (0) dc97 (0) db08 (0) d6ff (0)\n003 5 edc8 ea60 ebca e16b | 10 e16b (0) e0ea (0) e0b1 (0) e55d (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 3 f74e f410 f5c4 | 3 f74e (0) f5c4 (0) f410 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 1 f361 | 1 f361 (0)\n========================================================================="}},"config":{"id":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","private_key":"5b7394337e91a274738c8e16b112b9c1d7682e033938b183e88d96322c81f6ee","name":"node_f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","services":["bzz","pss"],"enable_msg_events":true,"port":43813},"up":true}},{"node":{"info":{"id":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","name":"node_419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","enode":"enode://06f9ae5d93bede98bb8d04bad5677a64f79b8f1c3c17543de53e89dce96c87db7c8015e798b254f5490956cbd58a052bd3309ea1ec4b41cdeb763a59e1df2ea0@127.0.0.1:0","enr":"0xf88fb840f48fdca05279f70013ea36233f54604e2e5652203d6586c7f5ac11e49ab9b1c14d6ee24716fd542ede56f18e8d74f6b13de4985d774042f464d3dde6a87e07dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10206f9ae5d93bede98bb8d04bad5677a64f79b8f1c3c17543de53e89dce96c87db","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QZpmJt0CbAQ4RhWSEhmSxr4YaDdQEWVbbUBRZs2O338=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 419a66\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 b841 8be4 92a1 9ee7 | 63 a2ba (0) a320 (0) a085 (0) a75a (0)\n001 2 0ff6 06b9 | 27 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n002 10 78cb 7cf4 7f87 7fbc | 23 6ecb (0) 6e5c (0) 6d60 (0) 6c02 (0)\n003 3 539d 517a 5a01 | 7 5d60 (0) 5abc (0) 5a01 (0) 558e (0)\n004 3 4a18 48b6 4cd0 | 4 4cd0 (0) 4b24 (0) 4a18 (0) 48b6 (0)\n005 1 47c3 | 1 47c3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 1 4167 | 1 4167 (0)\n009 0 | 0\n010 1 41b9 | 1 41b9 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","private_key":"1784affdde58532fc95837b5bd7b50ad427deccd1487d4abe583699bf0056194","name":"node_419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","services":["bzz","pss"],"enable_msg_events":true,"port":45225},"up":true}},{"node":{"info":{"id":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","name":"node_9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","enode":"enode://4fb204c7f877f39de63aaf107893f86e4a577583c7b352b55b873761870d61feeef14c9ae88c1ccf3f5901056645987349fbae583c5290bfaa425cedff42bbae@127.0.0.1:0","enr":"0xf88fb840db1e4e5331aa8fa6e8b15b7dddbce0bf805b41932f86eeb643714780ae1df8f27e4cc31ec2f7a6a984c1c623dfeb0ab29c35155b5294e015213643b1ad9986d40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024fb204c7f877f39de63aaf107893f86e4a577583c7b352b55b873761870d61fe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nuez4GtFNhXL2HN8t0UVsVD1GPGi6qLbkOVHCN0WG30=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9ee7b3\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 06b9 286a 7b92 419a | 65 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n001 6 e77f d224 ca03 c8e5 | 30 dc97 (0) dfae (0) db08 (0) d6ff (0)\n002 8 b841 b8e1 b486 b2b9 | 17 a320 (0) a2ba (0) a085 (0) a75a (0)\n003 4 86ca 82f0 83dc 8be4 | 8 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n004 3 91eb 92a1 957d | 4 9626 (0) 957d (0) 91eb (0) 92a1 (0)\n005 1 9a92 | 1 9a92 (0)\n============ DEPTH: 6 ==========================================\n006 1 9d3c | 1 9d3c (0)\n007 0 | 0\n008 1 9e02 | 1 9e02 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","private_key":"14f6f6dc12c8535f9c0ecd71836c9bf9f02b9aad5a2e86ed0c61e30246f7451a","name":"node_9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","services":["bzz","pss"],"enable_msg_events":true,"port":43061},"up":true}},{"node":{"info":{"id":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","name":"node_286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","enode":"enode://68d1075d86a39ad083dd215a50f24b3428c9189dadaa43b155a9130844d25cd85ea26a1760fefd9019e5a59c2d57b2d76fc6f2f5484471c72f53ebfdd52fdb75@127.0.0.1:0","enr":"0xf88fb84027739fe9f8470c3be7639f03c5d1339a233678f728db90a68fcee15810f3b0d22702adf6eae7e82f5738fa558e2caa4f523ddc3607fff8bf0f865a8183e225870183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10368d1075d86a39ad083dd215a50f24b3428c9189dadaa43b155a9130844d25cd8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KGrrpka7pKiqHDcr7p8sn/Cis6u08YvjISJVVcbc5OU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 286aeb\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 ea60 d224 c181 c8e5 | 63 dfae (0) dc97 (0) db08 (0) d6ff (0)\n001 9 5776 47c3 41b9 7f87 | 38 5abc (0) 5a01 (0) 5d60 (0) 539d (0)\n002 5 1be4 0ff6 06b9 0506 | 15 109e (0) 13bc (0) 1929 (0) 1be4 (0)\n003 3 3cb1 3ee4 3e56 | 6 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n============ DEPTH: 4 ==========================================\n004 4 213b 26d1 2434 2459 | 4 213b (0) 26d1 (0) 2434 (0) 2459 (0)\n005 0 | 0\n006 1 2a22 | 1 2a22 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","private_key":"976efa040e6f45cc8e22838f1bbfc9b811fa7841ca2c8092a7cc8e335815e92a","name":"node_286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","services":["bzz","pss"],"enable_msg_events":true,"port":33919},"up":true}},{"node":{"info":{"id":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","name":"node_621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","enode":"enode://dc01b24ab4982764516ace14b88809eb185560373dfbf6fcded5a81bd3fada53e0be683e0c468b1e836de13076e0ccac4e368e8c0946bf24d4390af626af29f1@127.0.0.1:0","enr":"0xf88fb84098e9b3ff2b11a0cacb15bf38a25b7cfe5b534459b7abf909c02314e31e17fd35658770c3cbabde925fb6d0d702842012518483cf082bfa9acb5cd08308a88da60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103dc01b24ab4982764516ace14b88809eb185560373dfbf6fcded5a81bd3fada53","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YhB2zmuC5wyQpK3yNapvcbEW4wLdaxXcrgf0qBYBJFU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 621076\npopulation: 23 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ad0d a7a6 a085 957d | 63 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n001 2 0ff6 286a | 27 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n002 2 419a 4167 | 15 5abc (0) 5a01 (0) 5d60 (0) 517a (0)\n003 8 7cf4 7fbc 7f87 7b92 | 12 7355 (0) 734e (0) 73b8 (0) 757a (0)\n004 2 6982 6c82 | 6 6e5c (0) 6ecb (0) 6d60 (0) 6c02 (0)\n============ DEPTH: 5 ==========================================\n005 4 645b 667e 6728 6742 | 4 645b (0) 667e (0) 6728 (0) 6742 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","private_key":"7c196a80ce1002ecd7f34c4db3cc6862875ca81e18dff1b002bc566b0275f318","name":"node_621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","services":["bzz","pss"],"enable_msg_events":true,"port":45645},"up":true}},{"node":{"info":{"id":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","name":"node_ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","enode":"enode://d5dfcc59c4faaf151e2776e409ecb40fa62ba49cf62037b1857207692f6458d99e28f78a29bb3453d075d55c0a7b1574c3bae19e941395eabbb9934073eef2de@127.0.0.1:0","enr":"0xf88fb840314fdfeda295b7bdfcfa72520885849888dae3f5054cf13b02569d9d15272ec149953ca0fdab37be304e3c314f453a3aff78855724625541e7dbae0ac5a5aea10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d5dfcc59c4faaf151e2776e409ecb40fa62ba49cf62037b1857207692f6458d9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"68pRjlFG9JrHW8qordLvTR0ixc/S4jJsa0GCbUXOVa4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ebca51\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 13bc 7cf4 6982 6210 | 65 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n001 6 957d 82f0 b381 b841 | 33 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n002 7 db08 d224 d0f3 ce99 | 15 dc97 (0) dfae (0) db08 (0) d6ff (0)\n003 5 f361 f360 f74e f5c4 | 5 f74e (0) f5c4 (0) f410 (0) f361 (0)\n004 3 e0b1 e55d e77f | 5 e16b (0) e0ea (0) e0b1 (0) e55d (0)\n005 2 ed32 edc8 | 2 ed32 (0) edc8 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 ea0e ea60 | 2 ea0e (0) ea60 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","private_key":"3d5e22365b5c9d1fdeb13d45cd12ef39ca2553f7d838ed915e74c428827504e0","name":"node_ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","services":["bzz","pss"],"enable_msg_events":true,"port":46379},"up":true}},{"node":{"info":{"id":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","name":"node_cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","enode":"enode://dc20237eda8fa674c764f707dd28b4c1e19ad46cbb7206be66d38eac7d630e4047f8dde066f6946ccef3c6b197e5b3b3a3dc60e0590ed7af75c63287f70a0a75@127.0.0.1:0","enr":"0xf88fb840af3cea3226ce0700aa6c6adfefb1f86b66df4dcfe207c13f42675d0f2375ea654d37d12e6bdfa169779ee5783787cc49c83bd4b25575dfe986252e7aff23216f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103dc20237eda8fa674c764f707dd28b4c1e19ad46cbb7206be66d38eac7d630e40","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"y8XUKVG8bhhylrX4zk0E5HLiZnCmKFHznWXzHFCGX2o=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cbc5d4\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 0ff6 06b9 0427 027f | 65 109e (0) 13bc (1) 1929 (0) 1be4 (0)\n001 6 92a1 b381 b16d b841 | 33 a75a (0) a7a6 (0) a2ba (0) a320 (0)\n002 3 f360 edc8 ebca | 15 f361 (0) f360 (0) f74e (0) f5c4 (0)\n003 4 dfae db08 d224 d0f3 | 6 dc97 (0) dfae (0) db08 (0) d6ff (0)\n004 2 c3a1 c181 | 2 c3a1 (0) c181 (0)\n005 4 cdcd cfbb ce99 cec3 | 4 cdcd (0) cfbb (0) ce99 (0) cec3 (0)\n============ DEPTH: 6 ==========================================\n006 1 c8e5 | 1 c8e5 (0)\n007 1 ca03 | 1 ca03 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","private_key":"b4f4e78aa0688362953df7a69f8c6cdf22151679efa7d71ae0d29d64348105e8","name":"node_cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","services":["bzz","pss"],"enable_msg_events":true,"port":38181},"up":true}},{"node":{"info":{"id":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","name":"node_7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","enode":"enode://1f9e2e5916cccc7c7134cfa950fd528992f3fe0cbfa44ca1ea2a878752c3e5841e41803494191b3e9009d2cfa0dc612e127490a75d21164eb4adca2514b011b6@127.0.0.1:0","enr":"0xf88fb84035545a7728c7f874e5cb8ed3369cfdc416e36f6462741040c8c5c6693860e0c6084d4da3f1318070c10b0958611e7fe3f63780cb689743695cbaf7f8bffbc4ae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021f9e2e5916cccc7c7134cfa950fd528992f3fe0cbfa44ca1ea2a878752c3e584","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fPSDinyDpzbOWc+huXRnSgGF2+F6jzzSl5Sju+gUre4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7cf483\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b486 ebca cbc5 | 63 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n001 4 3e56 0ff6 026d 06b9 | 27 109e (0) 13bc (0) 1929 (0) 1be4 (0)\n002 7 5d60 5776 4167 419a | 15 5a01 (0) 5abc (0) 5d60 (0) 539d (0)\n003 5 6210 645b 6742 6c82 | 11 6e5c (0) 6ecb (0) 6d60 (0) 6c02 (0)\n004 5 757a 772e 7639 73b8 | 6 7355 (0) 734e (0) 73b8 (0) 757a (0)\n005 2 78cb 7b92 | 2 7b92 (0) 78cb (0)\n============ DEPTH: 6 ==========================================\n006 2 7f87 7fbc | 2 7f87 (0) 7fbc (0)\n007 1 7dc5 | 1 7dc5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","private_key":"f8097f48d51332321d9d6d051a647bcc23dc5f6d3d90af68302348ec6554eb2c","name":"node_7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","services":["bzz","pss"],"enable_msg_events":true,"port":35111},"up":true}},{"node":{"info":{"id":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","name":"node_7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","enode":"enode://e828a02c476bfb4f9e77624db84d48a68fbe905c50586631faff90022af54eadba081aafe50144c86cb2d8c87f5da11a72f2824fd6e5fee8a4788b73232c0b06@127.0.0.1:0","enr":"0xf88fb840d7e722a5a02da1ba8ba198af44bd707ae67cb31ac9ba6bb979e42378114d7c467b0ae58de3699cd853cab121b1714bbeaa20692c31bf959346c9a2558080616a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e828a02c476bfb4f9e77624db84d48a68fbe905c50586631faff90022af54ead","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"f7wYQ+IiLjyONaMhXRu7TVRX2LntM3SeB+IvJbqe5XY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7fbc18\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 ca03 c8e5 cfbb ce99 | 63 dc97 (0) dfae (0) db08 (0) d6ff (0)\n001 3 3e56 0ff6 06b9 | 27 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n002 3 4167 419a 41b9 | 15 5d60 (0) 5a01 (0) 5abc (0) 517a (0)\n003 4 6c82 6982 6210 6742 | 11 645b (0) 667e (0) 6728 (0) 6742 (0)\n004 4 772e 7639 7355 73b8 | 6 734e (0) 7355 (0) 73b8 (0) 757a (0)\n005 2 78cb 7b92 | 2 78cb (0) 7b92 (0)\n============ DEPTH: 6 ==========================================\n006 2 7dc5 7cf4 | 2 7dc5 (0) 7cf4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 7f87 | 1 7f87 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","private_key":"2a6bc25e58ea6c30639feb4e97a394af64178e6a42aaab9b082079c20f02434e","name":"node_7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","services":["bzz","pss"],"enable_msg_events":true,"port":40281},"up":true}},{"node":{"info":{"id":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","name":"node_86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","enode":"enode://160b7b02fe623f5d12e809600a6b47beeb4b30b2951dd67841739f40d54b98b2549eba0adfd40193ef0171a252a403d74752d6b9b7f68c89f18dda26437b2c59@127.0.0.1:0","enr":"0xf88fb8407c73d98812b302dac9f29fe48726b92a0dfa7517895f046594c3773f02a3e4e420da6443c739e51a2ccb79bfa2681764763bf1e4d8dcf515239dd132259941530183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103160b7b02fe623f5d12e809600a6b47beeb4b30b2951dd67841739f40d54b98b2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hsoQeNrkDyOuGzrEc5dGDZ7AvyQ6DeNytAU4HWci/LI=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 86ca10\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 4167 7fbc | 65 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n001 7 ea60 e77f d224 cec3 | 30 dc97 (0) dfae (0) db08 (0) d6ff (0)\n002 4 a085 a7a6 ad0d aebd | 17 a2ba (0) a320 (0) a085 (0) a75a (0)\n003 5 9ee7 9a92 9626 957d | 8 9a92 (0) 9d3c (0) 9e02 (0) 9ee7 (0)\n004 4 8cf9 895b 8b76 8be4 | 5 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n============ DEPTH: 5 ==========================================\n005 2 83dc 82f0 | 2 83dc (0) 82f0 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","private_key":"f6fd1d1772c650e60c41e06f59fc6bba67d5cc264f8fe14e6908e77e9c43f9e2","name":"node_86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","services":["bzz","pss"],"enable_msg_events":true,"port":46147},"up":true}},{"node":{"info":{"id":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","name":"node_4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","enode":"enode://a7bb630e0a99ad26a47f5bcf331536335c3e04dd4ffdbd27f229ec42dcc5eb7016e0e5f2cb8b3cf3489a317e161fdbc729703ba936b737ee2295a4b87f070e41@127.0.0.1:0","enr":"0xf88fb8402c97a2dc8b64057107147453b6c09e3c44ef973679e5658b0b6d0b2b187c4853555cb891d58dbfd328bb8cb83e55bad3c63f3fb185644e4684308ee0bc87b7550183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a7bb630e0a99ad26a47f5bcf331536335c3e04dd4ffdbd27f229ec42dcc5eb70","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QWeUbeJQsBPhvhbuhL/izKroPmmeYYs48xAWxOQx5ro=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 416794\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 f410 86ca | 63 dfae (0) dc97 (0) db08 (0) d6ff (0)\n001 4 13bc 0ff6 018a 06b9 | 27 1929 (0) 1be4 (0) 109e (0) 13bc (0)\n002 13 7b92 78cb 7cf4 7f87 | 23 645b (0) 667e (0) 6728 (0) 6742 (0)\n003 3 5a01 539d 5776 | 7 5d60 (0) 5abc (0) 5a01 (0) 517a (0)\n004 4 4b24 4a18 48b6 4cd0 | 4 4b24 (0) 4a18 (0) 48b6 (0) 4cd0 (0)\n005 1 47c3 | 1 47c3 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 2 41b9 419a | 2 41b9 (0) 419a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","private_key":"2e633e4e9e522151a2b2bd98030f66cd31b2e81feb8ab86004b194a703e3fb86","name":"node_4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","services":["bzz","pss"],"enable_msg_events":true,"port":42087},"up":true}},{"node":{"info":{"id":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","name":"node_f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","enode":"enode://df462c25ee8bcaf3bcfd05af911c6466c62d31175cf9c44288595b39729d64e7a2e81626fe01bc61b0036fbf2dadb271171e7e9c6812214526b2f1c83e6c5881@127.0.0.1:0","enr":"0xf88fb8404a32ca40db377ce80d0e646c9643936683374ce6e8ec14963aae37672d13490f2f06bf8861a4b5f426b9f70eb96e75389076f3d92ce641abc9191a362c185bb00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df462c25ee8bcaf3bcfd05af911c6466c62d31175cf9c44288595b39729d64e7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9BDUrJt0jCT6DUjDBTuxzqimfQvMTl/L2yYcDHUizDQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f410d4\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 3ee4 0ff6 06b9 0427 | 65 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n001 5 b381 a7a6 82f0 957d | 33 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n002 2 ca03 d224 | 15 dc97 (0) dfae (0) db08 (0) d6ff (0)\n003 4 e16b e77f ea60 ebca | 10 e16b (0) e0b1 (0) e0ea (0) e55d (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 2 f361 f360 | 2 f361 (0) f360 (0)\n006 1 f74e | 1 f74e (0)\n007 1 f5c4 | 1 f5c4 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","private_key":"a9a777290064b28ab9e2bd8edfcf9cf14e40ba8fb169ba18ec322bebd1e9796c","name":"node_f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","services":["bzz","pss"],"enable_msg_events":true,"port":46863},"up":true}},{"node":{"info":{"id":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","name":"node_92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","enode":"enode://d4f739677902ad2701144cab8f87489253d25aeda47e8ed5817e4562ddaae678ffe9c52f8716f132ce74f96161ed770ccc5627a11dca2ea4024b49b8a6054f11@127.0.0.1:0","enr":"0xf88fb8400fb72975a9f5e05d571cc9bc2a2acf555ccd87f5b870d76b312c9964b17f7bc45382dd2fc4e0c93ff5987f761bc2e9faa304c2be53ed8588128a89d0b881c5750183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d4f739677902ad2701144cab8f87489253d25aeda47e8ed5817e4562ddaae678","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"kqFQHtQeKbt92OtLSs7K6YP0x8g/OYlc1o94ELZF8d0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 92a150\npopulation: 24 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7b92 7639 419a | 65 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n001 8 d224 d0f3 ca03 cbc5 | 30 c181 (0) c3a1 (0) cdcd (0) cfbb (0)\n002 3 afa3 a7a6 b841 | 17 a320 (0) a2ba (0) a085 (0) a75a (0)\n003 3 8be4 86ca 82f0 | 8 83dc (0) 82f0 (0) 86ca (0) 8cf9 (0)\n004 4 9a92 9d3c 9e02 9ee7 | 4 9d3c (0) 9e02 (0) 9ee7 (0) 9a92 (0)\n============ DEPTH: 5 ==========================================\n005 2 9626 957d | 2 9626 (0) 957d (0)\n006 1 91eb | 1 91eb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","private_key":"d99269d5a3d87afd088aa258ab85c5ee8f988fdd019689f5f639b1e488b7abae","name":"node_92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","services":["bzz","pss"],"enable_msg_events":true,"port":43101},"up":true}},{"node":{"info":{"id":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","name":"node_b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","enode":"enode://8df6b1e4435d4b72ae0f6dcda1002d86349ac28a9b9a182692a0fd2cb5f10255b8f960fddb898e957a04daa3a6b3f6aa6ef97bed544b4b99ad81edff6707d20f@127.0.0.1:0","enr":"0xf88fb840b8517e545b313545c0b7003080e9c0b7e74c291b272d1e018dc8684a4ca24bcc4f7af3c9997eb09cf50e46161d175a929d29372f4a73ec5cb21e06b0c6d0146e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038df6b1e4435d4b72ae0f6dcda1002d86349ac28a9b9a182692a0fd2cb5f10255","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uEEfGY/WWMWiAog1wK8zQhRYOcBsik84LZ+d5IXUbAg=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8411f\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 06b9 419a 73b8 | 65 5a01 (0) 5abc (0) 5d60 (0) 5776 (0)\n001 6 db08 cbc5 e77f e55d | 30 f74e (0) f410 (0) f5c4 (0) f361 (0)\n002 6 82f0 8be4 9d3c 9ee7 | 16 83dc (0) 82f0 (0) 86ca (0) 8cf9 (0)\n003 5 a7a6 a085 ad0d afa3 | 9 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n004 4 b486 b16d b381 b2b9 | 5 b70e (0) b486 (0) b16d (0) b381 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 0 | 0\n007 1 b92a | 1 b92a (0)\n008 1 b8e1 | 1 b8e1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","private_key":"949877f6e6d76788923054b7bd6526b9001f04a77df87bc9161352dc5453e5bc","name":"node_b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","services":["bzz","pss"],"enable_msg_events":true,"port":33251},"up":true}},{"node":{"info":{"id":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","name":"node_8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","enode":"enode://fc32bff950e71029ffb87f1cd11cd8b80e17e8a1bb87da502f53a1ce59ae43cfe17583075dd14d54a9e2e5f0a45ea7a7e66a3ef496ff5fbe5170bb5cf2c94b21@127.0.0.1:0","enr":"0xf88fb840c686f651105296aa062d5461136529224697c9783747504a33939d92f192c56e1b9b95e2c2493d32ede538f135f81cc3e3ec89f91ba1d068c056c407c775d30c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fc32bff950e71029ffb87f1cd11cd8b80e17e8a1bb87da502f53a1ce59ae43cf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"i+RhID9eu1chNI9TezfXaPe9NZrz4Y0ffpry+QHEmEU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8be461\npopulation: 26 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 419a 7b92 73b8 | 65 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n001 6 ea60 e77f f360 c8e5 | 30 f74e (0) f5c4 (0) f410 (0) f361 (0)\n002 5 a7a6 ad0d afa3 aebd | 17 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n003 5 9d3c 9ee7 9a92 92a1 | 8 9e02 (0) 9ee7 (0) 9d3c (0) 9a92 (0)\n004 3 86ca 83dc 82f0 | 3 86ca (0) 83dc (0) 82f0 (0)\n005 1 8cf9 | 1 8cf9 (0)\n============ DEPTH: 6 ==========================================\n006 2 89c8 895b | 2 89c8 (0) 895b (0)\n007 0 | 0\n008 1 8b76 | 1 8b76 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","private_key":"0f6530f636582633a6311f48aa9d253eab18b87cbebe43f367a159aa3c241c46","name":"node_8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","services":["bzz","pss"],"enable_msg_events":true,"port":45015},"up":true}},{"node":{"info":{"id":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","name":"node_aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","enode":"enode://f282cd19ae6a9df87585322507e574bc32df4841972dd882a9a05870050a1b598c8fc33af74f96a6420a9880385812d048ace508f80750a8de0cb24c56212d78@127.0.0.1:0","enr":"0xf88fb84031ffcecf6c8f21aa2106e8d9bbdaa2414c925860a95299b3ade0ebacc68255dc2f7eb3419664abbd0c8819f34be4a3452dfb3fdd59dd7c81c6133f3c7b98d96b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f282cd19ae6a9df87585322507e574bc32df4841972dd882a9a05870050a1b59","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rr1hNdECUrB/iRs6czCQP68T1AnE9xCGMHFfoHVPk44=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aebd61\npopulation: 29 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 3e56 3ee4 13bc 0ff6 | 65 018a (0) 0390 (0) 0218 (0) 026d (0)\n001 5 f360 e77f ebca d224 | 30 f74e (0) f5c4 (0) f410 (0) f361 (0)\n002 5 9d3c 9ee7 82f0 86ca | 16 9e02 (0) 9ee7 (0) 9d3c (0) 9a92 (0)\n003 3 b841 b2b9 b381 | 8 b70e (0) b486 (0) b16d (0) b381 (0)\n004 4 a7a6 a320 a2ba a085 | 5 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 ad0d | 1 ad0d (0)\n007 1 afa3 | 1 afa3 (0)\n008 1 ae67 | 1 ae67 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","private_key":"1052de44bfe98977c2f57b1304d18f99ad509385a540c598539f43a9fd01a076","name":"node_aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","services":["bzz","pss"],"enable_msg_events":true,"port":32913},"up":true}},{"node":{"info":{"id":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","name":"node_4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","enode":"enode://26c256c0419d8280c23d163c3dada761578f80e066c614882b6efe25eb4b5d9e06e50aa77e5306508227275d3ad527fc67dca7f4c3066a7e89e5b7d0b48cf106@127.0.0.1:0","enr":"0xf88fb840d136e30739a296b8258bac9b8c021058e3b129b00b86eefcae768e963d71000d436fb91ca2511d958b15dbd33372cf80dd57a8b2d6439fd1a7a261f5d8d66feb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10226c256c0419d8280c23d163c3dada761578f80e066c614882b6efe25eb4b5d9e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TNDzjlKlCPgc+V4TcMmUrqLXpJoqCOPgVPU2KaZhlBA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4cd0f3\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b2b9 b381 aebd | 63 f74e (0) f5c4 (0) f410 (0) f361 (0)\n001 7 13bc 0ff6 0bcf 027f | 27 018a (0) 0390 (0) 0218 (0) 026d (0)\n002 9 6728 6742 6ecb 6982 | 23 757a (0) 772e (0) 7639 (0) 734e (0)\n003 2 5a01 539d | 7 558e (0) 5776 (0) 517a (0) 539d (0)\n004 4 47c3 4167 41b9 419a | 4 47c3 (0) 4167 (0) 41b9 (0) 419a (0)\n============ DEPTH: 5 ==========================================\n005 3 4a18 4b24 48b6 | 3 4a18 (0) 4b24 (0) 48b6 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","private_key":"bc76c03a436db84839741888c68b1cdddedd194bc0c48dd035a5b8fce7fa6f2b","name":"node_4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","services":["bzz","pss"],"enable_msg_events":true,"port":38223},"up":true}},{"node":{"info":{"id":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","name":"node_2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","enode":"enode://d7f147b4838d04a590e69acd66b2f879e2de85f8607e998c3e8c35841145bbe75feb3b9a00e5c33fe2185506151da35ab450699981b512c4dcf86ec22e5538e6@127.0.0.1:0","enr":"0xf88fb8400f37b8427aa3076dbc1caa48263b9df3bc54fe10fadece63d56c92ecd89cbe31074c7a98aa40bbd3a1d5adf1c59ce9dbf534f2d891b802986e99ee22585328ec0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d7f147b4838d04a590e69acd66b2f879e2de85f8607e998c3e8c35841145bbe7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JFn+klCzMRyGUw0At6m4ulextRUcEmJi5wxV0ejTeSQ=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2459fe\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 a085 afa3 ea60 cec3 | 63 e0b1 (0) e0ea (0) e16b (0) e77f (0)\n001 11 757a 7639 7355 7b92 | 38 757a (0) 772e (0) 7639 (0) 734e (0)\n002 7 0bcf 0ff6 0427 06b9 | 15 0506 (0) 0427 (0) 06b9 (0) 018a (0)\n003 5 372d 38ab 3cb1 3ee4 | 6 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n004 2 2a22 286a | 2 2a22 (0) 286a (0)\n005 1 213b | 1 213b (0)\n============ DEPTH: 6 ==========================================\n006 1 26d1 | 1 26d1 (0)\n007 0 | 0\n008 0 | 0\n009 1 2434 | 1 2434 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","private_key":"4c8204f3f41c8735aa70c249cbaa8f57ea41b39b651490de8de8c12fd2691eaa","name":"node_2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","services":["bzz","pss"],"enable_msg_events":true,"port":37643},"up":true}},{"node":{"info":{"id":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","name":"node_698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","enode":"enode://d6a014202d01536e4928ed4efbe17f6d6a7fa8fc624bafce75e43cd1f25f6aeb2a474087e08c4e0b49a38a5e4486fa8c08092f00164df92082dec0fbd9834433@127.0.0.1:0","enr":"0xf88fb840151b4bf6e849b0ac2ec218151f8dfa803c5b5d34733bf46e1c711e9d2ba90c6c6a9084cf38dcd6cc4ccc77d3aa6b062ad0ccd53666db1de1d30ace82ce35afb10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d6a014202d01536e4928ed4efbe17f6d6a7fa8fc624bafce75e43cd1f25f6aeb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aYJH0QOokl2LtMVqMFbknF78WV/O0cidSZQ7uboB85Q=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 698247\npopulation: 35 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 cbc5 ca03 c8e5 c3a1 | 63 e0ea (0) e0b1 (0) e16b (0) e77f (0)\n001 2 3ee4 2459 | 27 0427 (0) 0506 (0) 06b9 (0) 018a (0)\n002 4 4167 419a 4cd0 48b6 | 15 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n003 10 7639 7355 734e 73b8 | 12 757a (0) 772e (0) 7639 (0) 734e (0)\n004 3 6210 6728 6742 | 5 6210 (0) 645b (0) 667e (0) 6728 (0)\n============ DEPTH: 5 ==========================================\n005 5 6e5c 6ecb 6d60 6c82 | 5 6e5c (0) 6ecb (0) 6c82 (0) 6c02 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","private_key":"20311624a5a56cae7a90aedb142273ff36c5f5d52598fa621d5e388c078ca94f","name":"node_698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","services":["bzz","pss"],"enable_msg_events":true,"port":40773},"up":true}},{"node":{"info":{"id":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","name":"node_6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","enode":"enode://84717a6835e106aad3b6c055224217d5d064ac8909100b55eaabc37dc20949be1f33a3b838405bcd5e71cbfbb69170d21ff07952aab37534f965efccaf979d50@127.0.0.1:0","enr":"0xf88fb840d2f711c921f221581b2944e9166c506e85656605df5d204f343f836509260aa24240127b85cb3cf9945ddb9030e85db8e5e6f393b31b1b7cda2cd36a8eeda4110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10284717a6835e106aad3b6c055224217d5d064ac8909100b55eaabc37dc20949be","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z0LMobd4P8vtjQs0BQj5PMTfrKj/PxP9WTVEhsTWKZM=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6742cc\npopulation: 27 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 b2b9 b381 957d 82f0 | 63 ed32 (0) edc8 (0) ea60 (0) ea0e (0)\n001 2 26d1 13bc | 27 06b9 (0) 0427 (0) 0506 (0) 018a (0)\n002 5 539d 4167 4cd0 4b24 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 9 7639 734e 7355 73b8 | 12 757a (0) 772e (0) 7639 (0) 734e (0)\n004 3 6d60 6c82 6982 | 6 6e5c (0) 6ecb (0) 6c02 (0) 6c82 (0)\n005 1 6210 | 1 6210 (0)\n006 1 645b | 1 645b (0)\n============ DEPTH: 7 ==========================================\n007 1 667e | 1 667e (0)\n008 0 | 0\n009 1 6728 | 1 6728 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","private_key":"0cb73f4cde658fd3ac83b434133145d5fbd0bf4f9ab6e3923171d443eba90568","name":"node_6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","services":["bzz","pss"],"enable_msg_events":true,"port":40229},"up":true}},{"node":{"info":{"id":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","name":"node_82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","enode":"enode://e8117dddd5f5e8f212dbd7147bd8bf02068ddb0e94123d323731d22a7f0103610057f6ae1a76d6442bef79f3ae52f0faf62c535b759ee126461f402b83ba45bd@127.0.0.1:0","enr":"0xf88fb840d046f5dff4971dc895e66458c436e6e3a27c96b8d53df7b3b9ad0e77f4345ed32a7b206c7a3d662fd18b0f7a404a7dc243abbdc9a8a677f9973dd2b99af279ff0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e8117dddd5f5e8f212dbd7147bd8bf02068ddb0e94123d323731d22a7f010361","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gvA024j9JrR8JrlcP4eh9FT/5FJq6GvrK7HY8sIYwlw=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 82f034\npopulation: 34 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6982 6742 | 65 06b9 (0) 0506 (0) 0427 (0) 018a (0)\n001 9 f360 f410 f5c4 ebca | 30 e77f (0) e55d (0) e0ea (0) e0b1 (0)\n002 9 a085 a2ba ad0d aebd | 17 a7a6 (0) a75a (0) a320 (0) a2ba (0)\n003 7 9a92 9ee7 9e02 9d3c | 8 9e02 (0) 9ee7 (0) 9d3c (0) 9a92 (0)\n004 5 8cf9 89c8 895b 8b76 | 5 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n============ DEPTH: 5 ==========================================\n005 1 86ca | 1 86ca (0)\n006 0 | 0\n007 1 83dc | 1 83dc (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","private_key":"c43af8c1c17ec355ac7f8bef6f05ba9db12db47c9e201a266d0d65065798ba3c","name":"node_82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","services":["bzz","pss"],"enable_msg_events":true,"port":33523},"up":true}},{"node":{"info":{"id":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","name":"node_b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","enode":"enode://a22d89dcb4290953d158b22c35c5c68eeb5e11220f22b58314ba70f7fc2b7603b7c6e1ff81f0dd1b53230d0a89eab8629e5629a51e8933fa5561cf04542b202a@127.0.0.1:0","enr":"0xf88fb8400a3de612482002f22886dbd86e19870d74873631d82f29687df78027690518e16dc049dcbcfbe0ea0984b62dd97074247757a9c4675a87c49da61843ca343e2d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a22d89dcb4290953d158b22c35c5c68eeb5e11220f22b58314ba70f7fc2b7603","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"srmsD021iIZZevexnWFQSYrIrXyARnFiiqNDhLj+UF4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2b9ac\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 6d60 6742 6728 667e | 65 5d60 (0) 5abc (0) 5a01 (0) 558e (0)\n001 2 f5c4 d224 | 30 ed32 (0) edc8 (0) ea60 (0) ea0e (0)\n002 5 91eb 9d3c 9ee7 9a92 | 16 9ee7 (0) 9e02 (0) 9d3c (0) 9a92 (0)\n003 6 a75a a085 a2ba ad0d | 9 a7a6 (0) a75a (0) a320 (0) a2ba (0)\n004 3 b92a b8e1 b841 | 3 b92a (0) b8e1 (0) b841 (0)\n005 2 b486 b70e | 2 b486 (0) b70e (0)\n============ DEPTH: 6 ==========================================\n006 1 b16d | 1 b16d (0)\n007 1 b381 | 1 b381 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","private_key":"468f3a0090d15106e770801e7f4f0fc26bf78d3698be131eb3585ca410116084","name":"node_b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","services":["bzz","pss"],"enable_msg_events":true,"port":42099},"up":true}},{"node":{"info":{"id":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","name":"node_3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","enode":"enode://4b65a104001fb3c5edd9eb6477d5e7daca674195a347fa8deb71a83931f3475569a6ee580c248b2243c09b8787be153f817ee6b282fb0572424fa91c9243ffb6@127.0.0.1:0","enr":"0xf88fb8409d8ea451f2658de612662bd9b07a86cb819f781fa9d8f8e1350199a2666dae1d498b271416d9b6f88a3f0468d2f2971a017e78e789d14596d7ca1b56365597d10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024b65a104001fb3c5edd9eb6477d5e7daca674195a347fa8deb71a83931f34755","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PlbUUz7BT2ZW4esl+zXa1HydtHn2Z6a2/po6qMEumC4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3e56d4\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 ea60 d224 a085 aebd | 63 ed32 (0) edc8 (0) ea0e (0) ea60 (0)\n001 6 48b6 6c82 7639 7fbc | 38 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n002 5 0427 0ff6 0bcf 1929 | 15 06b9 (0) 0506 (0) 0427 (0) 018a (0)\n003 4 2a22 286a 26d1 2459 | 6 2a22 (0) 286a (0) 213b (0) 2434 (0)\n004 1 372d | 1 372d (0)\n005 2 39db 38ab | 2 39db (0) 38ab (0)\n============ DEPTH: 6 ==========================================\n006 1 3cb1 | 1 3cb1 (0)\n007 0 | 0\n008 1 3ee4 | 1 3ee4 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","private_key":"3934a1eb89e5d3bd316aca133dcf3e380fe237373fdc981c7d7c138612ca06c2","name":"node_3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","services":["bzz","pss"],"enable_msg_events":true,"port":44945},"up":true}},{"node":{"info":{"id":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","name":"node_7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","enode":"enode://f8572034b7fc585c1903d4bb5879cf1ffbac94cbc1897edfe98d9b9f84d93d26b67f2abeb88ce77608ed262152ac3840f448f26a5a61afa46eea388e2f4b7a42@127.0.0.1:0","enr":"0xf88fb8400e94e52c2270cce5bdd17883b40ecc21d4ec6157af03e3c97775e38e6fc0370d63efe0aae8270863a14fb499442bdd706b616fb6843938b664eb2f43ba9fce8f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f8572034b7fc585c1903d4bb5879cf1ffbac94cbc1897edfe98d9b9f84d93d26","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"e5JCE3+Mwr7Hs+AAP9kwJpIc6xDfrbvVtqpk1hp0814=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7b9242\npopulation: 48 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 8be4 8cf9 957d 9626 | 63 9e02 (0) 9ee7 (0) 9d3c (0) 9a92 (0)\n001 14 13bc 0ab9 0bcf 0ff6 | 27 0427 (0) 0506 (0) 06b9 (0) 018a (0)\n002 3 4167 48b6 4cd0 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 9 6982 6d60 6c02 6e5c | 11 6210 (0) 645b (0) 667e (0) 6728 (0)\n004 6 7639 772e 757a 734e | 6 757a (0) 772e (0) 7639 (0) 734e (0)\n============ DEPTH: 5 ==========================================\n005 4 7cf4 7dc5 7f87 7fbc | 4 7f87 (0) 7fbc (0) 7cf4 (0) 7dc5 (0)\n006 1 78cb | 1 78cb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","private_key":"5a6b556ff9b73fe0850c45f469fbfd6e6f0d2d5af3f3831f4376a08b8ca8a549","name":"node_7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","services":["bzz","pss"],"enable_msg_events":true,"port":39179},"up":true}},{"node":{"info":{"id":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","name":"node_73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","enode":"enode://14b035995d987becf991740865f7caa23bad70978a889984199627036686ab81a14519d760274790b6bacf5268d2e469987a4470aae895019e00d2d43d366278@127.0.0.1:0","enr":"0xf88fb84057f0098ffc99b981a4c2b43591db40bfbc63ac9be4c3abecc42ba157711a2e2a7c925f830e8fa6b04074eea3c2c534df67e40efc15f1bb75348fbed8d0d468870183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10214b035995d987becf991740865f7caa23bad70978a889984199627036686ab81","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"c7jRhA0Kj/5pdS7Jb4/d7LDiJybIeYLVcsqazByc2/w=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 73b8d1\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 8be4 b841 d6ff d224 | 63 9ee7 (0) 9e02 (0) 9d3c (0) 9a92 (0)\n001 3 3ee4 0bcf 13bc | 27 06b9 (0) 0427 (0) 0506 (0) 0390 (0)\n002 4 419a 4167 48b6 4cd0 | 15 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n003 6 6ecb 6982 667e 6728 | 11 6210 (0) 645b (0) 667e (0) 6728 (0)\n004 6 7dc5 7cf4 7f87 7fbc | 6 7f87 (0) 7fbc (0) 7cf4 (0) 7dc5 (0)\n005 3 772e 7639 757a | 3 772e (0) 7639 (0) 757a (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 2 734e 7355 | 2 734e (0) 7355 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","private_key":"29694c9dcdcbd8510814aabcc1c9a32e23b92f4596464ba205244a4954cc0595","name":"node_73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","services":["bzz","pss"],"enable_msg_events":true,"port":36127},"up":true}},{"node":{"info":{"id":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","name":"node_d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","enode":"enode://235360aff6df4553e2efa53a861609209743e1ea81cd07f7bcbe80ae9fbf012a2caca09eb6dbac7be69d14d3805a552d18a626a6e5356659180c8d804f7f7ee3@127.0.0.1:0","enr":"0xf88fb840f7e66d84700fe9e82cd1cdeca1acbb2242b09a69b0e50173bac5c41180f1f8d14138152b7755e0228ce2d6b526c3c01bdddaabf90a2a856f715944f373533aef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103235360aff6df4553e2efa53a861609209743e1ea81cd07f7bcbe80ae9fbf012a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0iRfBnm0NvqrwBZOC4XgLi7/utMG6CKbVVUkpebRpfk=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d2245f\npopulation: 43 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 286a 2459 3ee4 3e56 | 65 0427 (0) 0506 (0) 06b9 (0) 018a (0)\n001 12 895b 8be4 86ca 82f0 | 33 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n002 5 ebca ea60 e16b f5c4 | 15 e55d (0) e77f (0) e0ea (0) e0b1 (0)\n003 9 c181 c3a1 c8e5 ca03 | 9 c181 (0) c3a1 (0) c8e5 (0) ca03 (0)\n004 3 db08 dfae dc97 | 3 dfae (0) dc97 (0) db08 (0)\n============ DEPTH: 5 ==========================================\n005 1 d6ff | 1 d6ff (0)\n006 1 d0f3 | 1 d0f3 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","private_key":"658311d7ee69a3bf84aa43c15ac573ea72807a5e080c322310e7bc701ab52fab","name":"node_d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","services":["bzz","pss"],"enable_msg_events":true,"port":38759},"up":true}},{"node":{"info":{"id":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","name":"node_b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","enode":"enode://b72f0a95514b0161e67d4b36b1dc91cb319117d3f1c34731bb2c685769f11741575d3c41f4c1c8188b85f47c62b149e4f3e5f72394ebc5780c85c06528570c33@127.0.0.1:0","enr":"0xf88fb84012121d864e031d97c287200a10956bbe49c61b0fcb145897fa0a4a0da21a317d48aff38a1901706b29ce01ec8bc17ee9be0c1764a516acafc5cd40048dfe61690183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b72f0a95514b0161e67d4b36b1dc91cb319117d3f1c34731bb2c685769f11741","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"s4HnXlLkzdFoBWJF+C06F0e2f0AOtA6xIDa3Puf+IeU=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b381e7\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0ff6 6742 48b6 4cd0 | 65 558e (0) 5776 (0) 517a (0) 539d (0)\n001 13 f5c4 f410 f360 ebca | 30 e77f (0) e55d (0) e0ea (0) e0b1 (0)\n002 5 82f0 9d3c 9ee7 91eb | 16 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n003 7 a7a6 a75a a2ba a085 | 9 a7a6 (0) a75a (0) a320 (0) a2ba (0)\n004 3 b8e1 b841 b92a | 3 b92a (0) b8e1 (0) b841 (0)\n005 2 b486 b70e | 2 b486 (0) b70e (0)\n============ DEPTH: 6 ==========================================\n006 1 b16d | 1 b16d (0)\n007 1 b2b9 | 1 b2b9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","private_key":"78a74e69c0e211af6e3f2806e5cf0475ccdb1b5ccfba14e1968b82747e20be0a","name":"node_b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","services":["bzz","pss"],"enable_msg_events":true,"port":44485},"up":true}},{"node":{"info":{"id":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","name":"node_957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","enode":"enode://61d644b51f9244f36e197d9d614070a5487f071bc7c7753d43edb80f72e5a2c43cda36d5b2f9f070228bb54c8810c5789af96b66be77a6df61aabfffe5da4c8f@127.0.0.1:0","enr":"0xf88fb840d573110433511ff59f78b0fe666d311957c43ee0f9ef6c673d1f53736e1d4b9f6c77c5620e6c97f670e61f3e1d83f77ce36c004b9587fb9ddd3bcc8486e455320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10361d644b51f9244f36e197d9d614070a5487f071bc7c7753d43edb80f72e5a2c4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lX2Km0Erb0zRUcvAe4102UmICuZlxUXeuxgYE4nJnuY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 957d8a\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 7b92 6ecb 6d60 6742 | 65 6210 (0) 645b (0) 667e (0) 6742 (0)\n001 13 f5c4 f410 f360 e0ea | 30 edc8 (0) ed32 (0) ea60 (0) ea0e (0)\n002 2 b92a b381 | 17 a75a (0) a7a6 (0) a320 (0) a2ba (0)\n003 3 8be4 86ca 82f0 | 8 8cf9 (0) 895b (0) 89c8 (0) 8b76 (0)\n004 4 9a92 9e02 9ee7 9d3c | 4 9e02 (0) 9ee7 (0) 9d3c (0) 9a92 (0)\n============ DEPTH: 5 ==========================================\n005 2 92a1 91eb | 2 91eb (0) 92a1 (0)\n006 1 9626 | 1 9626 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","private_key":"9cbb036a358368a04ab266b8fd487e4bcfead509da1f1d57b0e7fa3db574c99c","name":"node_957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","services":["bzz","pss"],"enable_msg_events":true,"port":46189},"up":true}},{"node":{"info":{"id":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","name":"node_26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","enode":"enode://1999562f9de6c42f0577c494aec14691db3aec49ed40e75ea9eedb72e5295d9d0d659f4991946f9fbacc74feaeb5e5181dc23ba10299dd01ec1dec9c00d84ad1@127.0.0.1:0","enr":"0xf88fb84017d136a2bd2b8c6b071ea759278494f6636844e06c788ffe4eff0e1226cd0b0864d646c596173bbf67bc7403a5623bcd2d044273ed7d5c0efbeee8916cc39cc70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031999562f9de6c42f0577c494aec14691db3aec49ed40e75ea9eedb72e5295d9d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JtGvH77mVBo2PqdweCXjfaAoFC8Ad5EWVgrSDx3hjns=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 26d1af\npopulation: 31 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 e16b d0f3 a085 89c8 | 63 edc8 (0) ed32 (0) ea60 (0) ea0e (0)\n001 8 4b24 48b6 6742 6728 | 38 6210 (0) 645b (0) 667e (0) 6742 (0)\n002 7 13bc 1929 06b9 0390 | 15 0427 (0) 0506 (0) 06b9 (0) 018a (0)\n003 5 372d 39db 3cb1 3e56 | 6 372d (0) 39db (0) 38ab (0) 3cb1 (0)\n004 2 286a 2a22 | 2 286a (0) 2a22 (0)\n005 1 213b | 1 213b (0)\n============ DEPTH: 6 ==========================================\n006 2 2434 2459 | 2 2434 (0) 2459 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","private_key":"7e2c84991a191ba4057e485ef2cfc2020c5ccac17ccaace8db0733f7bea4b410","name":"node_26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","services":["bzz","pss"],"enable_msg_events":true,"port":44455},"up":true}},{"node":{"info":{"id":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","name":"node_3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","enode":"enode://5c685dacbd760c9d05b018f58ac52239966ab2c181ec106125ebad06ab336c7cc4087f4f32a38e9b17edcabd74afe7fd36bbd33e12542ca0646b98bd7e11d489@127.0.0.1:0","enr":"0xf88fb84065e447a80639420887319bbbd8ff453a67c8f00fa8ddcbbbf04b02d24240226a600ae407deabfe11ae74c2b0dc46e86f08d9f08d4d77a1df3e3f3f41dacd5ac10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035c685dacbd760c9d05b018f58ac52239966ab2c181ec106125ebad06ab336c7c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PuSyDAR+cBtYwG/MgWA2S9KVc/YfTZ8ZNdd6wp9qHoY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3ee4b2\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 89c8 a085 aebd ae67 | 63 edc8 (0) ed32 (0) ea60 (0) ea0e (0)\n001 8 5776 47c3 7639 73b8 | 38 6d60 (0) 6c82 (0) 6c02 (0) 6e5c (0)\n002 9 0ab9 0bcf 0427 06b9 | 15 0506 (0) 0427 (0) 06b9 (0) 018a (0)\n003 3 286a 2459 26d1 | 6 286a (0) 2a22 (0) 213b (0) 2434 (0)\n004 1 372d | 1 372d (0)\n005 2 39db 38ab | 2 39db (0) 38ab (0)\n============ DEPTH: 6 ==========================================\n006 1 3cb1 | 1 3cb1 (0)\n007 0 | 0\n008 1 3e56 | 1 3e56 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","private_key":"452609d27fac9e357776f968c4726676474f4f5fdc9da0bf89f6362b3ba19ff2","name":"node_3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","services":["bzz","pss"],"enable_msg_events":true,"port":41679},"up":true}},{"node":{"info":{"id":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","name":"node_13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","enode":"enode://6016e452462a437136ffaab5816dde72ff1910f4a456f38c172033a88cc4e204cd4c199e769f890c78f4db86f19416a9522fdeb434384eedc3c2f1ef28b88acc@127.0.0.1:0","enr":"0xf88fb840149fc3c3a63d0f1305a848030d0a2b93385095eec084ca87fb44428c87d118f37da0a3ca28e3f65c085d3befbc01cbe7cf22d90d1d9ed4df2d4ae92c6c4245dc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026016e452462a437136ffaab5816dde72ff1910f4a456f38c172033a88cc4e204","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"E7xkU1065JUJjkrGswqR0YBNqwq3mUTyxqxTybzN9i0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 13bc64\npopulation: 40 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 cec3 c3a1 f5c4 f410 | 63 ed32 (0) edc8 (0) ea0e (0) ea60 (0)\n001 8 4cd0 4b24 4167 7b92 | 38 7639 (0) 772e (0) 757a (0) 73b8 (0)\n002 5 2a22 26d1 2459 3e56 | 12 286a (0) 2a22 (0) 213b (0) 2434 (0)\n003 11 0ff6 0ab9 0bcf 0427 | 11 06b9 (0) 0427 (0) 0506 (0) 018a (0)\n============ DEPTH: 4 ==========================================\n004 2 1be4 1929 | 2 1be4 (0) 1929 (0)\n005 0 | 0\n006 1 109e | 1 109e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","private_key":"8434ae4dfa2723b5719768bc711f7425c5bd0924b3b0ec5d8cc2c9b399b5766a","name":"node_13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","services":["bzz","pss"],"enable_msg_events":true,"port":40705},"up":true}},{"node":{"info":{"id":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","name":"node_9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","enode":"enode://b7082416512639ee57846e95b5e2dbc63995f361401c3b313732cf2d3d033441790dce7c2460efd7937015b4638e6247ed82c823aa0802925c366c91ae09e68b@127.0.0.1:0","enr":"0xf88fb84099372399c4d3fd5cadf0c624920ed74d76194f722b61996a6a6c99fbce6110170e82d7b4d993a5850e772df12e975549b3191f0cf7f6abae21e9a136f6bff1cc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b7082416512639ee57846e95b5e2dbc63995f361401c3b313732cf2d3d033441","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mpIws/fzhlIIId7njr6S6MZKT2pQ8mOTJ8YuRcq0BWM=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9a9230\npopulation: 25 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 7b92 7355 39db 13bc | 65 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n001 2 e16b f5c4 | 30 edc8 (0) ed32 (0) ea60 (0) ea0e (0)\n002 6 ad0d a75a b70e b2b9 | 17 b92a (0) b8e1 (0) b841 (0) b486 (0)\n003 6 83dc 82f0 86ca 8cf9 | 8 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n004 4 92a1 91eb 957d 9626 | 4 92a1 (0) 91eb (0) 957d (0) 9626 (0)\n============ DEPTH: 5 ==========================================\n005 3 9ee7 9e02 9d3c | 3 9ee7 (0) 9e02 (0) 9d3c (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","private_key":"e878354e1d0c9956e28fa14cdc5a61945f6f2b2fbea9a8367dbe5f064b174592","name":"node_9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","services":["bzz","pss"],"enable_msg_events":true,"port":35207},"up":true}},{"node":{"info":{"id":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","name":"node_9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","enode":"enode://4faf10bd09731418ac192c8a57f170f322ffe575d3a2ee2efafec45fb7da6fd3712457dd5a78fd5e1a2efa1003715aea87cca4d49b10fd1d3845b72435b8ee4c@127.0.0.1:0","enr":"0xf88fb84082c3796decac811025287334946817180d001c3d8d7721d3971aa9cb879fed0c0acd50bf82c7fa565e2540bef5f1b5731accc7b6a4c70ebe972111d0deda6a8a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024faf10bd09731418ac192c8a57f170f322ffe575d3a2ee2efafec45fb7da6fd3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nTx55KCsTluVqjJUXzuNhvdFlPqiN9XCVmzwL71gsRo=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9d3c79\npopulation: 36 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 7b92 0bcf 0ab9 018a | 65 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n001 2 e16b cfbb | 30 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n002 11 b16d b381 b2b9 b70e | 17 b92a (0) b8e1 (0) b841 (0) b486 (0)\n003 5 8cf9 8be4 895b 83dc | 8 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n004 4 91eb 92a1 9626 957d | 4 92a1 (0) 91eb (0) 9626 (0) 957d (0)\n005 1 9a92 | 1 9a92 (0)\n============ DEPTH: 6 ==========================================\n006 2 9e02 9ee7 | 2 9ee7 (0) 9e02 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","private_key":"907b7ec9e8b65f1de5310f5964f2c97a21a13adf1c0b9e8a4cb0ba38c73dc24c","name":"node_9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","services":["bzz","pss"],"enable_msg_events":true,"port":37201},"up":true}},{"node":{"info":{"id":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","name":"node_a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","enode":"enode://3699407c49116a8a7ddb656a1e7e586838f3e72cfdf9cd942b81adc4fa745f01cf3dd9f2682d44deb8172544a05e86055f3cae6822aa14e3b98a5870a259ad33@127.0.0.1:0","enr":"0xf88fb840de466b2eda8d1345b19b33da7313d03db5548f84b7f7d728a6a1346a44e29bfe6b37764e639f35270f9df761fdeffb3207f2c4716c87d65a25d30afdff134a5a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033699407c49116a8a7ddb656a1e7e586838f3e72cfdf9cd942b81adc4fa745f01","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oIUEXDNc4uR9vf6xrbYs5sO+02qTzzRIxFdXoaiOKV0=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a08504\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 109e 3ee4 3e56 3cb1 | 65 286a (0) 2a22 (0) 213b (0) 2434 (0)\n001 3 d224 e16b f5c4 | 30 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n002 3 82f0 86ca 9d3c | 16 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n003 5 b92a b841 b70e b2b9 | 8 b8e1 (0) b841 (0) b92a (0) b486 (0)\n004 4 ad0d ae67 aebd afa3 | 4 ad0d (0) ae67 (0) aebd (0) afa3 (0)\n005 2 a7a6 a75a | 2 a7a6 (0) a75a (0)\n============ DEPTH: 6 ==========================================\n006 2 a320 a2ba | 2 a320 (0) a2ba (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","private_key":"40d0f667c75292876d80bf036c58b652ae8eaf08e6543afce8efe01b5ba38af5","name":"node_a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","services":["bzz","pss"],"enable_msg_events":true,"port":33037},"up":true}},{"node":{"info":{"id":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","name":"node_7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","enode":"enode://8f6eaa7d371d5a4d8c1f71c52540914abe2f27afe0a753b8b7ce09e09ceeea61785f53dea26d90c6455d9a37657c52155faf04192b6b8ecef078b8b27ecc7572@127.0.0.1:0","enr":"0xf88fb840ef3018c62f6e420fbce8abac717ede992b1c276bfe0ce90b7b1d8ed88c0a2060783837e6f1f927d5f126a1c274bb6fa274db17107672ef312532d457aeea68200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028f6eaa7d371d5a4d8c1f71c52540914abe2f27afe0a753b8b7ce09e09ceeea61","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"c1X6sQWE5DEvXLXDyCbn+cFNp01i0H0KgAfOnG6ZW+k=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7355fa\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d6ff 9a92 a085 | 63 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n001 7 3cb1 38ab 39db 372d | 27 286a (0) 2a22 (0) 213b (0) 2434 (0)\n002 3 5abc 539d 48b6 | 15 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n003 7 6742 667e 6982 6ecb | 11 6982 (0) 6d60 (0) 6c82 (0) 6c02 (0)\n004 3 7fbc 7dc5 7b92 | 6 78cb (0) 7b92 (0) 7f87 (0) 7fbc (0)\n005 3 7639 772e 757a | 3 7639 (0) 772e (0) 757a (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 0 | 0\n008 1 73b8 | 1 73b8 (0)\n009 0 | 0\n010 0 | 0\n011 1 734e | 1 734e (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","private_key":"65b0005e792636557ba85af62557e19b18b9174bbbef4d0d1a9df6ed86564cd2","name":"node_7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","services":["bzz","pss"],"enable_msg_events":true,"port":35631},"up":true}},{"node":{"info":{"id":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","name":"node_48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","enode":"enode://0cbf237e6aeb863aeb824af9ceface5a8f94eb2330907633723afa315ad810ca5fa9de4f687c6a6035eab2339a4cb9803b61f752c39ec949930c3699850fa0bb@127.0.0.1:0","enr":"0xf88fb8408c25a5258f12cb8ddea2eb309508a3b3bb615e0af2611013a4caa40a060e503d076f528b777885fa04eccb0ab89a0d909844f92a68099ed5b0cb0d3b417c2cda0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030cbf237e6aeb863aeb824af9ceface5a8f94eb2330907633723afa315ad810ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SLYUlYqGkngO9b1cleDbT/Z9603g3LuHjKRHm/uGlX4=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48b614\npopulation: 32 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f5c4 b2b9 b381 afa3 | 63 ed32 (0) edc8 (0) ea0e (0) ea60 (0)\n001 7 39db 3e56 3cb1 372d | 27 286a (0) 2a22 (0) 213b (0) 2434 (0)\n002 12 6982 6c02 6d60 6ecb | 23 6982 (0) 6d60 (0) 6c82 (0) 6c02 (0)\n003 3 539d 558e 5abc | 7 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n004 3 47c3 4167 419a | 4 47c3 (0) 4167 (0) 41b9 (0) 419a (0)\n005 1 4cd0 | 1 4cd0 (0)\n============ DEPTH: 6 ==========================================\n006 2 4a18 4b24 | 2 4a18 (0) 4b24 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","private_key":"270a9d9bfe65cba3f7905cabdc33f12696f57f495f5b1f4f717c4f686cb9fb22","name":"node_48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","services":["bzz","pss"],"enable_msg_events":true,"port":33663},"up":true}},{"node":{"info":{"id":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","name":"node_afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","enode":"enode://318bacfd1e44885c89d878b681a769550aa404ad1b963f802ec5bcc8ad70cecde25b68156ac8fce5ab0574e0518f7a5931f1e66b578bc395678f5541d523a0a4@127.0.0.1:0","enr":"0xf88fb840f8a54e090fb7de27c570ae1607b52faecfb241df7ca595859ef729b0b22447b7052a90ae67d12246ec2040000f85a4697bb924b273657efe3faf78db0f755c920183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102318bacfd1e44885c89d878b681a769550aa404ad1b963f802ec5bcc8ad70cecd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"r6PeXOvJ+WzyCjUFj0hW/kO0isWc+ORlZfGU9DhiKlI=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: afa3de\npopulation: 28 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2459 0bcf 6728 48b6 | 65 286a (0) 2a22 (0) 213b (0) 2434 (0)\n001 3 e55d e16b f5c4 | 30 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n002 8 91eb 92a1 9d3c 9e02 | 16 8cf9 (0) 89c8 (0) 895b (0) 8b76 (0)\n003 6 b92a b841 b486 b70e | 8 b8e1 (0) b841 (0) b92a (0) b486 (0)\n004 4 a7a6 a75a a2ba a085 | 5 a7a6 (0) a75a (0) a320 (0) a2ba (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 ad0d | 1 ad0d (0)\n007 2 ae67 aebd | 2 ae67 (0) aebd (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","private_key":"e19117f65a5dd05127cf7d2d994fdf61d54c6d9c1113d8cbbd46927df4e3c23a","name":"node_afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","services":["bzz","pss"],"enable_msg_events":true,"port":36875},"up":true}},{"node":{"info":{"id":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","name":"node_67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","enode":"enode://81035bfc5935b3ecdf8f5134d14f109559ce2602e1ef2ae36ff475c43b469a32b2d71d843c6e1a1d45509706538e0956e768594aac04aaf5a712a9a3405251ac@127.0.0.1:0","enr":"0xf88fb840eae38a1667d14d43e83b2c0d0a1c2fb4ccbc358bf1134594c33b2b58d710260809ad16b7f243040e51a0eb368e12ea4ed50a0b438fdbd2f23231d37b12e093010183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10281035bfc5935b3ecdf8f5134d14f109559ce2602e1ef2ae36ff475c43b469a32","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZyiPhK2nd4hYE5x0kXsirmmO1D30mmUwpWZkjwdO3kY=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67288f\npopulation: 33 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 12 d6ff dfae dc97 f5c4 | 63 ebca (0) ea60 (0) ea0e (0) edc8 (0)\n001 2 26d1 0bcf | 27 286a (0) 2a22 (0) 213b (0) 2434 (0)\n002 6 539d 5abc 4167 4cd0 | 15 5d60 (0) 5a01 (0) 5abc (0) 558e (0)\n003 4 7b92 734e 73b8 757a | 12 7639 (0) 772e (0) 757a (0) 73b8 (0)\n004 5 6d60 6c02 6e5c 6ecb | 6 6982 (0) 6e5c (0) 6ecb (0) 6d60 (0)\n005 1 6210 | 1 6210 (0)\n006 1 645b | 1 645b (0)\n============ DEPTH: 7 ==========================================\n007 1 667e | 1 667e (0)\n008 0 | 0\n009 1 6742 | 1 6742 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","private_key":"8b748538936665f38549ca75239d192493fd5ff24f126d318b4335bae35d9d6b","name":"node_67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","services":["bzz","pss"],"enable_msg_events":true,"port":43817},"up":true}},{"node":{"info":{"id":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","name":"node_0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","enode":"enode://0379db849a652e76893c5565c230efe72c4d44c416b9bb323529807baef9a4843b1ba9d548fe30e116edbd1e0e376d0a9a983b35542e9d414e227b915231d22e@127.0.0.1:0","enr":"0xf88fb8403c83a4015938e95101f3db5859df1555fc2fb05d2c47650e84388bb516e27426523605a2d76c9118658082f4fb8ef3cecffb3add5ea8986a4b53a1daa0c4e4660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020379db849a652e76893c5565c230efe72c4d44c416b9bb323529807baef9a484","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"C8+KirAGXKjIW4tmQfTG4LDeYOee8y6/b/jxCaxOHXA=","hive":"\n=========================================================================\nThu Feb 28 17:45:49 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0bcf8a\npopulation: 39 (127), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 e16b 895b 9d3c 9626 | 63 edc8 (0) ed32 (0) ebca (0) ea60 (0)\n001 10 4cd0 4b24 48b6 757a | 38 5d60 (0) 5a01 (0) 5abc (0) 5776 (0)\n002 9 372d 38ab 39db 3cb1 | 12 286a (0) 2a22 (0) 213b (0) 2434 (0)\n003 4 1be4 1929 109e 13bc | 4 1be4 (0) 1929 (0) 109e (0) 13bc (0)\n004 6 0506 018a 0390 0218 | 8 06b9 (0) 0427 (0) 0506 (0) 018a (0)\n============ DEPTH: 5 ==========================================\n005 1 0ff6 | 1 0ff6 (0)\n006 0 | 0\n007 1 0ab9 | 1 0ab9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","private_key":"a66755f09e07ea306f890663b424f0162339cc7ac848e7ed878743e6e0d7cd71","name":"node_0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","services":["bzz","pss"],"enable_msg_events":true,"port":39147},"up":true}}],"conns":[{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","other":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","other":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","up":true},{"one":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"b8411f198fd658c5a2028835c0af3342145839c06c8a4f382d9f9de485d46c08","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","up":true},{"one":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"372d47374a57d18cf134a1f8fc2d2fc10dfacfc0be9ed883183a349c896b3793","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","up":true},{"one":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"edc8794153fb517085d27a83a4b00e8c3b37f22d2242b842cb2fab66764de9fe","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"b70e96f01ac8947d2de6320412ae3310316caba65c27108ad16b2f2004255be4","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"3cb1b4069727dc323a687cab4ca2764f6415450488706f1b97c5cb8ca46346ff","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"7cf4838a7c83a736ce59cfa1b974674a0185dbe17a8f3cd29794a3bbe814adee","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"e0b1c4eb5b5b4dfc22344ee65cb9716cecb38dcc80099793f20641884eae4854","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"f74ecde0bbaa7b6521fb205b5ab9ea637909277f6e1ee1d3490f5cd01d0f7216","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"7355fab10584e4312f5cb5c3c826e7f9c14da74d62d07d0a8007ce9c6e995be9","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"dc97c1a0019b482a048b8d15941dfe4c3c1a3443d9b2d7b4046370bc84a7e56f","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","other":"3ee4b20c047e701b58c06fcc8160364bd29573f61f4d9f1935d77ac29f6a1e86","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"dfaeebc8e29c6a8f851b12b80cf42567cd2a43e35d977305a3c10e51bf41170a","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"5abc96f4fa78812db6fb710fd424dd474145f7e5d00b4cedc5373b4c52f42cf5","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"698247d103a8925d8bb4c56a3056e49c5efc595fced1c89d49943bb9ba01f394","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","up":true},{"one":"a75abd0dce5a488b7e06f91fab7a92ec428ab21bde9372c9e8fa489f48e7b3fe","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"d0f398969480f3df3587f6d47546ff1261cad4d2e9c26ff3077e35ae1b26153e","other":"db088103f3b6f2c784d76ecd99c8b4a77fd39bb39c72ddfd91c99c1a9dd3b75b","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","up":true},{"one":"67288f84ada7778858139c74917b22ae698ed43df49a6530a566648f074ede46","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","up":true},{"one":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"c18105aa302a43e352d999745a0f806af9f8cb8bb83349357da5c85e8975acd1","up":true},{"one":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","other":"d6ffb7fd2668e9b7b133bd9144156f4736191ef0d6e72b072759782d83931f22","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"419a6626dd026c0438461592121992c6be1868375011655b6d405166cd8edf7f","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","other":"ea60ef7cb3f2166a5c8e286c885984943a2ea5aff4730015be6a15031040cecf","up":true},{"one":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"2a22dbee71a0ef27c840221db4a592d6dc8f171afed865ff814a37d633a3eaa9","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","up":true},{"one":"cdcd165721f6851f361fad0b3ba88c8870be9ad6d6b8cbcecc7c89e1068d979a","other":"d2245f0679b436faabc0164e0b85e02e2effbad306e8229b555524a5e6d1a5f9","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","other":"e0ea575d0e2efa28bc51f49d1e2c24196a196da3b3196f3a5a26a5e310809af5","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","other":"a3205c1c4f9b72814f0db68e888e3c7ef88f27c681ed0d731dde5f0999f92ccc","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"621076ce6b82e70c90a4adf235aa6f71b116e302dd6b15dcae07f4a816012455","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","up":true},{"one":"021811a6757bdcdd2fa0fb68401dfe009d5a8e129958cd304fb42cf51dc5d1d3","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"a2babe49410ae007bc41ff2b7deaf709ed849e2f69666ce5aae76a3b71f47081","other":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"92a1501ed41e29bb7dd8eb4b4acecae983f4c7c83f39895cd68f7810b645f1dd","other":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"ae67fae4990da61ca89221c5b1675c992babb4d715b59939e47bd1491b3bf1f4","other":"aebd6135d10252b07f891b3a7330903faf13d409c4f7108630715fa0754f938e","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"6742cca1b7783fcbed8d0b340508f93cc4dfaca8ff3f13fd59354486c4d62993","up":true},{"one":"027fb496438782583f78fb76999336eed7fb672a9c9ea50d04df580e6eb21377","other":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"645b4e6b36fc1928725f627aeed278f46c5a7d6b0fff7ccff55a0468d47b23e8","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","up":true},{"one":"962676818c17fae1ffc52fc29318c44f9b8c980afd6d3e98217b4088d568a808","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"b8e1a80d91216fd5f8bc3f7413caf68ade7f124354d44fe7bd155a089134a70a","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"5d608e66a17442091111cb472723fe3aea1f2baecaa546b57d49507c63a61cda","other":"539df902d42dc997c6b0e24d16ad68b54c557d56b41c972a320d57632dbfbe3c","up":true},{"one":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","other":"cec3c01c147b34f25104ddd0b25076cef63ac224eada9d9f5a00b8513331354f","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"286aeba646bba4a8aa1c372bee9f2c9ff0a2b3abb4f18be321225555c6dce4e5","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"667ef042e9dae18694581e0404c3d87a09800e8b42173d26571c3bf97e29a372","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"47c3e0dfbbfcebeece78865c8c989577360cd9cc46a3b43f4b7b01ed14dc30e6","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"109ef17c890104bfc5a4897d526a0afaa8c991c9d213616032f3058d0feb7f00","up":true},{"one":"f5c4d28df5973ec0292221a875e8446323f339409d93f0f7385990126908a3c3","other":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","up":true},{"one":"cbc5d42951bc6e187296b5f8ce4d04e472e26670a62851f39d65f31c50865f6a","other":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","up":true},{"one":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","other":"b486ce31ce880db3aaa17a0ac2c2f3554b6fe71f9c051edb572974342af4adb9","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","other":"57764522162620c1ad0b166a9c43772255d0cc01e49f2122ef09db046804a570","up":true},{"one":"6e5c213a2db57eaf2e1e1acc341c72efab89b0e42b6cd18db4f99ac1af151d65","other":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"5a01993ff7b4bd12fdb259e96b26a036d0cf5d4ae9c9b516be64b63acec2443a","up":true},{"one":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","other":"41b9ee7ad19698e97589b059ad3333cb64f02c16006d94fb3d0bad7ced8ff238","up":true},{"one":"3e56d4533ec14f6656e1eb25fb35dad47c9db479f667a6b6fe9a3aa8c12e982e","other":"39dbd5462c90dac75f49d9af7996845943bbe929754ef8125eee7f5a763e9def","up":true},{"one":"213bf6e78e02a57585908c756f0965297152c3c400a0ed4c407a411e1ec5942d","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"b381e75e52e4cdd168056245f82d3a1747b67f400eb40eb12036b73ee7fe21e5","other":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"a085045c335ce2e47dbdfeb1adb62ce6c3bed36a93cf3448c45757a1a88e295d","up":true},{"one":"0506e949748b62da1d36b663df7d6a7e76027f72ced5d52f74677fb31d7e1505","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","other":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"ed32d74d9be0649de1eb26b9915137fe46ec890c656c96be52e966ab6e2ed260","up":true},{"one":"38ab3d7bdfb293b88122404cb7c50b5fb890ce7664c075da95585557a430c403","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"9e02c5384602a54e900cfa46d5987b77f16e74cba745ac850fcada01c7af9004","other":"957d8a9b412b6f4cd151cbc07b8d74d949880ae665c545debb18181389c99ee6","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"b92a71a4fc371e0596538a7fb2a33e85329c39c4409c99798d9318bc263a04a1","up":true},{"one":"26d1af1fbee6541a363ea7707825e37da028142f00779116560ad20f1de18e7b","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"9a9230b3f7f386520821dee78ebe92e8c64a4f6a50f2639327c62e45cab40563","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"ebca518e5146f49ac75bcaa8add2ef4d1d22c5cfd2e2326c6b41826d45ce55ae","other":"ea0e1dd41fe042b09f273c98f02128949cf5561d20dc04b3d423961efed52327","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"8cf957bf95a629c60c31dbcfe75ecca149a81c761f8b34858b04f8318e5c74bd","up":true},{"one":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","other":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","up":true},{"one":"86ca1078dae40f23ae1b3ac47397460d9ec0bf243a0de372b405381d6722fcb2","other":"895bdcd200cc4d7ec5c24f1722d0a8ebedda78b78cdf1ccc8c22a981980f5786","up":true},{"one":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","other":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","up":true},{"one":"48b614958a8692780ef5bd5c95e0db4ff67deb4de0dcbb878ca4479bfb86957e","other":"558eb021744be19383be9ac91b9f77e07479e0eb25576bd32a3afaa94c231178","up":true},{"one":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"734e029ed25485edd49b93dd9e85b6e7657f860e4ded4bc8a5094f512ae5836b","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"2459fe9250b3311c86530d00b7a9b8ba57b1b5151c126262e70c55d1e8d37924","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"7fbc1843e2222e3c8e35a3215d1bbb4d5457d8b9ed33749e07e22f25ba9ee576","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"ca036d1ef9e6ce3654f2d769f16926aa14957193586426489e15539dfa8f7763","up":true},{"one":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","other":"018adc613f78d6ec876274f821251fd049eb3651646cd69e27efe211fe88d936","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"ce99e9d37111c52e929b187fe201790b1a555dfb8b6b6de54e94df7cc2d43fd4","up":true},{"one":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","other":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","up":true},{"one":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","other":"517aa977048247d5d16ad51a286ffac4d8f910733f0578b222201308c32d195e","up":true},{"one":"9d3c79e4a0ac4e5b95aa32545f3b8d86f74594faa237d5c2566cf02fbd60b11a","other":"83dc556ed36f37d06765be2554fe86eaf1ec21e2931fb22403238453bf021dfb","up":true},{"one":"2434c63e7f28b83e7feede7fe68ea99b989f8534f64d63b046733e2f474538f5","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"73b8d1840d0a8ffe69752ec96f8fddecb0e22726c87982d572ca9acc1c9cdbfc","up":true},{"one":"4cd0f38e52a508f81cf95e1370c994aea2d7a49a2a08e3e054f53629a6619410","other":"4a1811dd9febde1801a604ad81de84a2d15366d0b5c330f30f3398da0d107824","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"026d2e41b82d506da685a30cce7cc5772f6c1e167b7d557e0531fb9b79dd4ff2","up":true},{"one":"03907380afcd52238f3d84a8dee3df599c7f2f9b90fbc1271ee88bdb52acbd58","other":"06b95f1bac76ca4925d509b06216f2113ac5dcf051ef5aa0a320ae64069e0b6d","up":true},{"one":"042788d5b72cb84a375565d120d239a2b14fdf38b3f5f992284d78535077148a","other":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","up":true},{"one":"c3a1b301bf187fd8326831197d93a0266ac0cc8287b9008631240e2bec9cf337","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"8b76194f129308324c7d0066530e02cac2410ee0ba952822f0ec866e12461e44","other":"82f034db88fd26b47c26b95c3f87a1f454ffe4526ae86beb2bb1d8f2c218c25c","up":true},{"one":"7639f9a66e8ff70f554c346faa25f78140957c295b748fc42a12df7972f4fcc6","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"4167946de250b013e1be16ee84bfe2ccaae83e699e618b38f31016c4e431e6ba","other":"4b243a5aeabec6db0e4a80a9c255300cd94591a6fbe0e0aa170da4f6ce14edff","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","up":true},{"one":"f36120ff250b9e7164e96021479332054f67de65cd2fe5b6e34bc51d0fe4d29c","other":"f410d4ac9b748c24fa0d48c3053bb1cea8a67d0bcc4e5fcbdb261c0c7522cc34","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"afa3de5cebc9f96cf20a35058f4856fe43b48ac59cf8e46565f194f438622a52","up":true},{"one":"91eba9f9c8f2929d38f43a0c7efa809c0d2d59a31cbf2760c90e73d20266d528","other":"9ee7b3e06b453615cbd8737cb74515b150f518f1a2eaa2db90e54708dd161b7d","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"7b9242137f8cc2bec7b3e0003fd93026921ceb10dfadbbd5b6aa64d61a74f35e","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"cfbb9ea682becadeab10bbd080ba8e93510085a87ac519e434964faa222fc275","other":"c8e5a1b4533dd0de12acee4d31369f39785178568718b93bbc321ec83e0714f0","up":true},{"one":"772e4c80d128deb52adf024a0eb6fe9bbea1c83351ed93f55f490cd5e5c69260","other":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","up":true},{"one":"89c883d6a85472bda328667e3fd805c70876bc582ca6763ab97ae636b1772be4","other":"8be461203f5ebb5721348f537b37d768f7bd359af3e18d1f7e9af2f901c49845","up":true},{"one":"e77f6aa9e3dfcce0a2e5db794703224249aba60595075b2df9a5b0b30855cf46","other":"e55d8cdb7e7940b11929e7e5c949ef6beb7998e5180a1f0a3c0bf61aef39f1b8","up":true},{"one":"a7a61804d270ed6c27a4b1e8a634c30d7cdbaf644a1c67cbc6b08cd849a711db","other":"ad0d0dc5d4114ee4482d6c9bd4e46683327abf2b92df0d242d79019963876668","up":true},{"one":"7f87da7ee55b4c8c8f9d55411ff88d3a0b63bfee6a516917d49fa6273fb5b86a","other":"757a557424c33ad89efd8185ec18d71c025830ecb2aed951e33c8c8d986d5933","up":true},{"one":"1929a84bcd64bf002d0afb16249466c5b660123174a1fc1bf881913f8c87d1fd","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"0bcf8a8ab0065ca8c85b8b6641f4c6e0b0de60e79ef32ebf6ff8f109ac4e1d70","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"6d601952793589bc6b57340c451a6abf02ea2c16637e910eed04cde6eddfe17a","up":true},{"one":"e16b12c708bc5e0545009daed44733c52d7450ccc797d158dd41a3bc9507b6be","other":"f36084048bf0ff985a77f5183796f7b37b7085ee6eea8bbc5fc62558854cce67","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"6c029114a9f73d69a42e591cf2d13107eff038d3eda8abb0242d9d6d169f05c7","up":true},{"one":"b16dcdf1ff1a56d49e374531d9885d59c1bcfbb628604520d9b1d84662edb9ca","other":"b2b9ac0f4db58886597af7b19d6150498ac8ad7c804671628aa34384b8fe505e","up":true},{"one":"78cbc19a24d095ab7858849058c65c061c52289b91ddd92cee34bed98aee4a59","other":"7dc5e8d8180c1bc7ebbee11a47fc96e8fe8b2d71c30cbc4aa1cf99e8eb6afcac","up":true},{"one":"6c82fdabd09e0e9d0fc507613a05951c02b2953d763a062a5f32aaf5cc477c19","other":"6ecb11fc5acc16ecd70351410fa18ec44a2a83d9e778cf25b85a7535493456b7","up":true},{"one":"0ff67b0e9ec6509c7786495b7b3ddb176b4f8221ff300f409f00a3d389e8874c","other":"0ab9845c2890b0a64a3e5932241245e00b817b788094f9ee48f86f80b7264fea","up":true},{"one":"13bc64535d3ae495098e4ac6b30a91d1804dab0ab79944f2c6ac53c9bccdf62d","other":"1be4348ec5670cdc4f164d77b1356e7910b6d1be4a9b720e549d02e5482a9e78","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_16.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_16.json index d35df9fc..b6a7bf81 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_16.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_16.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","private_key":"2c268d9cf0ca43f4b0ad80f8980f4fe019e0294819f881d505e02382b472b98b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","private_key":"69ac59cce230e49f10c769fc8f2b717bdadc5ffa5dcf7fae19d8cb15315fa177","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","private_key":"b793f9ace49ecce16c0c86b49495093f7f4c5fa0003675c9eb6efa802c8daafe","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","private_key":"9fecef44b474621ce2ddd57cf67df319bd0e13c27f0f6e9d060c34ef813675ea","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","private_key":"c8f4336f88c90242744e9c04fba1a55027d9ad4295b7a2b0ad99e8dae12463d3","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","private_key":"0ca52c3e4781fc413a13448abaae042dae52e2bab5772c52440bc4b2c6a5bda3","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","private_key":"447c97a6c211160f0fb7990812c637bd346003a484cf05c3d92816007ab3745a","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","private_key":"8fa6ac35409a6df21ee32da8c36f61cd007a3515d23bb350351c263c241b851a","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","private_key":"e4143bd79f4a55f463b623afc397fe0166a144f45c41fd8b58f816e208212819","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","private_key":"6a2a32adb2b5cbc66adf29d5da1123b6e345e73ed42916e9535df3058801cb92","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","private_key":"ae486490233b1b16e6a35461a3b90573f59362b9bbf0b8c46b65c715b0506bd7","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","private_key":"cbf9da4b4f44f44c0bcf69bb2134e33ddfdda7742d7f5609db74bdf4fb683cfb","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","private_key":"180ee0110d87d330dd416568e300cacfd4d52f8c08875ada1a6d5b4a11142b1d","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","private_key":"d7a364b77d55a53453e94e10d235edf4ceb248653247bded6c1df31fc88ecbca","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","private_key":"7eaec2f68f3b0e562a5438324aa30b9c22746af6e8139b05b21e89103f508c5a","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","private_key":"b130fa04ab1f60d0713b9260156457f9139e819cb2f70bd87a2ea409f135f881","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","up":true},{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","name":"node_26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","enode":"enode://e6b0213542756a047ab018ae745faab8a1c821082dc7bc64d13bee50591b554c10508dc284a7c3e686504bda30edf0ee9d3d5588e926725705014eb57ec321a7@127.0.0.1:0","enr":"0xf88fb840ef67bfea09687245f9a21fbeae2c963d6a827f70953457a32df964dc3fc96f3f1630e241de2d2ba4da049d18c459d2fd798c5be2d6dfbd9290457f678f7628af0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e6b0213542756a047ab018ae745faab8a1c821082dc7bc64d13bee50591b554c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JlBMs9mhIiev3EMGVJbMr/cXLk2mKqdNN/JxraPwDcc=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 26504c\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d465 b2f3 | 5 d465 (0) c7c0 (0) ece3 (0) 9ed4 (0)\n001 2 6a51 55bc | 5 689c (0) 6a51 (0) 72d3 (0) 769c (0)\n002 2 0160 0ffa | 2 0ffa (0) 0160 (0)\n============ DEPTH: 3 ==========================================\n003 3 348e 304c 3a9a | 3 3a9a (0) 348e (0) 304c (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","private_key":"1882828490f180d94a676998d372c267a462d3992a1499fdc9535ce176a5a7c0","name":"node_26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","services":["bzz","pss"],"enable_msg_events":true,"port":44851},"up":true}},{"node":{"info":{"id":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","name":"node_b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","enode":"enode://f69f214e3a7a9acc20ceac92869db21701e0dfab27365dbf13271def097914735fa4c6e47ff354aa9b04c0c5b1d42f903a55fa8de2490e66627fe1ae1e1f5ff1@127.0.0.1:0","enr":"0xf88fb840aec067e5c9519ed112d73b546bf81054e0afcadfaf54794b42cc67e8ff3f64ae5aba1b9fa38e9916af5117d49d34acbbc6a9fddf6eb4463fc85e8340738bdb490183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f69f214e3a7a9acc20ceac92869db21701e0dfab27365dbf13271def09791473","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"svOmnVL5gDfPvcQKUpYSyJDNSwYb+odBFJPfXG4etdk=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b2f3a6\npopulation: 10 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 55bc 6a51 769c 0160 | 11 689c (0) 6a51 (0) 72d3 (0) 769c (0)\n============ DEPTH: 1 ==========================================\n001 3 d465 c7c0 ece3 | 3 d465 (0) c7c0 (0) ece3 (0)\n002 1 9ed4 | 1 9ed4 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","private_key":"2bc350f43a600469515791e72c828ea18e25dae28a8eba34ad9123f2b2d0e7b4","name":"node_b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","services":["bzz","pss"],"enable_msg_events":true,"port":46035},"up":true}},{"node":{"info":{"id":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","name":"node_ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","enode":"enode://3f0c7d44d331f144a130eff41ad30fa260c30f29f27b2c6a9ce94dc86ade5a4f1457ff241b4e48f42dab7e3f4d4ed626b22ada5032bb29645c0ab5a6c7ddca61@127.0.0.1:0","enr":"0xf88fb8406aa846ed3e1e91c35a8db13e47424870d976fba32a38ecbbd87fef3f04b0bd5c04ab395313a732a3e5121e0c32768abedb704b835b81713c24e136bdc970d1560183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033f0c7d44d331f144a130eff41ad30fa260c30f29f27b2c6a9ce94dc86ade5a4f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7OMMXOQMJ2mXPpVL/Ye5c6dTiH9Ks58rY4o8sonspSE=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ece30c\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 689c 72d3 348e 304c | 11 689c (0) 6a51 (0) 72d3 (0) 769c (0)\n001 2 9ed4 b2f3 | 2 9ed4 (0) b2f3 (0)\n============ DEPTH: 2 ==========================================\n002 2 c7c0 d465 | 2 d465 (0) c7c0 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","private_key":"1f5005e874a37bbc0f9f920f3089faf5b0189f3ab1796fa370cb89e58b9517d3","name":"node_ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","services":["bzz","pss"],"enable_msg_events":true,"port":41799},"up":true}},{"node":{"info":{"id":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","name":"node_304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","enode":"enode://25b34252e979970bc75da4174ee863e64564c2a62367a9f03f9a4806a84cbbfd7154163bc5c765cd9993870ed9f39a862e80e9020638355cedb3f5deb6a5f80f@127.0.0.1:0","enr":"0xf88fb840cfc8be3771521eb84480fed1ead36e67bbdb0acf5db42a3d1ad0f6aba80130bf6bc03592b7ab85cafe0d19266c3b004b2057b042ba69ee8e00c4d569d0193d5c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10325b34252e979970bc75da4174ee863e64564c2a62367a9f03f9a4806a84cbbfd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MEwYqasfC8Ql4cDV6C+qQ7yzkSpolu4hJgVvgKpZnHI=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 304c18\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c7c0 ece3 | 5 9ed4 (0) b2f3 (0) d465 (0) c7c0 (0)\n001 2 72d3 769c | 5 769c (0) 72d3 (0) 689c (0) 6a51 (0)\n002 2 0ffa 0160 | 2 0160 (0) 0ffa (0)\n003 1 2650 | 1 2650 (0)\n============ DEPTH: 4 ==========================================\n004 1 3a9a | 1 3a9a (0)\n005 1 348e | 1 348e (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","private_key":"411d5a05b2233c28b2366e3ffc2e67effdd61216f64124ab18ef047fd2d2b6ed","name":"node_304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","services":["bzz","pss"],"enable_msg_events":true,"port":40347},"up":true}},{"node":{"info":{"id":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","name":"node_c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","enode":"enode://f4bb3d33407ed52c3ed7a46a9394efb0907b2ec97d79e08a4cebde9206d7b9f1d7dbfef2c01efc191b2342e7dcfc725015f6d6c639ce8af7ce3f2240c41a3d24@127.0.0.1:0","enr":"0xf88fb840bfa01ff6980a93944637109a5b15621a9bf50a678e6b21a6cb08b903a5db94e770fa89cdb38ab4a7540b4262ad9f2036ee6a3868b6de7a437d5c3c71402f097f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f4bb3d33407ed52c3ed7a46a9394efb0907b2ec97d79e08a4cebde9206d7b9f1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"x8CAzgtexu3l4A87QIeZUZcE+2KOgXfB7sLnrtfzsbA=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c7c080\npopulation: 6 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0ffa 304c | 11 55bc (0) 769c (0) 72d3 (0) 689c (0)\n001 2 9ed4 b2f3 | 2 b2f3 (0) 9ed4 (0)\n============ DEPTH: 2 ==========================================\n002 1 ece3 | 1 ece3 (0)\n003 1 d465 | 1 d465 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","private_key":"8bd7e85f0ac64efbc80d7952b31f33602531d2e9ce2f589ebfbdc66fceadde81","name":"node_c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","services":["bzz","pss"],"enable_msg_events":true,"port":46599},"up":true}},{"node":{"info":{"id":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","name":"node_0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","enode":"enode://99de6da9abebfa76fefdac94de902456d8450886946933b5e9da18e4b0709d7c27109b17d024419e205fa3b2cc50268f330217b105a0a92126e1c1697b593dfd@127.0.0.1:0","enr":"0xf88fb840e1d27e54275610c9979cc6255e9363b42c5e2c746301dc788af52d58e895775e37d99e021fc6f9746aba2070d0e48855e7a4c8f04bee0d96ef8c49c8234f97840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10399de6da9abebfa76fefdac94de902456d8450886946933b5e9da18e4b0709d7c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"D/r+COmRGbJA86Hzbd07vd0fPD8T6IOdRVHkP3llgWo=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0ffafe\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ed4 c7c0 | 5 b2f3 (0) 9ed4 (0) ece3 (0) d465 (0)\n001 2 689c 55bc | 5 55bc (0) 769c (0) 72d3 (0) 689c (0)\n============ DEPTH: 2 ==========================================\n002 4 3a9a 304c 348e 2650 | 4 2650 (0) 3a9a (0) 348e (0) 304c (0)\n003 0 | 0\n004 1 0160 | 1 0160 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","private_key":"a19af618fec44371482faf5f2f6366acf984bdaf717c382869e46dc18edea77e","name":"node_0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","services":["bzz","pss"],"enable_msg_events":true,"port":43693},"up":true}},{"node":{"info":{"id":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","name":"node_9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","enode":"enode://ae0f2a151e99e9e9e54938545cf4f19f56a6a10bbad2f1966661dee90753d398c6771c23d7ee70db1715897e3364a561e38ae3fff21349d579e9abf44dcf8d5f@127.0.0.1:0","enr":"0xf88fb840ff4b95dcfbd61ccc46ca0a798ba8dcaa6cb23ae891ee35cfbdfbfb7811614a8a08192ebcced83a5c6afbf3d95c08b6d5fd18af8d5df806d341ed361398e3554f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ae0f2a151e99e9e9e54938545cf4f19f56a6a10bbad2f1966661dee90753d398","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ntQLcOTHKZemyYD2hi0K6PNmsb5Ix3/Pp5ZTYvsd18Y=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9ed40b\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 769c 55bc 3a9a 0160 | 11 55bc (0) 769c (0) 72d3 (0) 689c (0)\n============ DEPTH: 1 ==========================================\n001 3 ece3 c7c0 d465 | 3 ece3 (0) c7c0 (0) d465 (0)\n002 1 b2f3 | 1 b2f3 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","private_key":"d19f0df4bba07418a557ec945ed8c8851ed01e20e7760c72954352862bf77ba6","name":"node_9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","services":["bzz","pss"],"enable_msg_events":true,"port":35629},"up":true}},{"node":{"info":{"id":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","name":"node_d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","enode":"enode://338975eb003552bbb837272c2b48a049b7fab8958571e0eb9bc1d1cdc967cbbe42ee93adeed75700391016cf7d311e7d06f48cef371f2b80ff80bfd6a27bd16d@127.0.0.1:0","enr":"0xf88fb840f009eadfddb5e69c6ca89a5d2ba64ee2ec31ebe85623adea4e036e4136f1f4d74d0933a43c9a0bdb66eec46cdbed18bfde269fa892da42d47d2b8bd1b6db3be30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103338975eb003552bbb837272c2b48a049b7fab8958571e0eb9bc1d1cdc967cbbe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1GWYv89EN/iGN8p1VXMBB1NfOLQZycs1M83FNuGWJp8=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d46598\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 348e 2650 72d3 689c | 11 2650 (0) 3a9a (0) 304c (0) 348e (0)\n001 2 b2f3 9ed4 | 2 b2f3 (0) 9ed4 (0)\n============ DEPTH: 2 ==========================================\n002 1 ece3 | 1 ece3 (0)\n003 1 c7c0 | 1 c7c0 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","private_key":"adccac5625a153c4cca90a971fbe0b7b2f9f62af166fd1fcad0a6559e042e2a5","name":"node_d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","services":["bzz","pss"],"enable_msg_events":true,"port":39805},"up":true}},{"node":{"info":{"id":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","name":"node_6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","enode":"enode://0fe608947dab328f476e8dd8d94ea391e604adcf4a15901224e32c9a3bc6e198d13751af168e9b31f140ee82d39e29d0f347cd733cd44797abf34ce629c57a75@127.0.0.1:0","enr":"0xf88fb840bf749d25f9054ed9f97df2a3d695fe170ece0e2d67d097756696bf90d2d5c5dd7f67527f9f8368d18843438f769883c32cc76fab8eeb57768a9d66fedd125e800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030fe608947dab328f476e8dd8d94ea391e604adcf4a15901224e32c9a3bc6e198","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"alFzAxcq/rAXX/M/YjLaqcLPmjdTuc2XPS4aG7ss0cg=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6a5173\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b2f3 d465 | 5 b2f3 (0) 9ed4 (0) ece3 (0) c7c0 (0)\n001 2 3a9a 2650 | 6 2650 (0) 3a9a (0) 304c (0) 348e (0)\n002 1 55bc | 1 55bc (0)\n============ DEPTH: 3 ==========================================\n003 2 769c 72d3 | 2 769c (0) 72d3 (0)\n004 0 | 0\n005 0 | 0\n006 1 689c | 1 689c (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","private_key":"0ab9fec01ec19b2a335b0ada3a02e30702d90efb1f3c1a0bf2b9cd36a9f87fc9","name":"node_6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","services":["bzz","pss"],"enable_msg_events":true,"port":41555},"up":true}},{"node":{"info":{"id":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","name":"node_689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","enode":"enode://9e1aac08a4928876280c211e71ffd510eeb78fbebff4ac254af5a302f8913cf798a0f55a79b99735f8a01dc4adc39428659649437d1bb0b88d3383e6b7ad7104@127.0.0.1:0","enr":"0xf88fb8402129c2f1dadb690035ffe0776862b987152c612355ed44a6927c7402b5801fe05b2d540e5e19afb63be6e975809af1bcc385286bad2dd92baacec2f7931386680183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029e1aac08a4928876280c211e71ffd510eeb78fbebff4ac254af5a302f8913cf7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aJyaD1eoOEaCWf4u4IJEatFcWW7zYboWwrkrU922ykE=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 689c9a\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d465 ece3 | 5 ece3 (0) d465 (0) c7c0 (0) b2f3 (0)\n001 2 0160 0ffa | 6 0ffa (0) 0160 (0) 2650 (0) 3a9a (0)\n002 1 55bc | 1 55bc (0)\n============ DEPTH: 3 ==========================================\n003 2 769c 72d3 | 2 769c (0) 72d3 (0)\n004 0 | 0\n005 0 | 0\n006 1 6a51 | 1 6a51 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","private_key":"31c956ed431b0b0f061c15e1263dbf111de4a9f4dd5335680fa9f64c0821fa0b","name":"node_689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","services":["bzz","pss"],"enable_msg_events":true,"port":36247},"up":true}},{"node":{"info":{"id":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","name":"node_72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","enode":"enode://d21eb565193ce78749091397af418bba7c9b152f3ccf4199e17df26bd700459fbb87ada766a3cdea29a1fdf9656b6b1372948fcc2eb030dc879b029bdd6b04e5@127.0.0.1:0","enr":"0xf88fb840f89a9aa64661b1f4d6ac8e6aab664af27a58b08bcc3c43066d458d99dcf75bc6536c7326631a031ff2b89404eedfbe566a8beea5d3eb0e0865b206d8ea25bc070183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d21eb565193ce78749091397af418bba7c9b152f3ccf4199e17df26bd700459f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ctPRRIhY45MQPRvSlAk94Ovz7IqLTTtH+mmGrbVcUrI=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 72d3d1\npopulation: 8 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d465 ece3 | 5 ece3 (0) d465 (0) c7c0 (0) b2f3 (0)\n001 2 304c 348e | 6 0ffa (0) 0160 (0) 2650 (0) 3a9a (0)\n002 1 55bc | 1 55bc (0)\n============ DEPTH: 3 ==========================================\n003 2 6a51 689c | 2 6a51 (0) 689c (0)\n004 0 | 0\n005 1 769c | 1 769c (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","private_key":"278c5f54c5e9f2d2688383f0a5f98b72a01d76b532799a74162c2f169d8a4819","name":"node_72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","services":["bzz","pss"],"enable_msg_events":true,"port":36181},"up":true}},{"node":{"info":{"id":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","name":"node_348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","enode":"enode://5b1fa3f55ee9c0fd34bf203045faf80d0a8fcded75c21a9a319fe6d628698f8aa78c60d5d78df5b3c54c29fd27f10be4a63c66895cc743e1a0cbe795e87114ca@127.0.0.1:0","enr":"0xf88fb84017bd33bdfe5b6e2c263ef3e95f0acaf1a4e902e79b4cfbe40e6ad57b4f9b21e019473a61a57e1b999ce432c288a6c8fa685df4afd8872c98757be969446b1ff60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025b1fa3f55ee9c0fd34bf203045faf80d0a8fcded75c21a9a319fe6d628698f8a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NI6TUbEGJaai/gROZ2l81UzlfIbaJXBFnst51Ky4bzI=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 348e93\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d465 ece3 | 5 ece3 (0) d465 (0) c7c0 (0) b2f3 (0)\n001 2 55bc 72d3 | 5 55bc (0) 6a51 (0) 689c (0) 769c (0)\n002 2 0160 0ffa | 2 0ffa (0) 0160 (0)\n003 1 2650 | 1 2650 (0)\n============ DEPTH: 4 ==========================================\n004 1 3a9a | 1 3a9a (0)\n005 1 304c | 1 304c (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","private_key":"fdb4b30d8d9482f9581193c6f6b57e5213922001901c46407528810f0e598058","name":"node_348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","services":["bzz","pss"],"enable_msg_events":true,"port":37669},"up":true}},{"node":{"info":{"id":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","name":"node_3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","enode":"enode://90143f4ad7bfd6cc2ba948ab8de4587aa7a2948de5b096c65ef276f04ff7c4aa4e043e0add0734c668c1f8c59e7d4294d2bb2bde96490ce04ce95eaaadb4bab3@127.0.0.1:0","enr":"0xf88fb84090f225e54c8dff490b8cdfbcf4d956adc2125d2bd2b2c98c090d6d6775ad78ed3cc047b26c655c81bedff72ccfdeecca053020666d23c3342a27b7ffc339dff30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10390143f4ad7bfd6cc2ba948ab8de4587aa7a2948de5b096c65ef276f04ff7c4aa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Opo7ONDc1IRfidcJG4L19nX8NVfQmXnED/wSp7u/5BQ=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3a9a3b\npopulation: 10 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ed4 b2f3 | 5 b2f3 (0) 9ed4 (0) d465 (0) c7c0 (0)\n001 3 55bc 6a51 769c | 5 55bc (0) 6a51 (0) 689c (0) 769c (0)\n002 2 0ffa 0160 | 2 0ffa (0) 0160 (0)\n003 1 2650 | 1 2650 (0)\n============ DEPTH: 4 ==========================================\n004 2 304c 348e | 2 304c (0) 348e (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","private_key":"8affc7f653083f993524996d8a2de34d88ba748c3485d4cd721ce02207edacae","name":"node_3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","services":["bzz","pss"],"enable_msg_events":true,"port":46571},"up":true}},{"node":{"info":{"id":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","name":"node_769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","enode":"enode://c1b9d33acbb2c9146cad2b1ff6786740ae264aad8c633fdeead6fc07a584de39e78116f9790d1b88e80590ba6a40b0dba329474f371d2001205f9b5cfcd7e1e3@127.0.0.1:0","enr":"0xf88fb840678a2b8e8007983d072232c0a39be22bad2ab19c2a8010bc814b74e7c1d40edd0169d827cb6191c5b4ed4d7079a6cad6163b76a826017bf524f74655b92d26320183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c1b9d33acbb2c9146cad2b1ff6786740ae264aad8c633fdeead6fc07a584de39","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dpyUjXldExlfM2Gvava9t2/dZu09t5bM7BBPfcIf76A=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 769c94\npopulation: 9 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ed4 b2f3 | 5 b2f3 (0) 9ed4 (0) d465 (0) c7c0 (0)\n001 3 0160 304c 3a9a | 6 0ffa (0) 0160 (0) 2650 (0) 304c (0)\n002 1 55bc | 1 55bc (0)\n============ DEPTH: 3 ==========================================\n003 2 6a51 689c | 2 6a51 (0) 689c (0)\n004 0 | 0\n005 1 72d3 | 1 72d3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","private_key":"dbc7392e8eb09f40ef0971a14aa3db440d1a125b32876942e60f8582ad70c046","name":"node_769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","services":["bzz","pss"],"enable_msg_events":true,"port":35637},"up":true}},{"node":{"info":{"id":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","name":"node_0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","enode":"enode://e7237f8772dd77b211f061e619e63fac712395256ff49128a7152f1bfc4ba15fe7b9339c51e2f98e0824faec48ae462e6a340f94c11ff1d32e692aac18a63c07@127.0.0.1:0","enr":"0xf88fb84013c8bd0c52cc1d01e9d8a1394b7be84bc47f042841d0073347d93646bf6a3d266c3fd3dc41ac81c04d6b2027a7aa4d2688270827ab197f79a29e426130530c7a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e7237f8772dd77b211f061e619e63fac712395256ff49128a7152f1bfc4ba15f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AWBDakeR13v37ZyYIoin9ex6Gg0o9h9n6ujcZWxicsQ=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 016043\npopulation: 10 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ed4 b2f3 | 5 b2f3 (0) 9ed4 (0) d465 (0) c7c0 (0)\n001 3 689c 769c 55bc | 5 6a51 (0) 689c (0) 72d3 (0) 769c (0)\n============ DEPTH: 2 ==========================================\n002 4 2650 3a9a 348e 304c | 4 3a9a (0) 348e (0) 304c (0) 2650 (0)\n003 0 | 0\n004 1 0ffa | 1 0ffa (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","private_key":"bec59ef09d2194c27ec1b844af85605ac08c87830784fab76b080d3420c06898","name":"node_0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","services":["bzz","pss"],"enable_msg_events":true,"port":45829},"up":true}},{"node":{"info":{"id":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","name":"node_55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","enode":"enode://2de6037913178726275c8ef050e0dae981406aa551fea37112bdb34d1a403bb5f86fe8cbb04732fbde1f0f362bba71bc6499c16b59fab0f7f0d6f1c0c1d103d6@127.0.0.1:0","enr":"0xf88fb84002914870f5ffed74456e9316ad731fc2686c9a0189c095584882392fe59512a56195aeeabfbb7fd0f7615cfa429568a033dc0447bc5d1a34ba2a05ad8bb762c30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022de6037913178726275c8ef050e0dae981406aa551fea37112bdb34d1a403bb5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Vby/E5LQzXeChqIcl6LSKn5KJJTBlxR8OfXC8k1PuhI=","hive":"\n=========================================================================\nThu Feb 28 17:16:22 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 55bcbf\npopulation: 11 (15), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ed4 b2f3 | 5 b2f3 (0) 9ed4 (0) d465 (0) c7c0 (0)\n001 5 348e 3a9a 2650 0ffa | 6 3a9a (0) 348e (0) 304c (0) 2650 (0)\n============ DEPTH: 2 ==========================================\n002 4 769c 72d3 689c 6a51 | 4 6a51 (0) 689c (0) 72d3 (0) 769c (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","private_key":"ba62b88bff913813741dd50c907c918e974132dcde3c6f57ea49a0bb1ce5cd26","name":"node_55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","services":["bzz","pss"],"enable_msg_events":true,"port":39363},"up":true}}],"conns":[{"one":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","other":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","up":true},{"one":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","other":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","up":true},{"one":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","other":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","up":true},{"one":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","other":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","up":true},{"one":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","other":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","up":true},{"one":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","other":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","other":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","up":true},{"one":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","other":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","up":true},{"one":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","up":true},{"one":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","other":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","up":true},{"one":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","other":"ece30c5ce40c2769973e954bfd87b973a753887f4ab39f2b638a3cb289eca521","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","up":true},{"one":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","other":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","up":true},{"one":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"c7c080ce0b5ec6ede5e00f3b408799519704fb628e8177c1eec2e7aed7f3b1b0","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","other":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"0ffafe08e99119b240f3a1f36ddd3bbddd1f3c3f13e8839d4551e43f7965816a","up":true},{"one":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","other":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","up":true},{"one":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","other":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","up":true},{"one":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","up":true},{"one":"26504cb3d9a12227afdc43065496ccaff7172e4da62aa74d37f271ada3f00dc7","other":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","up":true},{"one":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","up":true},{"one":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","other":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","up":true},{"one":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true},{"one":"304c18a9ab1f0bc425e1c0d5e82faa43bcb3912a6896ee2126056f80aa599c72","other":"72d3d1448858e393103d1bd294093de0ebf3ec8a8b4d3b47fa6986adb55c52b2","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"b2f3a69d52f98037cfbdc40a529612c890cd4b061bfa87411493df5c6e1eb5d9","up":true},{"one":"689c9a0f57a838468259fe2ee082446ad15c596ef361ba16c2b92b53ddb6ca41","other":"0160436a4791d77bf7ed9c982288a7f5ec7a1a0d28f61f67eae8dc656c6272c4","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"d46598bfcf4437f88637ca7555730107535f38b419c9cb3533cdc536e196269f","up":true},{"one":"769c948d795d13195f3361af6af6bdb76fdd66ed3db796ccec104f7dc21fefa0","other":"9ed40b70e4c72997a6c980f6862d0ae8f366b1be48c77fcfa7965362fb1dd7c6","up":true},{"one":"6a517303172afeb0175ff33f6232daa9c2cf9a3753b9cd973d2e1a1bbb2cd1c8","other":"3a9a3b38d0dcd4845f89d7091b82f5f675fc3557d09979c40ffc12a7bbbfe414","up":true},{"one":"348e9351b10625a6a2fe044e67697cd54ce57c86da2570459ecb79d4acb86f32","other":"55bcbf1392d0cd778286a21c97a2d22a7e4a2494c197147c39f5c2f24d4fba12","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_2.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_2.json index b01ce303..8be6e0dc 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_2.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_2.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","name":"node_fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","enode":"enode://6a7dd306ace8a106c3b86ac6b0cd6eeccde4a9af5090ca4a6d1054787f9757875b6b8d02f88fafe3fd7f20f0349a0060ace7c0be1d65470e736a3319431b5c14@127.0.0.1:0","enr":"0xf88fb84096f5dd9030fc74da3701ef7b06dfe4d44068118f8041a728876904d70fa8c88c20df197c343522c76d75d3a12507c567213c13b46a94ed4800f47474643f4ee70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026a7dd306ace8a106c3b86ac6b0cd6eeccde4a9af5090ca4a6d1054787f975787","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/TfkUhDds2+LXs75ydnT+CAbqVI7/WpwKRMzzzuSB+E=","hive":"\n=========================================================================\nThu Feb 28 17:15:44 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fd37e4\npopulation: 2 (2), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 1 3594 | 1 3594 (0)\n001 0 | 0\n002 1 cb08 | 1 cb08 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","private_key":"6a02f87b1d13a15ce24bfa58456af8aaabdcf8cb58b9f86c19ab14c721c80f91","name":"node_fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","services":["bzz","pss"],"enable_msg_events":true,"port":39341},"up":true}},{"node":{"info":{"id":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","name":"node_3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","enode":"enode://0972df8ba2504ddc155739320ab392e64d000c950e08ce42863449bc4757dd03397efbad98888f8d740b7cf55c357d1d6d74b5e8cb935f71b19e0e16ceef03f9@127.0.0.1:0","enr":"0xf88fb840d5f39b1ebcd5b616ef67b1c0239ed4501ef45c6a00e5bd8cd3f2ac88870d4c4b6ce4a4af820afab9a714d99a5fef53ec3c042fc3243f403819bcfb3504c2150d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030972df8ba2504ddc155739320ab392e64d000c950e08ce42863449bc4757dd03","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NZRDinSApcPcBkQOKKFgRMDH0okhnaAvnkHaGBCCeAU=","hive":"\n=========================================================================\nThu Feb 28 17:15:44 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 359443\npopulation: 2 (2), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 fd37 cb08 | 2 fd37 (0) cb08 (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","private_key":"26266470b7f4e9341cbbbb304b1aed116626cb1bea55d639cdbef1a069c18123","name":"node_3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","services":["bzz","pss"],"enable_msg_events":true,"port":33055},"up":true}}],"conns":[{"one":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","other":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","up":true}]} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_256.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_256.json index 4397a7ea..936956be 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_256.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_256.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","private_key":"c4e98d074abce07e849be2810e5522bdacf2489125ed7577e02b4809f9619700","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","private_key":"d607b8638fa33ef417d88597579e00a2f93e76881193a8692b57d03b27a60ba7","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","private_key":"c4501aa97316685b3e707bd881c1d805e96430723fa88ffc60e1703485eff5b2","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","private_key":"f1fceda785676921048d116f40e4d331ab32873f4b0343fddbd372c836808f2a","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","private_key":"a5baeb4f2e35eedde63d573bbec157e61f0c0ba6ecc7b6cb6a42759bbc165e5b","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","private_key":"1b7e31744236baa89eaadd57ec870b5415111685fda883490b5a0e1dbc321210","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","private_key":"344f9ff7d68ca6a04e3141646044db06e5761248c64a01bb6cc2813fb7745ae4","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","private_key":"869c03072d8108be18544c579cca53ffe17682e3898f44baff9cc37507fc62ed","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","private_key":"1fe668699f54728124bbf993215de07682f072d145dd8acc428f04abd4a46f08","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","private_key":"a3af1294d727198fb3282659a35ae5b27f4b23b28d76e528809b68a6263fd673","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","private_key":"f7ad4635d864376fa4536bf23df764278d30805556cbf13e794e0ebacf389172","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","private_key":"237183f9e7834a03859c43be2a49bb8e4f1c9c7a5c334958f74d4ed36dfbd5a7","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","private_key":"7f7c361b6989c77419ac69848c9a4b06255aeb0f6115454566cde4ca544af085","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","private_key":"00133d03c85e03bcd54ddefc03d9060009ea78ee5ba1f6f335111f47ab8f433f","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","private_key":"ee3f0e3cca3720aa0727efa92a11ea9252c7fe72fe64c8814de2accbb91d049d","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","private_key":"470d12a7459f9fa9f1adf18e94b60340c5c442eadb1329fa871073e64d6bd7aa","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","private_key":"3450c9c68339a76f1f75fb1f770914dac1cfc5e0cb23d6fd703480beb3ddfd4a","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","private_key":"1df10df7cb050098e9713c3773a47962a6cfea944b53b12fd84563c98dc46e7a","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","private_key":"e699fe1e14d46a5a72d5696e397df71ac0d17abf136dc84d850b658e56881c75","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","private_key":"0974ab51554372614954b68ffb0fdde4a82efdc0bf4e6f802dbc3728cb4b5e47","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","private_key":"14ce7db5594270c24ed48fd5881d6f02b9cc6267731612c5117e4d273d3920ca","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","private_key":"32fa52ca7b60e6953e97635659e4a5153688636594be7f560fc5f8468fdf7022","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","private_key":"d28563bbfb6db23928a66e837cdfa794230537066eeb93063ebeff3f531b12ca","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","private_key":"137533f5c2f9257d2a60c22d205407f3cc14c52ec60fc34666b05dcb935178c7","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","private_key":"1dbab5393fba98797db2a32f7d2ee6ad019bbd9e26ee051313e566bb1e21a1b4","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","private_key":"87a7b7028ee1140af69055fb641d23473c44f238544e3cc23e2909a959d1e091","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","private_key":"102d3a405cf636abf7d0b4e4a1fc0a698dc0d4033c288762ce9cc975b91db032","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","private_key":"d8ecd7e813dbc7683f773cf38cd0e344ee9b4e308f12f557b6642eda2ef88ea1","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","private_key":"225f43e03ffb8a97b760538a5cb9cddb61e7a387a3e56e82160300ed8c53e073","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","private_key":"75acc8059053d23505c4513dbfd60777918db43c9713b3577c36836f066e31af","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","private_key":"d6bd6c72597f6ec178becb6cdf6520d7de3f1278f77aa42095d287f45513b1f2","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","private_key":"b329bd7d93dbc0fef82737292076fb91e323da4f34d22a5ee6fe311018203992","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","private_key":"f62b2e6c0ace2c204b4efdf62d3a9e4e41740aaa2a7aee72aa67272b08f65388","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","private_key":"5083c0504c95867fc5a924311192eeb35e80105fb25720516a8af8053516b87d","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","private_key":"52454a2b364cf029dbd0bd0f6880fd3c4a3eea2ef593277ca45c363888b025dc","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","private_key":"822f8bae08da0af5c00b04adc4653e9b425648c538f482224cc7406ed46694b4","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","private_key":"1e41a399b1b77f559bce8b0db22cabd26152fde5eab7c91576e4a2e00cbf3061","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","private_key":"f39163a2c0a70f6eb02436a58c6029082e040ee88271fb27deb0e9c61af2a409","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","private_key":"30358622050808cb05e6c497e4ab00bc0baa126282c0f0bd38a279f15161ebfa","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","private_key":"e96ccd329e3ce59cca1c371e0d97e891c8755d8285c414d227fe2d8dde438ada","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","private_key":"a8af10b8118821f3f7a1c456f857e4ddf50526337a38eddaffe15bbbb383ac32","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","private_key":"aea855db0ccd147bccfb6969c37e5ceb12623a95cde33c7725d51418c2a58e56","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","private_key":"14f5b342ec3c67c89537fc4dbaa64da24b8d7d02242eff9642b680d1923a000a","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","private_key":"b56fd7d35ab0d1f76d30c898f6794ff5399b2d6982c4d5afadacaf72aa535bd4","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","private_key":"59db345b1123f497ab8804ffed255e26dc028f68d9010314f9eebee243ee74cb","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","private_key":"87b0f18d2c52b3f0f6934c09421248a6d0457eab81b8dbd93840877ba7c25006","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","private_key":"86f6a5532361ee4f4511ef6ced21fe2e8d4e12b10d61b8d16f6805d5d6ff869c","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","private_key":"604cbd4183a23b452f0c9add6181effac6084e4411051850ed0bc4f1ae9a33d8","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","private_key":"ada9db22cbb971526fb9a1e050a039ae3bc1b898086642c093f9d2fd1b4a2e30","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","private_key":"c3e1cd6edffbca6121b114763c7cc8d8fce9b4444747af55b56cb111f3803b5e","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","private_key":"e74e4c545f1d04c35176065ee8e6610e9847ba30aa0b4ff9df3d574a9cd04bc5","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","private_key":"d44b65dad6f0fc7d3868207b4d13aa646925f53eef21981d7898ca8eef1f47f3","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","private_key":"5c0b688fe7738cf3e06e8f932ca1986d88f6c00a9f705d50335632433ad7d52a","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","private_key":"8d78762191955f66c6881143b2fbf367eb02b6182eb49c5f11d22381f8e34152","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","private_key":"296788d95df4ddf6af02ab317a50c417d36515453b5cebdae7c71f55a657c7f9","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","private_key":"b229e6aab9cd866a0aecbc7358eeb2986cdf2ff1bcd25ae6d3dc33ad282a03ee","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","private_key":"016f837cc16dfa3e8ed3519599b40bf8ee03872dbe01509e3928f5459be708d9","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","private_key":"fb9bd6643165414424261aa1dfdab87ad7b83e52d9bfcbaa69e1bb116f84b19a","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","private_key":"c761dd84c3923763ca0acfc07e4939b146d57bd6b42efd6c5e8e5c0b63dc1518","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","private_key":"4503d268231fe7b4f60290da3c7f7f67bc51e123b65b7fb48f8ababc2eccbf6a","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","private_key":"c643d7712e7aeffa425505349e837da25e2cae551f446e56a96e5b2df48f2bfe","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","private_key":"cc7a5a2b92089562a184b024a3782da10d925002ca1dac6c95d902ed4df95998","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","private_key":"31d2f152a7b173892132dcb790d697cb779cc886a67355b5907e803ec734a1e0","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","private_key":"f0045a14d36d5d17d8859c51edce3fd7afd083b6722cf6a3668dbd4f1db69e17","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","private_key":"f00404704ec4c556b0ee4cbbc1b8fec0b741d8a587b0baffa9a0ce79648f6560","name":"node65","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","private_key":"5998a146afa95186e2ecf2d1daa4376812bbcbbf22809ba0807dc5e34e5d1e9c","name":"node66","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","private_key":"542904a26056c4d86aafe32a8dbbb30ef4a31b36c81563f47a8ce22145e5da4d","name":"node67","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","private_key":"4feddb131b7fb4c20144641fd72951bf356b4ec190a8a8cb322f2d0819aaf317","name":"node68","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","private_key":"1fa8a1ef0703e81a32dd0faf6d25447a183ecb90d6994f45921c3db0e8dc3d06","name":"node69","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","private_key":"dffd7a3c7cb1c3a0d129522290be15481d609d4d268daa13364cb16e13213398","name":"node70","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","private_key":"c5ab7f8e52d35ba6f3aae971d7215e9dd234f82a3331ca904c2b6b526d2a59db","name":"node71","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","private_key":"07c9b7896ed7f5c9763b72ab6631797941cd615c3ecd431de30169fdbe89cc2a","name":"node72","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","private_key":"da65f19428056c9c512efa6c1e97a409861ab28956b2c9ed0b8a72bba67c010e","name":"node73","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","private_key":"3ea7d8647b5a7f04bdae56288940cc9dc8289c49fcc4a1a79e9d3fd9a6ceab2a","name":"node74","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","private_key":"86dd972691e02a4562fde8ab7cfa9ceb75201e42e506cf2d51c16d9d474bad2d","name":"node75","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","private_key":"cb578a8fabe87c91b214032286af35c973b3f27880dd80fcd1efb929d1dd4756","name":"node76","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","private_key":"d4921582200b69793cc182b16d32031dd9559865007b31b1011d35512379ae8a","name":"node77","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","private_key":"286143c4711912830a900f8a45b11baa1bef2b6b96e9a918484cb95aafd2164f","name":"node78","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","private_key":"48d763e65d8c5b6a83609844cf203d410e1afa134af6eb6ed22a42bbfd55ccb9","name":"node79","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","private_key":"98a9e2aaeb4c53a781d4150faa14cc0ff5f066e7be28098cbc25a0c379be18a4","name":"node80","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","private_key":"97df41163f6dfeb248b196fff24b95edb55e2b6c48c551480226459fde0ce62a","name":"node81","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","private_key":"887a82d3553c5107cd8d6220f2ac36ca2d6d499b8c82b765a17bd6295e9861d4","name":"node82","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","private_key":"b067efa25d200683b69e2fa485be6ac0a6bbc34a18796bc0b0e794d4dadf83b1","name":"node83","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","private_key":"f2b10950651367c628d1675c7a07962c0af4062b2c3c8154075cf61f9635cd67","name":"node84","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","private_key":"55f59b8404f62f76682812c128cde0b37da46140d69661f3de90af132daa04c8","name":"node85","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","private_key":"bc5bbbdd85ae3b09a493f0b43542448acf2976654a249f32bf92eff0d414866c","name":"node86","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","private_key":"f342c7683da21156a1f53ce673f78414f580cdd86eda879596d087439e4475f9","name":"node87","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","private_key":"f9550b9a11e9aece642e0e863b82852f4c5c8cb6044144627d678ce3988cda39","name":"node88","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","private_key":"111dc027f4345175a5a141eff93a8d04d82ec6d67a15d0ed0c53ae7fe954868c","name":"node89","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","private_key":"30caccc4af13ac896656ca1add341299bb51773c44f91f3105a1564abbe84f5b","name":"node90","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","private_key":"ca298279e19e3d8437a361debb136898e8bf05c7946dd3ffdef8d267f1c79049","name":"node91","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","private_key":"d513af6f8087302defbc40f0f03c63b144c07a636b7c5c970e962d445232a6f9","name":"node92","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","private_key":"e5808b0004f64868225ce7362aa1b0d787d6c8bafbf5d08aadf4a804bfa4519a","name":"node93","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","private_key":"68c381bcacc6c4396824a929cd7124a13b8032185de88ce2cc3cb75badc6a5d5","name":"node94","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","private_key":"0d0d4c6da032e6ceb496ec71883cff52efa41a9383d2b83b747d1bc6f8269a17","name":"node95","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","private_key":"53c79eca1a5cc6b186db543273722c0168564d7cecceb76d1433330101f8e62a","name":"node96","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","private_key":"cd3e3585e9c28d16a0a5c11e8efd66671e8cac68915eb6b7bae228e10e867fd8","name":"node97","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","private_key":"60f513f00eb15da948e892d69bec82991bfb0747c9d5879c6c26c2a5a6095365","name":"node98","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","private_key":"94b0c348b1ec7288d57eb195f114f38da5a6fc3f604e8f1ed76135ef26f50c6d","name":"node99","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","private_key":"a6e6ca4e3f494adc69bb1aaa01dfc3dd625d9923fa4c979ec80ee221b83a589b","name":"node100","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","private_key":"2c11691d22adc7bee004f61ad67b543d9ca22c7c65125427e310fc5c8784091f","name":"node101","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","private_key":"1ebabfc78e1b9d17e6fe38508bc354ab54be2a8bf57483b0afe7dc3530533e0f","name":"node102","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","private_key":"9b22a93b1dd1ac5ad34771c2cf183292f9ca7133b4ed8a1d0fceb889d6017170","name":"node103","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","private_key":"b4d7978eed053b73224b969ad03abd7503081764e86f7815f8b650b7ba9a34b0","name":"node104","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","private_key":"18bbd14788534b3f7490b55c2243e84c1ed1d158bd769a47fdc2d8550098ba97","name":"node105","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","private_key":"ff55b25abe67052213c916a734949cb6a98d1ad2f240183bfa1fe694cfa0937a","name":"node106","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","private_key":"406c029264f74f39f2ad851342bc311d4800fe07db744f69557ad9e3e5899aeb","name":"node107","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","private_key":"9f9be5e82bec360e52170374b35e26ab30480bf5effa10bc43527c191d1efc84","name":"node108","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","private_key":"01c46dd80b68bfbc5916277ab36142ff3033b126df71354bc7b21993be4f27b4","name":"node109","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","private_key":"d4ea8e3d466c3fadc709252e0b35240e831250311a3023363aaa2de0d4068efe","name":"node110","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","private_key":"ff786dd6bdf5a54dfd71c73ab93427d94008f2854eec2a87c96223aeaf5a2357","name":"node111","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","private_key":"81d2fd2b16f53fcb3749b3c8575a00ddf39ee32f760cc7e8365c046e364ec849","name":"node112","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","private_key":"5017533627afd71f2684b9ef264ac79ff826f1cbbfedd788d969d9ae1bb87b20","name":"node113","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","private_key":"92a91e558f70fffacaea7b5c86540ae940da57dcb660d8c3e6eb5c7b38f015f0","name":"node114","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","private_key":"91f18de340c4916711d69fea368a4248eca8a13910d576e24ff9125fbccae3a3","name":"node115","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","private_key":"f1e5638e4912ca0ccd446a27531942b75039807eea70118fad6880f5b1ad5ee7","name":"node116","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","private_key":"83bcea8f8c409f9470bca240d19fb29d9fea6cf94435ebbdf0a8faf5f1cb5ca0","name":"node117","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","private_key":"33c3e295cfb9706d4d5e081ec3c220d8c35415d7c256de99511e76474e8c906b","name":"node118","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","private_key":"af0dcfc78e50f0893cd504a3567a8515538bd85a1d3eb72809dd503690d0d274","name":"node119","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","private_key":"8c806f6fed9bc74fb07341b080bc3067c953b5d6093ef5779221924d4ead4bb8","name":"node120","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","private_key":"a1a11eedc4fe78f42dd23b093d9fbcbf1643899eca875296b0374ec0e8ab619c","name":"node121","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","private_key":"15d8362248798e68c5eda882717ee691573e5477b7f0444222fabaaf1a025a8a","name":"node122","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","private_key":"c1d6cf53ce48953f5b6bb0e0b644aaebd16b84a3910894f93c157140c88988a5","name":"node123","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","private_key":"a67b1d8e2abb33c866d215b81af3a23fe0657a9155a8e17754bc0028dcf87852","name":"node124","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","private_key":"b9da682c3a119f650ebbaccf2974166f3162ce600afd50152f95e9be3f688bd4","name":"node125","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","private_key":"a6ca067c4be7a67d6c5b14fe7e0b62a964d844462a6b26a981cb73ffcbb48e46","name":"node126","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","private_key":"08926af18a3a13a1bf786aa6946ab5bde52c531026a8561524925f1d9f0d665c","name":"node127","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","private_key":"793a4b0ec03ee3d4c1cc8fc8084366fc20e5852ecc3aa96ba2882babd7b8ff37","name":"node128","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","private_key":"9d2fd418a2966f748dd746ca5b5f0c3a82496a0a6274355c059d5f48be6870b8","name":"node129","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","private_key":"7c7cfd0cdb3cede7dc5d152c6f5a8d89941656a3e9e560cf993a319c9012f074","name":"node130","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","private_key":"457954e43019a3f3e510a0f818996c28e372410ba50490b5042068ff63f3e17d","name":"node131","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","private_key":"d45a6d15ff3a2073f6d31d9df7fe6778cac0ca1d62aeacec44341aef19924624","name":"node132","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","private_key":"c1e5c2bc35a1030f8bd3ffd9099376d32ca3029eff92b5c79055ae2454a6fd6a","name":"node133","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","private_key":"89da1a80c7122d19de9b63637b1f1675ee7e009a5ecf1f6c51cb29b2a09cc908","name":"node134","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","private_key":"e5596012d345aff602e83361bc5fb1f7e3feee7b23782a8c7f0a1c7933ab928c","name":"node135","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","private_key":"91af9b7387bad90d696b549270c0302fbe3805efb01f311e801b317217b92cca","name":"node136","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","private_key":"af83c717380c5132acd3357ec3e29daaacfc4e4a65fd1f5b14479b78e5fb01f6","name":"node137","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","private_key":"2645348387e283c7f69d634a71ee38a65d4fc6928ecc383fb25cea4525fcdad9","name":"node138","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","private_key":"bc25724231b7bb54d17219feff13e1fe8e0486cace91c0cc6f3731a986f4a8ae","name":"node139","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","private_key":"1b90feec9d475fc13f1394c4b39d837fbd09f4c329ef5747d988b17b84967ccc","name":"node140","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","private_key":"392b881dddc671e72fc89ef71b340f19840650943cae22682d6cb6f97570c1ac","name":"node141","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","private_key":"f6541fa1eb8508dbcfde0259a988d0564c192cd25b2051e1299c32cad9ceb149","name":"node142","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","private_key":"59014852ab4f95ef336b10bb7c05d22e54eb0ea453d0f1c56638852ffac3aab0","name":"node143","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","private_key":"45d467a8320183e6e9f9fb0219c71ee08f43352c83c0b2d84da4ae4241b0173c","name":"node144","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","private_key":"3c564ae34741afc14a8ea217a734d5a8bc6d8dfcce3f4943acff14036edbf1c0","name":"node145","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","private_key":"43f552096880ddd297dd590b83f738fa13826e6120ec3d6311ac565b78a252c7","name":"node146","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","private_key":"177c7e7e8e870ff8b4b606ee3bc6f94d6fa57fd6deabefdabb250776939ef9f9","name":"node147","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","private_key":"26c019de3883a787fafed3839e768c71553ec8fe6cf607725f0e2acc80711cee","name":"node148","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","private_key":"943fd9910b9fa6cdb47ec68ec64b2faecd9a56de487fba1b7773a6dd54f94664","name":"node149","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","private_key":"f75e19af5d5e340e6a07d85042608f0500511042eb2e1ccbae8fe8569b9cbc8c","name":"node150","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","private_key":"e400c8293b9474c5aa84b48e37e1f435a53c910af98fd4e1b23ff9bd670bb51f","name":"node151","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","private_key":"f5a6a565c7c14cba96a75712373743d09ba804a9b8332a667492617dd5211abb","name":"node152","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","private_key":"4f592401cb57bcdc263bb96492ca66258130460b5fcb1a1cfafdedef3cee99f7","name":"node153","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","private_key":"97486d2d37010143a830ed6a0be6528a5611fc42962ae80e44a12c9b3399502c","name":"node154","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","private_key":"d93efde40fe67c2f412577aefbc6af1e876bde81b53c22ef6da4a5a23c8c13ad","name":"node155","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","private_key":"eaab112f5381b5b84ac9920fede88f2e04b725398e37a0b1b003442c281e32a1","name":"node156","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","private_key":"f79356978056456eb8f10bcf3c06b107a4afb4d5a8c2fc9380011a7420d59c81","name":"node157","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","private_key":"f0c66841f0adf1a9af04982fcce0c38c5012595de449dd0a8ea97ba06d5e43e9","name":"node158","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","private_key":"cc124633e255f1c6ba0beb16fb978958ed79be0e0f6ebd7968ef82b6d439fcda","name":"node159","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","private_key":"223b2c119cccb5059319a4a0305aec9c1bace6e731215f699cbd4d9a056ec777","name":"node160","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","private_key":"158d4468a6b4e7413f8b1d4112ef2b2c562e6dd26101b022ece2fa57801e6b03","name":"node161","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","private_key":"9b9249eb2418f61bc1e6a582b28e46c0d25eecf549e98414e2ca5ab1d3f5b1f7","name":"node162","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","private_key":"92f63cfcb2341c43aee585f9b965979e49d307de204dcc09b8e869f4e67640b4","name":"node163","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","private_key":"81e7d25a3c5700b592d3ea4cd85440f914f919e65f0a6e55c99ba619a519c70a","name":"node164","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","private_key":"09ab58931e7729bf23cdcb2772b3869d1aacece96070df5790f8343b70ef5e3b","name":"node165","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","private_key":"c330a5f7858f47d6653c52c88207fd10c6c87d8e77c87b9be95165f094918210","name":"node166","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","private_key":"7bbb910a655225eccc1fa6ab5abd3696725591448d5b628656692c1170f1f095","name":"node167","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","private_key":"9a0adb03a36d31dc716a280bc0b0ccdb5a891c5242f507aed5f6c370ea6bca05","name":"node168","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","private_key":"c9271845738bb80612a262956270b72e5152311e2e80fe21b3c7238f394911a7","name":"node169","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","private_key":"1710672c4d27d5363877ec9be4202445a3404d3e16ff221611f0c2d82c34af1c","name":"node170","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","private_key":"fe3ddcd5732357d3e602b35b79a21afd716fadbe7b569e44eb014dd4b944ad49","name":"node171","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","private_key":"85d961e31726c6d75913c901b5db7e115dd67338d9d89584e0c73df8f673a01c","name":"node172","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","private_key":"ded7d4f338d0e906b79482b6a79c0a2224820bac1893e3ee083a66eaaebea363","name":"node173","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","private_key":"f2b75f511327f380d86989fed2d67129f32bb0aeafb3aba0250c8e9e5b581d16","name":"node174","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","private_key":"a9bc40abaa967e683f994c9d053b90fa4daa9602fc810cd974a8f6a3629dbd28","name":"node175","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","private_key":"fa312311679e17f36872e8c75b78bd3b730d7423c613f5d7cbcaf653d847419e","name":"node176","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","private_key":"3532d20f2d6b03b910ef2d4dc968b71d89bd0fa3c9a758fd355ec3f8c9b6b62b","name":"node177","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","private_key":"d491504fcc40f961febbbf2089616ac2a2b7cc79e5dc9c01b632ab9d226bca86","name":"node178","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","private_key":"9653af0c5c528f1079ce38ba8e44273a7eed8efe91036d0219e08121fc62ca06","name":"node179","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","private_key":"09d927a912f0daefdca0fdb594feea4e25c384ac07efb663ea46ba893d0f32f9","name":"node180","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","private_key":"b5c4da646e3485b765e530ff19f36c4753764dda9d4aa308fb8d5c3d52d9b04f","name":"node181","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","private_key":"cf80dfc2e5888e69aa7c570430d76fb7a11991c8f8bd4c8dec3e2303085624ad","name":"node182","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","private_key":"33a68fc227f5f745114937915a4678fbcd985ff8c589698f241091a32fd901b2","name":"node183","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","private_key":"ff80b3d224dd48711a8b71840a9762289dbcac4d27cb6c24878fb4dd01b7c55f","name":"node184","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","private_key":"9b8f03ec5acc438bfb8ef1d604066899d9108b46efa0136298d820aad5752cf6","name":"node185","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","private_key":"b3496c97ca4de82c4133936c457c24ece46c36d35193ff6a5cd269701841cfd4","name":"node186","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","private_key":"65f6b15bed8bfb72144314f9aa2a7364bcb356e60cdb0212a7d04a3eb9e2d3af","name":"node187","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","private_key":"fe832e4f1c7485f3906f1807544431a825ca6ff8ea89d3d87a14aba92ba4d995","name":"node188","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","private_key":"50f4adfdd5287853b06a93a0214c09ee109edc00698de65c0c0523e10e7d828b","name":"node189","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","private_key":"e40b799e72dc611e2a8f64d5b8c7ca95535499887a0eb36f5f4f3690097e0ce0","name":"node190","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","private_key":"11535d8be8b31e5bf636e9671c7be140d596984e31eb44adeb0002976fa05b97","name":"node191","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","private_key":"9870e0dfa67e07bbfca9e8eb065c1085adc82bf75d9d75fab9909f3681b654ed","name":"node192","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","private_key":"01d68cdd16950c65e5781ece848e201a6ebbd5097f74dadfd7a5fb007bbcc11d","name":"node193","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","private_key":"7d7d75371a52b4d22411fc3dec135a945466d9fcce8615dbb959ebaf62bcebac","name":"node194","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","private_key":"cdcb88f25a626c1434db6d9ee8ae5934f466813535a8b9425572a888ade1bd98","name":"node195","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","private_key":"70186f9ea20bd1f26270c4a3cc72d7fd6997f6ff1e81fa580ac396cfb8a53d96","name":"node196","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","private_key":"23e586de5f3e3d888e4b5afccbc7bbe9bc569233c4133cf8b4b6a6f722bcbcf4","name":"node197","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","private_key":"fa2860804ef40cd74e911bae08fd20f7fef5ee4d34f163dd456f566b899f18fd","name":"node198","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","private_key":"1552e3359f865f955336c9e44aa94278481ebc3fba1bbac62a7e6c95d3348d6b","name":"node199","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","private_key":"da57c89729140a0f359ddf902197cddcb6b13a00c226d1a8a0975bda02f3a495","name":"node200","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","private_key":"a71ad1e471863026826e723cb60ef8221c29ef9c115f59ec22dccfdbf13724cb","name":"node201","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","private_key":"66b7f7a02087e6dda466b0fb6d05311ce95e179b4baf6cb7dd1fc1052f066367","name":"node202","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","private_key":"f4efac8f64908b896f893bb4b4113b00734dfcbf9aa87245f1aa8e9f65b644ce","name":"node203","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","private_key":"f15da5ee626bdec9e7b303afaff488d87aff1815668f878ea6b1f270c6300ec2","name":"node204","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","private_key":"ec037812b58da37d27db08df00018a39dc06d096116acf7f56921452cf7cfc0b","name":"node205","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","private_key":"9a037c145472a92a10b90fce8fe35501e93af7b73b026641d66a53ccfd3930dd","name":"node206","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","private_key":"14480f714ca25c522c067b4bce766945c9c2e8d0b697eacf9ff286fb0c26dac9","name":"node207","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","private_key":"c756a2bbb4c7b536c169fea0b09c7834ce6ce6f687c4968e598b72606163b8f3","name":"node208","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","private_key":"a837afe73ba3598ea681339261b12f5b9f02f1ce5243d6f7d18c735562b5a485","name":"node209","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","private_key":"6dab6d6b30b7515d850f1f4e7d6fffc75064eafafd86b8754a4000153113b1de","name":"node210","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","private_key":"431d8e4e06f15988a4ea9b3c077ca2b2bfc5b8b04135fea5ad7dee050940422b","name":"node211","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","private_key":"adf12e35cb550ed5a52fb5fa25fe7a6298e71b77a2dae474ebefbf2f9b8aac69","name":"node212","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","private_key":"7a94e705247608b3fe77122138a93f8477964e4a1a5d068091ff655f6ff0acd9","name":"node213","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","private_key":"c121bd7298c0130e294b88e6bb3b99fa0db790e9760b605448356e1fd89a3e5b","name":"node214","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","private_key":"562bd811ced052733cf87caf5888571e4482ae46e14ae1585debfb6b10298249","name":"node215","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","private_key":"8ebd5353e11b993fd7941ca1a936fc21799344607325c2879687b5e90adee6db","name":"node216","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","private_key":"8234acebca52619acf23d978bbc19bf2d8cbbc933bc7e18c7903d4b047471348","name":"node217","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","private_key":"1a4a47a0b83da4f2ccd94ee24a3657f777cc93c6a58b8ec0145586ba2c161429","name":"node218","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","private_key":"5b5aede47f05e99b807a7451cec469c1f77786d45d9f55b5a797b82d76db93af","name":"node219","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","private_key":"96ada7ff2fc583b6dd41941edfff92a81778c698d3b1f9fbf4130c2f7cbbec84","name":"node220","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","private_key":"1616cc42cae550c0104204c1c7f6ed0b3f65da627bd834a2d1239d70cc5b1e77","name":"node221","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","private_key":"1d029cbabb2eaef44889598c8fa2297996a69661d29c14035424dce781deb15e","name":"node222","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","private_key":"83c0403796648d484818f74b9de3c755c56b24f69e3394e062dd55a9d7cecbc3","name":"node223","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","private_key":"3f64513ae7746b16fa9ef3978d1bdf3c87ab4842c75aa3b946385dcdb23a3430","name":"node224","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","private_key":"a9db544f2fa00dc2d658a531934db6efeec93208b76d5b6859e6f0c4abac116d","name":"node225","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","private_key":"d53b2fef355d63448b93647458df0ba5b73bc42492d376377401a568eeb4d81f","name":"node226","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","private_key":"a04acf8d5198d0e7da1a6e9228c8ac6a74542a8d91906d5e83f1db219ae25350","name":"node227","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","private_key":"d5ad27697670f66cacf3e0ffb4473ab4912ed96fba311ddc8af12ad7663adeda","name":"node228","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","private_key":"dd217caf701902c94b57e1eeccbeaeddc4a7837b56d82ae2f034935d2828d222","name":"node229","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","private_key":"69b9f99ba6c47542a17c63be200102194fe3ab24084ea1e684033e68d580b5af","name":"node230","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","private_key":"ead9e2c8c0b3993304cb0a4a0dcb3ebe7c4331a87fee7c70194a3b3690413f43","name":"node231","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","private_key":"96cf35a39c0753abb6cc71c2a23e92fc936169a0600e936611216fd8ec31e310","name":"node232","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","private_key":"12ecde7517662f6d425f22ce7ecde84688ab9ed7fd443de2f309f095857faca9","name":"node233","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","private_key":"bc558cb24210cea0443678c5a9a412b3512b5b965b14df80818039b6fe28fe06","name":"node234","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","private_key":"1f2ab03e6921c321f5f783a3105d69bb69a4c031d50195fb94324c3280d52310","name":"node235","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","private_key":"8f1333ea7bd671c671ba94c4c7c59d6b0687a5c475b21712c6a49600e71f78b5","name":"node236","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","private_key":"e7fceaf57233e8a351a5a97e433d38131867965c883d53430f8f635f0563a168","name":"node237","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","private_key":"c5c6440cb8356bd270d8ce8d543b85c784f5c049b80e951c26fbcc92cfd1669e","name":"node238","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","private_key":"64939e66b20f857b3b5c94f6e5f72f15ae524ce46058ebf20c98e796bcc608c8","name":"node239","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","private_key":"9fa335b0c4f3fed78cb6aa4c0137589fe77d15b2127788adbca0633ef881b61c","name":"node240","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","private_key":"a36da338278d776a57dad648f8c5627834918fcaa86367e4aeaccefbb4142c1c","name":"node241","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","private_key":"dfbcc9238ce614f0a4711f04948064ddbd5b2997a19f1e62c8f9636e9961fd5d","name":"node242","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","private_key":"ea0d5ec78fdcca32a257905b595a0c7bc8f2934d088b0f4c695a76927fa9e791","name":"node243","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","private_key":"01bbc4df92bfd5efca325ff653fcab3ac6aca83696f57927d3313fdf03dadafb","name":"node244","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","private_key":"2e16fcbc5651872d962bf9cbbd32cccbef2adac9e86006e4b4e9abbe6c22d7cc","name":"node245","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","private_key":"a26a19f61e9c2c83a632e779651442713ae7026ff3889b0c2ba690ad206500cf","name":"node246","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","private_key":"fd1c4ea6d2c07317eeaebbcd485aaf9267d81f2dc547b2136eba8ed02ae2c635","name":"node247","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","private_key":"a655a637ca80f8c5354e51e46d31d79b36a8a8b44d50e2838a118ea8b33512ee","name":"node248","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","private_key":"02d1f6c1a867e9dd9cf7bff6121f3eb99e7c75866f8fb00d83782e69de6dacc5","name":"node249","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","private_key":"e0f98f6ae876455342403d6cd7ee64b21f5e5d691ed720d81e0db64529d8cd19","name":"node250","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","private_key":"53adafcbccccca52e7bbf9524234d7c6c5874e3a328d3ded48c93c7b07f34428","name":"node251","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","private_key":"b91ef086d245c3849c46234765c2d479c053b5974568062618a768ebb7014b64","name":"node252","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","private_key":"438a2cd1d35d995ba9e35fe1b4086196934e0a6087ca2ae18543512299224b1e","name":"node253","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","private_key":"1945283cb814bb48cbb80a03a2660606e5c5e023e3b8ac887baf7cc912ec5be7","name":"node254","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","private_key":"be6f375f22929e615c683dc9b07e4e2c609a06e07a849a718617c2a0c2ad49f6","name":"node255","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","private_key":"9775c9bb0b01e8a605866b96d386a1f8c3dbba2605cb9f8089c4f85fecfb6c62","name":"node256","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":false},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":false},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":false},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":false},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":false},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":false},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":false},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":false},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":false},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":false},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":false},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":false},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":false},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","name":"node_e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","enode":"enode://665ca8f57d847b22e62b829c7ca8327fc4a01497fbf18ce0214f19a4b405f2fd118bdc8d27a509942be90c4afff8774dc02810508099969cc215322120c6722b@127.0.0.1:0","enr":"0xf88fb840b69f6ddfa1a4af418eeffe8589e24339f2fdbd6bf67d70b7cae0a2096864dfc82dccb22867e1d5a9145d71caadcefde60e887c16a42164c3db6b4770bcff210b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103665ca8f57d847b22e62b829c7ca8327fc4a01497fbf18ce0214f19a4b405f2fd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5oEkSHKLS9pZYq3OsXB7KfZh09GmsszV+Bg8mh9NAbY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e68124\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 48b8 741a 26ab 08bd | 126 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n001 7 81a5 8402 9464 9257 | 75 b8e1 (0) bbaf (0) ba91 (0) be68 (0)\n002 5 da36 d3e9 cc33 c603 | 27 d408 (0) d700 (0) d209 (0) d302 (0)\n003 4 f6c0 f1ed f215 ff75 | 14 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n004 4 eff2 ef99 e867 eb68 | 7 ed42 (0) ec90 (0) eebd (0) ef99 (0)\n005 4 e0a0 e09f e2d3 e277 | 4 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n============ DEPTH: 6 ==========================================\n006 1 e471 | 1 e471 (0)\n007 0 | 0\n008 1 e64d | 1 e64d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","private_key":"c62579f0a0c6aaaaa7a8aa18a22d928d27a2d496e9588ec36573b5f174136358","name":"node_e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","services":["bzz","pss"],"enable_msg_events":true,"port":33261},"up":true}},{"node":{"info":{"id":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","name":"node_14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","enode":"enode://1c9940e663ec6a7e9bf3e8add2faed3ad8f989ef1529cafb7f37c82a208f43d00f4ba05c1ea62caf472acb15c91b3587c96849c286efd4f173f438ea2b45d32a@127.0.0.1:0","enr":"0xf88fb840410f25aaf4a49487580fbd3c098fb137c2cbccf0c65806bf66715f0af1be0a5f5f5b20d60466ba1fb85cb219d6f9f1a7b216cfe6486aa9c00152e38dc2d1e66b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021c9940e663ec6a7e9bf3e8add2faed3ad8f989ef1529cafb7f37c82a208f43d0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FISfgRryDOGfspQX0gwV/BbaHkWuvfeVosbMtnHkvaw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 14849f\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9257 eb68 e681 | 130 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n001 3 44ad 4005 741a | 61 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n002 4 2c85 3a62 3728 36b9 | 28 3f31 (0) 3cab (0) 3c5b (0) 3980 (0)\n003 7 0e3b 08bd 08e5 08f8 | 21 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n004 6 194e 18e0 1add 1dec | 9 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n005 3 1049 1070 138d | 3 1049 (0) 1070 (0) 138d (0)\n============ DEPTH: 6 ==========================================\n006 2 1686 1784 | 2 1686 (0) 1784 (0)\n007 0 | 0\n008 1 140d | 1 140d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","private_key":"0ce521739058eb06cff2ff0e748a604866b37fa96e7a559c5bf7cabf4161382e","name":"node_14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","services":["bzz","pss"],"enable_msg_events":true,"port":34017},"up":true}},{"node":{"info":{"id":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","name":"node_eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","enode":"enode://0057d96aee5b09baeb627555fe6299fdc637bd55f9be2ddfc59faa67cb940257578d1df147fa29d0539d8eec0fc0d2786aa7530aa346ceae8ee6f8e72d1fb052@127.0.0.1:0","enr":"0xf88fb8405bf3c589a9657ead2e83ff8f2cc355982f3f594e94903e9e6ac19daf8a03e1b84a3d1c607e264646ac31a086ef73bfee66a4f95df458b208a93f2a5441a7607d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020057d96aee5b09baeb627555fe6299fdc637bd55f9be2ddfc59faa67cb940257","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"62hqaG/XDkFlnMaewNtT0VEt/sI4kYr9ClFdjOF31Nk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eb686a\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 48b8 741a 26ab 012b | 126 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n001 7 a616 a970 8402 8074 | 75 b8e1 (0) bbaf (0) ba91 (0) be68 (0)\n002 5 cc33 c603 c2d0 da36 | 27 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n003 3 ff75 f1ed f215 | 14 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n004 5 e09f e2d3 e277 e471 | 7 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n============ DEPTH: 5 ==========================================\n005 5 ec90 ed42 eebd ef99 | 5 ec90 (0) ed42 (0) eebd (0) ef99 (0)\n006 1 e867 | 1 e867 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","private_key":"37e0f62adb81157cd9de3310d81d70da17cb3a0502320958b7c6d9ca1038d8f6","name":"node_eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","services":["bzz","pss"],"enable_msg_events":true,"port":36177},"up":true}},{"node":{"info":{"id":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","name":"node_9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","enode":"enode://5684177873a4d0e494fceca55b1a36e1a8a19025e03e483ae89cee9173b38082137fbfceb506946ae900a3cbc47697c7ba3c5bd553225e0e76ff5ce7657a7bdb@127.0.0.1:0","enr":"0xf88fb840e67f1444113ce4de2d80f4652cda49192b5c1dee37c8fb129cc60b1e655af7c60190c9a804b2498da20b36cf8aa01e2c492357464bf092615a60192953e13c6f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035684177873a4d0e494fceca55b1a36e1a8a19025e03e483ae89cee9173b38082","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lGStjaGl7/3ANRdC3/+ulB/9n6tGljeySRyuzlPFfcg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9464ad\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 741a 4a95 4b79 012b | 126 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n001 7 c603 d959 da36 d3e9 | 55 d408 (0) d700 (0) d209 (0) d302 (0)\n002 5 bdc5 bcf8 ba91 a8b5 | 37 b8e1 (0) bbaf (0) ba91 (0) be68 (0)\n003 6 8ea2 8b43 8358 80d7 | 21 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n004 3 9c8e 9f7d 9ec8 | 9 9b8e (0) 9959 (0) 9948 (0) 9f0e (0)\n005 2 93c0 9257 | 3 93ea (0) 93c0 (0) 9257 (0)\n006 1 97da | 1 97da (0)\n============ DEPTH: 7 ==========================================\n007 3 95c0 955d 9518 | 3 95c0 (0) 955d (0) 9518 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","private_key":"a5dc0083f0aaf88eee5eaf79c81465d05f0ba64c386da9145ba4a4a3f5c8d143","name":"node_9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","services":["bzz","pss"],"enable_msg_events":true,"port":40977},"up":true}},{"node":{"info":{"id":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","name":"node_9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","enode":"enode://0376a4d936b21276f20e6c33483aeaefb1d89d83a01af38405c081fd675c7c8b1d93cd7eb661bee8fb060ef4f98f6b75eeffe191df26a19f18c2f08c94471f6e@127.0.0.1:0","enr":"0xf88fb840a3a1a51f7bff86552a58bbd5dda6348d6aa82a599d96adbfbf9f19e93e0eace7305ea1d01a495196a928bb866ae512f0244f06e2abaa0dfc679bee3fadec82e10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020376a4d936b21276f20e6c33483aeaefb1d89d83a01af38405c081fd675c7c8b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"klfck0378XRztwy4UzPG+rZ+6bYiimRldsT1clPxAE4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9257dc\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 1784 1484 08bd | 126 5987 (0) 5814 (0) 5bd8 (0) 5a8b (0)\n001 2 e681 eb68 | 55 d408 (0) d700 (0) d209 (0) d302 (0)\n002 5 b3f9 bdc5 a0c8 a616 | 37 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n003 8 8ea2 8862 8b43 8358 | 21 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n004 2 9c8e 9c21 | 9 9959 (0) 9948 (0) 9b8e (0) 9f0e (0)\n005 5 97da 95c0 955d 9518 | 5 97da (0) 95c0 (0) 955d (0) 9518 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 93ea 93c0 | 2 93ea (0) 93c0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","private_key":"c15e326cf8ee6333e5811786737f8322f412341ae09e5ae9917860bd26ca1947","name":"node_9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","services":["bzz","pss"],"enable_msg_events":true,"port":37221},"up":true}},{"node":{"info":{"id":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","name":"node_08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","enode":"enode://ee9d7c5a65b07eb7d05d2621c99bd374c33ea4438206d3f07d2a6dcfe9adfafeebc06b85d8dfa9ab05c74b2c0295ffb280931ca84b185dbb6ed924fd6be61f9a@127.0.0.1:0","enr":"0xf88fb84032fc3b696637e089700dfa3a41ddefe8e8a6a55db4660a332527484de910804419abdb982ab9fb545f5ee12c11f033e48e66220126f229aedcbb54c3a789b6d60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ee9d7c5a65b07eb7d05d2621c99bd374c33ea4438206d3f07d2a6dcfe9adfafe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CL0eBJhZtKfIB4ypdB/j2qZouf5HjaBtGkNc1VZrPhE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 08bd1e\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 e681 9464 9257 | 130 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n001 2 4b79 741a | 61 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n002 6 26ab 2c85 2a50 30fe | 28 298a (0) 2a50 (0) 2fd2 (0) 2e65 (0)\n003 4 1fd0 138d 1784 1484 | 16 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n004 4 0314 035f 0111 012b | 10 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n005 3 0d1c 0cfc 0e3b | 5 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 0942 096a 09b3 | 3 0942 (0) 096a (0) 09b3 (0)\n008 0 | 0\n009 2 08e5 08f8 | 2 08e5 (0) 08f8 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","private_key":"eeb1d4b4ded34ed420c6f517fa508883a73d457008f055da9edb7156e78474c2","name":"node_08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","services":["bzz","pss"],"enable_msg_events":true,"port":38971},"up":true}},{"node":{"info":{"id":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","name":"node_012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","enode":"enode://54002fd97799e33da3d495d928026863bbec17ed7e7d6ea78725e5259435c2740cb37de72cb4c58f07e09869598312f477b7eccb62b46fb181ba49cffd1bc315@127.0.0.1:0","enr":"0xf88fb840c5a8e2adab6eef8cfcdbd07f1a0fa37ae261091b64e83e95a4e7436cd1c39015121dc7fe55ccbd229c0de2f7ceab2ab9b1c6f500bac9380f6d792dcbf80c555d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10354002fd97799e33da3d495d928026863bbec17ed7e7d6ea78725e5259435c274","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ASuieNWCaRJBh1xMFOrZH/85g+GQ332bQ63jhOhMEfs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 012ba2\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 eb68 9464 8402 | 130 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n001 4 44ad 4b79 741a 7660 | 61 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n002 5 2c85 26ab 30fe 3728 | 28 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n003 4 1fd0 1dc0 1784 1484 | 16 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n004 5 0e3b 09b3 08e5 08f8 | 11 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n005 4 07f5 046c 0594 0561 | 4 046c (0) 0594 (0) 0561 (0) 07f5 (0)\n006 3 035f 0314 025d | 3 0314 (0) 035f (0) 025d (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 0191 | 1 0191 (0)\n009 0 | 0\n010 1 0111 | 1 0111 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","private_key":"8c41148ea8aab694bf31dcfd89a8271ecfb228b4917b2e2d119d11e64ffe2eed","name":"node_012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","services":["bzz","pss"],"enable_msg_events":true,"port":33063},"up":true}},{"node":{"info":{"id":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","name":"node_025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","enode":"enode://789950b2dbebd332a0eef5b3bd998c4a7cb7b2b5bfd38dac2836a078eb6322d32967e68fcc10ab9841df4de5e02ffa4dae77e7ec75235fdfb542285073464c68@127.0.0.1:0","enr":"0xf88fb840bde2b58110c1cdfcae19192e9dc65d42bad215e4fa6ede43f8c3bfc2fc4fcf0e356406d032ece99c466696adf702d2436aa2abf92b0f598d3282aa2974487cb60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102789950b2dbebd332a0eef5b3bd998c4a7cb7b2b5bfd38dac2836a078eb6322d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Al3h0uxSnTp9owLu8PjFSZZhbUDJQMCVbUcP/CoAfzM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 025de1\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 eb68 8402 | 130 d408 (0) d700 (0) d209 (0) d302 (0)\n001 3 741a 48f1 4a95 | 61 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n002 6 30fe 3728 36b9 26ab | 28 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n003 4 1fd0 1dc0 1784 1484 | 16 194e (0) 19ea (0) 18e0 (0) 1b1d (0)\n004 4 0d1c 0e3b 0942 08f8 | 11 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n005 4 07f5 046c 0561 0594 | 4 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n006 3 0191 0111 012b | 3 0191 (0) 0111 (0) 012b (0)\n============ DEPTH: 7 ==========================================\n007 2 0314 035f | 2 0314 (0) 035f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","private_key":"89eff5a9452d1e0c16a61c6b956e8ba73cc6af297693643037294f04f933c9b4","name":"node_025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","services":["bzz","pss"],"enable_msg_events":true,"port":40297},"up":true}},{"node":{"info":{"id":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","name":"node_8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","enode":"enode://5adb68b61a7c2016141b6a2c5f6f62fb6bbaf0055b55208fe1d40c13de6c0f33882fe2c62b81ac1be1dfa20077589c4a2035252280a7fc51de6b283f2402cfbf@127.0.0.1:0","enr":"0xf88fb840c0f93ae82bca086787974a9909d7cb74ab3af63f5282df001769504d385c646d1a08448f09cd3b12b8434eacfb1d951d6d50470fa0c545eac3abc11690ef8bd80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035adb68b61a7c2016141b6a2c5f6f62fb6bbaf0055b55208fe1d40c13de6c0f33","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hAK9YigoEe0jay+h8NQa1LvlTkIO40rcYWTP1Lr4ZY0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8402bd\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4b79 741a 012b 025d | 126 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n001 5 c603 da36 ff75 eb68 | 55 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n002 2 aaf0 a970 | 37 b8e1 (0) bbaf (0) ba91 (0) bea1 (0)\n003 4 9c8e 9518 9464 9257 | 17 9b8e (0) 9948 (0) 9959 (0) 9f0e (0)\n004 5 8cc3 8ea2 8e7b 8b43 | 9 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n005 7 837f 834f 8358 80d7 | 8 837f (0) 834f (0) 8358 (0) 81a5 (0)\n============ DEPTH: 6 ==========================================\n006 2 87a3 86d6 | 2 87a3 (0) 86d6 (0)\n007 0 | 0\n008 1 84a9 | 1 84a9 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","private_key":"0a9e0691c50298a2bc085029a26783b783f3b1d81068d25096da660201582e65","name":"node_8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","services":["bzz","pss"],"enable_msg_events":true,"port":41495},"up":true}},{"node":{"info":{"id":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","name":"node_741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","enode":"enode://b7159c8574bad546d319bf27fe0b85a491ad9e0df9b3974553552f5dcae8ac16db1bdb41f7115872a65027698b5ba532c39b6955a5e8091d9a2158e594a75f69@127.0.0.1:0","enr":"0xf88fb8409311b5e1b31fdf6f1ec55524169f3ce36a87b92068a58be80cba7c7f8bb4e0ee07c122fc032f110c6cf8c75a2855a020d34a069f2acd2066f7b5e4da4ef8b6c80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b7159c8574bad546d319bf27fe0b85a491ad9e0df9b3974553552f5dcae8ac16","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dBqFSuKZ30mnOHJbxYq+YU5eQwL/7NgyC77ehBLRYMA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 741a85\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e681 eb68 9464 8402 | 130 d700 (0) d408 (0) d302 (0) d3e9 (0)\n001 9 2c85 26ab 1fd0 1784 | 65 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n002 7 5a26 5c7c 46bf 4005 | 35 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n003 6 6c01 6d5e 648a 67f3 | 13 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n004 6 7850 7933 7e47 7c46 | 9 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n============ DEPTH: 5 ==========================================\n005 2 7049 70f6 | 2 7049 (0) 70f6 (0)\n006 1 7660 | 1 7660 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","private_key":"d86ec48bb09bc70772b1ac1e6c492b9675a44a28adc64095a3be584ce92f8fdc","name":"node_741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","services":["bzz","pss"],"enable_msg_events":true,"port":36283},"up":true}},{"node":{"info":{"id":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","name":"node_4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","enode":"enode://94db8d2b348f151986140b50ea45c8f5983f78caf7ba871b2aeb20a7aefb5e6566c5628c702e8979281130632ade26f0222060bc53728c0c0ddf7137947c5229@127.0.0.1:0","enr":"0xf88fb840558b22c25fa4ad6f7b89ee4a1a18c379bfc0bc76aac0da6365611dff788030f334f0feae2e90705123442b2419a399ad4d6f5f57c8f5f6e781272904113539c60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10394db8d2b348f151986140b50ea45c8f5983f78caf7ba871b2aeb20a7aefb5e65","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SpXUn1gFewObVaNPZ6NIwFL2F3AGXkEkP/BV78VwqTU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4a95d4\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 da36 ba91 9464 | 130 d408 (0) d700 (0) d209 (0) d302 (0)\n001 5 26ab 2c85 2a50 298a | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 4 6c01 6790 648a 741a | 26 68cb (0) 6b4e (0) 6e7f (0) 6d3c (0)\n003 8 5144 50c1 5538 5c37 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 6 435d 4005 402c 46bf | 9 46bf (0) 447c (0) 447a (0) 44ad (0)\n005 2 4d91 4cec | 3 4d38 (0) 4d91 (0) 4cec (0)\n============ DEPTH: 6 ==========================================\n006 5 482e 48b8 48de 48d7 | 5 482e (0) 48b8 (0) 48de (0) 48d7 (0)\n007 1 4b79 | 1 4b79 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","private_key":"aa7a512548b186d6f17490300bba5369b634d9649b74c421af1d43d3f8cafec6","name":"node_4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","services":["bzz","pss"],"enable_msg_events":true,"port":43231},"up":true}},{"node":{"info":{"id":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","name":"node_4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","enode":"enode://7e2ea6ad36e886e7ef31de1d7d85a0a3d85618dea99621ee2bceacb048b10e9b26862e9fe9a918204e39cb7ed0b1c849b19345b1064cf890de27151a144ecdc0@127.0.0.1:0","enr":"0xf88fb8409159ad0c33b90bbed5e06a27c0189aecee7e3eeaf36cc509cf20318bfee1d84d525df4a5b228a2e4fccf906ba509a8318400ec3cfeaf76d800fade5a071b9f560183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027e2ea6ad36e886e7ef31de1d7d85a0a3d85618dea99621ee2bceacb048b10e9b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"S3noMYbyqwWTLqqZmCouUzc7g3gOMtIk0VyyyFRiRR8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4b79e8\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ba91 8402 9464 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 3 012b 08bd 08f8 | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 3 648a 741a 7660 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 5 5a26 5bd8 5c37 5c7c | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 5 435d 4005 46bf 447a | 9 46bf (0) 447c (0) 447a (0) 44ad (0)\n005 2 4cec 4d91 | 3 4cec (0) 4d38 (0) 4d91 (0)\n============ DEPTH: 6 ==========================================\n006 5 482e 48b8 48f1 48de | 5 482e (0) 48b8 (0) 48de (0) 48d7 (0)\n007 1 4a95 | 1 4a95 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","private_key":"e6dad134228b16f662707d719d2a5b4104da298ca8bdb6085d4d86557ff74820","name":"node_4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","services":["bzz","pss"],"enable_msg_events":true,"port":42249},"up":true}},{"node":{"info":{"id":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","name":"node_08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","enode":"enode://266b673803b457c94430107ebcaad9bbe27ca7b2d7f2f4a2795330eb1370ef17684e5f79a2b76a8e8b68388a0135357d0643a71451e4475030776a4662c17dd5@127.0.0.1:0","enr":"0xf88fb840f107f7f7c79de397fcaa167703a506621bf1b28b3a12767f3f3b156c7d64d64a4a4bd7e9ec8535b076496f0d44b8077b7597f9b75a20a611dba6ecc55ffe6f900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103266b673803b457c94430107ebcaad9bbe27ca7b2d7f2f4a2795330eb1370ef17","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CPhIeORP7SrbSyaFufKT3Dxz1fm8HEdIcNlD7CrnPb4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 08f848\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c42e c2d0 c8ea cdb1 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 5 7660 741a 4005 48f1 | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 5 26ab 2c85 3c5b 3728 | 28 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n003 5 1fd0 1dec 1dc0 1784 | 16 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n004 3 0111 012b 025d | 10 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n005 4 0d1c 0cfc 0e80 0e3b | 5 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 096a 0942 09b3 | 3 0942 (0) 096a (0) 09b3 (0)\n008 0 | 0\n009 1 08bd | 1 08bd (0)\n010 0 | 0\n011 1 08e5 | 1 08e5 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","private_key":"c9ea240d0ca10a37109b638b6ff80df72e80f58b0bdaab9117ece2449c7ded0f","name":"node_08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","services":["bzz","pss"],"enable_msg_events":true,"port":33617},"up":true}},{"node":{"info":{"id":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","name":"node_81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","enode":"enode://9c7ee34c91cca6a255a1d8adf1770f230ddc3b14a4fd7052094be159092b67122725fa2cbea906cf1014c841ef9be502872b8e7205e080a0861036ac05c947bc@127.0.0.1:0","enr":"0xf88fb84016f0ddeab6ab02fec27c0d81fe6b7c75926f73593cc76cfe70a797016f5de68257234757637d614c0e3afe0b4a62d76a0ea9e61189d9b6cc35df8210941da9800183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029c7ee34c91cca6a255a1d8adf1770f230ddc3b14a4fd7052094be159092b6712","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gaWgf5L4E+hbUBsAKOHKpuamx++lGV7LaTzS2R1RMqA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 81a5a0\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5a26 48f1 7660 08f8 | 126 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n001 3 da36 e681 ff75 | 55 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n002 3 aaf0 a0c8 b3f9 | 37 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n003 2 9c8e 9518 | 17 9b8e (0) 9959 (0) 9948 (0) 9f0e (0)\n004 5 8cc3 8e28 8e7b 8b43 | 9 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n005 4 87a3 86d6 84a9 8402 | 4 87a3 (0) 86d6 (0) 84a9 (0) 8402 (0)\n006 3 837f 834f 8358 | 3 837f (0) 834f (0) 8358 (0)\n============ DEPTH: 7 ==========================================\n007 4 80d7 8073 8074 8006 | 4 80d7 (0) 8006 (0) 8073 (0) 8074 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","private_key":"f268036ece7b4c34b20e291a59e9e6eb8c169846ed02ae120104c2a9db928aa8","name":"node_81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","services":["bzz","pss"],"enable_msg_events":true,"port":41021},"up":true}},{"node":{"info":{"id":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","name":"node_7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","enode":"enode://57d4fa9adc668bc6252f2871ae51f3507be8299126d91348d691d765826efd907e3086acd9c139e0d4f2ad542648e855aed9dd718e7b160ccff5e2d3eda8d109@127.0.0.1:0","enr":"0xf88fb840728d16ca2bed2ed57accf482d7d01246e23016bfb73bffb10c3b7b47db93f7b6528ae999d54cf0807af525b9c502e27200c19a8faaf1f69330d98b8488863ef10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10357d4fa9adc668bc6252f2871ae51f3507be8299126d91348d691d765826efd90","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dmCCj7DI+JIB005vTWHMa6mjDOrW5OuCU/bMkuGEXyM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 766082\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c603 da36 81a5 | 130 c8c8 (0) c8ea (0) c9c3 (0) c961 (0)\n001 5 2c85 3728 36b9 012b | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 10 5a26 5bd8 5663 5144 | 35 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n003 5 6c01 6d5e 6795 6790 | 13 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n004 6 7850 7e47 7d16 7c46 | 9 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n============ DEPTH: 5 ==========================================\n005 2 70f6 7049 | 2 70f6 (0) 7049 (0)\n006 1 741a | 1 741a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","private_key":"a661a84382c924fa6b8c1d349120fa836ebbeb7f53552df109787f65a9ea40b1","name":"node_7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","services":["bzz","pss"],"enable_msg_events":true,"port":33705},"up":true}},{"node":{"info":{"id":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","name":"node_48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","enode":"enode://bdc3539551669afb2e5251b20cd32b76991a299ed144c7cdf2df6a562307c9ccb061dc13c4a0428c279b481d48bdc454f8cf3c2d334d023820636940194a536a@127.0.0.1:0","enr":"0xf88fb840166e7488211c50622095d0c7a0a9b5798b716da7a2f18087617760eab6cbd432533b34999879c21ac95d597a2e7afdc751503e82f98018f4988dcfc2255bb7de0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bdc3539551669afb2e5251b20cd32b76991a299ed144c7cdf2df6a562307c9cc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SPHKbUMwGfky+krgPg3svL6j/mNe3/RFimabg/gWK5o=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48f1ca\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 da36 81a5 ba91 b3f9 | 130 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n001 2 025d 08f8 | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 6c01 6795 7660 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 7 5538 52a8 5144 5c37 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 5 402c 4005 447a 44ad | 9 46bf (0) 447c (0) 447a (0) 44ad (0)\n005 2 4cec 4d91 | 3 4cec (0) 4d38 (0) 4d91 (0)\n006 2 4b79 4a95 | 2 4a95 (0) 4b79 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 482e | 1 482e (0)\n009 1 48b8 | 1 48b8 (0)\n010 2 48d7 48de | 2 48de (0) 48d7 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","private_key":"93ccc60464556d17f764da4d4f9627036f03862e51eedf2272ff4ab6de460bca","name":"node_48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","services":["bzz","pss"],"enable_msg_events":true,"port":44895},"up":true}},{"node":{"info":{"id":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","name":"node_b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","enode":"enode://0fff61eaf24fc39fce31fcc08d7f4530cf34ea9b316c8552a2665bb588bc2b715ac681a15fec8f10bd07b5e7efba1b60dbceb2bda52c437fe7e10bef54e9385b@127.0.0.1:0","enr":"0xf88fb8408e0903553e420a153b07746b27efee96df98e493517320da509b578ea9a335ad7d7f75c1be85cc91b87448690b53259d60f1f1d962827db10e0c45302d5991460183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030fff61eaf24fc39fce31fcc08d7f4530cf34ea9b316c8552a2665bb588bc2b71","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"s/lfIl4ra3bmx+98hsr4PjUhP2oi2kHmU8ocGQviPJw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b3f95f\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 44ad 4005 48f1 | 126 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n001 5 ff75 e277 c2d0 c603 | 55 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n002 7 9c8e 9257 9518 8cc3 | 38 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n003 10 a330 a0c8 a5ac a505 | 23 a4ee (0) a5ac (0) a505 (0) a7a8 (0)\n004 8 bdc5 bcf8 bea1 be68 | 8 bcf8 (0) bdc5 (0) bea1 (0) be68 (0)\n============ DEPTH: 5 ==========================================\n005 5 b5ea b4a1 b6df b659 | 5 b4a1 (0) b5ea (0) b659 (0) b6df (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","private_key":"b88ec7f2f180fa33cf884de2d17cd8bb2fd54c0091c86a3485fa2253753391f4","name":"node_b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","services":["bzz","pss"],"enable_msg_events":true,"port":38851},"up":true}},{"node":{"info":{"id":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","name":"node_4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","enode":"enode://d59ebe745d21b2e3762354724988cc2e1922981561a7a1b59c692b63aab87866680e05dbd639fbc0e1edeea41158e6f0fc89f9858965ddfb88c4f7a837044694@127.0.0.1:0","enr":"0xf88fb8408bd7fa4d67c32ec7cede14876f0a7782e437190163434552f623d2b45f923ba14d0f771d61ec044c8ba306a6f70b9985dbb9ee95912d035959e20b757ce8a4e80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d59ebe745d21b2e3762354724988cc2e1922981561a7a1b59c692b63aab87866","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QAX9H6j7sxiymmLDaK2leeUSLKBXjmp1xQlVK+S2O3Y=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4005fd\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 da36 ff75 9518 ba91 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 4 2c85 1484 08f8 0e3b | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 4 6790 648a 741a 7660 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 6 5a26 5bd8 5c7c 5c37 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 5 4a95 4b79 48b8 48d7 | 10 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n005 4 46bf 447a 447c 44ad | 4 46bf (0) 447c (0) 447a (0) 44ad (0)\n============ DEPTH: 6 ==========================================\n006 3 43d4 43c9 435d | 3 43d4 (0) 43c9 (0) 435d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 402c | 1 402c (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","private_key":"a8676ecb5e3d5d9afec421fe21a57c5fc1d107a450dc67d5f5882520afa62a7c","name":"node_4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","services":["bzz","pss"],"enable_msg_events":true,"port":37241},"up":true}},{"node":{"info":{"id":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","name":"node_ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","enode":"enode://3d2e2c472696bba49a923f035e188a58a75779bfaf0028b65c790cc6a72fcb0522fd663a55e2e7d8e2983cb895d6808cb75263b2e36ab3e6da0795ca222c1eb7@127.0.0.1:0","enr":"0xf88fb840a320a767aa7097e0c7a488fcc471bd6d30e05b616b05a63af5bcc89118d574f21c903d1427e4802c1331a3a2dc43b52ecbed21f4b1bbc488d64a8f640550ba990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033d2e2c472696bba49a923f035e188a58a75779bfaf0028b65c790cc6a72fcb05","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/3WxkBfIQSjzjexPY+HyR6VpHcD64YbmZ6/ttf6dLIA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ff75b1\npopulation: 44 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2a50 26ab 0e3b 44ad | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 11 b3f9 a616 a0c8 ab71 | 75 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n002 12 c42e c6a8 c603 c74d | 27 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n003 7 e867 eb68 eff2 e277 | 14 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n004 4 f756 f1ed f305 f215 | 7 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n005 2 f9de f8ff | 3 fa24 (0) f9de (0) f8ff (0)\n============ DEPTH: 6 ==========================================\n006 2 fc51 fc39 | 2 fc51 (0) fc39 (0)\n007 1 feb3 | 1 feb3 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","private_key":"a98bd329cd3c7942c9f230208e49b4c880749a41fcd4ccf7561fab55c6c08641","name":"node_ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","services":["bzz","pss"],"enable_msg_events":true,"port":33251},"up":true}},{"node":{"info":{"id":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","name":"node_44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","enode":"enode://888d38ff57ed4518cedab3e8dd7e3c2974e8a18eb4105f019d5da60aeea595855f40a76650488189d7de83a61938b4546ae8f1bb85109783ec72c771e5689819@127.0.0.1:0","enr":"0xf88fb840e02be04b2b82d311eb77cd1c1af28fba50cdcceb3a24f4bdb29b0f6450344a6d5d8cb185e0ef49a9d8b194f7819fc6ad342d52f9cb50cfc49c284a7c78d351590183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103888d38ff57ed4518cedab3e8dd7e3c2974e8a18eb4105f019d5da60aeea59585","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RK2qv5xGYIo3TtgW08QMY7ZkX09uAzp2QxvI+IcT60E=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 44adaa\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ba91 b3f9 ff75 | 130 a4ee (0) a5ac (0) a505 (0) a7a8 (0)\n001 3 1484 012b 0e3b | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 6790 648a 7660 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 6 5a26 5bd8 5c37 5538 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 5 48b8 48d7 48f1 4a95 | 10 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n005 4 43d4 435d 402c 4005 | 5 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n006 1 46bf | 1 46bf (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 447c 447a | 2 447c (0) 447a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","private_key":"97d76c34244a41e0f1ac5de3b564727ac2f324b9ad5cfca455fe8b70c05abb39","name":"node_44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","services":["bzz","pss"],"enable_msg_events":true,"port":38577},"up":true}},{"node":{"info":{"id":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","name":"node_0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","enode":"enode://cdf4c78c9aa3593dd7a6467f48660ca11115fbe248d9cf9e1d57c19c890c1fc71aca0582ad7017bdc5053ce094c5905b7f77e2be5402f313786253842933cd16@127.0.0.1:0","enr":"0xf88fb840ee3d9598b270079ccc13e4add3d88bee1c6abf8d5e8431c4681a6ae45369d4b0668f324e4de0c56328849c15238ea899fc1710b328f6172fbf89dff1306ab2bf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cdf4c78c9aa3593dd7a6467f48660ca11115fbe248d9cf9e1d57c19c890c1fc7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Djt3IvP4TYOz10S+pOiTcVoB1N889KHGpoI6H1ya1rg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e3b77\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9518 ff75 da36 | 130 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n001 2 4005 44ad | 61 7895 (0) 7850 (0) 79e5 (0) 7933 (0)\n002 3 26ab 3728 36b9 | 28 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n003 7 1fd0 1dec 1add 18e0 | 16 194e (0) 19ea (0) 18e0 (0) 1b1d (0)\n004 5 0111 012b 0314 035f | 10 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n005 6 09b3 0942 096a 08bd | 6 0942 (0) 096a (0) 09b3 (0) 08bd (0)\n006 2 0cfc 0d1c | 2 0cfc (0) 0d1c (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 0e80 | 1 0e80 (0)\n009 0 | 0\n010 0 | 0\n011 1 0e2b | 1 0e2b (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","private_key":"4f28295b9dd454af1f4de9ea11d0d1a2952fc64eb6835cbc1c6c1a564d826654","name":"node_0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","services":["bzz","pss"],"enable_msg_events":true,"port":41795},"up":true}},{"node":{"info":{"id":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","name":"node_da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","enode":"enode://61c96923ec6ffd96df32f0db9954bf468bd5c4c24271a86b243cd934bc8da77f1177964c7a53fc07b86f5ef32a9e1c85af77bb56fd699a99f15caae4fbb38a68@127.0.0.1:0","enr":"0xf88fb8405a4f50ee12c7e45a28c023ae4e6c05ca7407d66aea05f2837e8718b934145bb30f026867c53e3fd3eb1c9ca2829a6fe691a3b5edacee2cdd0fcd600c5614255b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10261c96923ec6ffd96df32f0db9954bf468bd5c4c24271a86b243cd934bc8da77f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2jbR35WhWLDT+edAfWY6a2Ed3gp38ApYS5epOatqAN4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: da36d1\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 7660 48f1 4a95 4005 | 126 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n001 8 a0c8 acee aaf0 b3f9 | 75 b8e1 (0) bbaf (0) ba91 (0) bea1 (0)\n002 6 e681 e277 eb68 e867 | 28 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n003 9 c8ea cdb1 cc33 c2d0 | 16 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n004 3 d209 d302 d3e9 | 5 d700 (0) d408 (0) d3e9 (0) d302 (0)\n005 1 ddb8 | 1 ddb8 (0)\n006 2 d9cf d959 | 2 d9cf (0) d959 (0)\n============ DEPTH: 7 ==========================================\n007 1 dbd4 | 1 dbd4 (0)\n008 1 dad0 | 1 dad0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","private_key":"2022f7c1008e4670055ca434f78ed6debd0e7564d06d9d22625bafe9c2184bc8","name":"node_da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","services":["bzz","pss"],"enable_msg_events":true,"port":39225},"up":true}},{"node":{"info":{"id":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","name":"node_951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","enode":"enode://e61d35f746dd8b1d91286e1abb0448cbb68371b867574358604ed002233ecaebfcd5a07cbabc0bdca25a58c76fa53abd80a1bf7d62c410f2841611b676334041@127.0.0.1:0","enr":"0xf88fb840f8c031b80bf4308c84323e167eeca84179f0feebb5aad18f694024f8fde4f3424adbec09f917bc90d2d319b9debb6c903064655c754915614dc59b490178d75b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e61d35f746dd8b1d91286e1abb0448cbb68371b867574358604ed002233ecaeb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lRh3s07hU1tQWcSb6wPolg/5wStpTvZHCMd8MP8dxwY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 951877\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4005 0e3b 36b9 2c85 | 126 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n001 3 e867 ff75 da36 | 55 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n002 2 b3f9 ab71 | 37 be68 (0) bea1 (0) bfc7 (0) bcf8 (0)\n003 9 8862 8b43 8cc3 8e7b | 21 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n004 3 9ec8 9f7d 9c8e | 9 9948 (0) 9959 (0) 9b8e (0) 9f0e (0)\n005 3 93c0 93ea 9257 | 3 93ea (0) 93c0 (0) 9257 (0)\n006 1 97da | 1 97da (0)\n007 1 9464 | 1 9464 (0)\n============ DEPTH: 8 ==========================================\n008 1 95c0 | 1 95c0 (0)\n009 1 955d | 1 955d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","private_key":"bc5b57ce450e26704097f3e90b7256f3d38b4a75973b2384deec064351eee3f7","name":"node_951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","services":["bzz","pss"],"enable_msg_events":true,"port":39271},"up":true}},{"node":{"info":{"id":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","name":"node_ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","enode":"enode://ac1fef7e9d3c51f02d8ade00cb8763bb163c214f15f52ba8025bfb6355dca1d1a9779350f5c60d02763b12902f5b176366dec0e51eb4879d0031a407cb80ba6d@127.0.0.1:0","enr":"0xf88fb84047e8f17977626db088d3ce02b567c210e5ded10efc65966d542ffd2e829e25822186597f28307a91d4fde8fc4019ff71797412eb3a69a20aa8deb95f096b3c370183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ac1fef7e9d3c51f02d8ade00cb8763bb163c214f15f52ba8025bfb6355dca1d1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"q3GeYKd7pSU/FpDJIN+d2fOmIHHpzOnWLgABpSKzQJ4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ab719e\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 36b9 2c85 | 126 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n001 5 c603 e277 e681 e867 | 55 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n002 3 84a9 9c8e 9518 | 38 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n003 3 ba91 bdc5 b3f9 | 14 bea1 (0) be68 (0) bfc7 (0) bcf8 (0)\n004 3 a616 a330 a0c8 | 13 a4ee (0) a5ac (0) a505 (0) a742 (0)\n005 2 aeb4 acee | 3 acee (0) af02 (0) aeb4 (0)\n006 4 a970 a8f4 a8ff a8b5 | 4 a8f4 (0) a8ff (0) a8b5 (0) a970 (0)\n============ DEPTH: 7 ==========================================\n007 1 aaf0 | 1 aaf0 (0)\n008 0 | 0\n009 1 ab3f | 1 ab3f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","private_key":"a4ae96d7ecb3971ea097b37390920857ffaf67fc5bae59c8cabde67de15feeb1","name":"node_ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","services":["bzz","pss"],"enable_msg_events":true,"port":34781},"up":true}},{"node":{"info":{"id":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","name":"node_2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","enode":"enode://b1fe3894a67c4139a898d93a93cacc87e3e6a0072f2e75faa1d692fcdae02da9056ee9d0ef8bd7de2d4cb801bea1a4c92867b686648ccdf4acc15d10ea9e92ab@127.0.0.1:0","enr":"0xf88fb840acad001cebe20e5d67e33bade1ef67f0c02b361f95b012af873d06038de2c89e7a9bcb738bbf325462227e88eefa257d8d3e3fe6567496e9bd6bcf7a4315e7b70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b1fe3894a67c4139a898d93a93cacc87e3e6a0072f2e75faa1d692fcdae02da9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LIX1NhstWrz3md5Q/lix7SAG6hj3WCN0jDPrfpWxzDk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2c85f5\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c534 8e7b 9c8e 9518 | 130 e471 (0) e64d (0) e681 (0) e0a0 (0)\n001 7 741a 7660 6795 648a | 61 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n002 9 1484 1add 1fd0 1dec | 37 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n003 7 3c5b 3cab 3a62 3b02 | 17 3980 (0) 3938 (0) 397a (0) 3b02 (0)\n004 4 244c 24f8 26ac 26ab | 4 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n005 2 298a 2a50 | 2 298a (0) 2a50 (0)\n006 2 2fd2 2e65 | 2 2fd2 (0) 2e65 (0)\n============ DEPTH: 7 ==========================================\n007 1 2ddf | 1 2ddf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 2c80 | 1 2c80 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","private_key":"2a8ffc679012d1aa50e2f65a8e57b2ec4320e84272a5e905cb90098bace2bddb","name":"node_2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","services":["bzz","pss"],"enable_msg_events":true,"port":36571},"up":true}},{"node":{"info":{"id":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","name":"node_36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","enode":"enode://e4d9f33c795e51155d700cb64f1a8d4ead769a1d93d77825a6c680750ad444ef939dbfcecf0020bb04e1bb818d28af91aaa6809d9abb42ebd3088ff3c351ec3f@127.0.0.1:0","enr":"0xf88fb84053bd3c1b1a365ed2377b3066ad1f581f1d671a75bebdf3c21d41c6e15045a85771fe183fc7f77629dcf4d2be91de26315edfc83ccc82cb68b3e900fb1fd3a6330183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e4d9f33c795e51155d700cb64f1a8d4ead769a1d93d77825a6c680750ad444ef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Nrk2VsqwIhP6dhJK9iURCTVqvF4K5d0eIDxqAT4BRUg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 36b936\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9518 ab71 aaf0 | 130 f305 (0) f215 (0) f2b4 (0) f1ed (0)\n001 5 648a 7660 46bf 5a26 | 61 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n002 10 1fd0 138d 1784 1484 | 37 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n003 4 26ab 2a50 298a 2c85 | 11 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n004 7 3c5b 3cab 3f31 3938 | 8 3980 (0) 3938 (0) 397a (0) 3b02 (0)\n005 5 32ff 3051 30fe 31e1 | 6 32ff (0) 30fe (0) 3051 (0) 3188 (0)\n============ DEPTH: 6 ==========================================\n006 1 3411 | 1 3411 (0)\n007 1 3728 | 1 3728 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","private_key":"fc142c5cdb7737fcd9e994ef0aab4a60ef1b23c59685a99f70384ecdcab96da9","name":"node_36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","services":["bzz","pss"],"enable_msg_events":true,"port":34195},"up":true}},{"node":{"info":{"id":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","name":"node_aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","enode":"enode://7108119c77ee1ca51a8cfa49207c81c9236c48de66d0ec4441d03b409214e6cb3e6aeda9074eefc6cab261e2da67787c1e6dc5c56d9face762f3c6d228ddb3bf@127.0.0.1:0","enr":"0xf88fb840e1516801e5e9795f89e9742eb3c020e4aeab9eaa0544e8eaf742e91b186387817613a49d6e2bc5ca531ae9afe63aed360830056c25d161bee0ccf74ec289a82c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037108119c77ee1ca51a8cfa49207c81c9236c48de66d0ec4441d03b409214e6cb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qvBRoIepL4dKP2x5IwFeTP+0uz7zgcl3/ZAvIehB0PQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aaf051\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3728 36b9 | 126 7895 (0) 7850 (0) 79e5 (0) 7933 (0)\n001 5 ff75 e277 e867 da36 | 55 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n002 7 9c8e 8cc3 81a5 8006 | 38 87a3 (0) 86d6 (0) 84a9 (0) 8402 (0)\n003 3 bdc5 ba91 b3f9 | 14 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n004 3 a616 a330 a0c8 | 13 a4ee (0) a5ac (0) a505 (0) a742 (0)\n005 2 aeb4 acee | 3 acee (0) af02 (0) aeb4 (0)\n006 3 a8f4 a8b5 a970 | 4 a8ff (0) a8f4 (0) a8b5 (0) a970 (0)\n============ DEPTH: 7 ==========================================\n007 2 ab3f ab71 | 2 ab3f (0) ab71 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","private_key":"4faa6df719db312ce7196c8b218ffe31a118192b63af6a064b63993d06809021","name":"node_aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","services":["bzz","pss"],"enable_msg_events":true,"port":43443},"up":true}},{"node":{"info":{"id":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","name":"node_3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","enode":"enode://c114f0b7917ddfc94778644a8fcb80d6219c100706ef4f7685c3a1b20836923b2f8b668cb508c542e5140d0de8dbf3eb6d39dd3fa988cc89e5a35475d33c5ff5@127.0.0.1:0","enr":"0xf88fb8409f56eb9c402420e1ba9d1221c060d99fadee62aa892110c184c542ddc788cb872ee790ce149a666c38cbe359cba9f433a75a62641e1d1f785c7bf1f7e9c0ac220183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c114f0b7917ddfc94778644a8fcb80d6219c100706ef4f7685c3a1b20836923b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NygVLIjx5eYfZSOwno87sQI7cA3szcpfzB5kiBNrDlc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 372815\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9c8e aaf0 | 130 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n001 5 7660 648a 5bd8 5144 | 61 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n002 11 138d 1484 1784 1dc0 | 37 1049 (0) 1070 (0) 138d (0) 1686 (0)\n003 2 26ab 2c85 | 11 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n004 4 3c5b 3cab 3b02 3a62 | 8 3980 (0) 3938 (0) 397a (0) 3b02 (0)\n005 5 30fe 3051 3188 31e6 | 6 32ff (0) 30fe (0) 3051 (0) 3188 (0)\n============ DEPTH: 6 ==========================================\n006 1 3411 | 1 3411 (0)\n007 1 36b9 | 1 36b9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","private_key":"3557d9f64ffafd68249ae21654f5c1fd8576ede29a7e184fa2c80dcfcf01ca7d","name":"node_3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","services":["bzz","pss"],"enable_msg_events":true,"port":41719},"up":true}},{"node":{"info":{"id":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","name":"node_9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","enode":"enode://4c2931c91d607781aedf9552788ec9df705def28333007e9246811be0a3ebfa8eb44baad1ddf0620a99257cb0cf9afaf7f714cae4f241510bffdf3c4b6682350@127.0.0.1:0","enr":"0xf88fb840d76ae62f54de16a707c5789592f92afaa9c1ad444f8e7fa013c8f39c20a34d4f2c0d88f8931465fc033eb4be4b1c1f4fe8150dd91ba8297ce363ffa61f1d4d440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024c2931c91d607781aedf9552788ec9df705def28333007e9246811be0a3ebfa8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nI4fI/JgxaRrAAFXJnWxnlKTymXn/fwTHAdhLpxAcvo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9c8e1f\npopulation: 44 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 46bf 08e5 2c85 3728 | 126 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n001 3 ff75 e867 c603 | 55 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n002 9 b3f9 a616 a0c8 a330 | 37 b8e1 (0) bbaf (0) ba91 (0) bea1 (0)\n003 14 87a3 86d6 84a9 8402 | 21 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n004 7 9257 93c0 97da 9464 | 8 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n005 3 9b8e 9948 9959 | 3 9b8e (0) 9959 (0) 9948 (0)\n006 2 9f7d 9ec8 | 3 9f0e (0) 9f7d (0) 9ec8 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 9c21 | 1 9c21 (0)\n009 0 | 0\n010 1 9ca1 | 1 9ca1 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","private_key":"f14ad2c3fc9ee9c4bf7c847d746dbc352159a0f470e5f9c054c623e85b32dd58","name":"node_9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","services":["bzz","pss"],"enable_msg_events":true,"port":41867},"up":true}},{"node":{"info":{"id":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","name":"node_46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","enode":"enode://4d4243ce1bbd72776f1cd9a14309b16117af879a4d6670c2c684a772062c9ca6ce7591b97f0b28a854431891b0d2b0d4517991326bbaf7aba8056bb1eae0fd6b@127.0.0.1:0","enr":"0xf88fb84047ede3289ec2767e1b71b8a461306f27846efb00e6bd82d79a5712ec11cf570a5dd5b750d5ee3254949142a30b40d0a43174a43a895303db9fe7e2794325736e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034d4243ce1bbd72776f1cd9a14309b16117af879a4d6670c2c684a772062c9ca6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Rr+ovqVrC+Gr+lrTVhu2v0ntZpXYPuKywZLFoECDR88=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 46bfa8\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9c8e ba91 a0c8 | 130 f6c0 (0) f645 (0) f756 (0) f305 (0)\n001 3 08e5 36b9 3728 | 65 1070 (0) 1049 (0) 138d (0) 1686 (0)\n002 5 6c01 648a 6795 741a | 26 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n003 4 52a8 50c1 5144 5a26 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 5 4a95 4b79 48b8 48d7 | 10 4d38 (0) 4d91 (0) 4cec (0) 4a95 (0)\n005 4 4005 402c 43d4 435d | 5 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n============ DEPTH: 6 ==========================================\n006 3 447c 447a 44ad | 3 447c (0) 447a (0) 44ad (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","private_key":"b70820e75826e847f92eaf68756a7853fdb2b9405385a07431acd85be07346c3","name":"node_46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","services":["bzz","pss"],"enable_msg_events":true,"port":46727},"up":true}},{"node":{"info":{"id":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","name":"node_a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","enode":"enode://c4dfc6549432092140b323c294e153ed2fce4e66d90c5342dd739a17b6f8e941241ae157f54b265c8c20b6fdbea7d31097672735a366fd0a39cd6b8e3b7a8b9e@127.0.0.1:0","enr":"0xf88fb84096f40381fc8d8894e700731acada297f8d3f467ebe034ffb0fb3ba1aed4804fc2b00a87923ceb549a89ef5c5cf4d2fe663bb50e216cd249ef9a408b6c57ffe2b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c4dfc6549432092140b323c294e153ed2fce4e66d90c5342dd739a17b6f8e941","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oMiLpwWZsOcsGPpq7dFNYHzKPppJpdUBZdCE5wMowt0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a0c88b\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 648a 5144 46bf | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 8 da36 c603 c6a8 ff75 | 55 f1ed (0) f2b4 (0) f215 (0) f305 (0)\n002 8 9257 9c8e 8e7b 84a9 | 38 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n003 5 b3f9 bdc5 be68 bfc7 | 14 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n004 5 aaf0 ab71 a970 aeb4 | 10 acee (0) af02 (0) aeb4 (0) a8f4 (0)\n005 4 a505 a7a8 a606 a616 | 7 a4ee (0) a5ac (0) a505 (0) a742 (0)\n============ DEPTH: 6 ==========================================\n006 4 a2a1 a2e6 a327 a330 | 4 a2a1 (0) a2e6 (0) a327 (0) a330 (0)\n007 1 a1c8 | 1 a1c8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","private_key":"1d99f9d95bb5133e67b3abc4fa875f292bb3ef13fc4c32d522507cb6251a737b","name":"node_a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","services":["bzz","pss"],"enable_msg_events":true,"port":38619},"up":true}},{"node":{"info":{"id":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","name":"node_648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","enode":"enode://d8d46c12cb0b4cecaf8ab1b972365c7b0568897ccea94352a7b702da0ca1bc6bf559f91c6612d9f452d2af2a32d9b56233b6176241e824db5d784bd0f8015b9b@127.0.0.1:0","enr":"0xf88fb84012854e946d3ccd03e5b967f46ecf70aa3b0b1ccebf7bb7d40f2f80c30110a99b478aa38170b4c3aea017b04fbafa023de9fc42342d0643729f55ce9d2b7119760183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d8d46c12cb0b4cecaf8ab1b972365c7b0568897ccea94352a7b702da0ca1bc6b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ZIqW1hiY6y0zb/fVoinP63ufWHKC5A+f5kDhga4mvdM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 648a96\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c603 aeb4 a0c8 | 130 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n001 4 2c85 36b9 3728 08e5 | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 9 4b79 4a95 402c 4005 | 35 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n003 6 7ce7 7c7c 7e47 7049 | 13 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n004 4 6b4e 6e7f 6d5e 6c01 | 7 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n005 1 60c5 | 1 60c5 (0)\n============ DEPTH: 6 ==========================================\n006 4 6758 67f3 6790 6795 | 4 6758 (0) 67f3 (0) 6790 (0) 6795 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","private_key":"919debfc547283a6f83386441c4f7b3eaec238931b8e97ea9cf7b8f5516ff110","name":"node_648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","services":["bzz","pss"],"enable_msg_events":true,"port":34693},"up":true}},{"node":{"info":{"id":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","name":"node_51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","enode":"enode://61414ffd81e2e685b199ba6089abc6cf7c18cf4bd3654114e8c2a99dfdc4413b8e36b194557bf9b65dc44deaa9478cd4f1c712bbd946ec4ae3e057c878f05610@127.0.0.1:0","enr":"0xf88fb840bb0506fc37a0cd2ae940ab2b93d4b26476b65fbfb40eefe43af7b43776d9a275164cb946279137a07b6bc6cca0ab5bacc802d203049766cf1abf3081b6d7c1ca0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10261414ffd81e2e685b199ba6089abc6cf7c18cf4bd3654114e8c2a99dfdc4413b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UUQKtH/FB2wAytFqVCuEbCazKB7OpNvKeVrpuAGD7JA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 51440a\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 aeb4 a0c8 e277 c603 | 130 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n001 3 3728 36b9 08e5 | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 7660 6795 648a | 26 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n003 9 48f1 4a95 4b79 435d | 19 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n004 4 5c7c 5c37 5bd8 5a26 | 10 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n005 3 5663 56ca 5538 | 3 5663 (0) 56ca (0) 5538 (0)\n============ DEPTH: 6 ==========================================\n006 1 52a8 | 1 52a8 (0)\n007 1 50c1 | 1 50c1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","private_key":"1e8a712b0dd95600c1e67872aa3bcc3e875f05bfe3dacb2f0d546ccd810825bc","name":"node_51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","services":["bzz","pss"],"enable_msg_events":true,"port":36863},"up":true}},{"node":{"info":{"id":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","name":"node_c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","enode":"enode://bed7f6e2cf97600f47210eb1b764eabd6a4725c42d3a7333ed8c4b102442528805dbb8bbcc925fcb62432d06c6418410818d9acbc7bccc0c5979e978bc71a414@127.0.0.1:0","enr":"0xf88fb84044f3f935b08146d7ec9f7864874f4641340f171f272858a0f0889877add866cb5795ad8f80508454ba568f7a3f082d552beb4897dd6eb51d7f8675869573fcaf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bed7f6e2cf97600f47210eb1b764eabd6a4725c42d3a7333ed8c4b1024425288","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xgMTjkD+L4XMY0AXlWraY5n8qZlp478MHuhCg3TnefE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c60313\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 08e5 7660 648a 5144 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 8 b3f9 a0c8 aaf0 ab71 | 75 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n002 6 ff75 e681 e277 eff2 | 28 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n003 5 d3e9 d302 d209 d959 | 11 d408 (0) d700 (0) d3e9 (0) d302 (0)\n004 5 c8c8 c961 cf52 cd6c | 8 c8ea (0) c8c8 (0) c9c3 (0) c961 (0)\n005 3 c190 c272 c2d0 | 3 c190 (0) c272 (0) c2d0 (0)\n006 2 c42e c534 | 2 c42e (0) c534 (0)\n============ DEPTH: 7 ==========================================\n007 1 c74d | 1 c74d (0)\n008 1 c6a8 | 1 c6a8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","private_key":"f8c72bb1240635df9cef74f22b6fe80b40ab667b1917f49f50bbdff097c07eb4","name":"node_c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","services":["bzz","pss"],"enable_msg_events":true,"port":35079},"up":true}},{"node":{"info":{"id":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","name":"node_08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","enode":"enode://ea5b166448c3dd527b2c18555655ee6f90b2bbf3b1d4a447c551801ecab3dba7e5dca4dd2877fc63533ca94dbb39d0583cd6551a0e81bc418ac506a0b2fcdf27@127.0.0.1:0","enr":"0xf88fb840c953b80c5d75dd35fac2c5a49c4dc5308f80a1a9482547b48755d37fb417193c0dc806cf8ce00ec289850183f6837f5c684a68add6e9420bdb6fb937684d72b60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ea5b166448c3dd527b2c18555655ee6f90b2bbf3b1d4a447c551801ecab3dba7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"COWiaPOXOFxpp/7IVa5NiJz6mK/vW3wJ/EhB4/iJStg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 08e5a2\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 9c8e aeb4 e277 e867 | 130 86d6 (0) 87a3 (0) 8402 (0) 84a9 (0)\n001 4 648a 46bf 5144 5a26 | 61 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n002 3 2c85 36b9 3728 | 28 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n003 6 138d 1784 140d 1484 | 16 1049 (0) 1070 (0) 138d (0) 1686 (0)\n004 4 0594 0314 012b 0111 | 10 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n005 4 0d1c 0cfc 0e2b 0e3b | 5 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 09b3 0942 096a | 3 0942 (0) 096a (0) 09b3 (0)\n008 0 | 0\n009 1 08bd | 1 08bd (0)\n010 0 | 0\n011 1 08f8 | 1 08f8 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","private_key":"23182ea48dee85a9137e3024980f59b9d2ab3ff4d922fcd1b30583fdf83baaca","name":"node_08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","services":["bzz","pss"],"enable_msg_events":true,"port":45333},"up":true}},{"node":{"info":{"id":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","name":"node_5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","enode":"enode://2ef3561ee8a3827e57f043fc9f0ab7cffb1bcd3ae7cdbbcf67699cd748e6b8da52fcbf6de1738f3da9b1101b0accddafdd133fbd61899b1a5c45a148344055d0@127.0.0.1:0","enr":"0xf88fb84086144704d9432e5493c584d85cf6d3997698361f501788b244566421cbd614c02beeeba7a937b9b0f2616fef916d5978e3079068bedcc45fcf6f749fa354a41d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022ef3561ee8a3827e57f043fc9f0ab7cffb1bcd3ae7cdbbcf67699cd748e6b8da","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Wiauc+6/J/bb7CQU8Sd6JJ6BSnoGeQ1wYWEOUiewhvY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5a26ae\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 84a9 81a5 8006 80d7 | 130 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n001 3 2c85 36b9 08e5 | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 6 7c46 7e47 741a 7660 | 26 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n003 9 4b79 4a95 48f1 435d | 19 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n004 2 52a8 5144 | 6 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n005 3 5d82 5c37 5c7c | 4 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n006 2 5814 5987 | 2 5814 (0) 5987 (0)\n007 1 5bd8 | 1 5bd8 (0)\n============ DEPTH: 8 ==========================================\n008 2 5ac0 5a8b | 2 5ac0 (0) 5a8b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","private_key":"be696e717d5a91103bc542c6cd7e0b0be4b48502beeb1853da20425d07766a9f","name":"node_5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","services":["bzz","pss"],"enable_msg_events":true,"port":33893},"up":true}},{"node":{"info":{"id":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","name":"node_e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","enode":"enode://72e1ea4365070797e7b04d70c2fcad2502d98a96da55ad4a160b42dabf961951e630354d7ca7c321cbf1f5626574b2619a9fdc940ba34d9d1a7a4040f7dd292d@127.0.0.1:0","enr":"0xf88fb840825ecb133fee1dc489fa785a34e83053c110b2233e3c247614a64b09fa55a9770f3b85c38cea0f103bbbe6a97b8cac4ee63240e58e4675694db27f5402ff50660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10372e1ea4365070797e7b04d70c2fcad2502d98a96da55ad4a160b42dabf961951","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6GdtF5ZmJcT9rGvZQ3mBoM+GnIsAEIEu3wx5gF4OH/E=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e8676d\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2a50 1dec 08e5 5a26 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 8 8862 93c0 9518 9c8e | 75 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n002 4 d209 da36 d959 c603 | 27 d700 (0) d408 (0) d3e9 (0) d302 (0)\n003 6 f756 f215 ff75 fc51 | 14 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n004 6 e471 e64d e681 e09f | 7 e471 (0) e64d (0) e681 (0) e0a0 (0)\n============ DEPTH: 5 ==========================================\n005 5 eff2 ef99 eebd ec90 | 5 ec90 (0) ed42 (0) eebd (0) ef99 (0)\n006 1 eb68 | 1 eb68 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","private_key":"08fe456242f38e34929ed0b545e558015d4a0759d6306e8a146d36cf893d4b5b","name":"node_e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","services":["bzz","pss"],"enable_msg_events":true,"port":45195},"up":true}},{"node":{"info":{"id":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","name":"node_aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","enode":"enode://95bfeea5c376843748c0b4579a13d01255d69aeb09a34f505ba5f0f0a66f5af8c58878ee35613db89c943fddbee64ed3a135d8518501eac5a9adb497b2779202@127.0.0.1:0","enr":"0xf88fb840ba5b589b63f888f95db7ac61bda2976a43eed9b35eac3e78cff7033f9fad31052b057c291e9b5977783d568855bf8ed309fbdaa39fec7b2b08484bfc149e16fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10295bfeea5c376843748c0b4579a13d01255d69aeb09a34f505ba5f0f0a66f5af8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rrRf4QsNvQ9yq2p3+/lxqPRtvN2WwI8jJ50UNLTzix0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aeb45f\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 648a 5144 09b3 08e5 | 126 7895 (0) 7850 (0) 79e5 (0) 7933 (0)\n001 6 c6a8 d302 e64d e277 | 55 d408 (0) d700 (0) d3e9 (0) d302 (0)\n002 6 9c8e 8006 80d7 8862 | 38 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n003 3 b3f9 bfc7 be68 | 14 b8e1 (0) bbaf (0) ba91 (0) bdc5 (0)\n004 4 a505 a616 a0c8 a330 | 13 a4ee (0) a5ac (0) a505 (0) a742 (0)\n005 7 aaf0 ab3f ab71 a8f4 | 7 a8f4 (0) a8ff (0) a8b5 (0) a970 (0)\n============ DEPTH: 6 ==========================================\n006 1 acee | 1 acee (0)\n007 1 af02 | 1 af02 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","private_key":"fd2d10c67a8ec4e327748697560a38d057a694d0f889a4a046bfa41de466686e","name":"node_aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","services":["bzz","pss"],"enable_msg_events":true,"port":39549},"up":true}},{"node":{"info":{"id":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","name":"node_e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","enode":"enode://892384debfb7b9e896252f96c210dbb3def7e24f74947e7737c5c68c7d0a4e43a9859926ef56ea490f905c0fc71a8703571b636948be1f5fe6b5f1ade6d4a5f6@127.0.0.1:0","enr":"0xf88fb840f52490d9e0dee88fedf1f1da621cec20d765e3eff7b5e213d5bb3fbda356b49520319ae12d1f41a30d4b20d4b7b0052635b3ab1532ffe66f9935b55c4b7e56b70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102892384debfb7b9e896252f96c210dbb3def7e24f74947e7737c5c68c7d0a4e43","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4ncM73wa0xK3DZTKVXDkXzJMeYoxqTID9QUWeuqxIrY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e2770c\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 1add 1dec 08e5 5144 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 8 b3f9 a0c8 ab71 aaf0 | 75 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n002 5 d209 da36 d959 c74d | 27 d408 (0) d700 (0) d3e9 (0) d302 (0)\n003 6 f215 f756 ff75 fc51 | 14 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n004 6 ed42 eebd ef99 eff2 | 7 ec90 (0) ed42 (0) eebd (0) ef99 (0)\n005 3 e471 e64d e681 | 3 e471 (0) e681 (0) e64d (0)\n============ DEPTH: 6 ==========================================\n006 2 e0a0 e09f | 2 e0a0 (0) e09f (0)\n007 0 | 0\n008 1 e2d3 | 1 e2d3 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","private_key":"2c978daf46f400bc226fdece07412297280001b2715e8c93de73a32f023d5431","name":"node_e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","services":["bzz","pss"],"enable_msg_events":true,"port":38147},"up":true}},{"node":{"info":{"id":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","name":"node_8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","enode":"enode://eaaca956b740a54195744f6fbd39e020a7ed769cde7f3df89d0ad741ab11159109304ecbba955b7a09dc92014980a987cb17974458d5bf95cdb518ebd41ad4c9@127.0.0.1:0","enr":"0xf88fb84076f9d40288370d9a357f38d036465939c57156da3ee6f9beff1bfae263870b645bb1081bff97858367926e3e377114d326935c349eb355349a781b34a81f12c30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103eaaca956b740a54195744f6fbd39e020a7ed769cde7f3df89d0ad741ab111591","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jnuW0o7a5xHhpM7g2JTgvZLN9BC6b2FxP32bC+52HUw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8e7b96\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 26ab 298a 2c85 6795 | 126 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n001 3 f8ff eff2 e277 | 55 cf52 (0) cc33 (0) cd6c (0) cdb1 (0)\n002 3 a0c8 aeb4 acee | 37 b8e1 (0) ba91 (0) bbaf (0) bdc5 (0)\n003 2 9518 9c8e | 17 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n004 9 8402 84a9 837f 8358 | 12 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n005 3 8b43 8862 8854 | 3 8b43 (0) 8854 (0) 8862 (0)\n006 2 8d19 8cc3 | 2 8d19 (0) 8cc3 (0)\n007 1 8f9a | 1 8f9a (0)\n============ DEPTH: 8 ==========================================\n008 1 8ea2 | 1 8ea2 (0)\n009 1 8e28 | 1 8e28 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","private_key":"ad33c8a077ba94e011226ec6b81f81a198f556dce8d1eb447d60309f2ec96157","name":"node_8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","services":["bzz","pss"],"enable_msg_events":true,"port":45223},"up":true}},{"node":{"info":{"id":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","name":"node_679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","enode":"enode://ed0a39e471509e34dba42412c9de5254e84965cf0532fb62288d0ec74098a7bcbc079ad9c063d1c5be83f76623f266d20dedf46ff8a631ebef5304d8062d47c9@127.0.0.1:0","enr":"0xf88fb840f2fb222edf9f0115e6c84901f82209242c979a9850fdb20841b740c82795ec9516c9f9b248ce6f15b12d488ecc61618fb48e78f2cbfc28a11242c72af5571b140183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ed0a39e471509e34dba42412c9de5254e84965cf0532fb62288d0ec74098a7bc","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z5VUtBDkFc/N8bFO+HdZJpsryvB/RUESKXfbOkAJHaI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 679554\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 eff2 e277 8862 8e7b | 130 c961 (0) c9c3 (0) c8ea (0) c8c8 (0)\n001 4 2c85 3c5b 0111 1dec | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 6 48f1 447a 46bf 402c | 35 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n003 6 7660 741a 7049 7ce7 | 13 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n004 5 6b4e 6e7f 6d3c 6d5e | 7 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n005 1 60c5 | 1 60c5 (0)\n006 1 648a | 1 648a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 6758 | 1 6758 (0)\n009 1 67f3 | 1 67f3 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 6790 | 1 6790 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","private_key":"295ee49e1d8a7a3fe5af430314a49ea88e405bb74583239a90f3a140bd4d5d7d","name":"node_679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","services":["bzz","pss"],"enable_msg_events":true,"port":37471},"up":true}},{"node":{"info":{"id":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","name":"node_8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","enode":"enode://cde94747f8a20e0bb2560ee9a2af2f6b6537e357a16d3405053a591946807074639abe205cc94e3d89e61445686731991d30a685a5e21a23d43f604cd3164970@127.0.0.1:0","enr":"0xf88fb840c4e3c83eec1c9b3873f6d92f1f6c212da5808e380a2298bd31f54eec9e76abc17d44dc112b0c2d2633b2fdf34f53afcc250b2bb0b5b596df651a3eda03d154cb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cde94747f8a20e0bb2560ee9a2af2f6b6537e357a16d3405053a591946807074","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iGLNhdcDkRm5hPdSpFisBJXd6pjGn8HRJB23hzpxLBE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8862cd\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 5a26 6795 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 3 d959 e867 e277 | 55 cf52 (0) cdb1 (0) cd6c (0) cc33 (0)\n002 3 b3f9 aeb4 acee | 37 b8e1 (0) bbaf (0) ba91 (0) bdc5 (0)\n003 3 9518 9257 9c8e | 17 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n004 9 86d6 84a9 8402 834f | 12 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n005 5 8cc3 8d19 8e7b 8e28 | 6 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n============ DEPTH: 6 ==========================================\n006 1 8b43 | 1 8b43 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 8854 | 1 8854 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","private_key":"5b139026f24d426829e4000c0729b6cf94f244c94dc6f40c4408a50c7bbc7e2c","name":"node_8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","services":["bzz","pss"],"enable_msg_events":true,"port":33033},"up":true}},{"node":{"info":{"id":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","name":"node_aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","enode":"enode://41590aa46824b94b64e61a0ba359d8b90fd986c1b1ff0556d51bfa03064616d68e5db68d74e7c89ce7a21c7baca305a808a409df46280f96ae5110560aba272d@127.0.0.1:0","enr":"0xf88fb8407a50df7269c86adec9f03aec5a49050ce842bd9f615b6a0c7f718e6bd95d59c153e0b12a99f1e8583eba20470c4bf7315e9376df0e719fb29eb5845d5eee653f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10341590aa46824b94b64e61a0ba359d8b90fd986c1b1ff0556d51bfa03064616d6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rO7nWiYNRSUgYP6XHqvUveJfkS20o8bkf0oJVy/gFpc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aceee7\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 09b3 3c5b 6c01 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 5 da36 d959 e64d e277 | 55 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n002 7 9c8e 80d7 8006 8cc3 | 38 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n003 5 ba91 bdc5 bfc7 be68 | 14 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n004 3 a616 a0c8 a330 | 13 a4ee (0) a5ac (0) a505 (0) a742 (0)\n005 6 a970 a8ff a8b5 aaf0 | 7 a8f4 (0) a8ff (0) a8b5 (0) a970 (0)\n============ DEPTH: 6 ==========================================\n006 2 af02 aeb4 | 2 af02 (0) aeb4 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","private_key":"0aacb09a0fb2947e95aacfb35aee79d77b33577dc33960a8eda97847f015ef58","name":"node_aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","services":["bzz","pss"],"enable_msg_events":true,"port":41855},"up":true}},{"node":{"info":{"id":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","name":"node_6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","enode":"enode://b9df58044341d94dfdfbd7423f9f8e44cbd1988eb021f9af28aff240c9a82a2cd80e372bdf01aff5ea2cfc8f237351d75a33d6b5cedbbaf11e3fc7e01299ac0d@127.0.0.1:0","enr":"0xf88fb84038e531185ddede85a603500b82295e3edf51326825e4ce34730604ab4d3522bd103c828112617841c50911bd782b291d031c80b1847b70b2466f8a594e8228ad0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b9df58044341d94dfdfbd7423f9f8e44cbd1988eb021f9af28aff240c9a82a2c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bAFCmE1imuaZWJTenn5euNP+ReFkHX69Y5WdLmFUi6M=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6c0142\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 eff2 8cc3 84a9 acee | 130 c961 (0) c9c3 (0) c8ea (0) c8c8 (0)\n001 4 3c5b 0111 1add 1dec | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 8 48d7 48f1 4a95 447a | 35 4d38 (0) 4d91 (0) 4cec (0) 4a95 (0)\n003 6 741a 7660 7049 7c7c | 13 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n004 5 60c5 648a 6758 67f3 | 6 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n005 2 68cb 6b4e | 2 68cb (0) 6b4e (0)\n006 1 6e7f | 1 6e7f (0)\n============ DEPTH: 7 ==========================================\n007 3 6d5e 6d3c 6dd3 | 3 6dd3 (0) 6d3c (0) 6d5e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","private_key":"9ca2399351f822028b5da22e6bc0154901d8ea738bbdf6bdcd4bcc21c3ed0d5b","name":"node_6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","services":["bzz","pss"],"enable_msg_events":true,"port":36003},"up":true}},{"node":{"info":{"id":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","name":"node_eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","enode":"enode://e8b833b40e8298b358b18b45e4339fb6608150de9aac211997746cd94c54f9aaf222cffa82031877b46c104bcf3925b66ec72c0249c56469a6e91915a5e55264@127.0.0.1:0","enr":"0xf88fb84052bdfa57cdb21c78128b249f7474f67fc7914496c70263b47c9c07b65968118861855f3f3557bbe4d668f5f65ac095b39e2e02b29c76aec618aa9680f4dda5570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e8b833b40e8298b358b18b45e4339fb6608150de9aac211997746cd94c54f9aa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7/JFC+p5f/Ztk+fBwbCXfN3zq7pkv6UbzFCdcoVp4vo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eff245\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1dec 6795 6c01 52a8 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 7 8e7b 8006 80d7 a330 | 75 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n002 4 c603 c74d d209 d959 | 27 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n003 4 fc51 ff75 f9de f8ff | 14 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n004 3 e681 e64d e277 | 7 e471 (0) e681 (0) e64d (0) e09f (0)\n005 2 e867 eb68 | 2 eb68 (0) e867 (0)\n006 2 ec90 ed42 | 2 ec90 (0) ed42 (0)\n============ DEPTH: 7 ==========================================\n007 1 eebd | 1 eebd (0)\n008 0 | 0\n009 1 ef99 | 1 ef99 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","private_key":"5dfe6750469b59c78af3ed5c6d49cda36cf5da33a2b02380cadc1833ffacec3e","name":"node_eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","services":["bzz","pss"],"enable_msg_events":true,"port":44215},"up":true}},{"node":{"info":{"id":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","name":"node_52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","enode":"enode://6d8774da40def7a5b17bb5815e018bc2cefba4129897e17f1a8fe1c9b86218c3d980322811c74b84881232dfa2370d502be9bf56cf705dc2fa1442fab44e1a9f@127.0.0.1:0","enr":"0xf88fb8404567e884ed9478156080ac3b497bacbba7c91cebeb40e60ff39f2fc98237d0bb13fdcab19d93a55bc38c89b23f382274493972d896ce4cb24af71a9f169ab2cd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036d8774da40def7a5b17bb5815e018bc2cefba4129897e17f1a8fe1c9b86218c3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Uqh0fk6jX29Qxy18SBYW9opeQ5YkgzK4/2nTp3LeSaw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 52a874\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d959 eff2 | 130 b8e1 (0) ba91 (0) bbaf (0) bfc7 (0)\n001 4 3c5b 0111 1add 1dec | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 7e47 6795 6c01 | 26 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n003 8 4cec 48f1 435d 402c | 19 4d38 (0) 4d91 (0) 4cec (0) 4b79 (0)\n004 6 5d82 5c7c 5c37 5987 | 10 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n005 2 56ca 5538 | 3 5663 (0) 56ca (0) 5538 (0)\n============ DEPTH: 6 ==========================================\n006 2 50c1 5144 | 2 50c1 (0) 5144 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","private_key":"7184fbc50435ce3da686084be1e05ae373d949ebfd17f019adc5f3d36e027659","name":"node_52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","services":["bzz","pss"],"enable_msg_events":true,"port":38653},"up":true}},{"node":{"info":{"id":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","name":"node_d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","enode":"enode://5f6d3c7b333f15437a8e10851a5e5b69df52d2a88441bf1b087a510149da211b403d95794b7be4b00888e746c0db90dd087f785db90c5ce96e76e977a0c3658d@127.0.0.1:0","enr":"0xf88fb840b90e0d1da9269f37eba660dc778bd68fc19e66ec3e2f8286c01ee9b08b44ac4704329c54f9f909700083ee04d27d04a671277fc4dab0023848748a1f385c96c10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035f6d3c7b333f15437a8e10851a5e5b69df52d2a88441bf1b087a510149da211b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2Vll5EndQGmHY4TPSzT5hnMeJVp5SPCoYtIpsd3bxQI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d95965\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0111 3c5b 52a8 | 126 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n001 5 acee 9464 8862 80d7 | 75 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n002 4 f8ff e277 e867 eff2 | 28 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n003 4 c8c8 c603 c6a8 c74d | 16 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n004 3 d3e9 d302 d209 | 5 d700 (0) d408 (0) d3e9 (0) d302 (0)\n005 1 ddb8 | 1 ddb8 (0)\n============ DEPTH: 6 ==========================================\n006 3 dbd4 dad0 da36 | 3 dbd4 (0) dad0 (0) da36 (0)\n007 0 | 0\n008 1 d9cf | 1 d9cf (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","private_key":"3e7c884510e8b3aa30441168b9f41d34a41cc93dd314587ff58a092474081075","name":"node_d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","services":["bzz","pss"],"enable_msg_events":true,"port":42317},"up":true}},{"node":{"info":{"id":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","name":"node_8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","enode":"enode://00b96eb6a76e41ed136cbe16d1d887b7bbac5a0bd72bb337756b733add37c60d759a8e32a3de23839c55ca9896ae7de7f3d7e955f907935c60f6837c76407032@127.0.0.1:0","enr":"0xf88fb8404180b1565d27eada9a91fcc9783f8bb81c62344bcfe8f579644b225ff80f24972b11fbbd09b6e8e56b49515a95647d596e31f4aab16005512cc2a95035324c810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10200b96eb6a76e41ed136cbe16d1d887b7bbac5a0bd72bb337756b733add37c60d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gAawgMeKCrVPob51qTm+4jNDIv3tbDVj3hWWsXw2Fyw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8006b0\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 5a26 1dec | 126 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n001 3 eff2 d302 d959 | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 5 a0c8 a330 aaf0 aeb4 | 37 b8e1 (0) ba91 (0) bbaf (0) bcf8 (0)\n003 2 9518 9c8e | 17 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n004 3 8862 8cc3 8e7b | 9 8b43 (0) 8854 (0) 8862 (0) 8f9a (0)\n005 4 87a3 86d6 8402 84a9 | 4 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n006 3 837f 8358 834f | 3 837f (0) 8358 (0) 834f (0)\n007 1 81a5 | 1 81a5 (0)\n008 1 80d7 | 1 80d7 (0)\n============ DEPTH: 9 ==========================================\n009 2 8073 8074 | 2 8073 (0) 8074 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","private_key":"fcb5be43acaccb42dc1ccc165ea1cfd8c513cf177216d2c30891da51422d3c28","name":"node_8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","services":["bzz","pss"],"enable_msg_events":true,"port":34767},"up":true}},{"node":{"info":{"id":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","name":"node_1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","enode":"enode://0f9ec77321a98a1f538e0d5d9ef25b2b88fb31c678c3eb96345ec11e120bf502f24062c58885fab4104bcde1c4d556514688684c9f451a52d5296e1e904b553f@127.0.0.1:0","enr":"0xf88fb840a7d34c4c4c304a57c17de44dce8fa8a85dd33c61c06dd8848a767401a5f335044a5ea299bd475fb2a27fc686f0d4f124f75520dc1dde65822225e7467289bafb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030f9ec77321a98a1f538e0d5d9ef25b2b88fb31c678c3eb96345ec11e120bf502","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Hex3wvTK8FPC0FJK40otlwv0dDoNAJ2PxUMHfd/f49A=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1dec77\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 e277 e867 eff2 a330 | 130 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n001 3 6795 6c01 52a8 | 61 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n002 3 2c85 2a50 3c5b | 28 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n003 5 0e3b 0cfc 08f8 09b3 | 21 0d1c (0) 0cfc (0) 0e80 (0) 0e2b (0)\n004 6 1049 138d 1784 1686 | 7 1070 (0) 1049 (0) 138d (0) 1686 (0)\n005 6 19ea 194e 18e0 1b1d | 6 19ea (0) 194e (0) 18e0 (0) 1b1d (0)\n============ DEPTH: 6 ==========================================\n006 1 1fd0 | 1 1fd0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 1dc0 | 1 1dc0 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","private_key":"26da41b73f097099d65984b38ff4a2abed7a066916fc7defac16025a9b048f64","name":"node_1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","services":["bzz","pss"],"enable_msg_events":true,"port":44061},"up":true}},{"node":{"info":{"id":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","name":"node_1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","enode":"enode://9548a286c10115387facaf19d1e4f0a89e912d85029c1c487158207abe9e881aa61089ccb01238b15c8cd3cea9a71d520c4253dd1b487a963865c8947790bc2a@127.0.0.1:0","enr":"0xf88fb840ec288c0946306b1c5322ec315d33d13022eaef5463fd9d585df1000c7f70914713feb9d24a31c080bfca34d7f32d2f2f4a7cc8472108a6e5b3a68a74f3777ff80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029548a286c10115387facaf19d1e4f0a89e912d85029c1c487158207abe9e881a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Gt3UqfAUhiEuE+Q6llC395NhfRy1n7jZQScNeuVfV18=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1addd4\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 e277 a330 80d7 | 130 f1ed (0) f215 (0) f2b4 (0) f305 (0)\n001 3 52a8 447a 6c01 | 61 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n002 4 2c85 298a 26ab 3c5b | 28 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n003 3 0e3b 08e5 0111 | 21 0d1c (0) 0cfc (0) 0e80 (0) 0e2b (0)\n004 3 1784 1484 140d | 7 1049 (0) 1070 (0) 138d (0) 1686 (0)\n005 3 1fd0 1dc0 1dec | 3 1fd0 (0) 1dc0 (0) 1dec (0)\n006 3 19ea 194e 18e0 | 3 19ea (0) 194e (0) 18e0 (0)\n============ DEPTH: 7 ==========================================\n007 2 1b1d 1bd5 | 2 1b1d (0) 1bd5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","private_key":"0913c134c0b143e925b0c88a1fdf7b3b79761d599db43e77f87db4896c1677ea","name":"node_1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","services":["bzz","pss"],"enable_msg_events":true,"port":39027},"up":true}},{"node":{"info":{"id":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","name":"node_80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","enode":"enode://9e5ae61e978f364f62889e17b22a8f9248f40ec009d4b43b3b05f92eda9394c87e382e2459b92a93e6b62e2103ab0f7a3c37c5251ef272e7c4ce8b47145ba2b1@127.0.0.1:0","enr":"0xf88fb840e9a52f21b9b8b379be4383a4cff9a6331d63db696a7236c2b700b217ca1e7bb97104740ffffdf09ddfb44f932fa5534cbd2541e7a4dd75920c0dc26241fa43290183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039e5ae61e978f364f62889e17b22a8f9248f40ec009d4b43b3b05f92eda9394c8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gNfokruyaAirsdFTAHf+xrCHaMFRqfIgiB2jyGK64K8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 80d7e8\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 5a26 3b02 3c5b 0111 | 126 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n001 4 eff2 d302 d209 d959 | 55 f1ed (0) f2b4 (0) f215 (0) f305 (0)\n002 5 aaf0 acee aeb4 a0c8 | 37 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n003 6 9c8e 9257 97da 9464 | 17 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n004 6 8b43 8854 8862 8e7b | 9 8b43 (0) 8854 (0) 8862 (0) 8f9a (0)\n005 4 86d6 87a3 8402 84a9 | 4 86d6 (0) 87a3 (0) 8402 (0) 84a9 (0)\n006 3 837f 8358 834f | 3 837f (0) 8358 (0) 834f (0)\n007 1 81a5 | 1 81a5 (0)\n============ DEPTH: 8 ==========================================\n008 3 8073 8074 8006 | 3 8073 (0) 8074 (0) 8006 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","private_key":"ba50fc539edd826fed0a669af162891458571b2d3feed69df70bd146d17ce4ed","name":"node_80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","services":["bzz","pss"],"enable_msg_events":true,"port":39407},"up":true}},{"node":{"info":{"id":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","name":"node_0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","enode":"enode://5ee976bcaa543b5d2ea1a0bce5b0ff16849ede88771b4d0539bcf66b2a275089315547a16297807f96f1634144fba1112ca22817182c90947739c6db02226d55@127.0.0.1:0","enr":"0xf88fb840b273fc1fa015b0a0b045a26f170ca39c7ded0d15989a8d2f9a15df15c5c1471a3943fd8ce033b73dd6cc8f6d988a1e6f4b6ad088a8148478fe0728cdc8a5b4aa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035ee976bcaa543b5d2ea1a0bce5b0ff16849ede88771b4d0539bcf66b2a275089","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ARHnIKhLMQ+GPCUw++FJ5qIhrLrQEGXF0FLSs+Fxb1Q=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0111e7\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d209 d959 80d7 | 130 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n001 4 6795 6c01 52a8 447a | 61 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n002 2 2a50 3c5b | 28 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n003 3 18e0 1add 1dec | 16 1070 (0) 1049 (0) 138d (0) 1686 (0)\n004 6 0cfc 0e3b 09b3 08bd | 11 0d1c (0) 0cfc (0) 0e80 (0) 0e2b (0)\n005 4 046c 0594 0561 07f5 | 4 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n006 3 025d 035f 0314 | 3 025d (0) 035f (0) 0314 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 0191 | 1 0191 (0)\n009 0 | 0\n010 1 012b | 1 012b (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","private_key":"91fae292525cee25df7bf4db07a65551f7691e6d2bc6a6919a32b5862b97dc00","name":"node_0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","services":["bzz","pss"],"enable_msg_events":true,"port":44549},"up":true}},{"node":{"info":{"id":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","name":"node_3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","enode":"enode://d5a336637f6123924c25472b63ed0ce1759aaa0df7f6d4a18ab36dd8976db21757be5de42d1a3edef967c5d508a894b841f272453643d4c7827490b2286d7177@127.0.0.1:0","enr":"0xf88fb8404f46f3f9d69855c1359b03501474fc383b4578f1b7b40877d2c279c467756cf54804a11759187a452f18bc0291d786321ce06bae18d6cd130e358172c6c4ee5a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d5a336637f6123924c25472b63ed0ce1759aaa0df7f6d4a18ab36dd8976db217","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PFsuElAgyA42dN+crDTeTY86lO4CVW+1V5IbbVSYuTM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3c5b2e\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 d959 c74d acee 80d7 | 130 f1ed (0) f215 (0) f2b4 (0) f305 (0)\n001 6 6c01 6795 402c 447a | 61 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n002 6 1784 1dc0 1dec 1add | 37 1070 (0) 1049 (0) 138d (0) 1686 (0)\n003 4 26ab 2c85 298a 2a50 | 11 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n004 6 3728 36b9 30fe 3051 | 9 32ff (0) 30fe (0) 3051 (0) 3188 (0)\n005 5 3980 3938 397a 3b02 | 5 3980 (0) 3938 (0) 397a (0) 3b02 (0)\n============ DEPTH: 6 ==========================================\n006 1 3f31 | 1 3f31 (0)\n007 0 | 0\n008 1 3cab | 1 3cab (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","private_key":"10f73f4d9bbb99564f267bf19aee5d5029238f913a01009124c433e72e461c43","name":"node_3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","services":["bzz","pss"],"enable_msg_events":true,"port":35855},"up":true}},{"node":{"info":{"id":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","name":"node_84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","enode":"enode://7c5c0013e73e1e336ff20c1718a135e5725dc06c6f0c9f9090220223d8e9ae14776b3d3d2073ec0f9ac79ad91739644142a122c2ac9e79f6fedbeb3d24fbe15a@127.0.0.1:0","enr":"0xf88fb840ffe7dbb7a2a573810eb50ef23e54deecd328d7b7e0502170861ff9dd20f39c683db509751dd87bfb7a1b6e1671d2f50655924fa021c7601cd337daed4a4b0f910183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027c5c0013e73e1e336ff20c1718a135e5725dc06c6f0c9f9090220223d8e9ae14","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hKnbdkXHktw4wfIROo8FkNBOHJTZqMRkqw7IIZMD2WY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 84a9db\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 5a26 402c 7e47 67f3 | 126 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n001 4 e64d f8ff c603 c74d | 55 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n002 8 bfc7 be68 b3f9 aaf0 | 37 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n003 3 9c8e 97da 9518 | 17 93ea (0) 93c0 (0) 9257 (0) 97da (0)\n004 5 8862 8854 8ea2 8e7b | 9 8b43 (0) 8854 (0) 8862 (0) 8f9a (0)\n005 7 837f 8358 834f 81a5 | 8 837f (0) 8358 (0) 834f (0) 81a5 (0)\n============ DEPTH: 6 ==========================================\n006 2 87a3 86d6 | 2 87a3 (0) 86d6 (0)\n007 0 | 0\n008 1 8402 | 1 8402 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","private_key":"942aadc68bdea22f3ce52da3ae7b6f7c03ec9e47e5d2b153161be660d1a0ae91","name":"node_84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","services":["bzz","pss"],"enable_msg_events":true,"port":33215},"up":true}},{"node":{"info":{"id":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","name":"node_c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","enode":"enode://97af56cb76aa2eaec4aeef2c8cec152cbe5b98224f219b0fc82f0c0a3648951cf0b429a35548829391d1a4d9a663cde74dd333c0c012e6a1f8d6e677a006dc00@127.0.0.1:0","enr":"0xf88fb840c23585d8a52b92c0cd98c86cc18d8ea7593dd6740927c3fa9aab25a49c02996a1091206cf56d09a3ac4f253656b976411b2307fdd0c77cbf1607b6df7e163f760183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10297af56cb76aa2eaec4aeef2c8cec152cbe5b98224f219b0fc82f0c0a3648951c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"x02AHoWsD9iVFIDRB7Qe3cXJJ3VhTEiGs/cy+j0aeR0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c74d80\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 447a 3a62 3c5b | 126 7049 (0) 70f6 (0) 741a (0) 7660 (0)\n001 2 8cc3 84a9 | 75 b4a1 (0) b5ea (0) b6df (0) b659 (0)\n002 5 ff75 f8ff e277 e64d | 28 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n003 6 d209 d302 dbd4 dad0 | 11 ddb8 (0) dbd4 (0) dad0 (0) da36 (0)\n004 2 cd6c c8c8 | 8 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n005 2 c2d0 c272 | 3 c190 (0) c272 (0) c2d0 (0)\n006 2 c534 c42e | 2 c534 (0) c42e (0)\n============ DEPTH: 7 ==========================================\n007 2 c603 c6a8 | 2 c603 (0) c6a8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","private_key":"459826aca20135c53b872b1b2eee49b09c127ff95d3a98d517dc55c101f6562a","name":"node_c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","services":["bzz","pss"],"enable_msg_events":true,"port":46857},"up":true}},{"node":{"info":{"id":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","name":"node_8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","enode":"enode://f5bd9f767508bd665cf322b697829a1c303223f3e1953dac7fb2aa3ecb12f562a82f48929f997d96979eda587e53151f11fb6b0c1a477bcaea877333608f8938@127.0.0.1:0","enr":"0xf88fb84049abb7ae67d8f18e608e10433911a04e12e66842debe93fddfd1b92dd4b5249e2e0d73655939db3ec05377a8ea47300d98f115a6d484239b195f4757342458470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f5bd9f767508bd665cf322b697829a1c303223f3e1953dac7fb2aa3ecb12f562","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jMP7OQCdCtwm/KHi7paCLRaNTevDef1RbBXUtKFiQjE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8cc3fb\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 1dec 6c01 7e47 402c | 126 7049 (0) 70f6 (0) 741a (0) 7660 (0)\n001 2 d209 c74d | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 6 be68 b3f9 aaf0 acee | 37 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n003 4 9c8e 93c0 95c0 9518 | 17 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n004 8 834f 837f 81a5 80d7 | 12 8358 (0) 834f (0) 837f (0) 81a5 (0)\n005 3 8854 8862 8b43 | 3 8b43 (0) 8854 (0) 8862 (0)\n============ DEPTH: 6 ==========================================\n006 4 8f9a 8ea2 8e28 8e7b | 4 8f9a (0) 8ea2 (0) 8e28 (0) 8e7b (0)\n007 1 8d19 | 1 8d19 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","private_key":"ab529b2f870b41497c801949c1e6f8803428c7a8a5401009fb5aecf2146a8021","name":"node_8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","services":["bzz","pss"],"enable_msg_events":true,"port":32793},"up":true}},{"node":{"info":{"id":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","name":"node_a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","enode":"enode://2e41f2b550586042c5f6fc98479cf8647f043156b413c46a8a44e5e748b12ad67219bf8846538c69bd1512ba2b2372b455d2db5bb6833d24f26e6c9a1f59d5c8@127.0.0.1:0","enr":"0xf88fb840ae31abaa7b69ba78463e2aabc17bdba4aab8ffa918141bc3c9628311a50f0e8f60fc4d7edd0a2d6d9d31bdc7358e66ea37b3726c4daa85d3112b655b7bea23220183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022e41f2b550586042c5f6fc98479cf8647f043156b413c46a8a44e5e748b12ad6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ozCfi4u6TY+9fGGT12ccuQe5TnEVXvYTjgJIaC/wDlg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a3309f\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 447a 402c 09b3 1dec | 126 7049 (0) 70f6 (0) 741a (0) 7660 (0)\n001 5 f8ff e64d eff2 d302 | 55 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n002 5 9c8e 8006 80d7 84a9 | 38 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n003 3 b3f9 bfc7 be68 | 14 b8e1 (0) bbaf (0) ba91 (0) bcf8 (0)\n004 4 aaf0 ab71 aeb4 acee | 10 a8f4 (0) a8ff (0) a8b5 (0) a970 (0)\n005 4 a5ac a505 a606 a616 | 7 a4ee (0) a5ac (0) a505 (0) a742 (0)\n006 2 a1c8 a0c8 | 2 a1c8 (0) a0c8 (0)\n============ DEPTH: 7 ==========================================\n007 2 a2e6 a2a1 | 2 a2e6 (0) a2a1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 a327 | 1 a327 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","private_key":"f5a3649f592d0f7c3eced972c572abd68fb996716ce6c51e2f9c236db5ee5f7f","name":"node_a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","services":["bzz","pss"],"enable_msg_events":true,"port":46725},"up":true}},{"node":{"info":{"id":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","name":"node_2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","enode":"enode://c001df527a6a418a2bb70ac07ea54973e446f8037817071d1099e394bf3cf208a58bf9796e8e5c5f9fe0ab71cde46b1e3b320c911fa86e6af286e603ce8a9d04@127.0.0.1:0","enr":"0xf88fb840543888f27b45d292760976edb014e7c72679a5831e78c7496fd2bc5d78af0c377e0981dcbe633f5465ca9546ada0184be5e5a640dd77b8f6ea51c936515ab1d20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c001df527a6a418a2bb70ac07ea54973e446f8037817071d1099e394bf3cf208","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KlB/XLkhE3pyJcnEmIqFFK8PfjxELLi/K7YS3FIqfa8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2a507f\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f9de f8ff ff75 e867 | 130 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n001 3 7e47 4a95 447a | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 6 1dec 08bd 09b3 07f5 | 37 1070 (0) 1049 (0) 138d (0) 1686 (0)\n003 11 36b9 3051 3188 31e6 | 17 32ff (0) 30fe (0) 3051 (0) 3188 (0)\n004 4 24f8 244c 26ac 26ab | 4 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n============ DEPTH: 5 ==========================================\n005 5 2fd2 2e65 2ddf 2c80 | 5 2fd2 (0) 2e65 (0) 2ddf (0) 2c80 (0)\n006 1 298a | 1 298a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","private_key":"ba89f2c3d704a1b02be39f28124317f79d2630278219ab9397e5250cbaab1347","name":"node_2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","services":["bzz","pss"],"enable_msg_events":true,"port":40127},"up":true}},{"node":{"info":{"id":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","name":"node_447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","enode":"enode://93cb54d9649a77b0cdde7ac6f47e4b97f7601de7e8881dd99e904b4c0f29e973261a2ca33856145834ad9fa4b35e8100f57851652ae17382da483d915520cef9@127.0.0.1:0","enr":"0xf88fb840f9ca3c35e33f2fe6bfb3114da2e3c50397d620dc275d5fdf0fca027de00c6ba20aceee4ab1ac417c80e3c10d7ab9f21e3b07da298b81aac6a8f6b7b38a4936d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10393cb54d9649a77b0cdde7ac6f47e4b97f7601de7e8881dd99e904b4c0f29e973","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RHpBHID71CK/oMNY0/Kh/mJWwF41rMY1CVjfvmLNW5s=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 447a41\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 a330 8cc3 c74d d209 | 130 b78f (0) b659 (0) b6df (0) b5ea (0)\n001 8 140d 1add 0314 0111 | 65 1049 (0) 1070 (0) 138d (0) 1686 (0)\n002 6 6c01 648a 6758 6795 | 26 60c5 (0) 648a (0) 6758 (0) 6790 (0)\n003 8 5bd8 5a8b 5a26 5d82 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 6 48f1 48b8 4b79 4a95 | 10 4a95 (0) 4b79 (0) 482e (0) 48b8 (0)\n005 5 43d4 43c9 435d 4005 | 5 43d4 (0) 43c9 (0) 435d (0) 4005 (0)\n006 1 46bf | 1 46bf (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 44ad | 1 44ad (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 447c | 1 447c (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","private_key":"333ffec493a411ee5a1cf2f27903e2738e2967073c019fcbf70844d2c5e221fb","name":"node_447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","services":["bzz","pss"],"enable_msg_events":true,"port":46191},"up":true}},{"node":{"info":{"id":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","name":"node_d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","enode":"enode://fa46b1409f74c7047256751457bb4839d22d4c44e870020c92b9a8094d40fffd0bbe32e0d0e17a80c1a5cda6744641633435612ef66e4d1efe652f2190e9898c@127.0.0.1:0","enr":"0xf88fb840ec8f9457cb967b5716665ff449c2d75e0cba1fb09465164ee48b4a314d3bbb0d2cffff4ac93409d690a86ae7b8031ec765f327ec503895ea2d4ae58be0ea6d490183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fa46b1409f74c7047256751457bb4839d22d4c44e870020c92b9a8094d40fffd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0gkxzj2pcv0j6jBuXGBKH72UF7oCZUxc2+J4/iWfddU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d20931\npopulation: 23 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0111 3a62 447a | 126 1070 (0) 1049 (0) 138d (0) 1686 (0)\n001 3 80d7 8cc3 a330 | 75 b4a1 (0) b5ea (0) b6df (0) b659 (0)\n002 5 f8ff e867 eff2 e277 | 28 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n003 4 c8c8 c74d c6a8 c603 | 16 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n004 4 dbd4 dad0 da36 d959 | 6 ddb8 (0) dbd4 (0) dad0 (0) da36 (0)\n005 2 d700 d408 | 2 d700 (0) d408 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 d3e9 d302 | 2 d3e9 (0) d302 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","private_key":"1efdf65d1076ab6055d3624a77725affdd2e31a88571efc3f60d3ccaff92f6bb","name":"node_d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","services":["bzz","pss"],"enable_msg_events":true,"port":39387},"up":true}},{"node":{"info":{"id":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","name":"node_3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","enode":"enode://699f62b0ede6090f23dc2599d33c7358ae7b40e7968fafc5a628f37665146f48126c277ba115635c40a4b4b0c21129c569efe2b0088a0e1a2a7c2e79793fd6ad@127.0.0.1:0","enr":"0xf88fb8408c0574ebe34e80bece2feb6738856fa36e55e93c1692ea7e973fb6f5948061ba1afefff01aa4e3ffe13b7ab2318e4d5201b0083ee6a4067fe0a7436c371f93c70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103699f62b0ede6090f23dc2599d33c7358ae7b40e7968fafc5a628f37665146f48","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OmKO8XHB8m+glm64khC+ChQwWq6L/tEPTtkBdpj0D0s=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3a628e\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c6a8 c74d d209 | 130 b659 (0) b6df (0) b78f (0) b4a1 (0)\n001 4 7e47 5c37 402c 447a | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 7 1484 140d 1dc0 18e0 | 37 1070 (0) 1049 (0) 138d (0) 1686 (0)\n003 4 26ab 2c85 2a50 298a | 11 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n004 7 36b9 3728 3051 30fe | 9 3411 (0) 3728 (0) 36b9 (0) 32ff (0)\n005 3 3f31 3cab 3c5b | 3 3f31 (0) 3cab (0) 3c5b (0)\n============ DEPTH: 6 ==========================================\n006 3 3980 3938 397a | 3 3980 (0) 3938 (0) 397a (0)\n007 1 3b02 | 1 3b02 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","private_key":"dcc4c59e4839e1a65f299219ca7016fdaa5f40089be97dd01f6e44b309e517e1","name":"node_3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","services":["bzz","pss"],"enable_msg_events":true,"port":45801},"up":true}},{"node":{"info":{"id":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","name":"node_031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","enode":"enode://f6a817139fae4583a57556cc9a0a457c0473f3420d9c159dde94147684cef58dee5800eba9eed6ce4bca94ed4f0b5990cf1300abc416d3abe67117ff987e3893@127.0.0.1:0","enr":"0xf88fb840ac7d354eab1b00a4d18d770c7a56c8bd41a723c51be5b45f95ac7541b76ffd8a6b2abb20615da04d0e0b07abf9c9d1a2c014424bc3c8d645913be94303912ddd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f6a817139fae4583a57556cc9a0a457c0473f3420d9c159dde94147684cef58d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AxRQ7CDzU0NbQptfpk9hbQfJ1Yavq8eidy4FrVyIv1A=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 031450\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e64d d302 | 130 b4a1 (0) b5ea (0) b78f (0) b659 (0)\n001 2 447a 402c | 61 7049 (0) 70f6 (0) 741a (0) 7660 (0)\n002 5 2a50 31e1 31e6 3b02 | 28 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n003 2 18e0 140d | 16 1fd0 (0) 1dc0 (0) 1dec (0) 1b1d (0)\n004 6 0e2b 0e3b 0cfc 08bd | 11 0e80 (0) 0e2b (0) 0e3b (0) 0d1c (0)\n005 3 07f5 0561 0594 | 4 07f5 (0) 046c (0) 0561 (0) 0594 (0)\n006 3 0191 012b 0111 | 3 0191 (0) 012b (0) 0111 (0)\n============ DEPTH: 7 ==========================================\n007 1 025d | 1 025d (0)\n008 0 | 0\n009 1 035f | 1 035f (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","private_key":"71841c7c5c5d9ea8a678e5f6274467f74b6f88c13bbf848178459758f86d8039","name":"node_031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","services":["bzz","pss"],"enable_msg_events":true,"port":43487},"up":true}},{"node":{"info":{"id":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","name":"node_402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","enode":"enode://5bc25029b77714e83add4d5587be2adb2f795f9c9a708fa117f943c07da69023a978354c7584edf8e72592dd799def444d777216cbff5e09d84ed2a3e6cfc802@127.0.0.1:0","enr":"0xf88fb8405ae20f58d8ca24088b13d83e73fa85b6edd318d7a36af6bae3b1561d4e35defe0bc84c46bd137181da067946faf218082b19c9f7508adabe054d430ca14ba09b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025bc25029b77714e83add4d5587be2adb2f795f9c9a708fa117f943c07da69023","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"QCz50L/6AX6+o07eESB/M2az6kUMBCgCkSmo6AJqu+c=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 402cf9\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 84a9 8cc3 a330 e64d | 130 b4a1 (0) b5ea (0) b659 (0) b6df (0)\n001 5 298a 3c5b 3a62 3b02 | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 5 6d5e 6c01 648a 6795 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 3 5a26 5144 52a8 | 16 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n004 6 48d7 48f1 4a95 4cec | 10 482e (0) 48b8 (0) 48f1 (0) 48de (0)\n005 4 46bf 44ad 447c 447a | 4 46bf (0) 44ad (0) 447c (0) 447a (0)\n============ DEPTH: 6 ==========================================\n006 3 43d4 43c9 435d | 3 43d4 (0) 43c9 (0) 435d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 4005 | 1 4005 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","private_key":"94e11eac44f6245218d5abd3d9478e311e64c9803c0c5ea086b6de56d4679633","name":"node_402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","services":["bzz","pss"],"enable_msg_events":true,"port":32811},"up":true}},{"node":{"info":{"id":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","name":"node_3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","enode":"enode://713a1cedffa4515ada02fdd05d03e281b216f290f667a579b6122990b58832fda74606019246522aa1ea21612c64c9b061a99f77ecf52541607f91c645c9b911@127.0.0.1:0","enr":"0xf88fb84078578015605b97496872b339f38876ed514660f63b799e2055976f1d31a7256c29c36362b416362b1c38dcd9dbaf0d98160a481b84e0944a33d9103c1cf2c9890183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103713a1cedffa4515ada02fdd05d03e281b216f290f667a579b6122990b58832fd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OwIMhPtg9Zd5Mk1FHZdw1oPggTO7qi1XYvYbj9S42f0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3b020c\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 a330 9f0e 80d7 d302 | 130 b4a1 (0) b5ea (0) b659 (0) b6df (0)\n001 4 6e7f 6b4e 5c37 402c | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 2 138d 0314 | 37 1070 (0) 1049 (0) 138d (0) 1686 (0)\n003 4 26ab 2c85 2a50 298a | 11 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n004 7 3188 31e6 31e1 30fe | 9 32ff (0) 30fe (0) 3051 (0) 3188 (0)\n005 3 3f31 3c5b 3cab | 3 3f31 (0) 3cab (0) 3c5b (0)\n============ DEPTH: 6 ==========================================\n006 3 3980 3938 397a | 3 3980 (0) 3938 (0) 397a (0)\n007 1 3a62 | 1 3a62 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","private_key":"f0c6bf4c9b4e4f3d3db2b470e1adab35d6500594faf84c40d4e589d3b516a6e9","name":"node_3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","services":["bzz","pss"],"enable_msg_events":true,"port":45529},"up":true}},{"node":{"info":{"id":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","name":"node_d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","enode":"enode://1d5fd1a24eda6285258a0e82b28b81dc86c0d970745ed58fd4ee8cf25414dfd16855e91f57f27d49ff28688f9e48d9df98094d7afcb28de571ad2db259f803dd@127.0.0.1:0","enr":"0xf88fb840142c7e76eea3d74e38e90903bb658e1359757cafd5441e5414d06d489b74a4f567b2017ecbbcb487cf547fd852e100846966134719b652071d9580fa25f868360183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031d5fd1a24eda6285258a0e82b28b81dc86c0d970745ed58fd4ee8cf25414dfd1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0wIqRpVudbyoW6idl7aUo6ZPA8zC2IHtDNaH1D1IaSU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d3022a\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 67f3 402c 140d 0cfc | 126 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n001 6 bfc7 aeb4 a330 8854 | 75 b4a1 (0) b5ea (0) b6df (0) b659 (0)\n002 6 e64d ed42 eebd ff75 | 28 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n003 6 c6a8 c603 c74d cd6c | 16 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n004 5 ddb8 da36 dad0 dbd4 | 6 ddb8 (0) dad0 (0) da36 (0) dbd4 (0)\n005 2 d700 d408 | 2 d700 (0) d408 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 d209 | 1 d209 (0)\n008 1 d3e9 | 1 d3e9 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","private_key":"d6122cfb13c379e5e6975a57ca7446d6faa10cf87da8ddde9793a570ba433a96","name":"node_d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","services":["bzz","pss"],"enable_msg_events":true,"port":46297},"up":true}},{"node":{"info":{"id":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","name":"node_298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","enode":"enode://e2572a35a51863ebd4d0e48420c58ffb5088cadae300e5779152fe7e009a73f879306e12e40543ab0f2ea87351f9114b427df2e411379eeaeb2f2dd4f6734383@127.0.0.1:0","enr":"0xf88fb840a94663c556b354f4695fad007ac31ab668951708699de5cfaf696a677d15555c6120984becc7bc3b1c3724a42f37b9e009cb7b6c5f37f23758c3a9d2941638d00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e2572a35a51863ebd4d0e48420c58ffb5088cadae300e5779152fe7e009a73f8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"KYrl0XPFNgvJrVtJLtNd47bgyuhoo0v+YxGoul6ph34=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 298ae5\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9f0e 8e7b e64d d302 | 130 b3f9 (0) b78f (0) b659 (0) b6df (0)\n001 5 4a95 402c 447a 7e47 | 61 68cb (0) 6b4e (0) 6e7f (0) 6c01 (0)\n002 8 1add 194e 18e0 140d | 37 138d (0) 1070 (0) 1049 (0) 1784 (0)\n003 11 36b9 3051 3188 31e6 | 17 3411 (0) 3728 (0) 36b9 (0) 32ff (0)\n004 3 24f8 26ac 26ab | 4 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n============ DEPTH: 5 ==========================================\n005 5 2fd2 2e65 2ddf 2c80 | 5 2fd2 (0) 2e65 (0) 2ddf (0) 2c80 (0)\n006 1 2a50 | 1 2a50 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","private_key":"b0b337287594e581c25600a9c7123555efd6242dd53a8bc83caa7c7890443ac5","name":"node_298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","services":["bzz","pss"],"enable_msg_events":true,"port":33555},"up":true}},{"node":{"info":{"id":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","name":"node_e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","enode":"enode://1c9f6fc264902a736faaf67f7c0de6faee097992d30a5ed225cb334c2a3525ec83d7a038643357fc6c0f7ed5c86e8d272bb475054048f26964e53a4c23b85c6b@127.0.0.1:0","enr":"0xf88fb84037d31d5c2464b59a7a8c3d22f66575e1d23a2d4ea24038f76b84d3446bcd41e51fd1f5dc7189f516c23bbefa0b11f2e7185ef3277b7aa33a4c84594247c8d7bb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031c9f6fc264902a736faaf67f7c0de6faee097992d30a5ed225cb334c2a3525ec","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5k2QdgzYHk8RK78UMudsgvpBc/1HS5iPQJbOGHNj/YE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e64d90\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 09b3 0594 0314 18e0 | 126 0191 (0) 012b (0) 0111 (0) 025d (0)\n001 6 84a9 be68 a0c8 a330 | 75 b4a1 (0) b5ea (0) b6df (0) b659 (0)\n002 4 d302 d209 c6a8 c74d | 27 ddb8 (0) dbd4 (0) dad0 (0) da36 (0)\n003 3 ff75 f8ff f9de | 14 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n004 4 e867 ed42 eff2 eebd | 7 eb68 (0) e867 (0) ef99 (0) eff2 (0)\n005 3 e09f e2d3 e277 | 4 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n============ DEPTH: 6 ==========================================\n006 1 e471 | 1 e471 (0)\n007 0 | 0\n008 1 e681 | 1 e681 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","private_key":"7d27024b921b4fc8acb154f5988128977df743101939d754b1b2b55b69bf2b2e","name":"node_e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","services":["bzz","pss"],"enable_msg_events":true,"port":44039},"up":true}},{"node":{"info":{"id":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","name":"node_7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","enode":"enode://12b03573c2a76013619215fba5146b7c44aa72aa214d577e70f611196a80f33b6d2332c3736388f5fdb74a5924f3ee97a4f435093835efe46cfa7b049237fe74@127.0.0.1:0","enr":"0xf88fb840c9ef22c878c1759a06aee668ff6358beb1cf4dd0e15021dce3fd0e637754d3cf1bbebf8a3aa0d6e9bc391e27ad7c93101089f6d54bd0257fb3536766cb4258bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10212b03573c2a76013619215fba5146b7c44aa72aa214d577e70f611196a80f33b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fkei+CmEpgDIWDYFqR1cuPLZoYlhhF6cQi7deOIKw6M=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7e47a2\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 84a9 8cc3 c6a8 e64d | 130 ab71 (0) ab3f (0) aaf0 (0) a8b5 (0)\n001 6 298a 2a50 397a 3a62 | 65 3411 (0) 36b9 (0) 3728 (0) 32ff (0)\n002 8 5a26 52a8 4d91 4cec | 35 5ff0 (0) 5c37 (0) 5c7c (0) 5d82 (0)\n003 8 6b4e 6e7f 6d5e 6c01 | 13 68cb (0) 6b4e (0) 6e7f (0) 6c01 (0)\n004 2 7660 741a | 4 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n005 3 7850 79e5 7933 | 4 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n============ DEPTH: 6 ==========================================\n006 4 7d16 7ce7 7c7c 7c46 | 4 7d16 (0) 7ce7 (0) 7c7c (0) 7c46 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","private_key":"aa9445dea3d9ca188039006df2529b909dbd39486296eeeb022fb2dd285c4536","name":"node_7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","services":["bzz","pss"],"enable_msg_events":true,"port":42041},"up":true}},{"node":{"info":{"id":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","name":"node_c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","enode":"enode://454955797f0067874592850e49998fdc19a2c7bd33a4ff25e33927c6558364eaaf7a788b4ec32bb46722acea4d1a61b9755b0779fbdb323a0f1807ccf6337571@127.0.0.1:0","enr":"0xf88fb84055d87acf3986e47cda898bdd603f343a724a7fc35b5f908e71195bea21f0cfae27ff3cda3965530d8614a9170b9f1aed47abe0d78c21209022d88b407fa338f40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103454955797f0067874592850e49998fdc19a2c7bd33a4ff25e33927c6558364ea","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xqgiByYkPM6qbyzr2shXoF7+chMj8KBkx/hag0DT2pY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c6a822\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 3a62 18e0 7e47 | 126 3411 (0) 3728 (0) 36b9 (0) 32ff (0)\n001 5 a0c8 aeb4 95c0 97da | 75 a742 (0) a7a8 (0) a616 (0) a606 (0)\n002 4 e64d eebd ff75 f8ff | 28 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n003 5 d302 d209 dbd4 da36 | 11 ddb8 (0) dad0 (0) da36 (0) dbd4 (0)\n004 3 cd6c c961 c8c8 | 8 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n005 3 c190 c272 c2d0 | 3 c190 (0) c272 (0) c2d0 (0)\n006 2 c42e c534 | 2 c42e (0) c534 (0)\n============ DEPTH: 7 ==========================================\n007 1 c74d | 1 c74d (0)\n008 1 c603 | 1 c603 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","private_key":"8f0f60c08655c540026e8566ec695b938ce61b2b96646b0264adf44d9e42610e","name":"node_c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","services":["bzz","pss"],"enable_msg_events":true,"port":44073},"up":true}},{"node":{"info":{"id":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","name":"node_18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","enode":"enode://339676ff1a748c6537d18f6876bb9f1909665415872fa5d5c3a62ee4142ccd6fceb523240a14dc3df222a387212b8f68be3b473f1299016b0b9d342152f0d610@127.0.0.1:0","enr":"0xf88fb840a9c71d615a4992252278bfec4f901f2a5c0bcd153ec613f025be3ea3b9ec116e7fc2d46f878030a2375d5d8467b882559e854ec34a52e0633388ca26268d39dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102339676ff1a748c6537d18f6876bb9f1909665415872fa5d5c3a62ee4142ccd6f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GOAKfg+Cahq6P4wPUz7ZBfLu5ge2l//wVu54dNN0rc0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 18e00a\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e64d c6a8 | 130 a2e6 (0) a2a1 (0) a327 (0) a330 (0)\n001 3 435d 6d5e 67f3 | 61 5ff0 (0) 5c7c (0) 5c37 (0) 5d82 (0)\n002 5 298a 3051 31e6 31e1 | 28 3411 (0) 3728 (0) 36b9 (0) 32ff (0)\n003 8 096a 0cfc 0e3b 07f5 | 21 012b (0) 0111 (0) 0191 (0) 025d (0)\n004 5 1049 138d 1686 1484 | 7 1049 (0) 1070 (0) 138d (0) 1784 (0)\n005 3 1fd0 1dc0 1dec | 3 1fd0 (0) 1dc0 (0) 1dec (0)\n006 3 1b1d 1bd5 1add | 3 1b1d (0) 1bd5 (0) 1add (0)\n============ DEPTH: 7 ==========================================\n007 2 194e 19ea | 2 19ea (0) 194e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","private_key":"69b0a121df38253f732ead7d4d9eeb8e3c8f00aef1fb652004da58fd2ebf948f","name":"node_18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","services":["bzz","pss"],"enable_msg_events":true,"port":34725},"up":true}},{"node":{"info":{"id":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","name":"node_140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","enode":"enode://83dc6dc1925eb88e36d37f5c7526d73f05174a1253f00d127ad745dd1c054fa3b925abc6cb084f944a9e2d9ca49f821e98bec10d624c3deaab9c7e2954f80e4e@127.0.0.1:0","enr":"0xf88fb8404586a446db7c94f54415cdc0dc16014a70c60a090734bcdd910014501ce446962d9ec042f168a1cdec3b66fed17422d985d8e4114b5fe512b80e9cd3bead80a00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10283dc6dc1925eb88e36d37f5c7526d73f05174a1253f00d127ad745dd1c054fa3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FA3SEvKxk+5qnX/BT32jIcfvb9Nn+08ZSST9CtXRNcw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 140dd2\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 97da d302 c8c8 f8ff | 130 a742 (0) a7a8 (0) a616 (0) a606 (0)\n001 5 447c 447a 435d 4d91 | 61 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n002 3 31e6 3a62 298a | 28 3411 (0) 3728 (0) 36b9 (0) 32ff (0)\n003 8 07f5 0594 0561 0314 | 21 012b (0) 0111 (0) 0191 (0) 025d (0)\n004 7 1fd0 1dc0 1dec 1bd5 | 9 1fd0 (0) 1dc0 (0) 1dec (0) 1b1d (0)\n005 3 1049 1070 138d | 3 1049 (0) 1070 (0) 138d (0)\n============ DEPTH: 6 ==========================================\n006 2 1784 1686 | 2 1686 (0) 1784 (0)\n007 0 | 0\n008 1 1484 | 1 1484 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","private_key":"a027baaf8dce7a0533664447524ef6ad27032751f5eb84a289de80342d0fe705","name":"node_140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","services":["bzz","pss"],"enable_msg_events":true,"port":44825},"up":true}},{"node":{"info":{"id":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","name":"node_09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","enode":"enode://9d74be605030a4907946d4c396dbc3848b07c4d4d5b66b9171d8ba6d5e60a2558a4bfb0bb3a6b54e540d6dc7628eefcd573ba70bdb77f1f5f121cc0799e85e60@127.0.0.1:0","enr":"0xf88fb840b3dec516c58c4b1c9e69344e8b6c2d6dd826b010cbb4c7b61bd88a6ea6693da73750485c7a1a3bdc77bf30c5076e8a5b2b144deaecf8527f717b018f22c4adc80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029d74be605030a4907946d4c396dbc3848b07c4d4d5b66b9171d8ba6d5e60a255","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CbP6MHgJMeGLksddHN6vo2VgnFZeTowlPTk4NcuC2Y4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 09b3fa\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 aeb4 acee a330 a505 | 130 a970 (0) a8f4 (0) a8ff (0) a8b5 (0)\n001 3 435d 7e47 6d5e | 61 5ff0 (0) 5c37 (0) 5c7c (0) 5d82 (0)\n002 6 31e1 3a62 397a 3cab | 28 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n003 2 1dec 140d | 16 1fd0 (0) 1dc0 (0) 1dec (0) 1bd5 (0)\n004 7 0594 0561 07f5 0111 | 10 012b (0) 0111 (0) 0191 (0) 025d (0)\n005 4 0e80 0e3b 0e2b 0cfc | 5 0e80 (0) 0e2b (0) 0e3b (0) 0d1c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 08bd 08e5 08f8 | 3 08bd (0) 08f8 (0) 08e5 (0)\n008 2 0942 096a | 2 0942 (0) 096a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","private_key":"30b0537c3a07c424ed947f31703b416041d6e1ccd1b086cb191d59b53dc632d8","name":"node_09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","services":["bzz","pss"],"enable_msg_events":true,"port":43439},"up":true}},{"node":{"info":{"id":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","name":"node_f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","enode":"enode://51f9bf866b226268237ad44341962115f0595ddc49c87a900c927b7c2c162dae6a3f123b9555e8c0f82927450546ddf8317d461eafe4931b368e709e84b8f060@127.0.0.1:0","enr":"0xf88fb840286a47e012b67dd7b25cc0b9cb9a212019f9b305881989ae09c749fed48a57e16d518566943216dbd238b448ee51fcae686fbc6b12e927e5ab9cfc2d499505000183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10251f9bf866b226268237ad44341962115f0595ddc49c87a900c927b7c2c162dae","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+P90QNb0q7HIlJYzaEN0HtU6VEzt7u1x2OvgsIaYQ40=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f8ff74\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6d5e 67f3 2a50 140d | 126 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n001 7 a330 be68 84a9 8e7b | 75 a8b5 (0) a8f4 (0) a8ff (0) a970 (0)\n002 8 da36 d959 d209 d302 | 27 ddb8 (0) d9cf (0) d959 (0) da36 (0)\n003 6 e867 ed42 eff2 eebd | 14 eb68 (0) e867 (0) ef99 (0) eff2 (0)\n004 3 f2b4 f305 f756 | 7 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n005 2 fc51 ff75 | 4 feb3 (0) ff75 (0) fc39 (0) fc51 (0)\n============ DEPTH: 6 ==========================================\n006 1 fa24 | 1 fa24 (0)\n007 1 f9de | 1 f9de (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","private_key":"d5ad379d43fa81ba9467d7945d0122c5695d2f7ebdf9d7e1c3384191bd5c4d12","name":"node_f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","services":["bzz","pss"],"enable_msg_events":true,"port":41309},"up":true}},{"node":{"info":{"id":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","name":"node_67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","enode":"enode://e379d322e7ad17953d786c9d00289bcf6921926341c7ecf7c128f043b29b702a5b01c6d92c3a39261f59fe8a2ebe5b26edd01d4971f910d0d6e18250e613e301@127.0.0.1:0","enr":"0xf88fb8400be4b9b202ed1e87dd987244284a9c5a5ad6c866e575c7ec5a929b2e91efad41349b08437a98a0f2909c85c3eedc1f2ba650f16d0a0fcb33ec7276e6cc22801e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e379d322e7ad17953d786c9d00289bcf6921926341c7ecf7c128f043b29b702a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z/OD5TNOm2cB0duyCHbUupp+V4rwR2yu1KfhtwHyvts=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67f383\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 84a9 8854 97da d302 | 130 a8b5 (0) a8ff (0) a8f4 (0) a970 (0)\n001 3 298a 18e0 0594 | 65 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n002 3 4d91 447a 435d | 35 5ff0 (0) 5c7c (0) 5c37 (0) 5d82 (0)\n003 3 741a 7933 7e47 | 13 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n004 6 6b4e 68cb 6e7f 6c01 | 7 68cb (0) 6b4e (0) 6e7f (0) 6c01 (0)\n005 1 60c5 | 1 60c5 (0)\n006 1 648a | 1 648a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 6758 | 1 6758 (0)\n009 2 6790 6795 | 2 6790 (0) 6795 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","private_key":"b8e7f7fd21a946d988fa718b9babed932cf73070403fbd1c56456f04b8243262","name":"node_67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","services":["bzz","pss"],"enable_msg_events":true,"port":34903},"up":true}},{"node":{"info":{"id":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","name":"node_05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","enode":"enode://b3698b249bc2ecf1f856c3e3f12be6868853b3aa64fe9685b03162dd2a7afd9c491d8328e465d64d17fa49aa429a13c10f1db958b6ab89988370d6465cc0fc01@127.0.0.1:0","enr":"0xf88fb8408c0c34055a93806f387d7f730226b400b33e051c8aabfdda7c998e756544709f2476a88d4935a5c9776c54d5b8a5100260193615759717d3a016f9791a671cc40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b3698b249bc2ecf1f856c3e3f12be6868853b3aa64fe9685b03162dd2a7afd9c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BZSewaWC+nDKuVxZ58DTFVg7+fwyDGDDUmiTHyHpCFM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 05949e\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 97da 8854 ed42 e64d | 130 a970 (0) a8f4 (0) a8ff (0) a8b5 (0)\n001 4 4cec 7e47 6d5e 67f3 | 61 5ff0 (0) 5c37 (0) 5c7c (0) 5d82 (0)\n002 6 298a 3cab 397a 3a62 | 28 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n003 3 140d 18e0 194e | 16 1fd0 (0) 1dc0 (0) 1dec (0) 1add (0)\n004 5 096a 09b3 08e5 0e2b | 11 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n005 6 0111 012b 0191 025d | 6 012b (0) 0111 (0) 0191 (0) 025d (0)\n006 1 07f5 | 1 07f5 (0)\n============ DEPTH: 7 ==========================================\n007 1 046c | 1 046c (0)\n008 1 0561 | 1 0561 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","private_key":"13a0aed3cdf03f83f823244e85cbe9e48d61303a1b41e446aadaaf74a2baf6b0","name":"node_05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","services":["bzz","pss"],"enable_msg_events":true,"port":45769},"up":true}},{"node":{"info":{"id":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","name":"node_6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","enode":"enode://191668a4f4a65da7ee37d46e341722e5a4732a0c63dd8b881141e9c281dc8d7f3f148af361d221bf7efa91709c24772b3a1e93236b9605d17fad43e159cbda30@127.0.0.1:0","enr":"0xf88fb840127e770bef790f2f06aeaf24547639a81249e512c9a9e3b2987bb161f1357f021587b4c9c833ef4c5d09f974548ac56b1b375d388486cbb12cd090e542ae43f30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102191668a4f4a65da7ee37d46e341722e5a4732a0c63dd8b881141e9c281dc8d7f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bV7Fka9JZroCTGsq60XgqriqF2L5ysMM45NNpSm3OOk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6d5ec5\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 f8ff ed42 97da 8854 | 130 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n001 3 18e0 09b3 0594 | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 4d91 402c 435d | 35 5987 (0) 5814 (0) 5bd8 (0) 5a26 (0)\n003 7 70f6 7660 741a 7e47 | 13 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n004 6 60c5 648a 6758 6790 | 6 60c5 (0) 648a (0) 6758 (0) 6790 (0)\n005 2 68cb 6b4e | 2 68cb (0) 6b4e (0)\n006 1 6e7f | 1 6e7f (0)\n007 1 6c01 | 1 6c01 (0)\n============ DEPTH: 8 ==========================================\n008 1 6dd3 | 1 6dd3 (0)\n009 1 6d3c | 1 6d3c (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","private_key":"1ce56a7fe145cc7c87edd8b2675d674db568652b226b80f6da7067c83cba55ec","name":"node_6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","services":["bzz","pss"],"enable_msg_events":true,"port":39153},"up":true}},{"node":{"info":{"id":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","name":"node_435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","enode":"enode://18eb16b8694f440ee7d57163d9cc8181ca5f025dacb16f9afb9e58ea8abdcbbaebed0ab1b856f73ab5ded12b5dd300849b1a721d73e0ac123cc5257373fee65a@127.0.0.1:0","enr":"0xf88fb84017e1348ced6a8488d50ff1773f2ad15c93bee9787be7b6795975b9e5ccb93d777c45645553471401c9fbd354d809e36f1abd98fff3f15723ffdd3f858086833e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10218eb16b8694f440ee7d57163d9cc8181ca5f025dacb16f9afb9e58ea8abdcbba","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Q11yGlaOuQagPGnb1xM3JRpVBSGkAEq11KfetvMXBho=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 435d72\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8854 c8c8 | 130 a8b5 (0) a8ff (0) a8f4 (0) a970 (0)\n001 6 3cab 31e1 31e6 140d | 65 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n002 3 7e47 67f3 6d5e | 26 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n003 5 5d82 5a8b 5a26 5144 | 16 5ff0 (0) 5c7c (0) 5c37 (0) 5d82 (0)\n004 6 482e 4b79 4a95 4cec | 10 48b8 (0) 48f1 (0) 48de (0) 48d7 (0)\n005 4 46bf 44ad 447a 447c | 4 46bf (0) 44ad (0) 447a (0) 447c (0)\n006 2 4005 402c | 2 4005 (0) 402c (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 43d4 43c9 | 2 43d4 (0) 43c9 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","private_key":"04326eafbd95ad027f8f4ffe10d64e65b512f2cc4905d138d81f6852b9b0dace","name":"node_435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","services":["bzz","pss"],"enable_msg_events":true,"port":44895},"up":true}},{"node":{"info":{"id":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","name":"node_c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","enode":"enode://c74190c0b1b29a5dd50900f0a04a79e60cdc6b3850d663aee32c681c279fe21cb701d8a3414eb18446e769ba8612766d1ed0240d80c3f6df1a1304d7326c21f0@127.0.0.1:0","enr":"0xf88fb8402b4c635d8867172a6c2a46b297fdd9c8bd917476a45883bc2cf7818442ff495622a30b7d13a6e26a66418c8572b882977e2535a91a46e244bed314001414664e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c74190c0b1b29a5dd50900f0a04a79e60cdc6b3850d663aee32c681c279fe21c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yMipN3nsTZrECSXoIIR4oA7if8Ig3dc9h3TPa/olXEY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c8c8a9\npopulation: 23 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 140d 0594 435d | 126 1fd0 (0) 1dc0 (0) 1dec (0) 1b1d (0)\n001 3 be68 8854 97da | 75 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n002 3 ed42 f9de f8ff | 28 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n003 5 d959 dbd4 dad0 d209 | 11 ddb8 (0) d9cf (0) d959 (0) da36 (0)\n004 3 c74d c603 c6a8 | 8 c190 (0) c2d0 (0) c272 (0) c42e (0)\n005 3 cf52 cdb1 cd6c | 4 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 c9c3 c961 | 2 c9c3 (0) c961 (0)\n008 0 | 0\n009 0 | 0\n010 1 c8ea | 1 c8ea (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","private_key":"4e1a61cde64af44b0dda77ec6ccf177754acdcf8296a2f6a28f809a3edd78a51","name":"node_c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","services":["bzz","pss"],"enable_msg_events":true,"port":37665},"up":true}},{"node":{"info":{"id":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","name":"node_97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","enode":"enode://e1a0b593eb6718290b19a241af012bcd050ba91442c444f9cb2728679fbaff94ae18b9344b896242f38d5cc5e5c71365c9b569d2b8c6e75c7237ad6399d03af0@127.0.0.1:0","enr":"0xf88fb8406126b86c32443771ffd4fe3aa1679a8627ee6dac7eb5d4ca51c1cea7b6742a093d407bde58a20a099b8dedea0066471ae30fbef9362c0a2d24ee87b0e22e50f80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e1a0b593eb6718290b19a241af012bcd050ba91442c444f9cb2728679fbaff94","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"l9ryy+A8gM5sTa45zQcd2TyzLtJFqpqncoXhIpaVfKM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 97daf2\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 67f3 6b4e 6d5e 4cec | 126 1fd0 (0) 1dc0 (0) 1dec (0) 1add (0)\n001 5 f8ff f9de ed42 c6a8 | 55 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n002 3 a505 bfc7 be68 | 37 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n003 5 80d7 834f 837f 84a9 | 21 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n004 4 9c8e 9f0e 9959 9948 | 9 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n005 2 9257 93ea | 3 9257 (0) 93c0 (0) 93ea (0)\n============ DEPTH: 6 ==========================================\n006 4 9464 955d 9518 95c0 | 4 9464 (0) 955d (0) 9518 (0) 95c0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","private_key":"65fbf9c544386bb7decc36886fba5c38238694e8e4ed0840b82ca0297e58b620","name":"node_97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","services":["bzz","pss"],"enable_msg_events":true,"port":33903},"up":true}},{"node":{"info":{"id":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","name":"node_885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","enode":"enode://53546a710a035309f1cbff35e8971bc7e690c23561599cf911a655235c34c063b6e49304da7dba56252e94bad64391e6e125b5e05162b0ddadf4822b5a2675b2@127.0.0.1:0","enr":"0xf88fb8407997f2172b5d153c60a8f8632c854da0dfb927a300de8988efc5d43eea68d0b035456f1e0f6f5cb8376ed14fe4c0d5884d94539a49bf8452ad524f86113a29740183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10253546a710a035309f1cbff35e8971bc7e690c23561599cf911a655235c34c063","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iFQnMYY0xFijBQ8vJutSRUp1zqShJjue1V5uuJl0OFQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 885427\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 0594 31e1 31e6 3cab | 126 012b (0) 0111 (0) 0191 (0) 025d (0)\n001 7 dbd4 d302 c6a8 c8c8 | 55 ddb8 (0) d959 (0) d9cf (0) da36 (0)\n002 7 a8ff acee a2a1 a606 | 37 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n003 7 9959 9948 9c8e 9f0e | 17 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n004 4 84a9 80d7 837f 834f | 12 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n005 5 8cc3 8d19 8f9a 8e28 | 6 8f9a (0) 8ea2 (0) 8e28 (0) 8e7b (0)\n============ DEPTH: 6 ==========================================\n006 1 8b43 | 1 8b43 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 8862 | 1 8862 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","private_key":"2dbbc994f617a8ec6183e97342de018005e6067b99283fdcef5b5d8dee384215","name":"node_885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","services":["bzz","pss"],"enable_msg_events":true,"port":36713},"up":true}},{"node":{"info":{"id":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","name":"node_ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","enode":"enode://a37137b1144735e571b2b0d8386ee87d4a549cfca4fd3fdddcb70745a7ce46fbc54b5d7b73e96de787896a234c4d22462e56a95a8dd6436cce4058d48847b44f@127.0.0.1:0","enr":"0xf88fb8409e3a3caf38d98642bade767220e7e62bad581c331b1e79c7a8fb576b7f80965e6d8d4d2163232397c431ac51260f72fee0862a1d49e2fab3b62f851a6f9a52430183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a37137b1144735e571b2b0d8386ee87d4a549cfca4fd3fdddcb70745a7ce46fb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7UJNJNcCUgv3y19rq73EOgeENftKmITtgqk9ZCg54Sc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ed424d\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 0594 397a 31e1 447c | 126 025d (0) 035f (0) 0314 (0) 0111 (0)\n001 5 be68 bfc7 ab3f 97da | 75 a8b5 (0) a8f4 (0) a8ff (0) a970 (0)\n002 6 d302 dbd4 dad0 cd6c | 27 ddb8 (0) d959 (0) d9cf (0) da36 (0)\n003 3 f645 f8ff f9de | 14 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n004 2 e64d e277 | 7 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n005 2 eb68 e867 | 2 eb68 (0) e867 (0)\n============ DEPTH: 6 ==========================================\n006 3 eebd ef99 eff2 | 3 ef99 (0) eff2 (0) eebd (0)\n007 1 ec90 | 1 ec90 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","private_key":"88f389b4ef227125edc26120d238800734b5410e04322c15e248c5f216cc79c9","name":"node_ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","services":["bzz","pss"],"enable_msg_events":true,"port":39221},"up":true}},{"node":{"info":{"id":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","name":"node_67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","enode":"enode://cb89fe308a6760281a69d0737d0d373c9115feed0da089e0c2fcbc632089bf098dc65445404a53c75abf5006078392d46230c01bfbc96678614d72ba1f7ed94a@127.0.0.1:0","enr":"0xf88fb84062af8663cd95c946ddf91876f7724b51ef50c4562e116101de9830fa163e131e43857e1a002e03e8cffc1422472e7fc9638932823b58484aac2e28aba63484720183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cb89fe308a6760281a69d0737d0d373c9115feed0da089e0c2fcbc632089bf09","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z1hd/YegBbrpv/wszLg8aVNyR8dIhrT6Uih/RseWvLY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67585d\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a505 eebd ed42 | 130 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n001 5 194e 0cfc 31e1 31e6 | 65 025d (0) 035f (0) 0314 (0) 012b (0)\n002 2 447a 4cec | 35 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n003 4 7850 7933 7c46 7e47 | 13 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n004 5 6b4e 6e7f 6c01 6dd3 | 7 6e7f (0) 6c01 (0) 6dd3 (0) 6d3c (0)\n005 1 60c5 | 1 60c5 (0)\n006 1 648a | 1 648a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 3 67f3 6790 6795 | 3 6790 (0) 6795 (0) 67f3 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","private_key":"269bc398581870d669185abbe5f5c9b2f0e731c8e3f48a13c092c65822208065","name":"node_67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","services":["bzz","pss"],"enable_msg_events":true,"port":38253},"up":true}},{"node":{"info":{"id":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","name":"node_4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","enode":"enode://80e251b60502a0ca85c11875b9277729738dede4fe4d9da6aeac1bb93d7238ca81487fe9498180e00b10f3c24d030f8c399f02859b795d662a07dd7925bac295@127.0.0.1:0","enr":"0xf88fb8402acfbb34a162aefb2c548c72269c23643ae0c7bbc60406858fa6a60e304f225874d92d713f75b155bc9b1e2b135e732ae7a89a0f2dc1d4a1768bf1752a8b72ef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10380e251b60502a0ca85c11875b9277729738dede4fe4d9da6aeac1bb93d7238ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TOzpvBNLwrCUAMn3+KTfknDS/jwHfF5EH//JEfz29C4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4cece9\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f9de 97da 8854 | 130 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n001 4 0594 194e 140d 31e1 | 65 025d (0) 035f (0) 0314 (0) 012b (0)\n002 5 7850 7933 7c46 7e47 | 26 7049 (0) 70f6 (0) 741a (0) 7660 (0)\n003 4 52a8 5ac0 5a8b 5d82 | 16 5538 (0) 56ca (0) 5663 (0) 50c1 (0)\n004 5 435d 43d4 402c 447a | 9 46bf (0) 44ad (0) 447a (0) 447c (0)\n005 7 48b8 48f1 48d7 48de | 7 48b8 (0) 48f1 (0) 48d7 (0) 48de (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 4d38 4d91 | 2 4d38 (0) 4d91 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","private_key":"745ab9f5dd6b46c5ac98c2548026c8c305b3a532b9a83e9721126e740be9bb3d","name":"node_4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","services":["bzz","pss"],"enable_msg_events":true,"port":40221},"up":true}},{"node":{"info":{"id":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","name":"node_31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","enode":"enode://f25dcda2d8dc59f4bd92c76bbc67662093243b8b2cfc966b9184fff854c66ec74507189ff7b3d4f89c266f79e8204f53b2ed2528ad9c3988b8d2e102ccd8ca05@127.0.0.1:0","enr":"0xf88fb840f2ed7d35799356b01b8172d9212f95f949f3ac3c3d9805388236bfae93eb4a0a2a4ea72335f7564107155b17384251f99007367bcd5afdea76fc4f8eee53b3920183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f25dcda2d8dc59f4bd92c76bbc67662093243b8b2cfc966b9184fff854c66ec7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MeEpqz334ILMJ8ZJ2e4po+pkbWqX0kF4dbgOP/V2wEc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 31e129\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 ed42 8854 97da | 130 a8b5 (0) a8f4 (0) a8ff (0) a970 (0)\n001 3 6758 435d 4cec | 61 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n002 8 18e0 194e 0314 0191 | 37 025d (0) 035f (0) 0314 (0) 012b (0)\n003 2 2a50 298a | 11 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n004 7 3a62 3b02 3980 397a | 8 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n005 3 3411 36b9 3728 | 3 3411 (0) 36b9 (0) 3728 (0)\n006 1 32ff | 1 32ff (0)\n007 2 30fe 3051 | 2 30fe (0) 3051 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 3188 | 1 3188 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 31e6 | 1 31e6 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","private_key":"6f326011c258ea982e622f9e58986cda7a19e77bfef9c62969474eeca0a3d8bd","name":"node_31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","services":["bzz","pss"],"enable_msg_events":true,"port":41755},"up":true}},{"node":{"info":{"id":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","name":"node_31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","enode":"enode://f7c60635eb672476a7495b71f8dbcf2e50096b636d779195890b040d3a29f30617ac3ff34852bd1caadb9357ed844fd29cb9919f774986b1532f30e8fb5701f1@127.0.0.1:0","enr":"0xf88fb8401d011f6dc991e8d64cfd4b5595b6bcfa3a705c57e6f4494f8b1bc0ce443b738a6f0f975dbfaeda383333324db5b52840e0e34f48d194ee2ec25548336a6196aa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f7c60635eb672476a7495b71f8dbcf2e50096b636d779195890b040d3a29f306","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MeZwY4rLo9WPTGfz/y8/Jddp6KXXp4OJJ/TZ0WmoRAQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 31e670\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 97da 8854 f9de | 130 a8b5 (0) a8f4 (0) a8ff (0) a970 (0)\n001 4 6b4e 6758 435d 4d91 | 61 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n002 8 138d 140d 18e0 194e | 37 025d (0) 035f (0) 0314 (0) 012b (0)\n003 2 2a50 298a | 11 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n004 6 3b02 3a62 397a 3f31 | 8 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n005 2 36b9 3728 | 3 3411 (0) 3728 (0) 36b9 (0)\n006 1 32ff | 1 32ff (0)\n007 2 30fe 3051 | 2 30fe (0) 3051 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 3188 | 1 3188 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 31e1 | 1 31e1 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","private_key":"4d4953737261cf103a7e8d13c536e05949f4fc81404cbb94631badeed94837ae","name":"node_31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","services":["bzz","pss"],"enable_msg_events":true,"port":44433},"up":true}},{"node":{"info":{"id":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","name":"node_f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","enode":"enode://4cbf242837d8648b219a54398f6646ffe9e4729be3c43431284b27b6f6be2ee2f1267c6ea399699ca10b43dc11dcfb86fc2958e56b558b31d7679ae4493a37a9@127.0.0.1:0","enr":"0xf88fb840373f3de0559f7684b4ce5d159798f351f1bdf5f6792f3e506c2ccd904f07acae6955eaa902b5ad78809cebc0dc80ab7000ede03782617ca114ea23734f786c0b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034cbf242837d8648b219a54398f6646ffe9e4729be3c43431284b27b6f6be2ee2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+d7XuD5HPnG+L8AQHVdMRFIclvd/n4SjhHhaOvaxCT0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f9ded7\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 4cec 2a50 3cab 31e6 | 126 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n001 4 be68 95c0 97da 8854 | 75 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n002 9 ddb8 d9cf dad0 dbd4 | 27 d700 (0) d408 (0) d209 (0) d3e9 (0)\n003 6 e277 e64d e867 eff2 | 14 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n004 5 f756 f645 f1ed f215 | 7 f756 (0) f6c0 (0) f645 (0) f305 (0)\n005 4 feb3 ff75 fc39 fc51 | 4 ff75 (0) feb3 (0) fc39 (0) fc51 (0)\n============ DEPTH: 6 ==========================================\n006 1 fa24 | 1 fa24 (0)\n007 1 f8ff | 1 f8ff (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","private_key":"560da7a87ffd5a5bf49023d7b80398255aa1e028182ddc8fb2d8d256ecb672cf","name":"node_f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","services":["bzz","pss"],"enable_msg_events":true,"port":35959},"up":true}},{"node":{"info":{"id":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","name":"node_3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","enode":"enode://f292084e170293ef0d10591a7f596160c60090fb507add19279ae94ea15d4a935fee18917eb7afa876ce5961dccb0b6ab2e150bc746f0b6ce06b845fde8484d4@127.0.0.1:0","enr":"0xf88fb840aab20c00818aacbcf3d572ad9eb90bf3e50ed4ddeca68551ddaa751a781060ff1e937ba61f3905c35d7615ed44caed38be61740bf970af0c891c6da983e1dad90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f292084e170293ef0d10591a7f596160c60090fb507add19279ae94ea15d4a93","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PKvTpWf8Tm+Npm6zXZOP4emn8r3S02xNwtDg6RSfXlY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3cabd3\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9f0e 97da 8854 f9de | 130 a8b5 (0) a8f4 (0) a8ff (0) a970 (0)\n001 3 435d 6758 6b4e | 61 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n002 4 194e 0594 09b3 0cfc | 37 025d (0) 035f (0) 0314 (0) 012b (0)\n003 4 26ab 2c85 298a 2a50 | 11 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n004 6 36b9 3728 3051 3188 | 9 3411 (0) 36b9 (0) 3728 (0) 32ff (0)\n005 5 3b02 3a62 3980 3938 | 5 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n============ DEPTH: 6 ==========================================\n006 1 3f31 | 1 3f31 (0)\n007 0 | 0\n008 1 3c5b | 1 3c5b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","private_key":"b5d0c48905d715632a6aaabb360e0f68e9cd27a16403c0a46de69e46c63ddcbd","name":"node_3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","services":["bzz","pss"],"enable_msg_events":true,"port":37601},"up":true}},{"node":{"info":{"id":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","name":"node_6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","enode":"enode://6489e2a9199837f8fb02ee32e8a8e76e29774f8596d0fdffe3d8b41ba49e47585c8ed3fd4fc87f5fe51217783eacc9f05e2b81b3388080fed75911cd15725490@127.0.0.1:0","enr":"0xf88fb840ac0ad126e5eaf3e3023aba08512eb98162e314d5a5bb8c9c237526d01a89099e074ee06f4d91f3f53b223df357b13d025dfc152842f36944651f957be64820720183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026489e2a9199837f8fb02ee32e8a8e76e29774f8596d0fdffe3d8b41ba49e4758","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"a07htzlCztePl8DQ4iEgmTPmOuc1O7mrPTesQSdZLoY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6b4ee1\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 eebd a505 be68 8854 | 130 af02 (0) aeb4 (0) acee (0) a970 (0)\n001 4 0cfc 31e6 3b02 3cab | 65 025d (0) 035f (0) 0314 (0) 012b (0)\n002 2 447c 4d91 | 35 5538 (0) 56ca (0) 5663 (0) 52a8 (0)\n003 4 7e47 7c46 7850 7933 | 13 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n004 6 60c5 648a 67f3 6790 | 6 60c5 (0) 648a (0) 6790 (0) 6795 (0)\n============ DEPTH: 5 ==========================================\n005 5 6e7f 6c01 6dd3 6d3c | 5 6c01 (0) 6dd3 (0) 6d3c (0) 6d5e (0)\n006 1 68cb | 1 68cb (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","private_key":"55cabfb948c8655f9b1b9a73378029595cbbc8676d1e8109d34bed3ed4d363ec","name":"node_6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","services":["bzz","pss"],"enable_msg_events":true,"port":35557},"up":true}},{"node":{"info":{"id":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","name":"node_4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","enode":"enode://3047ce86e36b5df4ad3ba58da463012de954e7d23e30785281cd29a6cd9b53415ddca770f01615455e2191b2868a81fe90acb8c2c55af4d0b6a28cff220f27d0@127.0.0.1:0","enr":"0xf88fb8408ea2548809d57c51f6a345099fec0eb50bd94967e457cda4f7e809111d8191382d22aae732783fafb04e860e20a244e746261107b3adc670153e02d137b1dfca0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023047ce86e36b5df4ad3ba58da463012de954e7d23e30785281cd29a6cd9b5341","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TZFH47+Yy1mnZI9hbA1/cTqM87fSXjEVIz/1iDEovqs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d9147\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 be68 95c0 ed42 eebd | 130 d700 (0) d408 (0) d209 (0) d3e9 (0)\n001 7 140d 1bd5 194e 0cfc | 65 025d (0) 035f (0) 0314 (0) 012b (0)\n002 4 7e47 67f3 6d5e 6b4e | 26 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n003 2 5d82 5a8b | 16 50c1 (0) 5144 (0) 52a8 (0) 5538 (0)\n004 4 447c 447a 435d 402c | 9 4005 (0) 402c (0) 43c9 (0) 43d4 (0)\n005 7 4a95 4b79 48b8 48d7 | 7 4b79 (0) 4a95 (0) 48b8 (0) 48f1 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 4cec | 1 4cec (0)\n008 1 4d38 | 1 4d38 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","private_key":"7dfa845b9c68e8058b6cff027cac1e713602c7d9e8ac4f04b0698a044871211e","name":"node_4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","services":["bzz","pss"],"enable_msg_events":true,"port":36001},"up":true}},{"node":{"info":{"id":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","name":"node_397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","enode":"enode://755abc3fa17f10b0c6bb93f9525352b3827f6e3f98bd74e4e52420017500a44983656b92a4a1253ead59da4030b30232f86d214431ad83949e6b218222c8c520@127.0.0.1:0","enr":"0xf88fb840486c18e5673883f3888ab658643d9e0012443ec6ca0c40e6876961396f39f722009fb44a458d56561c9ac5f302f47b069f97c94986e68ef69e0513431f4d0d9a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102755abc3fa17f10b0c6bb93f9525352b3827f6e3f98bd74e4e52420017500a449","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OXoKDp+ty1cazYmB9b/o4FnnB+D+roqcTGv+h7055mo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 397a0a\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 9f0e be68 ed42 eebd | 130 d700 (0) d408 (0) d209 (0) d3e9 (0)\n001 3 7e47 7c46 4d91 | 61 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n002 5 0191 0594 09b3 1bd5 | 37 046c (0) 0594 (0) 0561 (0) 07f5 (0)\n003 3 2e65 2a50 298a | 11 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n004 6 3411 36b9 3051 3188 | 9 3411 (0) 36b9 (0) 3728 (0) 32ff (0)\n005 3 3f31 3c5b 3cab | 3 3c5b (0) 3cab (0) 3f31 (0)\n006 2 3b02 3a62 | 2 3b02 (0) 3a62 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 3980 | 1 3980 (0)\n009 1 3938 | 1 3938 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","private_key":"e7af2fa49f44ec8fb20007e24a24e4d54f98188bf25d133631e2f2ae2455b7e5","name":"node_397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","services":["bzz","pss"],"enable_msg_events":true,"port":46385},"up":true}},{"node":{"info":{"id":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","name":"node_194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","enode":"enode://c55b0a9cce8421ed641876de3f9fed4b8a2fb2ef501cc2fa2c6c648609322114009de6258aa164d605ba2839658265bbb44a89d9ed9dbdbafa2f6d0451b75999@127.0.0.1:0","enr":"0xf88fb8406b407aefd0711536e0d1d66333664fef8325d87d5c12dcdfe5736ad122c4f05833ae95d2691865c2a66a8400c4112b32b073bb084564d49d1037bdfe563b3c890183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c55b0a9cce8421ed641876de3f9fed4b8a2fb2ef501cc2fa2c6c648609322114","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GU6j4U3F2Z+Y0VYH3ExAV2n1o3Gswi1Bpi0FN9cWvjI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 194ea3\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 95c0 ab3f be68 eebd | 130 d700 (0) d408 (0) d209 (0) d3e9 (0)\n001 5 6758 5d82 4cec 4d91 | 61 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n002 5 298a 31e6 31e1 3cab | 28 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n003 6 0561 0594 07f5 0191 | 21 046c (0) 0594 (0) 0561 (0) 07f5 (0)\n004 4 1049 1686 1484 140d | 7 138d (0) 1070 (0) 1049 (0) 1784 (0)\n005 2 1fd0 1dec | 3 1fd0 (0) 1dc0 (0) 1dec (0)\n006 3 1b1d 1bd5 1add | 3 1add (0) 1b1d (0) 1bd5 (0)\n============ DEPTH: 7 ==========================================\n007 1 18e0 | 1 18e0 (0)\n008 1 19ea | 1 19ea (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","private_key":"5ff701f0b31e5dfbd321b192941d8a7e41af8a30830fa9c299a338bbfd3a8ee6","name":"node_194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","services":["bzz","pss"],"enable_msg_events":true,"port":40883},"up":true}},{"node":{"info":{"id":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","name":"node_0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","enode":"enode://1c7485ed433143e6155988aead862aabcc93379a3897b443d75e1d2bce71c04cb75fea9591ed5e36b41949620e51fa8503ec72be6dd0b35a6405747b4dafc014@127.0.0.1:0","enr":"0xf88fb8402d44bd3da0be88d95e8011c9ae2754ea517a35bcf004b02da2673b824687e150720f9fc230cb05afe3de5214e1b1fc4da7501f86b228946800880e9f3af671580183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021c7485ed433143e6155988aead862aabcc93379a3897b443d75e1d2bce71c04c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DPxzCa+rzut9JIcU6XLPOYcgUyT1q40EjRe+pdyHNp0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0cfc73\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ddb8 d302 d408 95c0 | 130 d700 (0) d408 (0) d209 (0) d3e9 (0)\n001 6 5ac0 4d91 447c 6758 | 61 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n002 3 31e6 31e1 3cab | 28 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n003 5 140d 1dec 1bd5 18e0 | 16 138d (0) 1070 (0) 1049 (0) 1686 (0)\n004 6 0191 0111 0314 07f5 | 10 025d (0) 035f (0) 0314 (0) 012b (0)\n005 5 08bd 08f8 08e5 09b3 | 6 08e5 (0) 08f8 (0) 08bd (0) 09b3 (0)\n============ DEPTH: 6 ==========================================\n006 3 0e80 0e3b 0e2b | 3 0e80 (0) 0e2b (0) 0e3b (0)\n007 1 0d1c | 1 0d1c (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","private_key":"35dace76ca3522b7137c5d74398db392e8341bb9003f933fdc14452fd1750019","name":"node_0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","services":["bzz","pss"],"enable_msg_events":true,"port":44149},"up":true}},{"node":{"info":{"id":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","name":"node_95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","enode":"enode://098c38172926d2bea42728e3631de32062e6ec72da225a5737de50e5ec60e3eed42ee486959bdab553e465298a18c4ebf4c31dbdc77cfde7fe165cf86acb2695@127.0.0.1:0","enr":"0xf88fb84033fceafba7c7cd03f8de801dcdc01997dfe2a50ddb89b115c4d5ad40b7834b060eb29e4c2bd6811003ef36b75d39ed9c2effaca4138325ec3793c254b322f4880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103098c38172926d2bea42728e3631de32062e6ec72da225a5737de50e5ec60e3ee","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lcCjUft6pmgygNFZp7gIv6Y/Y7/5GhxZNulzsuXTlU8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 95c0a3\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6e7f 6b4e 4d91 194e | 126 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n001 6 dad0 cd6c c6a8 f8ff | 55 d700 (0) d408 (0) d209 (0) d3e9 (0)\n002 3 a505 bfc7 be68 | 37 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n003 6 8854 8e28 8cc3 80d7 | 21 8f9a (0) 8ea2 (0) 8e28 (0) 8e7b (0)\n004 5 9b8e 9948 9959 9c8e | 9 9b8e (0) 9948 (0) 9959 (0) 9ca1 (0)\n005 3 93ea 93c0 9257 | 3 9257 (0) 93c0 (0) 93ea (0)\n006 1 97da | 1 97da (0)\n007 1 9464 | 1 9464 (0)\n============ DEPTH: 8 ==========================================\n008 2 955d 9518 | 2 9518 (0) 955d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","private_key":"7c5cc685e77cf467257beb319c99f13ca9f2ba8294453271e7b01ae359184ca1","name":"node_95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","services":["bzz","pss"],"enable_msg_events":true,"port":38003},"up":true}},{"node":{"info":{"id":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","name":"node_eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","enode":"enode://e9ac9501ff66e4b8ea683a68019f6bf5a21283fbafd33abad3cd4def147e9ec20faed07f28001ad9a4cb0945ef8aab11edf8900123aa675bb29d6cbfb61ded08@127.0.0.1:0","enr":"0xf88fb8401e043e047731f0dcc2fa094bec2d3f0bebfdde7d067a07090d6e6a7ead1363fb2e8a68ddef0fdb8ed02a84edde2858d72a925a8c5e3f18ee29305be781dde3720183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e9ac9501ff66e4b8ea683a68019f6bf5a21283fbafd33abad3cd4def147e9ec2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7r1Is2fL/pSjfA3rJ0ppfmKAdPlWC5CeZiKcXHbOaOs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eebd48\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 6758 6b4e 6e7f 447c | 126 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n001 6 ab3f a2a1 b78f bfc7 | 75 acee (0) af02 (0) aeb4 (0) a970 (0)\n002 6 c6a8 cd6c c961 d302 | 27 d700 (0) d408 (0) d209 (0) d3e9 (0)\n003 5 f645 fc51 fa24 f9de | 14 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n004 3 e09f e277 e64d | 7 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n005 2 eb68 e867 | 2 eb68 (0) e867 (0)\n006 2 ec90 ed42 | 2 ec90 (0) ed42 (0)\n============ DEPTH: 7 ==========================================\n007 2 ef99 eff2 | 2 ef99 (0) eff2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","private_key":"4f0005282a0cc3f4b0bbfbd57d4c18e1df8aee920756f2a469757e0670fb809e","name":"node_eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","services":["bzz","pss"],"enable_msg_events":true,"port":34859},"up":true}},{"node":{"info":{"id":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","name":"node_019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","enode":"enode://ac2123ba0df13d4d5dedbf061b751663af9ae100483d32007792511aba8ecca19b25c53b126dc1b230691c0f0e34057f622e2e4a1154f5eb34f872fc4651862d@127.0.0.1:0","enr":"0xf88fb840e6b23feb9b9d2bc1558c310f1a6d9fc8645da4e28517dbef118974963144e2cb477c6621f4cc9338fe7d53e749bd0bcf825ff2b6ae2ddb89ee2fd1963be821f60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ac2123ba0df13d4d5dedbf061b751663af9ae100483d32007792511aba8ecca1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AZEJMR1IiEl6oZTM5KibXvJDQhzw5+e7kRXQhuGh99c=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 019109\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 be68 eebd | 130 aeb4 (0) af02 (0) acee (0) a970 (0)\n001 2 6e7f 447c | 61 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n002 5 31e6 31e1 3051 397a | 28 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n003 4 1686 1bd5 18e0 194e | 16 138d (0) 1070 (0) 1049 (0) 1784 (0)\n004 4 0cfc 0e2b 09b3 096a | 11 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n005 4 07f5 046c 0594 0561 | 4 046c (0) 0594 (0) 0561 (0) 07f5 (0)\n006 3 0314 035f 025d | 3 025d (0) 035f (0) 0314 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 012b 0111 | 2 012b (0) 0111 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","private_key":"8e22619e3e2e8484ded659b762691a898a0e95db9ecb04fac8c645f9cbaa1ff1","name":"node_019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","services":["bzz","pss"],"enable_msg_events":true,"port":35711},"up":true}},{"node":{"info":{"id":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","name":"node_447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","enode":"enode://256210b1641ad84c86fe1328a20490519df62a633e20426cb397dd62fc45b75971a55b94bb3a9b406e3fa0d56199c6290e89ec39b02021a462dd9ae8c1a74dc4@127.0.0.1:0","enr":"0xf88fb8408521fdc8311021e64bb28400fcfe6d060a33e4e5328f8cd52c882406b2502f1e5a48985f07c853ccba2176cf80d29128a0e61566df6c6b199c27ecf33e00a7fb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102256210b1641ad84c86fe1328a20490519df62a633e20426cb397dd62fc45b759","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RHzb8f9GKqZ9akYIWxqE/cSVpBQqsXTI5psnGwlzK00=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 447cdb\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 cd6c ed42 eebd 834f | 130 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n001 8 3051 3f31 140d 1bd5 | 65 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n002 4 7933 7e47 6b4e 6e7f | 26 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n003 2 5d82 5a8b | 16 5663 (0) 56ca (0) 5538 (0) 52a8 (0)\n004 5 482e 48de 4d91 4d38 | 10 4b79 (0) 4a95 (0) 482e (0) 48b8 (0)\n005 5 4005 402c 43d4 43c9 | 5 4005 (0) 402c (0) 43d4 (0) 43c9 (0)\n006 1 46bf | 1 46bf (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 44ad | 1 44ad (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 447a | 1 447a (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","private_key":"dfef090814210606651dad73b8ee233161b8f9bf9999725730de043d0e9af4e0","name":"node_447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","services":["bzz","pss"],"enable_msg_events":true,"port":41827},"up":true}},{"node":{"info":{"id":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","name":"node_be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","enode":"enode://974cfe63e11619004662fdf8336b028fbb9f22c98b67ae3e424f35d394030fb8a8ca8ce9412e1a4f349d6df174d3259431ca8a57ae3adf9f664b3a9c5ba9fd24@127.0.0.1:0","enr":"0xf88fb84098bddc1516cbbff113698681b95c27e15ee3b08e6510e799c6802496acf33e326ce1d60e740e9e37500a1b54d2ca357084a0648c7caa43f2a6584cd311682f6b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102974cfe63e11619004662fdf8336b028fbb9f22c98b67ae3e424f35d394030fb8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vmgmfXf7UkJCJyZ8ZlyhGToBAzTKwFczisp3tJpLlNo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: be6826\npopulation: 43 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 397a 194e 0191 6b4e | 126 244c (0) 24f8 (0) 26ac (0) 26ab (0)\n001 7 c8c8 cd6c e64d ed42 | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 7 8cc3 8854 84a9 837f | 38 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n003 13 a8ff ab3f af02 aeb4 | 23 aeb4 (0) af02 (0) acee (0) a970 (0)\n004 3 b3f9 b5ea b78f | 6 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n005 2 b8e1 bbaf | 3 b8e1 (0) ba91 (0) bbaf (0)\n006 2 bcf8 bdc5 | 2 bcf8 (0) bdc5 (0)\n============ DEPTH: 7 ==========================================\n007 1 bfc7 | 1 bfc7 (0)\n008 1 bea1 | 1 bea1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","private_key":"6641d12829826045dddcad116be9a840aa14ba3542597d5cc4e71324fa29af40","name":"node_be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","services":["bzz","pss"],"enable_msg_events":true,"port":37231},"up":true}},{"node":{"info":{"id":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","name":"node_6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","enode":"enode://3821a5bff1a93183090d662d2451159ebe363ee2df3b361159cded82888ed46322fc6470eb09bfb736355e121b06092eb64120fb8e0448778b948559baa814d9@127.0.0.1:0","enr":"0xf88fb84051b3adb1ee656aaaad0cb4b241aa3c32ffceea4999429eddee1573f06d9477793034a1aa1b8f586fac2c2aba3e5f8ca79f6e01885eee40e0c70983c7ffe8ee950183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033821a5bff1a93183090d662d2451159ebe363ee2df3b361159cded82888ed463","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bn8fPWU2Q5lhek2V/dBPLKmwB7I2aUPnulrNRhanpCU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6e7f1f\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c961 cd6c eebd 95c0 | 130 f756 (0) f6c0 (0) f645 (0) f305 (0)\n001 7 07f5 0191 0cfc 096a | 65 138d (0) 1070 (0) 1049 (0) 1784 (0)\n002 3 5a8b 4d38 447c | 35 5144 (0) 50c1 (0) 52a8 (0) 5538 (0)\n003 5 7e47 7c46 7d16 7933 | 13 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n004 5 60c5 648a 6795 67f3 | 6 60c5 (0) 648a (0) 6790 (0) 6795 (0)\n005 2 6b4e 68cb | 2 68cb (0) 6b4e (0)\n============ DEPTH: 6 ==========================================\n006 4 6c01 6dd3 6d3c 6d5e | 4 6c01 (0) 6dd3 (0) 6d3c (0) 6d5e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","private_key":"41525658ab059b89329f02a6c477cd77bc69b94ceae45e0e31f70bb6b70ee671","name":"node_6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","services":["bzz","pss"],"enable_msg_events":true,"port":38077},"up":true}},{"node":{"info":{"id":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","name":"node_bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","enode":"enode://d0595ae566e2dec77e37a408dcf8d7c3157cc52378c66fada8c78b588aa926d2f7350c17cd3f8586f36de2c55a9020e923262ad54d5b7530f063570cc46f3f6b@127.0.0.1:0","enr":"0xf88fb840c153e9a46508c43ea149e6f6f11d3d2077afd262f7b2bb8df75d999927705ad20554753898c4f1f275f901157620f8b3c2e4f9ea4ff600ac2e0fbba78fb70f270183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d0595ae566e2dec77e37a408dcf8d7c3157cc52378c66fada8c78b588aa926d2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"v8cReTgwd59Jqlm8b3ogWrTm6uer/a+/O7WhFjp3irI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bfc711\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3f31 6e7f | 126 138d (0) 1070 (0) 1049 (0) 1784 (0)\n001 7 ed42 eebd d302 dad0 | 55 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n002 6 834f 84a9 95c0 97da | 38 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n003 15 ab3f a970 a8ff acee | 23 acee (0) aeb4 (0) af02 (0) a970 (0)\n004 4 b3f9 b5ea b6df b78f | 6 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n005 3 ba91 bbaf b8e1 | 3 bbaf (0) ba91 (0) b8e1 (0)\n006 2 bcf8 bdc5 | 2 bcf8 (0) bdc5 (0)\n============ DEPTH: 7 ==========================================\n007 2 be68 bea1 | 2 bea1 (0) be68 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","private_key":"98697e601711a0c2bc93c85db0434deba8428ccf604641af230ef188b176ceff","name":"node_bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","services":["bzz","pss"],"enable_msg_events":true,"port":46271},"up":true}},{"node":{"info":{"id":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","name":"node_3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","enode":"enode://cd82e53229cae0db1a40d6d3974aceff2b8223d817606879d4d4c82e93d851a5a41a488c441ff25a85dda297bf76cf3ffc924029112a5afc15ff35a1f49aaa6a@127.0.0.1:0","enr":"0xf88fb840a9166c078904cd0604d4a4a19f9884af9ba6a3c08f1da14902b3be746025dca87ef2d6ecc67dcbd2808df07f6a1a911e3f71936e779fba08bc74db71740c34290183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102cd82e53229cae0db1a40d6d3974aceff2b8223d817606879d4d4c82e93d851a5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PzHsr/qmMRyCyaV1u8ONa8sWYwrIfhnRhTpkqpbJ3N4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3f31ec\npopulation: 21 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 834f bfc7 | 130 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n001 2 447c 6e7f | 61 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n002 4 096a 0561 07f5 0191 | 37 138d (0) 1070 (0) 1049 (0) 1784 (0)\n003 2 2a50 298a | 11 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n004 5 36b9 3188 31e6 31e1 | 9 3411 (0) 36b9 (0) 3728 (0) 32ff (0)\n005 4 3b02 3a62 397a 3980 | 5 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n============ DEPTH: 6 ==========================================\n006 2 3c5b 3cab | 2 3c5b (0) 3cab (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","private_key":"3ed9ff27809a5c5e4f61f5343410a2a1291496221e7861971e6d48611b1a9abd","name":"node_3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","services":["bzz","pss"],"enable_msg_events":true,"port":42049},"up":true}},{"node":{"info":{"id":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","name":"node_834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","enode":"enode://69f51e1ebbbb38b8b161722c403f583d6141cff104f2da6dc21f21f0c50e4d41d031f8a4d0523d545691ebe7ba00050d25ac6ef88255fbc453fea197db95fffd@127.0.0.1:0","enr":"0xf88fb84074d162cf5aadfde184fd1c7884869ea76837d6e33b21bfd74ff53d66b50c055c3479080476f1e97ea070cf9ed88ef3445665a36e93f803078d5e4cdd738a77a50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10369f51e1ebbbb38b8b161722c403f583d6141cff104f2da6dc21f21f0c50e4d41","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g08U6fMlSCre9iZR3fNoVpDdXr3RgBTyvSZrIUPCkP8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 834f14\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 447c 096a 3f31 | 126 50c1 (0) 5144 (0) 52a8 (0) 5538 (0)\n001 4 cd6c c961 dad0 dbd4 | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 6 a8ff a606 a505 b78f | 37 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n003 4 9f0e 93ea 97da 95c0 | 17 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n004 6 8cc3 8f9a 8e28 8e7b | 9 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n005 3 86d6 8402 84a9 | 4 86d6 (0) 87a3 (0) 8402 (0) 84a9 (0)\n006 5 81a5 8006 8073 8074 | 5 81a5 (0) 8006 (0) 8073 (0) 8074 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 837f | 1 837f (0)\n011 1 8358 | 1 8358 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","private_key":"1496abca4c41e1d57c812b53636296bdad2570659143afc188383905ad3a1d30","name":"node_834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","services":["bzz","pss"],"enable_msg_events":true,"port":44165},"up":true}},{"node":{"info":{"id":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","name":"node_096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","enode":"enode://ff8aff353bd9756ed7a631808ca59009f89f5db4ddc3938b05ea2cf4fef6855ace3f6873b2ee1a35b6bb524b9f310b19db97e635add9ed1075e9907da1b56157@127.0.0.1:0","enr":"0xf88fb84062ef2386cda8f32e286d22df7b0ee0daf321024107b0a4794abfe7b079de98083d2b860770dea2044c50072ee556e6d3ec1d217915acaa11a2dd6b1b31b1ad0b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ff8aff353bd9756ed7a631808ca59009f89f5db4ddc3938b05ea2cf4fef6855a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CWqDArbzacKO2dR3GaUH6tijzByk+h4yMYt/l4c5Vf4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 096a83\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a505 834f | 130 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n001 2 447c 6e7f | 61 5144 (0) 50c1 (0) 52a8 (0) 5538 (0)\n002 4 3f31 31e1 3188 3051 | 28 26ac (0) 26ab (0) 244c (0) 24f8 (0)\n003 5 1686 140d 1bd5 18e0 | 16 138d (0) 1070 (0) 1049 (0) 1784 (0)\n004 4 0191 0594 0561 07f5 | 10 025d (0) 035f (0) 0314 (0) 012b (0)\n005 4 0e80 0e3b 0e2b 0cfc | 5 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 08bd 08f8 08e5 | 3 08bd (0) 08f8 (0) 08e5 (0)\n008 1 09b3 | 1 09b3 (0)\n009 0 | 0\n010 1 0942 | 1 0942 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","private_key":"396f35fa7f69257841f0b832cf5f655557fa1b060dbb859461a22429101230cb","name":"node_096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","services":["bzz","pss"],"enable_msg_events":true,"port":43747},"up":true}},{"node":{"info":{"id":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","name":"node_a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","enode":"enode://462c3ca5391ed837a169228797bea3d3f4585a7fb5cb938de1fc15649174b0156940060d152a8486deb4ccfe2c3ca460b5d9a184399db2f4a8b95ec015e86896@127.0.0.1:0","enr":"0xf88fb840dd4c1cd722f83d847e339b92de95082d1413d3b86944796fee5054d09a8390b052018a03749011927e56a0650aa9db5ade2a936687147004585d02d32fe1861b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102462c3ca5391ed837a169228797bea3d3f4585a7fb5cb938de1fc15649174b015","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pQU5WPDO/P8YJr8CUl/amMTclUzDhpDzxD7L8LKtV68=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a50539\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 6758 6b4e 3051 09b3 | 126 5144 (0) 50c1 (0) 52a8 (0) 5538 (0)\n001 4 dad0 dbd4 c961 cd6c | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 7 8854 837f 834f 9f0e | 38 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n003 5 b3f9 b78f b8e1 bfc7 | 14 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n004 3 aeb4 a8ff ab3f | 10 acee (0) aeb4 (0) af02 (0) a970 (0)\n005 5 a0c8 a330 a327 a2e6 | 6 a1c8 (0) a0c8 (0) a330 (0) a327 (0)\n006 4 a742 a7a8 a616 a606 | 4 a7a8 (0) a742 (0) a616 (0) a606 (0)\n============ DEPTH: 7 ==========================================\n007 1 a4ee | 1 a4ee (0)\n008 1 a5ac | 1 a5ac (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","private_key":"550f3f019bfee28d84cbafd18523a10069faabebcbe9823512a4f0af5343b627","name":"node_a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","services":["bzz","pss"],"enable_msg_events":true,"port":36993},"up":true}},{"node":{"info":{"id":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","name":"node_305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","enode":"enode://c5f49027f8ad45e617b539a3242f31739ac950203b54ecf8dbe5b2160b85ee594bc40553728846692df15f6859547b5360e6cbf64dd1486b9d5272c378b958ac@127.0.0.1:0","enr":"0xf88fb840ad06f6a9761fd36b8a36707e80761bda29124da842be6b3eef6cb49227944a6709187c9a4d490219f8244eaaec1538b10720b042ad258a64bf7a09438d4673470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c5f49027f8ad45e617b539a3242f31739ac950203b54ecf8dbe5b2160b85ee59","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MFFixHLHHd7yMgsTgQK2fRziuLunni5Yf8gOCFyI5Uc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 305162\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 dbd4 a505 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 5 5a8b 4d91 4d38 447c | 61 5538 (0) 5663 (0) 56ca (0) 50c1 (0)\n002 5 18e0 0191 07f5 0561 | 37 138d (0) 1070 (0) 1049 (0) 1784 (0)\n003 3 26ab 298a 2a50 | 11 24f8 (0) 244c (0) 26ac (0) 26ab (0)\n004 8 3cab 3c5b 3f31 3a62 | 8 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n005 2 36b9 3728 | 3 3411 (0) 36b9 (0) 3728 (0)\n006 1 32ff | 1 32ff (0)\n============ DEPTH: 7 ==========================================\n007 3 3188 31e6 31e1 | 3 31e1 (0) 31e6 (0) 3188 (0)\n008 1 30fe | 1 30fe (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","private_key":"3ccc59b4b2ef2146a73d043f665a3dec37990b81cf7e81c670ef586260aa4f45","name":"node_305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","services":["bzz","pss"],"enable_msg_events":true,"port":41853},"up":true}},{"node":{"info":{"id":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","name":"node_dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","enode":"enode://12b59aaec065fee81276d23336c7a839dfd34fa213d06a31fa3447894ed5afdefca89b783977333245f76c2e35b74504e51928af9586e4f288a870a6c0db0c2a@127.0.0.1:0","enr":"0xf88fb840c57b5dd80289305003c7726a173a5f1e93a911e51aa052b1ab38f38e9a102c1074a105d65dc177fdff430aeb2e9d2de42f87d2b32d7cc7fbd6b57647999ab64c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10212b59aaec065fee81276d23336c7a839dfd34fa213d06a31fa3447894ed5afde","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"29TZDjNC74N7js9cbkkPfECfQZzza3cWKofLLPuK4zw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dbd4d9\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3188 3051 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 7 93ea 9f0e 8854 834f | 75 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n002 5 f645 fc51 f9de ed42 | 28 f756 (0) f645 (0) f6c0 (0) f1ed (0)\n003 8 c42e c6a8 c74d c961 | 16 c190 (0) c272 (0) c2d0 (0) c534 (0)\n004 3 d408 d209 d302 | 5 d209 (0) d3e9 (0) d302 (0) d700 (0)\n005 1 ddb8 | 1 ddb8 (0)\n006 2 d959 d9cf | 2 d959 (0) d9cf (0)\n============ DEPTH: 7 ==========================================\n007 2 da36 dad0 | 2 da36 (0) dad0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","private_key":"c2103de042f815312e3c17f6a1334bcbdbc1e4f58d39e436d463cf08b61b060d","name":"node_dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","services":["bzz","pss"],"enable_msg_events":true,"port":45509},"up":true}},{"node":{"info":{"id":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","name":"node_cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","enode":"enode://3f46a3f4016f9803ad015ff459b7b2d3ae3dc814ca3dce437d56046302b1bf2c143203755461e513a4ae4ed11d6548aeca82b83a3026662f06c7ebddeef20c7c@127.0.0.1:0","enr":"0xf88fb840aa6d2306927e37eb5add2079388ffeb2ad0bf5d36ad922dc7dfbbcae12b8511120a7ceaeb6685848468c6434e7add539507eb0305283e9881b35eb5b50cc699d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023f46a3f4016f9803ad015ff459b7b2d3ae3dc814ca3dce437d56046302b1bf2c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zWyLQqCwkvQeaSVXfJ3n0b6hcjG8s9CPPTzOnG/c8i0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cd6c8b\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 7933 6e7f 447c 5a8b | 126 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n001 11 834f 95c0 93ea 9f0e | 75 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n002 8 f2b4 f645 fc51 fa24 | 28 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n003 5 d302 d408 ddb8 d9cf | 11 d209 (0) d3e9 (0) d302 (0) d700 (0)\n004 3 c6a8 c603 c74d | 8 c272 (0) c2d0 (0) c190 (0) c42e (0)\n005 4 c961 c9c3 c8ea c8c8 | 4 c8ea (0) c8c8 (0) c9c3 (0) c961 (0)\n006 1 cf52 | 1 cf52 (0)\n============ DEPTH: 7 ==========================================\n007 1 cc33 | 1 cc33 (0)\n008 1 cdb1 | 1 cdb1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","private_key":"cd14c3cb4c268526af99a387d2e105f126f0d3e4368b46397cc117868140fbaa","name":"node_cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","services":["bzz","pss"],"enable_msg_events":true,"port":45357},"up":true}},{"node":{"info":{"id":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","name":"node_07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","enode":"enode://0214bfe7469b5ed146f1f11d937181680a8dea456f3586d08810ca756337e9fed3e46fe35c99af4496d072125f6b898ab97f5332e16399f3107d15912756daf6@127.0.0.1:0","enr":"0xf88fb840af0cb239eef4aef9f88cfc4a0241d95cb9ef1cbb14c5889164e2d27c2c09a433595a3366678b3e8e1f1933c2ea8bbbe26d0b5dc604e984a43e20e68e4dbd42300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020214bfe7469b5ed146f1f11d937181680a8dea456f3586d08810ca756337e9fe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"B/XQlKSyLnPN1shUUrPZKNqbSxaHOCR1nLfopiJBf9U=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 07f5d0\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 c961 cd6c | 130 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n001 4 6e7f 7c46 7933 4d38 | 61 60c5 (0) 648a (0) 6790 (0) 6795 (0)\n002 6 2c80 2ddf 298a 2a50 | 28 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n003 6 1049 1686 140d 1bd5 | 16 138d (0) 1070 (0) 1049 (0) 1784 (0)\n004 5 0cfc 0e80 0e2b 09b3 | 11 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n005 6 035f 0314 025d 0191 | 6 025d (0) 035f (0) 0314 (0) 012b (0)\n============ DEPTH: 6 ==========================================\n006 3 046c 0594 0561 | 3 046c (0) 0594 (0) 0561 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","private_key":"251c21ef6c12491657b20ba5898f537b45474fd62ce9f870aa98b7a2ce906096","name":"node_07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","services":["bzz","pss"],"enable_msg_events":true,"port":45285},"up":true}},{"node":{"info":{"id":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","name":"node_c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","enode":"enode://a32b355f09cbc5a2ccbffb7eea267721cdc1108cab1c29d2dd1e2e7fa7c5c20e04c6a024fa47373e830891a62576084c8bbae862c4044ad94a2c612189282db8@127.0.0.1:0","enr":"0xf88fb8408a9d74f8b002fe6e7cff4d593bbf3bae2a56a10b0f5d1a6187fe6c3387aaa0cf399c033c3390082c7a87ecb9c2e865ca708f2279eb75d132524d4bcb29cba63d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a32b355f09cbc5a2ccbffb7eea267721cdc1108cab1c29d2dd1e2e7fa7c5c20e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yWFG7kfsfNdFUc908AITvDN9ZDxDJzk/DmhI7NSg+NM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c96146\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6e7f 7c46 7933 3188 | 126 60c5 (0) 648a (0) 6790 (0) 6795 (0)\n001 9 b78f bfc7 a606 a5ac | 75 8d19 (0) 8cc3 (0) 8ea2 (0) 8e7b (0)\n002 5 f645 fc51 f9de ed42 | 28 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n003 6 d302 d408 ddb8 d9cf | 11 d209 (0) d3e9 (0) d302 (0) d700 (0)\n004 2 c603 c6a8 | 8 c272 (0) c2d0 (0) c190 (0) c42e (0)\n005 4 cf52 cd6c cdb1 cc33 | 4 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 c8ea c8c8 | 2 c8ea (0) c8c8 (0)\n008 1 c9c3 | 1 c9c3 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","private_key":"11fc592c06dfe93bde5f4e4d007d2c7020e49d7e5ef8de72fb7ad0c39d96d2c2","name":"node_c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","services":["bzz","pss"],"enable_msg_events":true,"port":43471},"up":true}},{"node":{"info":{"id":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","name":"node_dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","enode":"enode://3a93f5d6282a4f76c82c17c35a6f8eac3a2b9b63ae0e3a532ab625fd4df7fa7f4357b01c8f6071b405a85b97e6832ba2b0d8eefc3afec46b0221bd15c2f4d5e6@127.0.0.1:0","enr":"0xf88fb840f5b726c896fc45a7d66c14a7ff0b8cffe4f443829996bcf4bf69388e9b4fb1445eddef566d406b613be72fb97eb94988db3f65a8eb1d51134b93c241fde80a460183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1023a93f5d6282a4f76c82c17c35a6f8eac3a2b9b63ae0e3a532ab625fd4df7fa7f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2tCJmc0u3DPP3FnqNMitzWo06qFfLoWwYi6YSLIVwdU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: dad089\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 7c46 7933 3188 1bd5 | 126 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n001 6 a505 bfc7 834f 93ea | 75 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n002 4 f645 f9de ed42 eebd | 28 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n003 5 c190 c74d c8c8 c9c3 | 16 c2d0 (0) c272 (0) c190 (0) c534 (0)\n004 4 d209 d302 d700 d408 | 5 d209 (0) d3e9 (0) d302 (0) d700 (0)\n005 1 ddb8 | 1 ddb8 (0)\n006 2 d9cf d959 | 2 d959 (0) d9cf (0)\n============ DEPTH: 7 ==========================================\n007 1 dbd4 | 1 dbd4 (0)\n008 1 da36 | 1 da36 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","private_key":"ac54b72de76bbeab526b566706c5324bfab619ac9019078319474c8396bb36f3","name":"node_dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","services":["bzz","pss"],"enable_msg_events":true,"port":40305},"up":true}},{"node":{"info":{"id":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","name":"node_056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","enode":"enode://265ba137f94c59432e330185dfe26176b2833143e001d135ff9bdc74eb6a7dbf46a40c5f27a01cb176086b2a4bcd8b4df935a0e35fc331e5da556d2471d19b46@127.0.0.1:0","enr":"0xf88fb840e995a0df1f38fad4ffb6332b3ccf46fa213f3d0c5b746ecd7ab35dc36e928f8f16ebf9bee964f47e3ceb70b47261c82843d796a2d28785cdd521f7e7add6fbf40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102265ba137f94c59432e330185dfe26176b2833143e001d135ff9bdc74eb6a7dbf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BWFS3Z2uhcQmN400rKuNZkHaZl0vVzWaJ6D/ZS8/PQI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 056152\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a5ac dad0 | 130 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n001 3 7933 5a8b 4d38 | 61 60c5 (0) 648a (0) 6790 (0) 6795 (0)\n002 3 3f31 3188 3051 | 28 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n003 5 1049 1686 140d 194e | 16 138d (0) 1070 (0) 1049 (0) 1784 (0)\n004 4 0e2b 0cfc 09b3 096a | 11 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n005 5 0314 025d 012b 0111 | 6 025d (0) 035f (0) 0314 (0) 012b (0)\n006 1 07f5 | 1 07f5 (0)\n============ DEPTH: 7 ==========================================\n007 1 046c | 1 046c (0)\n008 1 0594 | 1 0594 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","private_key":"faad557bcbab6d34e58f844b5a368fc2c5a4d088352c0bc0d2363aec33462b69","name":"node_056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","services":["bzz","pss"],"enable_msg_events":true,"port":43665},"up":true}},{"node":{"info":{"id":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","name":"node_a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","enode":"enode://8cdb600efbfa331c7bcb78d899595726993e73d7aac802d61673d8b50f7766950f1907d11732fbac2e316d2d8f439f984f54164a7b2db098ae1b35540e8b2902@127.0.0.1:0","enr":"0xf88fb840d11b0126170eb4fee1197420356b363c9efc48d4f5f3ac3ec4139a53443f7d6c5d66e6edbc0a80d5d907f8aa5fba8247287ecc0d7a9e4910801655d67107a7fa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028cdb600efbfa331c7bcb78d899595726993e73d7aac802d61673d8b50f776695","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pawE1TtWnkGO9QB5YUMRVfLCJu4QFXswr3HqSDawgIk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a5ac04\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 7933 4d38 1bd5 0561 | 126 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n001 3 dbd4 c961 cd6c | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 4 8854 837f 9f0e 93ea | 38 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n003 4 bfc7 be68 b3f9 b78f | 14 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n004 2 af02 a8ff | 10 acee (0) aeb4 (0) af02 (0) a970 (0)\n005 5 a1c8 a330 a327 a2a1 | 6 a0c8 (0) a1c8 (0) a330 (0) a327 (0)\n006 4 a616 a606 a7a8 a742 | 4 a7a8 (0) a742 (0) a616 (0) a606 (0)\n============ DEPTH: 7 ==========================================\n007 1 a4ee | 1 a4ee (0)\n008 1 a505 | 1 a505 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","private_key":"0a918d168aacb95afe15f3eba1e762f144f5ffa60fa01155a81ec8cf4a5c5470","name":"node_a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","services":["bzz","pss"],"enable_msg_events":true,"port":36481},"up":true}},{"node":{"info":{"id":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","name":"node_4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","enode":"enode://98863ce3c7e18d15ece80b94033ae1825556b0a21f84ec04077e72f48df419e525b341d7bef239e3565754f57b3e9cf42b828667a8e0bffc5e9ef9d596888353@127.0.0.1:0","enr":"0xf88fb840c0c7e8479b7d62eac2089ba0a3436acd47f05a6410097ae49bcf77ec309c122a4b04acaa26fddfb564888a144346c8277e2459076aa8758bc1b31d17fdaa6e7b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10398863ce3c7e18d15ece80b94033ae1825556b0a21f84ec04077e72f48df419e5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TTgQFHg5gLL3fw1xFgrZ6dhGcrV29ENczbrhJ1I1DBw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4d3810\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 93ea a5ac | 130 f756 (0) f645 (0) f6c0 (0) f1ed (0)\n001 4 3051 3188 07f5 0561 | 65 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n002 4 6e7f 7933 7850 7c46 | 26 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n003 5 56ca 5d82 5ff0 5a8b | 16 50c1 (0) 5144 (0) 52a8 (0) 5538 (0)\n004 5 402c 43d4 43c9 435d | 9 4005 (0) 402c (0) 43d4 (0) 43c9 (0)\n005 3 482e 48b8 48de | 7 4b79 (0) 4a95 (0) 48b8 (0) 48f1 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 4cec | 1 4cec (0)\n008 1 4d91 | 1 4d91 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","private_key":"f83b2e95c445a50438af645a0f3dd41e2615d85bc9e28834a722b78081960743","name":"node_4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","services":["bzz","pss"],"enable_msg_events":true,"port":34823},"up":true}},{"node":{"info":{"id":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","name":"node_93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","enode":"enode://fb8e6ad0083dd5c9588924daa51194dfc6a4e8e5efd75fb3bd2f76d99c15df4aa355b2419a416d0be44ddabd404b7d503461312253bc36f9c8cb6acf86206faf@127.0.0.1:0","enr":"0xf88fb840de494f8808c9d4cb3dbbe95d92b77102bde20de29cb253862072e62ac37179767dd2aa1e587a6ddff1e42149b96842de7054b91c30a773c04c140030f83054e70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fb8e6ad0083dd5c9588924daa51194dfc6a4e8e5efd75fb3bd2f76d99c15df4a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"k+qO8lH9VrFZ4IDN9zPTPh/fs8euW9mmoyjQv1RYhns=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 93ea8e\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 1bd5 3188 7c46 7850 | 126 2fd2 (0) 2e65 (0) 2ddf (0) 2c85 (0)\n001 4 dad0 dbd4 cd6c c961 | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 6 bfc7 b78f a2a1 a606 | 37 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n003 4 8854 8e28 834f 837f | 21 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n004 5 9b8e 9948 9959 9ca1 | 9 9b8e (0) 9948 (0) 9959 (0) 9c21 (0)\n005 4 95c0 9518 955d 97da | 5 97da (0) 9464 (0) 9518 (0) 955d (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 9257 | 1 9257 (0)\n008 0 | 0\n009 0 | 0\n010 1 93c0 | 1 93c0 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","private_key":"60b514798a6f6a2f5cf7e85f798280d359067d82ca6c08dd3d5152c9325f8c11","name":"node_93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","services":["bzz","pss"],"enable_msg_events":true,"port":44155},"up":true}},{"node":{"info":{"id":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","name":"node_9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","enode":"enode://1a733925153e123a28e4c6ff215622e6f5f6e3603dd3ecac572db24c88743906db68f57c873814af3004eeee0cec5e7ea31c1fa450a6f60a4d682c5d36d4f7d6@127.0.0.1:0","enr":"0xf88fb8407124e4586da75d58f439871e4d6d59bf6cb2adffd121aa712eb670aa52d490b20045fdd401ff02688127caa8436744fae9ded418d490b1f6bdb678380f0839950183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021a733925153e123a28e4c6ff215622e6f5f6e3603dd3ecac572db24c88743906","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nw4r+KliFWyeCoPD1CrT3FrFw+UI8kIAv7FRqtTjlf8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9f0e2b\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 26ac 298a 2c80 3cab | 126 2a50 (0) 298a (0) 2e65 (0) 2fd2 (0)\n001 4 cd6c c961 dbd4 dad0 | 55 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n002 5 bfc7 a2a1 a606 a505 | 37 b3f9 (0) b4a1 (0) b5ea (0) b659 (0)\n003 3 8854 837f 834f | 21 8d19 (0) 8cc3 (0) 8f9a (0) 8ea2 (0)\n004 3 97da 95c0 93ea | 8 97da (0) 9464 (0) 9518 (0) 955d (0)\n005 3 9b8e 9948 9959 | 3 9b8e (0) 9948 (0) 9959 (0)\n006 2 9ca1 9c21 | 3 9c8e (0) 9ca1 (0) 9c21 (0)\n============ DEPTH: 7 ==========================================\n007 1 9ec8 | 1 9ec8 (0)\n008 0 | 0\n009 1 9f7d | 1 9f7d (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","private_key":"5e77db0ba785223e5c1e3ce73ecad087df783ddb123f13e44c126125e5320834","name":"node_9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","services":["bzz","pss"],"enable_msg_events":true,"port":36327},"up":true}},{"node":{"info":{"id":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","name":"node_5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","enode":"enode://78abddf561d75c3f8e4ee5cf729a4ca27a15261a2f7643ba4669070e37568388a95d9ba6ff45b86f63c11bb67c5f0816c8b8e1436db63342080d94b1ec98afe6@127.0.0.1:0","enr":"0xf88fb8404bd00e9812551717571255b2d27db8fdc87870fc9285e293ceb9921910e0c20f68658713acfd38ca573cae42d75bcd43a72edd6c7f0a363fccf5820d7c7b62990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10278abddf561d75c3f8e4ee5cf729a4ca27a15261a2f7643ba4669070e37568388","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WouE32UYcfznLRHLHCbIeuSgzGtMJ0035wUyyU8nKI4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5a8b84\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 cd6c a606 a2a1 9f0e | 130 e2d3 (0) e277 (0) e09f (0) e0a0 (0)\n001 4 1bd5 0561 3051 3188 | 65 2fd2 (0) 2e65 (0) 2c85 (0) 2c80 (0)\n002 5 6e7f 60c5 7c46 7850 | 26 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n003 8 435d 447a 447c 482e | 19 4005 (0) 402c (0) 43c9 (0) 43d4 (0)\n004 3 52a8 5663 56ca | 6 50c1 (0) 5144 (0) 52a8 (0) 5538 (0)\n005 3 5d82 5c7c 5ff0 | 4 5ff0 (0) 5c37 (0) 5c7c (0) 5d82 (0)\n006 2 5987 5814 | 2 5987 (0) 5814 (0)\n007 1 5bd8 | 1 5bd8 (0)\n============ DEPTH: 8 ==========================================\n008 1 5a26 | 1 5a26 (0)\n009 1 5ac0 | 1 5ac0 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","private_key":"213bd7466a810ef9f7851687f3b179a52046eb5522252297a6b1d6145b648669","name":"node_5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","services":["bzz","pss"],"enable_msg_events":true,"port":37077},"up":true}},{"node":{"info":{"id":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","name":"node_793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","enode":"enode://fb36dea27a60b8255d2a142d64db3fe03c31642226d5a683e50b509f351c947fba07533d9b9138973ff4b62119c4bf09a9ccc0519dfba63e01ad9e6fdb04ab04@127.0.0.1:0","enr":"0xf88fb8403034394794df0756ddc241fe1356ff416e555eacb7699f2908a393d11806c4e508ac26d9bfa21ef4c53295da07e7916ab9facfc097f0721e7af81bccf373caa10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fb36dea27a60b8255d2a142d64db3fe03c31642226d5a683e50b509f351c947f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eTMiYIBV1Ic3dqmgpsQLBDeb/S8omorUmn3EVrxl+HE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 793322\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 cd6c c961 dad0 93ea | 130 e681 (0) e64d (0) e471 (0) e09f (0)\n001 4 3980 07f5 0561 1bd5 | 65 26ab (0) 26ac (0) 24f8 (0) 244c (0)\n002 5 4d38 4cec 48de 447c | 35 402c (0) 4005 (0) 43c9 (0) 43d4 (0)\n003 6 6e7f 6d5e 6b4e 67f3 | 13 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n004 3 7049 70f6 741a | 4 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n005 4 7e47 7d16 7ce7 7c46 | 5 7e47 (0) 7d16 (0) 7ce7 (0) 7c7c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 7895 7850 | 2 7895 (0) 7850 (0)\n008 1 79e5 | 1 79e5 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","private_key":"9af1743677da1b9215eb659bad537e2f657dbcafdf6b976262914f493b2f65b9","name":"node_793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","services":["bzz","pss"],"enable_msg_events":true,"port":37431},"up":true}},{"node":{"info":{"id":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","name":"node_1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","enode":"enode://104600d1fbf9e41d171d15f36749903ac370ecfe94329b32fbd3f7af774b1d72bc3f133476f5911bef453b17fd722cd5695eed65f7c0f5bf65dddf055bfd9e73@127.0.0.1:0","enr":"0xf88fb840c24991e175917d22a4a701e7eaec5e9384fd92f3dcb1cc9cc0a31364f5588fe0072fff15bcf451255fc65a48eef41cbe3ea148d76132009507c8ee91af5603cd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103104600d1fbf9e41d171d15f36749903ac370ecfe94329b32fbd3f7af774b1d72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"G9WIJjJ0VDcp1UUprp6b9FlttAZJocKj9zFo2BjzS2I=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1bd588\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 c961 dad0 93ea ab3f | 130 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n001 5 5a8b 447c 482e 4d91 | 61 43d4 (0) 43c9 (0) 435d (0) 4005 (0)\n002 4 26ac 397a 3980 3188 | 28 2ddf (0) 2c85 (0) 2c80 (0) 2fd2 (0)\n003 5 096a 0cfc 0191 07f5 | 21 0e80 (0) 0e3b (0) 0e2b (0) 0d1c (0)\n004 3 1049 140d 1686 | 7 138d (0) 1070 (0) 1049 (0) 1784 (0)\n005 2 1dc0 1dec | 3 1fd0 (0) 1dc0 (0) 1dec (0)\n006 3 18e0 19ea 194e | 3 18e0 (0) 19ea (0) 194e (0)\n============ DEPTH: 7 ==========================================\n007 1 1add | 1 1add (0)\n008 1 1b1d | 1 1b1d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","private_key":"55ac02ca6376a8c8ade280c4a965ee5c08e93550a6029562e8e86d7dbccf81e5","name":"node_1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","services":["bzz","pss"],"enable_msg_events":true,"port":42121},"up":true}},{"node":{"info":{"id":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","name":"node_318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","enode":"enode://872434e3239345e130ac211904d19315ea542bd330d22ac21629432fadb2635f790530b99c823b4a59df7a4acd5fbbc0a9fb1c2133b86f88473040d3efbd69a6@127.0.0.1:0","enr":"0xf88fb84082f955db5d6323c7cfd3bff029579b8cd70c25e9e9e520f73c3fedce47321114383d187aa1adece14d610b47db85463b6ff60a5ec00e945d211e3f6abd25d18f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102872434e3239345e130ac211904d19315ea542bd330d22ac21629432fadb2635f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MYgo+ok6KMwGUtP4HZfFuOAj6FNoX10+Zf3iBomrzFo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 318828\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 dbd4 dad0 cd6c c961 | 130 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n001 3 4d38 5a8b 7c46 | 61 4005 (0) 402c (0) 43d4 (0) 43c9 (0)\n002 3 096a 0561 1bd5 | 37 0d1c (0) 0cfc (0) 0e80 (0) 0e3b (0)\n003 5 298a 2a50 2e65 2ddf | 11 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n004 6 3f31 3cab 3a62 3b02 | 8 3b02 (0) 3a62 (0) 3980 (0) 3938 (0)\n005 2 3728 3411 | 3 36b9 (0) 3728 (0) 3411 (0)\n006 1 32ff | 1 32ff (0)\n007 2 30fe 3051 | 2 30fe (0) 3051 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 2 31e1 31e6 | 2 31e6 (0) 31e1 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","private_key":"ab2d8316f989485b43a1f14a3b2736c9e506aa0ba33fbeae8fc45dfb0784b50e","name":"node_318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","services":["bzz","pss"],"enable_msg_events":true,"port":45097},"up":true}},{"node":{"info":{"id":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","name":"node_7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","enode":"enode://e9ce5ad62b69c60eaba82ede900643474a4316ff4fb9f8bbd15cc8ef3b5ac9eb2cfacbab6551b57423952f4be2990d95f539368954e42fc7fad8b1561af79002@127.0.0.1:0","enr":"0xf88fb840233a6d08e9c900370f4b86282cd0f45e172bbe22a6ddba170768665f2289363a04022e239dba04e74de46939a2fc3173ef7f8ec3a3c380bc4f96e0f8d57baa3f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e9ce5ad62b69c60eaba82ede900643474a4316ff4fb9f8bbd15cc8ef3b5ac9eb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fEZAVOp7bJ6gx9TCCXackvKUqdssoVm47xaOMQoerDo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7c4640\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c961 d9cf dad0 93ea | 130 e681 (0) e64d (0) e471 (0) e09f (0)\n001 4 07f5 2fd2 397a 3188 | 65 0d1c (0) 0cfc (0) 0e80 (0) 0e3b (0)\n002 5 48de 4cec 4d38 5a26 | 35 4005 (0) 402c (0) 43d4 (0) 43c9 (0)\n003 5 6b4e 6e7f 6d5e 6758 | 13 68cb (0) 6b4e (0) 6c01 (0) 6dd3 (0)\n004 2 7660 741a | 4 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n005 3 79e5 7933 7850 | 4 79e5 (0) 7933 (0) 7895 (0) 7850 (0)\n006 1 7e47 | 1 7e47 (0)\n007 1 7d16 | 1 7d16 (0)\n============ DEPTH: 8 ==========================================\n008 1 7ce7 | 1 7ce7 (0)\n009 0 | 0\n010 1 7c7c | 1 7c7c (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","private_key":"fcc47163c2ab2f499cbb2f337ef53f49309b3865d8038bff9d2bc379d573c1e6","name":"node_7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","services":["bzz","pss"],"enable_msg_events":true,"port":38929},"up":true}},{"node":{"info":{"id":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","name":"node_a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","enode":"enode://3550f2c56a73defeb97f0536204448c4e3e1331335e6e3a3014a4abcc64baa713863be64fced29ef2a307d2dadad652ef223a9ccc585b280a4cc7fcc0c873f95@127.0.0.1:0","enr":"0xf88fb840de06617ae4d0d818ea821d1c9879aee77965e21e891045657c110f6dbfb3933b1e580ab1ec78fad61f0175343ddcf154cbf61d63b77419bfe6bd777d864a3b700183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033550f2c56a73defeb97f0536204448c4e3e1331335e6e3a3014a4abcc64baa71","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pgbHmgGKZTU3XYUfzILELMfJUnIKoSBDTO3M9KS+H1k=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a606c7\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 1bd5 3188 5a8b 5d82 | 126 0d1c (0) 0cfc (0) 0e80 (0) 0e3b (0)\n001 4 fc51 c9c3 c961 cd6c | 55 e681 (0) e64d (0) e471 (0) e2d3 (0)\n002 4 834f 8854 93ea 9f0e | 38 8b43 (0) 8862 (0) 8854 (0) 8d19 (0)\n003 3 b78f bfc7 be68 | 14 ba91 (0) bbaf (0) b8e1 (0) bcf8 (0)\n004 2 a8ff ab3f | 10 acee (0) aeb4 (0) af02 (0) a970 (0)\n005 5 a0c8 a1c8 a330 a2e6 | 6 a0c8 (0) a1c8 (0) a330 (0) a327 (0)\n006 3 a5ac a505 a4ee | 3 a4ee (0) a505 (0) a5ac (0)\n============ DEPTH: 7 ==========================================\n007 2 a742 a7a8 | 2 a7a8 (0) a742 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 a616 | 1 a616 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","private_key":"8b6e5a593a7a12ebb029cd578efe25114f3cadc22a3cd3b007eb164cc0a403fe","name":"node_a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","services":["bzz","pss"],"enable_msg_events":true,"port":45851},"up":true}},{"node":{"info":{"id":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","name":"node_a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","enode":"enode://1ce0a6ac890fddf6089a062091b0f114fb6c01ac09e618ad4a23a3b985db8b695448be996b1b51dceb7341aba28d101f31aafe50d1d312d995c03ca64b907a8b@127.0.0.1:0","enr":"0xf88fb8402bd8ecaf0ec85c076464ba4a7314b9946c19a06746bfd1758516d4674fcff67a4f495420e48344d1870f99c43e5e56750a310e1f532fdc3a46b647a06c8fb4a80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031ce0a6ac890fddf6089a062091b0f114fb6c01ac09e618ad4a23a3b985db8b69","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oqFjziywkrQRyZTMXV71VdU50tz05+GutSjSIW3EgeU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a2a163\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 1bd5 3188 5d82 5a8b | 126 138d (0) 1070 (0) 1049 (0) 1484 (0)\n001 6 eebd f645 fc51 cd6c | 55 e2d3 (0) e277 (0) e09f (0) e0a0 (0)\n002 4 8854 8f9a 93ea 9f0e | 38 8b43 (0) 8862 (0) 8854 (0) 8cc3 (0)\n003 5 bbaf b8e1 be68 bfc7 | 14 ba91 (0) bbaf (0) b8e1 (0) bdc5 (0)\n004 4 af02 a8ff a8f4 ab3f | 10 acee (0) aeb4 (0) af02 (0) a970 (0)\n005 5 a4ee a5ac a505 a742 | 7 a4ee (0) a505 (0) a5ac (0) a7a8 (0)\n006 2 a0c8 a1c8 | 2 a0c8 (0) a1c8 (0)\n============ DEPTH: 7 ==========================================\n007 2 a330 a327 | 2 a330 (0) a327 (0)\n008 0 | 0\n009 1 a2e6 | 1 a2e6 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","private_key":"c7c3bdf809c4dddc3d69c2437ecee9174c62113e7183c42d4b735143382ca5f2","name":"node_a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","services":["bzz","pss"],"enable_msg_events":true,"port":40591},"up":true}},{"node":{"info":{"id":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","name":"node_b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","enode":"enode://411f2844b08f1aa72a27b2f54a551d3eed6c7b634162cb04ef093d52effa83efc2797db053ce1fb70105d9fc15331a0312d148dc0431310eb2c42c6114cb0d7c@127.0.0.1:0","enr":"0xf88fb8404517ad1475dcc5865807afaa0a472b5446b69dbcc2465732186fb2220224daa510beea5edfe3b120c3ee1f7e942904d4ca137b556ea6feada809a6a61e2788a50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102411f2844b08f1aa72a27b2f54a551d3eed6c7b634162cb04ef093d52effa83ef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"t4/SHAYwBuLgM9HQD8IeGteteVG7ViHOybVmOXRdZfk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b78fd2\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 7850 5d82 | 126 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n001 10 f2b4 f645 fc51 eebd | 55 e09f (0) e0a0 (0) e277 (0) e2d3 (0)\n002 6 93ea 9948 9959 8e28 | 38 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n003 9 af02 a8ff ab3f a606 | 23 acee (0) aeb4 (0) af02 (0) a970 (0)\n004 4 bbaf b8e1 be68 bfc7 | 8 ba91 (0) bbaf (0) b8e1 (0) bcf8 (0)\n005 1 b3f9 | 1 b3f9 (0)\n006 2 b5ea b4a1 | 2 b4a1 (0) b5ea (0)\n============ DEPTH: 7 ==========================================\n007 2 b659 b6df | 2 b659 (0) b6df (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","private_key":"74aa90f3bd323ba9eb7d36c9d5d71fba2abcc8c139f09a30ae66ad200d31f31a","name":"node_b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","services":["bzz","pss"],"enable_msg_events":true,"port":45951},"up":true}},{"node":{"info":{"id":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","name":"node_5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","enode":"enode://45a546c77bd0b76e5a8c4cfa9b4ffb8e2124519e39fb9ac6862eef3a6b3ab36d2abb6edf5e822fc9e94a5f821a233fec02ed076b5394052bc3e5ac3f92382ef1@127.0.0.1:0","enr":"0xf88fb8406a321e44c0f6e7960b5f4a6d36376704b05c7a3ba49b1eb6acf89dedda8b5e267297203a9b15f97facaee8eaa5c3c25357451b6f70c3ea2c879c2c9c7a6b02b80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10345a546c77bd0b76e5a8c4cfa9b4ffb8e2124519e39fb9ac6862eef3a6b3ab36d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XYKkGGKc++fFcQUwkxmtaVoZhib+NXHeIToS3fYvcwg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5d82a4\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 d9cf ddb8 93ea 837f | 130 e681 (0) e64d (0) e471 (0) e0a0 (0)\n001 4 194e 1686 1049 3980 | 65 138d (0) 1070 (0) 1049 (0) 1484 (0)\n002 2 6dd3 7850 | 26 6b4e (0) 68cb (0) 6c01 (0) 6dd3 (0)\n003 9 435d 43d4 447a 447c | 19 4005 (0) 402c (0) 435d (0) 43c9 (0)\n004 5 52a8 50c1 5663 56ca | 6 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n005 4 5814 5a26 5a8b 5ac0 | 6 5987 (0) 5814 (0) 5bd8 (0) 5a26 (0)\n006 1 5ff0 | 1 5ff0 (0)\n============ DEPTH: 7 ==========================================\n007 2 5c7c 5c37 | 2 5c7c (0) 5c37 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","private_key":"69766d2192a8d8f57768af92f8ff7baed8f3a52c22d97417f21e6a5fd3de4f42","name":"node_5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","services":["bzz","pss"],"enable_msg_events":true,"port":45337},"up":true}},{"node":{"info":{"id":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","name":"node_7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","enode":"enode://0c0ebe3bbeeb5597d947b1f7b5a2e127a5d6d3b63ef0f3e9729357e767470a8b462ec3cdd15997331c24a9152665d19273a3e79dfc447b7f50381bad46365a7e@127.0.0.1:0","enr":"0xf88fb84028a27a4976245ab6fe76c73b436192338af7ac71f5eb0fb25641c2ced4180b5b5f63f71d6ca7b7ce5129bf98a88efaf0231aba54207434478862b181f9430d2f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020c0ebe3bbeeb5597d947b1f7b5a2e127a5d6d3b63ef0f3e9729357e767470a8b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eFD17lBIlZVZs68PlWiWabJQ/Dqli8yVRNymHKnJdpw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7850f5\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 d9cf ddb8 93ea 837f | 130 e681 (0) e64d (0) e471 (0) e09f (0)\n001 4 1049 1686 0e2b 3980 | 65 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n002 5 482e 4cec 4d38 5a8b | 35 435d (0) 43c9 (0) 43d4 (0) 4005 (0)\n003 7 68cb 6b4e 6d5e 6dd3 | 13 6b4e (0) 68cb (0) 6c01 (0) 6d5e (0)\n004 3 7049 741a 7660 | 4 70f6 (0) 7049 (0) 741a (0) 7660 (0)\n005 5 7e47 7d16 7ce7 7c7c | 5 7e47 (0) 7d16 (0) 7ce7 (0) 7c7c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 79e5 7933 | 2 79e5 (0) 7933 (0)\n008 1 7895 | 1 7895 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","private_key":"40edb5f8d252880b90ba7fde9823f697100b67c90e06a29fc3ec7a5810ab62c1","name":"node_7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","services":["bzz","pss"],"enable_msg_events":true,"port":32987},"up":true}},{"node":{"info":{"id":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","name":"node_ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","enode":"enode://78199c63a76cbaf76cd9760f290345fb7a8a8a0598e99d6152136896aaf69a6894757d496cb59a95925c3a18fe730382766be78a9f0ed4f3f11f866eb8bcdbc9@127.0.0.1:0","enr":"0xf88fb840e42249c4aa731c39349c743bdccfbcb826dcab6b0976b0262879a51570c9605f2840fb4f81fc6d939000acd0b1047aa6ecb2774a78c7a3c74b6dfe5b9f5c47900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10378199c63a76cbaf76cd9760f290345fb7a8a8a0598e99d6152136896aaf69a68","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qz/5VQM8CiYVky+vhf0gCQuRIcftzI5vfOTE/eCpa4o=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ab3ff9\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1049 194e 1bd5 7850 | 126 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n001 5 f2b4 ec90 ed42 eebd | 55 e0a0 (0) e09f (0) e2d3 (0) e277 (0)\n002 2 9959 837f | 38 97da (0) 9464 (0) 9518 (0) 955d (0)\n003 3 bfc7 be68 b78f | 14 bdc5 (0) bcf8 (0) bea1 (0) be68 (0)\n004 6 a327 a2e6 a2a1 a505 | 13 a505 (0) a5ac (0) a4ee (0) a7a8 (0)\n005 3 acee aeb4 af02 | 3 acee (0) aeb4 (0) af02 (0)\n006 4 a970 a8b5 a8f4 a8ff | 4 a970 (0) a8b5 (0) a8f4 (0) a8ff (0)\n============ DEPTH: 7 ==========================================\n007 1 aaf0 | 1 aaf0 (0)\n008 0 | 0\n009 1 ab71 | 1 ab71 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","private_key":"da16d3eec72f2e238edf7ba4f10364552eab2cefb316a7c76c8723d52989563d","name":"node_ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","services":["bzz","pss"],"enable_msg_events":true,"port":33141},"up":true}},{"node":{"info":{"id":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","name":"node_d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","enode":"enode://2042548f0f7c90b6cc2256c4d77e13ecd17a9f61272ad14494e2b21d9ac6029caebf34338de3872e5f3e447fa2ebf066ecd5ebbca76298324eccfade50751e7b@127.0.0.1:0","enr":"0xf88fb8406c1e73483cf923948ac9f54e2c047930e5ea66c902c1040e2c9d6b5a9a00a5c43110236e80ffd8ed3ee80e60f2f9b7395e5956aa2e30c6137271720864699cda0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032042548f0f7c90b6cc2256c4d77e13ecd17a9f61272ad14494e2b21d9ac6029c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2c8ZiV4BXLU02RWu2DwNJr9AoRJEAngS4Xw77G5kWo4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d9cf19\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 60c5 7850 7c46 5d82 | 126 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n001 8 8f9a 837f b8e1 b78f | 75 97da (0) 9464 (0) 9518 (0) 955d (0)\n002 5 f645 f2b4 f9de fa24 | 28 e471 (0) e681 (0) e64d (0) e2d3 (0)\n003 3 c9c3 c961 cd6c | 16 c534 (0) c42e (0) c74d (0) c603 (0)\n004 2 d700 d408 | 5 d209 (0) d3e9 (0) d302 (0) d700 (0)\n005 1 ddb8 | 1 ddb8 (0)\n============ DEPTH: 6 ==========================================\n006 3 dad0 da36 dbd4 | 3 dbd4 (0) da36 (0) dad0 (0)\n007 0 | 0\n008 1 d959 | 1 d959 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","private_key":"d168c43714b032d43709695043aaf1c5458b60b0e73717ccf008b5d9e6af9939","name":"node_d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","services":["bzz","pss"],"enable_msg_events":true,"port":41547},"up":true}},{"node":{"info":{"id":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","name":"node_837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","enode":"enode://ed39f75e6b5a22a7e8c6809ee4d870c133f22f4c93186e3c69457307c78fc12579cf7b7318723f40a0503f854e69da1de58ba5569bdf14e5b61f67446a138ed7@127.0.0.1:0","enr":"0xf88fb840c0e24ca2a2a76ce110f103428f1e7d60a3403afc52473a5aa71b9c63de5b4cb4379c41f9901442f5e2afb7f988f8a6bcc1ccfb6b2fd6494e5fba5c2ae7f45f420183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ed39f75e6b5a22a7e8c6809ee4d870c133f22f4c93186e3c69457307c78fc125","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g38Jk/Y3QDmlrURy1jE+ZHpMXbRYO9J8z6mNNEihdzE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 837f09\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5d82 7850 3980 | 126 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n001 3 c961 ddb8 d9cf | 55 e681 (0) e64d (0) e471 (0) e09f (0)\n002 7 be68 b78f a4ee a505 | 37 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n003 7 97da 95c0 93ea 9f0e | 17 97da (0) 9464 (0) 9518 (0) 955d (0)\n004 6 8854 8cc3 8d19 8f9a | 9 8b43 (0) 8862 (0) 8854 (0) 8cc3 (0)\n005 4 84a9 8402 87a3 86d6 | 4 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n006 5 81a5 8006 8073 8074 | 5 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 2 8358 834f | 2 8358 (0) 834f (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","private_key":"9f0d233abf6f03526bd7a057b2f9064dfb5632022a186fcc902c6aa7a2600627","name":"node_837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","services":["bzz","pss"],"enable_msg_events":true,"port":41733},"up":true}},{"node":{"info":{"id":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","name":"node_ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","enode":"enode://23b26db5b1294383d9eea76f1d4a21a01a005282ec74c54d51f1d8d1c4ba9b19608cd921c5d735a101be0681eeaf5618e06460964f7d84656def7a07255111c8@127.0.0.1:0","enr":"0xf88fb84045e7162cf3f1ac630c92a7e123116d9b2e1666b1e895bede1122e243f0f35cdf2994006582400b1294fe4fef4deeac77bfe7bdb0e1ccd0e4ea8e52c1240509830183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10223b26db5b1294383d9eea76f1d4a21a01a005282ec74c54d51f1d8d1c4ba9b19","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"3bi+Ryw9SNxNPREkSObAxKgmoYrz87U/3++M0xBTx18=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ddb8be\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0cfc 3980 5d82 7850 | 126 402c (0) 4005 (0) 43c9 (0) 43d4 (0)\n001 8 b78f b8e1 a2a1 a8ff | 75 a505 (0) a5ac (0) a4ee (0) a7a8 (0)\n002 7 ec90 f645 f2b4 fa24 | 28 e471 (0) e681 (0) e64d (0) e2d3 (0)\n003 5 c534 c190 cd6c c961 | 16 c42e (0) c534 (0) c74d (0) c603 (0)\n004 3 d302 d700 d408 | 5 d209 (0) d3e9 (0) d302 (0) d700 (0)\n============ DEPTH: 5 ==========================================\n005 5 da36 dad0 dbd4 d959 | 5 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","private_key":"18bcdc56f12314ff79470029b0f3813f675978100fef3ddaca5023bc2f8dde78","name":"node_ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","services":["bzz","pss"],"enable_msg_events":true,"port":38607},"up":true}},{"node":{"info":{"id":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","name":"node_9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","enode":"enode://a3d56214ef40b3b64d2662d12f80d743f10da57b12601e31cbf572034244e1b299ce4be5f33a1b2f6c7eee9a79827c5d99e31d4f4b9cf64aa9ed02d901582fab@127.0.0.1:0","enr":"0xf88fb8404add71b1f22ba7a42f2b948ac2455c1e2a37e5d83ec2f50f0116cc91995cd31d2dc7ec48bc5ace7137fecaea8828738c17e66b551ca661a4f724b2ed1395ce3e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a3d56214ef40b3b64d2662d12f80d743f10da57b12601e31cbf572034244e1b2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mVk4U4Wq3nKNP1djgGWWIivB57mUbCySQHlD0ICzL40=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 995938\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 60c5 0e2b | 126 6b4e (0) 68cb (0) 6c01 (0) 6d5e (0)\n001 2 fc51 ddb8 | 55 e2d3 (0) e277 (0) e09f (0) e0a0 (0)\n002 5 b78f a327 af02 ab3f | 37 bdc5 (0) bcf8 (0) bea1 (0) be68 (0)\n003 4 837f 8854 8f9a 8e28 | 21 8b43 (0) 8862 (0) 8854 (0) 8cc3 (0)\n004 4 955d 95c0 97da 93ea | 8 97da (0) 9464 (0) 9518 (0) 955d (0)\n005 6 9ca1 9c8e 9c21 9ec8 | 6 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n============ DEPTH: 6 ==========================================\n006 1 9b8e | 1 9b8e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 9948 | 1 9948 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","private_key":"011707e678d73ecf94ba7f710501f262764a152ffa7dbe48f5b7e7dbef86a807","name":"node_9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","services":["bzz","pss"],"enable_msg_events":true,"port":45157},"up":true}},{"node":{"info":{"id":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","name":"node_0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","enode":"enode://0b612a1ab5d916d8c26372863438f68d00efff720cb1a318c642e37ac4ddc0cbdc0f21d3d1935ad022323a317ef443741ee0e6ce46c01604b94783f86719582b@127.0.0.1:0","enr":"0xf88fb84072f6428c1949285e98cf3010a22fd4023bb5fe817a070b704d991522730917097a117d183bc0722f66f9d163f8eb714e74db79ad6fcb7ac5fca67930f49bd28c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030b612a1ab5d916d8c26372863438f68d00efff720cb1a318c642e37ac4ddc0cb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DitIVYzirx+/7jilV9VgcuMJHPyu6NeEfHydz3vvm/o=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e2b48\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 fc51 d408 a8ff 9948 | 130 e471 (0) e681 (0) e64d (0) e09f (0)\n001 6 7850 60c5 56ca 5ac0 | 61 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n002 4 2c80 2ddf 26ac 3980 | 28 298a (0) 2a50 (0) 2fd2 (0) 2e65 (0)\n003 2 1049 1686 | 16 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n004 5 0314 0191 07f5 0594 | 10 025d (0) 035f (0) 0314 (0) 012b (0)\n005 3 08e5 09b3 096a | 6 08bd (0) 08f8 (0) 08e5 (0) 09b3 (0)\n006 2 0d1c 0cfc | 2 0d1c (0) 0cfc (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 0e80 | 1 0e80 (0)\n009 0 | 0\n010 0 | 0\n011 1 0e3b | 1 0e3b (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","private_key":"510468331a493c1c9e097b948955dfff54c130f51894aed02d4f46d1260021a2","name":"node_0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","services":["bzz","pss"],"enable_msg_events":true,"port":44575},"up":true}},{"node":{"info":{"id":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","name":"node_a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","enode":"enode://b7201bebbe44d4f065e0344f51747c686401af50a2bc1e4bad167b56d0f5b94eaa6e6d50bd5b2708510984708c155ac50ed29d14b941ab71d22312033bbb9a20@127.0.0.1:0","enr":"0xf88fb840a72c72b758119852724dc6373359756fc7224766b257144c15597ba291dfbf8b1d8e2cac36d326b4a0e1ce960e294438b019d49713d6232eeb5dfd63341c13b10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b7201bebbe44d4f065e0344f51747c686401af50a2bc1e4bad167b56d0f5b94e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qP+NadyzZGLREW2vpePQxyN79l2+zkgqMWhiyNZuNbY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a8ff8d\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 48de 0e2b | 126 7660 (0) 741a (0) 70f6 (0) 7049 (0)\n001 4 fc51 d408 d9cf ddb8 | 55 e681 (0) e64d (0) e471 (0) e277 (0)\n002 5 8854 8073 837f 834f | 38 87a3 (0) 86d6 (0) 8402 (0) 84a9 (0)\n003 4 be68 bfc7 b8e1 b78f | 14 bcf8 (0) bdc5 (0) bfc7 (0) bea1 (0)\n004 9 a327 a2e6 a2a1 a5ac | 13 a505 (0) a5ac (0) a4ee (0) a7a8 (0)\n005 3 acee aeb4 af02 | 3 acee (0) aeb4 (0) af02 (0)\n006 2 ab71 ab3f | 3 aaf0 (0) ab71 (0) ab3f (0)\n007 1 a970 | 1 a970 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 a8b5 | 1 a8b5 (0)\n010 0 | 0\n011 0 | 0\n012 1 a8f4 | 1 a8f4 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","private_key":"a3dc455b16cb040e97e400cbec5c77f9c6769a891569bafb9020595880600d14","name":"node_a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","services":["bzz","pss"],"enable_msg_events":true,"port":45235},"up":true}},{"node":{"info":{"id":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","name":"node_48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","enode":"enode://9422ff095b3dd7d5bb7caaf864015278473292f40803e5eab069fc7c270309b3386d001c249d10c2dde0f71ca459477ee74f149e5d7e1fe7ece9bf08237ab0dc@127.0.0.1:0","enr":"0xf88fb840df7b0ea5b6e73e0e48e983961669a7dc87cf47c6389512f75462e4d8f28e526567df2cdbb5da10b6d57e809894f1039e00f7f774c8fd1d1d14710dbae4bb8f520183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029422ff095b3dd7d5bb7caaf864015278473292f40803e5eab069fc7c270309b3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SN5VPhWv0+ika/w6W6iimBWKo9YPFA0nMCMK9czoCE0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48de55\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c9c3 d9cf d408 fc51 | 130 e09f (0) e0a0 (0) e2d3 (0) e277 (0)\n001 3 1686 0e2b 3980 | 65 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n002 5 7d16 7c46 7933 79e5 | 26 7049 (0) 70f6 (0) 7660 (0) 741a (0)\n003 5 56ca 5a8b 5ac0 5d82 | 16 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n004 3 447c 43c9 43d4 | 9 46bf (0) 44ad (0) 447a (0) 447c (0)\n005 3 4cec 4d91 4d38 | 3 4cec (0) 4d91 (0) 4d38 (0)\n006 2 4a95 4b79 | 2 4a95 (0) 4b79 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 482e | 1 482e (0)\n009 1 48b8 | 1 48b8 (0)\n010 1 48f1 | 1 48f1 (0)\n011 0 | 0\n012 1 48d7 | 1 48d7 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","private_key":"fe29ef81976826aba3a92e42c6b3848892672ee26649d67650358d54e85982e9","name":"node_48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","services":["bzz","pss"],"enable_msg_events":true,"port":40001},"up":true}},{"node":{"info":{"id":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","name":"node_398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","enode":"enode://932586d99d84466fce1c3d7a331315a768c320b890811c2a00eae226a62c05023605308437407502d54d2e09910164e7a9c6343a935e4fdb8267d1661a4a11ad@127.0.0.1:0","enr":"0xf88fb840f777fcf141adaf513c8cd83b5b2ad8716fe3f0805c0b83c31d3ee8bc13347b6370696f994cdc0cab03b8363ed9da19e3717ff65f31244ca6a3f22719f3df605c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103932586d99d84466fce1c3d7a331315a768c320b890811c2a00eae226a62c0502","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OYA4gRwcdAL+LmmUyc4vFcgWa46Z83n+qu1mrIdwIGI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 398038\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 fc51 c9c3 d9cf ddb8 | 130 e2d3 (0) e277 (0) e09f (0) e0a0 (0)\n001 6 60c5 7933 7850 5ff0 | 61 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n002 5 1b1d 1bd5 1049 1686 | 37 1dec (0) 1dc0 (0) 1fd0 (0) 18e0 (0)\n003 6 24f8 26ac 2e65 2fd2 | 11 2a50 (0) 298a (0) 2e65 (0) 2fd2 (0)\n004 5 3411 32ff 3188 31e1 | 9 36b9 (0) 3728 (0) 3411 (0) 32ff (0)\n005 3 3c5b 3cab 3f31 | 3 3f31 (0) 3c5b (0) 3cab (0)\n006 2 3a62 3b02 | 2 3a62 (0) 3b02 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 3938 397a | 2 3938 (0) 397a (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","private_key":"571a1e200af7799e0d7295849ae3beaf1d75ccfa29216b243feedb21761d2bde","name":"node_398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","services":["bzz","pss"],"enable_msg_events":true,"port":43453},"up":true}},{"node":{"info":{"id":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","name":"node_8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","enode":"enode://0703457de466898f77a218b2253e4074f9d84ddc40a4d85a7677e03f1dc45090d8a5c0ae0f3bce42a249384f9f84ed92f79c7d71a80f97e4ea6787fec0979ef7@127.0.0.1:0","enr":"0xf88fb840d9529815a2188630f6e5a9a83b676cc923f44db1dce486279c916e75d9676afc6d6babb5690670e670141db7383ce8f862fe1828478493d343ad4d8e614bda370183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030703457de466898f77a218b2253e4074f9d84ddc40a4d85a7677e03f1dc45090","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jigrDyfU+lb+FM/rafrFpT49iCx3eOsZBlPi6rfJP9I=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8e282b\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 60c5 3980 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 4 c9c3 d408 ddb8 fc51 | 55 e2d3 (0) e277 (0) e09f (0) e0a0 (0)\n002 7 b78f b5ea bbaf b8e1 | 37 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n003 6 955d 95c0 93ea 9b8e | 17 97da (0) 9464 (0) 95c0 (0) 9518 (0)\n004 5 81a5 80d7 8073 834f | 12 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n005 3 8b43 8862 8854 | 3 8b43 (0) 8862 (0) 8854 (0)\n006 2 8d19 8cc3 | 2 8cc3 (0) 8d19 (0)\n007 1 8f9a | 1 8f9a (0)\n============ DEPTH: 8 ==========================================\n008 1 8ea2 | 1 8ea2 (0)\n009 1 8e7b | 1 8e7b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","private_key":"5ee46cbe7328b036aa2e3281aec50d734d3fa00761ec99b53bf5a30a940a2006","name":"node_8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","services":["bzz","pss"],"enable_msg_events":true,"port":45567},"up":true}},{"node":{"info":{"id":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","name":"node_994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","enode":"enode://e251495df5e012ceae31fcd4e011f13d611edf3549f6a33eda33b9acbf5757be44d865d329431079380d794b06c97fadb2535cc2f5dbdca5c5aeaec59905c430@127.0.0.1:0","enr":"0xf88fb840fb7050cef033c59b67f105ef731c850b3215a560ec374d2010a4bd2627d51dbb3197c902a18ab6e66e4cf1b7fff54b0f59f9a9ef96b27e68f9293883e3c80f6b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e251495df5e012ceae31fcd4e011f13d611edf3549f6a33eda33b9acbf5757be","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mUg55fOluLI67YT7ApQTEkrxeAS3mwJj7Gv9WuxdrXg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 994839\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 48de 5ff0 1686 0e2b | 126 298a (0) 2a50 (0) 2fd2 (0) 2e65 (0)\n001 4 f645 f2b4 ec90 d408 | 55 e471 (0) e681 (0) e64d (0) e0a0 (0)\n002 5 b8e1 b78f b5ea a4ee | 37 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n003 4 8073 837f 8854 8e28 | 21 84a9 (0) 8402 (0) 86d6 (0) 87a3 (0)\n004 4 93ea 955d 95c0 97da | 8 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n005 6 9c21 9c8e 9ca1 9ec8 | 6 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n============ DEPTH: 6 ==========================================\n006 1 9b8e | 1 9b8e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 9959 | 1 9959 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","private_key":"334ce36c1f8b4c0d2139b19e7e5bb3a3a15fb0ce90610d2e1d1482d7b645c2d8","name":"node_994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","services":["bzz","pss"],"enable_msg_events":true,"port":33079},"up":true}},{"node":{"info":{"id":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","name":"node_d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","enode":"enode://39f55004bcfcc2f16c4a1b4b723534c4c9e589ab5895a3cbe311aafd0c6e6de0bb47140ec73fdaa26a6b50f5227664e84e1e1a80db2796990116ad381c21a936@127.0.0.1:0","enr":"0xf88fb8405ae4c29ace5f03e6d651ba48886e1be64addab49c04c36ac806e5a5fd9788caf222b4d1266aa622022a3e58fd35aebcb70e30a50cbd2abb8826746fbe05420770183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10239f55004bcfcc2f16c4a1b4b723534c4c9e589ab5895a3cbe311aafd0c6e6de0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1Ai7b3rxWQ4fFizgLMAWsbhu3imFHKoyQ0IS/6Kjd8g=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d408bb\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 5ff0 48de 482e 0cfc | 126 2a50 (0) 298a (0) 2fd2 (0) 2e65 (0)\n001 5 b8e1 a2e6 a8ff 8e28 | 75 b3f9 (0) b659 (0) b6df (0) b78f (0)\n002 7 ec90 f645 f2b4 f9de | 28 e471 (0) e681 (0) e64d (0) e09f (0)\n003 4 cf52 cd6c c961 c9c3 | 16 c534 (0) c42e (0) c74d (0) c603 (0)\n004 4 ddb8 dbd4 dad0 d9cf | 6 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n============ DEPTH: 5 ==========================================\n005 3 d209 d3e9 d302 | 3 d209 (0) d3e9 (0) d302 (0)\n006 1 d700 | 1 d700 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","private_key":"251a8df09943db0babcf770639c5ccce249b19a3b91f88c6beb4090f8d366ac0","name":"node_d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","services":["bzz","pss"],"enable_msg_events":true,"port":45605},"up":true}},{"node":{"info":{"id":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","name":"node_fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","enode":"enode://e92b9c292a29d8bfb7f4db4dbf539ed52534331fe43603f2c813dc801b4ec9364bff7fc962d375834ac6a1df1673c3615c40bef17b51f6debf2707acc9b17f58@127.0.0.1:0","enr":"0xf88fb840d952b221d3ae5c9e409850d227fa2dbd7c2e1db0634a5bbe1bc2ed2c46085d457766d51c388252a60d37b5490aa17cc4745f7bbe669b67e28838599f027738ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e92b9c292a29d8bfb7f4db4dbf539ed52534331fe43603f2c813dc801b4ec936","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/FFMQ8TrXGJ5hFjaXWIukkim5TDkKIzZAgGaoFxDdNg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fc514c\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0e2b 3980 48de 60c5 | 126 298a (0) 2a50 (0) 2ddf (0) 2c85 (0)\n001 9 b78f a606 a4ee a2a1 | 75 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n002 7 cd6c c961 c9c3 dbd4 | 27 c534 (0) c42e (0) c74d (0) c603 (0)\n003 6 ec90 eebd ef99 eff2 | 14 e471 (0) e681 (0) e64d (0) e09f (0)\n004 3 f2b4 f6c0 f645 | 7 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n005 3 fa24 f8ff f9de | 3 f8ff (0) f9de (0) fa24 (0)\n============ DEPTH: 6 ==========================================\n006 2 ff75 feb3 | 2 ff75 (0) feb3 (0)\n007 0 | 0\n008 0 | 0\n009 1 fc39 | 1 fc39 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","private_key":"de7c0775a3921769035f59bb73e223f1b8dfa39617f5ee35cac84c7ded6a49a2","name":"node_fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","services":["bzz","pss"],"enable_msg_events":true,"port":44357},"up":true}},{"node":{"info":{"id":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","name":"node_60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","enode":"enode://6e5ef281f10a4795906b37800a284f193c6df512a1c03450197eca7bb6d9ce2d5a4878fb2bc42afc40cf28050d15a8e2888fdc544d06d6f13528265866a5f3a6@127.0.0.1:0","enr":"0xf88fb840ac7b31fb8f269a7992246ec994fbd4a2a7f22777ade012e4b89f058b0686fd46005eb0f24df29c1b5dd22f15fc54a20ef32b2d96a5ee581c1f7ab6e3da71f21d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026e5ef281f10a4795906b37800a284f193c6df512a1c03450197eca7bb6d9ce2d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YMVkeu0VJgmXk2b7M9yLKPxgc2CY/2jSMkFYibQ9+lg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 60c564\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 9b8e 9959 8e28 d9cf | 130 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n001 4 26ac 3980 0e2b 1686 | 65 36b9 (0) 3728 (0) 3411 (0) 32ff (0)\n002 5 482e 48de 56ca 5a8b | 35 4005 (0) 402c (0) 435d (0) 43c9 (0)\n003 6 70f6 7d16 7c46 79e5 | 13 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n004 7 6b4e 68cb 6e7f 6c01 | 7 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n============ DEPTH: 5 ==========================================\n005 5 648a 6758 6790 6795 | 5 648a (0) 6790 (0) 6795 (0) 67f3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","private_key":"89bbc4a8fe5905ca2c155be018babb341d9441135f074af282a327e2977357c6","name":"node_60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","services":["bzz","pss"],"enable_msg_events":true,"port":39295},"up":true}},{"node":{"info":{"id":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","name":"node_16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","enode":"enode://d845540617736b1958a11594e15934337e7127add929bad0c013d12cd65bb64d7dcb2d8dd41977f03a22b4e86e71a1edde519259f5dca5668307527cfe16bcf0@127.0.0.1:0","enr":"0xf88fb840782b90fecea289d4c0215935b270fcc0fd83a631e1fb144bf3134dbf4582abd20975b3712cf657a6d9a1d6ea942967f04741f6c2916f23ddef51ce04bea2d2490183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d845540617736b1958a11594e15934337e7127add929bad0c013d12cd65bb64d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FoaOxdj0kKxz6ii06P3aVawUm7Gq+xd1RbVLhKWtU2c=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 16868e\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 f645 c9c3 d408 b5ea | 130 e277 (0) e2d3 (0) e0a0 (0) e09f (0)\n001 7 482e 48de 56ca 5d82 | 61 46bf (0) 44ad (0) 447a (0) 447c (0)\n002 4 2ddf 2c80 2e65 3980 | 28 2a50 (0) 298a (0) 2fd2 (0) 2e65 (0)\n003 6 0191 0561 07f5 096a | 21 025d (0) 035f (0) 0314 (0) 012b (0)\n004 6 1dec 18e0 19ea 194e | 9 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n005 3 138d 1070 1049 | 3 138d (0) 1070 (0) 1049 (0)\n============ DEPTH: 6 ==========================================\n006 2 1484 140d | 2 1484 (0) 140d (0)\n007 1 1784 | 1 1784 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","private_key":"bde6dc606a9dc59b55e66e91238cd63fc2c84b7edc67fa0321b927540331ca5e","name":"node_16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","services":["bzz","pss"],"enable_msg_events":true,"port":41853},"up":true}},{"node":{"info":{"id":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","name":"node_9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","enode":"enode://09589964a1f4465dee4d0ce2388504a335ccfb484711b50e3a9a80b8b0671acb75b7d6aac621bf17746a584d606bb0aa677c302a4d44653ae28f11b437df20a9@127.0.0.1:0","enr":"0xf88fb840095da26616eca877077703e0e2b51dd8b7dadf89e7da897184fa333b8cde3d123ae6c94cd31c163ce10dbbf39a9ce6bd32e51570e5aeb9f82ae57427fd2a9b440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10309589964a1f4465dee4d0ce2388504a335ccfb484711b50e3a9a80b8b0671acb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"m45rs6f+TcZayXQE5UbYt3fQaMlLwjVfTxpRCtbBGQU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9b8e6b\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 60c5 5ac0 5ff0 1686 | 126 46bf (0) 44ad (0) 447a (0) 447c (0)\n001 3 f645 fc51 c9c3 | 55 e277 (0) e2d3 (0) e0a0 (0) e09f (0)\n002 5 bbaf af02 a327 a2e6 | 37 bdc5 (0) bcf8 (0) bfc7 (0) bea1 (0)\n003 5 8073 837f 8d19 8f9a | 21 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n004 3 93ea 95c0 955d | 8 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n005 6 9ec8 9f7d 9f0e 9c21 | 6 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n============ DEPTH: 6 ==========================================\n006 2 9948 9959 | 2 9948 (0) 9959 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","private_key":"c540be3b3745151e75287e86c62db0fa68c68a13c06e511d9ccafa0b720969a9","name":"node_9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","services":["bzz","pss"],"enable_msg_events":true,"port":41055},"up":true}},{"node":{"info":{"id":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","name":"node_c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","enode":"enode://9022be2eafd1b596287e78101c820178a736461ebf18c02d293c56d67cc881daa6b234e7b7d1f37ac3f49ececef3b96edbdc462ce5f5fe2bf41079787a8093a5@127.0.0.1:0","enr":"0xf88fb840f7351379bc850fcc93ba2ef5af9d2f0407e068046473feb7b496ec6fa8f56c0151ed144e7a078a2160242e4793f0508666d82ac0bf8b809d7fb1b8c0becc07630183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039022be2eafd1b596287e78101c820178a736461ebf18c02d293c56d67cc881da","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ycMC3kr+e03LtvPjZs50cIP53NfVxqAbk52lzcbMyHQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c9c302\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 3980 1049 1686 60c5 | 126 3411 (0) 36b9 (0) 3728 (0) 32ff (0)\n001 6 b78f a327 a606 af02 | 75 b3f9 (0) b659 (0) b6df (0) b78f (0)\n002 6 ec90 fa24 feb3 fc51 | 28 e471 (0) e681 (0) e64d (0) e2d3 (0)\n003 6 d9cf dbd4 dad0 ddb8 | 11 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n004 2 c272 c190 | 8 c534 (0) c42e (0) c74d (0) c603 (0)\n005 4 cf52 cc33 cdb1 cd6c | 4 cf52 (0) cc33 (0) cdb1 (0) cd6c (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 c8ea c8c8 | 2 c8ea (0) c8c8 (0)\n008 1 c961 | 1 c961 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","private_key":"2d2c2ccb0a0c233399b577f4b799b0181de2cd4673c1207b189502c87c899154","name":"node_c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","services":["bzz","pss"],"enable_msg_events":true,"port":33367},"up":true}},{"node":{"info":{"id":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","name":"node_5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","enode":"enode://47a8bfa3642fb14aad3497d548cd0ff911bb2e2a2cb1690be88d88e3a6bf854a4cab67630b26b8aced1d96c0e4c0cea337456b5e7fda0712b0e63b17ce8566d6@127.0.0.1:0","enr":"0xf88fb840c2abefc8eb1e4331f1a75917b53d225e82282d262f0e4bb2f4b77c9bbe6efb7703a6ff2d0f874bd663d1ac50566237c65b0438059ff31730c896e201938003b50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10247a8bfa3642fb14aad3497d548cd0ff911bb2e2a2cb1690be88d88e3a6bf854a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"X/CcaFlzaq16gqO/s/GhqLPA1Y+DGGNUDZwwE901dF4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5ff09c\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 af02 a4ee 9948 9b8e | 130 b3f9 (0) b6df (0) b659 (0) b78f (0)\n001 5 2ddf 3980 0e2b 1049 | 65 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n002 5 79e5 6dd3 6d3c 68cb | 26 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n003 5 43d4 43c9 4d38 48de | 19 46bf (0) 44ad (0) 447a (0) 447c (0)\n004 4 50c1 5538 5663 56ca | 6 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n005 3 5814 5ac0 5a8b | 6 5987 (0) 5814 (0) 5bd8 (0) 5a26 (0)\n============ DEPTH: 6 ==========================================\n006 3 5c37 5c7c 5d82 | 3 5c37 (0) 5c7c (0) 5d82 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","private_key":"00702831aac71a1861099a693ff9a0eb5bbad3993d5054de5722027d2906dc32","name":"node_5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","services":["bzz","pss"],"enable_msg_events":true,"port":45801},"up":true}},{"node":{"info":{"id":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","name":"node_482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","enode":"enode://61e80e865b0692bff9618d89bec4178cc713d2efccfd0c9f11a94a3bb65f510ccae3af079e3ec0db026b08c0f41eef7440b0a04cbf7a88a8e948a7bbe0f09d4b@127.0.0.1:0","enr":"0xf88fb8408eae3376cda8894401f6a76ded081e214dbcdcc35516b057e7e27962ce8e71fb038d41811263fcd3e7ae470ebad950d4ce9de19c18246bbe58efd4e64cd0b4ea0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10361e80e865b0692bff9618d89bec4178cc713d2efccfd0c9f11a94a3bb65f510c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SC7D3AVGBXnqm86HZ3vT2aGTDoAfq+umB7ira4cp/xU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 482ec3\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 a4ee c9c3 d408 f645 | 130 c74d (0) c6a8 (0) c603 (0) c534 (0)\n001 3 1bd5 1686 1049 | 65 36b9 (0) 3728 (0) 3411 (0) 32ff (0)\n002 5 60c5 68cb 79e5 7850 | 26 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n003 7 5663 56ca 5814 5a8b | 16 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n004 4 447c 435d 43d4 43c9 | 9 46bf (0) 44ad (0) 447a (0) 447c (0)\n005 3 4cec 4d91 4d38 | 3 4cec (0) 4d91 (0) 4d38 (0)\n006 2 4a95 4b79 | 2 4a95 (0) 4b79 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 4 48b8 48f1 48d7 48de | 4 48b8 (0) 48f1 (0) 48d7 (0) 48de (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","private_key":"914825085a6c709b5fb3130de8c9b6f9593efcb2fa9db695821c0ad50d637918","name":"node_482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","services":["bzz","pss"],"enable_msg_events":true,"port":41929},"up":true}},{"node":{"info":{"id":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","name":"node_1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","enode":"enode://16980066851e866b8eec7c10d0b26aa7c7839271112682530f4801d3c494f8eca313971c90b19590d0b4f4995e2c799e328795c06bc5c030d200d40c803bfccc@127.0.0.1:0","enr":"0xf88fb84015420addbd5c0cd32d328b36acc314ecc7a045c9197df579feed2a3e4d1db4d930917f78b1bd4a674d1aa7ba04e0e6e3420d30208274bcc61493281b08b9fdc60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10216980066851e866b8eec7c10d0b26aa7c7839271112682530f4801d3c494f8ec","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EEnTIaRQcmzznR186hwQi+O+wTemRLYs3HOoU/Wlois=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1049d3\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 c9c3 d408 fa24 f645 | 130 c603 (0) c6a8 (0) c74d (0) c42e (0)\n001 6 7850 7d16 56ca 5d82 | 61 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n002 6 3980 2e65 2c80 2ddf | 28 3728 (0) 36b9 (0) 3411 (0) 32ff (0)\n003 4 0561 07f5 0e80 0e2b | 21 025d (0) 035f (0) 0314 (0) 012b (0)\n004 6 1dec 18e0 19ea 194e | 9 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n005 4 1484 140d 1784 1686 | 4 1484 (0) 140d (0) 1784 (0) 1686 (0)\n============ DEPTH: 6 ==========================================\n006 1 138d | 1 138d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 1070 | 1 1070 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","private_key":"199675da9f4b1fd8e250d9ba36169cc5b10d83f69b39656a4b8e5c7536feaef2","name":"node_1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","services":["bzz","pss"],"enable_msg_events":true,"port":46623},"up":true}},{"node":{"info":{"id":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","name":"node_a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","enode":"enode://d9a019201fc917f5e3bb43c74a43fbdb9c66a2ecdc3e751f299e5a984d91e005be151f1d7d28a1c4fff2cec0ee358c79bf2f767e391d4f6ac110a3e268da7f15@127.0.0.1:0","enr":"0xf88fb840755a7a98e81b46c4f8effc43bf335c6043a85c0351fdcad60a80aa1b0033db4b569b0b9e452bf29597b83a24824ae11bca382614a3eaf87ceda9ff79d9de62f60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d9a019201fc917f5e3bb43c74a43fbdb9c66a2ecdc3e751f299e5a984d91e005","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oubJAFEXaMjJlHqw+i5zl1zypM7H/RUher26JcMpMX4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a2e6c9\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 26ac 1049 | 126 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n001 3 d408 fa24 f645 | 55 c534 (0) c42e (0) c74d (0) c603 (0)\n002 4 8073 8f9a 9948 9b8e | 38 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n003 5 be68 b8e1 bbaf b78f | 14 b3f9 (0) b659 (0) b6df (0) b78f (0)\n004 4 a8ff a8f4 ab3f af02 | 10 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n005 6 a742 a616 a606 a505 | 7 a616 (0) a606 (0) a7a8 (0) a742 (0)\n006 2 a0c8 a1c8 | 2 a0c8 (0) a1c8 (0)\n============ DEPTH: 7 ==========================================\n007 2 a330 a327 | 2 a330 (0) a327 (0)\n008 0 | 0\n009 1 a2a1 | 1 a2a1 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","private_key":"4662f9a82f5f82c5aab562b02fffb40fe8b62834bae8104220f46efd89898980","name":"node_a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","services":["bzz","pss"],"enable_msg_events":true,"port":33333},"up":true}},{"node":{"info":{"id":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","name":"node_a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","enode":"enode://453ddc011affe7c5cf20098ebed634712f9be29be2f136db7321e21029a732ef5e9318f6500053225345d773e7fce47dd0e219b9c2a29a433e618c2471149840@127.0.0.1:0","enr":"0xf88fb8402c342bd3642c99cf153a0106b072c0342cea619d53b64076d24cf4d67838ed1a20e65fc7c73a613a6cbba324aaec9aa64fe96559e44ab51433b80746e933d9880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102453ddc011affe7c5cf20098ebed634712f9be29be2f136db7321e21029a732ef","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"pO5Juyyqu2uUSLzf8fw8xnOi2wTqufXGLReH8sJZkKA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a4ee49\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 1049 26ac 7d16 482e | 126 025d (0) 035f (0) 0314 (0) 012b (0)\n001 4 fc51 fa24 f2b4 f645 | 55 c534 (0) c42e (0) c74d (0) c603 (0)\n002 5 837f 8f9a 8e28 9948 | 38 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n003 5 be68 bfc7 bbaf b78f | 14 b3f9 (0) b659 (0) b6df (0) b78f (0)\n004 3 a8ff ab3f af02 | 10 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n005 4 a1c8 a327 a2a1 a2e6 | 6 a0c8 (0) a1c8 (0) a330 (0) a327 (0)\n006 3 a606 a7a8 a742 | 4 a616 (0) a606 (0) a7a8 (0) a742 (0)\n============ DEPTH: 7 ==========================================\n007 2 a505 a5ac | 2 a505 (0) a5ac (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","private_key":"59ad354948f16052bee88884c787bea727cb225c8573f641845ac1ac2357d6a5","name":"node_a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","services":["bzz","pss"],"enable_msg_events":true,"port":36935},"up":true}},{"node":{"info":{"id":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","name":"node_f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","enode":"enode://af59e58eb60a9dc748725bc8525d5e216517bd1c27f15728d2959890b8b5997c33a6b7efea09f3ba50b0f8048cace4d001a24b5ac4287ef1721e0c78c577b448@127.0.0.1:0","enr":"0xf88fb8409a8b6d7253f6d169fb548b469ba22aff1ed726350e671757249d57cf12b9b1d54724906cae553e56619591a1da8e799760729eb50980d43b1544427ae48c8c370183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102af59e58eb60a9dc748725bc8525d5e216517bd1c27f15728d2959890b8b5997c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9kWqucsr0nCZmLOOV4nJxfaNQHZebL2TuS5jg+tnHbo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f645aa\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 1686 1049 26ac 7d16 | 126 07f5 (0) 046c (0) 0594 (0) 0561 (0)\n001 10 8f9a 9948 9b8e b78f | 75 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n002 10 d408 d700 ddb8 d9cf | 27 c534 (0) c42e (0) c74d (0) c603 (0)\n003 4 e0a0 eebd ed42 ec90 | 14 e471 (0) e681 (0) e64d (0) e277 (0)\n004 4 feb3 fc51 f9de fa24 | 7 fc39 (0) fc51 (0) ff75 (0) feb3 (0)\n005 4 f1ed f305 f215 f2b4 | 4 f1ed (0) f305 (0) f215 (0) f2b4 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f756 | 1 f756 (0)\n008 1 f6c0 | 1 f6c0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","private_key":"6ff11e7bc067a6cbe95f29b9359cd01605c91281829e73e543154f78ed8e7962","name":"node_f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","services":["bzz","pss"],"enable_msg_events":true,"port":41177},"up":true}},{"node":{"info":{"id":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","name":"node_5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","enode":"enode://8f9ce802b9786b4a1aa8b5644e566d23306c0d0eb77e6df2965b1e274d690b6e2502e7c011240b18cb138c87af5681de7a883889122b0615c0c638dc31dee213@127.0.0.1:0","enr":"0xf88fb840fa8500339bf2fbc498dadfc8621c437bdb9120747fabf305b106c05d497c3067734896952dafd120f87ca214cb31457fba84b83a7a0b61abd8f185ffe94970ee0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038f9ce802b9786b4a1aa8b5644e566d23306c0d0eb77e6df2965b1e274d690b6e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WsDQC41kfexi0m4aaJ/QW4t6GnmrjENJO9bX0gmBbfE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5ac0d0\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 bbaf 8f9a 9b8e f2b4 | 130 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n001 4 0cfc 0e2b 0e80 26ac | 65 025d (0) 035f (0) 0314 (0) 012b (0)\n002 3 6d3c 79e5 7d16 | 26 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n003 6 43c9 43d4 4cec 4d38 | 19 46bf (0) 44ad (0) 447a (0) 447c (0)\n004 3 5538 56ca 5663 | 6 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n005 3 5ff0 5c7c 5d82 | 4 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n006 2 5987 5814 | 2 5987 (0) 5814 (0)\n007 1 5bd8 | 1 5bd8 (0)\n============ DEPTH: 8 ==========================================\n008 1 5a26 | 1 5a26 (0)\n009 1 5a8b | 1 5a8b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","private_key":"37d0a7ae7d8c4e2d793d9abd755aad9a8b44f13935e905b00e1f3dfdf0f52095","name":"node_5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","services":["bzz","pss"],"enable_msg_events":true,"port":39637},"up":true}},{"node":{"info":{"id":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","name":"node_7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","enode":"enode://63b48abfe4bd6eb3bb9cd83e20c13d4e1155c4d0e67d9f0f1fd7aa134a3c70b07eff745b46eb65ce17a2586d6bbc99cfe2b09a909211d1bd906dc518c6d028a1@127.0.0.1:0","enr":"0xf88fb84060ab746693d04040fa4a967d48408a7121a17efbe8c2ab834db16aa034e76736313708f92b2c32f579368352ba5953b50658b408af972a1fd6db52ba8b5d31840183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10363b48abfe4bd6eb3bb9cd83e20c13d4e1155c4d0e67d9f0f1fd7aa134a3c70b0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fRYqEWYlhfjDjYj7JBYj5nus+QcDBl2ubAkrS1B9ZUM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7d162a\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f645 f2b4 fa24 a4ee | 130 c534 (0) c42e (0) c74d (0) c603 (0)\n001 3 1049 2fd2 26ac | 65 035f (0) 0314 (0) 025d (0) 0191 (0)\n002 5 43d4 48de 482e 56ca | 35 46bf (0) 44ad (0) 447a (0) 447c (0)\n003 5 60c5 68cb 6e7f 6d3c | 13 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n004 3 7660 7049 70f6 | 4 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n005 4 7895 7850 7933 79e5 | 4 7895 (0) 7850 (0) 7933 (0) 79e5 (0)\n006 1 7e47 | 1 7e47 (0)\n============ DEPTH: 7 ==========================================\n007 3 7ce7 7c7c 7c46 | 3 7ce7 (0) 7c7c (0) 7c46 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","private_key":"9304de16b2dad1e33f2436981bb04e64cbfbd2b153362b7f99b6e8ed93f2e3c7","name":"node_7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","services":["bzz","pss"],"enable_msg_events":true,"port":43535},"up":true}},{"node":{"info":{"id":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","name":"node_af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","enode":"enode://7651426a392ebbda1e38bda8c61f84d23619acc84c23482c366aa93172e0e69d0db6cec3a0117a8b29b469cfb4867640c19cde672f97b8e0a898721fdfcf81d2@127.0.0.1:0","enr":"0xf88fb840b963eedc19e55fea385cb79ba3edb722a5c9cd6b3837cae1b8b5bd42752a174a1fe5c8c3e1f1317f3f7dbc12ea24d98f7f8c47251ada9f5f7e2ef957f22a4d880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027651426a392ebbda1e38bda8c61f84d23619acc84c23482c366aa93172e0e69d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rwLC9HHparje+9IpIVaVuV5k98eLFFtnk6I4lh9Vb78=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: af02c2\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1049 7d16 5ff0 56ca | 126 025d (0) 035f (0) 0314 (0) 012b (0)\n001 4 c9c3 f645 f2b4 fa24 | 55 c42e (0) c534 (0) c74d (0) c603 (0)\n002 4 955d 9959 9b8e 8f9a | 38 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n003 8 bfc7 be68 bea1 b8e1 | 14 bcf8 (0) bdc5 (0) bfc7 (0) be68 (0)\n004 7 a7a8 a742 a5ac a4ee | 13 a0c8 (0) a1c8 (0) a330 (0) a327 (0)\n005 5 a970 a8b5 a8ff a8f4 | 7 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n============ DEPTH: 6 ==========================================\n006 1 acee | 1 acee (0)\n007 1 aeb4 | 1 aeb4 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","private_key":"db442bd6d5c398b9067accca6107d7b8e10ba8c679a04e038cbc5a31c15cb44a","name":"node_af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","services":["bzz","pss"],"enable_msg_events":true,"port":36073},"up":true}},{"node":{"info":{"id":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","name":"node_56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","enode":"enode://3977a7e2abfbb0b874ef30206cf7ae8dbd7ff49318570256ed3a8f50d5185bd2aa2c0a0b605e3b0983036e397760f8b6825426e1854b934902f881f1f2d5177b@127.0.0.1:0","enr":"0xf88fb840deafd8851984faee193023cc0f9b9afc4230fec5d8853a822d9f3af256ffd26c7c696165cdd9fa3bef3492bd9393b312bbb433aa86fcfbdf387c2e4d333607250183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033977a7e2abfbb0b874ef30206cf7ae8dbd7ff49318570256ed3a8f50d5185bd2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Vsqd2Ealig/6e0moiq1VmjOLpTWm9zhGi48UbJeJDLI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 56ca9d\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f645 f2b4 af02 | 130 c74d (0) c603 (0) c6a8 (0) c42e (0)\n001 6 0e80 0e2b 1686 1049 | 65 025d (0) 0314 (0) 035f (0) 0111 (0)\n002 3 60c5 79e5 7d16 | 26 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n003 5 43c9 43d4 4d38 48de | 19 46bf (0) 44ad (0) 447a (0) 447c (0)\n004 5 5814 5ac0 5a8b 5d82 | 10 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n005 3 52a8 50c1 5144 | 3 52a8 (0) 5144 (0) 50c1 (0)\n============ DEPTH: 6 ==========================================\n006 1 5538 | 1 5538 (0)\n007 0 | 0\n008 1 5663 | 1 5663 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","private_key":"4b58bf70006ecc4c786de6a7e24d312dbe2dd18a5c61cd2255e343b02f20bb24","name":"node_56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","services":["bzz","pss"],"enable_msg_events":true,"port":33231},"up":true}},{"node":{"info":{"id":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","name":"node_26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","enode":"enode://d555fe464791f46530284107d275f268600ac4b18c0cd90ff85c6b7c0af0050a8b42cf6e631500f750737be9621ba85fbbaab4b8ecc7dcb0dbb7d4c3bf45c066@127.0.0.1:0","enr":"0xf88fb84073b57f889ad85e60f317292c360ebdf010410087fdcdfe33202d93acab67d7f515b57d160ff1e3f046026e03970154f616c655ad78ebf85a16d3534d07e64bd60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d555fe464791f46530284107d275f268600ac4b18c0cd90ff85c6b7c0af0050a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JqzDw3PCkVCvMLvJJk0MRMfGBv9zdzmd34RGNel6/Po=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 26acc3\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 9f0e 8f9a a2e6 a4ee | 130 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n001 5 6d3c 60c5 7d16 5ac0 | 61 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n002 4 0e80 0e2b 1bd5 1049 | 37 012b (0) 0111 (0) 0191 (0) 025d (0)\n003 3 3980 32ff 3188 | 17 36b9 (0) 3728 (0) 3411 (0) 30fe (0)\n004 7 298a 2a50 2fd2 2e65 | 7 298a (0) 2a50 (0) 2fd2 (0) 2e65 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 24f8 244c | 2 244c (0) 24f8 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 26ab | 1 26ab (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","private_key":"4db62bb95214bf5041d1bcd4a73488fcdaaa5616fe4e911e2621181956f3deda","name":"node_26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","services":["bzz","pss"],"enable_msg_events":true,"port":35363},"up":true}},{"node":{"info":{"id":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","name":"node_fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","enode":"enode://5d3165b8480aceb9a29a4b61b3ab32269c0528b62f0c58315dec25b4567cffff0e9a6e0832a40f555b1f37d268bf1591a93b1fe8858c54d1c41b0786a5f82ed4@127.0.0.1:0","enr":"0xf88fb840384d6f2d0e7aeea7e17230d68adf6c986544d7e0ddb16a747f8ca2ff2e208b65632e299c8bcee387db034659bc60d6fe20be94eed139b54e1c33fea4f0b664c20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025d3165b8480aceb9a29a4b61b3ab32269c0528b62f0c58315dec25b4567cffff","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+iQEEbxPPkTfyj+u3REsd0Ome1IqkQvJlpbvCzFzLuI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fa2404\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 79e5 7d16 1049 2ddf | 126 648a (0) 67f3 (0) 6795 (0) 6790 (0)\n001 8 8f9a bbaf b8e1 b5ea | 75 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n002 6 d408 ddb8 d9cf c190 | 27 c603 (0) c6a8 (0) c74d (0) c534 (0)\n003 4 e0a0 ef99 eebd ec90 | 14 e471 (0) e681 (0) e64d (0) e2d3 (0)\n004 5 f756 f6c0 f645 f305 | 7 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n005 3 fc51 fc39 feb3 | 4 fc39 (0) fc51 (0) ff75 (0) feb3 (0)\n============ DEPTH: 6 ==========================================\n006 2 f8ff f9de | 2 f8ff (0) f9de (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","private_key":"211a1e252e6faf64120c7e80193de1fb9c8574e8839437085db6624c65afb2c3","name":"node_fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","services":["bzz","pss"],"enable_msg_events":true,"port":40123},"up":true}},{"node":{"info":{"id":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","name":"node_f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","enode":"enode://d7318bb4df307ed03251fed0ebc0b514ff6ce6b2953bfc2f41eebd1ed2cc03d3290b1abe8ac51e22661fa91f8cfcacc7e7bdb1405e5cac4cdbf56475483daa9b@127.0.0.1:0","enr":"0xf88fb840f435115eab43ea3daa96fcf671263bd99032cf92a48d2a4331d533663d34cd32064567c172c0bceb4e8160e59433053e1b2b558538748fbda084fd167120e7690183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d7318bb4df307ed03251fed0ebc0b514ff6ce6b2953bfc2f41eebd1ed2cc03d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8rSaIkfJxej291WDSjf+XBfyCPmUh44UtwAeQE9S4SU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f2b49a\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 7d16 5ac0 56ca 2e65 | 126 0191 (0) 012b (0) 0111 (0) 0314 (0)\n001 10 9948 8f9a a742 a4ee | 75 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n002 7 cd6c c9c3 c190 d9cf | 27 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n003 2 e0a0 ec90 | 14 e64d (0) e681 (0) e471 (0) e277 (0)\n004 6 feb3 fc39 fc51 f8ff | 7 fc39 (0) fc51 (0) ff75 (0) feb3 (0)\n005 3 f756 f6c0 f645 | 3 f756 (0) f6c0 (0) f645 (0)\n006 1 f1ed | 1 f1ed (0)\n============ DEPTH: 7 ==========================================\n007 1 f305 | 1 f305 (0)\n008 1 f215 | 1 f215 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","private_key":"6f4c1a8084c43a09372f46f2d9c9d47e946032ad4494c25e53ab442810dfb7fc","name":"node_f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","services":["bzz","pss"],"enable_msg_events":true,"port":46219},"up":true}},{"node":{"info":{"id":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","name":"node_b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","enode":"enode://f2200c6d168fd4bf3f5ed5ac408ee95b95a35365e8c342dcfcba922300690d24ca30314c5d635505791f54e2deded324817ffe3129c898cb4a426adf595eb724@127.0.0.1:0","enr":"0xf88fb84021725022f3ac59f570e89280f9dd63209a73639e93974cd54845b965aa169be11392f71f7989121c8b9ba986bcb11b10faa14be90ddaa9ee8a129f76f3e33d360183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f2200c6d168fd4bf3f5ed5ac408ee95b95a35365e8c342dcfcba922300690d24","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"teq0hptMtlvcHlyrRcAwFtIC+fW2aL5QBmRRz8+e8pk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b5eab4\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1686 0e80 24f8 79e5 | 126 1fd0 (0) 1dec (0) 1dc0 (0) 18e0 (0)\n001 2 fa24 f2b4 | 55 c74d (0) c6a8 (0) c603 (0) c42e (0)\n002 3 9948 8e28 8f9a | 38 9ec8 (0) 9f0e (0) 9f7d (0) 9c21 (0)\n003 5 af02 a4ee a742 a2e6 | 23 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n004 6 bfc7 be68 bea1 ba91 | 8 bdc5 (0) bcf8 (0) be68 (0) bea1 (0)\n005 1 b3f9 | 1 b3f9 (0)\n============ DEPTH: 6 ==========================================\n006 3 b78f b659 b6df | 3 b78f (0) b659 (0) b6df (0)\n007 1 b4a1 | 1 b4a1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","private_key":"481278a076dd22f579d2e3224ee46c4efb0adf98a25587e4047dbc41a531583d","name":"node_b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","services":["bzz","pss"],"enable_msg_events":true,"port":37951},"up":true}},{"node":{"info":{"id":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","name":"node_79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","enode":"enode://075d1af75650c9de403f935ba958bd36f2dcb4f54812a57032e064eacf6791b2fadabd15082534259be0de378b8ec19b5c5bece38fd2f85f6d61f696d4ac14e4@127.0.0.1:0","enr":"0xf88fb8403597b43e61519416d408305834e8a89ab71a0a61b3f4f053f11f5968299862341d5ec75769bbb4cf7480c8bef7b24e1b8e3aff66288460abd1ed368813e91d150183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102075d1af75650c9de403f935ba958bd36f2dcb4f54812a57032e064eacf6791b2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eeXGxteMiMV5ADzaBEiC7LBFIPutH1/q2+e20j/hg8g=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 79e5c6\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fa24 8f9a a327 b5ea | 130 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n001 4 0e80 2fd2 2c80 2ddf | 65 1dc0 (0) 1dec (0) 1fd0 (0) 18e0 (0)\n002 7 482e 48de 43d4 43c9 | 35 4cec (0) 4d91 (0) 4d38 (0) 4b79 (0)\n003 4 60c5 68cb 6d3c 6dd3 | 13 648a (0) 6758 (0) 6790 (0) 6795 (0)\n004 2 7049 70f6 | 4 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n005 5 7e47 7ce7 7c7c 7c46 | 5 7e47 (0) 7ce7 (0) 7c7c (0) 7c46 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 7850 7895 | 2 7895 (0) 7850 (0)\n008 1 7933 | 1 7933 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","private_key":"9457ffd6b462dc1c0231d33b4fb9815c915a5ece2c906083d0545bae269b1838","name":"node_79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","services":["bzz","pss"],"enable_msg_events":true,"port":44929},"up":true}},{"node":{"info":{"id":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","name":"node_8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","enode":"enode://0ba5f5e13ed3f24bcc90ac6187a06331385aa18072a6353970a149cb65da7f8408e3bd27fdc0f2d790ec7a2c5a4f5c645ef4a150cb4fdde987537a60c37142c0@127.0.0.1:0","enr":"0xf88fb8403e7501b357ca709034505ffc033677386293dabf95f8c427892c5366a7ae2e0f69e68bf5b49160bf671794419a71fdbdd1334e34f74f68f77575078e1e3c90f10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020ba5f5e13ed3f24bcc90ac6187a06331385aa18072a6353970a149cb65da7f84","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"j5qizTPRjny0SU0Rp1Msl+tKHK4XKyFlwmrk7SSIfA0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8f9aa2\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 26ac 2ddf 5ac0 43d4 | 126 1fd0 (0) 1dc0 (0) 1dec (0) 1add (0)\n001 7 d700 d9cf ddb8 fa24 | 55 da36 (0) dad0 (0) dbd4 (0) d959 (0)\n002 9 a8f4 af02 a2a1 a2e6 | 37 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n003 4 955d 9ca1 9959 9b8e | 17 9ec8 (0) 9f0e (0) 9f7d (0) 9c21 (0)\n004 3 8073 834f 837f | 12 86d6 (0) 87a3 (0) 8402 (0) 84a9 (0)\n005 2 8b43 8854 | 3 8b43 (0) 8862 (0) 8854 (0)\n006 2 8cc3 8d19 | 2 8cc3 (0) 8d19 (0)\n============ DEPTH: 7 ==========================================\n007 3 8ea2 8e7b 8e28 | 3 8ea2 (0) 8e7b (0) 8e28 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","private_key":"f83575bfe6442b53eb4d8c355e1200c4401c098583e660934bf9987f9300e6fc","name":"node_8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","services":["bzz","pss"],"enable_msg_events":true,"port":35903},"up":true}},{"node":{"info":{"id":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","name":"node_2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","enode":"enode://29e1ab89b8c45319b773556c3422348d68748120f103b1806eb3fa94fb57117771a4e9811a97855b4076957253cfda4e1d7e7d5548464708fa7ec7107eec12d5@127.0.0.1:0","enr":"0xf88fb840979111f3046ade721c9e294e8d0656436a86fbc0cf8b2838b30c39d61a12386f5d18e6f92931a25b2b78f7286b8d8ba013719c6b55a32cb5f035f4668f5a38310183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10329e1ab89b8c45319b773556c3422348d68748120f103b1806eb3fa94fb571177","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Ld/92/RS8MkmgFinOfV1f7kCgcv9Mb1vdgrMM5L+wSo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2ddffd\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fa24 f2b4 bbaf 8f9a | 130 da36 (0) dad0 (0) dbd4 (0) d959 (0)\n001 3 5ff0 6dd3 79e5 | 61 4cec (0) 4d91 (0) 4d38 (0) 4b79 (0)\n002 5 1686 1049 07f5 0e2b | 37 1fd0 (0) 1dc0 (0) 1dec (0) 18e0 (0)\n003 4 3980 3411 3188 32ff | 17 36b9 (0) 3728 (0) 3411 (0) 30fe (0)\n004 3 244c 24f8 26ac | 4 244c (0) 24f8 (0) 26ab (0) 26ac (0)\n005 2 2a50 298a | 2 2a50 (0) 298a (0)\n006 2 2e65 2fd2 | 2 2fd2 (0) 2e65 (0)\n============ DEPTH: 7 ==========================================\n007 2 2c85 2c80 | 2 2c85 (0) 2c80 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","private_key":"3c16c760b1da414e3f0702e51bb7b991c9f8f24d6780298e7f1c4a2211e65148","name":"node_2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","services":["bzz","pss"],"enable_msg_events":true,"port":37059},"up":true}},{"node":{"info":{"id":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","name":"node_bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","enode":"enode://f7560694a563f7b8b45223d669cb0c3bb40c7d6d3c2c7a02edb265933a0cea0746f94f112043dd9614675b71e6aabda899b082aa80ce92a1c4bc2815f48d70ca@127.0.0.1:0","enr":"0xf88fb840dc4fa4b1749e43011079de3d46e7621a199adbd688f08a6430dac3a3a5a968d64ffad4738b308452154a2d6bbf4d88aea49250c65e68297d8e084c6992e98c910183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f7560694a563f7b8b45223d669cb0c3bb40c7d6d3c2c7a02edb265933a0cea07","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"u6+sW6WRXbPIDiiyScrSYLm12tH3KAY8SPqPYddVbhc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bbafac\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5ac0 6dd3 2ddf | 126 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n001 4 ec90 fa24 feb3 f2b4 | 55 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n002 5 955d 9f7d 9b8e 8e28 | 38 9ec8 (0) 9f0e (0) 9f7d (0) 9c21 (0)\n003 6 af02 a4ee a742 a2a1 | 23 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n004 5 b3f9 b6df b78f b4a1 | 6 b3f9 (0) b78f (0) b659 (0) b6df (0)\n005 5 bdc5 bcf8 bfc7 be68 | 5 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n============ DEPTH: 6 ==========================================\n006 1 b8e1 | 1 b8e1 (0)\n007 1 ba91 | 1 ba91 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","private_key":"92e3be78001b291633af182ae0eaa04e18135ff78f3f44ea1807ade09e09f9c4","name":"node_bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","services":["bzz","pss"],"enable_msg_events":true,"port":34263},"up":true}},{"node":{"info":{"id":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","name":"node_a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","enode":"enode://095fd8d08d7c8f838e4b0a8ae5d5dbc252f1f8fa2f4909b00c4e1a76abd7e97f55201ffac074124ec2de620f242c33f3a5a6716f0105311320328bfb71b37613@127.0.0.1:0","enr":"0xf88fb84023807c617fe27431d11170d14386c718cb44cc0bc380888e41340bc3a6b2fed73035c05d36ab2f0c51da29e46bd4188c4e1a10d987249dad7fa69d4e4a2ee2d70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103095fd8d08d7c8f838e4b0a8ae5d5dbc252f1f8fa2f4909b00c4e1a76abd7e97f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oydJ3E4TSk+7A4YYxYp8Bbu6oG8UNt43VDQa+GQCWBs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a32749\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2e65 43d4 79e5 6dd3 | 126 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n001 6 d9cf c9c3 c190 f1ed | 55 c74d (0) c603 (0) c6a8 (0) c534 (0)\n002 5 9b8e 9959 9f7d 9ca1 | 38 9ec8 (0) 9f0e (0) 9f7d (0) 9c21 (0)\n003 4 b4a1 b5ea b8e1 bbaf | 14 b3f9 (0) b78f (0) b659 (0) b6df (0)\n004 4 af02 a8ff a8f4 ab3f | 10 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n005 5 a5ac a505 a4ee a7a8 | 7 a505 (0) a5ac (0) a4ee (0) a616 (0)\n006 2 a0c8 a1c8 | 2 a0c8 (0) a1c8 (0)\n============ DEPTH: 7 ==========================================\n007 2 a2a1 a2e6 | 2 a2a1 (0) a2e6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 a330 | 1 a330 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","private_key":"abf141d0f41d519d2f0bcfd4e1cab0e3d3b7f49bb2524ddfbcb4ed8087b83b39","name":"node_a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","services":["bzz","pss"],"enable_msg_events":true,"port":42795},"up":true}},{"node":{"info":{"id":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","name":"node_b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","enode":"enode://f04605b84e637cfebd8976e50b34cb2677a4314ffad3de5f827b256c5789bc9395bca075fdc7d093933f7a36b0086da67b41726ecd01f12473dc86a64d648d30@127.0.0.1:0","enr":"0xf88fb8407a74507655e5e4bccef3b4f4be2094d2dfa1f734606fc6fea7a7d5534117bdd212b9fbbc1b5190a3217e08c13dc5b1d5e33d16540dd469bccff2b61d00f169380183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f04605b84e637cfebd8976e50b34cb2677a4314ffad3de5f827b256c5789bc93","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uOGoYiwlbvKazVLfezrOUIIPsaFHcWFl/4Yv3Jc6SM0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8e1a8\npopulation: 41 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6d3c 68cb 0e80 24f8 | 126 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n001 9 d700 d408 ddb8 d9cf | 55 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n002 5 9948 955d 8d19 8e28 | 38 9c21 (0) 9c8e (0) 9ca1 (0) 9ec8 (0)\n003 9 af02 a8ff a505 a7a8 | 23 aaf0 (0) ab71 (0) ab3f (0) a970 (0)\n004 5 b3f9 b78f b6df b4a1 | 6 b3f9 (0) b78f (0) b659 (0) b6df (0)\n005 5 bcf8 bdc5 bfc7 be68 | 5 bcf8 (0) bdc5 (0) bfc7 (0) be68 (0)\n============ DEPTH: 6 ==========================================\n006 2 ba91 bbaf | 2 ba91 (0) bbaf (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","private_key":"16e0a5b28dd4eef0429cfee2457fefee326e70769d72a08220c987d895948535","name":"node_b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","services":["bzz","pss"],"enable_msg_events":true,"port":34709},"up":true}},{"node":{"info":{"id":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","name":"node_2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","enode":"enode://691ca9c06e10ad9e54772ff48bc4ae919f121bdc7c6ae4b100351ac29f5b9c0067cd758acd4b0e25f67dfa21718cc34aeffd02b40dff4f52ff37acbd00fd7501@127.0.0.1:0","enr":"0xf88fb8406bb758fd0d287e48c99c72280182a42c8e1fff4b42972876eb7d7d79532702475aa04a531f8efafd3652264038cd3910f2da1b312b91e88345a53b2ff877cc8a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103691ca9c06e10ad9e54772ff48bc4ae919f121bdc7c6ae4b100351ac29f5b9c00","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LIBCUX3+qgFYbpHkkd1BVPskwNhP7bBAS51RNvYNodk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2c8042\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c534 f2b4 9f0e a742 | 130 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n001 5 56ca 43d4 68cb 6dd3 | 61 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n002 5 1686 1049 07f5 0e2b | 37 1dc0 (0) 1dec (0) 1fd0 (0) 18e0 (0)\n003 3 3411 32ff 3980 | 17 36b9 (0) 3728 (0) 3411 (0) 30fe (0)\n004 4 24f8 244c 26ab 26ac | 4 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n005 2 2a50 298a | 2 2a50 (0) 298a (0)\n006 2 2fd2 2e65 | 2 2fd2 (0) 2e65 (0)\n============ DEPTH: 7 ==========================================\n007 1 2ddf | 1 2ddf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 2c85 | 1 2c85 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","private_key":"c3f87c0c78bb12a86da6ad7d36c7291a3895a98586e6e8e099b279f077ffd478","name":"node_2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","services":["bzz","pss"],"enable_msg_events":true,"port":41807},"up":true}},{"node":{"info":{"id":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","name":"node_a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","enode":"enode://1f3ff2039504020c5625d4fbe5c447e27cfb3016aa9ec0e1837d44eaa2fe4172b2731d4ff02a80394e7e3d0f4a32f19cc239a3972f10eab45bf2c69d9d8c65ee@127.0.0.1:0","enr":"0xf88fb840f01697c24bc9fee368002b25d4480ee743229f9cbdc31dbaa122bca564f7c45b35b737cd14a1258f4e4eaded287d70183cc0d4584cd0b1cba3a7f55096fa87a30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021f3ff2039504020c5625d4fbe5c447e27cfb3016aa9ec0e1837d44eaa2fe4172","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"p0LoUCxhlwPOh4kBEPkIveMrWdxh13okd1nl0AVuDJQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a742e8\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 43d4 1070 0e80 2c80 | 126 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n001 4 ec90 f2b4 f645 feb3 | 55 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n002 3 9c21 8e28 8f9a | 38 9ec8 (0) 9f0e (0) 9f7d (0) 9c21 (0)\n003 5 b4a1 b5ea bfc7 b8e1 | 14 b3f9 (0) b78f (0) b659 (0) b6df (0)\n004 4 a8b5 a8f4 a8ff af02 | 10 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n005 4 a1c8 a2a1 a2e6 a327 | 6 a0c8 (0) a1c8 (0) a2a1 (0) a2e6 (0)\n006 3 a505 a5ac a4ee | 3 a505 (0) a5ac (0) a4ee (0)\n============ DEPTH: 7 ==========================================\n007 2 a616 a606 | 2 a616 (0) a606 (0)\n008 1 a7a8 | 1 a7a8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","private_key":"6f1c95c10b82cf6a4a6a6ffba536b6e4d17dca7e822de4e3b740149684932d39","name":"node_a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","services":["bzz","pss"],"enable_msg_events":true,"port":37625},"up":true}},{"node":{"info":{"id":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","name":"node_feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","enode":"enode://27ac651910b9394ef60deb8ececf68b82b3f2bff98cf45cc6dab2a0a0a271bf8f5cd18af48ec4a9eb79821487687a0dfb97af07de26b237f0194f1d1c84587f1@127.0.0.1:0","enr":"0xf88fb840dff98a9839c85f4ca1a944e19e2913b5a74f45e9701a6d6887f3b6fbdeb63db6104a51388fa37505749037788d83e0ed7d3dc9f9f37d696abb5aab32f13633200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10327ac651910b9394ef60deb8ececf68b82b3f2bff98cf45cc6dab2a0a0a271bf8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/rO8F+5zaaT6mInZJQ/tPBJXxwkWhxmW5uq9N03Y3C4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: feb3bc\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 2e65 43d4 68cb 6dd3 | 126 1dc0 (0) 1dec (0) 1fd0 (0) 18e0 (0)\n001 5 8f9a bbaf b8e1 a8f4 | 75 9948 (0) 9959 (0) 9b8e (0) 9ec8 (0)\n002 5 c9c3 c190 ddb8 d700 | 27 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n003 3 ec90 e471 e0a0 | 14 e64d (0) e681 (0) e471 (0) e277 (0)\n004 5 f1ed f2b4 f756 f645 | 7 f756 (0) f6c0 (0) f645 (0) f1ed (0)\n005 2 f9de fa24 | 3 f8ff (0) f9de (0) fa24 (0)\n============ DEPTH: 6 ==========================================\n006 2 fc39 fc51 | 2 fc51 (0) fc39 (0)\n007 1 ff75 | 1 ff75 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","private_key":"0612d46e6c5fe2d816f3fcc01eea18407ea659f41290d153e08a780a5313e54c","name":"node_feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","services":["bzz","pss"],"enable_msg_events":true,"port":36801},"up":true}},{"node":{"info":{"id":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","name":"node_6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","enode":"enode://33d552be8155690e7cbe2739fa74ca6e83ead5035cd9a8e26d187ef54b14ca924e3d5485f7bb095dc233d74758321997fe1ae52b5ce5dc070eb0589816b09442@127.0.0.1:0","enr":"0xf88fb8409b453570d61397d255334db062ee118d6af0cc79fd50cda1bb3830f187d56f506eaa18ca5d6dc753b0cf201bfe1614f777a497a0713d90ed07b3bf9f76920e7c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10233d552be8155690e7cbe2739fa74ca6e83ead5035cd9a8e26d187ef54b14ca92","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bdOsD9mgSiznWHXGg9E15S6qFnDLVeeHEWIHEuYP3kc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6dd3ac\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 8f9a bbaf a8f4 a327 | 130 9948 (0) 9959 (0) 9b8e (0) 9ec8 (0)\n001 4 0e80 2ddf 2c80 2e65 | 65 1fd0 (0) 1dec (0) 1dc0 (0) 18e0 (0)\n002 6 5663 5814 5ff0 5d82 | 35 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n003 4 70f6 7d16 7850 79e5 | 13 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n004 3 6758 67f3 60c5 | 6 648a (0) 6758 (0) 6790 (0) 6795 (0)\n005 2 6b4e 68cb | 2 6b4e (0) 68cb (0)\n006 1 6e7f | 1 6e7f (0)\n007 1 6c01 | 1 6c01 (0)\n============ DEPTH: 8 ==========================================\n008 2 6d3c 6d5e | 2 6d5e (0) 6d3c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","private_key":"798b1133c83f1bd8708da776e24e1068611422abe705d8209d07e88f4ae07873","name":"node_6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","services":["bzz","pss"],"enable_msg_events":true,"port":35411},"up":true}},{"node":{"info":{"id":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","name":"node_2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","enode":"enode://224027d2af542674e07dc64ec477cb324c9288d5b917bd302a8b994fb56effd5d4134f71de9dbe75d043d510c3df39b87f5590dd5e53d1512969e65bfc9debad@127.0.0.1:0","enr":"0xf88fb840cfb76c5419d68cf2f3a24256e9324a22f66fc4b5580a187070e857ba42d18a8921c69ca44e1570e72d7281e2ef3c9c2604a2ca5089bb11f8142664ad4552a2970183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103224027d2af542674e07dc64ec477cb324c9288d5b917bd302a8b994fb56effd5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"LmXQVki3mPr7ybtYLAXm+PiRExJg6MkMpyXdy8gj8xU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2e65d0\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 ec90 f2b4 feb3 955d | 130 dbd4 (0) da36 (0) dad0 (0) d959 (0)\n001 2 43d4 6dd3 | 61 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n002 6 0e80 19ea 1b1d 1070 | 37 1484 (0) 140d (0) 1784 (0) 1686 (0)\n003 5 3980 397a 3411 3188 | 17 3f31 (0) 3c5b (0) 3cab (0) 3a62 (0)\n004 4 26ab 26ac 244c 24f8 | 4 26ab (0) 26ac (0) 244c (0) 24f8 (0)\n005 2 2a50 298a | 2 2a50 (0) 298a (0)\n============ DEPTH: 6 ==========================================\n006 3 2ddf 2c85 2c80 | 3 2ddf (0) 2c85 (0) 2c80 (0)\n007 1 2fd2 | 1 2fd2 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","private_key":"2b229760916c74b6ac5f23ef8180077064de49ec26982a14a09a3d1382e474b0","name":"node_2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","services":["bzz","pss"],"enable_msg_events":true,"port":34851},"up":true}},{"node":{"info":{"id":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","name":"node_43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","enode":"enode://e7390b07e9257a295e97c15d41b54e09e2dcdfc3b9fc73b2b0f2e63a0713c9ded792f3a5ee9d6938d4f429c961b091715297661b560bac8df0449449c96346f6@127.0.0.1:0","enr":"0xf88fb8406a94ea3a25ea5935505a1d5b3df6880b4b51723a453f3fe497c93e6dddf6efed7794b6528b6c6e10790083a3893217933ff7b93745ca7a04b03e78564462c9fb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e7390b07e9257a295e97c15d41b54e09e2dcdfc3b9fc73b2b0f2e63a0713c9de","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Q9Q+nry860gw/B0tUCRlC5Bpgwa70sTQtIQaGo/QnJM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 43d43e\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 c190 ec90 feb3 955d | 130 da36 (0) dad0 (0) dbd4 (0) d959 (0)\n001 4 0e80 32ff 2c80 2e65 | 65 1dec (0) 1dc0 (0) 1fd0 (0) 18e0 (0)\n002 6 79e5 7895 7d16 6d3c | 26 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n003 6 5663 56ca 5ff0 5d82 | 16 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n004 4 4cec 4d38 482e 48de | 10 4cec (0) 4d91 (0) 4d38 (0) 4b79 (0)\n005 4 46bf 447c 447a 44ad | 4 46bf (0) 447a (0) 447c (0) 44ad (0)\n006 2 4005 402c | 2 4005 (0) 402c (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 435d | 1 435d (0)\n009 0 | 0\n010 0 | 0\n011 1 43c9 | 1 43c9 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","private_key":"705846d6103b8dcde5526942f8da6f2206687604c468de841c1e3556e63e27f4","name":"node_43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","services":["bzz","pss"],"enable_msg_events":true,"port":33285},"up":true}},{"node":{"info":{"id":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","name":"node_68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","enode":"enode://a3d519e4a1788400163f2db9a838b8229a5d176f4b32736cc11d48510f60bfd57fe2b36b773121bed96bb701a34a777b9b0f9f0a6210a11a5267db32c5709c20@127.0.0.1:0","enr":"0xf88fb840b867c36933c9555cfb4f20df50e1fa2d1c86295c58b5348694874b92dcc369053ef0b25782dc4f892f9a7d6250dd1c42582a0f9a87ced83db2af67d0d5459e660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a3d519e4a1788400163f2db9a838b8229a5d176f4b32736cc11d48510f60bfd5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"aMvEpTEwgNXcqK006L9SphROD/jvP3ldeunV9kT+IEI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 68cbc4\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 c190 feb3 ec90 b4a1 | 130 84a9 (0) 8402 (0) 87a3 (0) 86d6 (0)\n001 5 3411 2c80 24f8 19ea | 65 3cab (0) 3c5b (0) 3f31 (0) 3a62 (0)\n002 6 5663 5ff0 5814 482e | 35 5c37 (0) 5c7c (0) 5d82 (0) 5ff0 (0)\n003 5 70f6 79e5 7850 7895 | 13 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n004 2 67f3 60c5 | 6 648a (0) 6758 (0) 6795 (0) 6790 (0)\n============ DEPTH: 5 ==========================================\n005 5 6e7f 6c01 6dd3 6d5e | 5 6e7f (0) 6c01 (0) 6dd3 (0) 6d5e (0)\n006 1 6b4e | 1 6b4e (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","private_key":"8dc0ff9e95b0b85f24142f1082c900c64588c269a697412aabd41e4d80197de9","name":"node_68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","services":["bzz","pss"],"enable_msg_events":true,"port":37375},"up":true}},{"node":{"info":{"id":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","name":"node_6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","enode":"enode://39291783101f95a5ab0c6a5d372ab36be799b2f4dd241206519e00c6df4c01d16736ddcf75349c2fa7ee23395b536b4d60d40863664b2d9b15bcdf13a384856b@127.0.0.1:0","enr":"0xf88fb840c8714570044e40edeb9d032662ba2bdcc24c79d2f85ca264d6e7ca490de884235fccc9d43de5859321525bb25b2ed942d3dbfa2f72686bd09b8cad40b7d56cd70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10339291783101f95a5ab0c6a5d372ab36be799b2f4dd241206519e00c6df4c01d1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bTxtsVkA8llihvgcwGZNLIKR6tW60qo1utUVrwiKLkg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6d3c6d\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c190 a8f4 b6df b8e1 | 130 b3f9 (0) b78f (0) b659 (0) b6df (0)\n001 6 3411 26ac 244c 24f8 | 65 3cab (0) 3c5b (0) 3f31 (0) 3b02 (0)\n002 6 5663 5ff0 5ac0 5814 | 35 5c7c (0) 5c37 (0) 5d82 (0) 5ff0 (0)\n003 5 70f6 7d16 7c7c 7895 | 13 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n004 2 6795 60c5 | 6 648a (0) 6758 (0) 67f3 (0) 6790 (0)\n005 2 6b4e 68cb | 2 6b4e (0) 68cb (0)\n006 1 6e7f | 1 6e7f (0)\n007 1 6c01 | 1 6c01 (0)\n============ DEPTH: 8 ==========================================\n008 1 6dd3 | 1 6dd3 (0)\n009 1 6d5e | 1 6d5e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","private_key":"ae7658c745f0e65d13c11825a7164cb7336cc227bb4141dcb4f7a1b69abc8607","name":"node_6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","services":["bzz","pss"],"enable_msg_events":true,"port":46873},"up":true}},{"node":{"info":{"id":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","name":"node_0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","enode":"enode://4c66fe3197799ae8e8b7a9dc282966e1308115243346f02df98a818894f45783aeee959acc426df923f934b3a0948ab96460014c21435cd2a72745cc03f31986@127.0.0.1:0","enr":"0xf88fb840e699bbd1a5ea6afb58628146badd23319b3b2b6ed1e3cfa33efa77d040ac18f34f2d5aa2dba515d6d196f3414f3cfc8cb70045a92f88c46fad4bd4fef1bebd4f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024c66fe3197799ae8e8b7a9dc282966e1308115243346f02df98a818894f45783","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DoDbnfqM4pvt+y3gMWIr74gpvuUncTIran77R6/lQOc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0e80db\npopulation: 40 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 b8e1 b5ea b4a1 a8f4 | 130 bfc7 (0) be68 (0) bea1 (0) bdc5 (0)\n001 7 56ca 5ac0 43d4 79e5 | 61 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n002 9 3411 32ff 2e65 2fd2 | 28 3c5b (0) 3cab (0) 3f31 (0) 3b02 (0)\n003 5 19ea 1b1d 1686 1049 | 16 140d (0) 1484 (0) 1784 (0) 1686 (0)\n004 2 046c 07f5 | 10 035f (0) 0314 (0) 025d (0) 0191 (0)\n005 4 08f8 09b3 096a 0942 | 6 08bd (0) 08e5 (0) 08f8 (0) 09b3 (0)\n006 2 0cfc 0d1c | 2 0cfc (0) 0d1c (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 0e3b 0e2b | 2 0e3b (0) 0e2b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","private_key":"b9190dcff292030b590acbf97d108aa5e5bdf506556ea496845cee35fdb941c6","name":"node_0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","services":["bzz","pss"],"enable_msg_events":true,"port":36041},"up":true}},{"node":{"info":{"id":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","name":"node_24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","enode":"enode://29812550052d6b16cc2b04fc247361209269007589ab11e66a4dc0928b09a158d46c84eb42f8150e45dc8a1507a2474372b311b26f743eeb615a36094d404313@127.0.0.1:0","enr":"0xf88fb840ea7a6a8262fab073a6840a7ee18670e090fea60cf597a27d2832802826b0a8f068c3ca88013d64b5ff02ccb4f2ff094c590329d9a24cf9a3d7856c6b6fd676070183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10329812550052d6b16cc2b04fc247361209269007589ab11e66a4dc0928b09a158","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JPgMQ3vkWJjllPghu6D1xi4MmgxyARjjYu5veEEGEr0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 24f80c\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 b8e1 b5ea b4a1 b6df | 130 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n001 2 68cb 6d3c | 61 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n002 5 1b1d 19ea 1049 1070 | 37 1484 (0) 140d (0) 1784 (0) 1686 (0)\n003 3 3980 3938 32ff | 17 3f31 (0) 3c5b (0) 3cab (0) 3b02 (0)\n004 7 2a50 298a 2c80 2c85 | 7 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 26ac 26ab | 2 26ab (0) 26ac (0)\n007 0 | 0\n008 1 244c | 1 244c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","private_key":"bd42db9dab0f618eb6ccbe9be985031a20cc1daa8157a90861ddd93c290047ab","name":"node_24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","services":["bzz","pss"],"enable_msg_events":true,"port":37751},"up":true}},{"node":{"info":{"id":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","name":"node_ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","enode":"enode://1afe1c8bb1a13bc5bc8ab9528f323597de5d3c7322397d611f7cfdee80cabaa6ee95222a551a9bfd627f595472bb227327a045306c75a25b75eb5d6240eb7b54@127.0.0.1:0","enr":"0xf88fb840a2ce29495c237a1d985a2865cbcacf2d5d3e6332f63ebbf01a8beeac0e5e2621504b30da39c19b73bc3cf1135905ab7c6fe71b1e90fc05dfd1fceea7ec3269ff0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021afe1c8bb1a13bc5bc8ab9528f323597de5d3c7322397d611f7cfdee80cabaa6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"7JCiL0HuZZ1XWaSXlGrCmRyRbwD+fK7usJCPOvH+YLY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ec90a2\npopulation: 39 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 43d4 68cb 0e80 2e65 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 10 b78f b8e1 bbaf ab3f | 75 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n002 5 ddb8 d408 d700 c9c3 | 27 d959 (0) d9cf (0) dbd4 (0) da36 (0)\n003 9 feb3 fc51 fc39 fa24 | 14 f8ff (0) f9de (0) fa24 (0) ff75 (0)\n004 4 e471 e2d3 e09f e0a0 | 7 e471 (0) e64d (0) e681 (0) e277 (0)\n005 2 eb68 e867 | 2 eb68 (0) e867 (0)\n============ DEPTH: 6 ==========================================\n006 3 eebd eff2 ef99 | 3 eebd (0) eff2 (0) ef99 (0)\n007 1 ed42 | 1 ed42 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","private_key":"89981ff407aefd00840d1b348382e6571fe033d8e0e93bdacff8d74ac1fbb465","name":"node_ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","services":["bzz","pss"],"enable_msg_events":true,"port":42753},"up":true}},{"node":{"info":{"id":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","name":"node_955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","enode":"enode://28ce8e8bd283c85d928eff07eb1fe95320e63ffecaeba76699cc6559b4e724ebab2f08fc20a3569022d9a14c0dc992ce97cb38b8031a6c170594ff80c0360a59@127.0.0.1:0","enr":"0xf88fb840599bae7bc68a1be369da49e6e4fc452277e838db6b140b288b1443accdfc5e7b68e44b4d5cf9c33cdbc1d0c7088b756639d98e9a4c055ee7589c982e720a68a30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10328ce8e8bd283c85d928eff07eb1fe95320e63ffecaeba76699cc6559b4e724eb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"lV2hXtrlCkxovIxXm5eZ1V9Bt8KmF49kX3nXcuARZmI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 955da1\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 2e65 0e80 43d4 6d3c | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 2 c190 ec90 | 55 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n002 4 bbaf b8e1 af02 a8f4 | 37 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n003 4 8e28 8f9a 8d19 8073 | 21 8b43 (0) 8862 (0) 8854 (0) 8ea2 (0)\n004 8 9948 9959 9b8e 9ec8 | 9 9959 (0) 9948 (0) 9b8e (0) 9ec8 (0)\n005 3 9257 93c0 93ea | 3 9257 (0) 93c0 (0) 93ea (0)\n006 1 97da | 1 97da (0)\n007 1 9464 | 1 9464 (0)\n============ DEPTH: 8 ==========================================\n008 1 95c0 | 1 95c0 (0)\n009 1 9518 | 1 9518 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","private_key":"37f0dfbc4bcabf9e11ec2090cd8fd558bd7784630fdac652e65e0e56e11fff47","name":"node_955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","services":["bzz","pss"],"enable_msg_events":true,"port":46557},"up":true}},{"node":{"info":{"id":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","name":"node_a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","enode":"enode://a387b1ae7d38f1e3bb1576e26b97a6f5bf1fc147160a59dd43b8184b0c23dde70d006b3e046f727c0d3d185db250fb1796d0c8c4a63921c8fa4fda6ec1feea1c@127.0.0.1:0","enr":"0xf88fb840f2d8228ae427fc1b5347e72a85e3f6fb50398b45a626c6521c677d449daa7f9f1f0b921ba8b3e600829957e2a3cfc8d98234f8a6d8395d56172c1c0c4c8855ea0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a387b1ae7d38f1e3bb1576e26b97a6f5bf1fc147160a59dd43b8184b0c23dde7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qPSehxVv2lUQiXYBaJzpaNdwMhNMUjY0kWuW3hY2b54=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a8f49e\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 0e80 1070 43d4 43c9 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 6 f1ed fa24 fc51 fc39 | 55 f8ff (0) f9de (0) fa24 (0) ff75 (0)\n002 6 8d19 8f9a 8ea2 8e28 | 38 8862 (0) 8854 (0) 8b43 (0) 8ea2 (0)\n003 2 bea1 b6df | 14 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n004 6 a2e6 a2a1 a327 a1c8 | 13 a505 (0) a5ac (0) a4ee (0) a616 (0)\n005 2 aeb4 af02 | 3 acee (0) aeb4 (0) af02 (0)\n006 3 aaf0 ab71 ab3f | 3 aaf0 (0) ab71 (0) ab3f (0)\n007 1 a970 | 1 a970 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 1 a8b5 | 1 a8b5 (0)\n010 0 | 0\n011 0 | 0\n012 1 a8ff | 1 a8ff (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","private_key":"6bb6d8d705a40ba424923e49c1a5f2ea7ef65a8047cd69554f076497ad72abe8","name":"node_a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","services":["bzz","pss"],"enable_msg_events":true,"port":40983},"up":true}},{"node":{"info":{"id":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","name":"node_c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","enode":"enode://624fdcc04a4251fa0a5e452254deb09951e1c0e466046bb34ecfc5762881942842a1ad2ebe95d8a53fc13cf338b164aae811b96d19034914557485104f7cf8a6@127.0.0.1:0","enr":"0xf88fb840f541779d4363d2d110782b9208996593d8124c23e35c0c27c4a598881a445d896199da564f83d98e0d70a24b31b5995b979add943d98a2e3d0ede83d689bc0ad0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102624fdcc04a4251fa0a5e452254deb09951e1c0e466046bb34ecfc57628819428","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wZD50Ix47W3/ra7zbnf+aqlgmeRFN1Owz8jsVC+pa50=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c190f9\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 5814 43d4 6d3c 68cb | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 7 9f7d 9ca1 955d 8073 | 75 8b43 (0) 8854 (0) 8862 (0) 8ea2 (0)\n002 7 f645 f2b4 fa24 feb3 | 28 f8ff (0) f9de (0) fa24 (0) ff75 (0)\n003 3 dad0 ddb8 d700 | 11 d959 (0) d9cf (0) dbd4 (0) da36 (0)\n004 3 cf52 c8ea c9c3 | 8 cc33 (0) cd6c (0) cdb1 (0) cf52 (0)\n005 4 c603 c6a8 c534 c42e | 5 c74d (0) c603 (0) c6a8 (0) c534 (0)\n============ DEPTH: 6 ==========================================\n006 2 c2d0 c272 | 2 c2d0 (0) c272 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","private_key":"8e85cf18cf9dd5c75878ddc75b26b567c6f213cd9cf41387232103a423215444","name":"node_c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","services":["bzz","pss"],"enable_msg_events":true,"port":42929},"up":true}},{"node":{"info":{"id":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","name":"node_80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","enode":"enode://fdcec2678f4772897ed0eb0ec54b7de122c22cbf31b6e501c00adeed3d80cc14351e6a4ca7677d22fc7bbd94db0e3302cf20e7f55c554bd4dbaa0bd4e8a50a7f@127.0.0.1:0","enr":"0xf88fb84005c6d37ffbbfde5c741d546335ecf1ee87f1fb33af5875d0c84b3fb9dc87329f16d6370725423a847f1eebb7bd3a21a8fb3c43b99ef030a6cda4e1e144d69a280183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103fdcec2678f4772897ed0eb0ec54b7de122c22cbf31b6e501c00adeed3d80cc14","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gHNacocgu6CsCNqszQkzcNZyqPmlCEWteMzWz4aGw58=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 80735a\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 2fd2 5814 5663 43d4 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 2 d700 c190 | 55 e64d (0) e681 (0) e471 (0) e277 (0)\n002 5 a8ff a1c8 a327 a2e6 | 37 a2a1 (0) a2e6 (0) a330 (0) a327 (0)\n003 8 93c0 955d 9948 9b8e | 17 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n004 5 8b43 8f9a 8ea2 8e28 | 9 8854 (0) 8862 (0) 8b43 (0) 8ea2 (0)\n005 2 87a3 86d6 | 4 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n006 3 837f 834f 8358 | 3 834f (0) 8358 (0) 837f (0)\n007 1 81a5 | 1 81a5 (0)\n008 1 80d7 | 1 80d7 (0)\n============ DEPTH: 9 ==========================================\n009 1 8006 | 1 8006 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 8074 | 1 8074 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","private_key":"8623a021033479cd7104a88188d9784ac5edeb95094c010547e615407d7a8973","name":"node_80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","services":["bzz","pss"],"enable_msg_events":true,"port":38855},"up":true}},{"node":{"info":{"id":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","name":"node_b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","enode":"enode://3057525034706ee1eee5958ad026f2f68f4bff18e95bec5db1e27e845df3c6b45b7a3d030786afab82b789cef41f9bc88bbb7c7238eb01ada275e9d294741643@127.0.0.1:0","enr":"0xf88fb84043499166c98cc953ba2a4b899aea5eba91503a235686406a2e5cc6f41156d01b6a9cfdab6cab3104c08d3b2fe340ea9b4504fde582847b46d2c4ebfc55e4639f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033057525034706ee1eee5958ad026f2f68f4bff18e95bec5db1e27e845df3c6b4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tKG2h/vbdU/WieJvCHCn3KtddhkMBvPqLqHhmPiqWrI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b4a1b6\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 68cb 43d4 43c9 0e80 | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 4 f1ed f6c0 fc39 d700 | 55 e64d (0) e681 (0) e471 (0) e277 (0)\n002 2 8d19 8073 | 38 9257 (0) 93c0 (0) 93ea (0) 97da (0)\n003 4 a742 a7a8 a327 a1c8 | 23 a2e6 (0) a2a1 (0) a330 (0) a327 (0)\n004 5 b8e1 bbaf bdc5 bcf8 | 8 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n005 1 b3f9 | 1 b3f9 (0)\n============ DEPTH: 6 ==========================================\n006 3 b78f b659 b6df | 3 b78f (0) b659 (0) b6df (0)\n007 1 b5ea | 1 b5ea (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","private_key":"2db46fccdc01ed22afb3e789ea51e706f96e02424e2883893536ac8941043985","name":"node_b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","services":["bzz","pss"],"enable_msg_events":true,"port":34987},"up":true}},{"node":{"info":{"id":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","name":"node_b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","enode":"enode://83bcb3c68dcde737d01e64be91562e08aa6d62823cce64889fe81f01f05c9678015ec02c8c36bb8f83beee9587374da90118a76a98289f5ebad1436b19035bc4@127.0.0.1:0","enr":"0xf88fb8405bc0154529713773273db32f0ea11698b2fb42edf643c702fa47f05b032ad0b2780c5793a4018e529b014c867bee95c6af034725f784cc7f4742f2b9dc6d87d30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10283bcb3c68dcde737d01e64be91562e08aa6d62823cce64889fe81f01f05c9678","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tt/6xLTrKXTtDtJBeZ+X0uXZvmceMRJmgm0Nz+z8wgk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b6dffa\npopulation: 24 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 43d4 43c9 68cb 6d3c | 126 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n001 3 e0a0 fc39 d700 | 55 e64d (0) e681 (0) e471 (0) e277 (0)\n002 2 9ca1 8d19 | 38 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n003 3 a7a8 af02 a8f4 | 23 a2a1 (0) a2e6 (0) a330 (0) a327 (0)\n004 5 bcf8 bfc7 bea1 bbaf | 8 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n005 1 b3f9 | 1 b3f9 (0)\n006 2 b5ea b4a1 | 2 b5ea (0) b4a1 (0)\n============ DEPTH: 7 ==========================================\n007 1 b78f | 1 b78f (0)\n008 1 b659 | 1 b659 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","private_key":"e24347072d11928511f53eef3f8e9a9734b3aaf2cb6205e653b42817451769b3","name":"node_b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","services":["bzz","pss"],"enable_msg_events":true,"port":46447},"up":true}},{"node":{"info":{"id":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","name":"node_d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","enode":"enode://410d63c57efb139f46850a8e0c7be2739099ace7e693848bb141c8cc7a9918f0ea1bb23bca1d292d38877c9fcd33d089ec39ba60ecfe1c8f10d5364e31196576@127.0.0.1:0","enr":"0xf88fb8408aa9045d36445a648a2d7468dfe7acea7f555e845341e000f782de3a667360ae2b494625fbc4c7ea45769984f4915b406d9241de31ef82d41bbeff3811d6d98f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102410d63c57efb139f46850a8e0c7be2739099ace7e693848bb141c8cc7a9918f0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1wDZbeEZNFbcC89JLHwRsJUQYpdK8vf0e4yQGxfCMWU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d700d9\npopulation: 42 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 0e80 19ea 2fd2 24f8 | 126 140d (0) 1484 (0) 1784 (0) 1686 (0)\n001 9 9f7d 9ca1 8073 8f9a | 75 84a9 (0) 8402 (0) 87a3 (0) 86d6 (0)\n002 10 e0a0 ef99 ec90 feb3 | 28 e64d (0) e681 (0) e471 (0) e277 (0)\n003 10 c9c3 c8ea cf52 cc33 | 16 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n004 3 ddb8 dad0 d9cf | 6 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n============ DEPTH: 5 ==========================================\n005 3 d209 d3e9 d302 | 3 d209 (0) d3e9 (0) d302 (0)\n006 1 d408 | 1 d408 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","private_key":"44cd8419094d50e78afb097502f16dcd9c28368eb0ac43ce3b6312f58b6a3176","name":"node_d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","services":["bzz","pss"],"enable_msg_events":true,"port":43567},"up":true}},{"node":{"info":{"id":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","name":"node_43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","enode":"enode://7041f32dd06a878b138bbfefc65706d09feb4d20fa70fdaec9b5e107e0b78fb17e7e0e925ac8e1de69e03d8ab6005d250b3988c1c0911dadfd14e07849bd556e@127.0.0.1:0","enr":"0xf88fb840d7d0ed8828dbcb293891f06bd62c1a8f8be6e41e64cdfd8c701332e185ae09782876283f3a7fb0bd32333fddb3890bf3afbbda703a86a9e2189b5d08811c410f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027041f32dd06a878b138bbfefc65706d09feb4d20fa70fdaec9b5e107e0b78fb1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Q8nhVxxGDLn1mfqO153dD5w6If0vpFXgYDEJxVAS92s=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 43c9e1\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 b6df b4a1 a8f4 a1c8 | 130 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n001 2 244c 2fd2 | 65 012b (0) 0111 (0) 0191 (0) 025d (0)\n002 5 79e5 7895 68cb 6dd3 | 26 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n003 7 5ff0 5ac0 5814 50c1 | 16 5d82 (0) 5c7c (0) 5c37 (0) 5ff0 (0)\n004 3 4d38 48de 482e | 10 4cec (0) 4d91 (0) 4d38 (0) 4b79 (0)\n005 2 447c 447a | 4 46bf (0) 44ad (0) 447c (0) 447a (0)\n006 2 4005 402c | 2 4005 (0) 402c (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 435d | 1 435d (0)\n009 0 | 0\n010 0 | 0\n011 1 43d4 | 1 43d4 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","private_key":"0be456eea926753ec7862f851dbd4b26ee5559316964d3411e6024e19a752138","name":"node_43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","services":["bzz","pss"],"enable_msg_events":true,"port":46243},"up":true}},{"node":{"info":{"id":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","name":"node_9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","enode":"enode://c9a8f470d438c9326b6d9e1f44bd2df3b9b4db56183efa7e23e2381f7499a94abcf1098ecf26221121fd113ea34eb8df3d183d5a3df359ebb5a93ef693f13923@127.0.0.1:0","enr":"0xf88fb840c1fa2933c23d1743f13988ec4d4c71a6d636eab7df047c52c265ea0086f72f550a1b2fd29579c42d2b4d7d3a9b2898b42b35ef897ebb203d6980bef0063402470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103c9a8f470d438c9326b6d9e1f44bd2df3b9b4db56183efa7e23e2381f7499a94a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nKH9XUGXWsuQXzN5l5IoSbQHA2DkeEm7T9jNG53bTXM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9ca1fd\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 046c 0942 244c 2fd2 | 126 0cfc (0) 0d1c (0) 0e3b (0) 0e2b (0)\n001 5 d700 c190 ec90 f6c0 | 55 e64d (0) e681 (0) e471 (0) e277 (0)\n002 4 b6df a327 a1c8 a7a8 | 37 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n003 3 8073 8f9a 8d19 | 21 84a9 (0) 8402 (0) 86d6 (0) 87a3 (0)\n004 3 93ea 93c0 955d | 8 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n005 3 9959 9948 9b8e | 3 9948 (0) 9959 (0) 9b8e (0)\n006 3 9ec8 9f0e 9f7d | 3 9ec8 (0) 9f0e (0) 9f7d (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 9c21 | 1 9c21 (0)\n009 0 | 0\n010 1 9c8e | 1 9c8e (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","private_key":"fbcd62592636cde3b1d26d9fd45dd2a45c8d1dfd4919ef05694e5c3a64330798","name":"node_9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","services":["bzz","pss"],"enable_msg_events":true,"port":39429},"up":true}},{"node":{"info":{"id":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","name":"node_8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","enode":"enode://222e619168c8502ad2677160abc513c09bfff4fc68adc96d2e7f0f7c4930abd567e863fe0472152a657c4ddd856612f5fb1dc02b056d9e8c1c159e098939dfe5@127.0.0.1:0","enr":"0xf88fb840930bf1a5288e587dffc9cebd12f017e5781d33ea16fe79da844003dba818a12e274142748fa13f0293ec802260c571d0052748b2d534197d123a968cfe5b46900183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103222e619168c8502ad2677160abc513c09bfff4fc68adc96d2e7f0f7c4930abd5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jRkrEVOActt1D3EgTi5q353AUI2cXPHrRX5OmWzZhbw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8d192b\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 5814 2fd2 | 126 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n001 4 ec90 f6c0 fc39 d700 | 55 c8c8 (0) c8ea (0) c961 (0) c9c3 (0)\n002 6 a8f4 a1c8 bea1 b8e1 | 37 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n003 6 955d 9b8e 9ec8 9f7d | 17 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n004 5 87a3 86d6 8358 837f | 12 8402 (0) 84a9 (0) 87a3 (0) 86d6 (0)\n005 3 8854 8862 8b43 | 3 8854 (0) 8862 (0) 8b43 (0)\n============ DEPTH: 6 ==========================================\n006 4 8ea2 8e28 8e7b 8f9a | 4 8ea2 (0) 8e7b (0) 8e28 (0) 8f9a (0)\n007 1 8cc3 | 1 8cc3 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","private_key":"edbbc3a484e366a33c8f6c00e9c02ac566737d8e91db651bc236921021651832","name":"node_8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","services":["bzz","pss"],"enable_msg_events":true,"port":42737},"up":true}},{"node":{"info":{"id":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","name":"node_2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","enode":"enode://d90aedfb65dd9e291e3c4407969177cc0003f7aeefea62a5fda7e78a2f8e57503ea0542d07a9ca08fc77b1c140394f0b96403ee29b9ef7e77220e8349d89d727@127.0.0.1:0","enr":"0xf88fb840fb7cf57abda6762cac6ad86cec07e3614162d910e4bfaac92260335eb590c78248534c6fb3f6579c4d43dda86da3aac0bf57486a520ce42420a4348d33eca50c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d90aedfb65dd9e291e3c4407969177cc0003f7aeefea62a5fda7e78a2f8e5750","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"L9L3fXbMpICsGOmvekYvKX2xaMM3CzvA4sBKoAbE0Dc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2fd2f7\npopulation: 37 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 11 d700 c534 c190 fc39 | 130 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n001 7 7895 79e5 7d16 7c46 | 61 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n002 5 046c 0e80 0942 1b1d | 37 08e5 (0) 08f8 (0) 08bd (0) 09b3 (0)\n003 4 3980 3938 3411 32ff | 17 3f31 (0) 3c5b (0) 3cab (0) 3b02 (0)\n004 4 26ab 26ac 24f8 244c | 4 26ab (0) 26ac (0) 24f8 (0) 244c (0)\n005 2 2a50 298a | 2 2a50 (0) 298a (0)\n============ DEPTH: 6 ==========================================\n006 3 2ddf 2c85 2c80 | 3 2ddf (0) 2c85 (0) 2c80 (0)\n007 1 2e65 | 1 2e65 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","private_key":"7f01ef5d73b7a1621cf1a50134d0e446cde7c2685c35b818d64476d6cda01227","name":"node_2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","services":["bzz","pss"],"enable_msg_events":true,"port":32949},"up":true}},{"node":{"info":{"id":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","name":"node_f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","enode":"enode://ffc371f4f10ff50bcf4e7340bdc527dfcb0999c56a8ad077681dda0e5af313e62507524e2ff696ece4cb8eb97aac54f27d233260cb7ca5c4154e7afdfbdf96e5@127.0.0.1:0","enr":"0xf88fb84078e3e0d2b74bdd55983a052ed78591ee0915da8578fd5b0a91956d6b269bf3d81d3db48178b5eaee67ea280e6f5f0d246d756fc5abf350ae9397534bf91281da0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ffc371f4f10ff50bcf4e7340bdc527dfcb0999c56a8ad077681dda0e5af313e6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9sAo1qK2QI6QFpFR9FGbVh7Rg72JJe2aFwKAbzl2Zuc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f6c028\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 7895 5814 43c9 244c | 126 7660 (0) 741a (0) 7049 (0) 70f6 (0)\n001 4 8d19 9ca1 b4a1 a7a8 | 75 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n002 5 c272 c42e c534 cf52 | 27 c8c8 (0) c8ea (0) c961 (0) c9c3 (0)\n003 5 e2d3 e471 e681 ef99 | 14 e867 (0) eb68 (0) eebd (0) eff2 (0)\n004 4 fa24 fc39 fc51 feb3 | 7 f9de (0) f8ff (0) fa24 (0) ff75 (0)\n005 4 f1ed f215 f2b4 f305 | 4 f1ed (0) f215 (0) f2b4 (0) f305 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 f756 | 1 f756 (0)\n008 1 f645 | 1 f645 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","private_key":"c2001db1b7540d6a72ed993e4a136476e6ca041a2240675f06b1a4e86e3424b0","name":"node_f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","services":["bzz","pss"],"enable_msg_events":true,"port":42857},"up":true}},{"node":{"info":{"id":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","name":"node_a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","enode":"enode://5e72e16dc757645afb111309a937a4366004991283411fd3c3d50c52778232ea7e7719d3cd0b1cc369bacf31c031b3a68472fd6fc03614d1986778f4e75140d9@127.0.0.1:0","enr":"0xf88fb840e8f42e427291a54799a4ef9798e106974722cc80a6cfd96431e683e82ca8ec92476544d118c7c93cde8d566d6bf48318fa85a0caa46c9abac29b1444055438090183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035e72e16dc757645afb111309a937a4366004991283411fd3c3d50c52778232ea","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"p6hWpDKTqjAEhIqG8Yfgk0O9YF4ak+hTpva2sQMb1mc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a7a856\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1070 1b1d 244c 43c9 | 126 648a (0) 6758 (0) 67f3 (0) 6795 (0)\n001 3 fc39 f1ed f6c0 | 55 c8c8 (0) c8ea (0) c9c3 (0) c961 (0)\n002 2 9f7d 9ca1 | 38 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n003 6 b659 b6df b4a1 b8e1 | 14 bdc5 (0) bcf8 (0) bfc7 (0) be68 (0)\n004 4 af02 a8b5 a8ff a8f4 | 10 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n005 3 a327 a0c8 a1c8 | 6 a2a1 (0) a2e6 (0) a330 (0) a327 (0)\n006 3 a505 a5ac a4ee | 3 a505 (0) a5ac (0) a4ee (0)\n============ DEPTH: 7 ==========================================\n007 2 a616 a606 | 2 a616 (0) a606 (0)\n008 1 a742 | 1 a742 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","private_key":"aaadb3be16a7097261fed25f08f292e5be9b99c1bf3e70cdbb76066aa605151b","name":"node_a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","services":["bzz","pss"],"enable_msg_events":true,"port":43911},"up":true}},{"node":{"info":{"id":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","name":"node_fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","enode":"enode://afc7a62e260657fc0f72b68057c239d562dd553789cb3906dab521c2a0020c4d2e34f72e5c3b4bffc3c6d5a025ec22131d20c572b0667120bb9d6ff131368aa7@127.0.0.1:0","enr":"0xf88fb840b433a55822deba2cb67c49773ac6e9f6f916feeead46453ea70f7b6fb891e1b170b3ddf9a5f427aba0d47f36094e0bd0d8b00b31a2e816c4a06a6983e83e6c310183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103afc7a62e260657fc0f72b68057c239d562dd553789cb3906dab521c2a0020c4d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/DkROD90qYL2r4q5WmNCa1YRfUXxU7PBRBRZ2Rkdqv8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fc3911\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5814 1b1d 2fd2 244c | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 9 8d19 9f7d 9ca1 b6df | 75 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n002 2 c190 d700 | 27 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n003 4 ec90 ef99 e471 e0a0 | 14 e867 (0) eb68 (0) eebd (0) eff2 (0)\n004 6 f1ed f2b4 f215 f305 | 7 f1ed (0) f2b4 (0) f215 (0) f305 (0)\n005 2 f9de fa24 | 3 f8ff (0) f9de (0) fa24 (0)\n============ DEPTH: 6 ==========================================\n006 2 ff75 feb3 | 2 ff75 (0) feb3 (0)\n007 0 | 0\n008 0 | 0\n009 1 fc51 | 1 fc51 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","private_key":"0ab4f963705bd1ecac1ddfc070baf12e433c412c0dd7fda5ec1153e31f06d4c2","name":"node_fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","services":["bzz","pss"],"enable_msg_events":true,"port":33103},"up":true}},{"node":{"info":{"id":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","name":"node_a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","enode":"enode://62b2eb13717066427ba05db84603b330fb3b693d2bd1813d8e9a4c827fd48f746e425420802c437d4d617dacfe21133a47c98445bda61d435b1f1b25d3e430a4@127.0.0.1:0","enr":"0xf88fb8403d5ad691524cfb1b6da3dab6ee3570ad1ade29f4b42fcc3a0603f12596af26e82166d74d480e460f21c4f63ba82529d08d4089ffcb9667ab5f98b7ae05b09c6e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10262b2eb13717066427ba05db84603b330fb3b693d2bd1813d8e9a4c827fd48f74","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oche517bgHoB9M6TAIbJSJGKreMkdSYJsHjCiZHAToY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a1c85e\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 43c9 2fd2 244c | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 5 c534 e0a0 f1ed f756 | 55 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n002 6 86d6 8073 8d19 9ca1 | 38 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n003 6 b659 b4a1 ba91 b8e1 | 14 ba91 (0) bbaf (0) b8e1 (0) bdc5 (0)\n004 2 a8b5 a8f4 | 10 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n005 6 a4ee a5ac a616 a606 | 7 a505 (0) a5ac (0) a4ee (0) a616 (0)\n============ DEPTH: 6 ==========================================\n006 4 a2e6 a2a1 a330 a327 | 4 a2a1 (0) a2e6 (0) a330 (0) a327 (0)\n007 1 a0c8 | 1 a0c8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","private_key":"2d5200058e0137ed16e823b77f132dec259ba1ba4237b3c7d64b6077dac98f24","name":"node_a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","services":["bzz","pss"],"enable_msg_events":true,"port":46031},"up":true}},{"node":{"info":{"id":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","name":"node_244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","enode":"enode://bc965245672290bb814412e8c14997e91efee12a0980a8ad30a49cafcdc350a149112bb4c07d92fa648bfb87d0e04b0d49dd5876fb503689dc29f894f9afc11c@127.0.0.1:0","enr":"0xf88fb8406db7bfa6b9d5aa889571c5a4bfcdcef571a6e1c7f1b13ae8bd42e882bdcb10f35429b014724321e75ef0725af408123a88b9fefcbf9cc4b8333c556d683067c70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bc965245672290bb814412e8c14997e91efee12a0980a8ad30a49cafcdc350a1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JEw8lUrGEuUdSUWrm3fwtKOYMoXordeSF3fgxFob8zg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 244c3c\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 cf52 c534 d700 e0a0 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 4 6d3c 7895 43c9 5814 | 61 648a (0) 6758 (0) 67f3 (0) 6790 (0)\n002 5 046c 0942 0e80 0d1c | 37 0cfc (0) 0d1c (0) 0e3b (0) 0e2b (0)\n003 4 3938 32ff 30fe 3411 | 17 3f31 (0) 3cab (0) 3c5b (0) 3a62 (0)\n004 6 2a50 2ddf 2c85 2c80 | 7 298a (0) 2a50 (0) 2ddf (0) 2c85 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 26ac 26ab | 2 26ac (0) 26ab (0)\n007 0 | 0\n008 1 24f8 | 1 24f8 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","private_key":"756bc2386944320552b690fdf2118ce4d2ebcec85975547ada771a0683526e39","name":"node_244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","services":["bzz","pss"],"enable_msg_events":true,"port":41177},"up":true}},{"node":{"info":{"id":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","name":"node_5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","enode":"enode://df45993237c885437698b9b42e4207115ff5f58aa44c86dec586013c408bddc56e44ca3c85a503ba4124ea6b825e510ca0c3aff8ffea771c186ddeec9282eaed@127.0.0.1:0","enr":"0xf88fb84046bd2bda155f5a7e7f14f680ffaef48b1222058233bac7457c919b20cd5bef383be59f22ce7613605070fe9bdca1f816c15e80c9c8b7c1c3b0b1928f383314d90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df45993237c885437698b9b42e4207115ff5f58aa44c86dec586013c408bddc5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WBS+E8hVC5pag9COevYCIAKo/ao4umwsML5YCZqfd0Q=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5814be\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 c190 f6c0 fc39 e0a0 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 4 0942 1b1d 1070 244c | 65 0cfc (0) 0d1c (0) 0e3b (0) 0e2b (0)\n002 4 68cb 6dd3 6d3c 7895 | 26 648a (0) 6758 (0) 6795 (0) 6790 (0)\n003 3 482e 43d4 43c9 | 19 4cec (0) 4d38 (0) 4d91 (0) 4b79 (0)\n004 4 50c1 5663 56ca 5538 | 6 52a8 (0) 5144 (0) 50c1 (0) 5538 (0)\n005 4 5ff0 5d82 5c7c 5c37 | 4 5d82 (0) 5c7c (0) 5c37 (0) 5ff0 (0)\n============ DEPTH: 6 ==========================================\n006 4 5bd8 5a26 5a8b 5ac0 | 4 5bd8 (0) 5a26 (0) 5a8b (0) 5ac0 (0)\n007 1 5987 | 1 5987 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","private_key":"3272db2e0cc941ae4242b75d527d37070acfd72d8565878230b23cdd5ba9aeeb","name":"node_5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","services":["bzz","pss"],"enable_msg_events":true,"port":35259},"up":true}},{"node":{"info":{"id":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","name":"node_bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","enode":"enode://05327ec5fb8fa18f4d157d91b796c4d75a86f76159dd10ba2a14be7924a7fb58d20ea137bfea3f319d779b05c1297ecf50517ee627fc419c0fe82aa9dbab5ebe@127.0.0.1:0","enr":"0xf88fb840a5e1e04d2823e9b4c938872330f7c5e0576dbad0404136ef57aa33a3fbc8b59263359ab46fbf691c6df00e06b7f475636a04c60d62cb7ebb12e72d9f412b0d940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10205327ec5fb8fa18f4d157d91b796c4d75a86f76159dd10ba2a14be7924a7fb58","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vqEIaNXaUGwYAd6EXBSMLwl2GJMROskT/mZnSo9DwXg=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bea108\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5663 5814 3411 1b1d | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 2 fc39 e0a0 | 55 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n002 2 8d19 9f7d | 38 84a9 (0) 8402 (0) 87a3 (0) 86d6 (0)\n003 5 af02 a8b5 a8f4 a7a8 | 23 acee (0) aeb4 (0) af02 (0) ab3f (0)\n004 5 b3f9 b5ea b4a1 b6df | 6 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n005 3 b8e1 ba91 bbaf | 3 bbaf (0) ba91 (0) b8e1 (0)\n006 2 bcf8 bdc5 | 2 bdc5 (0) bcf8 (0)\n============ DEPTH: 7 ==========================================\n007 1 bfc7 | 1 bfc7 (0)\n008 1 be68 | 1 be68 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","private_key":"d527efdb2ac85143b0e802a24844dd9c3aecc99bd77e0612baf6acb83decc3cf","name":"node_bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","services":["bzz","pss"],"enable_msg_events":true,"port":38981},"up":true}},{"node":{"info":{"id":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","name":"node_1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","enode":"enode://0b6b4bae7d34ebd01146d2c3912e36c6dc68c3fdcaeefb53789698c96d68142a7dea20ecc04141de176514183530bd52dd602fbb143e003f9629b58c12e5cc33@127.0.0.1:0","enr":"0xf88fb840bf5689088694d9e70533fcb09c6ce37880f92cc12326d6e446217bcc664b09e64f6cda48b1981c6bbc9c862fb2e06fd3946de83f4324bcca41a2650ee23899ba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030b6b4bae7d34ebd01146d2c3912e36c6dc68c3fdcaeefb53789698c96d68142a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Gx3D+TEt8UGFXFRd0WruMl+aYJIw7GFlvbuwfQwIYvY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1b1dc3\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 fc39 9f7d a7a8 bea1 | 130 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n001 3 7895 5663 5814 | 61 648a (0) 67f3 (0) 6795 (0) 6790 (0)\n002 6 3938 3980 2e65 2fd2 | 28 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n003 4 046c 0d1c 0e80 0942 | 21 0cfc (0) 0d1c (0) 0e3b (0) 0e2b (0)\n004 3 1686 1070 1049 | 7 140d (0) 1484 (0) 1784 (0) 1686 (0)\n005 3 1fd0 1dec 1dc0 | 3 1fd0 (0) 1dec (0) 1dc0 (0)\n006 3 18e0 194e 19ea | 3 18e0 (0) 194e (0) 19ea (0)\n============ DEPTH: 7 ==========================================\n007 1 1add | 1 1add (0)\n008 1 1bd5 | 1 1bd5 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","private_key":"c3aeeb9b4511f6c9ea3f8db8e4276b10196cc6c2a60e302f5bbb89b9ef64f347","name":"node_1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","services":["bzz","pss"],"enable_msg_events":true,"port":33901},"up":true}},{"node":{"info":{"id":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","name":"node_9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","enode":"enode://d362f99f7e00ec84f6ccd67dced7aa2e96e5dd50cddeaee8905cf072d71c8d723fc4781ace6da7e5e8b9730b793e53d447bf5d2b8fb2b8789fbef10c8068a46e@127.0.0.1:0","enr":"0xf88fb84077e35d00c12dc0bd099fd21289a49989ea8fd68a36842bb056f10263234ce083009f796590e6bbf22e4cc3d1763969b34838da241b9f68d571aa56d33299ee5c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102d362f99f7e00ec84f6ccd67dced7aa2e96e5dd50cddeaee8905cf072d71c8d72","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"n31yt9mEOHKQS4QeQhmFCCQo+6UBDbJ92HHtdmMKHh0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9f7d72\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 7895 5663 3411 1b1d | 126 648a (0) 6758 (0) 67f3 (0) 6795 (0)\n001 4 c190 d700 fc39 e0a0 | 55 cc33 (0) cd6c (0) cdb1 (0) cf52 (0)\n002 7 b659 bbaf bcf8 bea1 | 37 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n003 2 8073 8d19 | 21 84a9 (0) 8402 (0) 87a3 (0) 86d6 (0)\n004 4 93c0 9464 9518 955d | 8 9257 (0) 93ea (0) 93c0 (0) 97da (0)\n005 3 9b8e 9959 9948 | 3 9b8e (0) 9959 (0) 9948 (0)\n006 3 9c21 9c8e 9ca1 | 3 9c21 (0) 9c8e (0) 9ca1 (0)\n============ DEPTH: 7 ==========================================\n007 1 9ec8 | 1 9ec8 (0)\n008 0 | 0\n009 1 9f0e | 1 9f0e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","private_key":"f6395d3f2dfff6a01fa0f1143c3c6ba9b31b776fe6ae409050d911d23a137868","name":"node_9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","services":["bzz","pss"],"enable_msg_events":true,"port":37587},"up":true}},{"node":{"info":{"id":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","name":"node_e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","enode":"enode://422a22e066ae056507308bb1fecc971ca826bab52f6cb3b34b0589a2fc48a0408fdba15209748268cf34fac6bf4c209e24eda88a244a86828d194275ebe46f7f@127.0.0.1:0","enr":"0xf88fb8400775cf65da7c43b86728c2df5afa5e9c4c3f8f090a4adc01b3a5efa7baa889b372ff1fa45e2c44d87865585cd877390cdde993202b72699fc3adaf68ca1760bf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103422a22e066ae056507308bb1fecc971ca826bab52f6cb3b34b0589a2fc48a040","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4KC6fn6Jp6+AXiSr3hpaW0iboZdYUFGodV6MI0XD1Xs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e0a0ba\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 7895 5663 5814 244c | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 4 a1c8 b6df bea1 9f7d | 75 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n002 5 cf52 c42e c190 c272 | 27 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n003 7 f645 f2b4 f215 f1ed | 14 f8ff (0) f9de (0) fa24 (0) ff75 (0)\n004 2 ec90 ef99 | 7 eb68 (0) e867 (0) ed42 (0) ec90 (0)\n005 2 e681 e471 | 3 e64d (0) e681 (0) e471 (0)\n============ DEPTH: 6 ==========================================\n006 2 e277 e2d3 | 2 e277 (0) e2d3 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 e09f | 1 e09f (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","private_key":"b0d5109a4802c73c946c7a258870bd410c63771abdb96a9270ef013cf2c988de","name":"node_e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","services":["bzz","pss"],"enable_msg_events":true,"port":43807},"up":true}},{"node":{"info":{"id":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","name":"node_1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","enode":"enode://111c70fb9b2eb78fd08286a0101565ce175084379f0d8449515001d42a158dc1bbaec026062de57a300ef9127fd4aca4cd98f12526ac8ebf4564dc7eb62d2861@127.0.0.1:0","enr":"0xf88fb84027a4b499ed66fe3c260acb1384fd562864ab2ea5be83229701ac73ad6916a91b0d8d1c6e3e112ba9b03b133077d6e109f47ddfa35dbd20d934c9305cafe06b8d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103111c70fb9b2eb78fd08286a0101565ce175084379f0d8449515001d42a158dc1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"EHDfXpBOOGUIWwMZqBdh5ZFGSUxonnVn7+dGX8gZros=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1070df\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 a742 a7a8 a8f4 c272 | 130 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n001 3 7895 5663 5814 | 61 648a (0) 6758 (0) 67f3 (0) 6795 (0)\n002 5 24f8 2e65 2fd2 3938 | 28 298a (0) 2a50 (0) 2ddf (0) 2c85 (0)\n003 4 0942 0e80 0d1c 046c | 21 0e3b (0) 0e2b (0) 0e80 (0) 0cfc (0)\n004 3 1dc0 1b1d 19ea | 9 1fd0 (0) 1dec (0) 1dc0 (0) 1add (0)\n005 4 140d 1484 1784 1686 | 4 140d (0) 1484 (0) 1784 (0) 1686 (0)\n============ DEPTH: 6 ==========================================\n006 1 138d | 1 138d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 1049 | 1 1049 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","private_key":"e257c3e07a2c0a5fb86fd8a37ab0d9ff743e74798f3f353ec68c2035dc86b111","name":"node_1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","services":["bzz","pss"],"enable_msg_events":true,"port":46317},"up":true}},{"node":{"info":{"id":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","name":"node_34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","enode":"enode://9f8abe5231a45fd20487a9b4121d524d3b7a84e8ba84e4172bdba5b9e0fd7c950aeeb9d50e3747eeccfaabb4b97f23b01b5de7db38bb79720461d2e07f6fd21c@127.0.0.1:0","enr":"0xf88fb840db60fc10ad69f264ddc0aa2c696ca00930d8509a5150488041b12ccff8a0f4546a98344daf7ccf1d4cc42b130fbbc59bee03d2c1cd405e2081227557266da9680183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029f8abe5231a45fd20487a9b4121d524d3b7a84e8ba84e4172bdba5b9e0fd7c95","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NBGBZoRcGF0Vwoa35UM1Oe6Y7WNLqr1TTVc2n9X3xoE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 341181\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f756 9f7d bea1 | 130 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n001 5 68cb 6d3c 70f6 7895 | 61 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n002 5 046c 0e80 0d1c 0942 | 37 0e3b (0) 0e2b (0) 0e80 (0) 0cfc (0)\n003 6 2e65 2fd2 2ddf 2c80 | 11 2a50 (0) 298a (0) 2c85 (0) 2c80 (0)\n004 3 3980 397a 3938 | 8 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n005 4 31e1 3188 30fe 32ff | 6 31e6 (0) 31e1 (0) 3188 (0) 3051 (0)\n============ DEPTH: 6 ==========================================\n006 2 3728 36b9 | 2 3728 (0) 36b9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","private_key":"6aebf51d37cedb0b4d755280a22852af0bac9f6f3d355b43bbc8464947552e34","name":"node_34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","services":["bzz","pss"],"enable_msg_events":true,"port":33159},"up":true}},{"node":{"info":{"id":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","name":"node_56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","enode":"enode://bce79d844c8a5bf30fdabb154e156c9b572e1ae5cde1df2f778557d19f720bc830a47ae4678a962fd7f80d4868fda0658bad614a36a18d0ad2cdff495832699c@127.0.0.1:0","enr":"0xf88fb840e2fb45ac13932cdc0858fd63065cf2542a47b9c76331ea177fd36fa8df7938fc069e18891af924b9717bf4598486f9b4d0cbc8e354fdc0c601f9744bf9fcdad00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bce79d844c8a5bf30fdabb154e156c9b572e1ae5cde1df2f778557d19f720bc8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VmNWmb07x4GTrb246LfCyR2rQUD9qlBv6iMA7obEuoE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 566356\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 8073 9f7d bea1 f1ed | 130 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n001 6 046c 0942 1070 1b1d | 65 0e2b (0) 0e3b (0) 0e80 (0) 0cfc (0)\n002 6 6d3c 6dd3 68cb 6790 | 26 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n003 3 482e 43d4 43c9 | 19 4d91 (0) 4d38 (0) 4cec (0) 4b79 (0)\n004 7 5d82 5ff0 5a8b 5ac0 | 10 5ff0 (0) 5d82 (0) 5c7c (0) 5c37 (0)\n005 2 5144 50c1 | 3 52a8 (0) 5144 (0) 50c1 (0)\n============ DEPTH: 6 ==========================================\n006 1 5538 | 1 5538 (0)\n007 0 | 0\n008 1 56ca | 1 56ca (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","private_key":"98f06aa013ffdc1dc622e6180a8b868dcb22f51d0e11dddc2994bd02016cd2d8","name":"node_56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","services":["bzz","pss"],"enable_msg_events":true,"port":39073},"up":true}},{"node":{"info":{"id":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","name":"node_19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","enode":"enode://25da9f823f6a53ece92ba5f5a8fd5f6e819defef89a1d3dca5ab85ea24f52320c59331446c7863ea2a9161b19c2d37abe3af6a9a6961ba1003d5783b6d35ac27@127.0.0.1:0","enr":"0xf88fb8406cdb82ce95d6e0c4222880a7cd7e50ca502bacad52f5afc7c4b72b8dbda35b466718ed4f8f11f2a4342a3f4e1aafefb6869ce7e77d94e6dc1901344e69a07bf80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10325da9f823f6a53ece92ba5f5a8fd5f6e819defef89a1d3dca5ab85ea24f52320","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"GeoKaF/E7dKYtzbceneMnsQ2LeN4h2kREF+puizpAgQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 19ea0a\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 d700 c272 f756 f1ed | 130 ddb8 (0) dbd4 (0) dad0 (0) da36 (0)\n001 5 6d3c 68cb 7c7c 70f6 | 61 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n002 4 2e65 24f8 3938 32ff | 28 298a (0) 2a50 (0) 2c85 (0) 2c80 (0)\n003 4 046c 0d1c 0e80 0942 | 21 0e3b (0) 0e2b (0) 0e80 (0) 0cfc (0)\n004 3 1686 1049 1070 | 7 140d (0) 1484 (0) 1784 (0) 1686 (0)\n005 3 1dc0 1dec 1fd0 | 3 1fd0 (0) 1dec (0) 1dc0 (0)\n006 3 1add 1bd5 1b1d | 3 1add (0) 1bd5 (0) 1b1d (0)\n============ DEPTH: 7 ==========================================\n007 1 18e0 | 1 18e0 (0)\n008 1 194e | 1 194e (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","private_key":"ac8b9e1b4cfbd81595b636bdadfff8bb5f50cd77c2d6dcb05ae20e8ec4c63c1d","name":"node_19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","services":["bzz","pss"],"enable_msg_events":true,"port":43067},"up":true}},{"node":{"info":{"id":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","name":"node_32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","enode":"enode://dc181c079cf6ec82d82772bc7ae94bffff7d8120914030631b14e2a1e91a2979c02e119f03635cdf5d3e001c2b0370eeb626c2aea142bcd446fcb9671a2503e1@127.0.0.1:0","enr":"0xf88fb84052f9b4ee198b6110c708f59268694515e9488cb46efc9f9be015665e9990c36d04f94605b4f0cabf5462667106ddae15421dc9edfc990e6517c0d59d90555f980183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103dc181c079cf6ec82d82772bc7ae94bffff7d8120914030631b14e2a1e91a2979","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Mv8ZadkKqlqO0iYJaKjiusLRyuWXyQb5BJXx3F3n+NM=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 32ff19\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b659 c42e cf52 f305 | 130 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n001 3 43d4 5538 7895 | 61 4cec (0) 4d38 (0) 4d91 (0) 4b79 (0)\n002 4 0e80 0942 046c 19ea | 37 0e3b (0) 0e2b (0) 0e80 (0) 0cfc (0)\n003 8 2c80 2ddf 2e65 2fd2 | 11 298a (0) 2a50 (0) 2c85 (0) 2c80 (0)\n004 2 3980 3938 | 8 3f31 (0) 3c5b (0) 3cab (0) 3b02 (0)\n005 2 36b9 3411 | 3 3728 (0) 36b9 (0) 3411 (0)\n============ DEPTH: 6 ==========================================\n006 5 30fe 3051 31e1 31e6 | 5 31e1 (0) 31e6 (0) 3188 (0) 3051 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","private_key":"b1c850ed51e29dd00bfd57bfed2e5d99cc9f9631301bd8fd28164014f4d70f33","name":"node_32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","services":["bzz","pss"],"enable_msg_events":true,"port":45657},"up":true}},{"node":{"info":{"id":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","name":"node_7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","enode":"enode://a68c7f6ec8a1dcf423bc83c0b592ee6ceaae76d432cd461b10b26f7450cb6f9f444cc86d3d4c99242f12f40dee10f0afb1e72ebee5e1b366d9b8b5f9655f7113@127.0.0.1:0","enr":"0xf88fb8406b7afa5e6f4769c19841e7d3ba40ddbb85b498bb51aabc56a435c0f46703037f63cd6cb222e5da5d92df503476767da8fe86181a30ff028b09d6f045fa46e58c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a68c7f6ec8a1dcf423bc83c0b592ee6ceaae76d432cd461b10b26f7450cb6f9f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eJWyy5e0c/iJPMcKRCHg+L4cAzsnzXMPoTQ4t6jz/LU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7895b2\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 9f7d e0a0 f6c0 f756 | 130 ddb8 (0) da36 (0) dad0 (0) dbd4 (0)\n001 8 1b1d 1070 046c 2fd2 | 65 1784 (0) 1686 (0) 140d (0) 1484 (0)\n002 6 43d4 43c9 5814 50c1 | 35 4cec (0) 4d91 (0) 4d38 (0) 4b79 (0)\n003 3 6790 68cb 6d3c | 13 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n004 2 7049 70f6 | 4 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n005 3 7d16 7ce7 7c7c | 5 7e47 (0) 7d16 (0) 7ce7 (0) 7c46 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 7933 79e5 | 2 7933 (0) 79e5 (0)\n008 1 7850 | 1 7850 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","private_key":"4e69a8b973ab817bc7714a637ec947dd608ee56d981c0d77f7c99a6aa5f6ac6c","name":"node_7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","services":["bzz","pss"],"enable_msg_events":true,"port":33345},"up":true}},{"node":{"info":{"id":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","name":"node_046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","enode":"enode://183b5b7be84ebacec7a72dc825fc12441895754ccc15e53f4aec88278bae9da625acc2a8ad692479985552cb9e2afa799a5d8915933fae79bc3c24a525beda63@127.0.0.1:0","enr":"0xf88fb840a134fc16f24fd19fc3b2f61ed683f8c65a6fca5513dd3c7d6aac3a81855ef1484bc3b37e5482fcecbcf469c07477e57fd0af25ae5ee67e1a07f9ba2b40a2f9330183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103183b5b7be84ebacec7a72dc825fc12441895754ccc15e53f4aec88278bae9da6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BGylQWXw3U1i/X2O6el8ZV2z019UUqDMsN/8ecBHl4w=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 046ca5\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 c272 c42e ef99 f756 | 130 ddb8 (0) dbd4 (0) da36 (0) dad0 (0)\n001 5 5987 50c1 5663 70f6 | 61 4cec (0) 4d38 (0) 4d91 (0) 4a95 (0)\n002 6 2fd2 244c 3938 3411 | 28 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n003 3 1b1d 19ea 1070 | 16 1784 (0) 1686 (0) 1484 (0) 140d (0)\n004 3 0e80 0d1c 0942 | 11 0e2b (0) 0e3b (0) 0e80 (0) 0cfc (0)\n005 5 0191 0111 012b 025d | 6 0191 (0) 0111 (0) 012b (0) 025d (0)\n006 1 07f5 | 1 07f5 (0)\n============ DEPTH: 7 ==========================================\n007 2 0594 0561 | 2 0561 (0) 0594 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","private_key":"bc2961c291d9547bc0a390f7c929583558824d7047195fcd2cb026be0c9e0509","name":"node_046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","services":["bzz","pss"],"enable_msg_events":true,"port":35721},"up":true}},{"node":{"info":{"id":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","name":"node_094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","enode":"enode://34b32e374d0cb1f5f1066e330600cb29a8c74400fa6b4e4cb7115a3ca378f605cba1434fceb05ce465f624ab6b77630026597000caea4bce2d96b3b6fb2508ad@127.0.0.1:0","enr":"0xf88fb84097508e3f96233a8a9233a357aa263237d1c15a1d3b78f6b535adbb51249f097b0ae9437277cdeda5fd8ac5416b37b3e9d769ae8802cf22908fd3ab751ecd035e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10334b32e374d0cb1f5f1066e330600cb29a8c74400fa6b4e4cb7115a3ca378f605","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CUJWgSCExgUqJgQUmqOrojecSDv07CUWL2tDk0lCd1o=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 094256\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 9ca1 b659 | 130 ddb8 (0) da36 (0) dad0 (0) dbd4 (0)\n001 5 70f6 5814 5663 5538 | 61 4cec (0) 4d38 (0) 4d91 (0) 4b79 (0)\n002 5 244c 2fd2 3938 3411 | 28 298a (0) 2a50 (0) 2ddf (0) 2c85 (0)\n003 3 1070 1b1d 19ea | 16 1784 (0) 1686 (0) 140d (0) 1484 (0)\n004 2 025d 046c | 10 0191 (0) 0111 (0) 012b (0) 035f (0)\n005 3 0d1c 0e3b 0e80 | 5 0e2b (0) 0e3b (0) 0e80 (0) 0cfc (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 3 08bd 08e5 08f8 | 3 08bd (0) 08e5 (0) 08f8 (0)\n008 1 09b3 | 1 09b3 (0)\n009 0 | 0\n010 1 096a | 1 096a (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","private_key":"c5996d97ff53b644b9c191150d78304a45d9874040fb778ddc5bb65779d86bc8","name":"node_094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","services":["bzz","pss"],"enable_msg_events":true,"port":43233},"up":true}},{"node":{"info":{"id":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","name":"node_b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","enode":"enode://58735e5ecf597295cd19c074c7192858e890ceb98016f0e325cec4778d0218a9389a701caf242f4e40d8a3c9eb6b1f00a3174d7d2937fa28f16a12a8c78f9b18@127.0.0.1:0","enr":"0xf88fb84098020ea2d7d1fa04750b97764d931d2e91a9bd545f4d88bb37ca4bef38b7549a4c442d4f9a38ba4a8330780e9971528497eb7f33360afe06246098af41f622c20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10258735e5ecf597295cd19c074c7192858e890ceb98016f0e325cec4778d0218a9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tllBiIUDKQXqIK1H1wRw5APn5Afg6ev5J3+aLYHsEhw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b65941\npopulation: 22 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 32ff 19ea 0942 | 126 4d38 (0) 4d91 (0) 4cec (0) 482e (0)\n001 4 d700 cf52 e09f f305 | 55 ddb8 (0) da36 (0) dad0 (0) dbd4 (0)\n002 3 8358 9f7d 9c21 | 38 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n003 3 a8b5 a7a8 a1c8 | 23 acee (0) aeb4 (0) af02 (0) ab3f (0)\n004 4 ba91 bea1 bdc5 bcf8 | 8 b8e1 (0) bbaf (0) ba91 (0) bfc7 (0)\n005 1 b3f9 | 1 b3f9 (0)\n006 2 b5ea b4a1 | 2 b5ea (0) b4a1 (0)\n============ DEPTH: 7 ==========================================\n007 1 b78f | 1 b78f (0)\n008 1 b6df | 1 b6df (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","private_key":"6f63b7184c7a59615a5a9236a580d00b48d321b742cf81ae7310b20bc9f46f2f","name":"node_b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","services":["bzz","pss"],"enable_msg_events":true,"port":36979},"up":true}},{"node":{"info":{"id":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","name":"node_f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","enode":"enode://d218f0e8c660ea02f34733c763f5ded66b745176058a141d5c3bedb3485fcdedc87b59cd8d7a48a8fd21db93c553cead53a9ac4aaf2f033a3ab072c3d256c511@127.0.0.1:0","enr":"0xf88fb84016a186737b4c1ca5f0aea03b84f96ec62714e7e5da2d64be6b2440ac1c2748ed6fe3708f82254d114172bda4aa9b90e52648fdf8a4965407adcf8299ba7e616e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d218f0e8c660ea02f34733c763f5ded66b745176058a141d5c3bedb3485fcded","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8wUnOn0I5y9psLFThV6CLyUsu/NKGPMFE07tnR63tYo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f30527\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 19ea 046c 32ff 3938 | 126 4d38 (0) 4d91 (0) 4cec (0) 4b79 (0)\n001 2 9c21 b659 | 75 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n002 4 d700 cf52 c42e c272 | 27 ddb8 (0) d959 (0) d9cf (0) dad0 (0)\n003 4 e471 e2d3 ec90 ef99 | 14 e64d (0) e681 (0) e471 (0) e277 (0)\n004 4 f8ff fa24 ff75 fc39 | 7 f8ff (0) f9de (0) fa24 (0) feb3 (0)\n005 3 f645 f6c0 f756 | 3 f645 (0) f6c0 (0) f756 (0)\n006 1 f1ed | 1 f1ed (0)\n============ DEPTH: 7 ==========================================\n007 2 f2b4 f215 | 2 f2b4 (0) f215 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","private_key":"39d3913d08835ee0310d15c086d9d2b5bdfe93c590ffeb6d94d0a053770a938a","name":"node_f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","services":["bzz","pss"],"enable_msg_events":true,"port":43471},"up":true}},{"node":{"info":{"id":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","name":"node_f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","enode":"enode://f20b87c432491558cc8aebd5ea9ee25b89c6f93f08f1dbfdd8f5ce5b442263099d8f903e2a82b4c31c15c24e3763f335643014c943dac9dba80bb99b2bf7fab7@127.0.0.1:0","enr":"0xf88fb84014f4b222ba6b5de9fd84dbf8714c734b2273549ffd1e5d785589072c106e628a1a8c4cf1ed22b0b33864347ed1d46b4a941e32a0d27b46c3bdb1af2f742acb3b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f20b87c432491558cc8aebd5ea9ee25b89c6f93f08f1dbfdd8f5ce5b44226309","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"91YctnQOF+x8fRcGglGyyVHZVMd4BKpa9gRk6cOWTlc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f7561c\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 5c37 5663 7895 046c | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 4 a8b5 a1c8 93c0 9c21 | 75 aeb4 (0) af02 (0) acee (0) ab3f (0)\n002 6 d700 c8ea cf52 cdb1 | 27 ddb8 (0) d959 (0) d9cf (0) da36 (0)\n003 6 e471 e277 e09f e867 | 14 e64d (0) e681 (0) e471 (0) e277 (0)\n004 6 f9de f8ff fa24 ff75 | 7 f8ff (0) f9de (0) fa24 (0) feb3 (0)\n005 4 f1ed f2b4 f215 f305 | 4 f1ed (0) f2b4 (0) f215 (0) f305 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 f645 f6c0 | 2 f645 (0) f6c0 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","private_key":"ecae59b9fef453fa7d5352f8aa56d8af8ae96d6846b15e9aaff107d1031cdd4c","name":"node_f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","services":["bzz","pss"],"enable_msg_events":true,"port":45253},"up":true}},{"node":{"info":{"id":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","name":"node_9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","enode":"enode://437f633a70046ae9419cb2ddabf116dab0954965e968a6f007e228a7a7be8ce3d03010480c1b6e5d493d696d883920532e1bdb07b996dc70406fde018db10948@127.0.0.1:0","enr":"0xf88fb84021a7f662e426de82de76fe3fb5a9358593b06425d494639aaf2886f7d0cd4c2f09f3b746b5071fccca870524abebba751c338e44dd9c8af378c6f81bfa6b8b090183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102437f633a70046ae9419cb2ddabf116dab0954965e968a6f007e228a7a7be8ce3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nCHLPlb4rGankXqboU5Y936ZiscMF4uItQU9msJ3fmA=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9c21cb\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 50c1 3938 | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 9 cf52 c272 c42e e2d3 | 55 ddb8 (0) dad0 (0) da36 (0) dbd4 (0)\n002 7 a742 a616 a970 a8f4 | 37 af02 (0) aeb4 (0) acee (0) ab3f (0)\n003 7 8b43 8d19 8ea2 8073 | 21 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n004 3 955d 9257 93c0 | 8 97da (0) 9464 (0) 95c0 (0) 9518 (0)\n005 3 9959 9948 9b8e | 3 9959 (0) 9948 (0) 9b8e (0)\n006 3 9f0e 9f7d 9ec8 | 3 9ec8 (0) 9f0e (0) 9f7d (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 2 9c8e 9ca1 | 2 9c8e (0) 9ca1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","private_key":"7eef00d143ca4d22aa8920afb1093aeee46b08939a3cfefeab24e6465f3d7523","name":"node_9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","services":["bzz","pss"],"enable_msg_events":true,"port":45091},"up":true}},{"node":{"info":{"id":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","name":"node_f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","enode":"enode://1f605d05b467e52497e1862559e2ea806c76b9b68e4afb936b675a7afa72346881e26390a04e9afcda1a11fbefd20fd50c0762ce93772dac8c8498e6c301da9c@127.0.0.1:0","enr":"0xf88fb84092227639c78910be0212f1396d95453dd49c75961b2d39d43b6dbe94b6be413b25e0d6ae86588ec165a1c7881d660a1621459959cc457247cd1ab90403fbf3730183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021f605d05b467e52497e1862559e2ea806c76b9b68e4afb936b675a7afa723468","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8e2dRWIv+XSh45bNh4st64njGqXQjadzQj8pKujby7Y=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f1ed9d\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 5c37 50c1 5663 7895 | 126 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n001 6 b4a1 a7a8 a1c8 a327 | 75 acee (0) aeb4 (0) af02 (0) aaf0 (0)\n002 3 c8ea c42e c272 | 27 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n003 7 ef99 eb68 e681 e471 | 14 e64d (0) e681 (0) e471 (0) e277 (0)\n004 4 f9de feb3 ff75 fc39 | 7 f8ff (0) f9de (0) fa24 (0) feb3 (0)\n005 3 f645 f6c0 f756 | 3 f645 (0) f6c0 (0) f756 (0)\n============ DEPTH: 6 ==========================================\n006 3 f2b4 f215 f305 | 3 f2b4 (0) f215 (0) f305 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","private_key":"43438f5d37cc4d101776db9c837b45c0348d0fb3ee2b4d66b66ea68193a67634","name":"node_f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","services":["bzz","pss"],"enable_msg_events":true,"port":42225},"up":true}},{"node":{"info":{"id":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","name":"node_3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","enode":"enode://d65c386d5a9eb699e325a7b173f89ced8caed9f813009e1949ae1c727decbb605d94eecc4f1b8733edb8dbd4c29d3b85d0de50abdab36072250f3de5cd28ac35@127.0.0.1:0","enr":"0xf88fb840eb07d284d45af49b9534f8d95e093e90eb86595cf13b63dab9984c6430a9ba0845a201ee9f0eaea3d91a875fba3a36474eebdebef6154e1227ce0f12d011b6f30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d65c386d5a9eb699e325a7b173f89ced8caed9f813009e1949ae1c727decbb60","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OTjmssCVCE3Jl1o+hkkTNVdJXTSsbfh0xtkpJm4//m8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3938e6\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 9c21 bcf8 c42e f305 | 130 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n001 6 70f6 7895 5c37 5987 | 61 60c5 (0) 648a (0) 6758 (0) 67f3 (0)\n002 8 1070 138d 1dc0 1b1d | 37 1686 (0) 1784 (0) 1484 (0) 140d (0)\n003 4 2fd2 26ab 24f8 244c | 11 2a50 (0) 298a (0) 2c85 (0) 2c80 (0)\n004 5 36b9 3411 30fe 3051 | 9 3728 (0) 36b9 (0) 3411 (0) 3188 (0)\n005 2 3cab 3c5b | 3 3f31 (0) 3cab (0) 3c5b (0)\n006 2 3b02 3a62 | 2 3b02 (0) 3a62 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 3980 | 1 3980 (0)\n009 1 397a | 1 397a (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","private_key":"fbe0ae960205a2db352664d1d04b5bba8f4ba47cd2fe72d6ade101914a4ccaeb","name":"node_3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","services":["bzz","pss"],"enable_msg_events":true,"port":44129},"up":true}},{"node":{"info":{"id":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","name":"node_bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","enode":"enode://e6c340b1a3696a5038e4d658f970cac4bda141f463f92b1b44ee1cb7f7f6868ffdde7757ef00b0ff3b271a9a9ecc8ab2e5875c42cb87e496405bc922e6fa64d0@127.0.0.1:0","enr":"0xf88fb840c9a15fff14a8ea3abbc9aedcba9b73f5e824da4b1a9e08fcf571cab264f32d8e7a24034ff41cfab6ecfd8ac3d535031401c463fdbd7e54919a443452c29c81ae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e6c340b1a3696a5038e4d658f970cac4bda141f463f92b1b44ee1cb7f7f6868f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vPhez0Ibhx/KAkenCBGIqOLAh3i4j/rRbbN+8CT+wPw=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bcf85e\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 50c1 046c 3938 | 126 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n001 3 cf52 c272 ef99 | 55 ddb8 (0) dbd4 (0) dad0 (0) da36 (0)\n002 8 8ea2 8358 87a3 86d6 | 38 80d7 (0) 8073 (0) 8074 (0) 8006 (0)\n003 4 a970 a8b5 a7a8 a1c8 | 23 acee (0) aeb4 (0) af02 (0) ab3f (0)\n004 4 b3f9 b4a1 b6df b659 | 6 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n005 3 b8e1 bbaf ba91 | 3 b8e1 (0) bbaf (0) ba91 (0)\n============ DEPTH: 6 ==========================================\n006 3 be68 bea1 bfc7 | 3 bfc7 (0) be68 (0) bea1 (0)\n007 1 bdc5 | 1 bdc5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","private_key":"0e3de03ec47c112197b5ce9f4876cc7e0328950172cb9bdcdbf176c7b1e8f4ad","name":"node_bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","services":["bzz","pss"],"enable_msg_events":true,"port":40251},"up":true}},{"node":{"info":{"id":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","name":"node_ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","enode":"enode://a32bf13f4f87b1e4791889257bd457b480d36efd85c79fbdeafa0cd700b80d68203a12c8c8dc06bc7fe6784e017ed5beaf08fa18498f6b4a7014b292c79ad657@127.0.0.1:0","enr":"0xf88fb84090a9fff8d7f284263393a75dbe4c5ffa3baf41b98a66f2556dcceeba191c4f70370008eb731f510bf571448c132df27f82771b519fb3ad204ad2d0689fa0781d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a32bf13f4f87b1e4791889257bd457b480d36efd85c79fbdeafa0cd700b80d68","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"75m2zcBTRaHugiZ4kOPMru8fK9L+euiwK2sguaXvhbs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ef99b6\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 046c 50c1 | 126 298a (0) 2a50 (0) 2c85 (0) 2c80 (0)\n001 4 87a3 86d6 8358 bcf8 | 75 81a5 (0) 80d7 (0) 8006 (0) 8074 (0)\n002 4 d3e9 d700 c8ea c272 | 27 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n003 8 fa24 fc51 fc39 f1ed | 14 f8ff (0) f9de (0) fa24 (0) feb3 (0)\n004 6 e681 e471 e09f e0a0 | 7 e64d (0) e681 (0) e471 (0) e277 (0)\n005 2 eb68 e867 | 2 eb68 (0) e867 (0)\n006 2 ed42 ec90 | 2 ed42 (0) ec90 (0)\n============ DEPTH: 7 ==========================================\n007 1 eebd | 1 eebd (0)\n008 0 | 0\n009 1 eff2 | 1 eff2 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","private_key":"3831e217095e4b4c3136779fd48aa121431f6a092eb73e195733ff54b1173150","name":"node_ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","services":["bzz","pss"],"enable_msg_events":true,"port":44801},"up":true}},{"node":{"info":{"id":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","name":"node_c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","enode":"enode://58ac0bf5776e7efc0260166f939bfdf2dde78fe6180b3d8aa44837f05cec80d837921c8066f45d495bfbe49ffeeca03fe962b8a7da5ccab5317ea019d665218e@127.0.0.1:0","enr":"0xf88fb840478fb2b3a4ab8e3cd050916898983baa1a6896bd48d38cc281048c9f916b9e493bc8b5aa56c0c2fc28e8aec7f9fcb6b6245cbd205c39861c37f7980d982af09a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10258ac0bf5776e7efc0260166f939bfdf2dde78fe6180b3d8aa44837f05cec80d8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wnKxL0Agrlsg49Kc0J3gP6AIjj7rXweqdyiymj6Q5oc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c272b1\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 1070 19ea 046c 50c1 | 126 140d (0) 1484 (0) 1784 (0) 1686 (0)\n001 3 bcf8 9c21 9ec8 | 75 af02 (0) aeb4 (0) acee (0) aaf0 (0)\n002 7 ff75 f6c0 f756 f305 | 28 f9de (0) f8ff (0) fa24 (0) feb3 (0)\n003 2 d3e9 d700 | 11 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n004 5 c9c3 c8ea cdb1 cc33 | 8 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n005 5 c6a8 c603 c74d c534 | 5 c6a8 (0) c603 (0) c74d (0) c534 (0)\n============ DEPTH: 6 ==========================================\n006 1 c190 | 1 c190 (0)\n007 0 | 0\n008 1 c2d0 | 1 c2d0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","private_key":"5ba984dd53fd38ef7d9f085d4d2f71bf5e57cebbcf57a991cdfc6f90de3bf1e2","name":"node_c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","services":["bzz","pss"],"enable_msg_events":true,"port":36391},"up":true}},{"node":{"info":{"id":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","name":"node_c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","enode":"enode://50c60560f3e788431adda5f3ee4a65d462996a8a36a801d446f2d7d9e5a2d6dbc87d22941f4533589788d323a941f0f70a6c9b3b8c70f9984c1493879b56a3d6@127.0.0.1:0","enr":"0xf88fb840b2c5ef4495d49d374e60fa0e85dc6a8e48f5004aebec4bc746bfae6c2fe8e1180e0ba56367464f0e396f9d98f8e999544031948efb5659f3f33130eee1e8bb230183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10250c60560f3e788431adda5f3ee4a65d462996a8a36a801d446f2d7d9e5a2d6db","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xC5kkoeUOe7s2ZONF/8oP9j18kIGkGylErTapIA7eLQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c42e64\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 08f8 046c 32ff 3938 | 126 140d (0) 1484 (0) 1686 (0) 1784 (0)\n001 2 9c21 9ec8 | 75 a5ac (0) a505 (0) a4ee (0) a742 (0)\n002 8 e2d3 e0a0 ff75 f6c0 | 28 e867 (0) eb68 (0) ed42 (0) ec90 (0)\n003 4 dbd4 da36 d3e9 d700 | 11 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n004 4 c8ea cf52 cc33 cdb1 | 8 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n005 3 c190 c2d0 c272 | 3 c190 (0) c2d0 (0) c272 (0)\n============ DEPTH: 6 ==========================================\n006 3 c74d c6a8 c603 | 3 c74d (0) c6a8 (0) c603 (0)\n007 1 c534 | 1 c534 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","private_key":"49943ef9cb5cfe1f6f01ab1a1f9fa8d6de40a8c49ed24b1ae244aff5459c9da0","name":"node_c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","services":["bzz","pss"],"enable_msg_events":true,"port":36607},"up":true}},{"node":{"info":{"id":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","name":"node_f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","enode":"enode://914631182a42d1219b9b28e6b5da1bd8c08e539575c6a7a85fa1d4222e9dc5c26156834d4dda7260174a844f276747baf4fbb4c75d6497ed9fc55f1300ad99df@127.0.0.1:0","enr":"0xf88fb840799f4f4b2fd08a7f68922afcbc7694953e771f3d0bfb81ee89d9f3c15bd5750b6e7e379849906088a02b409e2c46ef95e0f2169d796e86b7082d85ec6b99114e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103914631182a42d1219b9b28e6b5da1bd8c08e539575c6a7a85fa1d4222e9dc5c2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8hW8CSaOYOu+x290O+vQnX5y1Mvu3AudNBe7Si70KTU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f215bc\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5c37 5538 50c1 | 126 2a50 (0) 298a (0) 2ddf (0) 2c80 (0)\n001 3 ba91 9c21 9ec8 | 75 af02 (0) aeb4 (0) acee (0) ab3f (0)\n002 4 d3e9 cc33 cdb1 c42e | 27 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n003 9 e867 eb68 ef99 e471 | 14 e867 (0) eb68 (0) ed42 (0) ec90 (0)\n004 3 f9de ff75 fc39 | 7 fa24 (0) f8ff (0) f9de (0) feb3 (0)\n005 3 f645 f6c0 f756 | 3 f645 (0) f6c0 (0) f756 (0)\n006 1 f1ed | 1 f1ed (0)\n============ DEPTH: 7 ==========================================\n007 1 f305 | 1 f305 (0)\n008 1 f2b4 | 1 f2b4 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","private_key":"1fed8e5946a97ef10fbabe578590010445e49851e010e422c67c268755300ba7","name":"node_f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","services":["bzz","pss"],"enable_msg_events":true,"port":46479},"up":true}},{"node":{"info":{"id":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","name":"node_50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","enode":"enode://7e0efcde01784575e4464fcd19486068e81004e45914861571c763aab72c40fd7de3be474040f71ccb0daa1d9bbb197140dad13d641b98fed6ffbc50b322e2d4@127.0.0.1:0","enr":"0xf88fb8402fd5df06a939249a9fd0804b4b2f40564565802cf963bde27cbc3f4504997ac970f523add3a785ca408dbf18c0de819dd1f6ae8b65c540fbafe08e578e5673c40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027e0efcde01784575e4464fcd19486068e81004e45914861571c763aab72c40fd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UMGoAjv+z/sJRy/cUImPTQUKMUQ9QKbAe2KQkL6w3z0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 50c1a8\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 10 bcf8 9c21 9ec8 c42e | 130 af02 (0) aeb4 (0) acee (0) aaf0 (0)\n001 4 046c 0942 0d1c 3938 | 65 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n002 3 70f6 7c7c 7895 | 26 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n003 5 46bf 43c9 4a95 48d7 | 19 402c (0) 4005 (0) 435d (0) 43d4 (0)\n004 7 5ff0 5d82 5c37 5c7c | 10 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n005 3 56ca 5663 5538 | 3 56ca (0) 5663 (0) 5538 (0)\n============ DEPTH: 6 ==========================================\n006 1 52a8 | 1 52a8 (0)\n007 1 5144 | 1 5144 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","private_key":"d0239dc44e8e56fc8a14b93a43280c425ab0988a63c4fa8d558b6b61b972ccbc","name":"node_50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","services":["bzz","pss"],"enable_msg_events":true,"port":35321},"up":true}},{"node":{"info":{"id":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","name":"node_cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","enode":"enode://e384773f94b9f4af8300be9d39cc581c8fd208e7fe459b0457b672457797b8c548dd064bb5361fcfc8587bf356c8499f98a5bd8b2271ffe616f070f8fe479178@127.0.0.1:0","enr":"0xf88fb8401939cbdd1ef26b61abcaf49b3902648650033c3decced5af79fdd44e154207b01ba84f8e62658f91e9386318c11267895180beaa28dec6fb4bbcd4355b6e733b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e384773f94b9f4af8300be9d39cc581c8fd208e7fe459b0457b672457797b8c5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"z1Kz/ILsJMPptASI18X3rIr3MdFZoQNhm+6TLsdNXpI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cf52b3\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 244c 32ff 50c1 | 126 298a (0) 2a50 (0) 2ddf (0) 2c80 (0)\n001 4 bcf8 b659 9c21 9ec8 | 75 a4ee (0) a505 (0) a5ac (0) a742 (0)\n002 8 ff75 f305 f6c0 f756 | 28 f9de (0) f8ff (0) fa24 (0) feb3 (0)\n003 4 dbd4 d700 d408 d3e9 | 11 ddb8 (0) d9cf (0) d959 (0) dad0 (0)\n004 6 c603 c42e c534 c190 | 8 c190 (0) c2d0 (0) c272 (0) c74d (0)\n005 4 c961 c9c3 c8c8 c8ea | 4 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n============ DEPTH: 6 ==========================================\n006 3 cd6c cdb1 cc33 | 3 cc33 (0) cd6c (0) cdb1 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","private_key":"53a2e6b259e67e80a322fb0917b85f97860e8d37711d29f1964170d6b45d30cf","name":"node_cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","services":["bzz","pss"],"enable_msg_events":true,"port":36313},"up":true}},{"node":{"info":{"id":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","name":"node_e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","enode":"enode://a1889a38f3b1e9100f7626ad54d9622d503f7b1a9014ec13cd5215336196fc7bf27333448336381ec7c86db4006d245abb48c0f58940760bbb9deba79ca40c98@127.0.0.1:0","enr":"0xf88fb840aa1a2025c453351a72aae064d06aea3bd2d1804bd65cef80301c79f24934fbf94a35606db5f3a38a983d33c340db4c1f4c573ccf0b492159aa9bea1e78b3c8bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a1889a38f3b1e9100f7626ad54d9622d503f7b1a9014ec13cd5215336196fc7b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4J+YEU2mTnVHs1FjcZD2YhofdVaM+plgmA/Hdhj4hVs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e09f98\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0d1c 5987 5538 | 126 298a (0) 2a50 (0) 2c80 (0) 2c85 (0)\n001 6 a8b5 b659 ba91 93c0 | 75 a4ee (0) a505 (0) a5ac (0) a606 (0)\n002 2 c534 cf52 | 27 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n003 3 f756 f1ed f215 | 14 fa24 (0) f8ff (0) f9de (0) feb3 (0)\n004 5 e867 eb68 ec90 eebd | 7 e867 (0) eb68 (0) ed42 (0) ec90 (0)\n005 3 e64d e681 e471 | 3 e64d (0) e681 (0) e471 (0)\n============ DEPTH: 6 ==========================================\n006 2 e277 e2d3 | 2 e277 (0) e2d3 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 e0a0 | 1 e0a0 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","private_key":"0c21558e199ac8f8279ccba752dfce4a160302de5147dcf00d462d131b117293","name":"node_e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","services":["bzz","pss"],"enable_msg_events":true,"port":36519},"up":true}},{"node":{"info":{"id":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","name":"node_e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","enode":"enode://811ff91b658315c4fe2d501370f6e0a5c2a4e87fd7705b110ffd9f5b560a6cbf6a57694806e4a1371ae4ac682b8ef5eb4948f3f8798bde7bae62478ce8b29187@127.0.0.1:0","enr":"0xf88fb840a4ca41dc96fb07375e8655b138b07ef3e43a3cd6824b9b03a1bfbfd5dbffe8514a9522377d1e78474799dd1121831879798540a60453e10b5808f881eb4c12ec0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103811ff91b658315c4fe2d501370f6e0a5c2a4e87fd7705b110ffd9f5b560a6cbf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4tNvM12QrWMUjbjjU6eKMNjZwKvhB74s+GhfagHOdLk=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e2d36f\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 70f6 50c1 5987 0d1c | 126 2a50 (0) 298a (0) 2ddf (0) 2c80 (0)\n001 3 a8b5 9c21 9ec8 | 75 a5ac (0) a505 (0) a4ee (0) a742 (0)\n002 3 c42e c534 cf52 | 27 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n003 5 ff75 f6c0 f1ed f305 | 14 fa24 (0) f8ff (0) f9de (0) feb3 (0)\n004 4 e867 eb68 ec90 ef99 | 7 e867 (0) eb68 (0) ed42 (0) ec90 (0)\n005 3 e64d e681 e471 | 3 e64d (0) e681 (0) e471 (0)\n============ DEPTH: 6 ==========================================\n006 2 e0a0 e09f | 2 e0a0 (0) e09f (0)\n007 0 | 0\n008 1 e277 | 1 e277 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","private_key":"85e06d183c4f5bd671a46232c0f291076bda62d6d879496e84ae6c378d966174","name":"node_e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","services":["bzz","pss"],"enable_msg_events":true,"port":39311},"up":true}},{"node":{"info":{"id":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","name":"node_9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","enode":"enode://4dd9a25575645b97012af13c2b562b1fdfc4444922998e1d08ac31e94030800ec40d6c48d4f3fd76c25ed0882398d9620390cbad7c72618375520f348552e966@127.0.0.1:0","enr":"0xf88fb8408fa9c2bc6983316b1331a0fbc8cd6fdb72a55deec652bdb9de328b24b60e78c51aca35ac84c776df03949c9a90e376a21a4e15f4b334551da12477a8eb16cd470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024dd9a25575645b97012af13c2b562b1fdfc4444922998e1d08ac31e94030800e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nsgx2XQYkW/ZaVRl4EHK8ngk27Udb/dNa3DzvVYecOY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9ec831\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0d1c 70f6 5987 50c1 | 126 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n001 7 c42e c272 cdb1 cf52 | 55 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n002 3 a1c8 ba91 bcf8 | 37 a5ac (0) a505 (0) a4ee (0) a742 (0)\n003 8 8b43 8ea2 8d19 8358 | 21 81a5 (0) 80d7 (0) 8006 (0) 8073 (0)\n004 4 955d 9518 9464 93c0 | 8 97da (0) 95c0 (0) 9518 (0) 955d (0)\n005 3 9b8e 9959 9948 | 3 9b8e (0) 9959 (0) 9948 (0)\n006 3 9c8e 9ca1 9c21 | 3 9c8e (0) 9ca1 (0) 9c21 (0)\n============ DEPTH: 7 ==========================================\n007 2 9f7d 9f0e | 2 9f0e (0) 9f7d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","private_key":"1448c304f2af7e48ae443402703fb0a3b1e1f2d2bfef6a6456141daa73c558f6","name":"node_9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","services":["bzz","pss"],"enable_msg_events":true,"port":46859},"up":true}},{"node":{"info":{"id":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","name":"node_553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","enode":"enode://f82e099fec04ce2be67700e463707728eb144ee2a7cf821945ec03d4b8166298749bed9860b4348e5a202bd5bff1957dc60d943fbf065aeed536e8baa6e18492@127.0.0.1:0","enr":"0xf88fb840f8de9483b97759f1daf327a569a475175e424a75efbc3654978adf85d062bc605b9880637ca11a772ac5e122d91c1acf3f95096d0ceea3935048f40ac35b28990183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f82e099fec04ce2be67700e463707728eb144ee2a7cf821945ec03d4b8166298","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VTgk73AdPNAZGuOmfeVk7Qz1U+dL1g7Z3jIfkwJzK6Y=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 553824\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f215 e09f 9ec8 | 130 fa24 (0) f9de (0) f8ff (0) fc51 (0)\n001 5 30fe 32ff 3938 0942 | 65 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n002 5 6790 70f6 7895 7ce7 | 26 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n003 7 4a95 48d7 48f1 48b8 | 19 4d38 (0) 4d91 (0) 4cec (0) 4b79 (0)\n004 8 5ff0 5d82 5c37 5c7c | 10 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n005 3 52a8 5144 50c1 | 3 52a8 (0) 5144 (0) 50c1 (0)\n============ DEPTH: 6 ==========================================\n006 2 56ca 5663 | 2 56ca (0) 5663 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","private_key":"cf91bb0fea150fbf8705d939da029fdefebdd1076d1f645864e8d53e99501f66","name":"node_553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","services":["bzz","pss"],"enable_msg_events":true,"port":36171},"up":true}},{"node":{"info":{"id":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","name":"node_0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","enode":"enode://8963c10c3899dce73c253820c99702353f5b64a1fcd1e94e3c60e8fa36a84d51e3155fe96a087599495c893da0da9d41148ab85235b65124f03236d23543e0eb@127.0.0.1:0","enr":"0xf88fb8404dcbbcadbab5ddfd4e10d68ffabb6b5c5038e323a062c9153dcb26b97422e6dc051d2044717c22e8f9279c57776cf04de0184acc5b55f05525303d87739498fb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038963c10c3899dce73c253820c99702353f5b64a1fcd1e94e3c60e8fa36a84d51","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DRw1xupIXLM4V7eQ7iYvl0zw1Uz4zjAD+DCKwuh8LCU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0d1c35\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 e09f e2d3 c8ea cdb1 | 130 a4ee (0) a5ac (0) a505 (0) a742 (0)\n001 5 7c7c 70f6 5987 50c1 | 61 6e7f (0) 6c01 (0) 6dd3 (0) 6d5e (0)\n002 4 244c 3938 3411 30fe | 28 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n003 6 19ea 1b1d 1dc0 1784 | 16 140d (0) 1484 (0) 1686 (0) 1784 (0)\n004 3 035f 025d 046c | 10 0191 (0) 0111 (0) 012b (0) 025d (0)\n005 4 0942 08bd 08f8 08e5 | 6 08bd (0) 08f8 (0) 08e5 (0) 09b3 (0)\n============ DEPTH: 6 ==========================================\n006 3 0e80 0e2b 0e3b | 3 0e80 (0) 0e2b (0) 0e3b (0)\n007 1 0cfc | 1 0cfc (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","private_key":"ef22b9afd09135d969cbfaa3c7f02beacec87dc03fc514f0565a8fdee536fab4","name":"node_0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","services":["bzz","pss"],"enable_msg_events":true,"port":40431},"up":true}},{"node":{"info":{"id":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","name":"node_59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","enode":"enode://7720368c45d12af9a222ed1304cec25526c3f521dc8bdbdad1a966ab1b0bd4169a905fe56bec7845f8be9ddb4a1302c8c13d61273415db4ae840c8662272be45@127.0.0.1:0","enr":"0xf88fb84034abc65244d703a8f51ccf0ea8c8099e02c759dbf7c0b19434d08a4c72e9836629a6c3f2dad2881e6e85fc9aade07106ee0fbd25d2d04233ee4cbe90748a1ef10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037720368c45d12af9a222ed1304cec25526c3f521dc8bdbdad1a966ab1b0bd416","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WYduf/npIkOFba0jEm4dONml3a55dy7Rsr25HzOkpLU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 59876e\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 9ec8 e09f e2d3 cdb1 | 130 a4ee (0) a5ac (0) a505 (0) a7a8 (0)\n001 4 30fe 3938 046c 0d1c | 65 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n002 2 7c7c 70f6 | 26 6b4e (0) 68cb (0) 6e7f (0) 6c01 (0)\n003 4 4a95 48b8 48f1 48d7 | 19 46bf (0) 447c (0) 447a (0) 44ad (0)\n004 4 52a8 50c1 5663 5538 | 6 52a8 (0) 5144 (0) 50c1 (0) 56ca (0)\n005 2 5c37 5c7c | 4 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n============ DEPTH: 6 ==========================================\n006 4 5a8b 5ac0 5a26 5bd8 | 4 5a8b (0) 5ac0 (0) 5a26 (0) 5bd8 (0)\n007 1 5814 | 1 5814 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","private_key":"d68e5f6712ad13a5f18afe7ea604194bc75d700d868489882a6d439f62d3319f","name":"node_59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","services":["bzz","pss"],"enable_msg_events":true,"port":43863},"up":true}},{"node":{"info":{"id":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","name":"node_c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","enode":"enode://ed050956c10a60194bdfcc79bc927b7864a5ccd487521a7764441e4146defd9147ba153983e148a136ae5bde225df9eec974f956dcbd4c837b61013ce32a13fb@127.0.0.1:0","enr":"0xf88fb840d1ba87a7f202b2d69d25fe1c48a6386c6e96f4b473922d59cebadff7c92d58b528bf3e59e6f57acb30587ce613e1bb64b9f483d837420b47e669533583256c650183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ed050956c10a60194bdfcc79bc927b7864a5ccd487521a7764441e4146defd91","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xTQX8AjkVQ4cTLmj4pVbOvZAPgWbe0tMM4adntSlgKU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c53417\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 2c85 2c80 2fd2 244c | 126 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n001 5 a1c8 ba91 8358 87a3 | 75 a4ee (0) a505 (0) a5ac (0) a742 (0)\n002 4 f6c0 e471 e09f e2d3 | 28 f8ff (0) f9de (0) fa24 (0) ff75 (0)\n003 4 da36 ddb8 d700 d3e9 | 11 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n004 3 c8ea cf52 cdb1 | 8 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n005 3 c190 c2d0 c272 | 3 c190 (0) c2d0 (0) c272 (0)\n============ DEPTH: 6 ==========================================\n006 3 c74d c6a8 c603 | 3 c74d (0) c6a8 (0) c603 (0)\n007 1 c42e | 1 c42e (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","private_key":"a4ea2b639e280337e8009d2b54e9a11f76f523e1ef1ba9619f03ba35ee15abd8","name":"node_c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","services":["bzz","pss"],"enable_msg_events":true,"port":39971},"up":true}},{"node":{"info":{"id":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","name":"node_cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","enode":"enode://c272080f38dac498765747523f4926457465e2941b3ddc08b62aa1affedc7f8e16f0e038d1a474ff133dfbbfc366fe750e99c2b75a184d40debca8913add7f88@127.0.0.1:0","enr":"0xf88fb840b2235f35efc093f6baac2bfe925b6f021eb803ca0488b4174d2a7ecc21921e124f99929c0f151ebdb9472db8350ab836dba4759f9aa6aad06a78f9c3bed45f7c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c272080f38dac498765747523f4926457465e2941b3ddc08b62aa1affedc7f8e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zbE4c6wFiGHylevKXZWL8rt5Pj+eJ0z1pzpjNCWpJ28=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cdb138\npopulation: 26 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 08f8 0d1c 5987 70f6 | 126 2ddf (0) 2c80 (0) 2c85 (0) 2e65 (0)\n001 5 9ec8 8ea2 8358 ba91 | 75 a5ac (0) a505 (0) a4ee (0) a742 (0)\n002 3 e471 f756 f215 | 28 f8ff (0) f9de (0) fa24 (0) fc51 (0)\n003 3 da36 d3e9 d700 | 11 ddb8 (0) d959 (0) d9cf (0) dbd4 (0)\n004 4 c2d0 c272 c42e c534 | 8 c190 (0) c2d0 (0) c272 (0) c74d (0)\n005 4 c961 c9c3 c8c8 c8ea | 4 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n006 1 cf52 | 1 cf52 (0)\n============ DEPTH: 7 ==========================================\n007 1 cc33 | 1 cc33 (0)\n008 1 cd6c | 1 cd6c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","private_key":"276e93bd6b53db81cd162f42fb634b4f3910e6d45ec7079c645a69e4bb5afca8","name":"node_cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","services":["bzz","pss"],"enable_msg_events":true,"port":45371},"up":true}},{"node":{"info":{"id":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","name":"node_70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","enode":"enode://8f535591758ee98b2ac41582a7d8642366706bd60b1e98b68f9a4019f653977b5d0973cee6fff3ec29c71ad9699d7e456f0ce29a85517f76f9876fdb6ff30a1d@127.0.0.1:0","enr":"0xf88fb840b1187ebcb96b2d46f5160c07357e2fb4ea69464366c7db75aacaa3b5c296724b5eff7e0985615cc94bf3aa4fe85bfaed822dd031b5d5b00e56937de9f27d922b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038f535591758ee98b2ac41582a7d8642366706bd60b1e98b68f9a4019f653977b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cPaFYnM9pOOxw5SftuEawL3UnqfnMpJfk3+H31r2mNY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 70f685\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 9ec8 8ea2 e2d3 e471 | 130 a2a1 (0) a2e6 (0) a327 (0) a330 (0)\n001 8 2fd2 3938 3411 30fe | 65 298a (0) 2a50 (0) 2ddf (0) 2c80 (0)\n002 5 48d7 48b8 5538 50c1 | 35 46bf (0) 44ad (0) 447c (0) 447a (0)\n003 6 6790 60c5 6dd3 6d5e | 13 6e7f (0) 6c01 (0) 6dd3 (0) 6d5e (0)\n004 6 7933 79e5 7895 7d16 | 9 7933 (0) 79e5 (0) 7850 (0) 7895 (0)\n============ DEPTH: 5 ==========================================\n005 2 7660 741a | 2 7660 (0) 741a (0)\n006 0 | 0\n007 0 | 0\n008 1 7049 | 1 7049 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","private_key":"0e58ed0a2b5955aa47fe1c7b185856a83cdf3966967becea9ac671a883a80100","name":"node_70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","services":["bzz","pss"],"enable_msg_events":true,"port":38721},"up":true}},{"node":{"info":{"id":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","name":"node_e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","enode":"enode://a39dec81162f336a51198d012a49706e42117ca42cf3d483d9ac74f65e01eab80f2164489ad2fffb217106e4f1e877d3ff2653643519569aa3f6b44becffccc7@127.0.0.1:0","enr":"0xf88fb8403f1d47db38a57c5f187e93e73913d7d9164793ebf66aa94e6e1eb9bec7be36de323d165610bbdde527989f06ff19902a0d7e342985034c0d1798277c0f9dd2ee0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a39dec81162f336a51198d012a49706e42117ca42cf3d483d9ac74f65e01eab8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5HHvvPHe85FbPdotxlqGlFxge+VKM+MeliVUm+ysDjQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e471ef\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 30fe 70f6 | 126 2a50 (0) 298a (0) 2ddf (0) 2c85 (0)\n001 2 ba91 8ea2 | 75 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n002 7 d3e9 c2d0 c534 cdb1 | 27 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n003 7 feb3 fc39 f756 f6c0 | 14 f9de (0) f8ff (0) fa24 (0) feb3 (0)\n004 4 eb68 e867 ec90 ef99 | 7 e867 (0) eb68 (0) ed42 (0) ec90 (0)\n005 4 e277 e2d3 e0a0 e09f | 4 e0a0 (0) e09f (0) e277 (0) e2d3 (0)\n============ DEPTH: 6 ==========================================\n006 2 e64d e681 | 2 e64d (0) e681 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","private_key":"8e34bf0af71dad627841518807b1d0dd56349eafd2c3b416704905a478f24628","name":"node_e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","services":["bzz","pss"],"enable_msg_events":true,"port":33051},"up":true}},{"node":{"info":{"id":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","name":"node_8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","enode":"enode://7efcc0a5b110a3d47e6b3e9b74e485a18770d757efb293ac544941a244e1764eef9534fb52dd16769014c5d3591266da5d6816885513985fd4d9eb1ff29225b2@127.0.0.1:0","enr":"0xf88fb840af3e7481de1a628caeff3e925e26c7ec284791874d83ca00a34365321e53458a61c6d4e0dd1e3a7e816d3ba5b038820ca851aae32ea491173f4a090486d1a1440183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027efcc0a5b110a3d47e6b3e9b74e485a18770d757efb293ac544941a244e1764e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jqLIrMER841bSl7WAlLug/MS0Pg1kmXVuSZtVHNQUv4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8ea2c8\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 0d1c 30fe 70f6 7c7c | 126 2a50 (0) 298a (0) 2e65 (0) 2fd2 (0)\n001 3 cdb1 c534 e471 | 55 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n002 6 a8b5 a8f4 a616 bcf8 | 37 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n003 6 93c0 9257 9464 9ec8 | 17 97da (0) 95c0 (0) 955d (0) 9518 (0)\n004 7 84a9 8402 87a3 86d6 | 12 84a9 (0) 8402 (0) 86d6 (0) 87a3 (0)\n005 2 8862 8b43 | 3 8854 (0) 8862 (0) 8b43 (0)\n006 2 8d19 8cc3 | 2 8cc3 (0) 8d19 (0)\n007 1 8f9a | 1 8f9a (0)\n============ DEPTH: 8 ==========================================\n008 2 8e28 8e7b | 2 8e28 (0) 8e7b (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","private_key":"c77c425da926ed3f45911d96e5d2ed01784a1e16987bbf8049d8c2b9a37eab26","name":"node_8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","services":["bzz","pss"],"enable_msg_events":true,"port":45075},"up":true}},{"node":{"info":{"id":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","name":"node_8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","enode":"enode://a6221058c98285416177d220a2f3ad4f8fad14bb72b226b6eca678a156da263ca8026a756a1e54ac812e6cf9db5279df4616c839b8d1d1f19a158783fcca1ad4@127.0.0.1:0","enr":"0xf88fb840c04a30337e262366540d7c35ecd07ff64b9083fd1f2b5195c205fda603295a375950c2ab3c8ab2fb2494ed5ca1346133fa181d56577a6918d49941fdaaed2cec0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a6221058c98285416177d220a2f3ad4f8fad14bb72b226b6eca678a156da263c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"g1inT8jY45zMQLTTohK3pppqj2r8Jc/yyce0S7r57II=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8358a7\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0d1c 1dc0 7c7c | 126 140d (0) 1484 (0) 1686 (0) 1784 (0)\n001 4 ef99 c534 cdb1 c8ea | 55 fa24 (0) f9de (0) f8ff (0) fc51 (0)\n002 4 b659 bcf8 bdc5 a8b5 | 37 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n003 5 9ec8 9c21 9464 9257 | 17 97da (0) 95c0 (0) 955d (0) 9518 (0)\n004 5 8862 8b43 8d19 8e7b | 9 8854 (0) 8862 (0) 8b43 (0) 8cc3 (0)\n005 4 84a9 8402 87a3 86d6 | 4 84a9 (0) 8402 (0) 86d6 (0) 87a3 (0)\n006 5 80d7 8006 8074 8073 | 5 81a5 (0) 80d7 (0) 8006 (0) 8073 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 837f | 1 837f (0)\n011 1 834f | 1 834f (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","private_key":"39642ed937f1adee6d9034810e644cf755f21dc9f06efda6535d19c78001af83","name":"node_8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","services":["bzz","pss"],"enable_msg_events":true,"port":32777},"up":true}},{"node":{"info":{"id":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","name":"node_a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","enode":"enode://6a681a2c60f7c7e2a832251ea4b54c1e7a75f5299e7a9bd343b3a8e6f147b41eb91a7fe95bd24adb2928b69018edf9eb146c92314b9d42964758449f767fb17a@127.0.0.1:0","enr":"0xf88fb84077f8314567599da083128579bdb43586da96cdd21d570ae4272c4a643ae5ef8d7bcc874624ab16e56b638270bf85aaabe97221c96f69bb9a7c487d9ad3c407880183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026a681a2c60f7c7e2a832251ea4b54c1e7a75f5299e7a9bd343b3a8e6f147b41e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qLWAE/+RGHHRqmwrvqbC5u+bALh7gKQdwEckrQSI4v8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a8b580\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 138d 1dc0 0d1c 7c7c | 126 1686 (0) 1784 (0) 140d (0) 1484 (0)\n001 5 f756 e2d3 e09f cdb1 | 55 f9de (0) f8ff (0) fa24 (0) fc51 (0)\n002 7 9c21 93c0 9464 8ea2 | 38 97da (0) 95c0 (0) 955d (0) 9518 (0)\n003 5 b659 ba91 bea1 bcf8 | 14 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n004 4 a616 a742 a7a8 a1c8 | 13 a2e6 (0) a2a1 (0) a327 (0) a330 (0)\n005 3 acee af02 aeb4 | 3 af02 (0) aeb4 (0) acee (0)\n006 3 ab3f ab71 aaf0 | 3 ab3f (0) ab71 (0) aaf0 (0)\n007 1 a970 | 1 a970 (0)\n============ DEPTH: 8 ==========================================\n008 0 | 0\n009 2 a8ff a8f4 | 2 a8ff (0) a8f4 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","private_key":"8e39367b51358d04e71f5883ad1dbd70eee27b4ef493509df2377fbce04ad168","name":"node_a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","services":["bzz","pss"],"enable_msg_events":true,"port":33233},"up":true}},{"node":{"info":{"id":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","name":"node_7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","enode":"enode://57465744f0e2ac055f9d29be31e53d6939f20a6038e2c66834a7967ecc44341d90aa115fb5255fd137271f992d89629cbf514bbbd904c9b935e2068f22852fab@127.0.0.1:0","enr":"0xf88fb840b9d47b0a5d48db8adef386ac49f3dc8c9eb545bdd756d6d1ab18b92b1299e94a295d530c29791eaa0942296992e5b5e2de9b435fd1b0c1b9267fa049259b2a120183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10357465744f0e2ac055f9d29be31e53d6939f20a6038e2c66834a7967ecc44341d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fHylp1IqBPYvK+vWGXoD148lXQF1w9/OtdkraENlsqo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7c7ca5\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c8ea 8ea2 8358 a8b5 | 130 f9de (0) f8ff (0) fa24 (0) fc51 (0)\n001 5 0d1c 19ea 1dc0 2fd2 | 65 1686 (0) 1784 (0) 140d (0) 1484 (0)\n002 4 5bd8 5987 50c1 5538 | 35 402c (0) 4005 (0) 435d (0) 43c9 (0)\n003 5 6d3c 6c01 648a 6795 | 13 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n004 4 7660 741a 7049 70f6 | 4 741a (0) 7660 (0) 7049 (0) 70f6 (0)\n005 3 79e5 7850 7895 | 4 7933 (0) 79e5 (0) 7850 (0) 7895 (0)\n006 1 7e47 | 1 7e47 (0)\n007 1 7d16 | 1 7d16 (0)\n============ DEPTH: 8 ==========================================\n008 1 7ce7 | 1 7ce7 (0)\n009 0 | 0\n010 1 7c46 | 1 7c46 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","private_key":"06b02c6e2c9d37cd4b50dedfe3e86594cbfd243d764ed379df53eb3392911dda","name":"node_7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","services":["bzz","pss"],"enable_msg_events":true,"port":37295},"up":true}},{"node":{"info":{"id":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","name":"node_c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","enode":"enode://585e9760962e0f911be40a1a465b83c6ad84f45a4e2b2f9e06640352970e28cd99d8e407c455e5e265f9bda6cd4b542223ff8c8bdc4964ea89d72298640b1284@127.0.0.1:0","enr":"0xf88fb840654b3875a2b357e41fb9bacc6e4de76b7aa6d3718a157dcb098ca478b61e9a350c90fb9a21b15df60c21decd1c97d75a9c0bde7641cde5b3736d54ea855f1cae0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102585e9760962e0f911be40a1a465b83c6ad84f45a4e2b2f9e06640352970e28cd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"yOpBd0IHhZJuCSlwH150x0SSA4bypDuJ2DyCgRBsuV4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c8ea41\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 30fe 08f8 0d1c 1dc0 | 126 1686 (0) 1784 (0) 140d (0) 1484 (0)\n001 6 ba91 a8b5 8b43 8358 | 75 b5ea (0) b4a1 (0) b78f (0) b6df (0)\n002 5 ff75 f1ed f756 ef99 | 28 f9de (0) f8ff (0) fa24 (0) fc51 (0)\n003 3 da36 d700 d3e9 | 11 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n004 5 c534 c42e c190 c2d0 | 8 c190 (0) c2d0 (0) c272 (0) c74d (0)\n005 4 cf52 cd6c cdb1 cc33 | 4 cf52 (0) cc33 (0) cd6c (0) cdb1 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 2 c961 c9c3 | 2 c961 (0) c9c3 (0)\n008 0 | 0\n009 0 | 0\n010 1 c8c8 | 1 c8c8 (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","private_key":"00c912a815d056b04de18334e53d8facff8ea04075ae869401191b0c74503fe2","name":"node_c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","services":["bzz","pss"],"enable_msg_events":true,"port":44523},"up":true}},{"node":{"info":{"id":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","name":"node_87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","enode":"enode://7f46de8585a9766537267742cba2418426c637ca4c1973bac22d320ab3a432ed5e835edc53e2ab828ffd47c66137875d3b05da6577d637ab13bce3866fba58ef@127.0.0.1:0","enr":"0xf88fb840e4762001029c0140b891c3b53ef932dd40e210cccfd3fb490876ce81ae5275d766e2714b415a03bfc54f11d0392862d70f600927e39c35361191a937267f86c70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037f46de8585a9766537267742cba2418426c637ca4c1973bac22d320ab3a432ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"h6M3YiRVrmXa86slVc7omF6aoUusJFVF2YUpYGDkqN4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 87a337\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 5c7c 30fe | 126 43c9 (0) 43d4 (0) 435d (0) 402c (0)\n001 3 ef99 c534 c8ea | 55 fa24 (0) f8ff (0) f9de (0) fc51 (0)\n002 4 a8b5 bcf8 bdc5 ba91 | 37 a327 (0) a330 (0) a2e6 (0) a2a1 (0)\n003 6 9464 9257 93c0 9c21 | 17 9b8e (0) 9948 (0) 9959 (0) 9ca1 (0)\n004 3 8b43 8d19 8ea2 | 9 8854 (0) 8862 (0) 8b43 (0) 8cc3 (0)\n005 7 837f 8358 81a5 80d7 | 8 81a5 (0) 80d7 (0) 8006 (0) 8073 (0)\n============ DEPTH: 6 ==========================================\n006 2 84a9 8402 | 2 84a9 (0) 8402 (0)\n007 1 86d6 | 1 86d6 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","private_key":"0e812f155b3fec855e829701b7616d3bdc18fe020e679796ff10b79f74fce66a","name":"node_87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","services":["bzz","pss"],"enable_msg_events":true,"port":39229},"up":true}},{"node":{"info":{"id":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","name":"node_30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","enode":"enode://2d755da5dfdc21d6f3961f2beaab5613c412abd44276d5d050ef451b9bafb084a6afd797665c74c3ae6c0a33a52abf6c04504fd80a7fdd34ad91ffc3c671faae@127.0.0.1:0","enr":"0xf88fb8407a7294535524363392f62b42a82b13c5cfdfbc7e9e3710c54300cd606d41411000d4e002440679ca9f24fa5c4d8893f09f513ccde4545fa8b80580d1f46bf9360183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022d755da5dfdc21d6f3961f2beaab5613c412abd44276d5d050ef451b9bafb084","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MP7KYx8GBByxTOrThN+qX/+m3DSwzuVCMO++FeVqWIQ=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 30feca\npopulation: 36 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c8ea e471 ba91 8ea2 | 130 f9de (0) f8ff (0) fa24 (0) fc51 (0)\n001 8 48d7 5538 5bd8 5987 | 61 435d (0) 43c9 (0) 43d4 (0) 402c (0)\n002 8 046c 012b 025d 035f | 37 07f5 (0) 0561 (0) 0594 (0) 046c (0)\n003 3 2c85 244c 26ab | 11 2a50 (0) 298a (0) 2fd2 (0) 2e65 (0)\n004 4 3c5b 3938 3b02 3a62 | 8 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n005 3 36b9 3728 3411 | 3 36b9 (0) 3728 (0) 3411 (0)\n006 1 32ff | 1 32ff (0)\n============ DEPTH: 7 ==========================================\n007 3 3188 31e6 31e1 | 3 3188 (0) 31e6 (0) 31e1 (0)\n008 1 3051 | 1 3051 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","private_key":"0089202cbcad4ef35d5c4c18ac7f67f68b5c9f00a9ab8d1b7bfd57334bf95d95","name":"node_30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","services":["bzz","pss"],"enable_msg_events":true,"port":35121},"up":true}},{"node":{"info":{"id":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","name":"node_ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","enode":"enode://7a6e6ee730715ba07c013afa4adfa96b44af80ca9127d218d82b85f8f9a0f0d33a8650d3a482ab78523d91c1cf526d88087a2b352298ee29c2b060520436b2a5@127.0.0.1:0","enr":"0xf88fb84097647754d54945eb66061b25a00288c9cc9759b1b244c15785469f43e3cb3a1b0446356d42248da85d3b151c9d6ce61a9a8627dd5b6478e8e196150f8bf2b7ad0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037a6e6ee730715ba07c013afa4adfa96b44af80ca9127d218d82b85f8f9a0f0d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"upERddOqP8wmbipaoy+3BiCLiptQIaXzfAuF9UfrN10=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ba9111\npopulation: 38 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 48f1 4a95 4b79 44ad | 126 435d (0) 43c9 (0) 43d4 (0) 402c (0)\n001 9 f215 e09f e471 d3e9 | 55 f8ff (0) f9de (0) fa24 (0) fc51 (0)\n002 5 9464 9ec8 8ea2 87a3 | 38 9b8e (0) 9948 (0) 9959 (0) 9ca1 (0)\n003 8 acee a970 a8b5 aaf0 | 23 a330 (0) a327 (0) a2a1 (0) a2e6 (0)\n004 3 b3f9 b5ea b659 | 6 b3f9 (0) b5ea (0) b4a1 (0) b78f (0)\n005 4 bfc7 bea1 bcf8 bdc5 | 5 bfc7 (0) be68 (0) bea1 (0) bcf8 (0)\n============ DEPTH: 6 ==========================================\n006 1 b8e1 | 1 b8e1 (0)\n007 1 bbaf | 1 bbaf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","private_key":"455cfde9eb8d35e128fc05e1b1e697250397c4baa4d0609935427370e67e9567","name":"node_ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","services":["bzz","pss"],"enable_msg_events":true,"port":43089},"up":true}},{"node":{"info":{"id":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","name":"node_86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","enode":"enode://e11ad71a76ca345cb05b4689991a27df0d90136ab34404f7ac6659115281c0caebfb6c47af02b784a8dbd15632906ea81e935e5d68a0d818f86356d4098e2683@127.0.0.1:0","enr":"0xf88fb840ae4e55821d468925a34d498ef69d95cd2812772fc3333ffa4818f050f74bbe6c51618438af3372928bc751bc170fa31238feea5b167507551f583e2a8a15253d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e11ad71a76ca345cb05b4689991a27df0d90136ab34404f7ac6659115281c0ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"htb2jsC44bNAaUN4f5GL7nTdGCeZi9sT7Oj2kNotKWo=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 86d6f6\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 1dc0 6790 | 126 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n001 4 ef99 d3e9 cc33 c8ea | 55 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n002 5 a616 a1c8 a0c8 bcf8 | 37 a2e6 (0) a2a1 (0) a327 (0) a330 (0)\n003 4 93c0 9c8e 9c21 9ec8 | 17 9959 (0) 9948 (0) 9b8e (0) 9ca1 (0)\n004 4 8862 8b43 8d19 8ea2 | 9 8d19 (0) 8cc3 (0) 8f9a (0) 8e28 (0)\n005 8 81a5 80d7 8006 8073 | 8 81a5 (0) 80d7 (0) 8006 (0) 8073 (0)\n============ DEPTH: 6 ==========================================\n006 2 84a9 8402 | 2 84a9 (0) 8402 (0)\n007 1 87a3 | 1 87a3 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","private_key":"462383c857370af2c4903fae5e5b3380ba12f14ac972e2a57fb03d60d53be99c","name":"node_86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","services":["bzz","pss"],"enable_msg_events":true,"port":34901},"up":true}},{"node":{"info":{"id":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","name":"node_67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","enode":"enode://9062625e5fd25e5b95d2fb131bd9836c17a278d08fd26d556c2ff3e82375b7739963d7dc46cf90a82a3ec3a51610de42e11daa5439de02fce2239d11c5100ca8@127.0.0.1:0","enr":"0xf88fb840a6e4f385ee971a0e10914ccd098a592003d39eb308e35914192339eeb67e99f505f75a47fe66fcd6baf71a8a5d2bb584480b07f6546f35ec5a1d7ef8a7d99f410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029062625e5fd25e5b95d2fb131bd9836c17a278d08fd26d556c2ff3e82375b773","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Z5Cb3K7yMw7xIOUkx24eOCtHTzMy2G9lKCAo4FHzTHU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 67909b\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c8ea cc33 8b43 86d6 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 3 30fe 035f 1dc0 | 65 298a (0) 2a50 (0) 2fd2 (0) 2e65 (0)\n002 10 4005 44ad 4a95 48d7 | 35 43c9 (0) 43d4 (0) 435d (0) 402c (0)\n003 7 70f6 7049 7660 741a | 13 7933 (0) 79e5 (0) 7850 (0) 7895 (0)\n004 2 6b4e 6d5e | 7 68cb (0) 6b4e (0) 6e7f (0) 6c01 (0)\n005 1 60c5 | 1 60c5 (0)\n006 1 648a | 1 648a (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 6758 | 1 6758 (0)\n009 1 67f3 | 1 67f3 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 6795 | 1 6795 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","private_key":"e9d719353a6fb5bcae29ae98425718128b81ecc12560e8010bd8f63f2eedd79c","name":"node_67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","services":["bzz","pss"],"enable_msg_events":true,"port":42515},"up":true}},{"node":{"info":{"id":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","name":"node_8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","enode":"enode://6ab1e0f44fc24a1a9f01b103ed29a36d9344168d3760528da384ed0217fea7f37c77f54f1f91f510c0639c5aca4ad1eecba807e7643ac2426f92ac23617de8f0@127.0.0.1:0","enr":"0xf88fb840c6bf13d71510c296358d2e7025b910b959dd7cda4c3ab34d014fa342222ce5842055d0dcd799e79e004c9236268d6a1ed3c28eb4668ffe87b55b7c2f0c5054d60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026ab1e0f44fc24a1a9f01b103ed29a36d9344168d3760528da384ed0217fea7f3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"i0MY+GrUeXYyGvl7+/lc0KOwqiJEeusGEe0am/HmpL8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8b4318\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 1dc0 7049 6790 | 126 298a (0) 2a50 (0) 2e65 (0) 2fd2 (0)\n001 4 d3e9 c2d0 c8ea cc33 | 55 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n002 2 a8b5 bdc5 | 37 a2a1 (0) a2e6 (0) a327 (0) a330 (0)\n003 7 9c21 9c8e 9ec8 9518 | 17 9959 (0) 9948 (0) 9b8e (0) 9ca1 (0)\n004 8 8358 81a5 80d7 8073 | 12 81a5 (0) 80d7 (0) 8006 (0) 8073 (0)\n005 6 8d19 8cc3 8f9a 8e28 | 6 8d19 (0) 8cc3 (0) 8f9a (0) 8e28 (0)\n============ DEPTH: 6 ==========================================\n006 2 8854 8862 | 2 8854 (0) 8862 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","private_key":"5dedb1f9d69c2c6fe7a3aec668fac4e9c9615812829c7387000d87cbcd60aa41","name":"node_8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","services":["bzz","pss"],"enable_msg_events":true,"port":36035},"up":true}},{"node":{"info":{"id":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","name":"node_7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","enode":"enode://e430705ea5c1c11d55e6dc7d7738fc78a6b5e0b4b1833e6bd702d1227e5b8171505eb28c01546a2b0c9cffbc076b31b7bd1ee7f829b422bdae9b868a3d60055d@127.0.0.1:0","enr":"0xf88fb840bb450b66718c989ef173b71454ce6fcd33c94847190c06755cede1b16d7e05c551a88ba5700ef5828f74ded46693aaaf580f31c2249eff900c07824c8531d5a10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e430705ea5c1c11d55e6dc7d7738fc78a6b5e0b4b1833e6bd702d1227e5b8171","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cEnpKjljEfvy9KVbtb0v4/e7PBpj9Bu4jrgA7dRaxuU=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7049e9\npopulation: 23 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 cc33 bdc5 8b43 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 2 30fe 1dc0 | 65 2a50 (0) 298a (0) 2e65 (0) 2fd2 (0)\n002 4 48b8 5bd8 5c37 5c7c | 35 435d (0) 43c9 (0) 43d4 (0) 402c (0)\n003 4 6c01 6790 6795 648a | 13 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n004 7 7933 79e5 7850 7895 | 9 7933 (0) 79e5 (0) 7850 (0) 7895 (0)\n============ DEPTH: 5 ==========================================\n005 2 741a 7660 | 2 7660 (0) 741a (0)\n006 0 | 0\n007 0 | 0\n008 1 70f6 | 1 70f6 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","private_key":"55f5ca8c609ad483be093fad4614abf484adc370763bf034321dc9b5d7bd8896","name":"node_7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","services":["bzz","pss"],"enable_msg_events":true,"port":40911},"up":true}},{"node":{"info":{"id":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","name":"node_1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","enode":"enode://3d69646df064c701b33bd040a7d35477e31bf7a56abb00bc2aead70938ab35f8399aaa1909e3c2bf41afc68a07292224110c8bc18d1eb5eb50df6b572361cd07@127.0.0.1:0","enr":"0xf88fb8408754060a82ff7e9fb41134faaa3a2ed4e6a5c27a819fc9fdd3aaaa0a1e74a1ba5f09b85c3433b0c3a49c7bfd7fdcaaf544be0a8e25ea79f8eeff4401c3fee5310183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033d69646df064c701b33bd040a7d35477e31bf7a56abb00bc2aead70938ab35f8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"HcDvHOaNxoEpgXe96AivUU76UqWtOMnNK9YZaM3xnPs=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1dc0ef\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 9 d3e9 c2d0 c8ea cc33 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 3 6790 7c7c 7049 | 61 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n002 6 26ab 3a62 3938 3c5b | 28 2ddf (0) 2c80 (0) 2c85 (0) 2fd2 (0)\n003 5 035f 025d 012b 08f8 | 21 096a (0) 0942 (0) 09b3 (0) 08bd (0)\n004 5 1784 1484 140d 1070 | 7 1686 (0) 1784 (0) 140d (0) 1484 (0)\n005 5 19ea 18e0 1add 1bd5 | 6 1add (0) 1bd5 (0) 1b1d (0) 18e0 (0)\n============ DEPTH: 6 ==========================================\n006 1 1fd0 | 1 1fd0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 1 1dec | 1 1dec (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","private_key":"067a43a21c4c9595ff81c7c87cc15ed7b5c5e62d85308e2e0b77c52c27a5d30f","name":"node_1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","services":["bzz","pss"],"enable_msg_events":true,"port":42187},"up":true}},{"node":{"info":{"id":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","name":"node_bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","enode":"enode://fa6deb61cc0b3f0d346f0a5f28f03b1deeab9de673b4843fffd14b87704b7d97074be58116c187408d0bca73a025cd911274ff51c3837206884713fcb57b639a@127.0.0.1:0","enr":"0xf88fb8409b31a5f75a714e32770fb9bfb24b2603601041ca8d8b98f953a48f932ec9750404cbec7ff1a44c7e7a9f89af7fbb85bfaa9e92361eecb63512fa33798f3391b20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fa6deb61cc0b3f0d346f0a5f28f03b1deeab9de673b4843fffd14b87704b7d97","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vcXeASdhV6Dz/EOpzDtBssrMhHkRi3WuxLqbK3+obV4=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bdc5de\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5bd8 7049 1dc0 | 126 435d (0) 43d4 (0) 43c9 (0) 402c (0)\n001 3 d3e9 c2d0 cc33 | 55 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n002 8 9464 9257 93c0 8358 | 38 9b8e (0) 9948 (0) 9959 (0) 9c8e (0)\n003 7 a0c8 a616 acee aaf0 | 23 acee (0) af02 (0) aeb4 (0) aaf0 (0)\n004 3 b3f9 b659 b4a1 | 6 b5ea (0) b4a1 (0) b78f (0) b6df (0)\n005 3 b8e1 bbaf ba91 | 3 b8e1 (0) bbaf (0) ba91 (0)\n============ DEPTH: 6 ==========================================\n006 3 bfc7 be68 bea1 | 3 bfc7 (0) be68 (0) bea1 (0)\n007 1 bcf8 | 1 bcf8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","private_key":"129a7a69ba65fd74ba294f66ea025ca335d94c7a05e91aaf3c24cf3f9f7e0972","name":"node_bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","services":["bzz","pss"],"enable_msg_events":true,"port":42761},"up":true}},{"node":{"info":{"id":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","name":"node_cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","enode":"enode://3d2a0536cb0fb672ffcc469c8a71d4ff9b33a2b48e749c64d32c8fdf6c704e695b3d6699f04baf4e6299b694f36c309308f9fca69859148ae8c7ef71c20df4f1@127.0.0.1:0","enr":"0xf88fb8404f40bae7e0adcf8abafd249d8dad969a599ccb2f825ac5a56a8ef652452bfc1146f1510ab3db60fed9e49b1332c606423f169adf9c7841aead732652178119c00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033d2a0536cb0fb672ffcc469c8a71d4ff9b33a2b48e749c64d32c8fdf6c704e69","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zDOX6eEfdSc9P4HZH5gPRQR1X4CyehgyEt5WzFCF5Y0=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cc3397\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 08f8 1dc0 6790 7049 | 126 3b02 (0) 3a62 (0) 3980 (0) 397a (0)\n001 6 93c0 8074 86d6 8b43 | 75 9948 (0) 9959 (0) 9b8e (0) 9ca1 (0)\n002 5 eb68 e471 e681 f215 | 28 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n003 3 da36 d700 d3e9 | 11 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n004 4 c603 c42e c272 c2d0 | 8 c42e (0) c534 (0) c74d (0) c6a8 (0)\n005 3 c961 c9c3 c8ea | 4 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n006 1 cf52 | 1 cf52 (0)\n============ DEPTH: 7 ==========================================\n007 2 cd6c cdb1 | 2 cd6c (0) cdb1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","private_key":"617246021b48922c971765385e8d46d55d22849c49a2b2a58c9e108c53f08b6a","name":"node_cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","services":["bzz","pss"],"enable_msg_events":true,"port":44073},"up":true}},{"node":{"info":{"id":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","name":"node_5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","enode":"enode://81ccd85acd650e9264c02ea67a5c7743051afe4099a4013603c99b81cbc8ce3e18de1601c3e4bbe795262637c94798a502b7b87759c71bc9635c5f5763741ce3@127.0.0.1:0","enr":"0xf88fb84095b8956864f5e16f73f6caacda54957b5e3ab227e77c7b6a4f90d81ee18393e41d774af6765a97f6c71d2455d432959d81eb8a404400829bfacddf9d497112b20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10381ccd85acd650e9264c02ea67a5c7743051afe4099a4013603c99b81cbc8ce3e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"W9j6+TvK0HAG6UJrRfXMWZ8ZY6t5HerE/2PWc5zWKhc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5bd8fa\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 bdc5 cc33 c2d0 | 130 8d19 (0) 8cc3 (0) 8f9a (0) 8e28 (0)\n001 4 26ab 3728 30fe 138d | 65 3f31 (0) 3cab (0) 3c5b (0) 3980 (0)\n002 5 7049 7660 7c7c 7ce7 | 26 7933 (0) 79e5 (0) 7850 (0) 7895 (0)\n003 6 4005 447a 44ad 4a95 | 19 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n004 4 50c1 5144 5538 5663 | 6 52a8 (0) 50c1 (0) 5144 (0) 56ca (0)\n005 2 5c7c 5c37 | 4 5ff0 (0) 5d82 (0) 5c37 (0) 5c7c (0)\n006 2 5814 5987 | 2 5814 (0) 5987 (0)\n============ DEPTH: 7 ==========================================\n007 3 5a8b 5ac0 5a26 | 3 5a8b (0) 5ac0 (0) 5a26 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","private_key":"26ef88a18d2d40a51bfabd66c6d93698f7fb8ae73c0efe4be8504f76081c7f85","name":"node_5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","services":["bzz","pss"],"enable_msg_events":true,"port":45545},"up":true}},{"node":{"info":{"id":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","name":"node_c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","enode":"enode://0d8d82144d964d2235866b8f1ed08a27c362598490e3745a6bbfa3ba90241e098abdaa05715666f02a4ac86fe384307431a69f83d66b3de2dfbe7b1d8f8bf374@127.0.0.1:0","enr":"0xf88fb84080a73499a87c86c9c8f7a3432690866a7941a3001f228e0dd3920b9848aae5f641db07c25860ddcc3124563fa497fa1137ee5f9ea9fa548e8c7b0756275e1fc40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020d8d82144d964d2235866b8f1ed08a27c362598490e3745a6bbfa3ba90241e09","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wtAMfZYBdMCTQSn9zsY1Jb+nKPePtwt8UgNrdy1il60=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c2d00c\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 08f8 1dc0 138d 48b8 | 126 3f31 (0) 3c5b (0) 3cab (0) 3980 (0)\n001 6 a616 b3f9 ba91 bdc5 | 75 acee (0) af02 (0) aeb4 (0) ab3f (0)\n002 4 ff75 eb68 e471 e681 | 28 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n003 3 da36 d700 d3e9 | 11 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n004 4 c8ea cf52 cdb1 cc33 | 8 c9c3 (0) c961 (0) c8c8 (0) c8ea (0)\n005 5 c534 c42e c74d c6a8 | 5 c534 (0) c42e (0) c74d (0) c6a8 (0)\n============ DEPTH: 6 ==========================================\n006 1 c190 | 1 c190 (0)\n007 0 | 0\n008 1 c272 | 1 c272 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","private_key":"f34329763f790689554fda7332d50df283663d26d6b7934322a4997f28ad4a70","name":"node_c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","services":["bzz","pss"],"enable_msg_events":true,"port":41949},"up":true}},{"node":{"info":{"id":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","name":"node_138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","enode":"enode://df33b1f0c1352c293d74d4b9b031141777ea5ea361a67862b312e14930160bea0489c08aac497214355e3c4702f1b31c1e74034f495d9cd59a19d893ce1d2bb4@127.0.0.1:0","enr":"0xf88fb840284f8900282f63e433dce06ae23eeb10839c72958e31168d974b1e3fad8efeab583f8ebc19fe0305c26f34560b4f16f2f246227220300c31ed1d2df4b58520dd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102df33b1f0c1352c293d74d4b9b031141777ea5ea361a67862b312e14930160bea","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"E428FmLEzpsrMO9QNZFMxwRlZm/hjzEzGOZi0T8JliE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 138dbc\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a8b5 d3e9 c2d0 | 130 acee (0) af02 (0) aeb4 (0) aaf0 (0)\n001 4 7ce7 5c37 5c7c 5bd8 | 61 7660 (0) 741a (0) 70f6 (0) 7049 (0)\n002 7 3938 3b02 30fe 31e6 | 28 3f31 (0) 3cab (0) 3c5b (0) 3980 (0)\n003 5 035f 0d1c 0e3b 08bd | 21 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n004 4 18e0 1dec 1dc0 1fd0 | 9 1bd5 (0) 1b1d (0) 1add (0) 194e (0)\n005 4 1686 1784 140d 1484 | 4 1686 (0) 1784 (0) 140d (0) 1484 (0)\n============ DEPTH: 6 ==========================================\n006 2 1049 1070 | 2 1049 (0) 1070 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","private_key":"fea6806c3b8e5f07d86ecd3870391f3145d05518f0f2da0b48ba753f8454ad24","name":"node_138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","services":["bzz","pss"],"enable_msg_events":true,"port":43695},"up":true}},{"node":{"info":{"id":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","name":"node_d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","enode":"enode://5c269acede83f81f0a59a02e10764ac1cef987f398a7ae38228c12862ac5a6aadfbc89c7e0a02ba60019ae7a855be61a68e2964a0d36632a798a8410cf28b6bd@127.0.0.1:0","enr":"0xf88fb84076ebf3a52c4ed0e3af7e5f134b50f6537548b5a9781344afa5a5a84989ae3fbb0912b048b5c21e7c318132d7e2fcb35a8cfc00997a6e63dd68dcd4919f7e321a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035c269acede83f81f0a59a02e10764ac1cef987f398a7ae38228c12862ac5a6aa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0+kTz0p9q/tWmRMbZeUzpArbRuo34O1M6UM/mQFZhu8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d3e913\npopulation: 32 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5c7c 1dc0 138d | 126 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n001 8 a616 ba91 bdc5 86d6 | 75 b5ea (0) b4a1 (0) b78f (0) b6df (0)\n002 6 f215 ff75 e471 e681 | 28 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n003 9 c603 c42e c534 c272 | 16 c961 (0) c9c3 (0) c8c8 (0) c8ea (0)\n004 2 d959 da36 | 6 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n005 2 d700 d408 | 2 d700 (0) d408 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 d209 | 1 d209 (0)\n008 1 d302 | 1 d302 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","private_key":"e8cb3c33050ebe9bd3e750e4b8f55fa35e538fd293395b06710db344fa8f480c","name":"node_d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","services":["bzz","pss"],"enable_msg_events":true,"port":45149},"up":true}},{"node":{"info":{"id":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","name":"node_5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","enode":"enode://7a0333ebcda5040e71cb74335af5f9434b53912b7918af8fddf3acbb2341a4091d7cbd9c4839061dd5390b11f0e988c24ac645003bca8092070c6d3f171ae68e@127.0.0.1:0","enr":"0xf88fb840e36636443db94a3278ad7e1c41abe6d90576990dca1c3b85c64f49472b0b4cfd029f18575656b1febfe27c53a79d62d703019939082d6a61fe480be68f9c63660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027a0333ebcda5040e71cb74335af5f9434b53912b7918af8fddf3acbb2341a409","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XHwVeY6G/nlLsgFhTUY2bqltxRCR9bGfFJmV4NQN8KY=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5c7c15\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 87a3 d3e9 | 130 b78f (0) b6df (0) b659 (0) b5ea (0)\n001 2 138d 035f | 65 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n002 4 6790 7ce7 741a 7049 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 6 4005 4b79 4a95 48b8 | 19 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n004 4 52a8 5144 50c1 5538 | 6 52a8 (0) 5144 (0) 50c1 (0) 56ca (0)\n005 6 5814 5987 5ac0 5a8b | 6 5814 (0) 5987 (0) 5ac0 (0) 5a8b (0)\n006 1 5ff0 | 1 5ff0 (0)\n============ DEPTH: 7 ==========================================\n007 1 5d82 | 1 5d82 (0)\n008 0 | 0\n009 1 5c37 | 1 5c37 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","private_key":"bb0921c7331c6ee15280ac5573b08e824e5c7248b1e5539eefb80c55c8702459","name":"node_5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","services":["bzz","pss"],"enable_msg_events":true,"port":38107},"up":true}},{"node":{"info":{"id":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","name":"node_5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","enode":"enode://8f0560f5e755cbf619660e72ba73a02998bca53e860cbdcc69bee129bf16923258b851c65723649d670dbf0e1166f14cfdfe1cb8c8c73eb2906f20e78edcea8e@127.0.0.1:0","enr":"0xf88fb840d2ea5eb11567c49114dd285962beba545d8adecc62156b334bc08bd946887cad22435f4a2b2d944fd7a37cd1f8a7a27bbb6eed794505b3b5000a8f607a7502610183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1028f0560f5e755cbf619660e72ba73a02998bca53e860cbdcc69bee129bf169232","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XDcwNHcOQT5wCxzQOyA192ns2auOtU0y97JkW+GZH+U=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5c3730\npopulation: 33 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f1ed f215 f305 f756 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 6 3938 3b02 3a62 3c5b | 65 3f31 (0) 3cab (0) 3c5b (0) 3a62 (0)\n002 3 6790 7ce7 7049 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 8 447a 44ad 4005 4b79 | 19 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n004 4 5538 52a8 50c1 5144 | 6 52a8 (0) 50c1 (0) 5144 (0) 56ca (0)\n005 4 5814 5987 5a26 5bd8 | 6 5814 (0) 5987 (0) 5a8b (0) 5ac0 (0)\n006 1 5ff0 | 1 5ff0 (0)\n============ DEPTH: 7 ==========================================\n007 1 5d82 | 1 5d82 (0)\n008 0 | 0\n009 1 5c7c | 1 5c7c (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","private_key":"0c2c7d021de7510363cf5e2641eaa5f9378a5b212ffebbb2759c636e6eb1f581","name":"node_5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","services":["bzz","pss"],"enable_msg_events":true,"port":39663},"up":true}},{"node":{"info":{"id":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","name":"node_93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","enode":"enode://4fcf131746aae7e3b07348194ea8e617a5d50f3efacae7946f8ee5afc235f8ba437adfd9cd3411470f4cea27041ec717a816e46771aab4b057b191859ed04f79@127.0.0.1:0","enr":"0xf88fb8405f99513aca9b2504c8789a4395c454ad8201930dedfefb376fa80d8edb93790943b526ced56eb76753d377faf7819e9f2fa859c515903bb04604e0ba6d9a04bf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034fcf131746aae7e3b07348194ea8e617a5d50f3efacae7946f8ee5afc235f8ba","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"k8DhrfI/3xYjNZ64jFF7xSHVomMlVU34kMwEwfoXpd8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 93c0e1\npopulation: 34 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 035f 48b8 48d7 5c37 | 126 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n001 8 ff75 f756 e09f eb68 | 55 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n002 3 bdc5 a8b5 a616 | 37 b78f (0) b6df (0) b659 (0) b5ea (0)\n003 8 8cc3 8ea2 8b43 87a3 | 21 8d19 (0) 8cc3 (0) 8f9a (0) 8e28 (0)\n004 5 9c8e 9ca1 9c21 9f7d | 9 9959 (0) 9948 (0) 9b8e (0) 9c21 (0)\n005 4 95c0 9518 955d 9464 | 5 97da (0) 95c0 (0) 955d (0) 9518 (0)\n============ DEPTH: 6 ==========================================\n006 0 | 0\n007 1 9257 | 1 9257 (0)\n008 0 | 0\n009 0 | 0\n010 1 93ea | 1 93ea (0)\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","private_key":"e9b9e5f77b823f754cc953b6e8bb3f29875b25f3f07294dc648aad09741eae5d","name":"node_93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","services":["bzz","pss"],"enable_msg_events":true,"port":39455},"up":true}},{"node":{"info":{"id":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","name":"node_035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","enode":"enode://a2ea0d984eb8c2a044d8d57b6b34ac49f7e319cd0ce8c9ad882e352f681e73bf1212f8c9b4155d9413384324db4dc6e0430b23bd9ebe32dc3694d927c34e07ef@127.0.0.1:0","enr":"0xf88fb84021c14a87840a5a62b181c58ce71769ae7998b9182a812551fba5dd2798c30a6228770d3463f5bd7428e5f81dd35ce8f649571ec472eb1f870a82386058e3756a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a2ea0d984eb8c2a044d8d57b6b34ac49f7e319cd0ce8c9ad882e352f681e73bf","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"A18VSZzbDwebPjWK1UphImgUQqUpPDri/fbFJwBLNtI=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 035f15\npopulation: 25 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a616 8074 93c0 | 130 f6c0 (0) f645 (0) f756 (0) f1ed (0)\n001 4 6790 7ce7 5c7c 5c37 | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 2 30fe 26ab | 28 3f31 (0) 3cab (0) 3c5b (0) 3a62 (0)\n003 5 138d 1784 1484 1dc0 | 16 18e0 (0) 194e (0) 19ea (0) 1bd5 (0)\n004 3 08bd 0d1c 0e3b | 11 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n005 3 07f5 0594 046c | 4 07f5 (0) 0561 (0) 0594 (0) 046c (0)\n006 3 0191 012b 0111 | 3 0191 (0) 0111 (0) 012b (0)\n============ DEPTH: 7 ==========================================\n007 1 025d | 1 025d (0)\n008 0 | 0\n009 1 0314 | 1 0314 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","private_key":"595254b7c40bf18ec4d789cf500b58c5850ad2f21460f58230cd8e53b428c0bb","name":"node_035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","services":["bzz","pss"],"enable_msg_events":true,"port":41613},"up":true}},{"node":{"info":{"id":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","name":"node_807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","enode":"enode://4ae810f37f174c8ffe4c90d5590e2bdc3677a1f413738a94776bbe63f1f45b08043188e3f2366b245c0e285f02ac759329e37760bc3c797ba7d70479dd8f9490@127.0.0.1:0","enr":"0xf88fb84006c5b23f700d5d387dc4a8d96c97cb9b9415cce70e955133a5f006e2b37011047da680b267227e5646409503737c6d382fa97364e60c24095320efbca3056ac70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1024ae810f37f174c8ffe4c90d5590e2bdc3677a1f413738a94776bbe63f1f45b08","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gHQWzHDwLUgaGIAn95MrSOj3teglj36WI/P24phdj2o=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 807416\npopulation: 29 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 48d7 48b8 7ce7 035f | 126 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n001 3 eb68 cc33 d3e9 | 55 f305 (0) f2b4 (0) f215 (0) f1ed (0)\n002 2 bdc5 a616 | 37 b5ea (0) b4a1 (0) b78f (0) b6df (0)\n003 4 9ec8 9c8e 9257 93c0 | 17 9b8e (0) 9959 (0) 9948 (0) 9c21 (0)\n004 5 8cc3 8e7b 8ea2 8862 | 9 8d19 (0) 8cc3 (0) 8f9a (0) 8e28 (0)\n005 4 8402 84a9 86d6 87a3 | 4 87a3 (0) 86d6 (0) 84a9 (0) 8402 (0)\n006 3 837f 8358 834f | 3 837f (0) 834f (0) 8358 (0)\n007 1 81a5 | 1 81a5 (0)\n008 1 80d7 | 1 80d7 (0)\n============ DEPTH: 9 ==========================================\n009 1 8006 | 1 8006 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 8073 | 1 8073 (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","private_key":"421902540a521af21b446884bc2ff3f606e8e7814ffad298bdb1200502aa73f8","name":"node_807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","services":["bzz","pss"],"enable_msg_events":true,"port":37835},"up":true}},{"node":{"info":{"id":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","name":"node_a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","enode":"enode://51ff87ed33ddf13e429d933fa411ad53dfdaf4f83d2d156ee20fc759f1900fbe70b000ad9891f8a5e79fa93673839682c50273f4012eae003b40c8bef34e0542@127.0.0.1:0","enr":"0xf88fb8402fd3e3ba496c67f81c4704bbedcb048e9985d8e2fa0d26e8aadf582cc5bdab7428098d781ee942ecc983bd6c645ee494759d9fc3aacc50957db0ac276b93ea8c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10251ff87ed33ddf13e429d933fa411ad53dfdaf4f83d2d156ee20fc759f1900fbe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"phZaSwLVi+EWiSmCwO09Sdhv7A6fQ2pRa2GGgzHthT8=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a6165a\npopulation: 35 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 035f 1fd0 48b8 7ce7 | 126 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n001 5 ff75 e681 eb68 d3e9 | 55 f1ed (0) f305 (0) f2b4 (0) f215 (0)\n002 7 9c8e 9c21 9257 93c0 | 38 9b8e (0) 9959 (0) 9948 (0) 9ec8 (0)\n003 4 ba91 bdc5 bfc7 b3f9 | 14 b5ea (0) b4a1 (0) b78f (0) b6df (0)\n004 6 acee aeb4 aaf0 ab71 | 10 af02 (0) aeb4 (0) acee (0) ab3f (0)\n005 4 a2e6 a330 a1c8 a0c8 | 6 a2a1 (0) a2e6 (0) a327 (0) a330 (0)\n006 2 a5ac a505 | 3 a4ee (0) a5ac (0) a505 (0)\n============ DEPTH: 7 ==========================================\n007 2 a742 a7a8 | 2 a742 (0) a7a8 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 1 a606 | 1 a606 (0)\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","private_key":"f8b37704a0eba9987c7cbd4d718ee3eba88b7d76957c5043be17f16e8408c442","name":"node_a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","services":["bzz","pss"],"enable_msg_events":true,"port":45387},"up":true}},{"node":{"info":{"id":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","name":"node_7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","enode":"enode://ff883ea700704e0d06c059393d1c9c79298f0ff8bd3a806cf777c1b1643539f79b58a73e57a76b7e4631b6f6d224a263b3da5a4029565cd811d1cfba392b16d0@127.0.0.1:0","enr":"0xf88fb84094a7b14977397bf60c09a538d9206bfbb260df1994b06df0a747d58e5b0d17562803bb201f443f5b17d527f875f5c9185455b13bf3aa0789206b83bb9dfb71c00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ff883ea700704e0d06c059393d1c9c79298f0ff8bd3a806cf777c1b1643539f7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fOf+yDOi6MdyD8yX+CDyyirKhTiCEPiHw+/niwIHZuc=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7ce7fe\npopulation: 27 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8074 a616 | 130 f645 (0) f6c0 (0) f756 (0) f1ed (0)\n001 4 26ab 138d 1fd0 035f | 65 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n002 5 5538 5bd8 5c37 5c7c | 35 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n003 4 6c01 648a 6795 6790 | 13 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n004 4 70f6 7049 741a 7660 | 4 70f6 (0) 7049 (0) 7660 (0) 741a (0)\n005 4 79e5 7933 7850 7895 | 4 79e5 (0) 7933 (0) 7850 (0) 7895 (0)\n006 1 7e47 | 1 7e47 (0)\n007 1 7d16 | 1 7d16 (0)\n============ DEPTH: 8 ==========================================\n008 2 7c7c 7c46 | 2 7c46 (0) 7c7c (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","private_key":"60cd3f72a03ac58379a8c6ba81e19265da277316a0e01fa3876bc4c92ff49df6","name":"node_7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","services":["bzz","pss"],"enable_msg_events":true,"port":41789},"up":true}},{"node":{"info":{"id":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","name":"node_48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","enode":"enode://707261d403a5192568c194162fd61ffccb0cde756d06d2eb7c117b0160f7ad528446db8695b53393c6b20ec9fa5a555d5a341980d106865e9527566d32b9bb54@127.0.0.1:0","enr":"0xf88fb840bb9ab177f3ef6ff14610eb47e7168572b6f01f94f263f707915fc7ea3d9af0f5468fc44ff2210116cbcf0bfbae738979e4a3cfee6ddecd0e4abac50af13eb92c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102707261d403a5192568c194162fd61ffccb0cde756d06d2eb7c117b0160f7ad52","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SNeaxV+N9RKvjn2GiqQKybYUk/pPGwzgt2v22i6zDng=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48d79a\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a970 8074 93c0 | 130 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n001 3 30fe 26ab 1fd0 | 65 3980 (0) 397a (0) 3938 (0) 3a62 (0)\n002 4 6c01 6790 70f6 7ce7 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 6 5538 50c1 5987 5bd8 | 16 52a8 (0) 50c1 (0) 5144 (0) 56ca (0)\n004 4 402c 4005 46bf 44ad | 9 43d4 (0) 43c9 (0) 435d (0) 402c (0)\n005 2 4cec 4d91 | 3 4cec (0) 4d38 (0) 4d91 (0)\n006 2 4b79 4a95 | 2 4a95 (0) 4b79 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 482e | 1 482e (0)\n009 1 48b8 | 1 48b8 (0)\n010 1 48f1 | 1 48f1 (0)\n011 0 | 0\n012 1 48de | 1 48de (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","private_key":"332189f434da38340438c9e98fbf7e82e2cf6bc241b9b8689f12514555c995d7","name":"node_48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","services":["bzz","pss"],"enable_msg_events":true,"port":41935},"up":true}},{"node":{"info":{"id":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","name":"node_48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","enode":"enode://b19c0ae1cb81e68f5f80d6b0ca2e30109c2fd797df00404cd2c70f4b0b22a45a3316d279f68f3d211584bf955fad3326cbf8ccc1c5b4de9f4d34671d033b9aef@127.0.0.1:0","enr":"0xf88fb840cfce87968b891140a7b5398ce7c46c9e55da927db6b676d5150b5d1d5808a0160675b0905f993242da939cc4bd9d3a8ce303209b3442c1a398dbc1c58abe8ede0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b19c0ae1cb81e68f5f80d6b0ca2e30109c2fd797df00404cd2c70f4b0b22a45a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"SLhQl0V1ylejzF+aTPWq/YaIyzK5k/aZg+zmMlj/h24=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 48b850\npopulation: 31 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c2d0 e681 eb68 93c0 | 130 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n001 2 1fd0 1784 | 65 3f31 (0) 3cab (0) 3c5b (0) 3980 (0)\n002 5 6790 7660 741a 70f6 | 26 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n003 5 5538 50c1 5987 5c37 | 16 56ca (0) 5663 (0) 5538 (0) 52a8 (0)\n004 4 44ad 447a 46bf 4005 | 9 43c9 (0) 43d4 (0) 435d (0) 402c (0)\n005 3 4d91 4d38 4cec | 3 4d38 (0) 4d91 (0) 4cec (0)\n006 2 4a95 4b79 | 2 4a95 (0) 4b79 (0)\n============ DEPTH: 7 ==========================================\n007 0 | 0\n008 1 482e | 1 482e (0)\n009 3 48f1 48de 48d7 | 3 48f1 (0) 48de (0) 48d7 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","private_key":"dad03259c72bb0ab9ef830e43beb607d0933e8ceab8af57177cdedcccaa94838","name":"node_48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","services":["bzz","pss"],"enable_msg_events":true,"port":34161},"up":true}},{"node":{"info":{"id":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","name":"node_178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","enode":"enode://27897e5bff2021adf7dfc30beeae2d45dee4a331f85ccd2c611ff0df21a46f37373f49a11c7484953162778e229db0f12c587b97e449759086b0d9573e0c1a26@127.0.0.1:0","enr":"0xf88fb840429dfb2ce19f2d10de9df91da52260207acd7bcdb6f38055772e416e732174ee29384cd41078dbe55437ddf28a305fdb26b8fbe9c5f95c36514330d2055b27bf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10227897e5bff2021adf7dfc30beeae2d45dee4a331f85ccd2c611ff0df21a46f37","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"F4QB7I0BoKT1UdI+iAqOik64d3NWU2OEPVHPUmYLEhE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 178401\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e681 eb68 9257 a970 | 130 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n001 2 741a 48b8 | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 4 3c5b 36b9 3728 26ab | 28 3980 (0) 397a (0) 3938 (0) 3b02 (0)\n003 8 012b 035f 025d 0d1c | 21 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n004 4 1add 1dec 1dc0 1fd0 | 9 194e (0) 19ea (0) 18e0 (0) 1bd5 (0)\n005 3 1049 1070 138d | 3 1049 (0) 1070 (0) 138d (0)\n============ DEPTH: 6 ==========================================\n006 2 140d 1484 | 2 140d (0) 1484 (0)\n007 1 1686 | 1 1686 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","private_key":"354ee66c6897d2e2295d1c694b61628074a9697102dde529318baa2cbc0c698c","name":"node_178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","services":["bzz","pss"],"enable_msg_events":true,"port":34553},"up":true}},{"node":{"info":{"id":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","name":"node_1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","enode":"enode://a6d82f53e41ccd91583fbd89ab6dc5ca9ea1e1c8cf32336f3850d7abd7b67c12d26f485949244e17e996848469b10582ae14d19bba53fa22af1a289e2098fa2f@127.0.0.1:0","enr":"0xf88fb840011b8900371589a6bdc15199784c217ccdb148656c9cf6f7aeaaa2e96dc963a93ee8ad5c8509e66f007be32b90ca078bbc6d9e655df8ce0fa1a1ff258d3599cb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a6d82f53e41ccd91583fbd89ab6dc5ca9ea1e1c8cf32336f3850d7abd7b67c12","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"H9AZLfH78zdxylda+7TifGVBzOSjz/LfwfLAhef6t54=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1fd019\npopulation: 30 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e681 eb68 a616 a970 | 130 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n001 4 741a 7ce7 48b8 48d7 | 61 68cb (0) 6b4e (0) 6e7f (0) 6dd3 (0)\n002 4 36b9 3728 2c85 26ab | 28 3980 (0) 397a (0) 3938 (0) 3b02 (0)\n003 7 012b 025d 035f 0e3b | 21 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n004 4 138d 140d 1484 1784 | 7 1049 (0) 1070 (0) 138d (0) 140d (0)\n005 5 1add 1b1d 18e0 194e | 6 194e (0) 19ea (0) 18e0 (0) 1bd5 (0)\n============ DEPTH: 6 ==========================================\n006 2 1dec 1dc0 | 2 1dec (0) 1dc0 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","private_key":"56799ffc0f8172319a5acee54229b310b2ee9bfcff23054e163d25ebd6b74da6","name":"node_1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","services":["bzz","pss"],"enable_msg_events":true,"port":33911},"up":true}},{"node":{"info":{"id":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","name":"node_26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","enode":"enode://cec920dd405d44d0b1e52e29040cb654a1fe80dc3bf4484ebbc8480cb43d5f0cb060aa4e8ede415db0b1d08a220d5ab4add6b38d42d7aa794db434ff9dda1697@127.0.0.1:0","enr":"0xf88fb840b1a4300c5cadd86b2b219a1044bd3e44834ca1f0053ee7a3e3e45f15100dbe35044cd77a522de4160bbe65b9c8ac4ab26c6a20c7d8a3c037e4e6694d1eb38e6d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103cec920dd405d44d0b1e52e29040cb654a1fe80dc3bf4484ebbc8480cb43d5f0c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JqucgTgi27TxojDNjpnoqygLJCdH3rVf35PRYJBu8zE=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 26ab9c\npopulation: 42 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 c534 ff75 e681 eb68 | 130 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n001 5 7ce7 741a 5bd8 4a95 | 61 6b4e (0) 68cb (0) 6e7f (0) 6dd3 (0)\n002 11 08bd 08f8 0e3b 012b | 37 0cfc (0) 0d1c (0) 0e80 (0) 0e2b (0)\n003 11 3cab 3c5b 3938 3a62 | 17 3f31 (0) 3cab (0) 3c5b (0) 3b02 (0)\n004 6 2a50 298a 2fd2 2e65 | 7 2a50 (0) 298a (0) 2e65 (0) 2fd2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 24f8 244c | 2 24f8 (0) 244c (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 26ac | 1 26ac (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","private_key":"9d39b98cb0569ba31464e7827579e71e40dae5f366d3dfe5cbb197a9f825dbd4","name":"node_26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","services":["bzz","pss"],"enable_msg_events":true,"port":42047},"up":true}},{"node":{"info":{"id":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","name":"node_a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","enode":"enode://a74db2e9fc46ed2ad19743b773f0021b88e21cac389189ca1350aaecaf010fcd452f1991fb38c3d65a3745547b26e6dc0f655d75fd397cfef0fa286823e10b50@127.0.0.1:0","enr":"0xf88fb84002a5006b493d814889934b13a2e3714a6712f571e88ff5139d96e40cc1bcb6d719aba5a3169f334698e6273dfb9e8c3ed5234b18da0cfd2edf656396d0d92fcb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a74db2e9fc46ed2ad19743b773f0021b88e21cac389189ca1350aaecaf010fcd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qXADCFFsAs+a6ogJAApOBZbWtEdT4QvQko34Pi65uec=","hive":"\n=========================================================================\nThu Feb 28 17:51:00 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a97003\npopulation: 28 (255), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 48d7 1784 1fd0 26ab | 126 5663 (0) 56ca (0) 5538 (0) 52a8 (0)\n001 2 eb68 e681 | 55 ddb8 (0) d9cf (0) d959 (0) dbd4 (0)\n002 6 84a9 8402 9c21 9c8e | 38 8b43 (0) 8854 (0) 8862 (0) 8d19 (0)\n003 5 b3f9 ba91 bfc7 bcf8 | 14 b8e1 (0) bbaf (0) ba91 (0) be68 (0)\n004 2 a0c8 a616 | 13 a2e6 (0) a2a1 (0) a327 (0) a330 (0)\n005 3 acee af02 aeb4 | 3 acee (0) af02 (0) aeb4 (0)\n006 3 ab71 ab3f aaf0 | 3 aaf0 (0) ab3f (0) ab71 (0)\n============ DEPTH: 7 ==========================================\n007 3 a8f4 a8ff a8b5 | 3 a8f4 (0) a8ff (0) a8b5 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","private_key":"89ebf8f655338d3ee03b70fce8b3206157e3e198a2c1e6511944e7ba76672303","name":"node_a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","services":["bzz","pss"],"enable_msg_events":true,"port":40557},"up":true}}],"conns":[{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","other":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"3f31ecaffaa6311c82c9a575bbc38d6bcb16630ac87e19d1853a64aa96c9dcde","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"031450ec20f353435b429b5fa64f616d07c9d586afabc7a2772e05ad5c88bf50","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","up":true},{"one":"d95965e449dd4069876384cf4b34f986731e255a7948f0a862d229b1dddbc502","other":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"025de1d2ec529d3a7da302eef0f8c54996616d40c940c0956d470ffc2a007f33","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"012ba278d582691241875c4c14ead91fff3983e190df7d9b43ade384e84c11fb","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","up":true},{"one":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"d20931ce3da972fd23ea306e5c604a1fbd9417ba02654c5cdbe278fe259f75d5","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"67f383e5334e9b6701d1dbb20876d4ba9a7e578af0476caed4a7e1b701f2bedb","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","up":true},{"one":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"08bd1e049859b4a7c8078ca9741fe3daa668b9fe478da06d1a435cd5566b3e11","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"51440ab47fc5076c00cad16a542b846c26b3281ecea4dbca795ae9b80183ec90","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","up":true},{"one":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"bea10868d5da506c1801de845c148c2f09761893113ac913fe66674a8f43c178","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"035f15499cdb0f079b3e358ad54a6122681442a5293c3ae2fdf6c527004b36d2","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"56635699bd3bc78193adbdb8e8b7c2c91dab4140fdaa506fea2300ee86c4ba81","up":true},{"one":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","other":"c74d801e85ac0fd8951480d107b41eddc5c92775614c4886b3f732fa3d1a791d","up":true},{"one":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"6e7f1f3d65364399617a4d95fdd04f2ca9b007b2366943e7ba5acd4616a7a425","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f6c028d6a2b6408e90169151f4519b561ed183bd8925ed9a1702806f397666e7","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","up":true},{"one":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"b659418885032905ea20ad47d70470e403e7e407e0e9ebf9277f9a2d81ec121c","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"56ca9dd846a58a0ffa7b49a88aad559a338ba535a6f738468b8f146c97890cb2","up":true},{"one":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"dbd4d90e3342ef837b8ecf5c6e490f7c409f419cf36b77162a87cb2cfb8ae33c","other":"c42e6492879439eeecd9938d17ff283fd8f5f24206906ca512b4daa4803b78b4","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"e6812448728b4bda5962adceb1707b29f661d3d1a6b2ccd5f8183c9a1f4d01b6","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"08e5a268f397385c69a7fec855ae4d889cfa98afef5b7c09fc4841e3f8894ad8","up":true},{"one":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","other":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","up":true},{"one":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"b5eab4869b4cb65bdc1e5cab45c03016d202f9f5b668be50066451cfcf9ef299","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"e8676d17966625c4fdac6bd9437981a0cf869c8b0010812edf0c79805e0e1ff1","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","up":true},{"one":"056152dd9dae85c426378d34acab8d6641da665d2f57359a27a0ff652f3f3d02","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","other":"1addd4a9f01486212e13e43a9650b7f793617d1cb59fb8d941270d7ae55f575f","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","up":true},{"one":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"3a628ef171c1f26fa0966eb89210be0a14305aae8bfed10f4ed9017698f40f4b","up":true},{"one":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","up":true},{"one":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","other":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","up":true},{"one":"fa240411bc4f3e44dfca3faedd112c7743a67b522a910bc99696ef0b31732ee2","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","up":true},{"one":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"31e670638acba3d58f4c67f3ff2f3f25d769e8a5d7a7838927f4d9d169a84404","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","up":true},{"one":"eff2450bea797ff66d93e7c1c1b0977cddf3abba64bfa51bcc509d728569e2fa","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"32ff1969d90aaa5a8ed2260968a8e2bac2d1cae597c906f90495f1dc5de7f8d3","other":"36b93656cab02213fa76124af6251109356abc5e0ae5dd1e203c6a013e014548","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"8862cd85d7039119b984f752a458ac0495ddea98c69fc1d1241db7873a712c11","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","up":true},{"one":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","up":true},{"one":"1070df5e904e3865085b0319a81761e59146494c689e7567efe7465fc819ae8b","other":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"398038811c1c7402fe2e6994c9ce2f15c8166b8e99f379feaaed66ac87702062","other":"3c5b2e125020c80e3674df9cac34de4d8f3a94ee02556fb557921b6d5498b933","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"b78fd21c063006e2e033d1d00fc21e1ad7ad7951bb5621cec9b56639745d65f9","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"a742e8502c619703ce87890110f908bde32b59dc61d77a247759e5d0056e0c94","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"c6a8220726243cceaa6f2cebdac857a05efe721323f0a064c7f85a8340d3da96","other":"c272b12f4020ae5b20e3d29cd09de03fa0088e3eeb5f07aa7728b29a3e90e687","up":true},{"one":"ab719e60a77ba5253f1690c920df9dd9f3a62071e9cce9d62e0001a522b3409e","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"07f5d094a4b22e73cdd6c85452b3d928da9b4b16873824759cb7e8a622417fd5","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"aceee75a260d45252060fe971eabd4bde25f912db4a3c6e47f4a09572fe01697","up":true},{"one":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","up":true},{"one":"5c7c15798e86fe794bb201614d46366ea96dc51091f5b19f149995e0d40df0a6","other":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"4cece9bc134bc2b09400c9f7f8a4df9270d2fe3c077c5e441fffc911fcf6f42e","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"48d79ac55f8df512af8e7d868aa40ac9b61493fa4f1b0ce0b76bf6da2eb30e78","other":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"305162c472c71ddef2320b138102b67d1ce2b8bba79e2e587fc80e085c88e547","up":true},{"one":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"67585dfd87a005bae9bffc2cccb83c69537247c74886b4fa52287f46c796bcb6","other":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","up":true},{"one":"679554b410e415cfcdf1b14ef87759269b2bcaf07f4541122977db3a40091da2","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"3b020c84fb60f59779324d451d9770d683e08133bbaa2d5762f61b8fd4b8d9fd","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"7d162a11662585f8c38d88fb241623e67bacf90703065dae6c092b4b507d6543","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"834f14e9f325482adef62651ddf3685690dd5ebdd18014f2bd266b2143c290ff","other":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","up":true},{"one":"7c464054ea7b6c9ea0c7d4c209769c92f294a9db2ca159b8ef168e310a1eac3a","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"af02c2f471e96ab8defbd229215695b95e64f7c78b145b6793a238961f556fbf","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"9c21cb3e56f8ac66a7917a9ba14e58f77e998ac70c178b88b5053d9ac2777e60","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8e7b96d28edae711e1a4cee0d894e0bd92cdf410ba6f61713f7d9b0bee761d4c","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"3728152c88f1e5e61f6523b09e8f3bb1023b700deccdca5fcc1e6488136b0e57","other":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","up":true},{"one":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"6dd3ac0fd9a04a2ce75875c683d135e52eaa1670cb55e78711620712e60fde47","up":true},{"one":"9959385385aade728d3f5763806596222bc1e7b9946c2c92407943d080b32f8d","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"7ce7fec833a2e8c7720fcc97f820f2ca2aca85388210f887c3efe78b020766e7","other":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","up":true},{"one":"b4a1b687fbdb754fd689e26f0870a7dcab5d76190c06f3ea2ea1e198f8aa5ab2","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"34118166845c185d15c286b7e5433539ee98ed634baabd534d57369fd5f7c681","other":"31e129ab3df7e082cc27c649d9ee29a3ea646d6a97d2417875b80e3ff576c047","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"86d6f68ec0b8e1b3406943787f918bee74dd1827998bdb13ece8f690da2d296a","up":true},{"one":"b6dffac4b4eb2974ed0ed241799f97d2e5d9be671e311266826d0dcfecfcc209","other":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8358a74fc8d8e39ccc40b4d3a212b7a69a6a8f6afc25cff2c9c7b44bbaf9ec82","up":true},{"one":"18e00a7e0f826a1aba3f8c0f533ed905f2eee607b697fff056ee7874d374adcd","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","other":"a8ff8d69dcb36462d1116dafa5e3d0c7237bf65dbece482a316862c8d66e35b6","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"bdc5de01276157a0f3fc43a9cc3b41b2cacc8479118b75aec4ba9b2b7fa86d5e","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"5bd8faf93bcad07006e9426b45f5cc599f1963ab791deac4ff63d6739cd62a17","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"e0a0ba7e7e89a7af805e24abde1a5a5b489ba197585051a8755e8c2345c3d57b","other":"e2770cef7c1ad312b70d94ca5570e45f324c798a31a93203f505167aeab122b6","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","other":"a4ee49bb2caabb6b9448bcdff1fc3cc673a2db04eab9f5c62d1787f2c25990a0","up":true},{"one":"feb3bc17ee7369a4fa9889d9250fed3c1257c70916871996e6eabd374dd8dc2e","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"951877b34ee1535b5059c49beb03e8960ff9c12b694ef64708c77c30ff1dc706","up":true},{"one":"7c7ca5a7522a04f62f2bebd6197a03d78f255d0175c3dfceb5d92b684365b2aa","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"aeb45fe10b0dbd0f72ab6a77fbf971a8f46dbcdd96c08f23279d1434b4f38b1d","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"81a5a07f92f813e85b501b0028e1caa6e6a6c7efa5195ecb693cd2d91d5132a0","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"9b8e6bb3a7fe4dc65ac97404e546d8b777d068c94bc2355f4f1a510ad6c11905","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"59876e7ff9e92243856dad23126e1d38d9a5ddae79772ed1b2bdb91f33a4a4b5","other":"5a8b84df651871fce72d11cb1c26c87ae4a0cc6b4c274d37e70532c94f27288e","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"4b79e83186f2ab05932eaa99982a2e53373b83780e32d224d15cb2c85462451f","up":true},{"one":"019109311d4888497aa194cce4a89b5ef243421cf0e7e7bb9115d086e1a1f7d7","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","other":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","up":true},{"one":"2ddffddbf452f0c9268058a739f5757fb90281cbfd31bd6f760acc3392fec12a","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"d9cf19895e015cb534d915aed83c0d26bf40a11244027812e17c3bec6e645a8e","other":"da36d1df95a158b0d3f9e7407d663a6b611dde0a77f00a584b97a939ab6a00de","up":true},{"one":"0e3b7722f3f84d83b3d744bea4e893715a01d4df3cf4a1c6a6823a1f5c9ad6b8","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"7049e92a396311fbf2f4a55bb5bd2fe3f7bb3c1a63f41bb88eb800edd45ac6e5","other":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"648a96d61898eb2d336ff7d5a229cfeb7b9f587282e40f9fe640e181ae26bdd3","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"52a8747e4ea35f6f50c72d7c481616f68a5e4396248332b8ff69d3a772de49ac","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"4d381014783980b2f77f0d71160ad9e9d84672b576f4435ccdbae12752350c1c","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"3cabd3a567fc4e6f8da66eb35d938fe1e9a7f2bdd2d36c4dc2d0e0e9149f5e56","other":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","up":true},{"one":"79e5c6c6d78c88c579003cda044882ecb04520fbad1f5feadbe7b6d23fe183c8","other":"7e47a2f82984a600c8583605a91d5cb8f2d9a18961845e9c422edd78e20ac3a3","up":true},{"one":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","other":"a9700308516c02cf9aea8809000a4e0596d6b44753e10bd0928df83e2eb9b9e7","up":true},{"one":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"c603138e40fe2f85cc634017956ada6399fca99969e3bf0c1ee8428374e779f1","up":true},{"one":"bbafac5ba5915db3c80e28b249cad260b9b5dad1f728063c48fa8f61d7556e17","other":"ba911175d3aa3fcc266e2a5aa32fb706208b8a9b5021a5f37c0b85f547eb375d","up":true},{"one":"f305273a7d08e72f69b0b153855e822f252cbbf34a18f305134eed9d1eb7b58a","other":"f8ff7440d6f4abb1c89496336843741ed53a544cedeeed71d8ebe0b08698438d","up":true},{"one":"26acc3c373c29150af30bbc9264d0c44c7c606ff7377399ddf844635e97afcfa","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"3938e6b2c095084dc9975a3e8649133557495d34ac6df874c6d929266e3ffe6f","other":"397a0a0e9fadcb571acd8981f5bfe8e059e707e0feae8a9c4c6bfe87bd39e66a","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"6d5ec591af4966ba024c6b2aeb45e0aab8aa1762f9cac30ce3934da529b738e9","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"26ab9c813822dbb4f1a230cd8e99e8ab280b242747deb55fdf93d160906ef331","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"0111e720a84b310f863c2530fbe149e6a221acbad01065c5d052d2b3e1716f54","other":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","up":true},{"one":"b3f95f225e2b6b76e6c7ef7c86caf83e35213f6a22da41e653ca1c190be23c9c","other":"b8e1a8622c256ef29acd52df7b3ace50820fb1a147716165ff862fdc973a48cd","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"1b1dc3f9312df141855c545dd16aee325f9a609230ec6165bdbbb07d0c0862f6","other":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"9464ad8da1a5effdc0351742dfffae941ffd9fab469637b2491caece53c57dc8","other":"97daf2cbe03c80ce6c4dae39cd071dd93cb32ed245aa9aa77285e12296957ca3","up":true},{"one":"955da15edae50a4c68bc8c579b9799d55f41b7c2a6178f645f79d772e0116662","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"95c0a351fb7aa6683280d159a7b808bfa63f63bff91a1c5936e973b2e5d3954f","up":true},{"one":"5ac0d00b8d647dec62d26e1a689fd05b8b7a1a79ab8c43493bd6d7d209816df1","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"0e2b48558ce2af1fbfee38a557d56072e3091cfcaee8d7847c7c9dcf7bef9bfa","other":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","up":true},{"one":"994839e5f3a5b8b23aed84fb029413124af17804b79b0263ec6bfd5aec5dad78","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"094256812084c6052a2604149aa3aba2379c483bf4ec25162f6b43934942775a","other":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","up":true},{"one":"2e65d05648b798fafbc9bb582c05e6f8f891131260e8c90ca725ddcbc823f315","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"e2d36f335d90ad63148db8e353a78a30d8d9c0abe107be2cf8685f6a01ce74b9","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"178401ec8d01a0a4f551d23e880a8e8a4eb87773565363843d51cf52660b1211","other":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"c190f9d08c78ed6dffadaef36e77fe6aa96099e4453753b0cfc8ec542fa96b9d","other":"c2d00c7d960174c0934129fdcec63525bfa728f78fb70b7c52036b772d6297ad","up":true},{"one":"0d1c35c6ea485cb33857b790ee262f974cf0d54cf8ce3003f8308ac2e87c2c25","other":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","up":true},{"one":"93c0e1adf23fdf1623359eb88c517bc521d5a26325554df890cc04c1fa17a5df","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"140dd212f2b193ee6a9d7fc14f7da321c7ef6fd367fb4f194924fd0ad5d135cc","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","up":true},{"one":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","other":"f7561cb6740e17ec7c7d17068251b2c951d954c77804aa5af60464e9c3964e57","up":true},{"one":"16868ec5d8f490ac73ea28b4e8fdda55ac149bb1aafb177545b54b84a5ad5367","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"a8f49e87156fda5510897601689ce968d77032134c523634916b96de16366f9e","up":true},{"one":"046ca54165f0dd4d62fd7d8ee9e97c655db3d35f5452a0ccb0dffc79c047978c","other":"05949ec1a582fa70cab95c59e7c0d315583bf9fc320c60c35268931f21e90853","up":true},{"one":"ddb8be472c3d48dc4d3d112448e6c0c4a826a18af3f3b53fdfef8cd31053c75f","other":"c53417f008e4550e1c4cb9a3e2955b3af6403e059b7b4b4c33869d9ed4a580a5","up":true},{"one":"d408bb6f7af1590e1f162ce02cc016b1b86ede29851caa32434212ffa2a377c8","other":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","up":true},{"one":"a5053958f0cefcff1826bf02525fda98c4dc954cc38690f3c43ecbf0b2ad57af","other":"a7a856a43293aa3004848a86f187e09343bd605e1a93e853a6f6b6b1031bd667","up":true},{"one":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"f215bc09268e60ebbec76f743bebd09d7e72d4cbeedc0b9d3417bb4a2ef42935","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"87a337622455ae65daf3ab2555cee8985e9aa14bac245545d985296060e4a8de","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"bfc711793830779f49aa59bc6f7a205ab4e6eae7abfdafbf3bb5a1163a778ab2","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"807416cc70f02d481a188027f7932b48e8f7b5e8258f7e9623f3f6e2985d8f6a","up":true},{"one":"aaf051a087a92f874a3f6c7923015e4cffb4bb3ef381c977fd902f21e841d0f4","other":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","up":true},{"one":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","other":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","up":true},{"one":"9f7d72b7d9843872904b841e421985082428fba5010db27dd871ed76630a1e1d","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"d3022a46956e75bca85ba89d97b694a3a64f03ccc2d881ed0cd687d43d486925","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"4a95d49f58057b039b55a34f67a348c052f61770065e41243ff055efc570a935","up":true},{"one":"f2b49a2247c9c5e8f6f755834a37fe5c17f208f994878e14b7001e404f52e125","other":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","up":true},{"one":"e471efbcf1def3915b3dda2dc65a86945c607be54a33e31e9625549becac0e34","other":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","up":true},{"one":"c8c8a93779ec4d9ac40925e8208478a00ee27fc220ddd73d8774cf6bfa255c46","other":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","up":true},{"one":"cdb13873ac058861f295ebca5d958bf2bb793e3f9e274cf5a73a633425a9276f","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","other":"ec90a22f41ee659d5759a497946ac2991c916f00fe7caeeeb0908f3af1fe60b6","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"ed424d24d702520bf7cb5f6babbdc43a078435fb4a9884ed82a93d642839e127","up":true},{"one":"1fd0192df1fbf33771ca575afbb4e27c6541cce4a3cff2dfc1f2c085e7fab79e","other":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","up":true},{"one":"6c0142984d629ae6995894de9e7e5eb8d3fe45e1641d7ebd63959d2e61548ba3","other":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","up":true},{"one":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","other":"8e282b0f27d4fa56fe14cfeb69fac5a53e3d882c7778eb190653e2eab7c93fd2","up":true},{"one":"0cfc7309afabceeb7d248714e972cf3987205324f5ab8d048d17bea5dc87369d","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"70f68562733da4e3b1c3949fb6e11ac0bdd49ea7e732925f937f87df5af698d6","up":true},{"one":"435d721a568eb906a03c69dbd71337251a550521a4004ab5d4a7deb6f317061a","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"68cbc4a5313080d5dca8ad34e8bf52a6144e0ff8ef3f795d7ae9d5f644fe2042","other":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","up":true},{"one":"48f1ca6d433019f932fa4ae03e0decbcbea3fe635edff4458a669b83f8162b9a","other":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"ab3ff955033c0a2615932faf85fd20090b9121c7edcc8e6f7ce4c4fde0a96b8a","other":"a8b58013ff911871d1aa6c2bbea6c2e6ef9b00b87b80a41dc04724ad0488e2ff","up":true},{"one":"e64d90760cd81e4f112bbf1432e76c82fa4173fd474b988f4096ce187363fd81","other":"e09f98114da64e7547b351637190f6621a1f75568cfa9960980fc77618f8855b","up":true},{"one":"096a8302b6f369c28ed9d47719a507ead8a3cc1ca4fa1e32318b7f97873955fe","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"1dec77c2f4caf053c2d0524ae34a2d970bf4743a0d009d8fc543077ddfdfe3d0","other":"1dc0ef1ce68dc681298177bde808af514efa52a5ad38c9cd2bd61968cdf19cfb","up":true},{"one":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","other":"eb686a686fd70e41659cc69ec0db53d1512dfec238918afd0a515d8ce177d4d9","up":true},{"one":"244c3c954ac612e51d4945ab9b77f0b4a3983285e8add7921777e0c45a1bf338","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"8006b080c78a0ab54fa1be75a939bee2334322fded6c3563de1596b17c36172c","other":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","up":true},{"one":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","other":"8b4318f86ad47976321af97bfbf95cd0a3b0aa22447aeb0611ed1a9bf1e6a4bf","up":true},{"one":"24f80c437be45898e594f821bba0f5c62e0c9a0c720118e362ee6f78410612bd","other":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","up":true},{"one":"f1ed9d45622ff974a1e396cd878b2deb89e31aa5d08da773423f292ae8dbcbb6","other":"f645aab9cb2bd2709998b38e5789c9c5f68d40765e6cbd93b92e6383eb671dba","up":true},{"one":"80735a728720bba0ac08daaccd093370d672a8f9a50845ad78ccd6cf8686c39f","other":"80d7e892bbb26808abb1d1530077fec6b08768c151a9f220881da3c862bae0af","up":true},{"one":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","other":"a32749dc4e134a4fbb038618c58a7c05bbbaa06f1436de3754341af86402581b","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c9c302de4afe7b4dcbb6f3e366ce747083f9dcd7d5c6a01b939da5cdc6ccc874","up":true},{"one":"8ea2c8acc111f38d5b4a5ed60252ee83f312d0f8359265d5b9266d54735052fe","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"bcf85ecf421b871fca0247a7081188a8e2c08778b88ffad16db37ef024fec0fc","other":"be68267d77fb52424227267c665ca1193a010334cac057338aca77b49a4b94da","up":true},{"one":"a3309f8b8bba4d8fbd7c6193d7671cb907b94e71155ef6138e0248682ff00e58","other":"a1c85ee75edb807a01f4ce930086c948918aade324752609b078c28991c04e86","up":true},{"one":"09b3fa30780931e18b92c75d1cdeafa365609c565e4e8c253d393835cb82d98e","other":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","up":true},{"one":"67909bdcaef2330ef120e524c76e1e382b474f3332d86f65282028e051f34c75","other":"60c5647aed152609979366fb33dc8b28fc60736098ff68d232415889b43dfa58","up":true},{"one":"d3e913cf4a7dabfb5699131b65e533a40adb46ea37e0ed4ce9433f99015986ef","other":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","up":true},{"one":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","other":"4d9147e3bf98cb59a7648f616c0d7f713a8cf3b7d25e3115233ff5883128beab","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"43c9e1571c460cb9f599fa8ed79ddd0f9c3a21fd2fa455e0603109c55012f76b","up":true},{"one":"d700d96de1193456dc0bcf492c7c11b0951062974af2f7f47b8c901b17c23165","other":"dad08999cd2edc33cfdc59ea34c8adcd6a34eaa15f2e85b0622e9848b215c1d5","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"c8ea4177420785926e0929701f5e74c744920386f2a43b89d83c8281106cb95e","other":"c96146ee47ec7cd74551cf74f00213bc337d643c4327393f0e6848ecd4a0f8d3","up":true},{"one":"fc3911383f74a982f6af8ab95a63426b56117d45f153b3c1441459d9191daaff","other":"f9ded7b83e473e71be2fc0101d574c44521c96f77f9f84a384785a3af6b1093d","up":true},{"one":"8d192b11538072db750f71204e2e6adf9dc0508d9c5cf1eb457e4e996cd985bc","other":"885427318634c458a3050f2f26eb52454a75cea4a1263b9ed55e6eb899743854","up":true},{"one":"cc3397e9e11f75273d3f81d91f980f4504755f80b27a183212de56cc5085e58d","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"a5ac04d53b569e418ef5007961431155f2c226ee10157b30af71ea4836b08089","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"298ae5d173c5360bc9ad5b492ed35de3b6e0cae868a34bfe6311a8ba5ea9877e","up":true},{"one":"6b4ee1b73942ced78f97c0d0e221209933e63ae7353bb9ab3d37ac4127592e86","other":"6d3c6db15900f2596286f81cc0664d2c8291ead5bad2aa35bad515af088a2e48","up":true},{"one":"5ff09c6859736aad7a82a3bfb3f1a1a8b3c0d58f831863540d9c3013dd35745e","other":"5c373034770e413e700b1cd03b2035f769ecd9ab8eb54d32f7b2645be1991fe5","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"84a9db7645c792dc38c1f2113a8f0590d04e1c94d9a8c464ab0ec8219303d966","up":true},{"one":"9257dc934dfbf17473b70cb85333c6fab67ee9b6228a646576c4f57253f1004e","other":"93ea8ef251fd56b159e080cdf733d33e1fdfb3c7ae5bd9a6a328d0bf5458867b","up":true},{"one":"793322608055d4873776a9a0a6c40b04379bfd2f289a8ad49a7dc456bc65f871","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"14849f811af20ce19fb29417d20c15fc16da1e45aebdf795a2c6ccb671e4bdac","other":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"553824ef701d3cd0191ae3a67de564ed0cf553e74bd60ed9de321f9302732ba6","up":true},{"one":"a606c79a018a6535375d851fcc82c42cc7c952720aa120434cedccf4a4be1f59","other":"a6165a4b02d58be116892982c0ed3d49d86fec0e9f436a516b61868331ed853f","up":true},{"one":"5814be13c8550b9a5a83d08e7af6022002a8fdaa38ba6c2c30be58099a9f7744","other":"5a26ae73eebf27f6dbec2414f1277a249e814a7a06790d7061610e5227b086f6","up":true},{"one":"ef99b6cdc05345a1ee82267890e3ccaeef1f2bd2fe7ae8b02b6b20b9a5ef85bb","other":"eebd48b367cbfe94a37c0deb274a697e628074f9560b909e66229c5c76ce68eb","up":true},{"one":"48de553e15afd3e8a46bfc3a5ba8a298158aa3d60f140d2730230af5cce8084d","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"7660828fb0c8f89201d34e6f4d61cc6ba9a30cead6e4eb8253f6cc92e1845f23","up":true},{"one":"2c8042517dfeaa01586e91e491dd4154fb24c0d84fedb0404b9d5136f60da1d9","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"0e80db9dfa8ce29bedfb2de031622bef8829bee52771322b6a7efb47afe540e7","other":"08f84878e44fed2adb4b2685b9f293dc3c73d5f9bc1c474870d943ec2ae73dbe","up":true},{"one":"1049d321a450726cf39d1d7cea1c108be3bec137a644b62cdc73a853f5a5a22b","other":"138dbc1662c4ce9b2b30ef5035914cc70465666fe18f313318e662d13f099621","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"741a854ae299df49a738725bc58abe614e5e4302ffecd8320bbede8412d160c0","up":true},{"one":"9f0e2bf8a962156c9e0a83c3d42ad3dc5ac5c3e508f24200bfb151aad4e395ff","other":"9ec831d97418916fd9695465e041caf27824dbb51d6ff74d6b70f3bd561e70e6","up":true},{"one":"7850f5ee5048959559b3af0f95689669b250fc3aa58bcc9544dca61ca9c9769c","other":"7895b2cb97b473f8893cc70a4421e0f8be1c033b27cd730fa13438b7a8f3fcb5","up":true},{"one":"a2a163ce2cb092b411c994cc5d5ef555d539d2dcf4e7e1aeb528d2216dc481e5","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"482ec3dc05460579ea9bce87677bd3d9a1930e801fabeba607b8ab6b8729ff15","other":"48b850974575ca57a3cc5f9a4cf5aafd8688cb32b993f69983ece63258ff876e","up":true},{"one":"9ca1fd5d41975acb905f337997922849b4070360e47849bb4fd8cd1b9ddb4d73","other":"9c8e1f23f260c5a46b0001572675b19e5293ca65e7fdfc131c07612e9c4072fa","up":true},{"one":"44adaabf9c46608a374ed816d3c40c63b6645f4f6e033a76431bc8f88713eb41","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"318828fa893a28cc0652d3f81d97c5b8e023e853685f5d3e65fde20689abcc5a","other":"30feca631f06041cb14cead384dfaa5fffa6dc34b0cee54230efbe15e56a5884","up":true},{"one":"5d82a418629cfbe7c57105309319ad695a198626fe3571de213a12ddf62f7308","other":"50c1a8023bfecffb09472fdc50898f4d050a31443d40a6c07b629090beb0df3d","up":true},{"one":"46bfa8bea56b0be1abfa5ad3561bb6bf49ed6695d83ee2b2c192c5a0408347cf","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"2a507f5cb921137a7225c9c4988a8514af0f7e3c442cb8bf2bb612dc522a7daf","other":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","up":true},{"one":"837f0993f6374039a5ad4472d6313e647a4c5db4583bd27ccfa98d3448a17731","other":"8402bd62282811ed236b2fa1f0d41ad4bbe54e420ee34adc6164cfd4baf8658d","up":true},{"one":"cf52b3fc82ec24c3e9b40488d7c5f7ac8af731d159a103619bee932ec74d5e92","other":"cd6c8b42a0b092f41e6925577c9de7d1bea17231bcb3d08f3d3cce9c6fdcf22d","up":true},{"one":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","other":"402cf9d0bffa017ebea34ede11207f3366b3ea450c0428029129a8e8026abbe7","up":true},{"one":"194ea3e14dc5d99f98d15607dc4c405769f5a371acc22d41a62d0537d716be32","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"a2e6c900511768c8c9947ab0fa2e73975cf2a4cec7fd15217abdba25c329317e","other":"a0c88ba70599b0e72c18fa6aedd14d607cca3e9a49a5d50165d084e70328c2dd","up":true},{"one":"8cc3fb39009d0adc26fca1e2ee96822d168d4debc379fd516c15d4b4a1624231","other":"8f9aa2cd33d18e7cb4494d11a7532c97eb4a1cae172b2165c26ae4ed24887c0d","up":true},{"one":"1bd588263274543729d54529ae9e9bf4596db40649a1c2a3f73168d818f34b62","other":"19ea0a685fc4edd298b736dc7a778c9ec4362de378876911105fa9ba2ce90204","up":true},{"one":"447cdbf1ff462aa67d6a46085b1a84fdc495a4142ab174c8e69b271b09732b4d","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"fc514c43c4eb5c62798458da5d622e9248a6e530e4288cd902019aa05c4374d8","other":"ff75b19017c84128f38dec4f63e1f247a5691dc0fae186e667afedb5fe9d2c80","up":true},{"one":"4005fd1fa8fbb318b29a62c368ada579e5122ca0578e6a75c509552be4b63b76","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true},{"one":"2fd2f77d76cca480ac18e9af7a462f297db168c3370b3bc0e2c04aa006c4d037","other":"2c85f5361b2d5abcf799de50fe58b1ed2006ea18f75823748c33eb7e95b1cc39","up":true},{"one":"447a411c80fbd422bfa0c358d3f2a1fe6256c05e35acc6350958dfbe62cd5b9b","other":"43d43e9ebcbceb4830fc1d2d5024650b90698306bbd2c4d0b4841a1a8fd09c93","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_3.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_3.json index 38ce68f3..15ed45bc 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_3.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_3.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","name":"node_fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","enode":"enode://6a7dd306ace8a106c3b86ac6b0cd6eeccde4a9af5090ca4a6d1054787f9757875b6b8d02f88fafe3fd7f20f0349a0060ace7c0be1d65470e736a3319431b5c14@127.0.0.1:0","enr":"0xf88fb84096f5dd9030fc74da3701ef7b06dfe4d44068118f8041a728876904d70fa8c88c20df197c343522c76d75d3a12507c567213c13b46a94ed4800f47474643f4ee70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026a7dd306ace8a106c3b86ac6b0cd6eeccde4a9af5090ca4a6d1054787f975787","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"/TfkUhDds2+LXs75ydnT+CAbqVI7/WpwKRMzzzuSB+E=","hive":"\n=========================================================================\nThu Feb 28 17:15:44 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fd37e4\npopulation: 2 (2), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 1 3594 | 1 3594 (0)\n001 0 | 0\n002 1 cb08 | 1 cb08 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","private_key":"6a02f87b1d13a15ce24bfa58456af8aaabdcf8cb58b9f86c19ab14c721c80f91","name":"node_fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","services":["bzz","pss"],"enable_msg_events":true,"port":39341},"up":true}},{"node":{"info":{"id":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","name":"node_3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","enode":"enode://0972df8ba2504ddc155739320ab392e64d000c950e08ce42863449bc4757dd03397efbad98888f8d740b7cf55c357d1d6d74b5e8cb935f71b19e0e16ceef03f9@127.0.0.1:0","enr":"0xf88fb840d5f39b1ebcd5b616ef67b1c0239ed4501ef45c6a00e5bd8cd3f2ac88870d4c4b6ce4a4af820afab9a714d99a5fef53ec3c042fc3243f403819bcfb3504c2150d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030972df8ba2504ddc155739320ab392e64d000c950e08ce42863449bc4757dd03","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"NZRDinSApcPcBkQOKKFgRMDH0okhnaAvnkHaGBCCeAU=","hive":"\n=========================================================================\nThu Feb 28 17:15:44 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 359443\npopulation: 2 (2), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 fd37 cb08 | 2 fd37 (0) cb08 (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","private_key":"26266470b7f4e9341cbbbb304b1aed116626cb1bea55d639cdbef1a069c18123","name":"node_3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","services":["bzz","pss"],"enable_msg_events":true,"port":33055},"up":true}},{"node":{"info":{"id":"cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","name":"node_cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","enode":"enode://046f757c2632f0fbdb74f73ce67be9cf181f85a6d2a8ec0d5e8a329a8ede81fe476bb5a1e5896b9ce49201ec4a32561bbbe91ab46eb9f7d99bb9a0002df3a639@127.0.0.1:0","enr":"0xf88fb84022bde12be56af73a7793d7ffe9f22d205a7540d6cc337815697115edeafcc1d461427c8cdee33e602201d3b2dfac034b567a8270e5f0c8b3fe29e10883f4b1e40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103046f757c2632f0fbdb74f73ce67be9cf181f85a6d2a8ec0d5e8a329a8ede81fe","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ywipNV85ulXmoasCQQQCFppjAINUErqkveBJo/oUQ70=","hive":"\n=========================================================================\nThu Feb 28 17:15:44 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cb08a9\npopulation: 2 (2), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 1 3594 | 1 3594 (0)\n001 0 | 0\n002 1 fd37 | 1 fd37 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","private_key":"52fd9e67692ef0963c13052f85f88eac3a527cd50137e4c0a75ebc8ad471b8af","name":"node_cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","services":["bzz","pss"],"enable_msg_events":true,"port":38675},"up":true}}],"conns":[{"one":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","other":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","up":true},{"one":"3594438a7480a5c3dc06440e28a16044c0c7d289219da02f9e41da1810827805","other":"cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","up":true},{"one":"cb08a9355f39ba55e6a1ab02410402169a6300835412baa4bde049a3fa1443bd","other":"fd37e45210ddb36f8b5ecef9c9d9d3f8201ba9523bfd6a70291333cf3b9207e1","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_32.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_32.json index c33cc6e1..05a40b2b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_32.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_32.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","private_key":"294c55925f084f4af87c7e09716c6334a538bac3e6b7157844c0c96a9dd02b4a","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","private_key":"010dbe172f1240848fae9639e029301ebd297b29ad2d6936c67669d23470cee4","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","private_key":"7f974cee5ec96d070bf88898c24035988667ea21242a02822bccbe4ec487d126","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","private_key":"d7e181b51ba95fd1475314470468045205d7ddefb1bbecfda3340267062489d1","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","private_key":"87ed3ffe3111baec0adfd92068b47ed9e1efb642d0ff3115d7d76338f25eea76","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","private_key":"7dbb4fe973c714c4291ce5a8aedce9c3425a25cdecfd5fe0c7f14b55e91d6a03","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","private_key":"6f8900888d42ea5340f13634776acfd4a261837cdb772b9a059b23c7d425da1d","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","private_key":"a94698db3c1a809d255fedabcb4f3314be27cad7be63cda59bb71724d24ca0d9","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","private_key":"37f683b58015f6a7ce73f814fc3860318bb2048052356a215f9eff00aa6ed34b","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","private_key":"b27bdea692559a2a77d497ee567e972e033d4e6e5dfb7c35948a9d231c25b0e0","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","private_key":"0a75e7e7dfabf4ee693bfe127221c97eb9b2f4e19d32f7bc836ba253445358d7","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","private_key":"1557c4754c71e6468fae0c7d0e1b5af2cf70511ed2d5d9b0bc276315a4c8f922","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","private_key":"d2b18f4edef23f629bc5624a36ac1d58f59207bf7de0b19220f90fc3c64b5a61","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","private_key":"48fe56dfc63a454ab004e7a5dc7938e29694377b6bcc27d1c19d8a72349a8c2d","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","private_key":"9155d38d2a2bbe1e5239f9993d96a350182e3840813436e23e1f2a4a9a32b7d9","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","private_key":"e60772916c9d248e3a3819de52aacdd4008412aab20a457e88e764752679b8f8","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","private_key":"e7f27ccf343d2124211ba980dfe8ee7e774a5956268a25522347bb3be99bf38e","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","private_key":"0e9cb88a7d70a04f0780ea51e001aabda0830f504e29e31c69d859acce0a9019","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","private_key":"cf8362e06e18a783f7e20baf956d40e2ea4a204ec868f8d34909802af222e997","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","private_key":"9a63fae9e77f9cfdc30f4747a939ba44e85824560d98b49047bfa8f4156d426c","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","private_key":"748efd85864661c429fd70a74bc32f1d81685bd81927c1499dbd93993dc27cad","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","private_key":"fed7bc6fd67e331e642253e604215ba088daa48a1b84979699ad770c09b909dd","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","private_key":"c61c4e9235825e60f2d8c57169e7d1913f45b057f298ba8fb05d51515e92a902","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","private_key":"53704ffbabad329a9032a58cd7ec012499b0a521bb0300e1d7160d4e5d1220fd","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","private_key":"7098a0386bb10a213728ea65f3ca98fd25a31daf3917190f6a1889d350e09674","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","private_key":"e967b2c9db78764c1ce024423c48e170b68fb6232c313a32133faf4936e2c114","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","private_key":"f8cf717ad5b26578e58a97eddc6074cebb814cdaf3f4144acbafcce51ccbd249","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","private_key":"e6573973825826d193b5093ec610c34368630376e4e13843e5f2203c3ca88fa9","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","private_key":"0ff9df0f439480bc31f8a3ae593af2662bad0f5bd4e0c3e87839af326929de07","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","private_key":"1daf1094602b9234a1651a8ba6013a807d9c0d56339c784d618e2c6705b65e23","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","private_key":"376cc1c769c48c4a04f3f1447fe31112cdbc8d898266a338f6675906511bc9c6","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","private_key":"6a9a93cae21630926926ece339463ca165823f499f47d45632dbe1a49a84257c","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","name":"node_2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","enode":"enode://6e710e572097f299c352e4e1b8a2980de9e6d2cba35fc6b05623ed829c722148861d96fef1530c41ea27a53be8894dd32b299189b421f1f8f06f6a706b56433a@127.0.0.1:0","enr":"0xf88fb8409bf3f7dd13b162a205ccbe927f310ddf3b8c4c5f89183331a6317408259f970e7cec513e4ee7bafb3ae3378b24837e035bde558630c0e6b7db93527f043dc0de0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026e710e572097f299c352e4e1b8a2980de9e6d2cba35fc6b05623ed829c722148","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"I0Wt0e19mNuIFqrT/aCCnmsMnBZwhwZ6fsOokL7IrVg=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 2345ad\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8ee3 8115 | 13 8115 (0) 8ee3 (0) 9b33 (0) 97b7 (0)\n001 3 7fb9 6e31 4730 | 12 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n002 3 0518 0d53 0993 | 3 0518 (0) 0d53 (0) 0993 (0)\n============ DEPTH: 3 ==========================================\n003 2 3a42 39fe | 2 39fe (0) 3a42 (0)\n004 0 | 0\n005 1 24cb | 1 24cb (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","private_key":"f020ebea0429ea9f2ed075c50df1841beb61cdb88a0b5a3b864fe27bf214a297","name":"node_2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","services":["bzz","pss"],"enable_msg_events":true,"port":38575},"up":true}},{"node":{"info":{"id":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","name":"node_4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","enode":"enode://e57ffbc9c56f76b56f9005ac74af0db50a8e6f883e392b744080f36b35441ef2031f57e8d5d1899d0343f59545dfdda51cfc3c861bd810e0cb75516e32384676@127.0.0.1:0","enr":"0xf88fb8406472138d3fd8bb33c916d5192587abed17160ddc25b5b725259f95b3b5ab17b92fbb75939667eebdd4a0dab29d5b6a5b0cf3878d40c7c412cd99d22e94ced4e40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e57ffbc9c56f76b56f9005ac74af0db50a8e6f883e392b744080f36b35441ef2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RzA2Bnms9jD8iroUx747vBOVPLHqjXpy9aO1dkFw73Y=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 473036\npopulation: 13 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8115 f3ed | 13 8115 (0) 8ee3 (0) 9b33 (0) 97b7 (0)\n001 3 0518 39fe 2345 | 7 0518 (0) 0d53 (0) 0993 (0) 39fe (0)\n002 4 7df3 78c7 6a64 6e31 | 7 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n============ DEPTH: 3 ==========================================\n003 3 541f 579d 5743 | 3 5743 (0) 579d (0) 541f (0)\n004 0 | 0\n005 0 | 0\n006 1 4464 | 1 4464 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","private_key":"99552bc7c5ce5b7ea569a6d3b46502a171a9ae1a3a6bc88f3fa2da99b1b25ef7","name":"node_4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","services":["bzz","pss"],"enable_msg_events":true,"port":41821},"up":true}},{"node":{"info":{"id":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","name":"node_f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","enode":"enode://0dd06e3e445d2cc141af19d7143f57fdb7fd08688718a628230c9e80ee2e700d12b98585be5c983630faa8061cca9dcee5fa267840ab63c7a177ed32c54abac9@127.0.0.1:0","enr":"0xf88fb8400bc5733ce0c6dab1ea57bf24e37a838bc7bfd4d4fa76002760aba33bf2b102b27f84c60b93282a95881f98a45f91c174957d61630a70e6bb91877a0417b99c970183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030dd06e3e445d2cc141af19d7143f57fdb7fd08688718a628230c9e80ee2e700d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8+0awvoZrhK+qr4ifsAz9JUwDwgwqEAUyDn/LmdsmNM=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f3ed1a\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 39fe 3a42 78c7 541f | 19 0518 (0) 0d53 (0) 0993 (0) 39fe (0)\n001 3 97b7 8115 8ee3 | 7 8ee3 (0) 8115 (0) 9b33 (0) 97b7 (0)\n002 2 d735 ceeb | 3 ceeb (0) d735 (0) df92 (0)\n============ DEPTH: 3 ==========================================\n003 2 e17a e25a | 2 e17a (0) e25a (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","private_key":"6cd0d2e5beba190a7a871ae45b3bfa123d3c79b4fd171ef22eceedcfa35dd7d6","name":"node_f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","services":["bzz","pss"],"enable_msg_events":true,"port":46325},"up":true}},{"node":{"info":{"id":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","name":"node_541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","enode":"enode://1cf1ddffc042e967618bacdcf1e4aa0e765d65acc9e75c3ba8ed8b40c5f602eaf1cdb0652219fa04c169441b74ad07b014e7b94c54a54d7aefdb2b9e05d8ed48@127.0.0.1:0","enr":"0xf88fb84017719ad2bdcf75e3de4b6bd1d41115306432abcbd8d0ac6ea95bce768f5b06c12b4f507ff59afcb21724688f254f2f177b300c1f22995c184b3466cad698ff280183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021cf1ddffc042e967618bacdcf1e4aa0e765d65acc9e75c3ba8ed8b40c5f602ea","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VB8Vu+WNnhsr09FYLFz6Yv281DY7z0UZZPjG108XmjQ=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 541f15\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 8ee3 f3ed | 13 8ee3 (0) 8115 (0) 9b33 (0) 97b7 (0)\n001 2 0518 24cb | 7 0518 (0) 0d53 (0) 0993 (0) 39fe (0)\n002 2 7fb9 6e31 | 7 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n003 2 4730 4464 | 2 4464 (0) 4730 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 5743 579d | 2 5743 (0) 579d (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","private_key":"92852d378cc44e9e13a49fb6eac32c7808f2415bd4882da6076b5c5c57147a52","name":"node_541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","services":["bzz","pss"],"enable_msg_events":true,"port":35339},"up":true}},{"node":{"info":{"id":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","name":"node_24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","enode":"enode://793fc878556c2704dac445d6dd237d8d4a5ffd6a9ccc7b40315790785062fcc9423df4649fdbeed26a47e3220ac6798c43e8111357e37d8a186382805a2d0f7f@127.0.0.1:0","enr":"0xf88fb8405ec36b34d21bc6414e2a974f21a891aa1ba4f896e1787c7e94b253908b8eb9274cf5b6c102479de1aef263c90c09c275ffdc2c8480007c92034d7073ac56b4de0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103793fc878556c2704dac445d6dd237d8d4a5ffd6a9ccc7b40315790785062fcc9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JMs5GxmEpTgK+C8vpiLxoC6wNeyzQB1TjkGCSWXdzFY=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 24cb39\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 e17a 8ee3 bfeb a263 | 13 8ee3 (0) 8115 (0) 9b33 (0) 97b7 (0)\n001 2 7fb9 541f | 12 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n002 3 0993 0d53 0518 | 3 0518 (0) 0d53 (0) 0993 (0)\n============ DEPTH: 3 ==========================================\n003 2 3a42 39fe | 2 39fe (0) 3a42 (0)\n004 0 | 0\n005 1 2345 | 1 2345 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","private_key":"e9e78ca9c5aa6c4d52d7d6f39dc7ef585ac1b3a232beec65a7493e818276c04d","name":"node_24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","services":["bzz","pss"],"enable_msg_events":true,"port":40305},"up":true}},{"node":{"info":{"id":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","name":"node_a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","enode":"enode://0e4cad0aaad50693ff30730b850da74646d6742011b90cbb5ea2e8bd1d5430f553796beed70d373525d4bb7a136a7ff5b3acee77afb21b9c91ba93bab9c1e7c6@127.0.0.1:0","enr":"0xf88fb84093fd09e514cfed721f0cb368859e31ec619cc2d0d8482cd0b216d6d368d761b43c8a0ce93916b46d87f2338a934a1ae706f2070e4cd6599b891ec374c90aa1110183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020e4cad0aaad50693ff30730b850da74646d6742011b90cbb5ea2e8bd1d5430f5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"omOldpzz8ibbfSzZGu6WogbEawziqAeKbThB3D9MXGY=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a263a5\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5743 78b6 24cb 3a42 | 19 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n001 2 e17a d735 | 6 f3ed (0) e17a (0) e25a (0) ceeb (0)\n002 3 8115 8ee3 97b7 | 4 8ee3 (0) 8115 (0) 9b33 (0) 97b7 (0)\n============ DEPTH: 3 ==========================================\n003 1 bfeb | 1 bfeb (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 1 a3d9 | 1 a3d9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","private_key":"ff1484b5140cd7e811e6ce51bf267644de2b44a4aaac227490a713ed17b998ad","name":"node_a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","services":["bzz","pss"],"enable_msg_events":true,"port":45663},"up":true}},{"node":{"info":{"id":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","name":"node_3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","enode":"enode://6cdb01e6d8e2f2d201ae9593e7234c2f954efe223726481576d9596ecebf45965ce6606620cd8ac5ce8a62dd03ad386319acc6b0b49caef9533b8fb39f928338@127.0.0.1:0","enr":"0xf88fb840d5a5fd5c60a2e5253b01fc73dc69320f4be754df21628a91874bc86ae8e00bc02c432f46859e14dbc35515f1864c6e482e0165490d7a2e9e73a868789e6dc1560183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1026cdb01e6d8e2f2d201ae9593e7234c2f954efe223726481576d9596ecebf4596","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OkKYvhPDnd7gRvQjeGNSjAWsHjpsnCzEKWNoZdjuShU=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3a4298\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 f3ed a263 | 13 f3ed (0) e17a (0) e25a (0) ceeb (0)\n001 3 4464 753a 78b6 | 12 4464 (0) 4730 (0) 541f (0) 5743 (0)\n002 3 0993 0d53 0518 | 3 0518 (0) 0d53 (0) 0993 (0)\n============ DEPTH: 3 ==========================================\n003 2 24cb 2345 | 2 2345 (0) 24cb (0)\n004 0 | 0\n005 0 | 0\n006 1 39fe | 1 39fe (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","private_key":"c3bd98ec585a2bf57984ea44e3df5862d0ac4036367cf8a71530d6e3da5e19cf","name":"node_3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","services":["bzz","pss"],"enable_msg_events":true,"port":33977},"up":true}},{"node":{"info":{"id":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","name":"node_78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","enode":"enode://0020a4e955476d6774ca840c91a6f298f738eb8bc162cdf0bf919d6ff85430dd080d68b2519e7a8806e30bbedd04d9ca0455e9cfea9a9d1f8316b3e02a7739c5@127.0.0.1:0","enr":"0xf88fb840091444d053b7aaddb31d705918bf78a24089d8db087272558babdf3c35e7e1544ab5f6d6d130c38f71153b590cd6c4a8b0538b39505b3bd53caadb499d7efc350183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030020a4e955476d6774ca840c91a6f298f738eb8bc162cdf0bf919d6ff85430dd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eLai+zQolUhV+9v5mTjhIUuPGfozQUSYQonR+wO7T3w=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 78b6a2\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a3d9 a263 | 13 a3d9 (0) a263 (0) bfeb (0) 9b33 (0)\n001 2 0518 3a42 | 7 0518 (0) 0d53 (0) 0993 (0) 24cb (0)\n002 2 4464 5743 | 5 4464 (0) 4730 (0) 541f (0) 579d (0)\n003 2 6a64 6e31 | 2 6e31 (0) 6a64 (0)\n004 1 753a | 1 753a (0)\n============ DEPTH: 5 ==========================================\n005 2 7fb9 7df3 | 2 7fb9 (0) 7df3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 78c7 | 1 78c7 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","private_key":"5d3e69f521510ed62af7c34c089faa034445e525fae5789a5b2708e3e34a55b7","name":"node_78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","services":["bzz","pss"],"enable_msg_events":true,"port":44923},"up":true}},{"node":{"info":{"id":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","name":"node_5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","enode":"enode://9769d41ff8d1a2220be2c7a9f3f522b197606a2a9b771e70f7115b43e9a3f7f8a2bd1bd4a7eed179a8f5032b122e7a16cc3f38eabf55f2655cb183a12c425f59@127.0.0.1:0","enr":"0xf88fb840406de7323ba3d20449df0acbcba8c0a6104d62495aae6346997f988a71b197a7232ae0db83b24c4b90dc2e9c8192734fd6bae7b1b0d41e80102201920fa864d70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039769d41ff8d1a2220be2c7a9f3f522b197606a2a9b771e70f7115b43e9a3f7f8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V0O8CecT58TVj+8ZUatrYnon5vGjxC24iCehYTvX7z8=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5743bc\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a3d9 a263 | 13 a3d9 (0) a263 (0) bfeb (0) 9b33 (0)\n001 2 0d53 0518 | 7 0518 (0) 0d53 (0) 0993 (0) 24cb (0)\n002 4 6e31 753a 7fb9 78b6 | 7 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n003 2 4464 4730 | 2 4464 (0) 4730 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 541f | 1 541f (0)\n007 0 | 0\n008 1 579d | 1 579d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","private_key":"3ec49076ee0972b516c7ac98a7ab569014cf747935fe3dd076c683c1cc7d0509","name":"node_5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","services":["bzz","pss"],"enable_msg_events":true,"port":35273},"up":true}},{"node":{"info":{"id":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","name":"node_579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","enode":"enode://024d47097bb5d264e382a071489167e48e9c4e56ee3d0eb6594603ed7847dbbb141b45523e4b174b7083472630e08dcc15bb2495bb1fccc0506b19d4e14fa297@127.0.0.1:0","enr":"0xf88fb840e1f4b1665503a11d8e8c261ffc24f744272c0d96ebaf17d03c2046f6a0c3161f264ff1c4ddc618cb5da9c35b4dae871aaf7ec77cee48cab46467acc27f7d812b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103024d47097bb5d264e382a071489167e48e9c4e56ee3d0eb6594603ed7847dbbb","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V52hcJAe2RG+NEXUQiZkqZfrFCAVidcC4GiPYUaHKZM=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 579da1\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a3d9 d735 | 13 a3d9 (0) a263 (0) bfeb (0) 9b33 (0)\n001 2 0d53 0518 | 7 0518 (0) 0d53 (0) 0993 (0) 24cb (0)\n002 2 6a64 6e31 | 7 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n003 2 4730 4464 | 2 4464 (0) 4730 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 541f | 1 541f (0)\n007 0 | 0\n008 1 5743 | 1 5743 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","private_key":"6e50f30bce1310aa06e28011d83829b6432b73e09ffaa327bcb09d0a871e56c5","name":"node_579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","services":["bzz","pss"],"enable_msg_events":true,"port":37161},"up":true}},{"node":{"info":{"id":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","name":"node_d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","enode":"enode://e0063bc92893325b6f3aff3a1cdebe170f3a70c3ed8b6aa55607f96ffa9e199f1f37d6b4f5743adeb91e1aea7baea44fca78010706f2615c27840a341d926a4d@127.0.0.1:0","enr":"0xf88fb8407686b23d8d56528be1d859eb241e4228adbebf46b6664fb1a89141257a7552140a602485685a9256944106c9f9f57828d22cd7ce01c64fa504dd7977294b52cf0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e0063bc92893325b6f3aff3a1cdebe170f3a70c3ed8b6aa55607f96ffa9e199f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"1zUeR/DHRu0zxlKw8qov7TVMja2Nh1JaS1EVga/2xvo=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d7351e\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0518 7df3 579d | 19 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n001 2 a3d9 a263 | 7 a3d9 (0) a263 (0) bfeb (0) 9b33 (0)\n002 2 e25a f3ed | 3 f3ed (0) e25a (0) e17a (0)\n============ DEPTH: 3 ==========================================\n003 1 ceeb | 1 ceeb (0)\n004 1 df92 | 1 df92 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","private_key":"e6ebe5c66707a0c89243e414155374afcdcd0529b7fb63d17696f685fe9554dc","name":"node_d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","services":["bzz","pss"],"enable_msg_events":true,"port":35925},"up":true}},{"node":{"info":{"id":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","name":"node_7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","enode":"enode://f0b310658f442f5bb853496ee598435dd08bdfdceb62499f0aa1583212529fb831b2d1f6db5a2faadc238f91204b7d5a51d7f9259983008bccba2d35d5bd7114@127.0.0.1:0","enr":"0xf88fb84015bb5fcc3a16b896d129418fd6304c5c4a07d2613278e74c38490a515d97e03074fb145cd653fcf028feb6f005d0ca8c83203df0ec9c042635e41c9a685264810183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f0b310658f442f5bb853496ee598435dd08bdfdceb62499f0aa1583212529fb8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ffMHT04RdaIT5XiTmr2cHl/3FUPrXcJO5d7V+ATjuEI=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7df307\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a3d9 d735 | 13 a3d9 (0) a263 (0) bfeb (0) 9b33 (0)\n001 2 0993 0d53 | 7 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n002 2 4730 4464 | 5 4464 (0) 4730 (0) 541f (0) 5743 (0)\n003 2 6a64 6e31 | 2 6e31 (0) 6a64 (0)\n004 1 753a | 1 753a (0)\n============ DEPTH: 5 ==========================================\n005 2 78b6 78c7 | 2 78b6 (0) 78c7 (0)\n006 1 7fb9 | 1 7fb9 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","private_key":"2739d262560fd1c32320e01920f26d20fe756d085ea86b3a3c105ee36f6b13c4","name":"node_7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","services":["bzz","pss"],"enable_msg_events":true,"port":34347},"up":true}},{"node":{"info":{"id":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","name":"node_78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","enode":"enode://2852c5c0c2cc4ce9ec1e680b5be7fdc6178bf36e6393d791817042b221a0f787dcb6f00600b95c177940bae3dcad8bb10d7e0601d92d6fee73033dcffe0af98a@127.0.0.1:0","enr":"0xf88fb840250093f9c808805726fa94afee9b1fbe20be7c6bcaf444a93e3073cb2eb4632d1eb840824f9ca949b40b26b9878f7399f4c3c1ee6ac0877c3f52efb88aae18510183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022852c5c0c2cc4ce9ec1e680b5be7fdc6178bf36e6393d791817042b221a0f787","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"eMcNM9/RMbzBxkJnv3Hm/oHpP4kblAoRFMZXyCZnW9c=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 78c70d\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 f3ed a3d9 | 13 f3ed (0) e25a (0) e17a (0) ceeb (0)\n001 2 0993 0d53 | 7 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n002 2 4730 4464 | 5 4464 (0) 4730 (0) 541f (0) 5743 (0)\n003 2 6a64 6e31 | 2 6e31 (0) 6a64 (0)\n004 1 753a | 1 753a (0)\n============ DEPTH: 5 ==========================================\n005 2 7fb9 7df3 | 2 7fb9 (0) 7df3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 1 78b6 | 1 78b6 (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","private_key":"ecb17d33e2878ecc69683c97b16415ef66ea959593d5e15b0a376ab566cccdfb","name":"node_78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","services":["bzz","pss"],"enable_msg_events":true,"port":37163},"up":true}},{"node":{"info":{"id":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","name":"node_a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","enode":"enode://abe44f262b43e0ddcc49d889a93f3f7d43ea44bf504d23937464edf104332b963d3635818c12867c25f4e43c4860e18cbedc28a87dd87ca65bf2b13db23ff93b@127.0.0.1:0","enr":"0xf88fb840c0a357ca865bdcbfbc5f575be6d2ab837c7354069d334c5ab7d618076595a70c5a8a53142161c36f6d759f2f8e196924f722f98635f3fbfbb86fe7a910868ad20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103abe44f262b43e0ddcc49d889a93f3f7d43ea44bf504d23937464edf104332b96","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"o9mHeV4Z+FGOR3D3LJ+AgEuZmjG/ItCc/rBNZEtCm/k=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a3d987\npopulation: 15 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 39fe 579d 5743 753a | 19 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n001 3 d735 df92 e25a | 6 f3ed (0) e25a (0) e17a (0) ceeb (0)\n002 3 8115 8ee3 9b33 | 4 9b33 (0) 97b7 (0) 8ee3 (0) 8115 (0)\n============ DEPTH: 3 ==========================================\n003 1 bfeb | 1 bfeb (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 1 a263 | 1 a263 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","private_key":"765bfc005ad4dec671a2f1dee108fa60f9760b185dee1d2a2af53a0d56f53902","name":"node_a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","services":["bzz","pss"],"enable_msg_events":true,"port":35675},"up":true}},{"node":{"info":{"id":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","name":"node_39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","enode":"enode://1a9002726d9442faaa087d3f865c4c5d7f2882a87866a710835cbb8d4dc3da7338b868cd888fd898e4016dd20fd21f98891a212f1b17a5427b5476b5b6f6c317@127.0.0.1:0","enr":"0xf88fb840fa5103638887af121c7fe3afedad54432df30561fc796f03459942a3f17f7cc03ea50cfe59d8af29e82b76f1295a8b5697f48525060ed90d804210a80df804bd0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031a9002726d9442faaa087d3f865c4c5d7f2882a87866a710835cbb8d4dc3da73","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Of6nbi5DCRnK20jOKQwRrWay+KZohq4ItZ5Bj6Tq3os=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 39fea7\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f3ed e25a a3d9 | 13 f3ed (0) e25a (0) e17a (0) ceeb (0)\n001 3 4730 753a 6a64 | 12 4730 (0) 4464 (0) 541f (0) 5743 (0)\n002 3 0518 0993 0d53 | 3 0d53 (0) 0993 (0) 0518 (0)\n============ DEPTH: 3 ==========================================\n003 2 24cb 2345 | 2 24cb (0) 2345 (0)\n004 0 | 0\n005 0 | 0\n006 1 3a42 | 1 3a42 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","private_key":"bd7dbd51baf88692c24a8d75636af1f00e609fe4eda6444b674b14ab09ecddc5","name":"node_39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","services":["bzz","pss"],"enable_msg_events":true,"port":33437},"up":true}},{"node":{"info":{"id":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","name":"node_6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","enode":"enode://ce647cc2ad911b8cb35aeb74b022bce733ae4cfd609859b6c348e72e4e03cc4284064126b5419e15e7ad1e321469b3fbc3cb30319247c36b0eeba7f5a069a78d@127.0.0.1:0","enr":"0xf88fb840d07202149bb989b7b0bc49a88fab6c8e70082ef55751246005290393cfe8979c72eac475f2a5fe1292b7a48ae288d9fa421806c36447be580061fb5ee11fe5f30183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ce647cc2ad911b8cb35aeb74b022bce733ae4cfd609859b6c348e72e4e03cc42","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"amTXZeQP3hGQ/yKLuGCWuEGC1xnm0bcTcm25qu6kN9o=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6a64d7\npopulation: 14 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 ceeb 9b33 | 13 ceeb (0) df92 (0) d735 (0) f3ed (0)\n001 3 0993 0d53 39fe | 7 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n002 3 579d 4464 4730 | 5 4730 (0) 4464 (0) 541f (0) 5743 (0)\n============ DEPTH: 3 ==========================================\n003 5 753a 78c7 78b6 7df3 | 5 753a (0) 7fb9 (0) 7df3 (0) 78b6 (0)\n004 0 | 0\n005 1 6e31 | 1 6e31 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","private_key":"2d1258592260e026c71f0e3d8f9b60ff4264cca8acb232abc3715ed0fa49e8cf","name":"node_6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","services":["bzz","pss"],"enable_msg_events":true,"port":37153},"up":true}},{"node":{"info":{"id":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","name":"node_9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","enode":"enode://ddf82056124d428300b2fbe2318d468707657ce7aed15add51629475f3bf3076eb42fd2da9394bef0c22e2fa4615e39e3cec3073587947862b347e7e30e046e6@127.0.0.1:0","enr":"0xf88fb8403df62e843c1aba232b75f4e1ef741cdcb6a1abc2d70c27548171885786d8cf6262354bc32298a1202bb3a1b484b9840592f11470af89955df5c5cff009f3d5470183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102ddf82056124d428300b2fbe2318d468707657ce7aed15add51629475f3bf3076","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"mzNa62m3+9OWrOUYLT/nkw5dl4ZTFZMxC0ioV8K7dp4=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9b335a\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 4464 6a64 | 19 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n001 2 df92 ceeb | 6 ceeb (0) df92 (0) d735 (0) f3ed (0)\n002 2 bfeb a3d9 | 3 a3d9 (0) a263 (0) bfeb (0)\n============ DEPTH: 3 ==========================================\n003 2 8ee3 8115 | 2 8ee3 (0) 8115 (0)\n004 1 97b7 | 1 97b7 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","private_key":"f0dcfc2e5fe5cc19ae0e55c17cea621a344848ba6413de2fa1370d0ef5041cc1","name":"node_9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","services":["bzz","pss"],"enable_msg_events":true,"port":36105},"up":true}},{"node":{"info":{"id":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","name":"node_8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","enode":"enode://519322960c41240dfdf0f6eb33cf4dbcd607f9c71552844f4c88b40535ee8e8edc4f81e969ee6418ecaeb731f6627c7553535db148d6af171aa90d3d4b52de5e@127.0.0.1:0","enr":"0xf88fb840beb59d1ae71c8e13e68f38f5dc4d35fd419423aeb66e9bd02825cd51675e195c59bfe74790a11d3660a429f51c7fa533b03f5de75f9c50bd9deb20aad7bdb3aa0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102519322960c41240dfdf0f6eb33cf4dbcd607f9c71552844f4c88b40535ee8e8e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"gRWrzzl0enrz7s5V8SzJ5JCaduQYU7LhJlIhUNvalQc=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8115ab\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 4730 0d53 2345 | 19 0d53 (0) 0993 (0) 0518 (0) 24cb (0)\n001 2 f3ed ceeb | 6 ceeb (0) df92 (0) d735 (0) f3ed (0)\n002 2 a263 a3d9 | 3 a3d9 (0) a263 (0) bfeb (0)\n============ DEPTH: 3 ==========================================\n003 2 97b7 9b33 | 2 97b7 (0) 9b33 (0)\n004 1 8ee3 | 1 8ee3 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","private_key":"0cdcfe48b7096864bb66f2d09b7ef45a27b5f26606f6429a841a266fadc2b8de","name":"node_8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","services":["bzz","pss"],"enable_msg_events":true,"port":37937},"up":true}},{"node":{"info":{"id":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","name":"node_8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","enode":"enode://5eb100e652f1a20369cc22355e5ddbb1f3503d45ab5bc343e42d43c1189ac66d99472efb731fbdb43c086a9867494c340a3b93ec0c248313ed44f017b38f0c97@127.0.0.1:0","enr":"0xf88fb8407e0bff7bd1090185526f52a43ecdda7358286cc0468f0eca9f18958d2a3447361acab4fa03a4a0799aa4e50f8e84c306e840f8249a0308b34f82b76afe046eed0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035eb100e652f1a20369cc22355e5ddbb1f3503d45ab5bc343e42d43c1189ac66d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"juOHQ4urcW87bSD0xaEXvOrsYDz6axvWCx0LhLEatDA=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8ee387\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 24cb 2345 541f 7fb9 | 19 24cb (0) 2345 (0) 3a42 (0) 39fe (0)\n001 2 ceeb f3ed | 6 ceeb (0) df92 (0) d735 (0) f3ed (0)\n002 2 a263 a3d9 | 3 a3d9 (0) a263 (0) bfeb (0)\n============ DEPTH: 3 ==========================================\n003 2 9b33 97b7 | 2 97b7 (0) 9b33 (0)\n004 1 8115 | 1 8115 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","private_key":"105b799734097e8023441f6939805723ac89fcb4ff9ccac50bd62460e87c247c","name":"node_8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","services":["bzz","pss"],"enable_msg_events":true,"port":40859},"up":true}},{"node":{"info":{"id":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","name":"node_7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","enode":"enode://2fb00f3ef77f231e224d908fcbafa19fcc9384a8636a4f616e2bd1d0aaa901ed6e8af6ae1fe98835650624d7d5cd0d357b6716dfed0096c2a4784a303dacf52a@127.0.0.1:0","enr":"0xf88fb840d2aff8f47839e79ba53089410607c84c3a350f6549787298369c6b4aaee001711772c1ebe313391835a231f69078929006c5bc46a7a7a365339a43019105ee6a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022fb00f3ef77f231e224d908fcbafa19fcc9384a8636a4f616e2bd1d0aaa901ed","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"f7lV7jRch+nY48mJvAvMsV5Ejw2ZqI0z+3vmcJL7bxQ=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7fb955\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bfeb 8ee3 | 13 ceeb (0) df92 (0) d735 (0) f3ed (0)\n001 2 2345 24cb | 7 24cb (0) 2345 (0) 3a42 (0) 39fe (0)\n002 2 5743 541f | 5 541f (0) 5743 (0) 579d (0) 4730 (0)\n003 2 6a64 6e31 | 2 6a64 (0) 6e31 (0)\n004 1 753a | 1 753a (0)\n============ DEPTH: 5 ==========================================\n005 2 78b6 78c7 | 2 78b6 (0) 78c7 (0)\n006 1 7df3 | 1 7df3 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","private_key":"64333ce54c8da8d7e9c33f7be3b251a5ed1e5aa83a11249a82e29a110b1d5b2b","name":"node_7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","services":["bzz","pss"],"enable_msg_events":true,"port":42481},"up":true}},{"node":{"info":{"id":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","name":"node_bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","enode":"enode://c59989c774f7e074cdf34e86b5606f6413731cb002d6e23fb7048b6abb8d4ab175993ac902afe935830d5aaf2323da442f6001f4efb4f744c8e815d7cbebc210@127.0.0.1:0","enr":"0xf88fb840e0f778f02886637fbd7ea40cc496e93293d426c0339594822cebdd56850aa36f407c7f9a63d251f0a2dff02c8462b150d7c771c2dbb09d6f886529e5a354906c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c59989c774f7e074cdf34e86b5606f6413731cb002d6e23fb7048b6abb8d4ab1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"v+tsaf7RbSm6INEc2LI4neInZbYgm7uPGZQBSiCiBOY=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: bfeb6c\npopulation: 10 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0993 24cb 7fb9 | 19 24cb (0) 2345 (0) 3a42 (0) 39fe (0)\n001 3 ceeb df92 e17a | 6 ceeb (0) df92 (0) d735 (0) f3ed (0)\n002 2 9b33 97b7 | 4 97b7 (0) 9b33 (0) 8115 (0) 8ee3 (0)\n============ DEPTH: 3 ==========================================\n003 2 a3d9 a263 | 2 a3d9 (0) a263 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","private_key":"1d29cf23c9755015db0f67b0188c2c19bf24987efa6c1682ccf3cc0ad0ec5a23","name":"node_bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","services":["bzz","pss"],"enable_msg_events":true,"port":46455},"up":true}},{"node":{"info":{"id":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","name":"node_e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","enode":"enode://a2dd668460422389d655b5663deec36cd2881ad83de1e61764a4ac0281dc04de5dfe0a1c77aebf15b1507f62433d08f839fdc45ccde68b1372da5fb05edb2626@127.0.0.1:0","enr":"0xf88fb8402cb1df00b6cd3322b435ed7d378f8f55f11e43f478d15b4c2a5944bc802ae37d5d27186bbb89602d74aba656f45abb719f1f24cbc09221a929fe3b9c49e73e4e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a2dd668460422389d655b5663deec36cd2881ad83de1e61764a4ac0281dc04de","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4XqGI697L+Ioe5Lgs9kXukTY8pcwGXuuKq4gUDVoqzo=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e17a86\npopulation: 8 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 24cb 6e31 | 19 24cb (0) 2345 (0) 3a42 (0) 39fe (0)\n001 2 a263 bfeb | 7 97b7 (0) 9b33 (0) 8115 (0) 8ee3 (0)\n002 2 ceeb df92 | 3 df92 (0) d735 (0) ceeb (0)\n============ DEPTH: 3 ==========================================\n003 1 f3ed | 1 f3ed (0)\n004 0 | 0\n005 0 | 0\n006 1 e25a | 1 e25a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","private_key":"77bd5acdbf27ca1f194007ebaae9a384db0ed52cdf49a440fce50fd8986663d1","name":"node_e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","services":["bzz","pss"],"enable_msg_events":true,"port":38823},"up":true}},{"node":{"info":{"id":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","name":"node_6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","enode":"enode://e8f703980df3e25fe82683b6d2a775262e07309814eaaa60c3d22d64d352431ff3fc485e8bea252e646e60acb14b08c53ac0d6c480e468a018c9940cfbb5995a@127.0.0.1:0","enr":"0xf88fb840808b5d498d23de164013220eb74d54a810a0d63485538a9b2e4d05fb854995732e8be73c9c32da53cc2ef4dc9d554295743188a22c08a5ce3731575770cf250f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e8f703980df3e25fe82683b6d2a775262e07309814eaaa60c3d22d64d352431f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"bjFW1QN/r9Tk1v+/tQ/ZV7s0qBza0kxluXFZ9vvKgto=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6e3156\npopulation: 16 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 ceeb e17a | 13 97b7 (0) 9b33 (0) 8115 (0) 8ee3 (0)\n001 4 2345 0d53 0993 0518 | 7 24cb (0) 2345 (0) 3a42 (0) 39fe (0)\n002 4 579d 5743 541f 4730 | 5 5743 (0) 579d (0) 541f (0) 4730 (0)\n============ DEPTH: 3 ==========================================\n003 5 753a 7df3 7fb9 78c7 | 5 7fb9 (0) 7df3 (0) 78b6 (0) 78c7 (0)\n004 0 | 0\n005 1 6a64 | 1 6a64 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","private_key":"a2b5a8fc75c349602ab3f0c732403c34e0dd6d0983bdca9fd6e8e63fa7e625ee","name":"node_6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","services":["bzz","pss"],"enable_msg_events":true,"port":44515},"up":true}},{"node":{"info":{"id":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","name":"node_051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","enode":"enode://f95dcdf6a7b67a12e461b7d620e9e5473ef6630fae5334cc81ee19f7ed5a86af2d898820ee10598f9886270bad22885f33bdd77da3ce1cebc35eab12a851bf29@127.0.0.1:0","enr":"0xf88fb840f83b0db1e290d22c0a001f3850407da61d152aa66b04657db08b30ad9b417d3b20a8c76d1f78787581e182bf5a52a4e4133d916f923ae20b81ea6baccb2500410183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f95dcdf6a7b67a12e461b7d620e9e5473ef6630fae5334cc81ee19f7ed5a86af","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BRhyySYhF5f2JaZ1tQyTSrXynLt9FAtsid7EuSSg/0E=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 051872\npopulation: 15 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d735 df92 | 13 df92 (0) d735 (0) ceeb (0) f3ed (0)\n001 7 541f 5743 579d 4730 | 12 5743 (0) 579d (0) 541f (0) 4730 (0)\n002 4 2345 24cb 39fe 3a42 | 4 3a42 (0) 39fe (0) 24cb (0) 2345 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 2 0d53 0993 | 2 0d53 (0) 0993 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","private_key":"15d5b46039f63072fedea8221981c8ea5e41e2f76fb9f68e11af1dc629514ae9","name":"node_051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","services":["bzz","pss"],"enable_msg_events":true,"port":41645},"up":true}},{"node":{"info":{"id":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","name":"node_4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","enode":"enode://0b5fa0bc32971346e7f724db70c7c2debd42aabad0ae08ddafdd9c2a3089b1e39cb62b34e36b3a4902a20bbd0b86e47b0e660eda5fcd203a2bb7ee411397aebb@127.0.0.1:0","enr":"0xf88fb84042ecaa56acb3a73b05756c24e1d9cb90f3941293a34b7e58d19cf3f3974f801b38ddf5de2c5cc06ab8cddc4f1d39d6429e6bcb5d45b3162cd8efb5e62ab2963a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030b5fa0bc32971346e7f724db70c7c2debd42aabad0ae08ddafdd9c2a3089b1e3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RGTTOqr2BvAMIyVHxk1NDD0LwQCAydLO73jwyaUZjmI=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4464d3\npopulation: 13 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 97b7 9b33 | 13 9b33 (0) 97b7 (0) 8115 (0) 8ee3 (0)\n001 2 3a42 0518 | 7 3a42 (0) 39fe (0) 24cb (0) 2345 (0)\n002 5 6a64 78b6 78c7 7df3 | 7 6a64 (0) 6e31 (0) 7fb9 (0) 7df3 (0)\n============ DEPTH: 3 ==========================================\n003 3 5743 579d 541f | 3 5743 (0) 579d (0) 541f (0)\n004 0 | 0\n005 0 | 0\n006 1 4730 | 1 4730 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","private_key":"2adb4afe6ba823e733df48a3d5d09eb8fa4ed380cb5accf0aae706ef7781f344","name":"node_4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","services":["bzz","pss"],"enable_msg_events":true,"port":42813},"up":true}},{"node":{"info":{"id":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","name":"node_753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","enode":"enode://1352929c4211f4c4cd4a13cbfdce725e4f1bc4ed263b8fb8e5d34ead2f6bf5c0947a7013057d1f5cf04ea9ca1ca19bfe3dcc236e3ce674702dc5e8926b75ba89@127.0.0.1:0","enr":"0xf88fb840b9ab15d6154f9a25168313678352c17719ca962b1c7518185075c93a3f88bf3e224bb5165b657547a61ce6c7d65b28834119ba9de142b3ca096c1bf614cf3ad20183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031352929c4211f4c4cd4a13cbfdce725e4f1bc4ed263b8fb8e5d34ead2f6bf5c0","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"dTqDZ/za+Mrx/myiXtl7I/mYKBFaONYTUkiLw9AqPhc=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 753a83\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a3d9 e25a | 13 a3d9 (0) a263 (0) bfeb (0) 8115 (0)\n001 2 39fe 3a42 | 7 3a42 (0) 39fe (0) 24cb (0) 2345 (0)\n002 2 5743 4464 | 5 5743 (0) 579d (0) 541f (0) 4730 (0)\n003 2 6a64 6e31 | 2 6a64 (0) 6e31 (0)\n============ DEPTH: 4 ==========================================\n004 4 78c7 78b6 7df3 7fb9 | 4 7fb9 (0) 7df3 (0) 78c7 (0) 78b6 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","private_key":"168b73a15e60830a02857df2b0829fd5a8763b349b554523b0159f54eb92e3aa","name":"node_753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","services":["bzz","pss"],"enable_msg_events":true,"port":33315},"up":true}},{"node":{"info":{"id":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","name":"node_e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","enode":"enode://5ac2f47e9c71378005c153f9d63851ec5b6548902f310f0e0d1f70adab24930495a39c6e2f861e4f90a7f6115cdad65b3031270b3a622d53adedf1842c4d5b60@127.0.0.1:0","enr":"0xf88fb840850bea04ffb859769c059b511c2c57509fd3a9169027e68054a4da19741eee99346b08613ccbd87611a1731d116f5eb6e857eb89cd51afd1352d2def6921cc6e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1025ac2f47e9c71378005c153f9d63851ec5b6548902f310f0e0d1f70adab249304","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"4lphH3oGkxQFDo/8oOs4P3KgUFxZQv2fIcDYrE/CJV0=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e25a61\npopulation: 8 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 39fe 753a | 19 39fe (0) 3a42 (0) 24cb (0) 2345 (0)\n001 2 a3d9 97b7 | 7 a3d9 (0) a263 (0) bfeb (0) 8115 (0)\n002 2 d735 df92 | 3 df92 (0) d735 (0) ceeb (0)\n============ DEPTH: 3 ==========================================\n003 1 f3ed | 1 f3ed (0)\n004 0 | 0\n005 0 | 0\n006 1 e17a | 1 e17a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","private_key":"c4c13286dcde737ba9a3fc2e7953732cdab547e3e0b627aa3eb5aa41403370d0","name":"node_e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","services":["bzz","pss"],"enable_msg_events":true,"port":42117},"up":true}},{"node":{"info":{"id":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","name":"node_97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","enode":"enode://2c0df18912e105bbf6f9b8eb475be15fa4b2588774db19e58efa9f9004827b7b7c7ce8c6b85f09ed18d35525894c0fdab9db72bda999b840490a9bf69d4e9483@127.0.0.1:0","enr":"0xf88fb84047867575521a015ed256017d340f51f6b7b89dbf341e7198d2873cdf1643097d57e3353c5b2dedc7ac2f59f228207f23aaf85bd0d5ea22c839cd42093c008c520183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1032c0df18912e105bbf6f9b8eb475be15fa4b2588774db19e58efa9f9004827b7b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"l7cDr+AEiTIc6YBXBOjFCWcasOlG0zlZWjIg28+6F9c=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 97b703\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 4464 0d53 | 19 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n001 2 f3ed e25a | 6 f3ed (0) e17a (0) e25a (0) ceeb (0)\n002 2 a263 bfeb | 3 a3d9 (0) a263 (0) bfeb (0)\n============ DEPTH: 3 ==========================================\n003 2 8ee3 8115 | 2 8115 (0) 8ee3 (0)\n004 1 9b33 | 1 9b33 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","private_key":"459c256ce29dce2b5e51c0ce9519d817687f2ae8d39291bd0bb8c45be3cac239","name":"node_97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","services":["bzz","pss"],"enable_msg_events":true,"port":35847},"up":true}},{"node":{"info":{"id":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","name":"node_0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","enode":"enode://61b38c0b92a4c6ce5d27ea0b6d43d452e1e997c46f8ee202b2e75ea97ced9f4688972acf423e65ef43459bb16e39aebf26088a1f1ff7539524802bc73e3933ae@127.0.0.1:0","enr":"0xf88fb840303205621ea7bf25072f954d0d961007601360547291141945bb0093577673ef019f53965ee35755ee49420db016f5bbeb2033ca540a4697ac74f4a7d44f3f200183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10261b38c0b92a4c6ce5d27ea0b6d43d452e1e997c46f8ee202b2e75ea97ced9f46","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"DVORnD1bCv3DtzjYLLIT+R4F7DsPQqOqRuelBE+MRoQ=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0d5391\npopulation: 15 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 df92 8115 97b7 | 13 f3ed (0) e17a (0) e25a (0) ceeb (0)\n001 6 579d 5743 6a64 6e31 | 12 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n002 4 2345 24cb 3a42 39fe | 4 39fe (0) 3a42 (0) 24cb (0) 2345 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 0518 | 1 0518 (0)\n005 1 0993 | 1 0993 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","private_key":"c45ad9fcca69152984db9fed40d730632c1298936ade555a8cb20d1a817bd670","name":"node_0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","services":["bzz","pss"],"enable_msg_events":true,"port":38753},"up":true}},{"node":{"info":{"id":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","name":"node_df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","enode":"enode://95f793890df976e2116b50757db31f18f9973a271201d253d5e7eb8045e883b2343ce7c251c3cef5a8a47fb2f7ee194a75fd6da2f6c86edc301d1a1c61967aab@127.0.0.1:0","enr":"0xf88fb840d94e3579279121df14a0951495d39187d19e1eaaf27ea43657c534f73f0478c57461adbb638a01bac20370acce51c6a7336966224889eba1a5c7c71ed0ea14210183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10395f793890df976e2116b50757db31f18f9973a271201d253d5e7eb8045e883b2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"35JqZsJv2fAxTI+ilNeaiPkS7DjEWk8CZ/ZL7qyqG8U=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: df926a\npopulation: 9 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 0518 0d53 | 19 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n001 3 9b33 a3d9 bfeb | 7 bfeb (0) a3d9 (0) a263 (0) 8115 (0)\n002 2 e25a e17a | 3 f3ed (0) e17a (0) e25a (0)\n============ DEPTH: 3 ==========================================\n003 1 ceeb | 1 ceeb (0)\n004 1 d735 | 1 d735 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","private_key":"eeb3903d4463417af9da2ea27fba13fd5093da36946266a277ec581558b2856c","name":"node_df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","services":["bzz","pss"],"enable_msg_events":true,"port":39343},"up":true}},{"node":{"info":{"id":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","name":"node_ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","enode":"enode://b3e2654630b1d6ebbb09ee959e76c7730ae9c6fc480911ff08fcdd24d7ba4b828729f5a4dfc7200e612a8c1fcf86eaeb7cbb8c21397b46c65f32e1aed42147d9@127.0.0.1:0","enr":"0xf88fb84092f5be44e027ba50e860ca40efdd29bbf06481e026e13a4a5ac92a23fbfc4abd14a3e017a8b06df176479a8d5f2917d4c34c2acef2bcf5759a288681f2ea97400183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b3e2654630b1d6ebbb09ee959e76c7730ae9c6fc480911ff08fcdd24d7ba4b82","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"zuuCKuMTSaut21Qw6AQz9FM+lClgovUcyEbfldqlqPg=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ceeb82\npopulation: 11 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6a64 6e31 0993 | 19 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n001 4 bfeb 9b33 8ee3 8115 | 7 bfeb (0) a3d9 (0) a263 (0) 8115 (0)\n002 2 e17a f3ed | 3 f3ed (0) e17a (0) e25a (0)\n============ DEPTH: 3 ==========================================\n003 2 d735 df92 | 2 d735 (0) df92 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","private_key":"b6e0764b9a67a61d0b3d28f015fa324dcd1cf91184ffe3e19d09dd4c2e03eba9","name":"node_ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","services":["bzz","pss"],"enable_msg_events":true,"port":33733},"up":true}},{"node":{"info":{"id":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","name":"node_09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","enode":"enode://7865fabc9290d5908d0b0379da577a803da633ce87eca6a230cd485858f79d8732a353fd06bb730a194d4014ac932231ca83337c8523f7134c7d42d4c478d3a2@127.0.0.1:0","enr":"0xf88fb840d2dbe8ecd544c1c014c8f02cd34a100977754a6db7f5e02016625158c1bdd75c53f231aa89315cd6bf3d705704e49986dc7ed17eedc5540e7991a7f69c0df83b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027865fabc9290d5908d0b0379da577a803da633ce87eca6a230cd485858f79d87","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CZN+J8DlJQHatyFXh3+ZSCorctqKNpDlXFF8D8Pzv/w=","hive":"\n=========================================================================\nThu Feb 28 17:37:30 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 09937e\npopulation: 12 (31), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 bfeb ceeb | 13 bfeb (0) a3d9 (0) a263 (0) 8115 (0)\n001 4 78c7 7df3 6a64 6e31 | 12 6e31 (0) 6a64 (0) 753a (0) 7fb9 (0)\n002 4 3a42 39fe 24cb 2345 | 4 39fe (0) 3a42 (0) 24cb (0) 2345 (0)\n============ DEPTH: 3 ==========================================\n003 0 | 0\n004 1 0518 | 1 0518 (0)\n005 1 0d53 | 1 0d53 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","private_key":"e412c080f6539c4ed5ecc3cb66b97b85ee903f61b67fc90fa515775522d067ac","name":"node_09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","services":["bzz","pss"],"enable_msg_events":true,"port":34047},"up":true}}],"conns":[{"one":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","other":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","other":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","other":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","other":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","up":true},{"one":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","other":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","up":true},{"one":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","other":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","up":true},{"one":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","up":true},{"one":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","other":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","up":true},{"one":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","other":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","up":true},{"one":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","other":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","other":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","up":true},{"one":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","other":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","up":true},{"one":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","other":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","other":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","other":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","up":true},{"one":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","up":true},{"one":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","other":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","up":true},{"one":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","other":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","up":true},{"one":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","other":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","other":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","other":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","other":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","other":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","up":true},{"one":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","other":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","up":true},{"one":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","other":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","up":true},{"one":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","other":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","up":true},{"one":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","other":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","up":true},{"one":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","other":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","up":true},{"one":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","up":true},{"one":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","other":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","up":true},{"one":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"bfeb6c69fed16d29ba20d11cd8b2389de22765b6209bbb8f1994014a20a204e6","other":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"df926a66c26fd9f0314c8fa294d79a88f912ec38c45a4f0267f64beeacaa1bc5","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"8115abcf39747a7af3eece55f12cc9e4909a76e41853b2e126522150dbda9507","other":"a263a5769cf3f226db7d2cd91aee96a206c46b0ce2a8078a6d3841dc3f4c5c66","up":true},{"one":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","other":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"e17a8623af7b2fe2287b92e0b3d917ba44d8f29730197bae2aae20503568ab3a","other":"ceeb822ae31349abaddb5430e80433f4533e942960a2f51cc846df95daa5a8f8","up":true},{"one":"97b703afe00489321ce9805704e8c509671ab0e946d339595a3220dbcfba17d7","other":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","up":true},{"one":"6e3156d5037fafd4e4d6ffbfb50fd957bb34a81cdad24c65b97159f6fbca82da","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"d7351e47f0c746ed33c652b0f2aa2fed354c8dad8d87525a4b511581aff6c6fa","other":"e25a611f7a069314050e8ffca0eb383f72a0505c5942fd9f21c0d8ac4fc2255d","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","up":true},{"one":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"9b335aeb69b7fbd396ace5182d3fe7930e5d9786531593310b48a857c2bb769e","other":"8ee387438bab716f3b6d20f4c5a117bceaec603cfa6b1bd60b1d0b84b11ab430","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","other":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","up":true},{"one":"541f15bbe58d9e1b2bd3d1582c5cfa62fdbcd4363bcf451964f8c6d74f179a34","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"a3d987795e19f8518e4770f72c9f80804b999a31bf22d09cfeb04d644b429bf9","up":true},{"one":"f3ed1ac2fa19ae12beaabe227ec033f495300f0830a84014c839ff2e676c98d3","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","up":true},{"one":"753a8367fcdaf8caf1fe6ca25ed97b23f99828115a38d61352488bc3d02a3e17","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"39fea76e2e430919cadb48ce290c11ad66b2f8a66886ae08b59e418fa4eade8b","up":true},{"one":"0d53919c3d5b0afdc3b738d82cb213f91e05ec3b0f42a3aa46e7a5044f8c4684","other":"2345add1ed7d98db8816aad3fda0829e6b0c9c167087067a7ec3a890bec8ad58","up":true},{"one":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","other":"051872c926211797f625a675b50c934ab5f29cbb7d140b6c89dec4b924a0ff41","up":true},{"one":"579da170901ed911be3445d4422664a997eb14201589d702e0688f6146872993","other":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"7fb955ee345c87e9d8e3c989bc0bccb15e448f0d99a88d33fb7be67092fb6f14","other":"5743bc09e713e7c4d58fef1951ab6b627a27e6f1a3c42db88827a1613bd7ef3f","up":true},{"one":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","other":"3a4298be13c39ddee046f4237863528c05ac1e3a6c9c2cc429636865d8ee4a15","up":true},{"one":"7df3074f4e1175a213e578939abd9c1e5ff71543eb5dc24ee5ded5f804e3b842","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","other":"4730360679acf630fc8aba14c7be3bbc13953cb1ea8d7a72f5a3b5764170ef76","up":true},{"one":"4464d33aaaf606f00c232547c64d4d0c3d0bc10080c9d2ceef78f0c9a5198e62","other":"78b6a2fb3428954855fbdbf99938e1214b8f19fa334144984289d1fb03bb4f7c","up":true},{"one":"6a64d765e40fde1190ff228bb86096b84182d719e6d1b713726db9aaeea437da","other":"78c70d33dfd131bcc1c64267bf71e6fe81e93f891b940a1114c657c826675bd7","up":true},{"one":"24cb391b1984a5380af82f2fa622f1a02eb035ecb3401d538e41824965ddcc56","other":"09937e27c0e52501dab72157877f99482a2b72da8a3690e55c517c0fc3f3bffc","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_4.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_4.json index a64f3137..9296cad0 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_4.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_4.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","name":"node_39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","enode":"enode://1adbc1635af8ae835d3041edc8a5c633f40a009111b6a74e0cce501181b7ea3b1f26b193294721540ec8970183ff74a9121899af5bc9425f2bd3506e4a164cd5@127.0.0.1:0","enr":"0xf88fb840dc163ce6d8e977e2d01bde715e6b77a6ae29ee68c87cd245047d2f0afc728e847b4674905af3780f2ef7e65dfdcebd5d5a59aa7ba20985ba5edc2edbacc2aa430183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031adbc1635af8ae835d3041edc8a5c633f40a009111b6a74e0cce501181b7ea3b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OWN9hua+axvMNCc4qEo298YgLKbh2jeVJPXI2QGK6ZM=","hive":"\n=========================================================================\nThu Feb 28 17:15:36 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 39637d\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 d9b8 f9ee | 2 d9b8 (0) f9ee (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 1 3eea | 1 3eea (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","private_key":"777c522fea2223bf13c53cc946d4761b29a5f071939160197b8305faff375f5b","name":"node_39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","services":["bzz","pss"],"enable_msg_events":true,"port":45013},"up":true}},{"node":{"info":{"id":"f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","name":"node_f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","enode":"enode://81d15729673f044e747a296362aceca03a5cec3dbab718bdced562ed52ca46cadcd387403307d69e55793b1bcfd275428d5235492acc0b03d44fc7c320dbb8b8@127.0.0.1:0","enr":"0xf88fb840bcc07b798defeb3fce1c5c15a3a5a1e2ed4f586606b450bf24d63fd0ac43447041869c05e4809d6d7ff1f293d020ef37cd0d9d5ddbbba85db19b26e78cd4276c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10281d15729673f044e747a296362aceca03a5cec3dbab718bdced562ed52ca46ca","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+e53D2+b3csevlmvzABou1NIZNZs5D2H+yVQOMEqT9U=","hive":"\n=========================================================================\nThu Feb 28 17:15:36 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f9ee77\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 3eea 3963 | 2 3eea (0) 3963 (0)\n001 0 | 0\n002 1 d9b8 | 1 d9b8 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","private_key":"33058348a654e1f7083b1e151159be731dce92dc63fd6a8218d05a0a79556264","name":"node_f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","services":["bzz","pss"],"enable_msg_events":true,"port":42259},"up":true}},{"node":{"info":{"id":"d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","name":"node_d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","enode":"enode://45ce3a7edb53c1ba49af48932d23cc431c8093e16363be0c164d7a2d91a9b42292fcab0a19f44961c660670ab35585f06671af76660e1879bac551649eeaf383@127.0.0.1:0","enr":"0xf88fb840e84fc1155908a63c768932ac73515e5badc69a4c9870628174f0ada2b2c51b884cd5023d2c99f9ea91f859daec2b6f1861dfbed2a79d64e2ec7d0d5e10b96a670183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10345ce3a7edb53c1ba49af48932d23cc431c8093e16363be0c164d7a2d91a9b422","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2bjt/6M4O2+EZ7ihQyGyRPLrgR/+/oFicF7mHdgxnrg=","hive":"\n=========================================================================\nThu Feb 28 17:15:36 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d9b8ed\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 3963 3eea | 2 3963 (0) 3eea (0)\n001 0 | 0\n002 1 f9ee | 1 f9ee (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","private_key":"212d7f1311d01b67472c5f08b993f423ae2479ce51b31e223b2d2569b8fe9b2b","name":"node_d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","services":["bzz","pss"],"enable_msg_events":true,"port":42359},"up":true}},{"node":{"info":{"id":"3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","name":"node_3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","enode":"enode://a858788ee0cfe3e41f87f7f08d6e1f4af3b46aac21c031eb764995c70c13e103dccb92a70cd85004343bd6b52cdfbd448c0692ffb332a328d0655d1e82c67044@127.0.0.1:0","enr":"0xf88fb840e7edbd4abbf61818777dd83a7a33d3ae7965c97845955e1fe850d5826159898f076a7b650aadee767bcf047dbdd7b64e362f458e2dfadc5bf61a70e3bc98e4400183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a858788ee0cfe3e41f87f7f08d6e1f4af3b46aac21c031eb764995c70c13e103","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PuoGR7u2jhDE7X7KZGtlCIJBFE/qQ/OajBtp8CXjqKM=","hive":"\n=========================================================================\nThu Feb 28 17:15:36 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3eea06\npopulation: 3 (3), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 2 f9ee d9b8 | 2 f9ee (0) d9b8 (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 1 3963 | 1 3963 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","private_key":"0e14c45740f36d25300cd008dd1e1c1f98d39c519a1fee65fb30e004f1a992df","name":"node_3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","services":["bzz","pss"],"enable_msg_events":true,"port":42157},"up":true}}],"conns":[{"one":"39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","other":"f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","up":true},{"one":"f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","other":"d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","up":true},{"one":"d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","other":"3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","up":true},{"one":"3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","other":"39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","up":true},{"one":"39637d86e6be6b1bcc342738a84a36f7c6202ca6e1da379524f5c8d9018ae993","other":"d9b8edffa3383b6f8467b8a14321b244f2eb811ffefe8162705ee61dd8319eb8","up":true},{"one":"3eea0647bbb68e10c4ed7eca646b65088241144fea43f39a8c1b69f025e3a8a3","other":"f9ee770f6f9bddcb1ebe59afcc0068bb534864d66ce43d87fb255038c12a4fd5","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_64.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_64.json index d8031614..cd3d5593 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_64.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_64.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","private_key":"8f572fa1cb0643b3413cd0dfceac00a4dac9ec09af0c2d134809b6385dad35d7","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","private_key":"a66e079664952b1fb1028e959dd8a05a21477e2f298ea89592adc522d38e511b","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","private_key":"072e1cf99b52c2f1d40560809048fea86f39ae1db94bec2c9b71b0bfe092910a","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","private_key":"003ec9cb18f157360d7a3eb506b37ec69dbbd141bbeb7b8fae5f470b1a0768db","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","private_key":"fd6fc50368fbc7e848635726291264cf6ad682fb4fe785b724c8b22ea31e1e24","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","private_key":"da156f269cb01e7fbea5efd5f7ab6283ef0994a1ca139768f49c68e027ca76b0","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","private_key":"ae570046bebe22a2cd095ca2b2282cab29b2501c6f217ae3e19d96bace36c199","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","private_key":"dee3b946981d4b7bd055941cd6722b166efc24f28f6b26da9cd52a8f91f3a411","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","private_key":"b7e566b24a7c97f714c9920c4e426dd462ee171bb8fd91a3efee9bd1d28dd060","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","private_key":"070b030d06605c46eafadabb979d38f9d4f48cf55e24a96378f4f0bbe2806887","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","private_key":"4ad1a65bb55e2f6d41cc3383b1de11c79bab13723c02d4f5abaf725d6aaea3e4","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","private_key":"bbe3351a79ad82f8b832dc16567dd1bcc24b1897bc9bfec930f3461a61f7d652","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","private_key":"26e548a577ae1fcc718256e75d48d70ed406dda8798f84c967d7dfe45c6aceb5","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","private_key":"97ca855261319532dfa74bf6194b4302c3d2f971adbd462e3437408df6dcbe47","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","private_key":"a762e1b25bed356f9a9e3aed01c7a38e8f57441b6caa18874712ef1159616b57","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","private_key":"53407f7862d16cdfd7beb23612d5d57dda1963cf729766feb046966e15850b32","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","private_key":"f3ffbcce6a7f7bfe25c3ab3ba95dd0574944bb5a09eabda3da69f187c48ea747","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","private_key":"0fc26e702e6bf4755536ef14b178df72099f9d2e818b53ce85f5b5ff3ea6c9c8","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","private_key":"6f1be181439476148e13cd2c39dd8983588047ef5f966091688ce37a01f78441","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","private_key":"b2732f7493e1101eb17248f6a6d83b5811c49cfc13f1aa41a624d1bb3e85368f","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","private_key":"b573a79bddda3cee3997d5c1210e33810dfce4f43a9a47d3f41ad02352d0515e","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","private_key":"3e8547c0320dad0457a7c6d576c1700ac4af59504cae9178faafcd60c9830e99","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","private_key":"dcee5e2db10836dcd5e3bbe14845a6203eebb791ae82200732e6b21d453e0642","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","private_key":"e895b2d5bfbd538d231463563cec8889c8aef0fbeb77acfd3ab9bb75504d39cd","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","private_key":"199b03688e42fbdcdd00b6230f59bf7a0b6ac22f6088c7d398535121f867b30a","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","private_key":"04a50f62b3bd30de9b6a4ca7c72d0fe81f6c111ab99bbbf4bb9c21b6c8983639","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","private_key":"dee1658338c1840984753b1121833d17232db7a62a8ed1b4fc1268e99138385e","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","private_key":"9fa3a527ec0ce68f936c2dadcc080238cfd5a3a462c20462567976eaf1d52810","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","private_key":"26df6d28e33e4da3390df260d9bbad739c31cc494a632239633485872b1ead29","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","private_key":"d7549640c8223b3b3e55195e3b519a85b7af1f1fc26ebbd56c9117a639544593","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","private_key":"16ea03e396aba3e56e9e2d89e53b68e46e51408b090fe2b99e65591ae6cd02c0","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","private_key":"2f111d17fef6870e109950bfd76e7e6db0913a06d14f8f5a311a39f447e65aea","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","private_key":"b20e729862ae141e3134c9eb2ed703957c0fd006f041df213946d66bfe06a3a7","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","private_key":"d35682e43d6382cb9508e5479fc2d09bec82166746bd406cc249f655715ae986","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","private_key":"9d7b2568317659ec35ed53c64f5c1aa0813dde36f1f492139ffefdd91ae0717e","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","private_key":"1177e7fa4a1e785fc30996682cf9ecd265d86943f65d7e3cf4c25cefcd861479","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","private_key":"29e2a9ddf2c5b8914fcf8d3782d464b0be6252d589b2a7daa1ea6b93b205c4f4","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","private_key":"de7a36b57175c1b9dd9686884f73048ea29215a01fdee9f2cf5068218efdc9d6","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","private_key":"209fa24e0d0a335e74967ae3ca2914ea6fb1ac99b9495820e9680855fab3081f","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","private_key":"225e538725db916b0e7be129cbda4da08e6be4ccaef64cf870551466d2658834","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","private_key":"1cf5c454ae9746fb367557d4f4a4a9d22157508dd1b19223b4640a3fa9c1dce8","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","private_key":"e4f81e7a844611f55194d22f62b681f479dadd58596a292cbbf6ef794df1c99a","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","private_key":"cfea4812067444b8816b5d70ed03fe5491d28ca6012a871bcb8aebbd100f9489","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","private_key":"384043ea1944918b9fac6bbbd88341254533ae49e3b2ce16c1df0941b1118303","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","private_key":"2de5004aa7337bd0819c88121cb0e708bc072c153bf94e274d7e786288996630","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","private_key":"aeb73b9ba035e0d3569e9dd5780dea2994151e2b43cb74e0e297fa285ba3d794","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","private_key":"6f192dda3ba98c5d13e94cc2e64ed95478ee64e97b230f224237977bf04cd724","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","private_key":"5c3a125bd1eca6243b28fcbd20a0811d7e09ce602ca98ba5f253435d76e0e4a9","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","private_key":"e4c7dec3dd327bfaa41b91fb8ccdbb96156d1fe464da973445a35f61e5bc6814","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","private_key":"07853d60907494e01f54f879c85c5f3fec6d4d615f9553d12b3da9ea1ad7a4ec","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","private_key":"6de081218acdb9ac4c4b8fbf1fde5f2be3c601cbf9104c970de43c2512c5e4c3","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","private_key":"7b7cb0ca071a27ee059bda50862b7fed343122d2546f5ac5a49dd5b47910530a","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","private_key":"542108cf09fe9447bb772d25802153811dd504943271556789165c6742636520","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","private_key":"87ab72e1c606a3b799ef3f34d3aa14549953c570f569a7b7952bb8f460b05a56","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","private_key":"a568b1f02f9c9129fd2924f704b8948351325edea81e43132c857be97dc7216d","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","private_key":"885083158aab574e1ab94645ea978b0e98a06605b1cbbfc48450f46522476b22","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","private_key":"5ee85ab61759ce457c89801346b14f68f1f16d6c59b2c034a2aef87242488041","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","private_key":"0bc8227f073c115b1ecd2add3e0ce8f58974528279de040eeaf189abfa6bc506","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","private_key":"a548a32f98cf950d6811b01fd764cd17b51d7012b18e944b3bb90dc660e35817","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","private_key":"55c9fd7b7ce7d50376a51050ac0a0a61b4657f9392ad14509bf432758a02b102","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","private_key":"daa4e758bca88df487bb1bcd41e59643256d23f237f96d654010801c07240435","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","private_key":"0090eced227d4fcb0e639349e4164040aa3c9d858531c2df416023c416753a5d","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","private_key":"96f0c30375428cd6184d43806adfbc9a4600e0180b50afa6ce06bfb1581cf1e0","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","private_key":"4738e28b9e3f0920f9c89ac195862299c670e5b354e5bbd644395336a446166f","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","name":"node_177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","enode":"enode://b2ecd384df0c1911a363892a8f9f92276afdadbd9766d5367e9426baaf52db54607ef8ed20c6013bcd31216645721a66b33c2afd1f995665b49ef32554fa55c9@127.0.0.1:0","enr":"0xf88fb84084a65eedfefa09006c370680d7af5b4d4600e9775cc2fa0a778a6ca5adf131810dfcdc8b9509da7bbb1a1a865244daf2d32b34b96a9c005080f94eeaf270099f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b2ecd384df0c1911a363892a8f9f92276afdadbd9766d5367e9426baaf52db54","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"F34jK9upcPSwAbIor5QC4/ygqvAGgqEbyZhPfbS3/ro=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 177e23\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b73b be2b | 34 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n001 3 452b 581a 5602 | 13 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n002 3 255d 3103 3abf | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 3 0acb 0727 0486 | 5 0727 (0) 0486 (0) 00ba (0) 0257 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 154f 1455 | 2 1455 (0) 154f (0)\n007 0 | 0\n008 0 | 0\n009 1 172b | 1 172b (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","private_key":"1286e8188fe5e907890aef4a270d2307e0937dd38d9340f4e56829fd23413f31","name":"node_177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","services":["bzz","pss"],"enable_msg_events":true,"port":40837},"up":true}},{"node":{"info":{"id":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","name":"node_be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","enode":"enode://7f0ebae8d5040cd874605d9ec6c3a7cb63c1b7cf90d06f7d0b0c7066569ef465f68eb09c19058d1c9cde1d99ae351e95196c1feb2a9ce64ef17076510dd0cd7d@127.0.0.1:0","enr":"0xf88fb840daad2aad3a4d7ff125994a1b8646db6d4bee82774004dd547373a34e6b456b4b34d740e306f79da7c50ae15a5d4dfb60af9dd435898e901986b0570d184a8c2e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1037f0ebae8d5040cd874605d9ec6c3a7cb63c1b7cf90d06f7d0b0c7066569ef465","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"vivLj7SzTuaYHmY0uPMpj7vudW9udlZiBKVruGyOwPA=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: be2bcb\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 7d69 177e | 30 452b (0) 581a (0) 5f83 (0) 5e36 (0)\n001 3 c0c2 d3c1 f6e5 | 17 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n002 5 8673 856e 8926 8802 | 8 8802 (0) 8926 (0) 821a (0) 856e (0)\n003 3 afb1 ae60 a12b | 4 a12b (0) afb1 (0) ae60 (0) aabc (0)\n004 2 b73b b374 | 2 b374 (0) b73b (0)\n============ DEPTH: 5 ==========================================\n005 2 b8f9 b8f3 | 2 b8f9 (0) b8f3 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","private_key":"1bfc88f8747bfe3f0686c0dd06c6994f80bc3109cbce619c87194df9c0af35ec","name":"node_be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","services":["bzz","pss"],"enable_msg_events":true,"port":41679},"up":true}},{"node":{"info":{"id":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","name":"node_7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","enode":"enode://73efd5ce9d1348bb96a73682ab0e0523106c449265974c594f34a445de026e1225f2a1e0cd7d95a391563cdda852cb9ed50a12a5ba174447ac1320743429f15a@127.0.0.1:0","enr":"0xf88fb84027a696cdd03ce902b65824023e0014604a449a0ab2819e417b664ea0f292ea690de64c4fec6dc5b80d5f97fb7c03e0168027a60d77a65ee8845dd7a519d7a7f80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10273efd5ce9d1348bb96a73682ab0e0523106c449265974c594f34a445de026e12","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"fWm1cHpLme3ZATF/FVP/FVhqrDUPOODIExjzXWi4Nag=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7d69b5\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 ebf2 fb7e 8802 be2b | 34 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n001 3 255d 3103 154f | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 5 452b 581a 5e36 52fc | 8 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n003 1 6123 | 1 6123 (0)\n============ DEPTH: 4 ==========================================\n004 2 703d 70d0 | 2 70d0 (0) 703d (0)\n005 0 | 0\n006 1 7f80 | 1 7f80 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","private_key":"138b2b1614eba35db1d63a8b4cad155aae9ffe67aeba89da6b77c32d8085978c","name":"node_7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","services":["bzz","pss"],"enable_msg_events":true,"port":37997},"up":true}},{"node":{"info":{"id":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","name":"node_154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","enode":"enode://5383cc445c43a2ed3afe5922fc466e7ad833fadea40c63e1fd3bf6c1beee0db531a26c526994d14249bf854f9b36b49e7416d55407d49a3a70608f02419bc8b9@127.0.0.1:0","enr":"0xf88fb8403a38e49c1e706672d35d764ebcf564cca19c96df63f8777ef17eff0305791fa14a022147e46d186121c4ff0d52488b51e3929b5ba536dffe4e7fb7957f7909940183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035383cc445c43a2ed3afe5922fc466e7ad833fadea40c63e1fd3bf6c1beee0db5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FU/sX6cor5VqFEa9WjXmPXFreagEGXtQ/ZxyWF0ES3c=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 154fec\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 a12b b8f3 f6e5 | 34 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n001 4 581a 5e36 452b 7d69 | 13 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n002 2 274f 3c40 | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 4 00ba 0257 0486 0727 | 5 0727 (0) 0486 (0) 00ba (0) 0257 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 177e 172b | 2 172b (0) 177e (0)\n007 1 1455 | 1 1455 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","private_key":"ce1506c16008e68cab421b02e7de0e8bf64bd8061e84336dd3ee4e7382078bb5","name":"node_154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","services":["bzz","pss"],"enable_msg_events":true,"port":41399},"up":true}},{"node":{"info":{"id":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","name":"node_3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","enode":"enode://f98b58ce571bd762921cf62c8001f481eb582bf905c42e8d40eab48cfe6394065721413958fe1a1df85e350f6075bda55b7a8745eb329b11e462282dbc1e7012@127.0.0.1:0","enr":"0xf88fb840193b2d1eaa7d147a52bd4c4a65a9d70c37b92c837f74d8f919a893605560b33c4d5a6df29825a8a430f4e250e5e3a6ec8ce78ec940c759c0b3369cb52ea8e3c90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f98b58ce571bd762921cf62c8001f481eb582bf905c42e8d40eab48cfe639406","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"PECeW3bpd+4xFaChlUDdZ0XmC4h4/cGlwdmW5+R8qWk=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3c409e\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 821a e6cf c3b2 c461 | 34 821a (0) 856e (0) 87aa (0) 87ac (0)\n001 3 70d0 6123 5602 | 13 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n002 3 0727 0486 154f | 9 0727 (0) 0486 (0) 00ba (0) 0257 (0)\n003 3 274f 255d 248a | 3 274f (0) 255d (0) 248a (0)\n004 1 3103 | 1 3103 (0)\n============ DEPTH: 5 ==========================================\n005 3 38f0 3abf 3b4f | 3 3b4f (0) 3abf (0) 38f0 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","private_key":"4e158a7430c532fe0c5fbd4e063cbce5fbd793a516b0d9b2728daac7741a71b9","name":"node_3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","services":["bzz","pss"],"enable_msg_events":true,"port":33099},"up":true}},{"node":{"info":{"id":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","name":"node_c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","enode":"enode://a8deb108b6c33a1abc50c0ce0041d4c5de23f17171fb3558dc0a4aed942dc887bb56c0917ed3032af073d8b2415e0879e264370a800f64d060f8f8e1c096d04d@127.0.0.1:0","enr":"0xf88fb8409107e601aef81da4e1f9a95006f25aeec3f9d59b329245d0475a4a3347ee4f7e69b4c64a5401e0679d1ab092d618b1d678a77ba22e43159d1d46790338e165e00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a8deb108b6c33a1abc50c0ce0041d4c5de23f17171fb3558dc0a4aed942dc887","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"xGHkMMiHiUu7/04ze2HuRJzxLMB9D8X+QXhdWA0Wrpg=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c461e4\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 5f83 52fc 452b 6123 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 5 b374 87aa 856e 821a | 17 821a (0) 856e (0) 87aa (0) 87ac (0)\n002 2 f211 e558 | 11 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n003 2 d904 d3c1 | 2 d3c1 (0) d904 (0)\n004 1 cb8d | 1 cb8d (0)\n============ DEPTH: 5 ==========================================\n005 2 c0c2 c3b2 | 2 c3b2 (0) c0c2 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","private_key":"978cfc6313655f0d829dc91a0545aa1369f3b0baafc201c8cbc641c965f85b77","name":"node_c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","services":["bzz","pss"],"enable_msg_events":true,"port":43525},"up":true}},{"node":{"info":{"id":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","name":"node_e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","enode":"enode://26b5014af36030418be4bbab747a56da3f0a0b96e77a5c732cfdf7f61ca71d565f2b43bbbb44d2d047a3c549971b88655d62a889afdbb724e8fefe656dbe2b5d@127.0.0.1:0","enr":"0xf88fb840015e82c76a09041b22bbd93a7ea12ce2f51fbc04bb6629d1f8055d626456b7215bbec219530291b84fb78db61bbd25983f693c69d221fa1155ee0947690be72b0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10326b5014af36030418be4bbab747a56da3f0a0b96e77a5c732cfdf7f61ca71d56","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5VgQXSrrWciW9ftwR1sEbZA070WW6c1fVPFsMWRJJB4=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e55810\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6123 70d0 7f80 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 2 87aa 821a | 17 821a (0) 87aa (0) 87ac (0) 8673 (0)\n002 3 d904 d3c1 c461 | 6 d3c1 (0) d904 (0) cb8d (0) c3b2 (0)\n003 3 fb7e f211 f6e5 | 5 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n004 3 eb30 ebf2 e9fd | 3 ebf2 (0) eb30 (0) e9fd (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 e6cf | 1 e6cf (0)\n007 0 | 0\n008 1 e5e1 | 1 e5e1 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","private_key":"62f09d35ddecb1f76c961bd8188912d6ea354de35322e5add87d2eca8154ff74","name":"node_e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","services":["bzz","pss"],"enable_msg_events":true,"port":32823},"up":true}},{"node":{"info":{"id":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","name":"node_e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","enode":"enode://44a78245fbc89e776a8d27b4548fe61dc789a02628d3246a364971e9ebb1497b72d487ce9d7a0745d667c8adba7db2bf35aac7e327a49728bad8184be24dc311@127.0.0.1:0","enr":"0xf88fb840126f89ca6d674b29c05eb8517aa48cc039a7f289bc17d7e1bc24485e90fa504a1ab8b4c6df373aff9c75943533a3b5955016e0ef89824e23c4cb1b06b86d41d60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10344a78245fbc89e776a8d27b4548fe61dc789a02628d3246a364971e9ebb1497b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6f1c1/jSjKFyo9Mx2kAemFPTEhkjyBv4J4f3mJAJ5Do=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e9fd5c\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6123 70d0 7f80 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 2 821a 9629 | 17 9629 (0) 821a (0) 87aa (0) 87ac (0)\n002 2 d3c1 d904 | 6 d3c1 (0) d904 (0) cb8d (0) c3b2 (0)\n003 2 fb7e f0e9 | 5 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n004 3 e6cf e5e1 e558 | 3 e6cf (0) e5e1 (0) e558 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 eb30 ebf2 | 2 ebf2 (0) eb30 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","private_key":"e1866d6c66f9cdff0845058b114b9a15a4967274ad9cda558e102be0a746e9dd","name":"node_e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","services":["bzz","pss"],"enable_msg_events":true,"port":36597},"up":true}},{"node":{"info":{"id":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","name":"node_f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","enode":"enode://39fc37e1b4c1d8d2906469ea880448186e5246e849c0b6f79952d9254173f1d88e5e06d9331f14bd5052073d2c2d28106ca84ae08fab04d3217db4233fd750dd@127.0.0.1:0","enr":"0xf88fb84088c04103f60facca986ee3d5509cb1e58a231d8dc712d3df77c917f1aa9c27df5a9b0797512f9d61477075a6b766f14ea88d4ae2311b8ae23274327c0d9ba93c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10339fc37e1b4c1d8d2906469ea880448186e5246e849c0b6f79952d9254173f1d8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8OkA7ze6rWoWharxcA6SkOfpwNXTDjJlIE7JQ0RSSLM=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f0e900\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6123 70d0 7f80 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 3 821a 9629 aabc | 17 9629 (0) 821a (0) 8673 (0) 87aa (0)\n002 2 d904 d3c1 | 6 d3c1 (0) d904 (0) c461 (0) c3b2 (0)\n003 2 e6cf e9fd | 6 e6cf (0) e5e1 (0) e558 (0) ebf2 (0)\n004 1 fb7e | 1 fb7e (0)\n005 1 f6e5 | 1 f6e5 (0)\n============ DEPTH: 6 ==========================================\n006 2 f211 f35a | 2 f211 (0) f35a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","private_key":"d85d087c4d2770c08517c1b719cd6805713af1046aeba2bd6db5e31402388df2","name":"node_f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","services":["bzz","pss"],"enable_msg_events":true,"port":45551},"up":true}},{"node":{"info":{"id":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","name":"node_aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","enode":"enode://df29ae71bd1cab0ab806f7dea6545ae649dc9e0640e8d1bef8f6b518c4a75e822f1ac2a937b117eed3faf5f9a4e718d31899d4a6466c33fd6ee520daae0650f3@127.0.0.1:0","enr":"0xf88fb84046f68bd288eb808ea2aa0bbf41922e0e52f2bf6dbd65f83ce2d9632d94262fcf2af844233c694aec3e77cb82eb24aff844c4aa24be379900ec5323a3218b8c430183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103df29ae71bd1cab0ab806f7dea6545ae649dc9e0640e8d1bef8f6b518c4a75e82","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"qrxYfdw7fUk86OhJsV02QmXFfTo6UmEwdqWzGATLdT8=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: aabc58\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 172b 6123 7f80 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 3 fb7e f6e5 f0e9 | 17 d3c1 (0) d904 (0) c461 (0) c3b2 (0)\n002 3 821a 87aa 9629 | 8 9629 (0) 821a (0) 8673 (0) 87aa (0)\n003 2 b73b b374 | 5 b374 (0) b73b (0) be2b (0) b8f9 (0)\n004 1 a12b | 1 a12b (0)\n============ DEPTH: 5 ==========================================\n005 2 afb1 ae60 | 2 afb1 (0) ae60 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","private_key":"2338394db2f3550707f783ab13a9427021f5e6be8b3431444d735c6506fc2b2d","name":"node_aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","services":["bzz","pss"],"enable_msg_events":true,"port":34323},"up":true}},{"node":{"info":{"id":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","name":"node_f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","enode":"enode://f5975ee0b5c78d6bc4a68b9b35744cec5ac5922b8da008a4b68a8e9ceee9a6d3a817b21d8b51f9fe35123317bc22cbd1dd37d18f93c433a8d82d25774bc84f59@127.0.0.1:0","enr":"0xf88fb8406c21f34341248451d882a4655a586feeb202f8cb7d47b0da9bd8a4f5f915128228efd4998dcfb8d43543463364a2937db016284e0bb78cfec37208079bb910020183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f5975ee0b5c78d6bc4a68b9b35744cec5ac5922b8da008a4b68a8e9ceee9a6d3","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"9uUUjSQhrhHooQmFLJ2ne75Jj55u06o2F1Wh/z/Sm3Q=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f6e514\npopulation: 23 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 5508 154f 1455 | 30 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n001 8 8926 b73b b8f9 be2b | 17 9629 (0) 821a (0) 8673 (0) 87aa (0)\n002 3 cb8d c3b2 c0c2 | 6 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n003 5 eb30 ebf2 e6cf e558 | 6 e6cf (0) e5e1 (0) e558 (0) ebf2 (0)\n004 1 fb7e | 1 fb7e (0)\n============ DEPTH: 5 ==========================================\n005 3 f0e9 f35a f211 | 3 f211 (0) f35a (0) f0e9 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","private_key":"f6740a5cf46069cee8cdfefdd049e563958cbda7e4c59315d0276a92915efe0a","name":"node_f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","services":["bzz","pss"],"enable_msg_events":true,"port":40421},"up":true}},{"node":{"info":{"id":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","name":"node_1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","enode":"enode://b5e652612f7909a70ecaf98ed27cc962687c895a349dcc80a326794a291a3851a3ba447345a30263a39c29f730276e1b1810813d39975649c50537c0febf67f0@127.0.0.1:0","enr":"0xf88fb8405d344eda0bf71d02e1171dbf8e3b0ae13b7091d138dbc1ed3f568b08dea67f526ec263da507139112160bd3260e7f3582b1fe88aa0501cf52d73650bbdb2d6ac0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b5e652612f7909a70ecaf98ed27cc962687c895a349dcc80a326794a291a3851","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"FFXUcTtRNOkVdRe4SwThUpLPGNPgi5XWnxlkj7njgj4=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 1455d4\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 a12b f6e5 | 34 9629 (0) 821a (0) 8673 (0) 87aa (0)\n001 4 5f83 6123 703d 7f80 | 13 6123 (0) 703d (0) 70d0 (0) 7d69 (0)\n002 3 3103 3abf 38f0 | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 4 0257 00ba 0727 0486 | 5 0727 (0) 0486 (0) 00ba (0) 0257 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 172b 177e | 2 172b (0) 177e (0)\n007 1 154f | 1 154f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","private_key":"50925145323eadd436d028b14956413b9ce4a6e6e12ee61bc6f39b7bdeb607ce","name":"node_1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","services":["bzz","pss"],"enable_msg_events":true,"port":35787},"up":true}},{"node":{"info":{"id":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","name":"node_38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","enode":"enode://48f1b561316fb88b3f6966b6b77793eb73ade705dffda5b5e889665c61f61eb65fc53b12a893affa1626e2c066c218fbf0cacc47ae235f284b99d1ddb70a1b7b@127.0.0.1:0","enr":"0xf88fb840ac0a5221c7f96140e1c2b39e3ce570681198f21499c4ac2d4cf71f13084d1d463ea56145f4bc0ae39e1bcf6f728c0fb8bcb53b6f59ff82ca0c91761364ae2aeb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10348f1b561316fb88b3f6966b6b77793eb73ade705dffda5b5e889665c61f61eb6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"OPBa9AzQ3Dl06JbiSqdevaHJbwzn2eP/DqhAYVGGMH0=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 38f05a\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9629 821a 856e | 34 9629 (0) 821a (0) 8673 (0) 87aa (0)\n001 2 6123 5508 | 13 6123 (0) 703d (0) 70d0 (0) 7d69 (0)\n002 2 0acb 1455 | 9 00ba (0) 0257 (0) 0486 (0) 0727 (0)\n003 3 274f 255d 248a | 3 274f (0) 255d (0) 248a (0)\n004 1 3103 | 1 3103 (0)\n005 1 3c40 | 1 3c40 (0)\n============ DEPTH: 6 ==========================================\n006 2 3b4f 3abf | 2 3b4f (0) 3abf (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","private_key":"72aaff493375ffe3fdf32b207dec2bf4b6947a83b0be8a39d016a620e5d84166","name":"node_38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","services":["bzz","pss"],"enable_msg_events":true,"port":46291},"up":true}},{"node":{"info":{"id":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","name":"node_0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","enode":"enode://f3639f1bd30e3cf2653b9a4f9d20fab2897ba468020ec336c3eff2d6a4b27c4d3f7f01a6e2cbc6496e8ab4b435a53a518f45a78752b9ecce6ff119cd83eae04c@127.0.0.1:0","enr":"0xf88fb84093cbe4a72d6dc31819c9cd24e75d7178f02135c11b41668880b6c4ce743b2602056aa9103ed6fbdaada4c85913a2f4bf90dd092942db61a1df54c4269cc2f46f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f3639f1bd30e3cf2653b9a4f9d20fab2897ba468020ec336c3eff2d6a4b27c4d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"CssXM0JTQIp3MgIEHUpnx4c7DnTpTIbjND+0cL3L7YI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0acb17\npopulation: 20 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 b8f3 821a 8926 9629 | 34 9629 (0) 821a (0) 8673 (0) 87aa (0)\n001 5 57d9 6123 70d0 703d | 13 6123 (0) 703d (0) 70d0 (0) 7d69 (0)\n002 3 274f 3b4f 38f0 | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 2 177e 172b | 4 172b (0) 177e (0) 154f (0) 1455 (0)\n============ DEPTH: 4 ==========================================\n004 4 0727 0486 0257 00ba | 4 00ba (0) 0257 (0) 0486 (0) 0727 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","private_key":"f732331fdd132dd9b4c64ae5c42247591f96dc911fe6a706b14a10ce3a8ed9d6","name":"node_0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","services":["bzz","pss"],"enable_msg_events":true,"port":44253},"up":true}},{"node":{"info":{"id":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","name":"node_f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","enode":"enode://e745eb6d9e95b82f6b4a6fbd9fb578c5ec53de4bf64bf008a25af4595cf01cd932b1070c197157ebeddcf79d4659acc3a6244177421656d601eb1a108f6c8ab8@127.0.0.1:0","enr":"0xf88fb840fd81f60522c3b56a658b661d599993ff0aca7eaadae4a28bff72103db1ffda910194afe2e3799b9f30d6b7c9134a70f7d05f79b082b70dba836d6ae907720f5a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102e745eb6d9e95b82f6b4a6fbd9fb578c5ec53de4bf64bf008a25af4595cf01cd9","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"81pH4dVqbY5cqtUNiOVcg/87lksnm1ilDV5UT/kYeGQ=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f35a47\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 703d 6123 0acb | 30 6123 (0) 703d (0) 70d0 (0) 7d69 (0)\n001 3 9629 821a 856e | 17 9629 (0) 821a (0) 8673 (0) 87aa (0)\n002 2 d904 d3c1 | 6 d3c1 (0) d904 (0) c461 (0) c3b2 (0)\n003 2 ebf2 e5e1 | 6 ebf2 (0) eb30 (0) e9fd (0) e6cf (0)\n004 1 fb7e | 1 fb7e (0)\n005 1 f6e5 | 1 f6e5 (0)\n============ DEPTH: 6 ==========================================\n006 1 f0e9 | 1 f0e9 (0)\n007 1 f211 | 1 f211 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","private_key":"bc31ff1a3354902df6fdba93d648599c420dc962166cd94ba5c9c88781f7b1ac","name":"node_f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","services":["bzz","pss"],"enable_msg_events":true,"port":40235},"up":true}},{"node":{"info":{"id":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","name":"node_e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","enode":"enode://12f560588c3394b54f4be445fbc804457f104c736613aa7516dcdc935bc1004c7489dbd657445bbcfd5d1b4f85571f2805789d680c6e7bdb08950b548093de42@127.0.0.1:0","enr":"0xf88fb840510aeffd2b76786cd66e778ad5f1c6301affb8c7f1a226cd32e3d61f23da281c79562ae15cbd94ce4a39dff5596492b2716cf58c476ce701e22a641d60a8a4af0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10212f560588c3394b54f4be445fbc804457f104c736613aa7516dcdc935bc1004c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5eFm+F6p4mT8JXNFI4adm5FvOIAEy0r5lolWzhSnpSI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e5e166\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6123 703d 7f80 | 30 6123 (0) 703d (0) 70d0 (0) 7d69 (0)\n001 3 8802 856e b8f3 | 17 9629 (0) 821a (0) 8673 (0) 87aa (0)\n002 2 d3c1 d904 | 6 d3c1 (0) d904 (0) c461 (0) c3b2 (0)\n003 3 f6e5 f211 f35a | 5 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n004 2 ebf2 e9fd | 3 e9fd (0) ebf2 (0) eb30 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 e6cf | 1 e6cf (0)\n007 0 | 0\n008 1 e558 | 1 e558 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","private_key":"25c5ec054b6f8975276f7c37381908b15ba3fdd204996e80188c27a45a120156","name":"node_e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","services":["bzz","pss"],"enable_msg_events":true,"port":42811},"up":true}},{"node":{"info":{"id":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","name":"node_b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","enode":"enode://1eafb72a59e875d1e4c6fcfc48e3b83060dc7edf1745dc4b4d69920b5c498a0aa5028ac463be2a03331b3f50634295010786205311e2dde4214f5375d846be46@127.0.0.1:0","enr":"0xf88fb840f39e6fb0bc59342b1e5379ca1dfe35c07ed85b72975e03d86b5eaacb2845d6013b15e070b59162b9da5f6a9459e9d69522dfd0dd5dc6eab1478e26446d3adf640183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021eafb72a59e875d1e4c6fcfc48e3b83060dc7edf1745dc4b4d69920b5c498a0a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uPNFlAvO2IMbMAef8qJ2q2X77Q3YV1yTo8zYx70byLE=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8f345\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 00ba 0acb 154f | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 2 cb8d e5e1 | 17 d3c1 (0) d904 (0) c461 (0) c3b2 (0)\n002 3 821a 8802 9629 | 8 9629 (0) 821a (0) 8673 (0) 87ac (0)\n003 3 afb1 ae60 a12b | 4 a12b (0) afb1 (0) ae60 (0) aabc (0)\n004 2 b73b b374 | 2 b374 (0) b73b (0)\n============ DEPTH: 5 ==========================================\n005 1 be2b | 1 be2b (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 b8f9 | 1 b8f9 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","private_key":"f213075c2bb9ce044c3ea7e245d0e841eeb4448cb914bad8b7cc2aaf223494f5","name":"node_b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","services":["bzz","pss"],"enable_msg_events":true,"port":32901},"up":true}},{"node":{"info":{"id":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","name":"node_cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","enode":"enode://b86efbaace42f2f41e4faeb180734ba7b3bcd88ce25a4b671f0522e50bccc0544084a0f72f57d3183269bc433e8522e008fcf70990130bd428e679cd2ef2301e@127.0.0.1:0","enr":"0xf88fb840fd41041292742e2d87cfac656804056de57d38166539d75aa87d8ea4028c8b905a7395663eced2fb92ca0b03214bb0fd07d36096c4fa09e3b51edc25293577d50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b86efbaace42f2f41e4faeb180734ba7b3bcd88ce25a4b671f0522e50bccc054","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"y43xg+f+pPgI7VadP6CmwmZw9kUbmp9I6GWYccK5qwI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: cb8df1\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 8 274f 0486 0727 452b | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 5 8673 87ac 87aa b374 | 17 9629 (0) 821a (0) 8673 (0) 87ac (0)\n002 3 ebf2 f6e5 fb7e | 11 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n003 2 d904 d3c1 | 2 d904 (0) d3c1 (0)\n============ DEPTH: 4 ==========================================\n004 3 c461 c3b2 c0c2 | 3 c461 (0) c3b2 (0) c0c2 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","private_key":"492d4a83cd01c80cafe080a10aba2708adad9d57c896ddd20c3f1783fb8c8ae2","name":"node_cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","services":["bzz","pss"],"enable_msg_events":true,"port":37973},"up":true}},{"node":{"info":{"id":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","name":"node_c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","enode":"enode://5307ee476b7d4a7cc8fff3c91a49faff9ef919880ec9f6c2bbf3e57f27bd769f5692a37e70531c902a3d1e519fcbfee9cbd946d008e3653287786ead5083cedd@127.0.0.1:0","enr":"0xf88fb8400e91dade29f3fd1bfebe010d282d7b43d12bdf0bcae8e2e549a2e1ed15785ac4504f8048792eba8a6518ad1ae28b39fd2b21dac0adf4e65609f6da91de0b618f0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1035307ee476b7d4a7cc8fff3c91a49faff9ef919880ec9f6c2bbf3e57f27bd769f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"wMLXOr0rarw7oLCYUgxMw+2mG1/J0atC69BOzCXe0iQ=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c0c2d7\npopulation: 12 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0acb 00ba 0486 | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 2 be2b 8926 | 17 be2b (0) b8f9 (0) b8f3 (0) b374 (0)\n002 2 f211 f6e5 | 11 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n003 2 d3c1 d904 | 2 d904 (0) d3c1 (0)\n004 1 cb8d | 1 cb8d (0)\n============ DEPTH: 5 ==========================================\n005 1 c461 | 1 c461 (0)\n006 1 c3b2 | 1 c3b2 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","private_key":"2c6df66c8a1843928d4ff1c1f86261392e9ba859e1d50dbc7e47344968446e7d","name":"node_c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","services":["bzz","pss"],"enable_msg_events":true,"port":46541},"up":true}},{"node":{"info":{"id":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","name":"node_892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","enode":"enode://d2b6d26acb63edf3d8f2e7ba86fce1304441bb3a8c9138e4069412e556fe677e49bf669824144f7f2f752c1ba56d21e1d5b2583b7ce06db6f8e466929bb54fa3@127.0.0.1:0","enr":"0xf88fb84030e09ff37ec6e84f56137ccc06cfe91eec3cfba76fd5f655d4220c8984c2bf74694a268165a67c073623dd0c8ef0879ce3f78eddf5ce61832a0f755c5342a26a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d2b6d26acb63edf3d8f2e7ba86fce1304441bb3a8c9138e4069412e556fe677e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iSYD/GT+FprRVRkGDPsdJ3gK3/YNpg+GpiDyv5p8oeE=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 892603\npopulation: 18 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 00ba 0acb 57d9 | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 3 f6e5 fb7e c0c2 | 17 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n002 5 b73b be2b afb1 ae60 | 9 b8f9 (0) b8f3 (0) be2b (0) b374 (0)\n003 1 9629 | 1 9629 (0)\n============ DEPTH: 4 ==========================================\n004 5 821a 856e 8673 87aa | 5 821a (0) 8673 (0) 87ac (0) 87aa (0)\n005 0 | 0\n006 0 | 0\n007 1 8802 | 1 8802 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","private_key":"44e05a26b9222f67f884d2093377f119349ef6710b86f7b7edc2f0e61793a1ea","name":"node_892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","services":["bzz","pss"],"enable_msg_events":true,"port":33109},"up":true}},{"node":{"info":{"id":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","name":"node_57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","enode":"enode://0527dc36e6d408034587180c2cadb429ac1ea5e4cf5ffaadf60e8af1bbef30368fc234f75f7ede63d70df8d932f3fae54ba14fdbdb033a18ec2e914b85594f0a@127.0.0.1:0","enr":"0xf88fb840783a349f43c192ad36b674821f63954fd4de02eb076100f9dab68b0fe5eafe8051d208f26c93e9ad609307b169dba4ea5236c4cb557365c16b94e96fc85372eb0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1020527dc36e6d408034587180c2cadb429ac1ea5e4cf5ffaadf60e8af1bbef3036","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"V9kR+GS+epDYgHvD/s1ljFaX1wzz3cwd3g3ZvQ/X+2c=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 57d911\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d3c1 eb30 8926 | 34 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n001 4 0acb 0257 00ba 0486 | 17 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n002 2 70d0 6123 | 5 6123 (0) 70d0 (0) 703d (0) 7d69 (0)\n003 1 452b | 1 452b (0)\n004 3 581a 5e36 5f83 | 3 5e36 (0) 5f83 (0) 581a (0)\n005 1 52fc | 1 52fc (0)\n============ DEPTH: 6 ==========================================\n006 1 5508 | 1 5508 (0)\n007 1 5602 | 1 5602 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","private_key":"34c80a58a443bb0e1518a14f812731f34ed2a04d27aad1978a43edfdc46b1219","name":"node_57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","services":["bzz","pss"],"enable_msg_events":true,"port":44125},"up":true}},{"node":{"info":{"id":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","name":"node_eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","enode":"enode://f3a08e5df6a6bcf751846b6ace6f57a31a6d449df1d48df065dea5bfc74586b8933323a5b063ec3e7ae58f7e038d7c218ad2294587029267bb4c092388609234@127.0.0.1:0","enr":"0xf88fb84056d0cb9ccc119c03a9f1d32aedfd19f6e27d6813d9a2ea1813e35ac670286db72f8b2d4481d401b7f7464d2cacd28c10aacbde6fdb7a0b4a83ede973c90042310183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f3a08e5df6a6bcf751846b6ace6f57a31a6d449df1d48df065dea5bfc74586b8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6zB6bzM7MOvR47K1G9gJUxHUhwfWyiyBRH0BrUU+JUI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: eb307a\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3abf 57d9 | 30 177e (0) 172b (0) 154f (0) 1455 (0)\n001 3 8802 b73b a12b | 17 b73b (0) b374 (0) b8f9 (0) b8f3 (0)\n002 2 d3c1 d904 | 6 d904 (0) d3c1 (0) c0c2 (0) c3b2 (0)\n003 2 f6e5 fb7e | 5 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n004 2 e558 e6cf | 3 e6cf (0) e558 (0) e5e1 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 e9fd | 1 e9fd (0)\n007 0 | 0\n008 1 ebf2 | 1 ebf2 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","private_key":"46e33ba68cfba7f42ff80b2a4e6e42af54661467f574487ae9dd64d58b7f1bff","name":"node_eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","services":["bzz","pss"],"enable_msg_events":true,"port":43461},"up":true}},{"node":{"info":{"id":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","name":"node_3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","enode":"enode://51deaa308d9269c160365fdfcbb25f60a03a82f2efaff308a0eb09a18cf138beda36562ac1c16957da7172ce518f770d922c053efc2c3bce06419cc6e0928014@127.0.0.1:0","enr":"0xf88fb84053019049f1135e4048d6971781321d1f8b972fd8a2a99e110a64833ce5a36834048b662125d1775ff49679add18eb3d76c36c8ec11be8647e6c523b5fe93a8160183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10251deaa308d9269c160365fdfcbb25f60a03a82f2efaff308a0eb09a18cf138be","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Or/p9Pao00tTbQJVH0XAOjWYe5T30zs6DcMK00sV+Co=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3abfe9\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 b73b eb30 | 34 b73b (0) b374 (0) b8f9 (0) b8f3 (0)\n001 2 452b 7f80 | 13 452b (0) 5f83 (0) 5e36 (0) 581a (0)\n002 2 177e 1455 | 9 154f (0) 1455 (0) 177e (0) 172b (0)\n003 3 255d 248a 274f | 3 274f (0) 255d (0) 248a (0)\n004 1 3103 | 1 3103 (0)\n005 1 3c40 | 1 3c40 (0)\n============ DEPTH: 6 ==========================================\n006 1 38f0 | 1 38f0 (0)\n007 1 3b4f | 1 3b4f (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","private_key":"93982f270ea11ec36ba55e97235856f2ed6fab52aa3d0249bf628e2b9c91d9dd","name":"node_3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","services":["bzz","pss"],"enable_msg_events":true,"port":34193},"up":true}},{"node":{"info":{"id":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","name":"node_7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","enode":"enode://51bcf947a12e8ac505ec8b402224676a504d2c39b71e446006083d741c461c94ab190ab816afaef8a6b24df9b56e6e9f8a30eb2bebd6a7df58e67e31c8c4e405@127.0.0.1:0","enr":"0xf88fb840f65e01347df378f48f5e7ebbb387f2f2cde36dd9aaede48ab5819adf690d1f87361843b84b8b6ab295420b7bf4eb9b12d169c9c53f2ef3d01db492bf9ef0735c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10351bcf947a12e8ac505ec8b402224676a504d2c39b71e446006083d741c461c94","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"f4AOWnlwIw9Sc+SZccfuUh3pfmn1bdVU4w3RLW+1x0k=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 7f800e\npopulation: 19 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 7 f0e9 e9fd e5e1 e558 | 34 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n001 4 0acb 1455 3103 3abf | 17 154f (0) 1455 (0) 177e (0) 172b (0)\n002 4 452b 5602 5508 581a | 8 452b (0) 5f83 (0) 5e36 (0) 581a (0)\n003 1 6123 | 1 6123 (0)\n============ DEPTH: 4 ==========================================\n004 2 703d 70d0 | 2 703d (0) 70d0 (0)\n005 0 | 0\n006 1 7d69 | 1 7d69 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","private_key":"015cba3c04c983b51b26debe83456fc5ce953a720c5d618632a551198845ce87","name":"node_7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","services":["bzz","pss"],"enable_msg_events":true,"port":37409},"up":true}},{"node":{"info":{"id":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","name":"node_ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","enode":"enode://8d29ea4346f1503c80ef55fdb63d33a2d857bbda499bfd296afd75a9ae9badd16b3328fe1ba73b31a2b3cd6600d7fd33d2bfc6dcd1e61dc369f505b16c9df1d5@127.0.0.1:0","enr":"0xf88fb84025b8f01e1b8f2908011afc21980bd9d8b915e89b8851d351a509936bc3202d886b91cb5b9a1c2ba97ae71a5f776d2075237ee89af24379ed746fcf3e3e8eafe60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1038d29ea4346f1503c80ef55fdb63d33a2d857bbda499bfd296afd75a9ae9badd1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"rmAj1BbIe7Qz652NRPl1MXl9KSd0ME2ZaSOj/meIdHg=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ae6023\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 248a 7f80 | 30 154f (0) 1455 (0) 177e (0) 172b (0)\n001 4 e6cf fb7e f6e5 f211 | 17 fb7e (0) f6e5 (0) f0e9 (0) f211 (0)\n002 2 8926 9629 | 8 9629 (0) 8926 (0) 8802 (0) 821a (0)\n003 3 be2b b8f3 b8f9 | 5 b8f9 (0) b8f3 (0) be2b (0) b73b (0)\n004 1 a12b | 1 a12b (0)\n============ DEPTH: 5 ==========================================\n005 1 aabc | 1 aabc (0)\n006 0 | 0\n007 1 afb1 | 1 afb1 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","private_key":"22c2fb65420237f8b89643102304e7ec4785bd727e32cf8d324a08c0c83bbcc9","name":"node_ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","services":["bzz","pss"],"enable_msg_events":true,"port":45469},"up":true}},{"node":{"info":{"id":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","name":"node_a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","enode":"enode://89914e07e3f818e5857dcf267822b10d9cf455fa7a2fa5b39ec98ad1f931ca0e8b152354d3514f26c9f1414aa10d95d96089819546a41a6f91a6e3c6d3399463@127.0.0.1:0","enr":"0xf88fb8400dc63a9d8ef5bc6b6aeef2fa584f5336ea901d50124c1606f8b2378173ebc2fd66efbc2bdcea10e1ae4587ac22cda0b5d5808a02865c0519648ccce893f76c9a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10389914e07e3f818e5857dcf267822b10d9cf455fa7a2fa5b39ec98ad1f931ca0e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"oSsSCBttSegjeNUjl2W8qMX0MjKzAWO8RpJMw+mOEXc=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: a12b12\npopulation: 19 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 1455 154f 3103 | 30 154f (0) 1455 (0) 177e (0) 172b (0)\n001 3 e6cf eb30 f6e5 | 17 f6e5 (0) f0e9 (0) f211 (0) f35a (0)\n002 5 9629 8673 821a 8802 | 8 9629 (0) 8926 (0) 8802 (0) 821a (0)\n003 5 b73b b374 b8f3 b8f9 | 5 b8f9 (0) b8f3 (0) be2b (0) b73b (0)\n============ DEPTH: 4 ==========================================\n004 3 aabc afb1 ae60 | 3 aabc (0) afb1 (0) ae60 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","private_key":"d7090c3295beb236fb881805333f666cea56d6dea2f42bf3b4ac5b607c63808d","name":"node_a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","services":["bzz","pss"],"enable_msg_events":true,"port":46387},"up":true}},{"node":{"info":{"id":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","name":"node_3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","enode":"enode://2566b869c3ead5eb369d120bdcfb5915162a7ab2b1ad732e88d9d977100c395a12867c8d6d2ce3be2dfed18ce3fc994523093fc48b01e1f7f6c1b9c6d2d2564e@127.0.0.1:0","enr":"0xf88fb84085e944ff27136b601bf818ec370a678631bb4b993981f6f37d4239904fd4c05c7a7bb06485217f380c84013e3ff57efd5f916325ce8929a2429a12af8a95a2bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022566b869c3ead5eb369d120bdcfb5915162a7ab2b1ad732e88d9d977100c395a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"MQPNC3ZU9ZO3Io0XFSCfJ+M5rQFAGalzhBOiDLasY+Q=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3103cd\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 856e a12b | 34 f6e5 (0) f0e9 (0) f35a (0) f211 (0)\n001 3 7f80 7d69 6123 | 13 7f80 (0) 7d69 (0) 703d (0) 70d0 (0)\n002 3 0486 177e 1455 | 9 154f (0) 1455 (0) 177e (0) 172b (0)\n003 3 274f 255d 248a | 3 274f (0) 255d (0) 248a (0)\n============ DEPTH: 4 ==========================================\n004 4 3b4f 3abf 38f0 3c40 | 4 3c40 (0) 38f0 (0) 3b4f (0) 3abf (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","private_key":"95e6a35c4e714e2f717338757d55e091a179f90a24a9b669a758172f5685ca01","name":"node_3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","services":["bzz","pss"],"enable_msg_events":true,"port":36983},"up":true}},{"node":{"info":{"id":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","name":"node_856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","enode":"enode://bed85f28b7443ca051f8cc01c76cc4b73c1f4d737c273cbb726decbe6e2f3b4b22529e7ae589c40805650784c8d367e53525041825bc8377747743342d1d5ffd@127.0.0.1:0","enr":"0xf88fb84059a5c37cb0e55cbcde717bcf88c22f5c5a45df4aa83358375f04b00efa5e65203ef0371f0755c1afc0d541bf9fab3e7292d4150fbafab8fbb2d627ef6b7605b50183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bed85f28b7443ca051f8cc01c76cc4b73c1f4d737c273cbb726decbe6e2f3b4b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hW4nymiamyr0zT7ZWPIWK5xxB0xyaGisehCsL299Ah0=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 856e27\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 38f0 3103 | 30 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n001 3 c461 e5e1 f35a | 17 eb30 (0) ebf2 (0) e9fd (0) e6cf (0)\n002 2 b8f9 be2b | 9 b8f9 (0) b8f3 (0) be2b (0) b73b (0)\n003 1 9629 | 1 9629 (0)\n004 2 8926 8802 | 2 8926 (0) 8802 (0)\n005 1 821a | 1 821a (0)\n============ DEPTH: 6 ==========================================\n006 3 8673 87aa 87ac | 3 8673 (0) 87ac (0) 87aa (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","private_key":"35fb992eb3f4de7a3ac9e68c81b4f1e62d1f474eedd1bbd0d6b588d4a123faa3","name":"node_856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","services":["bzz","pss"],"enable_msg_events":true,"port":42951},"up":true}},{"node":{"info":{"id":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","name":"node_88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","enode":"enode://e15ed0ea7080c438ee8f5e359fe828ea27f1cd348449b819cf9ec4df58dbac3a08423e6d525f011d5f41cecc440a49c9b12c6dc8ef3380b5bff38cf6b9ce0e11@127.0.0.1:0","enr":"0xf88fb840617403b8f0d402717d1f39440b4cf23b906c9df7c10b4c846599b0a4787e289b29afdd85207fcfe39147c0467347702bc44ce5da6fe7200a0e57dc2baa99433d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103e15ed0ea7080c438ee8f5e359fe828ea27f1cd348449b819cf9ec4df58dbac3a","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"iAJLn2hDRrd1wcHrbpcJA0E1lXq0GOwAJyXxDviRmDc=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 88024b\npopulation: 18 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 7f80 7d69 255d | 30 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n001 3 ebf2 eb30 e5e1 | 17 eb30 (0) ebf2 (0) e9fd (0) e6cf (0)\n002 5 a12b b73b b374 b8f3 | 9 b8f9 (0) b8f3 (0) be2b (0) b73b (0)\n003 1 9629 | 1 9629 (0)\n============ DEPTH: 4 ==========================================\n004 5 821a 8673 87aa 87ac | 5 821a (0) 8673 (0) 87ac (0) 87aa (0)\n005 0 | 0\n006 0 | 0\n007 1 8926 | 1 8926 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","private_key":"31dbecd3ca7aa370e3a50aaac4f98bef73f2527b1896da7ed889a43ad771c2e8","name":"node_88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","services":["bzz","pss"],"enable_msg_events":true,"port":40113},"up":true}},{"node":{"info":{"id":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","name":"node_255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","enode":"enode://bb25c5b1634689128e4f6bd8c31f0ac70a9b0dd37e9fbeda681e96ae04a19553f5534314a8e675e517d5ca0013bf79de3893a40c1c2734ef4243d1db4ed08060@127.0.0.1:0","enr":"0xf88fb840a4996422aeb3198fc58ab411a6910daa8a05d960911ef17cc7b14152653cd219771997a20423baa0c51b882a843135d99c31b01eabed91a4818f2cb573ab00660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102bb25c5b1634689128e4f6bd8c31f0ac70a9b0dd37e9fbeda681e96ae04a19553","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JV240xGmanRDsV0ECvoGYm1pGcDSCm/Q9a+jTocoFzI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 255db8\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 d3c1 d904 821a 8802 | 34 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n001 3 7d69 5e36 581a | 13 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n002 3 0257 177e 172b | 9 154f (0) 1455 (0) 177e (0) 172b (0)\n003 5 3b4f 3abf 38f0 3c40 | 5 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 274f | 1 274f (0)\n007 1 248a | 1 248a (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","private_key":"2ced13cc7febab95479e76339b80139922095bf66b8d47541c9bc22789123a9f","name":"node_255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","services":["bzz","pss"],"enable_msg_events":true,"port":40487},"up":true}},{"node":{"info":{"id":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","name":"node_581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","enode":"enode://9096985dab960112b5511301c88595af2dc0a90852fc6a98c0970cd20b0b11ada5293e4f8b066fbaf3b0a207d51cf0e3d0a50ada11446814054b39e6265cda7e@127.0.0.1:0","enr":"0xf88fb8402f9d16c72c43c1856f7d778c531ea65e02a0450905075f9bdddc9c2938b042941177b8854391706ee69ca82d23eb5654fb434b767fa732ca8167c32c33f5e00a0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029096985dab960112b5511301c88595af2dc0a90852fc6a98c0970cd20b0b11ad","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"WBrZLUNHg0hQwW54GYPAm+NAkXUno13ZZQxaPaH8gis=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 581ad9\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9629 d904 cb8d | 34 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n001 4 177e 154f 0727 255d | 17 154f (0) 1455 (0) 177e (0) 172b (0)\n002 3 703d 7d69 7f80 | 5 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n003 1 452b | 1 452b (0)\n004 4 52fc 5508 57d9 5602 | 4 52fc (0) 5508 (0) 5602 (0) 57d9 (0)\n============ DEPTH: 5 ==========================================\n005 2 5e36 5f83 | 2 5e36 (0) 5f83 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","private_key":"39aed43a62aad671048b07d25383bb957d88b3bd53c0a52a9b73f132241f47bd","name":"node_581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","services":["bzz","pss"],"enable_msg_events":true,"port":38101},"up":true}},{"node":{"info":{"id":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","name":"node_0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","enode":"enode://90b8c983944e79f3081d0e6e7538f2e6fe78ba7a63412aa32fb3b08b02ed6efad44f45d6e2db83d67a03d0242e3ffd8e62703f0e4e6b74e48331c6b3a8c51db1@127.0.0.1:0","enr":"0xf88fb8409af7b76fd8c8b31f077a6f2fd5be9cd7b6f5f7d1c0dcd1d517334d649fc9f8140f432c4c4641c970093b46b75371213bf7e3e21e3b0e486e4160a092d71f53310183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10390b8c983944e79f3081d0e6e7538f2e6fe78ba7a63412aa32fb3b08b02ed6efa","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ByfX5owxnTpMxaFh3QWyp+cjUME55lwgkMEjLrvtX3g=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0727d7\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 d3c1 d904 cb8d | 34 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n001 2 6123 581a | 13 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n002 2 3c40 274f | 8 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n003 4 172b 177e 1455 154f | 4 154f (0) 1455 (0) 177e (0) 172b (0)\n004 1 0acb | 1 0acb (0)\n============ DEPTH: 5 ==========================================\n005 2 0257 00ba | 2 00ba (0) 0257 (0)\n006 1 0486 | 1 0486 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","private_key":"312ee0e8a214abbd131a0e03c9c30710cbea185776d03bc7e6319eb1ce1d8c9d","name":"node_0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","services":["bzz","pss"],"enable_msg_events":true,"port":34603},"up":true}},{"node":{"info":{"id":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","name":"node_6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","enode":"enode://9a0af04a8b33cefc1178e827baadd6211134e17e6d17dda345d9a1af47e657e487d46382b137bd50829a3b49663160237c9c4ae9e5aa57249791029026b71ad8@127.0.0.1:0","enr":"0xf88fb8408d49aa1cfaa238a09955f64747940c56d3e4efcb913e43f3f12bc586038ec8a40405758ebe81aeba159213fe543a4c60c4119097c6eec92157eba0659cd944b60183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029a0af04a8b33cefc1178e827baadd6211134e17e6d17dda345d9a1af47e657e4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"YSO3d33jvCWR4wNqmt66H32OyTPQXuT+ABeRCJaSXRs=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 6123b7\npopulation: 33 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 13 aabc ebf2 e9fd e5e1 | 34 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n001 9 38f0 3b4f 3c40 3103 | 17 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n002 7 452b 5e36 5f83 52fc | 8 452b (0) 5508 (0) 5602 (0) 57d9 (0)\n============ DEPTH: 3 ==========================================\n003 4 703d 70d0 7f80 7d69 | 4 7d69 (0) 7f80 (0) 703d (0) 70d0 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","private_key":"a32ad9e8eb034068af76013c458a289d8bb4faf6000aa63666404d8be13bf5d6","name":"node_6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","services":["bzz","pss"],"enable_msg_events":true,"port":37555},"up":true}},{"node":{"info":{"id":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","name":"node_04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","enode":"enode://0314da640d0324270183587d5ee38b6d7f82082def277f1fa70f2dff054becdaab3c31aa4921f4bdeb7f4c31adc8a70ad09609868642101b3e63eaab91727d69@127.0.0.1:0","enr":"0xf88fb84082ed1045bb3ffd5e7d12ace534321c835e31ed2db07e7eb5bfc3bb200d7e0fb23f55e4975e73ed36e6de025624ddc499148b4d9d8001734be2cd014a9e84cb8d0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1030314da640d0324270183587d5ee38b6d7f82082def277f1fa70f2dff054becda","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"BIYlUO84+DEIXzeOJTOt3CyQQog5RjEgjEnLM2Fa2js=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 048625\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 b374 cb8d c0c2 | 34 be2b (0) b8f9 (0) b8f3 (0) b73b (0)\n001 2 57d9 6123 | 13 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n002 4 3c40 3103 274f 248a | 8 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n003 4 172b 177e 154f 1455 | 4 154f (0) 1455 (0) 177e (0) 172b (0)\n004 1 0acb | 1 0acb (0)\n============ DEPTH: 5 ==========================================\n005 2 0257 00ba | 2 00ba (0) 0257 (0)\n006 1 0727 | 1 0727 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","private_key":"dadc2a0436842f90010d95ae0b3d5e1612d72a28854573e679a8a336f5370e21","name":"node_04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","services":["bzz","pss"],"enable_msg_events":true,"port":46049},"up":true}},{"node":{"info":{"id":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","name":"node_248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","enode":"enode://7f0f82c32f25e019be8cba115eba217f82432b010a401a273037351dca0b5c61089825d7b034801b2876318500c566b1991d1efcde1466bdcfee6a128c3bf81a@127.0.0.1:0","enr":"0xf88fb840bfa5193ddceefc65d57437eff8a7a774354003033fd5224a4d2edc41e43b3f5d50f4ea4346ea045e6985ccb53ff48ba17b317e791010248dbfa996b83c429aad0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1027f0f82c32f25e019be8cba115eba217f82432b010a401a273037351dca0b5c61","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"JIouYYCR3urEWPR0FhZAXgvF/9oan5ElMH4yx4FyinU=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 248a2e\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 e6cf ae60 | 34 aabc (0) afb1 (0) ae60 (0) a12b (0)\n001 2 5e36 452b | 13 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n002 4 172b 0257 00ba 0486 | 9 154f (0) 1455 (0) 177e (0) 172b (0)\n003 5 3103 3c40 3b4f 3abf | 5 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 1 274f | 1 274f (0)\n007 1 255d | 1 255d (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","private_key":"5eed72a77466e0457f248c4b926ad580c90bac7ee1e11bca5d5d20a9d2bfab5d","name":"node_248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","services":["bzz","pss"],"enable_msg_events":true,"port":35737},"up":true}},{"node":{"info":{"id":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","name":"node_172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","enode":"enode://a9a9c0be91c80c150ed76c716242763e92cfd34102db458614b97a2fdc1aa9046a873d2e16d6b720a82abef0c3d3afe50c548e82064081f6d3722bfaa8ad5a7a@127.0.0.1:0","enr":"0xf88fb840af989a0c29715008d7c936ddbe8af501a4904339da4b799f99369a5ae9937a805b29f031c54f88d358a298b4ecd360bc06b55108ecaecb17a31f9902f367f44c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a9a9c0be91c80c150ed76c716242763e92cfd34102db458614b97a2fdc1aa904","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"Fyu7yqV8N8JDFKhPvQud5F+DpGAWvSOV3Crbqxu5C1w=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 172bbb\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 afb1 aabc fb7e | 34 aabc (0) afb1 (0) ae60 (0) a12b (0)\n001 2 6123 70d0 | 13 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n002 2 255d 248a | 8 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n003 5 0486 0727 0257 00ba | 5 0acb (0) 00ba (0) 0257 (0) 0727 (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 1455 154f | 2 1455 (0) 154f (0)\n007 0 | 0\n008 0 | 0\n009 1 177e | 1 177e (0)\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","private_key":"2016f3bc79c1f5a91c126a6f548bdd080c149e46cb1165cf1002068c6fcda411","name":"node_172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","services":["bzz","pss"],"enable_msg_events":true,"port":42303},"up":true}},{"node":{"info":{"id":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","name":"node_fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","enode":"enode://f9175ab3d792f133155a959560213cc1c01279ed6e348a68906d8a96a87596baf128933900518e8d6aa1fda56b7139b3dc74dbb690196147ab6480b498c65dd1@127.0.0.1:0","enr":"0xf88fb8400494ee532414babfb684947ef027e954af32abe1255703856100999a37a3b27d4e3e6728f46532dffdb89272cb1948f5bc6df766b40fdd2797bed3c8148074870183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103f9175ab3d792f133155a959560213cc1c01279ed6e348a68906d8a96a87596ba","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"+35nFmFKyUG3Thipvz3tY7wAtFMiG0CXb3g2daHAbGM=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: fb7e67\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 5508 7d69 6123 172b | 30 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n001 5 8926 b73b aabc ae60 | 17 aabc (0) afb1 (0) ae60 (0) a12b (0)\n002 3 c3b2 cb8d d904 | 6 d904 (0) d3c1 (0) c461 (0) c3b2 (0)\n003 5 e558 e6cf e9fd eb30 | 6 e6cf (0) e558 (0) e5e1 (0) e9fd (0)\n============ DEPTH: 4 ==========================================\n004 4 f6e5 f0e9 f35a f211 | 4 f6e5 (0) f0e9 (0) f35a (0) f211 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","private_key":"8b2673cf73b2e993026f6a2c87caae15dba45720ad187f9c5f5ddbdc7d1b32a4","name":"node_fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","services":["bzz","pss"],"enable_msg_events":true,"port":40621},"up":true}},{"node":{"info":{"id":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","name":"node_f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","enode":"enode://3595a73fde880c53304b49c39683267c4fa90fa5773dc084a1affc7999314e2dab768ab82091fe068bb824cd54277129cc6f5d0065d9f2dfcf3392c048dcb7c5@127.0.0.1:0","enr":"0xf88fb840e00692e06d4b89b7bdd43adeba6626c5e4bba8988449a048ff3ce2ba802dad3a6f8c07c23a5d3ff37562cec16cff3eae3fb2dfd4e825a8e07ea04a4fa1a054b80183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1033595a73fde880c53304b49c39683267c4fa90fa5773dc084a1affc7999314e2d","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"8hE3bUbm4JZu6YTPWDeAUkCyulPFrHUxXFbb3/uVemU=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: f21137\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 6123 3b4f | 30 6123 (0) 7f80 (0) 7d69 (0) 703d (0)\n001 2 b73b ae60 | 17 aabc (0) afb1 (0) ae60 (0) a12b (0)\n002 2 c0c2 c461 | 6 c461 (0) c0c2 (0) c3b2 (0) cb8d (0)\n003 3 e5e1 e558 e6cf | 6 e6cf (0) e558 (0) e5e1 (0) e9fd (0)\n004 1 fb7e | 1 fb7e (0)\n005 1 f6e5 | 1 f6e5 (0)\n============ DEPTH: 6 ==========================================\n006 1 f0e9 | 1 f0e9 (0)\n007 1 f35a | 1 f35a (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","private_key":"cc85dc8007f84a1a4cef3b3f84345cf6212741fe8451882613368b13b8a21170","name":"node_f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","services":["bzz","pss"],"enable_msg_events":true,"port":33599},"up":true}},{"node":{"info":{"id":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","name":"node_3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","enode":"enode://185474977590e399a3bde82710d24deebb17ec414f3fa17d70550ccc7fd742d881f76c5ad58e5854b3cdc16d27789332ba975d840218a363adf9950251006852@127.0.0.1:0","enr":"0xf88fb84041802a5fbc1bf6e457fed3480b3d38fc2bd3d3fa40ca619ef6a09d58e5c1873958cd6cb13ab6d0709a9ee1172496e623f5c6d1ab202915f54b3f3bff6d1923ef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102185474977590e399a3bde82710d24deebb17ec414f3fa17d70550ccc7fd742d8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"O0+n1ykSkGihKB72hJS2HQVSA96MNqX+J68+tWWDIQg=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 3b4fa7\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 87aa f211 | 34 aabc (0) afb1 (0) ae60 (0) a12b (0)\n001 2 6123 703d | 13 6123 (0) 7f80 (0) 7d69 (0) 703d (0)\n002 2 0acb 00ba | 9 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n003 3 255d 248a 274f | 3 274f (0) 255d (0) 248a (0)\n004 1 3103 | 1 3103 (0)\n005 1 3c40 | 1 3c40 (0)\n============ DEPTH: 6 ==========================================\n006 1 38f0 | 1 38f0 (0)\n007 1 3abf | 1 3abf (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","private_key":"6ad42cf2ce8ec2d947696df2ab9fd0b464376964980f542777118020ce0e5d7b","name":"node_3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","services":["bzz","pss"],"enable_msg_events":true,"port":33419},"up":true}},{"node":{"info":{"id":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","name":"node_87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","enode":"enode://35b27d332ce1f35bec177a8c636960cbfb79cf58bb3f2d1b874231b382a0cdc590c4e8353decd2fe3b1b4f8542b03f2171425bff56edccbbd15272b3cace9a0e@127.0.0.1:0","enr":"0xf88fb8407dbd42f95e5ae03d53a9da07975ce124ffe18be69ad76c445cd2cb001e85da44048d49dca08d4efae5512882c98113f26c2f540eba64a1fd289c35fafa598c040183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10235b27d332ce1f35bec177a8c636960cbfb79cf58bb3f2d1b874231b382a0cdc5","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"h6p33O8ZsMhqPoq2TI8S2acz53p+Eryuw6TNhQTFp3U=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 87aa77\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3b4f 70d0 | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 4 e558 c461 cb8d d904 | 17 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n002 2 afb1 aabc | 9 aabc (0) afb1 (0) ae60 (0) a12b (0)\n003 1 9629 | 1 9629 (0)\n004 2 8926 8802 | 2 8802 (0) 8926 (0)\n005 1 821a | 1 821a (0)\n006 1 856e | 1 856e (0)\n============ DEPTH: 7 ==========================================\n007 1 8673 | 1 8673 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 87ac | 1 87ac (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","private_key":"f61f38cd9320f5d79569492609fbc059d0c28376d87733386c34ed0ee05f9b52","name":"node_87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","services":["bzz","pss"],"enable_msg_events":true,"port":45677},"up":true}},{"node":{"info":{"id":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","name":"node_70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","enode":"enode://75f2fb6caf9b53cf0b82b5c6751b2d06f05decbce5a26d8196d2240fdc8b8cb7cfdac4f123838a8895d81578515dcd5b07ed1ff432667c175ca092bb241e5d81@127.0.0.1:0","enr":"0xf88fb840ca369a7e8bad45d547ba1b43054168da9813f7ebf8143be24488270f9cf1a3373939a5b2c228aa93a6857cc0b50be949c909531bb4269dfce238c9433aca848e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10375f2fb6caf9b53cf0b82b5c6751b2d06f05decbce5a26d8196d2240fdc8b8cb7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cNBxCziU+r8ys0O5tZM594bs45iVx+2l8WLMV1ycglM=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 70d071\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 f0e9 e558 e9fd ebf2 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 4 3c40 0acb 00ba 172b | 17 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n002 2 57d9 52fc | 8 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n003 1 6123 | 1 6123 (0)\n============ DEPTH: 4 ==========================================\n004 2 7d69 7f80 | 2 7d69 (0) 7f80 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 703d | 1 703d (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","private_key":"c1017fa00e291b4183d30ab17ef32b438afcfd234be6cecbb9897bdb585a9a86","name":"node_70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","services":["bzz","pss"],"enable_msg_events":true,"port":39215},"up":true}},{"node":{"info":{"id":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","name":"node_52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","enode":"enode://b0a77e6fe1c5bc0275bbb7eca27007740ae80fe424fe6acf055bf84789dc99a14280d8c08d2d3a0cc7c2b996c091a5059ed083a8f289704b6e82234b20815447@127.0.0.1:0","enr":"0xf88fb840b35c45f9ad29f754a3318f771140615e64a3fc523df8dc7d6e4aba4bcafa4642422ae39afe0eba129bf9519377d0026bd546255261f4388dc0a7c89d2752e23c0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103b0a77e6fe1c5bc0275bbb7eca27007740ae80fe424fe6acf055bf84789dc99a1","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"UvweIZvFGPuvKJ2jI22Y2xtj3xIn6jJYEilnFHOtw70=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 52fc1e\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 c461 cb8d b374 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 2 00ba 0257 | 17 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n002 3 6123 7d69 70d0 | 5 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n003 1 452b | 1 452b (0)\n004 3 581a 5f83 5e36 | 3 581a (0) 5e36 (0) 5f83 (0)\n============ DEPTH: 5 ==========================================\n005 3 5508 57d9 5602 | 3 57d9 (0) 5602 (0) 5508 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","private_key":"5128d9e0c20a65b00ada80037610ab8459cb99a9bc3cbc467f90e3d94868636e","name":"node_52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","services":["bzz","pss"],"enable_msg_events":true,"port":37815},"up":true}},{"node":{"info":{"id":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","name":"node_b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","enode":"enode://bddef211431764890d0c556f02492d623440dadef8220aa3d14cc5a4a176c0c6a3d9c51db26fa8d00e3b2919ae01708c6ccbcfb89300889f763e88e88f1cf62f@127.0.0.1:0","enr":"0xf88fb840fa92fb538dc1f10b99bd1a5ff04542a013336d8c78c82d02689092893de2558d3be1b76e10a87b2976ab77dba021345e4da01bcf57e968f16179262cbb7f7b610183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103bddef211431764890d0c556f02492d623440dadef8220aa3d14cc5a4a176c0c6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"s3RM9vGAwuuaHe0Obd1gDV95JoOHuXMzBw+1oYOv/Yk=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b3744c\npopulation: 16 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 0486 274f 52fc | 30 0acb (0) 00ba (0) 0257 (0) 0486 (0)\n001 3 cb8d c461 c3b2 | 17 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n002 3 9629 8802 8673 | 8 9629 (0) 8802 (0) 8926 (0) 821a (0)\n003 3 a12b afb1 aabc | 4 a12b (0) aabc (0) ae60 (0) afb1 (0)\n============ DEPTH: 4 ==========================================\n004 3 be2b b8f9 b8f3 | 3 be2b (0) b8f3 (0) b8f9 (0)\n005 1 b73b | 1 b73b (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","private_key":"f9b4401c90628262d75ec2b1472b181d0ba586f207e512d8c2bff501f6969006","name":"node_b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","services":["bzz","pss"],"enable_msg_events":true,"port":39313},"up":true}},{"node":{"info":{"id":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","name":"node_274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","enode":"enode://cd29948d6981370c284ab296a55d43dbe7203b54193b763b157977ad2952be300cafaad9cb5d51517a90c64254bc6a0e9b50e40f37487d9a824ff9f6a442d543@127.0.0.1:0","enr":"0xf88fb8400df64191c8bf59e9ac7ad80c636ae992d431ba5d833d277a482b3d374ef08eb8697eef5cbddfdf88bb8e260cb007083c6e9333a667d0cb7e4560630ceeb951820183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103cd29948d6981370c284ab296a55d43dbe7203b54193b763b157977ad2952be30","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"J0+LdS7wyEpcMJgGawtNHAK4obFzD1ntlAZFNe7aR1Y=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 274f8b\npopulation: 20 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 cb8d 87ac 821a b8f9 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 4 703d 5508 5e36 5f83 | 13 6123 (0) 7f80 (0) 7d69 (0) 703d (0)\n002 4 154f 0acb 0486 0727 | 9 0acb (0) 0486 (0) 0727 (0) 00ba (0)\n003 5 3103 3c40 38f0 3b4f | 5 3103 (0) 3c40 (0) 38f0 (0) 3abf (0)\n============ DEPTH: 4 ==========================================\n004 0 | 0\n005 0 | 0\n006 2 255d 248a | 2 255d (0) 248a (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","private_key":"7ff83f61deceac3be4f65ab071b30e2906485aa9b9cf9762915bdab24ad3095d","name":"node_274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","services":["bzz","pss"],"enable_msg_events":true,"port":37995},"up":true}},{"node":{"info":{"id":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","name":"node_5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","enode":"enode://a75b279e617f6db28bac0fc33337d87e284116d2e3e069685fe1f42f46fdea15c51124ed699840d171f47d4778553e545475580f510a2ec4f830fedf460df0d6@127.0.0.1:0","enr":"0xf88fb840ef24e78bea8bf572427a95c9bf7cb2faffec0a4a430715acd4aadcdcdb78125e54a5d26f68b4d1be1551eb00e29157acb4b1692b27e80546b20bfd2dd0cd43a70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102a75b279e617f6db28bac0fc33337d87e284116d2e3e069685fe1f42f46fdea15","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"X4MhWM+E4OSKNRiVWHixauJTRn9UZk607BIT/vw/Mnc=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5f8321\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 cb8d c461 c3b2 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 2 1455 274f | 17 1455 (0) 154f (0) 177e (0) 172b (0)\n002 2 6123 703d | 5 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n003 1 452b | 1 452b (0)\n004 4 52fc 5508 5602 57d9 | 4 57d9 (0) 5602 (0) 5508 (0) 52fc (0)\n============ DEPTH: 5 ==========================================\n005 1 581a | 1 581a (0)\n006 0 | 0\n007 1 5e36 | 1 5e36 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","private_key":"d19565076e49cecdfa86edf90fdaae204fb957d2aa8d76158101247c371fbecd","name":"node_5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","services":["bzz","pss"],"enable_msg_events":true,"port":45427},"up":true}},{"node":{"info":{"id":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","name":"node_452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","enode":"enode://dea46c610b096ce0543a2ecbed5434bf207a65a42457ddbc6c3132b6809d56a4b3037879121fd53a0c2c0c92fb3736f8373c987c1ba95992e53e2dbf8f35cb79@127.0.0.1:0","enr":"0xf88fb84083953db305d8b6d3f2a3d38e0e8f81c2381c85a3d80ffe54c2a6582a7076e63124e85a302030bc72cf9e748b50ce103fb12c6cd072472f538ff96ccdb08359300183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103dea46c610b096ce0543a2ecbed5434bf207a65a42457ddbc6c3132b6809d56a4","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"RSsH1zQz59bCBaUEQZrhAAGaoZIHIwEScrWWYH22aEo=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 452b07\npopulation: 19 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 c461 cb8d 9629 8673 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 5 3abf 248a 177e 154f | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 3 7d69 7f80 6123 | 5 6123 (0) 7d69 (0) 7f80 (0) 703d (0)\n============ DEPTH: 3 ==========================================\n003 7 52fc 5508 57d9 5602 | 7 57d9 (0) 5602 (0) 5508 (0) 52fc (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","private_key":"92e76eb57823fd78556776b404da0b21c27ef8c4824adef769ea1c5f49ae3db9","name":"node_452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","services":["bzz","pss"],"enable_msg_events":true,"port":33293},"up":true}},{"node":{"info":{"id":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","name":"node_86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","enode":"enode://2733db14205f39cf4a5f52580a937dccc7220e36a80b7c541c95e9f5f1ab651bd96f451fecc2e2cdab225fc0e37fc63b70f3a4e84d99ceb7c2d7f1bf0a0f39f6@127.0.0.1:0","enr":"0xf88fb84044d30c7582fe27aa3b8c55da3f032e7cb56b288e44baf86177cfde6ed4c9149015288e5ba011d1c31348e0f182578ce8e67d5005e9643a93d79062b0b49214570183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1022733db14205f39cf4a5f52580a937dccc7220e36a80b7c541c95e9f5f1ab651b","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hnNaRtp2sxMvcpspO02FAuk57Lp3a42Fs65z76IYS18=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 86735a\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 452b 5e36 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 2 cb8d c3b2 | 17 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n002 4 a12b afb1 be2b b374 | 9 b73b (0) b374 (0) be2b (0) b8f3 (0)\n003 1 9629 | 1 9629 (0)\n004 2 8802 8926 | 2 8926 (0) 8802 (0)\n005 1 821a | 1 821a (0)\n006 1 856e | 1 856e (0)\n============ DEPTH: 7 ==========================================\n007 2 87aa 87ac | 2 87aa (0) 87ac (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","private_key":"b24570a9ec33187bd0150552ac01cdd88eec842a46287b6ac1b2deb18f33e085","name":"node_86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","services":["bzz","pss"],"enable_msg_events":true,"port":40543},"up":true}},{"node":{"info":{"id":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","name":"node_5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","enode":"enode://6828133036c9b44a750ebe723643ebb654f1e58df2ceeebc03acfb272369884cb2d2d655af0643f45967522375b8ffead57932e55b3b7dcfb52c9f7d82f137b9@127.0.0.1:0","enr":"0xf88fb84028bf1f9f6157f4c3f2d4ef7e1ea62299c768b52e33444503387ea891297151581142a59adab791688ddb3eac52f9b5edfedc501289011d1b817c4cbe2bada5770183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036828133036c9b44a750ebe723643ebb654f1e58df2ceeebc03acfb272369884c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"XjZUK7vA1wIxydAHQssw/M8/IG7s8QoPNDMqKYbIb/s=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 5e3654\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 9629 87ac 8673 | 34 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n001 4 154f 274f 255d 248a | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 3 6123 7d69 703d | 5 6123 (0) 7f80 (0) 7d69 (0) 703d (0)\n003 1 452b | 1 452b (0)\n004 4 52fc 5508 57d9 5602 | 4 57d9 (0) 5602 (0) 5508 (0) 52fc (0)\n============ DEPTH: 5 ==========================================\n005 1 581a | 1 581a (0)\n006 0 | 0\n007 1 5f83 | 1 5f83 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","private_key":"89f0ff7aa444ba31932f2d98ccf6dfd9c65ff023efd774671320ecaf9a928885","name":"node_5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","services":["bzz","pss"],"enable_msg_events":true,"port":45057},"up":true}},{"node":{"info":{"id":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","name":"node_87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","enode":"enode://fd65f331dd55b301498b1fd8690370c2150ce0c0cb0eba8fafb9401b873683998d605be7cbf6b1e4653a44decd3ce45eb6666582fb64a1549b8d6f6ea5136ccc@127.0.0.1:0","enr":"0xf88fb84067a97cfc4b4ead1783d6733994223dd4f8e0a4b58e380a6b43e24efb3992b7d765533669304855d20d5c0b1970f6756f7294840f8d7caf98d1292c63a1ae46860183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102fd65f331dd55b301498b1fd8690370c2150ce0c0cb0eba8fafb9401b87368399","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"h6z2SyLFeXUXGNwJPADIKzn+twI/5TxkhrKIlgrZ4UY=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 87acf6\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 274f 5e36 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 2 cb8d ebf2 | 17 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n002 2 b73b b8f9 | 9 b73b (0) b374 (0) be2b (0) b8f3 (0)\n003 1 9629 | 1 9629 (0)\n004 2 8926 8802 | 2 8802 (0) 8926 (0)\n005 1 821a | 1 821a (0)\n006 1 856e | 1 856e (0)\n============ DEPTH: 7 ==========================================\n007 1 8673 | 1 8673 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 1 87aa | 1 87aa (0)\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","private_key":"9037526f177112177c3d058d3b13b501be3a83fdd3c1e99b947fc4282b4ea6ec","name":"node_87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","services":["bzz","pss"],"enable_msg_events":true,"port":39033},"up":true}},{"node":{"info":{"id":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","name":"node_ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","enode":"enode://6e0b7fe07cf0a0ef6aff0adebd4fa523361aa0a557c6d363f9e618c229187bba266e046891e4d574f089cb9a13f952a3be1d3484b2917e7a07d8f0504f24e32d@127.0.0.1:0","enr":"0xf88fb840ea01ea00dc23b440bab5e4b3afbb32e20216d4bb47fda6ac71084c371a93e32e5fa1f8064f95b4756488093c95804591ca4cf7045cae8e2d84a75c6f998a6ee10183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036e0b7fe07cf0a0ef6aff0adebd4fa523361aa0a557c6d363f9e618c229187bba","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"6/Jc5CeQUQa3BiXACE3LEXlkpNS5lR9Zd0V9pXQbcWw=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: ebf25c\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 6123 7d69 70d0 | 30 6123 (0) 7d69 (0) 7f80 (0) 70d0 (0)\n001 2 8802 87ac | 17 b73b (0) b374 (0) be2b (0) b8f3 (0)\n002 2 cb8d d3c1 | 6 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n003 3 f35a f6e5 fb7e | 5 fb7e (0) f6e5 (0) f0e9 (0) f35a (0)\n004 2 e558 e5e1 | 3 e5e1 (0) e558 (0) e6cf (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 1 e9fd | 1 e9fd (0)\n007 0 | 0\n008 1 eb30 | 1 eb30 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","private_key":"a5091bd57fcc7b35a7f062cffd9498b8ca19657267318836a47b545deb40052a","name":"node_ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","services":["bzz","pss"],"enable_msg_events":true,"port":34261},"up":true}},{"node":{"info":{"id":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","name":"node_d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","enode":"enode://9dbd240d54a8ec88749a933200a7985b59dad0875db66a334b61ddf1a0475851fe15d0a2c521bb9b9c8dd762f98d16fb1606e18aaa7e9be9635a70684f792ce1@127.0.0.1:0","enr":"0xf88fb84081bae7fd011c17a28aec0c170fcf86fce22719550c958b1b76570e8ff83a371f434558ff6b1c828ee71f3809adc8e7e3ff1b17ab1c6a2ea47fa94ffcb9a2f6c00183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039dbd240d54a8ec88749a933200a7985b59dad0875db66a334b61ddf1a0475851","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"08Ga1MGrya8Dv/wavJcX9Odl1f/3rndiA0OLrJTQGAY=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d3c19a\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 6123 5602 57d9 255d | 30 57d9 (0) 5602 (0) 5508 (0) 52fc (0)\n001 2 b8f9 be2b | 17 b374 (0) b73b (0) be2b (0) b8f3 (0)\n002 8 f35a f0e9 e6cf e558 | 11 fb7e (0) f6e5 (0) f0e9 (0) f35a (0)\n============ DEPTH: 3 ==========================================\n003 4 cb8d c461 c0c2 c3b2 | 4 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n004 1 d904 | 1 d904 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","private_key":"9e4ad8ba562de45511544b4f652f51689e2ad6dcfe4324845b41cab2a1cdb499","name":"node_d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","services":["bzz","pss"],"enable_msg_events":true,"port":42733},"up":true}},{"node":{"info":{"id":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","name":"node_0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","enode":"enode://9a31745dfa11805bdde500a1cfb7d3c0df78681ccd7705384e39e7c6b90278255f7273815bae322e633c7a7e7267f6c310d98ae8b849c34c87f94c40528e54f5@127.0.0.1:0","enr":"0xf88fb840a1f769829999e7af043cecab4b6b39ce1d53fdaf5a02a960165c8eda587bfd0378ad69db24c3f47258aaad5a06acf5dfd842cf65ba503e4cd72580a85176d6290183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1039a31745dfa11805bdde500a1cfb7d3c0df78681ccd7705384e39e7c6b9027825","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"AlftRr1JJxMG/tAScBn9VNtHIoTQAJnxDK3X6DWIpjo=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 0257ed\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d904 d3c1 | 34 9629 (0) 8802 (0) 8926 (0) 821a (0)\n001 3 5602 57d9 52fc | 13 52fc (0) 57d9 (0) 5602 (0) 5508 (0)\n002 2 255d 248a | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 3 172b 1455 154f | 4 154f (0) 1455 (0) 172b (0) 177e (0)\n004 1 0acb | 1 0acb (0)\n============ DEPTH: 5 ==========================================\n005 2 0727 0486 | 2 0486 (0) 0727 (0)\n006 1 00ba | 1 00ba (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","private_key":"93e56d43d2445522babc78fe39d069e01dced5497755d2a0a5690b1b3bc7f5aa","name":"node_0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","services":["bzz","pss"],"enable_msg_events":true,"port":39565},"up":true}},{"node":{"info":{"id":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","name":"node_d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","enode":"enode://a7d3655360abbdb952e9fdf7575d8fb2930309cf2d41bb6a7c8e33f0fb424c1e39c847da1cb0ec0bef9f7569e687f3d71ff62764ed431c2e149f839e060a8d61@127.0.0.1:0","enr":"0xf88fb8404ea64b440fd4d8c1d58f6d37ea7fa76455fb2e1df09a99d151cd5837622939a442f0b9e20b90df55a6c93c013fa1a6e2b6df5ed709823b48d4485e34a03687f70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103a7d3655360abbdb952e9fdf7575d8fb2930309cf2d41bb6a7c8e33f0fb424c1e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"2QT22HkMwjUGP1RmFSHDoZfj6c3Z27zWdl7GzaXY97Q=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d904f6\npopulation: 21 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 581a 6123 703d 255d | 30 581a (0) 5e36 (0) 5f83 (0) 52fc (0)\n001 2 87aa 821a | 17 8802 (0) 8926 (0) 821a (0) 856e (0)\n002 8 f35a f0e9 fb7e e9fd | 11 fb7e (0) f6e5 (0) f0e9 (0) f35a (0)\n============ DEPTH: 3 ==========================================\n003 4 cb8d c461 c3b2 c0c2 | 4 cb8d (0) c461 (0) c0c2 (0) c3b2 (0)\n004 1 d3c1 | 1 d3c1 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","private_key":"b53f894c8449d42e7dfbb557649b7fd8816b55d7fd57c3ed65a65c5fdc643478","name":"node_d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","services":["bzz","pss"],"enable_msg_events":true,"port":39481},"up":true}},{"node":{"info":{"id":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","name":"node_703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","enode":"enode://123c89683b99e7d2cb71f5e7d6d6fad3200c8c9129dd11844158320310a15d658bdf8af970f938bbe2e97f72f08405e8c323d49f1c84a7b8cbc8c94bdb1ac762@127.0.0.1:0","enr":"0xf88fb8404488d9cd1ca1b9bdb277610eac83b22a38260188c4604d95f5d9b673feb11b6e262970fefd02bb8685d3be492dd5950f2d3db07395f949562dbcc9c154cc77bc0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102123c89683b99e7d2cb71f5e7d6d6fad3200c8c9129dd11844158320310a15d65","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"cD3HasckRXyAWrzB7S4/MhghQJ+0zwGF4vB+vEwYFE8=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 703dc7\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 4 afb1 e5e1 f35a d904 | 34 8802 (0) 8926 (0) 856e (0) 8673 (0)\n001 4 0acb 1455 274f 3b4f | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 3 581a 5f83 5e36 | 8 581a (0) 5e36 (0) 5f83 (0) 52fc (0)\n003 1 6123 | 1 6123 (0)\n============ DEPTH: 4 ==========================================\n004 2 7d69 7f80 | 2 7f80 (0) 7d69 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 1 70d0 | 1 70d0 (0)\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","private_key":"e16c1c8c92402bfd9f8fe2a57e37c01f1898f2f128430398ac33ae7482108ebc","name":"node_703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","services":["bzz","pss"],"enable_msg_events":true,"port":36893},"up":true}},{"node":{"info":{"id":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","name":"node_afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","enode":"enode://50e65aecad41df245ddc2f29869d81db24b988a216918b80b305904ed62647ce8c03cc7fdcee80bbe864ca008714bce3d055bbfb50bec1214ae67ba54b9126bb@127.0.0.1:0","enr":"0xf88fb8401f728d3897ecb9512cf5eb7a662998136041c670409700a9f59b5e9b8a04a81e395e1d3f21b92032fb70f5ab6ffc3b648f6b884268426117ba50407330ee9eef0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10350e65aecad41df245ddc2f29869d81db24b988a216918b80b305904ed62647ce","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"r7HQuNGx9qNBOEwfCBj2souF/v5qRaiSVS3k3lN59qU=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: afb1d0\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 172b 00ba 703d | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 3 e6cf fb7e f6e5 | 17 fb7e (0) f6e5 (0) f35a (0) f211 (0)\n002 3 8926 87aa 8673 | 8 8926 (0) 8802 (0) 856e (0) 8673 (0)\n003 5 b73b b374 be2b b8f3 | 5 b374 (0) b73b (0) be2b (0) b8f3 (0)\n004 1 a12b | 1 a12b (0)\n============ DEPTH: 5 ==========================================\n005 1 aabc | 1 aabc (0)\n006 0 | 0\n007 1 ae60 | 1 ae60 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","private_key":"4354e176e57a83691528c333e221af5d016371701e1d7f08607a0a04f5fca409","name":"node_afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","services":["bzz","pss"],"enable_msg_events":true,"port":33425},"up":true}},{"node":{"info":{"id":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","name":"node_00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","enode":"enode://d2088cb0561220a69e8efa4945b89411db2f73bd1432a997f9cf0f4316eda2a7f5962c0b0d5b314fea4cb73dc4df7fedcccc2027eb9d4cedf7fbe996d7f5e0bf@127.0.0.1:0","enr":"0xf88fb84063cbdaf9b29653c80c1532a4963d23258dc89555d21522053f86d7a73b54520d64eee9fa218232119ae212b2c9b0d27e5b8cacf6f3c727bf3dc4cbbf690dd51e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103d2088cb0561220a69e8efa4945b89411db2f73bd1432a997f9cf0f4316eda2a7","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ALpsYbLWSA9T9Iw97zrIVYfZt6kmWNIcI1/Q/dwkaFA=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 00ba6c\npopulation: 18 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 c0c2 8926 9629 b8f3 | 34 fb7e (0) f6e5 (0) f35a (0) f211 (0)\n001 4 70d0 452b 57d9 52fc | 13 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n002 2 248a 3b4f | 8 274f (0) 255d (0) 248a (0) 3103 (0)\n003 3 1455 154f 172b | 4 154f (0) 1455 (0) 172b (0) 177e (0)\n004 1 0acb | 1 0acb (0)\n============ DEPTH: 5 ==========================================\n005 2 0727 0486 | 2 0486 (0) 0727 (0)\n006 1 0257 | 1 0257 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","private_key":"5a24ca759ff05fd20635c180866850474c9548f77adb55e3dd1b4745a871f0b7","name":"node_00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","services":["bzz","pss"],"enable_msg_events":true,"port":43657},"up":true}},{"node":{"info":{"id":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","name":"node_9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","enode":"enode://28248a4e3b947a840d138ec02d99874ec310f8a569c25dc8a34c5e334dc69bbd196f0769f32afad244552e8f321e4ab1b498e10ba875cb6e008146607b4b1748@127.0.0.1:0","enr":"0xf88fb840410401b0463d1535e6372c265c06ccac3b6116261f346d31b2c4da7487baa40b0d04f506d7a30412b7ca365e1283a8c1f6298c2a0fd14448a8b7b9d3d0e6f9f70183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10228248a4e3b947a840d138ec02d99874ec310f8a569c25dc8a34c5e334dc69bbd","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"likyDWSP2jg07drHJjzGyIZR3GB0IGzuABRJGNInYok=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 962932\npopulation: 24 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 6 5e36 581a 452b 38f0 | 30 452b (0) 581a (0) 5e36 (0) 5f83 (0)\n001 5 f35a f0e9 e9fd c461 | 17 fb7e (0) f6e5 (0) f35a (0) f211 (0)\n002 6 a12b ae60 aabc b374 | 9 b73b (0) b374 (0) be2b (0) b8f3 (0)\n============ DEPTH: 3 ==========================================\n003 7 821a 856e 8673 87aa | 7 8926 (0) 8802 (0) 856e (0) 8673 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","private_key":"37f4999bea53d1c97ec6a575c20dd5a83d19dbf990fe54e165401484f46a0ad5","name":"node_9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","services":["bzz","pss"],"enable_msg_events":true,"port":41351},"up":true}},{"node":{"info":{"id":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","name":"node_c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","enode":"enode://6d97076d32b9b9f4b5283863a9e98ae3565c5b76c4d79066a19dcea55b59368e7608ba4756a6ad7c2abcfa2cd8a35687b72abc688594d2e75acf7c06224f070f@127.0.0.1:0","enr":"0xf88fb84051fb637bffdf225590478fd9c8d1191799580989e08e24be868d06fc5bcc1d331b83c265df3b5914dd08cb298f5c664aed93b478f82c2b79044d18b9e6e8e05e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036d97076d32b9b9f4b5283863a9e98ae3565c5b76c4d79066a19dcea55b59368e","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"w7LS8McnU+2J/ExYDIH1DGbLAsH5AFRlDhkaAQXEDR0=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: c3b2d2\npopulation: 13 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 3c40 5f83 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 3 b374 8673 9629 | 17 a12b (0) afb1 (0) ae60 (0) aabc (0)\n002 3 f6e5 fb7e e6cf | 11 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n003 2 d904 d3c1 | 2 d3c1 (0) d904 (0)\n004 1 cb8d | 1 cb8d (0)\n============ DEPTH: 5 ==========================================\n005 1 c461 | 1 c461 (0)\n006 1 c0c2 | 1 c0c2 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","private_key":"3e87a7f0724932c97ccea342e08f9cbab0a16398baa4d83cf262cab27e823a00","name":"node_c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","services":["bzz","pss"],"enable_msg_events":true,"port":33597},"up":true}},{"node":{"info":{"id":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","name":"node_e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","enode":"enode://66956dc6f44f5a14fbd8cacccb4a0392af57212942e8ab9a389056d9577bf347a38cfdd762902a5edcb4eecf9651e855e67968089887e622490e8b69b548f496@127.0.0.1:0","enr":"0xf88fb840736618f919fc2c358b6f142a11f97cfe9676c53077ffac8dc2e6f386275e20054d088ed925aeddf27038b97725b58eb517ada94564ace17c71b2e679b3a0712e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10266956dc6f44f5a14fbd8cacccb4a0392af57212942e8ab9a389056d9577bf347","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5s8zfQ5pXoYeo2hk4qzh9AKdWzJG970Vzk3MIgv+Pkg=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e6cf33\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 248a 3c40 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 4 ae60 afb1 a12b 821a | 17 a12b (0) afb1 (0) ae60 (0) aabc (0)\n002 3 d904 d3c1 c3b2 | 6 d3c1 (0) d904 (0) cb8d (0) c461 (0)\n003 4 f6e5 f0e9 f211 fb7e | 5 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n004 2 eb30 e9fd | 3 e9fd (0) eb30 (0) ebf2 (0)\n============ DEPTH: 5 ==========================================\n005 0 | 0\n006 2 e5e1 e558 | 2 e5e1 (0) e558 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","private_key":"17299832d5703762960e077579ea9a6ffc090a4e52d4b7da5ac8f0a93fe3dc58","name":"node_e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","services":["bzz","pss"],"enable_msg_events":true,"port":42449},"up":true}},{"node":{"info":{"id":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","name":"node_821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","enode":"enode://9076c5a898a4ed3432a2f812f4c221429a92437f6e27430d6606d7e0d8d01467f860d0949c1bf61d8630a2f1cdcac9b59dff894910bb4d5f11793e03ca4812bc@127.0.0.1:0","enr":"0xf88fb840c4b0861f6a4c06646188be8b72ed472c5dce5473d4568b7bbfc15409a2b575fd1ffe9c6597915b5a0d3225f043bc7c42438fc6786f38fa60c9372592fbf0b3720183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1029076c5a898a4ed3432a2f812f4c221429a92437f6e27430d6606d7e0d8d01467","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"ghryXmNmI3zKJWgexjPrqI20ik/4i1kgzckuFGFhQOQ=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 821af2\npopulation: 23 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 5 0acb 255d 274f 38f0 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 7 c461 d904 f35a f0e9 | 17 d3c1 (0) d904 (0) cb8d (0) c461 (0)\n002 4 a12b aabc b8f3 b8f9 | 9 a12b (0) afb1 (0) ae60 (0) aabc (0)\n003 1 9629 | 1 9629 (0)\n004 2 8926 8802 | 2 8802 (0) 8926 (0)\n============ DEPTH: 5 ==========================================\n005 4 8673 87aa 87ac 856e | 4 856e (0) 8673 (0) 87aa (0) 87ac (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","private_key":"7a3f8c7619489d91c82cd5712ea79f4a09bda58899b9c47305cecaaf474446e9","name":"node_821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","services":["bzz","pss"],"enable_msg_events":true,"port":37855},"up":true}},{"node":{"info":{"id":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","name":"node_b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","enode":"enode://4d06d30c93bb00f7ea04113fb7db1f44cf2d64fa6fa84136844915317a078a5f515d67f2c9531726774eff1e1c55e794444413207a7a33f8efe69c3b9a1ce809@127.0.0.1:0","enr":"0xf88fb840da80dce04c535f4a03e572241364ebfcc260ac172c2f4f8613c30690c319e6916a57ccbc2ba5996f0eb97daa72b5f179ddc8c8402cbf34e3d4e25b6d5de65d560183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1034d06d30c93bb00f7ea04113fb7db1f44cf2d64fa6fa84136844915317a078a5f","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"uPmUaxfOpdu6S6HDfNTQCjVxfGn7DjkfJK+SlPkDDC4=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b8f994\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 274f 5508 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 2 d3c1 f6e5 | 17 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n002 3 856e 87ac 821a | 8 9629 (0) 8802 (0) 8926 (0) 856e (0)\n003 3 ae60 afb1 a12b | 4 a12b (0) afb1 (0) ae60 (0) aabc (0)\n004 2 b374 b73b | 2 b73b (0) b374 (0)\n============ DEPTH: 5 ==========================================\n005 1 be2b | 1 be2b (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 1 b8f3 | 1 b8f3 (0)\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","private_key":"ba7822a917d871b0db8d2f35c273e03d2611d6b1ec22afa5f3904d5912715fe6","name":"node_b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","services":["bzz","pss"],"enable_msg_events":true,"port":46635},"up":true}},{"node":{"info":{"id":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","name":"node_550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","enode":"enode://674d26ce4cfc8f488a5582293dcb0b48dbafe55633179a515be743fd8df0115312862eb9890c52caa8a448b0643237fa1cb52630bbb037f10a4b51c9bb03547c@127.0.0.1:0","enr":"0xf88fb840f50fd3df45a62d984c9335d268586911f8ca0e81aa4bcb0d91ba62cd4c9d788739972464e7736c25bafc230322b8cd066b8336706c3829ba54844c18cc2d1e510183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102674d26ce4cfc8f488a5582293dcb0b48dbafe55633179a515be743fd8df01153","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VQhXusIHh8p/ZJN67boLo9K1hQUtboJP3oQDg4osKtw=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 550857\npopulation: 14 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 f6e5 fb7e b8f9 | 34 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n001 2 274f 38f0 | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 2 7f80 6123 | 5 6123 (0) 7f80 (0) 7d69 (0) 70d0 (0)\n003 1 452b | 1 452b (0)\n004 3 5f83 5e36 581a | 3 581a (0) 5e36 (0) 5f83 (0)\n005 1 52fc | 1 52fc (0)\n============ DEPTH: 6 ==========================================\n006 2 57d9 5602 | 2 57d9 (0) 5602 (0)\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","private_key":"71212a2c0cc74c7f5acae0d49389517fb9f8125452e5ff53a87d9f94d1cdb656","name":"node_550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","services":["bzz","pss"],"enable_msg_events":true,"port":38047},"up":true}},{"node":{"info":{"id":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","name":"node_56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","enode":"enode://6e7531fa1aad96956cb94991feb1de42184d663cf91edeec3ec9c44a40b74669a30ca1b149de068ad02287f4749aaa00baba98cfaf078c9616119971af4d8e41@127.0.0.1:0","enr":"0xf88fb840e9d8fe4011fb432017522b9895b5df21af7f12f9f032d6fe91afd6674259563329ec357a908efcdf03bf0ce90552bec005f8d8e48d4ff8501f5d4a78f5e140a90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1036e7531fa1aad96956cb94991feb1de42184d663cf91edeec3ec9c44a40b74669","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"VgKekTxY+aEKUcJfvzIq7lToREdssXI8MS8Pi7nCTjk=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 56029e\npopulation: 15 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 2 d3c1 b73b | 34 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n001 3 3c40 0257 177e | 17 274f (0) 255d (0) 248a (0) 3103 (0)\n002 3 6123 7f80 7d69 | 5 6123 (0) 7f80 (0) 7d69 (0) 70d0 (0)\n003 1 452b | 1 452b (0)\n004 3 581a 5f83 5e36 | 3 581a (0) 5e36 (0) 5f83 (0)\n005 1 52fc | 1 52fc (0)\n============ DEPTH: 6 ==========================================\n006 1 5508 | 1 5508 (0)\n007 1 57d9 | 1 57d9 (0)\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","private_key":"4e9222727f6b16c6bf0ed7a54aa1b7469e124eba3236c02cdbcc687cd60b72bc","name":"node_56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","services":["bzz","pss"],"enable_msg_events":true,"port":38635},"up":true}},{"node":{"info":{"id":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","name":"node_b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","enode":"enode://ab3e384377a188409c644d5b90e2c6ef1f2684a6f706d706a4648f7de14c6636e1879b40b73c0ae2f50e0a5b310fae9d87dec78077f765ea86d1d1692e7f30e9@127.0.0.1:0","enr":"0xf88fb8402367c86e536923173d2217bd08333ff411134bf6cfd0e621b7979b3e8e5858f46c7490fafa705e3e2039990a49492e9061617d5dc27a275fbb87b2b5af9a1b020183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a103ab3e384377a188409c644d5b90e2c6ef1f2684a6f706d706a4648f7de14c6636","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"tzuapaYmTJoBipiKgTuRJ9m/lwc2R4zw3D7dHCAj9vI=","hive":"\n=========================================================================\nThu Feb 28 17:44:10 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b73b9a\npopulation: 17 (63), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 3 3abf 177e 5602 | 30 274f (0) 255d (0) 248a (0) 3103 (0)\n001 4 eb30 fb7e f211 f6e5 | 17 fb7e (0) f6e5 (0) f211 (0) f35a (0)\n002 3 87ac 8802 8926 | 8 8802 (0) 8926 (0) 821a (0) 856e (0)\n003 3 aabc afb1 a12b | 4 a12b (0) afb1 (0) ae60 (0) aabc (0)\n============ DEPTH: 4 ==========================================\n004 3 be2b b8f3 b8f9 | 3 b8f9 (0) b8f3 (0) be2b (0)\n005 1 b374 | 1 b374 (0)\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","private_key":"7b8ef93d2a057f4d4cd38111d6f670c9ea7480d10fb335de23e95b1e66c6c445","name":"node_b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","services":["bzz","pss"],"enable_msg_events":true,"port":33079},"up":true}}],"conns":[{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","other":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","other":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","other":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","other":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","other":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","other":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","up":true},{"one":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","up":true},{"one":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","up":true},{"one":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","up":true},{"one":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"248a2e618091deeac458f4741616405e0bc5ffda1a9f9125307e32c781728a75","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"856e27ca689a9b2af4cd3ed958f2162b9c71074c726868ac7a10ac2f6f7d021d","other":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"ae6023d416c87bb433eb9d8d44f97531797d292774304d996923a3fe67887478","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"eb307a6f333b30ebd1e3b2b51bd8095311d48707d6ca2c81447d01ad453e2542","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"3103cd0b7654f593b7228d1715209f27e339ad014019a9738413a20cb6ac63e4","up":true},{"one":"87aa77dcef19b0c86a3e8ab64c8f12d9a733e77a7e12bcaec3a4cd8504c5a775","other":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","other":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"3b4fa7d729129068a1281ef68494b61d055203de8c36a5fe27af3eb565832108","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","up":true},{"one":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","up":true},{"one":"0257ed46bd49271306fed0127019fd54db472284d00099f10cadd7e83588a63a","other":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","up":true},{"one":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"b8f9946b17cea5dbba4ba1c37cd4d00a35717c69fb0e391f24af9294f9030c2e","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","up":true},{"one":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"38f05af40cd0dc3974e896e24aa75ebda1c96f0ce7d9e3ff0ea840615186307d","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","other":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"7f800e5a7970230f5273e49971c7ee521de97e69f56dd554e30dd12d6fb5c749","other":"56029e913c58f9a10a51c25fbf322aee54e844476cb1723c312f0f8bb9c24e39","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"177e232bdba970f4b001b228af9402e3fca0aaf00682a11bc9984f7db4b7feba","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","other":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","other":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"f211376d46e6e0966ee984cf5837805240b2ba53c5ac75315c56dbdffb957a65","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"aabc587ddc3b7d493ce8e849b15d364265c57d3a3a52613076a5b31804cb753f","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","up":true},{"one":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","other":"0727d7e68c319d3a4cc5a161dd05b2a7e72350c139e65c2090c1232ebbed5f78","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"c3b2d2f0c72753ed89fc4c580c81f50c66cb02c1f90054650e191a0105c40d1d","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"452b07d73433e7d6c205a504419ae100019aa1920723011272b596607db6684a","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"b3744cf6f180c2eb9a1ded0e6ddd600d5f79268387b97333070fb5a183affd89","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"7d69b5707a4b99edd901317f1553ff15586aac350f38e0c81318f35d68b835a8","other":"52fc1e219bc518fbaf289da3236d98db1b63df1227ea32581229671473adc3bd","up":true},{"one":"afb1d0b8d1b1f6a341384c1f0818f6b28b85fefe6a45a892552de4de5379f6a5","other":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","up":true},{"one":"a12b12081b6d49e82378d5239765bca8c5f43232b30163bc46924cc3e98e1177","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","other":"c461e430c887894bbbff4e337b61ee449cf12cc07d0fc5fe41785d580d16ae98","up":true},{"one":"703dc76ac724457c805abcc1ed2e3f321821409fb4cf0185e2f07ebc4c18144f","other":"e5e166f85ea9e264fc25734523869d9b916f388004cb4af9968956ce14a7a522","up":true},{"one":"3c409e5b76e977ee3115a0a19540dd6745e60b8878fdc1a5c1d996e7e47ca969","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"5e36542bbbc0d70231c9d00742cb30fccf3f206eecf10a0f34332a2986c86ffb","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"70d0710b3894fabf32b343b9b59339f786ece39895c7eda5f162cc575c9c8253","other":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","up":true},{"one":"1455d4713b5134e9157517b84b04e15292cf18d3e08b95d69f19648fb9e3823e","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"57d911f864be7a90d8807bc3fecd658c5697d70cf3ddcc1dde0dd9bd0fd7fb67","other":"581ad92d4347834850c16e781983c09be340917527a35dd9650c5a3da1fc822b","up":true},{"one":"0acb17334253408a773202041d4a67c7873b0e74e94c86e3343fb470bdcbed82","other":"6123b7777de3bc2591e3036a9adeba1f7d8ec933d05ee4fe0017910896925d1b","up":true},{"one":"be2bcb8fb4b34ee6981e6634b8f3298fbbee756f6e76566204a56bb86c8ec0f0","other":"c0c2d73abd2b6abc3ba0b098520c4cc3eda61b5fc9d1ab42ebd04ecc25ded224","up":true},{"one":"b8f345940bced8831b30079ff2a276ab65fbed0dd8575c93a3ccd8c7bd1bc8b1","other":"00ba6c61b2d6480f53f48c3def3ac85587d9b7a92658d21c235fd0fddc246850","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"9629320d648fda3834eddac7263cc6c88651dc6074206cee00144918d2276289","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"154fec5fa728af956a1446bd5a35e63d716b79a804197b50fd9c72585d044b77","other":"274f8b752ef0c84a5c3098066b0b4d1c02b8a1b1730f59ed94064535eeda4756","up":true},{"one":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"04862550ef38f831085f378e2533addc2c904288394631208c49cb33615ada3b","other":"172bbbcaa57c37c24314a84fbd0b9de45f83a46016bd2395dc2adbab1bb90b5c","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"d3c19ad4c1abc9af03bffc1abc9717f4e765d5fff7ae776203438bac94d01806","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"821af25e6366237cca25681ec633eba88db48a4ff88b5920cdc92e14616140e4","up":true},{"one":"892603fc64fe169ad15519060cfb1d27780adff60da60f86a620f2bf9a7ca1e1","other":"f6e5148d2421ae11e8a109852c9da77bbe498f9e6ed3aa361755a1ff3fd29b74","up":true},{"one":"3abfe9f4f6a8d34b536d02551f45c03a35987b94f7d33b3a0dc30ad34b15f82a","other":"255db8d311a66a7443b15d040afa06626d6919c0d20a6fd0f5afa34e87281732","up":true},{"one":"e558105d2aeb59c896f5fb70475b046d9034ef4596e9cd5f54f16c316449241e","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","other":"d904f6d8790cc235063f54661521c3a197e3e9cdd9dbbcd6765ec6cda5d8f7b4","up":true},{"one":"86735a46da76b3132f729b293b4d8502e939ecba776b8d85b3ae73efa2184b5f","other":"88024b9f684346b775c1c1eb6e9709034135957ab418ec002725f10ef8919837","up":true},{"one":"f0e900ef37baad6a1685aaf1700e9290e7e9c0d5d30e3265204ec943445248b3","other":"e6cf337d0e695e861ea36864e2ace1f4029d5b3246f7bd15ce4dcc220bfe3e48","up":true},{"one":"550857bac20787ca7f64937aedba0ba3d2b585052d6e824fde8403838a2c2adc","other":"5f832158cf84e0e48a3518955878b16ae253467f54664eb4ec1213fefc3f3277","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"cb8df183e7fea4f808ed569d3fa0a6c26670f6451b9a9f48e8659871c2b9ab02","up":true},{"one":"e9fd5cd7f8d28ca172a3d331da401e9853d3121923c81bf82787f7989009e43a","other":"fb7e6716614ac941b74e18a9bf3ded63bc00b453221b40976f783675a1c06c63","up":true},{"one":"f35a47e1d56a6d8e5caad50d88e55c83ff3b964b279b58a50d5e544ff9187864","other":"ebf25ce427905106b70625c0084dcb117964a4d4b9951f5977457da5741b716c","up":true},{"one":"87acf64b22c579751718dc093c00c82b39feb7023fe53c6486b288960ad9e146","other":"b73b9aa5a6264c9a018a988a813b9127d9bf970736478cf0dc3edd1c2023f6f2","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_8.json b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_8.json index 307afe5a..53fe4f96 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_8.json +++ b/vendor/github.com/ethereum/go-ethereum/swarm/pss/testdata/snapshot_8.json @@ -1 +1 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","private_key":"4882fdd34676c2158f7bfc761bf824fcf693736a8df294cc7e79ef1848c7bae6","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","private_key":"0470652ac57af40a43bc67b1b49699219fc35a805da167244f505d27858334c7","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","private_key":"2cbf6256e92736e1b54279b79addbb830a607a71488cdd3462a44fcaa68c018e","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","private_key":"e659774a5ff4f76b021bf4884ad359eadeb8ff33e843a3f76fcf4a38b0d82b35","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","other":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","up":true},{"one":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","other":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","up":true},{"one":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true},{"one":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","other":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","up":true},{"one":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true}]} \ No newline at end of file +{"nodes":[{"node":{"info":{"id":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","name":"node_b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","enode":"enode://1fdd80e21167da20c5b50282fff16b9d9ba26b1ba66f4b485f2a280c97d135d2650a0aec63b0c4f05ebc1fd1e26dd701c78c3d26660ae55b1ec443d0858d5fae@127.0.0.1:0","enr":"0xf88fb84089ca9b4322a861dc171283da9cf5f01c2f522abc20fea004cdc9e021133e69a63c392de428728d12dae699dc4db983978a7d49e9f842a2a97e608411c26b0f380183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1021fdd80e21167da20c5b50282fff16b9d9ba26b1ba66f4b485f2a280c97d135d2","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"sMKCtIQZcFFyJ1Ur32MDhVUaj9cYhM5kyoZbqVGSldI=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: b0c282\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n001 2 e5c3 d20e | 2 e5c3 (0) d20e (0)\n============ DEPTH: 2 ==========================================\n002 3 9d65 8d78 857f | 3 9d65 (0) 8d78 (0) 857f (0)\n003 1 af5a | 1 af5a (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","private_key":"4abb6d72d23ab230f5903ce4eade3e17621c344793b5b4478adc885ea16ccd5e","name":"node_b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","services":["bzz","pss"],"enable_msg_events":true,"port":38939},"up":true}},{"node":{"info":{"id":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","name":"node_857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","enode":"enode://1253be1d17f585c64b93f4521a8c9a6fc2219941cbd4c0a0f4f9c505ff25faf880745e2fbb7d85bdd43510ef61222a11730770d75060eeb8d2449198ca9d99d9@127.0.0.1:0","enr":"0xf88fb8401ff2d62982fa003d6d8138eddc966e3bb01f0418be800a888246409230f7331b2ae72c81e74b250219b1b53c54eb658716fae5653e2154f8e489d8fd9c556ac90183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a1031253be1d17f585c64b93f4521a8c9a6fc2219941cbd4c0a0f4f9c505ff25faf8","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"hX/d+AgXh7TdgwRZd44e4oFrIrtq+61imwRUfOgw1MQ=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 857fdd\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n001 2 d20e e5c3 | 2 e5c3 (0) d20e (0)\n002 2 af5a b0c2 | 2 af5a (0) b0c2 (0)\n============ DEPTH: 3 ==========================================\n003 1 9d65 | 1 9d65 (0)\n004 1 8d78 | 1 8d78 (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","private_key":"9ec93c440894afdab5919df0886cf410fed4c31a7a2a859ca39f7f702c0c68a7","name":"node_857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","services":["bzz","pss"],"enable_msg_events":true,"port":37411},"up":true}},{"node":{"info":{"id":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","name":"node_9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","enode":"enode://f0854e632647b0c6194987efc857de2018a55c3e41fa83d66c1bc7a6b41b6410667343be112125a56d00813a2217a9c7f9de6294f90d1062868195b0209febee@127.0.0.1:0","enr":"0xf88fb84092a5952a80b7c2970b3026cba7242670edc3bfeb88145f517586537cf3c723cf0f843d8e4fd79b03865506c72c4e359828e844d734a156e9433ea8005a84e86e0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102f0854e632647b0c6194987efc857de2018a55c3e41fa83d66c1bc7a6b41b6410","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"nWVoU2sk38S+r/qiRApWkBntiFVpU27zrzZtT9fkFVw=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 9d6568\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n001 2 d20e e5c3 | 2 d20e (0) e5c3 (0)\n002 2 af5a b0c2 | 2 b0c2 (0) af5a (0)\n============ DEPTH: 3 ==========================================\n003 2 8d78 857f | 2 8d78 (0) 857f (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","private_key":"78c3cbec4b5203c57cb07bec48b1f6b483333254270f8c78369f663a67332275","name":"node_9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","services":["bzz","pss"],"enable_msg_events":true,"port":35167},"up":true}},{"node":{"info":{"id":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","name":"node_e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","enode":"enode://b942a7abe4d7bb812c4dd793e10b90bd0a052d02c8fd30a51d4fc7f2c0ba00a69f28d80b694d467a8e0dd3a91d8c002d7cc4b559c0814a3465c88c848ee67c78@127.0.0.1:0","enr":"0xf88fb840e652351f98a74786fc3ef30d88e198485e1d1d2dbcee24527737d3e7ed9f7e1c327b5e0e5222fad7b1b8849a7cf930a11d784b8b5df0a4e83f96bed207be80fe0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102b942a7abe4d7bb812c4dd793e10b90bd0a052d02c8fd30a51d4fc7f2c0ba00a6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"5cP6M2xt64ESi9Y8+/Fstk1Kg8bmp6ZdGvUe4B5LiuE=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: e5c3fa\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n============ DEPTH: 1 ==========================================\n001 5 af5a b0c2 8d78 857f | 5 b0c2 (0) af5a (0) 8d78 (0) 857f (0)\n002 1 d20e | 1 d20e (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","private_key":"e47c725966b157b8d5f82a845e7972a8f46f4afdd7e6936924b091f6903f206a","name":"node_e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","services":["bzz","pss"],"enable_msg_events":true,"port":40723},"up":true}},{"node":{"info":{"id":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","name":"node_4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","enode":"enode://07926b76c1525c50780e9665d8eece3669309dbe11901ecce0fdd4b58cb674d6492eb005708df46901b05fb100b3e0e7d5fa68063b264ece3b89dab0387f75eb@127.0.0.1:0","enr":"0xf88fb8409b7e55bf546e10ed700d31d91c0da7485440884d8765e8690b5a6d36622a9b1d3e701b927e7ec276477e7c249a7c6ed5a3d723e5c2b5343eda892e3b510e7f760183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10307926b76c1525c50780e9665d8eece3669309dbe11901ecce0fdd4b58cb674d6","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"TygdoL/x+v48VU0NTqGumi06FP+7hC3CUaRbHwAWMcU=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 4f281d\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 7 9d65 8d78 857f b0c2 | 7 b0c2 (0) af5a (0) 8d78 (0) 857f (0)\n001 0 | 0\n002 0 | 0\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","private_key":"314da8f87c03fe3bea0fc585c33443cd627cf93a51f609e88d0251a248cc8a2b","name":"node_4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","services":["bzz","pss"],"enable_msg_events":true,"port":40771},"up":true}},{"node":{"info":{"id":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","name":"node_af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","enode":"enode://86e63eb120fa323784aab76c4586fc5f96764473b5e5181e5101d05f99b6a2ae42b40d2ada4ff77338a6189c68745b96d1a7535fa1a81211aaf719b7918344f0@127.0.0.1:0","enr":"0xf88fb840ef88957469c48aed8ea2da3a5d910b199f8506a13703fbfc55f28d26199820175dd29361863b9cd50ce0d032412687302fb1b12ad7ca026dab30c5c600e541ba0183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10286e63eb120fa323784aab76c4586fc5f96764473b5e5181e5101d05f99b6a2ae","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"r1pDikcZaqKWKUeWZNRU54EEzDyPAENfoU2jB1XrGbg=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: af5a43\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n001 2 e5c3 d20e | 2 d20e (0) e5c3 (0)\n============ DEPTH: 2 ==========================================\n002 3 9d65 857f 8d78 | 3 9d65 (0) 857f (0) 8d78 (0)\n003 1 b0c2 | 1 b0c2 (0)\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","private_key":"ca50145cbbcbb65bb54caae3f33b2253f05203a2825ad5e77aebe7513ac1f2f6","name":"node_af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","services":["bzz","pss"],"enable_msg_events":true,"port":33411},"up":true}},{"node":{"info":{"id":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","name":"node_8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","enode":"enode://c0fbc89e69cc5371b97f530380e78cac1cd7e3ad87a6bc1597e714ba892d53da030438cfdc1d7f3f1a50f1328733feb1afaabe1bdfdb731d7c134f42637bc570@127.0.0.1:0","enr":"0xf88fb8402e0b00cc0ddeb598d3dd71f1538b77e52afb8b6ee456a56a15d73b850f88480d686962bb60c059abf4080bb090dd6960e00ccc3992a79682f4d0b32d7f1182f40183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a102c0fbc89e69cc5371b97f530380e78cac1cd7e3ad87a6bc1597e714ba892d53da","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"jXiz9/uGRNeQrUQ058JzVYR1r6O9KQdIBXyKuozLGMI=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: 8d78b3\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n001 2 e5c3 d20e | 2 e5c3 (0) d20e (0)\n002 2 b0c2 af5a | 2 b0c2 (0) af5a (0)\n============ DEPTH: 3 ==========================================\n003 1 9d65 | 1 9d65 (0)\n004 1 857f | 1 857f (0)\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","private_key":"3610f2b1d9031bcf4dd8e44f17d7262c53c302d49aae7068bf58bf63593b168c","name":"node_8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","services":["bzz","pss"],"enable_msg_events":true,"port":46461},"up":true}},{"node":{"info":{"id":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","name":"node_d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","enode":"enode://59a306fa22d2124205f53d5eb905896f7fe818569fc14221c50a3b0ce032b67c275381f7b3ccbc88fb679a42d19dc9b24f699f2f44cc34a9e92c4087f3df3224@127.0.0.1:0","enr":"0xf88fb84010c45aa3fc72b92b0a6c1999ec487c845993f1fe4210e415c1995ec007cf990b62cbe15723436c2b6324564678c3dcf711ec0dd6fea5cd02f59758e5ec8caf660183636170cdc583627a7a08c6846869766508826964827634826970847f00000189736563703235366b31a10259a306fa22d2124205f53d5eb905896f7fe818569fc14221c50a3b0ce032b67c","ip":"127.0.0.1","ports":{"discovery":0,"listener":0},"listenAddr":"","protocols":{"bzz":"0g6deWEImIWbj251Q96WEZtzj1WNhzej53b0IfguhtA=","hive":"\n=========================================================================\nThu Feb 28 17:15:23 UTC 2019 KΛÐΞMLIΛ hive: queen's address: d20e9d\npopulation: 7 (7), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n000 1 4f28 | 1 4f28 (0)\n============ DEPTH: 1 ==========================================\n001 5 af5a b0c2 9d65 857f | 5 af5a (0) b0c2 (0) 9d65 (0) 857f (0)\n002 1 e5c3 | 1 e5c3 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n008 0 | 0\n009 0 | 0\n010 0 | 0\n011 0 | 0\n012 0 | 0\n013 0 | 0\n014 0 | 0\n015 0 | 0\n========================================================================="}},"config":{"id":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","private_key":"4f08d74f4aae2cc502689afad5bb760072c6f1931f7872c3d4ca210972736b74","name":"node_d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","services":["bzz","pss"],"enable_msg_events":true,"port":36035},"up":true}}],"conns":[{"one":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","other":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","up":true},{"one":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","other":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","up":true},{"one":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","other":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","up":true},{"one":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","other":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","up":true},{"one":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","other":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","up":true},{"one":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","other":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","up":true},{"one":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","other":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","up":true},{"one":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","other":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","up":true},{"one":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","other":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","up":true},{"one":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","other":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","up":true},{"one":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","other":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","up":true},{"one":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","other":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","up":true},{"one":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","other":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","up":true},{"one":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","other":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","up":true},{"one":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","other":"4f281da0bff1fafe3c554d0d4ea1ae9a2d3a14ffbb842dc251a45b1f001631c5","up":true},{"one":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","other":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","up":true},{"one":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","other":"b0c282b4841970517227552bdf630385551a8fd71884ce64ca865ba9519295d2","up":true},{"one":"e5c3fa336c6deb81128bd63cfbf16cb64d4a83c6e6a7a65d1af51ee01e4b8ae1","other":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","up":true},{"one":"8d78b3f7fb8644d790ad4434e7c273558475afa3bd290748057c8aba8ccb18c2","other":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","up":true},{"one":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","other":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","up":true},{"one":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","other":"9d6568536b24dfc4beaffaa2440a569019ed885569536ef3af366d4fd7e4155c","up":true},{"one":"d20e9d79610898859b8f6e7543de96119b738f558d8737a3e776f421f82e86d0","other":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","up":true},{"one":"af5a438a47196aa29629479664d454e78104cc3c8f00435fa14da30755eb19b8","other":"857fddf8081787b4dd830459778e1ee2816b22bb6afbad629b04547ce830d4c4","up":true}]} \ No newline at end of file diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/db.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/db.go index d4e5d1b2..8c11bf48 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/shed/db.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/db.go @@ -23,7 +23,6 @@ package shed import ( - "errors" "fmt" "strconv" "strings" @@ -56,7 +55,7 @@ type DB struct { diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written - quitChan chan chan error // Quit channel to stop the metrics collection before closing the database + quit chan struct{} // Quit channel to stop the metrics collection before closing the database } // NewDB constructs a new DB and validates the schema @@ -91,7 +90,7 @@ func NewDB(path string, metricsPrefix string) (db *DB, err error) { db.configure(metricsPrefix) // Create a quit channel for the periodic metrics collector and run it - db.quitChan = make(chan chan error) + db.quit = make(chan struct{}) go db.meter(10 * time.Second) @@ -124,6 +123,17 @@ func (db *DB) Get(key []byte) (value []byte, err error) { return value, nil } +// Has wraps LevelDB Has method to increment metrics counter. +func (db *DB) Has(key []byte) (yes bool, err error) { + yes, err = db.ldb.Has(key, nil) + if err != nil { + metrics.GetOrRegisterCounter("DB.hasFail", nil).Inc(1) + return false, err + } + metrics.GetOrRegisterCounter("DB.has", nil).Inc(1) + return yes, nil +} + // Delete wraps LevelDB Delete method to increment metrics counter. func (db *DB) Delete(key []byte) (err error) { err = db.ldb.Delete(key, nil) @@ -155,7 +165,7 @@ func (db *DB) WriteBatch(batch *leveldb.Batch) (err error) { // Close closes LevelDB database. func (db *DB) Close() (err error) { - close(db.quitChan) + close(db.quit) return db.ldb.Close() } @@ -186,18 +196,12 @@ func (db *DB) meter(refresh time.Duration) { lastWritePaused time.Time ) - var ( - errc chan error - merr error - ) - // Iterate ad infinitum and collect the stats - for i := 1; errc == nil && merr == nil; i++ { + for i := 1; true; i++ { // Retrieve the database stats stats, err := db.ldb.GetProperty("leveldb.stats") if err != nil { log.Error("Failed to read database stats", "err", err) - merr = err continue } // Find the compaction table, skip the header @@ -207,7 +211,6 @@ func (db *DB) meter(refresh time.Duration) { } if len(lines) <= 3 { log.Error("Compaction table not found") - merr = errors.New("compaction table not found") continue } lines = lines[3:] @@ -225,7 +228,6 @@ func (db *DB) meter(refresh time.Duration) { value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) if err != nil { log.Error("Compaction entry parsing failed", "err", err) - merr = err continue } compactions[i%2][idx] += value @@ -246,7 +248,6 @@ func (db *DB) meter(refresh time.Duration) { writedelay, err := db.ldb.GetProperty("leveldb.writedelay") if err != nil { log.Error("Failed to read database write delay statistic", "err", err) - merr = err continue } var ( @@ -257,13 +258,11 @@ func (db *DB) meter(refresh time.Duration) { ) if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { log.Error("Write delay statistic not found") - merr = err continue } duration, err = time.ParseDuration(delayDuration) if err != nil { log.Error("Failed to parse delay duration", "err", err) - merr = err continue } if db.writeDelayNMeter != nil { @@ -285,24 +284,20 @@ func (db *DB) meter(refresh time.Duration) { ioStats, err := db.ldb.GetProperty("leveldb.iostats") if err != nil { log.Error("Failed to read database iostats", "err", err) - merr = err continue } var nRead, nWrite float64 parts := strings.Split(ioStats, " ") if len(parts) < 2 { log.Error("Bad syntax of ioStats", "ioStats", ioStats) - merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) continue } if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { log.Error("Bad syntax of read entry", "entry", parts[0]) - merr = err continue } if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { log.Error("Bad syntax of write entry", "entry", parts[1]) - merr = err continue } if db.diskReadMeter != nil { @@ -315,15 +310,11 @@ func (db *DB) meter(refresh time.Duration) { // Sleep a bit, then repeat the stats collection select { - case errc = <-db.quitChan: + case <-db.quit: // Quit requesting, stop hammering the database + return case <-time.After(refresh): // Timeout, gather a new set of stats } } - - if errc == nil { - errc = <-db.quitChan - } - errc <- merr } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/db_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/db_test.go index 65fdac4a..4e8276f7 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/shed/db_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/db_test.go @@ -100,11 +100,13 @@ func newTestDB(t *testing.T) (db *DB, cleanupFunc func()) { if err != nil { t.Fatal(err) } - cleanupFunc = func() { os.RemoveAll(dir) } db, err = NewDB(dir, "") if err != nil { - cleanupFunc() + os.RemoveAll(dir) t.Fatal(err) } - return db, cleanupFunc + return db, func() { + db.Close() + os.RemoveAll(dir) + } } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/index.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/index.go index df88b1b6..6be018d2 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/shed/index.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/index.go @@ -20,6 +20,7 @@ import ( "bytes" "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/iterator" ) // Item holds fields relevant to Swarm Chunk data and metadata. @@ -144,6 +145,17 @@ func (f Index) Get(keyFields Item) (out Item, err error) { return out.Merge(keyFields), nil } +// Has accepts key fields represented as Item to check +// if there this Item's encoded key is stored in +// the index. +func (f Index) Has(keyFields Item) (bool, error) { + key, err := f.encodeKeyFunc(keyFields) + if err != nil { + return false, err + } + return f.db.Has(key) +} + // Put accepts Item to encode information from it // and save it to the database. func (f Index) Put(i Item) (err error) { @@ -245,21 +257,14 @@ func (f Index) Iterate(fn IndexIterFunc, options *IterateOptions) (err error) { ok = it.Next() } for ; ok; ok = it.Next() { - key := it.Key() - if !bytes.HasPrefix(key, prefix) { - break - } - // create a copy of key byte slice not to share leveldb underlaying slice array - keyItem, err := f.decodeKeyFunc(append([]byte(nil), key...)) + item, err := f.itemFromIterator(it, prefix) if err != nil { + if err == leveldb.ErrNotFound { + break + } return err } - // create a copy of value byte slice not to share leveldb underlaying slice array - valueItem, err := f.decodeValueFunc(keyItem, append([]byte(nil), it.Value()...)) - if err != nil { - return err - } - stop, err := fn(keyItem.Merge(valueItem)) + stop, err := fn(item) if err != nil { return err } @@ -270,6 +275,87 @@ func (f Index) Iterate(fn IndexIterFunc, options *IterateOptions) (err error) { return it.Error() } +// First returns the first item in the Index which encoded key starts with a prefix. +// If the prefix is nil, the first element of the whole index is returned. +// If Index has no elements, a leveldb.ErrNotFound error is returned. +func (f Index) First(prefix []byte) (i Item, err error) { + it := f.db.NewIterator() + defer it.Release() + + totalPrefix := append(f.prefix, prefix...) + it.Seek(totalPrefix) + + return f.itemFromIterator(it, totalPrefix) +} + +// itemFromIterator returns the Item from the current iterator position. +// If the complete encoded key does not start with totalPrefix, +// leveldb.ErrNotFound is returned. Value for totalPrefix must start with +// Index prefix. +func (f Index) itemFromIterator(it iterator.Iterator, totalPrefix []byte) (i Item, err error) { + key := it.Key() + if !bytes.HasPrefix(key, totalPrefix) { + return i, leveldb.ErrNotFound + } + // create a copy of key byte slice not to share leveldb underlaying slice array + keyItem, err := f.decodeKeyFunc(append([]byte(nil), key...)) + if err != nil { + return i, err + } + // create a copy of value byte slice not to share leveldb underlaying slice array + valueItem, err := f.decodeValueFunc(keyItem, append([]byte(nil), it.Value()...)) + if err != nil { + return i, err + } + return keyItem.Merge(valueItem), it.Error() +} + +// Last returns the last item in the Index which encoded key starts with a prefix. +// If the prefix is nil, the last element of the whole index is returned. +// If Index has no elements, a leveldb.ErrNotFound error is returned. +func (f Index) Last(prefix []byte) (i Item, err error) { + it := f.db.NewIterator() + defer it.Release() + + // get the next prefix in line + // since leveldb iterator Seek seeks to the + // next key if the key that it seeks to is not found + // and by getting the previous key, the last one for the + // actual prefix is found + nextPrefix := incByteSlice(prefix) + l := len(prefix) + + if l > 0 && nextPrefix != nil { + it.Seek(append(f.prefix, nextPrefix...)) + it.Prev() + } else { + it.Last() + } + + totalPrefix := append(f.prefix, prefix...) + return f.itemFromIterator(it, totalPrefix) +} + +// incByteSlice returns the byte slice of the same size +// of the provided one that is by one incremented in its +// total value. If all bytes in provided slice are equal +// to 255 a nil slice would be returned indicating that +// increment can not happen for the same length. +func incByteSlice(b []byte) (next []byte) { + l := len(b) + next = make([]byte, l) + copy(next, b) + for i := l - 1; i >= 0; i-- { + if b[i] == 255 { + next[i] = 0 + } else { + next[i] = b[i] + 1 + return next + } + } + return nil +} + // Count returns the number of items in index. func (f Index) Count() (count int, err error) { it := f.db.NewIterator() diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/index_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/index_test.go index 97d7c91f..de181fa4 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/shed/index_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/index_test.go @@ -49,7 +49,7 @@ var retrievalIndexFuncs = IndexFuncs{ }, } -// TestIndex validates put, get and delete functions of the Index implementation. +// TestIndex validates put, get, has and delete functions of the Index implementation. func TestIndex(t *testing.T) { db, cleanupFunc := newTestDB(t) defer cleanupFunc() @@ -177,6 +177,41 @@ func TestIndex(t *testing.T) { checkItem(t, got, want) }) + t.Run("has", func(t *testing.T) { + want := Item{ + Address: []byte("has-hash"), + Data: []byte("DATA"), + StoreTimestamp: time.Now().UTC().UnixNano(), + } + + dontWant := Item{ + Address: []byte("do-not-has-hash"), + Data: []byte("DATA"), + StoreTimestamp: time.Now().UTC().UnixNano(), + } + + err := index.Put(want) + if err != nil { + t.Fatal(err) + } + + has, err := index.Has(want) + if err != nil { + t.Fatal(err) + } + if !has { + t.Error("item is not found") + } + + has, err = index.Has(dontWant) + if err != nil { + t.Fatal(err) + } + if has { + t.Error("unwanted item is found") + } + }) + t.Run("delete", func(t *testing.T) { want := Item{ Address: []byte("delete-hash"), @@ -779,3 +814,149 @@ func checkItem(t *testing.T, got, want Item) { t.Errorf("got access timestamp %v, expected %v", got.AccessTimestamp, want.AccessTimestamp) } } + +// TestIndex_firstAndLast validates that index First and Last methods +// are returning expected results based on the provided prefix. +func TestIndex_firstAndLast(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + index, err := db.NewIndex("retrieval", retrievalIndexFuncs) + if err != nil { + t.Fatal(err) + } + + addrs := [][]byte{ + {0, 0, 0, 0, 0}, + {0, 1}, + {0, 1, 0, 0, 0}, + {0, 1, 0, 0, 1}, + {0, 1, 0, 0, 2}, + {0, 2, 0, 0, 1}, + {0, 4, 0, 0, 0}, + {0, 10, 0, 0, 10}, + {0, 10, 0, 0, 11}, + {0, 10, 0, 0, 20}, + {1, 32, 255, 0, 1}, + {1, 32, 255, 0, 2}, + {1, 32, 255, 0, 3}, + {255, 255, 255, 255, 32}, + {255, 255, 255, 255, 64}, + {255, 255, 255, 255, 255}, + } + + // ensure that the addresses are sorted for + // validation of nil prefix + sort.Slice(addrs, func(i, j int) (less bool) { + return bytes.Compare(addrs[i], addrs[j]) == -1 + }) + + batch := new(leveldb.Batch) + for _, addr := range addrs { + index.PutInBatch(batch, Item{ + Address: addr, + }) + } + err = db.WriteBatch(batch) + if err != nil { + t.Fatal(err) + } + + for _, tc := range []struct { + prefix []byte + first []byte + last []byte + err error + }{ + { + prefix: nil, + first: addrs[0], + last: addrs[len(addrs)-1], + }, + { + prefix: []byte{0, 0}, + first: []byte{0, 0, 0, 0, 0}, + last: []byte{0, 0, 0, 0, 0}, + }, + { + prefix: []byte{0}, + first: []byte{0, 0, 0, 0, 0}, + last: []byte{0, 10, 0, 0, 20}, + }, + { + prefix: []byte{0, 1}, + first: []byte{0, 1}, + last: []byte{0, 1, 0, 0, 2}, + }, + { + prefix: []byte{0, 10}, + first: []byte{0, 10, 0, 0, 10}, + last: []byte{0, 10, 0, 0, 20}, + }, + { + prefix: []byte{1, 32, 255}, + first: []byte{1, 32, 255, 0, 1}, + last: []byte{1, 32, 255, 0, 3}, + }, + { + prefix: []byte{255}, + first: []byte{255, 255, 255, 255, 32}, + last: []byte{255, 255, 255, 255, 255}, + }, + { + prefix: []byte{255, 255, 255, 255, 255}, + first: []byte{255, 255, 255, 255, 255}, + last: []byte{255, 255, 255, 255, 255}, + }, + { + prefix: []byte{0, 3}, + err: leveldb.ErrNotFound, + }, + { + prefix: []byte{222}, + err: leveldb.ErrNotFound, + }, + } { + got, err := index.Last(tc.prefix) + if tc.err != err { + t.Errorf("got error %v for Last with prefix %v, want %v", err, tc.prefix, tc.err) + } else { + if !bytes.Equal(got.Address, tc.last) { + t.Errorf("got %v for Last with prefix %v, want %v", got.Address, tc.prefix, tc.last) + } + } + + got, err = index.First(tc.prefix) + if tc.err != err { + t.Errorf("got error %v for First with prefix %v, want %v", err, tc.prefix, tc.err) + } else { + if !bytes.Equal(got.Address, tc.first) { + t.Errorf("got %v for First with prefix %v, want %v", got.Address, tc.prefix, tc.first) + } + } + } +} + +// TestIncByteSlice validates returned values of incByteSlice function. +func TestIncByteSlice(t *testing.T) { + for _, tc := range []struct { + b []byte + want []byte + }{ + {b: nil, want: nil}, + {b: []byte{}, want: nil}, + {b: []byte{0}, want: []byte{1}}, + {b: []byte{42}, want: []byte{43}}, + {b: []byte{255}, want: nil}, + {b: []byte{0, 0}, want: []byte{0, 1}}, + {b: []byte{1, 0}, want: []byte{1, 1}}, + {b: []byte{1, 255}, want: []byte{2, 0}}, + {b: []byte{255, 255}, want: nil}, + {b: []byte{32, 0, 255}, want: []byte{32, 1, 0}}, + } { + got := incByteSlice(tc.b) + if !bytes.Equal(got, tc.want) { + t.Errorf("got %v, want %v", got, tc.want) + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64.go new file mode 100644 index 00000000..0926e64f --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64.go @@ -0,0 +1,146 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package shed + +import ( + "encoding/binary" + + "github.com/syndtr/goleveldb/leveldb" +) + +// Uint64Vector provides a way to have multiple counters in the database. +// It transparently encodes uint64 type value to bytes. +type Uint64Vector struct { + db *DB + key []byte +} + +// NewUint64Vector returns a new Uint64Vector. +// It validates its name and type against the database schema. +func (db *DB) NewUint64Vector(name string) (f Uint64Vector, err error) { + key, err := db.schemaFieldKey(name, "vector-uint64") + if err != nil { + return f, err + } + return Uint64Vector{ + db: db, + key: key, + }, nil +} + +// Get retrieves a uint64 value at index i from the database. +// If the value is not found in the database a 0 value +// is returned and no error. +func (f Uint64Vector) Get(i uint64) (val uint64, err error) { + b, err := f.db.Get(f.indexKey(i)) + if err != nil { + if err == leveldb.ErrNotFound { + return 0, nil + } + return 0, err + } + return binary.BigEndian.Uint64(b), nil +} + +// Put encodes uin64 value and stores it in the database. +func (f Uint64Vector) Put(i, val uint64) (err error) { + return f.db.Put(f.indexKey(i), encodeUint64(val)) +} + +// PutInBatch stores a uint64 value at index i in a batch +// that can be saved later in the database. +func (f Uint64Vector) PutInBatch(batch *leveldb.Batch, i, val uint64) { + batch.Put(f.indexKey(i), encodeUint64(val)) +} + +// Inc increments a uint64 value in the database. +// This operation is not goroutine safe. +func (f Uint64Vector) Inc(i uint64) (val uint64, err error) { + val, err = f.Get(i) + if err != nil { + if err == leveldb.ErrNotFound { + val = 0 + } else { + return 0, err + } + } + val++ + return val, f.Put(i, val) +} + +// IncInBatch increments a uint64 value at index i in the batch +// by retreiving a value from the database, not the same batch. +// This operation is not goroutine safe. +func (f Uint64Vector) IncInBatch(batch *leveldb.Batch, i uint64) (val uint64, err error) { + val, err = f.Get(i) + if err != nil { + if err == leveldb.ErrNotFound { + val = 0 + } else { + return 0, err + } + } + val++ + f.PutInBatch(batch, i, val) + return val, nil +} + +// Dec decrements a uint64 value at index i in the database. +// This operation is not goroutine safe. +// The field is protected from overflow to a negative value. +func (f Uint64Vector) Dec(i uint64) (val uint64, err error) { + val, err = f.Get(i) + if err != nil { + if err == leveldb.ErrNotFound { + val = 0 + } else { + return 0, err + } + } + if val != 0 { + val-- + } + return val, f.Put(i, val) +} + +// DecInBatch decrements a uint64 value at index i in the batch +// by retreiving a value from the database, not the same batch. +// This operation is not goroutine safe. +// The field is protected from overflow to a negative value. +func (f Uint64Vector) DecInBatch(batch *leveldb.Batch, i uint64) (val uint64, err error) { + val, err = f.Get(i) + if err != nil { + if err == leveldb.ErrNotFound { + val = 0 + } else { + return 0, err + } + } + if val != 0 { + val-- + } + f.PutInBatch(batch, i, val) + return val, nil +} + +// indexKey concatenates field prefix and vector index +// returning a unique database key for a specific vector element. +func (f Uint64Vector) indexKey(i uint64) (key []byte) { + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, i) + return append(f.key, b...) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64_test.go new file mode 100644 index 00000000..75aed7d1 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/shed/vector_uint64_test.go @@ -0,0 +1,312 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package shed + +import ( + "testing" + + "github.com/syndtr/goleveldb/leveldb" +) + +// TestUint64Vector validates put and get operations +// of the Uint64Vector. +func TestUint64Vector(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + bins, err := db.NewUint64Vector("bins") + if err != nil { + t.Fatal(err) + } + + t.Run("get empty", func(t *testing.T) { + got, err := bins.Get(0) + if err != nil { + t.Fatal(err) + } + var want uint64 + if got != want { + t.Errorf("got uint64 %v, want %v", got, want) + } + }) + + t.Run("put", func(t *testing.T) { + for _, index := range []uint64{0, 1, 2, 5, 100} { + var want uint64 = 42 + index + err = bins.Put(index, want) + if err != nil { + t.Fatal(err) + } + got, err := bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + t.Run("overwrite", func(t *testing.T) { + var want uint64 = 84 + index + err = bins.Put(index, want) + if err != nil { + t.Fatal(err) + } + got, err := bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + }) + } + }) + + t.Run("put in batch", func(t *testing.T) { + for _, index := range []uint64{0, 1, 2, 3, 5, 10} { + batch := new(leveldb.Batch) + var want uint64 = 43 + index + bins.PutInBatch(batch, index, want) + err = db.WriteBatch(batch) + if err != nil { + t.Fatal(err) + } + got, err := bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + t.Run("overwrite", func(t *testing.T) { + batch := new(leveldb.Batch) + var want uint64 = 85 + index + bins.PutInBatch(batch, index, want) + err = db.WriteBatch(batch) + if err != nil { + t.Fatal(err) + } + got, err := bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + }) + } + }) +} + +// TestUint64Vector_Inc validates Inc operation +// of the Uint64Vector. +func TestUint64Vector_Inc(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + bins, err := db.NewUint64Vector("bins") + if err != nil { + t.Fatal(err) + } + + for _, index := range []uint64{0, 1, 2, 3, 5, 10} { + var want uint64 = 1 + got, err := bins.Inc(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + want = 2 + got, err = bins.Inc(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + } +} + +// TestUint64Vector_IncInBatch validates IncInBatch operation +// of the Uint64Vector. +func TestUint64Vector_IncInBatch(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + bins, err := db.NewUint64Vector("bins") + if err != nil { + t.Fatal(err) + } + + for _, index := range []uint64{0, 1, 2, 3, 5, 10} { + batch := new(leveldb.Batch) + var want uint64 = 1 + got, err := bins.IncInBatch(batch, index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + err = db.WriteBatch(batch) + if err != nil { + t.Fatal(err) + } + got, err = bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + batch2 := new(leveldb.Batch) + want = 2 + got, err = bins.IncInBatch(batch2, index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + err = db.WriteBatch(batch2) + if err != nil { + t.Fatal(err) + } + got, err = bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + } +} + +// TestUint64Vector_Dec validates Dec operation +// of the Uint64Vector. +func TestUint64Vector_Dec(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + bins, err := db.NewUint64Vector("bins") + if err != nil { + t.Fatal(err) + } + + for _, index := range []uint64{0, 1, 2, 3, 5, 10} { + // test overflow protection + var want uint64 + got, err := bins.Dec(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + want = 32 + index + err = bins.Put(index, want) + if err != nil { + t.Fatal(err) + } + + want = 31 + index + got, err = bins.Dec(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + } +} + +// TestUint64Vector_DecInBatch validates DecInBatch operation +// of the Uint64Vector. +func TestUint64Vector_DecInBatch(t *testing.T) { + db, cleanupFunc := newTestDB(t) + defer cleanupFunc() + + bins, err := db.NewUint64Vector("bins") + if err != nil { + t.Fatal(err) + } + + for _, index := range []uint64{0, 1, 2, 3, 5, 10} { + batch := new(leveldb.Batch) + var want uint64 + got, err := bins.DecInBatch(batch, index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + err = db.WriteBatch(batch) + if err != nil { + t.Fatal(err) + } + got, err = bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + batch2 := new(leveldb.Batch) + want = 42 + index + bins.PutInBatch(batch2, index, want) + err = db.WriteBatch(batch2) + if err != nil { + t.Fatal(err) + } + got, err = bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + + batch3 := new(leveldb.Batch) + want = 41 + index + got, err = bins.DecInBatch(batch3, index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + err = db.WriteBatch(batch3) + if err != nil { + t.Fatal(err) + } + got, err = bins.Get(index) + if err != nil { + t.Fatal(err) + } + if got != want { + t.Errorf("got %v uint64 %v, want %v", index, got, want) + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/chunker.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/chunker.go index 0fa5026d..b2f0f563 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/chunker.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/chunker.go @@ -25,7 +25,7 @@ import ( "time" "github.com/ethereum/go-ethereum/metrics" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/log" "github.com/ethereum/go-ethereum/swarm/spancontext" opentracing "github.com/opentracing/opentracing-go" @@ -127,7 +127,7 @@ type TreeChunker struct { func TreeJoin(ctx context.Context, addr Address, getter Getter, depth int) *LazyChunkReader { jp := &JoinerParams{ ChunkerParams: ChunkerParams{ - chunkSize: ch.DefaultSize, + chunkSize: chunk.DefaultSize, hashSize: int64(len(addr)), }, addr: addr, @@ -147,7 +147,7 @@ func TreeSplit(ctx context.Context, data io.Reader, size int64, putter Putter) ( tsp := &TreeSplitterParams{ SplitterParams: SplitterParams{ ChunkerParams: ChunkerParams{ - chunkSize: ch.DefaultSize, + chunkSize: chunk.DefaultSize, hashSize: putter.RefSize(), }, reader: data, @@ -536,7 +536,6 @@ func (r *LazyChunkReader) join(ctx context.Context, b []byte, off int64, eoff in chunkData, err := r.getter.Get(ctx, Reference(childAddress)) if err != nil { metrics.GetOrRegisterResettingTimer("lcr.getter.get.err", nil).UpdateSince(startTime) - log.Debug("lazychunkreader.join", "key", fmt.Sprintf("%x", childAddress), "err", err) select { case errC <- fmt.Errorf("chunk %v-%v not found; key: %s", off, off+treeSize, fmt.Sprintf("%x", childAddress)): case <-quitC: @@ -561,12 +560,12 @@ func (r *LazyChunkReader) join(ctx context.Context, b []byte, off int64, eoff in // Read keeps a cursor so cannot be called simulateously, see ReadAt func (r *LazyChunkReader) Read(b []byte) (read int, err error) { - log.Debug("lazychunkreader.read", "key", r.addr) + log.Trace("lazychunkreader.read", "key", r.addr) metrics.GetOrRegisterCounter("lazychunkreader.read", nil).Inc(1) read, err = r.ReadAt(b, r.off) if err != nil && err != io.EOF { - log.Debug("lazychunkreader.readat", "read", read, "err", err) + log.Trace("lazychunkreader.readat", "read", read, "err", err) metrics.GetOrRegisterCounter("lazychunkreader.read.err", nil).Inc(1) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/common_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/common_test.go index 6955ee82..c4d187b6 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/common_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/common_test.go @@ -29,7 +29,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/mattn/go-colorable" ) @@ -94,7 +94,7 @@ func mput(store ChunkStore, n int, f func(i int64) Chunk) (hs []Chunk, err error ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) defer cancel() for i := int64(0); i < int64(n); i++ { - chunk := f(ch.DefaultSize) + chunk := f(chunk.DefaultSize) go func() { select { case errc <- store.Put(ctx, chunk): @@ -142,7 +142,7 @@ func mget(store ChunkStore, hs []Address, f func(h Address, chunk Chunk) error) close(errc) }() var err error - timeout := 10 * time.Second + timeout := 20 * time.Second select { case err = <-errc: case <-time.NewTimer(timeout).C: diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/error.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/error.go index a9d0616f..1e412e55 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/error.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/error.go @@ -16,9 +16,7 @@ package storage -import ( - "errors" -) +import "github.com/ethereum/go-ethereum/swarm/chunk" const ( ErrInit = iota @@ -31,7 +29,8 @@ const ( ErrNotSynced ) +// Errors are the same as the ones in chunk package for backward compatibility. var ( - ErrChunkNotFound = errors.New("chunk not found") - ErrChunkInvalid = errors.New("invalid chunk") + ErrChunkNotFound = chunk.ErrChunkNotFound + ErrChunkInvalid = chunk.ErrChunkNotFound ) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/feed/lookup/lookup_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/feed/lookup/lookup_test.go index d71e81e9..4652feac 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/feed/lookup/lookup_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/feed/lookup/lookup_test.go @@ -346,7 +346,7 @@ type testG struct { } // test cases -var testGetNextLevelCases []testG = []testG{{e: lookup.Epoch{Time: 989875233, Level: 12}, n: 989875233, x: 11}, {e: lookup.Epoch{Time: 995807650, Level: 18}, n: 995598156, x: 19}, {e: lookup.Epoch{Time: 969167082, Level: 0}, n: 968990357, x: 18}, {e: lookup.Epoch{Time: 993087628, Level: 14}, n: 992987044, x: 20}, {e: lookup.Epoch{Time: 963364631, Level: 20}, n: 963364630, x: 19}, {e: lookup.Epoch{Time: 963497510, Level: 16}, n: 963370732, x: 18}, {e: lookup.Epoch{Time: 955421349, Level: 22}, n: 955421348, x: 21}, {e: lookup.Epoch{Time: 968220379, Level: 15}, n: 968220378, x: 14}, {e: lookup.Epoch{Time: 939129014, Level: 6}, n: 939128771, x: 11}, {e: lookup.Epoch{Time: 907847903, Level: 6}, n: 907791833, x: 18}, {e: lookup.Epoch{Time: 910835564, Level: 15}, n: 910835564, x: 14}, {e: lookup.Epoch{Time: 913578333, Level: 22}, n: 881808431, x: 25}, {e: lookup.Epoch{Time: 895818460, Level: 3}, n: 895818132, x: 9}, {e: lookup.Epoch{Time: 903843025, Level: 24}, n: 895609561, x: 23}, {e: lookup.Epoch{Time: 877889433, Level: 13}, n: 877877093, x: 15}, {e: lookup.Epoch{Time: 901450396, Level: 10}, n: 901450058, x: 9}, {e: lookup.Epoch{Time: 925179910, Level: 3}, n: 925168393, x: 16}, {e: lookup.Epoch{Time: 913485477, Level: 21}, n: 913485476, x: 20}, {e: lookup.Epoch{Time: 924462991, Level: 18}, n: 924462990, x: 17}, {e: lookup.Epoch{Time: 941175128, Level: 13}, n: 941175127, x: 12}, {e: lookup.Epoch{Time: 920126583, Level: 3}, n: 920100782, x: 19}, {e: lookup.Epoch{Time: 932403200, Level: 9}, n: 932279891, x: 17}, {e: lookup.Epoch{Time: 948284931, Level: 2}, n: 948284921, x: 9}, {e: lookup.Epoch{Time: 953540997, Level: 7}, n: 950547986, x: 22}, {e: lookup.Epoch{Time: 926639837, Level: 18}, n: 918608882, x: 24}, {e: lookup.Epoch{Time: 954637598, Level: 1}, n: 954578761, x: 17}, {e: lookup.Epoch{Time: 943482981, Level: 10}, n: 942924151, x: 19}, {e: lookup.Epoch{Time: 963580771, Level: 7}, n: 963580771, x: 6}, {e: lookup.Epoch{Time: 993744930, Level: 7}, n: 993690858, x: 16}, {e: lookup.Epoch{Time: 1018890213, Level: 12}, n: 1018890212, x: 11}, {e: lookup.Epoch{Time: 1030309411, Level: 2}, n: 1030309227, x: 9}, {e: lookup.Epoch{Time: 1063204997, Level: 20}, n: 1063204996, x: 19}, {e: lookup.Epoch{Time: 1094340832, Level: 6}, n: 1094340633, x: 7}, {e: lookup.Epoch{Time: 1077880597, Level: 10}, n: 1075914292, x: 20}, {e: lookup.Epoch{Time: 1051114957, Level: 18}, n: 1051114957, x: 17}, {e: lookup.Epoch{Time: 1045649701, Level: 22}, n: 1045649700, x: 21}, {e: lookup.Epoch{Time: 1066198885, Level: 14}, n: 1066198884, x: 13}, {e: lookup.Epoch{Time: 1053231952, Level: 1}, n: 1053210845, x: 16}, {e: lookup.Epoch{Time: 1068763404, Level: 14}, n: 1068675428, x: 18}, {e: lookup.Epoch{Time: 1039042173, Level: 15}, n: 1038973110, x: 17}, {e: lookup.Epoch{Time: 1050747636, Level: 6}, n: 1050747364, x: 9}, {e: lookup.Epoch{Time: 1030034434, Level: 23}, n: 1030034433, x: 22}, {e: lookup.Epoch{Time: 1003783425, Level: 18}, n: 1003783424, x: 17}, {e: lookup.Epoch{Time: 988163976, Level: 15}, n: 988084064, x: 17}, {e: lookup.Epoch{Time: 1007222377, Level: 15}, n: 1007222377, x: 14}, {e: lookup.Epoch{Time: 1001211375, Level: 13}, n: 1001208178, x: 14}, {e: lookup.Epoch{Time: 997623199, Level: 8}, n: 997623198, x: 7}, {e: lookup.Epoch{Time: 1026283830, Level: 10}, n: 1006681704, x: 24}, {e: lookup.Epoch{Time: 1019421907, Level: 20}, n: 1019421906, x: 19}, {e: lookup.Epoch{Time: 1043154306, Level: 16}, n: 1043108343, x: 16}, {e: lookup.Epoch{Time: 1075643767, Level: 17}, n: 1075325898, x: 18}, {e: lookup.Epoch{Time: 1043726309, Level: 20}, n: 1043726308, x: 19}, {e: lookup.Epoch{Time: 1056415324, Level: 17}, n: 1056415324, x: 16}, {e: lookup.Epoch{Time: 1088650219, Level: 13}, n: 1088650218, x: 12}, {e: lookup.Epoch{Time: 1088551662, Level: 7}, n: 1088543355, x: 13}, {e: lookup.Epoch{Time: 1069667265, Level: 6}, n: 1069667075, x: 7}, {e: lookup.Epoch{Time: 1079145970, Level: 18}, n: 1079145969, x: 17}, {e: lookup.Epoch{Time: 1083338876, Level: 7}, n: 1083338875, x: 6}, {e: lookup.Epoch{Time: 1051581086, Level: 4}, n: 1051568869, x: 14}, {e: lookup.Epoch{Time: 1028430882, Level: 4}, n: 1028430864, x: 5}, {e: lookup.Epoch{Time: 1057356462, Level: 1}, n: 1057356417, x: 5}, {e: lookup.Epoch{Time: 1033104266, Level: 0}, n: 1033097479, x: 13}, {e: lookup.Epoch{Time: 1031391367, Level: 11}, n: 1031387304, x: 14}, {e: lookup.Epoch{Time: 1049781164, Level: 15}, n: 1049781163, x: 14}, {e: lookup.Epoch{Time: 1027271628, Level: 12}, n: 1027271627, x: 11}, {e: lookup.Epoch{Time: 1057270560, Level: 23}, n: 1057270560, x: 22}, {e: lookup.Epoch{Time: 1047501317, Level: 15}, n: 1047501317, x: 14}, {e: lookup.Epoch{Time: 1058349035, Level: 11}, n: 1045175573, x: 24}, {e: lookup.Epoch{Time: 1057396147, Level: 20}, n: 1057396147, x: 19}, {e: lookup.Epoch{Time: 1048906375, Level: 18}, n: 1039616919, x: 25}, {e: lookup.Epoch{Time: 1074294831, Level: 20}, n: 1074294831, x: 19}, {e: lookup.Epoch{Time: 1088946052, Level: 1}, n: 1088917364, x: 14}, {e: lookup.Epoch{Time: 1112337595, Level: 17}, n: 1111008110, x: 22}, {e: lookup.Epoch{Time: 1099990284, Level: 5}, n: 1099968370, x: 15}, {e: lookup.Epoch{Time: 1087036441, Level: 16}, n: 1053967855, x: 25}, {e: lookup.Epoch{Time: 1069225185, Level: 8}, n: 1069224660, x: 10}, {e: lookup.Epoch{Time: 1057505479, Level: 9}, n: 1057505170, x: 14}, {e: lookup.Epoch{Time: 1072381377, Level: 12}, n: 1065950959, x: 22}, {e: lookup.Epoch{Time: 1093887139, Level: 8}, n: 1093863305, x: 14}, {e: lookup.Epoch{Time: 1082366510, Level: 24}, n: 1082366510, x: 23}, {e: lookup.Epoch{Time: 1103231132, Level: 14}, n: 1102292201, x: 22}, {e: lookup.Epoch{Time: 1094502355, Level: 3}, n: 1094324652, x: 18}, {e: lookup.Epoch{Time: 1068488344, Level: 12}, n: 1067577330, x: 19}, {e: lookup.Epoch{Time: 1050278233, Level: 12}, n: 1050278232, x: 11}, {e: lookup.Epoch{Time: 1047660768, Level: 5}, n: 1047652137, x: 17}, {e: lookup.Epoch{Time: 1060116167, Level: 11}, n: 1060114091, x: 12}, {e: lookup.Epoch{Time: 1068149392, Level: 21}, n: 1052074801, x: 24}, {e: lookup.Epoch{Time: 1081934120, Level: 6}, n: 1081933847, x: 8}, {e: lookup.Epoch{Time: 1107943693, Level: 16}, n: 1107096139, x: 25}, {e: lookup.Epoch{Time: 1131571649, Level: 9}, n: 1131570428, x: 11}, {e: lookup.Epoch{Time: 1123139367, Level: 0}, n: 1122912198, x: 20}, {e: lookup.Epoch{Time: 1121144423, Level: 6}, n: 1120568289, x: 20}, {e: lookup.Epoch{Time: 1089932411, Level: 17}, n: 1089932410, x: 16}, {e: lookup.Epoch{Time: 1104899012, Level: 22}, n: 1098978789, x: 22}, {e: lookup.Epoch{Time: 1094588059, Level: 21}, n: 1094588059, x: 20}, {e: lookup.Epoch{Time: 1114987438, Level: 24}, n: 1114987437, x: 23}, {e: lookup.Epoch{Time: 1084186305, Level: 7}, n: 1084186241, x: 6}, {e: lookup.Epoch{Time: 1058827111, Level: 8}, n: 1058826504, x: 9}, {e: lookup.Epoch{Time: 1090679810, Level: 12}, n: 1090616539, x: 17}, {e: lookup.Epoch{Time: 1084299475, Level: 23}, n: 1084299475, x: 22}} +var testGetNextLevelCases = []testG{{e: lookup.Epoch{Time: 989875233, Level: 12}, n: 989875233, x: 11}, {e: lookup.Epoch{Time: 995807650, Level: 18}, n: 995598156, x: 19}, {e: lookup.Epoch{Time: 969167082, Level: 0}, n: 968990357, x: 18}, {e: lookup.Epoch{Time: 993087628, Level: 14}, n: 992987044, x: 20}, {e: lookup.Epoch{Time: 963364631, Level: 20}, n: 963364630, x: 19}, {e: lookup.Epoch{Time: 963497510, Level: 16}, n: 963370732, x: 18}, {e: lookup.Epoch{Time: 955421349, Level: 22}, n: 955421348, x: 21}, {e: lookup.Epoch{Time: 968220379, Level: 15}, n: 968220378, x: 14}, {e: lookup.Epoch{Time: 939129014, Level: 6}, n: 939128771, x: 11}, {e: lookup.Epoch{Time: 907847903, Level: 6}, n: 907791833, x: 18}, {e: lookup.Epoch{Time: 910835564, Level: 15}, n: 910835564, x: 14}, {e: lookup.Epoch{Time: 913578333, Level: 22}, n: 881808431, x: 25}, {e: lookup.Epoch{Time: 895818460, Level: 3}, n: 895818132, x: 9}, {e: lookup.Epoch{Time: 903843025, Level: 24}, n: 895609561, x: 23}, {e: lookup.Epoch{Time: 877889433, Level: 13}, n: 877877093, x: 15}, {e: lookup.Epoch{Time: 901450396, Level: 10}, n: 901450058, x: 9}, {e: lookup.Epoch{Time: 925179910, Level: 3}, n: 925168393, x: 16}, {e: lookup.Epoch{Time: 913485477, Level: 21}, n: 913485476, x: 20}, {e: lookup.Epoch{Time: 924462991, Level: 18}, n: 924462990, x: 17}, {e: lookup.Epoch{Time: 941175128, Level: 13}, n: 941175127, x: 12}, {e: lookup.Epoch{Time: 920126583, Level: 3}, n: 920100782, x: 19}, {e: lookup.Epoch{Time: 932403200, Level: 9}, n: 932279891, x: 17}, {e: lookup.Epoch{Time: 948284931, Level: 2}, n: 948284921, x: 9}, {e: lookup.Epoch{Time: 953540997, Level: 7}, n: 950547986, x: 22}, {e: lookup.Epoch{Time: 926639837, Level: 18}, n: 918608882, x: 24}, {e: lookup.Epoch{Time: 954637598, Level: 1}, n: 954578761, x: 17}, {e: lookup.Epoch{Time: 943482981, Level: 10}, n: 942924151, x: 19}, {e: lookup.Epoch{Time: 963580771, Level: 7}, n: 963580771, x: 6}, {e: lookup.Epoch{Time: 993744930, Level: 7}, n: 993690858, x: 16}, {e: lookup.Epoch{Time: 1018890213, Level: 12}, n: 1018890212, x: 11}, {e: lookup.Epoch{Time: 1030309411, Level: 2}, n: 1030309227, x: 9}, {e: lookup.Epoch{Time: 1063204997, Level: 20}, n: 1063204996, x: 19}, {e: lookup.Epoch{Time: 1094340832, Level: 6}, n: 1094340633, x: 7}, {e: lookup.Epoch{Time: 1077880597, Level: 10}, n: 1075914292, x: 20}, {e: lookup.Epoch{Time: 1051114957, Level: 18}, n: 1051114957, x: 17}, {e: lookup.Epoch{Time: 1045649701, Level: 22}, n: 1045649700, x: 21}, {e: lookup.Epoch{Time: 1066198885, Level: 14}, n: 1066198884, x: 13}, {e: lookup.Epoch{Time: 1053231952, Level: 1}, n: 1053210845, x: 16}, {e: lookup.Epoch{Time: 1068763404, Level: 14}, n: 1068675428, x: 18}, {e: lookup.Epoch{Time: 1039042173, Level: 15}, n: 1038973110, x: 17}, {e: lookup.Epoch{Time: 1050747636, Level: 6}, n: 1050747364, x: 9}, {e: lookup.Epoch{Time: 1030034434, Level: 23}, n: 1030034433, x: 22}, {e: lookup.Epoch{Time: 1003783425, Level: 18}, n: 1003783424, x: 17}, {e: lookup.Epoch{Time: 988163976, Level: 15}, n: 988084064, x: 17}, {e: lookup.Epoch{Time: 1007222377, Level: 15}, n: 1007222377, x: 14}, {e: lookup.Epoch{Time: 1001211375, Level: 13}, n: 1001208178, x: 14}, {e: lookup.Epoch{Time: 997623199, Level: 8}, n: 997623198, x: 7}, {e: lookup.Epoch{Time: 1026283830, Level: 10}, n: 1006681704, x: 24}, {e: lookup.Epoch{Time: 1019421907, Level: 20}, n: 1019421906, x: 19}, {e: lookup.Epoch{Time: 1043154306, Level: 16}, n: 1043108343, x: 16}, {e: lookup.Epoch{Time: 1075643767, Level: 17}, n: 1075325898, x: 18}, {e: lookup.Epoch{Time: 1043726309, Level: 20}, n: 1043726308, x: 19}, {e: lookup.Epoch{Time: 1056415324, Level: 17}, n: 1056415324, x: 16}, {e: lookup.Epoch{Time: 1088650219, Level: 13}, n: 1088650218, x: 12}, {e: lookup.Epoch{Time: 1088551662, Level: 7}, n: 1088543355, x: 13}, {e: lookup.Epoch{Time: 1069667265, Level: 6}, n: 1069667075, x: 7}, {e: lookup.Epoch{Time: 1079145970, Level: 18}, n: 1079145969, x: 17}, {e: lookup.Epoch{Time: 1083338876, Level: 7}, n: 1083338875, x: 6}, {e: lookup.Epoch{Time: 1051581086, Level: 4}, n: 1051568869, x: 14}, {e: lookup.Epoch{Time: 1028430882, Level: 4}, n: 1028430864, x: 5}, {e: lookup.Epoch{Time: 1057356462, Level: 1}, n: 1057356417, x: 5}, {e: lookup.Epoch{Time: 1033104266, Level: 0}, n: 1033097479, x: 13}, {e: lookup.Epoch{Time: 1031391367, Level: 11}, n: 1031387304, x: 14}, {e: lookup.Epoch{Time: 1049781164, Level: 15}, n: 1049781163, x: 14}, {e: lookup.Epoch{Time: 1027271628, Level: 12}, n: 1027271627, x: 11}, {e: lookup.Epoch{Time: 1057270560, Level: 23}, n: 1057270560, x: 22}, {e: lookup.Epoch{Time: 1047501317, Level: 15}, n: 1047501317, x: 14}, {e: lookup.Epoch{Time: 1058349035, Level: 11}, n: 1045175573, x: 24}, {e: lookup.Epoch{Time: 1057396147, Level: 20}, n: 1057396147, x: 19}, {e: lookup.Epoch{Time: 1048906375, Level: 18}, n: 1039616919, x: 25}, {e: lookup.Epoch{Time: 1074294831, Level: 20}, n: 1074294831, x: 19}, {e: lookup.Epoch{Time: 1088946052, Level: 1}, n: 1088917364, x: 14}, {e: lookup.Epoch{Time: 1112337595, Level: 17}, n: 1111008110, x: 22}, {e: lookup.Epoch{Time: 1099990284, Level: 5}, n: 1099968370, x: 15}, {e: lookup.Epoch{Time: 1087036441, Level: 16}, n: 1053967855, x: 25}, {e: lookup.Epoch{Time: 1069225185, Level: 8}, n: 1069224660, x: 10}, {e: lookup.Epoch{Time: 1057505479, Level: 9}, n: 1057505170, x: 14}, {e: lookup.Epoch{Time: 1072381377, Level: 12}, n: 1065950959, x: 22}, {e: lookup.Epoch{Time: 1093887139, Level: 8}, n: 1093863305, x: 14}, {e: lookup.Epoch{Time: 1082366510, Level: 24}, n: 1082366510, x: 23}, {e: lookup.Epoch{Time: 1103231132, Level: 14}, n: 1102292201, x: 22}, {e: lookup.Epoch{Time: 1094502355, Level: 3}, n: 1094324652, x: 18}, {e: lookup.Epoch{Time: 1068488344, Level: 12}, n: 1067577330, x: 19}, {e: lookup.Epoch{Time: 1050278233, Level: 12}, n: 1050278232, x: 11}, {e: lookup.Epoch{Time: 1047660768, Level: 5}, n: 1047652137, x: 17}, {e: lookup.Epoch{Time: 1060116167, Level: 11}, n: 1060114091, x: 12}, {e: lookup.Epoch{Time: 1068149392, Level: 21}, n: 1052074801, x: 24}, {e: lookup.Epoch{Time: 1081934120, Level: 6}, n: 1081933847, x: 8}, {e: lookup.Epoch{Time: 1107943693, Level: 16}, n: 1107096139, x: 25}, {e: lookup.Epoch{Time: 1131571649, Level: 9}, n: 1131570428, x: 11}, {e: lookup.Epoch{Time: 1123139367, Level: 0}, n: 1122912198, x: 20}, {e: lookup.Epoch{Time: 1121144423, Level: 6}, n: 1120568289, x: 20}, {e: lookup.Epoch{Time: 1089932411, Level: 17}, n: 1089932410, x: 16}, {e: lookup.Epoch{Time: 1104899012, Level: 22}, n: 1098978789, x: 22}, {e: lookup.Epoch{Time: 1094588059, Level: 21}, n: 1094588059, x: 20}, {e: lookup.Epoch{Time: 1114987438, Level: 24}, n: 1114987437, x: 23}, {e: lookup.Epoch{Time: 1084186305, Level: 7}, n: 1084186241, x: 6}, {e: lookup.Epoch{Time: 1058827111, Level: 8}, n: 1058826504, x: 9}, {e: lookup.Epoch{Time: 1090679810, Level: 12}, n: 1090616539, x: 17}, {e: lookup.Epoch{Time: 1084299475, Level: 23}, n: 1084299475, x: 22}} func TestGetNextLevel(t *testing.T) { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/hasherstore.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/hasherstore.go index 23b52ee0..345ce743 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/hasherstore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/hasherstore.go @@ -21,7 +21,7 @@ import ( "fmt" "sync/atomic" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/storage/encryption" "golang.org/x/crypto/sha3" ) @@ -156,7 +156,7 @@ func (h *hasherStore) createHash(chunkData ChunkData) Address { return hasher.Sum(nil) } -func (h *hasherStore) createChunk(chunkData ChunkData) *chunk { +func (h *hasherStore) createChunk(chunkData ChunkData) Chunk { hash := h.createHash(chunkData) chunk := NewChunk(hash, chunkData) return chunk @@ -189,9 +189,9 @@ func (h *hasherStore) decryptChunkData(chunkData ChunkData, encryptionKey encryp // removing extra bytes which were just added for padding length := ChunkData(decryptedSpan).Size() - for length > ch.DefaultSize { - length = length + (ch.DefaultSize - 1) - length = length / ch.DefaultSize + for length > chunk.DefaultSize { + length = length + (chunk.DefaultSize - 1) + length = length / chunk.DefaultSize length *= uint64(h.refSize) } @@ -232,14 +232,14 @@ func (h *hasherStore) decrypt(chunkData ChunkData, key encryption.Key) ([]byte, } func (h *hasherStore) newSpanEncryption(key encryption.Key) encryption.Encryption { - return encryption.New(key, 0, uint32(ch.DefaultSize/h.refSize), sha3.NewLegacyKeccak256) + return encryption.New(key, 0, uint32(chunk.DefaultSize/h.refSize), sha3.NewLegacyKeccak256) } func (h *hasherStore) newDataEncryption(key encryption.Key) encryption.Encryption { - return encryption.New(key, int(ch.DefaultSize), 0, sha3.NewLegacyKeccak256) + return encryption.New(key, int(chunk.DefaultSize), 0, sha3.NewLegacyKeccak256) } -func (h *hasherStore) storeChunk(ctx context.Context, chunk *chunk) { +func (h *hasherStore) storeChunk(ctx context.Context, chunk Chunk) { atomic.AddUint64(&h.nrChunks, 1) go func() { select { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore.go index 9e4d6384..fd5ec9e3 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore.go @@ -312,7 +312,7 @@ func decodeIndex(data []byte, index *dpaDBIndex) error { return dec.Decode(index) } -func decodeData(addr Address, data []byte) (*chunk, error) { +func decodeData(addr Address, data []byte) (Chunk, error) { return NewChunk(addr, data[32:]), nil } @@ -502,7 +502,7 @@ func (s *LDBStore) Import(in io.Reader) (int64, error) { } // Cleanup iterates over the database and deletes chunks if they pass the `f` condition -func (s *LDBStore) Cleanup(f func(*chunk) bool) { +func (s *LDBStore) Cleanup(f func(Chunk) bool) { var errorsFound, removed, total int it := s.db.NewIterator() @@ -527,8 +527,8 @@ func (s *LDBStore) Cleanup(f func(*chunk) bool) { if err != nil { found := false - // highest possible proximity is 255 - for po = 1; po <= 255; po++ { + // The highest possible proximity is 255, so exit loop upon overflow. + for po = uint8(1); po != 0; po++ { datakey = getDataKey(index.Idx, po) data, err = s.db.Get(datakey) if err == nil { @@ -551,12 +551,14 @@ func (s *LDBStore) Cleanup(f func(*chunk) bool) { continue } - cs := int64(binary.LittleEndian.Uint64(c.sdata[:8])) - log.Trace("chunk", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(c.sdata), "size", cs) + sdata := c.Data() + + cs := int64(binary.LittleEndian.Uint64(sdata[:8])) + log.Trace("chunk", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(sdata), "size", cs) // if chunk is to be removed if f(c) { - log.Warn("chunk for cleanup", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(c.sdata), "size", cs) + log.Warn("chunk for cleanup", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(sdata), "size", cs) s.deleteNow(&index, getIndexKey(key[1:]), po) removed++ errorsFound++ @@ -980,7 +982,7 @@ func (s *LDBStore) Has(_ context.Context, addr Address) bool { } // TODO: To conform with other private methods of this object indices should not be updated -func (s *LDBStore) get(addr Address) (chunk *chunk, err error) { +func (s *LDBStore) get(addr Address) (chunk Chunk, err error) { if s.closed { return nil, ErrDBClosed } @@ -1003,7 +1005,10 @@ func (s *LDBStore) get(addr Address) (chunk *chunk, err error) { if err != nil { log.Trace("ldbstore.get chunk found but could not be accessed", "key", addr, "err", err) s.deleteNow(index, getIndexKey(addr), s.po(addr)) - return + if err == leveldb.ErrNotFound { + return nil, ErrChunkNotFound + } + return nil, err } } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore_test.go index 45ae09b2..d17bd7d0 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/ldbstore_test.go @@ -26,10 +26,9 @@ import ( "strconv" "strings" "testing" - "time" "github.com/ethereum/go-ethereum/common" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/log" "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" ldberrors "github.com/syndtr/goleveldb/leveldb/errors" @@ -104,7 +103,7 @@ func TestMarkAccessed(t *testing.T) { t.Fatalf("init dbStore failed: %v", err) } - h := GenerateRandomChunk(ch.DefaultSize) + h := GenerateRandomChunk(chunk.DefaultSize) db.Put(context.Background(), h) @@ -190,11 +189,11 @@ func TestMockDbStoreNotFound(t *testing.T) { } func testIterator(t *testing.T, mock bool) { - var chunkcount int = 32 var i int var poc uint + chunkcount := 32 chunkkeys := NewAddressCollection(chunkcount) - chunkkeys_results := NewAddressCollection(chunkcount) + chunkkeysResults := NewAddressCollection(chunkcount) db, cleanup, err := newTestDbStore(mock, false) defer cleanup() @@ -202,7 +201,7 @@ func testIterator(t *testing.T, mock bool) { t.Fatalf("init dbStore failed: %v", err) } - chunks := GenerateRandomChunks(ch.DefaultSize, chunkcount) + chunks := GenerateRandomChunks(chunk.DefaultSize, chunkcount) for i = 0; i < len(chunks); i++ { chunkkeys[i] = chunks[i].Address() @@ -219,7 +218,7 @@ func testIterator(t *testing.T, mock bool) { for poc = 0; poc <= 255; poc++ { err := db.SyncIterator(0, uint64(chunkkeys.Len()), uint8(poc), func(k Address, n uint64) bool { log.Trace(fmt.Sprintf("Got key %v number %d poc %d", k, n, uint8(poc))) - chunkkeys_results[n] = k + chunkkeysResults[n] = k i++ return true }) @@ -229,8 +228,8 @@ func testIterator(t *testing.T, mock bool) { } for i = 0; i < chunkcount; i++ { - if !bytes.Equal(chunkkeys[i], chunkkeys_results[i]) { - t.Fatalf("Chunk put #%d key '%v' does not match iterator's key '%v'", i, chunkkeys[i], chunkkeys_results[i]) + if !bytes.Equal(chunkkeys[i], chunkkeysResults[i]) { + t.Fatalf("Chunk put #%d key '%v' does not match iterator's key '%v'", i, chunkkeys[i], chunkkeysResults[i]) } } @@ -372,11 +371,11 @@ func testLDBStoreCollectGarbage(t *testing.T) { t.Fatal(err.Error()) } allChunks = append(allChunks, chunks...) + ldb.lock.RLock() log.Debug("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt, "cap", capacity, "n", n) + ldb.lock.RUnlock() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) + waitGc(ldb) } // attempt gets on all put chunks @@ -450,6 +449,7 @@ func TestLDBStoreAddRemove(t *testing.T) { } func testLDBStoreRemoveThenCollectGarbage(t *testing.T) { + t.Skip("flaky with -race flag") params := strings.Split(t.Name(), "/") capacity, err := strconv.Atoi(params[2]) @@ -468,7 +468,7 @@ func testLDBStoreRemoveThenCollectGarbage(t *testing.T) { // put capacity count number of chunks chunks := make([]Chunk, n) for i := 0; i < n; i++ { - c := GenerateRandomChunk(ch.DefaultSize) + c := GenerateRandomChunk(chunk.DefaultSize) chunks[i] = c log.Trace("generate random chunk", "idx", i, "chunk", c) } @@ -480,9 +480,7 @@ func testLDBStoreRemoveThenCollectGarbage(t *testing.T) { } } - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) + waitGc(ldb) // delete all chunks // (only count the ones actually deleted, the rest will have been gc'd) @@ -521,14 +519,14 @@ func testLDBStoreRemoveThenCollectGarbage(t *testing.T) { remaining -= putCount for putCount > 0 { ldb.Put(context.TODO(), chunks[puts]) + ldb.lock.RLock() log.Debug("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt, "cap", capacity, "n", n, "puts", puts, "remaining", remaining, "roundtarget", roundTarget) + ldb.lock.RUnlock() puts++ putCount-- } - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) + waitGc(ldb) } // expect first surplus chunks to be missing, because they have the smallest access value @@ -581,9 +579,7 @@ func TestLDBStoreCollectGarbageAccessUnlikeIndex(t *testing.T) { } // wait for garbage collection to kick in on the responsible actor - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) + waitGc(ldb) var missing int for i, ch := range chunks[2 : capacity/2] { @@ -772,7 +768,10 @@ func TestCleanIndex(t *testing.T) { } } -func waitGc(ctx context.Context, ldb *LDBStore) { +// Note: waitGc does not guarantee that we wait 1 GC round; it only +// guarantees that if the GC is running we wait for that run to finish +// ticket: https://github.com/ethersphere/go-ethereum/issues/1151 +func waitGc(ldb *LDBStore) { <-ldb.gc.runC ldb.gc.runC <- struct{}{} } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore.go index eefb7565..a8f6f037 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore.go @@ -241,7 +241,7 @@ func (ls *LocalStore) Migrate() error { func (ls *LocalStore) migrateFromNoneToPurity() { // delete chunks that are not valid, i.e. chunks that do not pass // any of the ls.Validators - ls.DbStore.Cleanup(func(c *chunk) bool { + ls.DbStore.Cleanup(func(c Chunk) bool { return !ls.isValid(c) }) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc.go index 7718d1e5..84c4f596 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc.go @@ -14,84 +14,9 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -/* -Counting number of items in garbage collection index - -The number of items in garbage collection index is not the same as the number of -chunks in retrieval index (total number of stored chunks). Chunk can be garbage -collected only when it is set to a synced state by ModSetSync, and only then can -be counted into garbage collection size, which determines whether a number of -chunk should be removed from the storage by the garbage collection. This opens a -possibility that the storage size exceeds the limit if files are locally -uploaded and the node is not connected to other nodes or there is a problem with -syncing. - -Tracking of garbage collection size (gcSize) is focused on performance. Key -points: - - 1. counting the number of key/value pairs in LevelDB takes around 0.7s for 1e6 - on a very fast ssd (unacceptable long time in reality) - 2. locking leveldb batch writes with a global mutex (serial batch writes) is - not acceptable, we should use locking per chunk address - -Because of point 1. we cannot count the number of items in garbage collection -index in New constructor as it could last very long for realistic scenarios -where limit is 5e6 and nodes are running on slower hdd disks or cloud providers -with low IOPS. - -Point 2. is a performance optimization to allow parallel batch writes with -getters, putters and setters. Every single batch that they create contain only -information related to a single chunk, no relations with other chunks or shared -statistical data (like gcSize). This approach avoids race conditions on writing -batches in parallel, but creates a problem of synchronizing statistical data -values like gcSize. With global mutex lock, any data could be written by any -batch, but would not use utilize the full potential of leveldb parallel writes. - -To mitigate this two problems, the implementation of counting and persisting -gcSize is split into two parts. One is the in-memory value (gcSize) that is fast -to read and write with a dedicated mutex (gcSizeMu) if the batch which adds or -removes items from garbage collection index is successful. The second part is -the reliable persistence of this value to leveldb database, as storedGCSize -field. This database field is saved by writeGCSizeWorker and writeGCSize -functions when in-memory gcSize variable is changed, but no too often to avoid -very frequent database writes. This database writes are triggered by -writeGCSizeTrigger when a call is made to function incGCSize. Trigger ensures -that no database writes are done only when gcSize is changed (contrary to a -simpler periodic writes or checks). A backoff of 10s in writeGCSizeWorker -ensures that no frequent batch writes are made. Saving the storedGCSize on -database Close function ensures that in-memory gcSize is persisted when database -is closed. - -This persistence must be resilient to failures like panics. For this purpose, a -collection of hashes that are added to the garbage collection index, but still -not persisted to storedGCSize, must be tracked to count them in when DB is -constructed again with New function after the failure (swarm node restarts). On -every batch write that adds a new item to garbage collection index, the same -hash is added to gcUncountedHashesIndex. This ensures that there is a persisted -information which hashes were added to the garbage collection index. But, when -the storedGCSize is saved by writeGCSize function, this values are removed in -the same batch in which storedGCSize is changed to ensure consistency. When the -panic happen, or database Close method is not saved. The database storage -contains all information to reliably and efficiently get the correct number of -items in garbage collection index. This is performed in the New function when -all hashes in gcUncountedHashesIndex are counted, added to the storedGCSize and -saved to the disk before the database is constructed again. Index -gcUncountedHashesIndex is acting as dirty bit for recovery that provides -information what needs to be corrected. With a simple dirty bit, the whole -garbage collection index should me counted on recovery instead only the items in -gcUncountedHashesIndex. Because of the triggering mechanizm of writeGCSizeWorker -and relatively short backoff time, the number of hashes in -gcUncountedHashesIndex should be low and it should take a very short time to -recover from the previous failure. If there was no failure and -gcUncountedHashesIndex is empty, which is the usual case, New function will take -the minimal time to return. -*/ - package localstore import ( - "time" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/swarm/shed" "github.com/syndtr/goleveldb/leveldb" @@ -109,7 +34,7 @@ var ( gcTargetRatio = 0.9 // gcBatchSize limits the number of chunks in a single // leveldb batch on garbage collection. - gcBatchSize int64 = 1000 + gcBatchSize uint64 = 1000 ) // collectGarbageWorker is a long running function that waits for @@ -117,6 +42,8 @@ var ( // run. GC run iterates on gcIndex and removes older items // form retrieval and other indexes. func (db *DB) collectGarbageWorker() { + defer close(db.collectGarbageWorkerDone) + for { select { case <-db.collectGarbageTrigger: @@ -132,7 +59,7 @@ func (db *DB) collectGarbageWorker() { db.triggerGarbageCollection() } - if testHookCollectGarbage != nil { + if collectedCount > 0 && testHookCollectGarbage != nil { testHookCollectGarbage(collectedCount) } case <-db.close: @@ -147,20 +74,21 @@ func (db *DB) collectGarbageWorker() { // is false, another call to this function is needed to collect // the rest of the garbage as the batch size limit is reached. // This function is called in collectGarbageWorker. -func (db *DB) collectGarbage() (collectedCount int64, done bool, err error) { +func (db *DB) collectGarbage() (collectedCount uint64, done bool, err error) { batch := new(leveldb.Batch) target := db.gcTarget() + // protect database from changing idexes and gcSize + db.batchMu.Lock() + defer db.batchMu.Unlock() + + gcSize, err := db.gcSize.Get() + if err != nil { + return 0, true, err + } + done = true err = db.gcIndex.Iterate(func(item shed.Item) (stop bool, err error) { - // protect parallel updates - unlock, err := db.lockAddr(item.Address) - if err != nil { - return false, err - } - defer unlock() - - gcSize := db.getGCSize() if gcSize-collectedCount <= target { return true, nil } @@ -182,49 +110,19 @@ func (db *DB) collectGarbage() (collectedCount int64, done bool, err error) { return 0, false, err } + db.gcSize.PutInBatch(batch, gcSize-collectedCount) + err = db.shed.WriteBatch(batch) if err != nil { return 0, false, err } - // batch is written, decrement gcSize - db.incGCSize(-collectedCount) return collectedCount, done, nil } // gcTrigger retruns the absolute value for garbage collection // target value, calculated from db.capacity and gcTargetRatio. -func (db *DB) gcTarget() (target int64) { - return int64(float64(db.capacity) * gcTargetRatio) -} - -// incGCSize increments gcSize by the provided number. -// If count is negative, it will decrement gcSize. -func (db *DB) incGCSize(count int64) { - if count == 0 { - return - } - - db.gcSizeMu.Lock() - new := db.gcSize + count - db.gcSize = new - db.gcSizeMu.Unlock() - - select { - case db.writeGCSizeTrigger <- struct{}{}: - default: - } - if new >= db.capacity { - db.triggerGarbageCollection() - } -} - -// getGCSize returns gcSize value by locking it -// with gcSizeMu mutex. -func (db *DB) getGCSize() (count int64) { - db.gcSizeMu.RLock() - count = db.gcSize - db.gcSizeMu.RUnlock() - return count +func (db *DB) gcTarget() (target uint64) { + return uint64(float64(db.capacity) * gcTargetRatio) } // triggerGarbageCollection signals collectGarbageWorker @@ -237,66 +135,41 @@ func (db *DB) triggerGarbageCollection() { } } -// writeGCSizeWorker writes gcSize on trigger event -// and waits writeGCSizeDelay after each write. -// It implements a linear backoff with delay of -// writeGCSizeDelay duration to avoid very frequent -// database operations. -func (db *DB) writeGCSizeWorker() { - for { - select { - case <-db.writeGCSizeTrigger: - err := db.writeGCSize(db.getGCSize()) - if err != nil { - log.Error("localstore write gc size", "err", err) - } - // Wait some time before writing gc size in the next - // iteration. This prevents frequent I/O operations. - select { - case <-time.After(10 * time.Second): - case <-db.close: - return - } - case <-db.close: - return - } +// incGCSizeInBatch changes gcSize field value +// by change which can be negative. This function +// must be called under batchMu lock. +func (db *DB) incGCSizeInBatch(batch *leveldb.Batch, change int64) (err error) { + if change == 0 { + return nil } -} - -// writeGCSize stores the number of items in gcIndex. -// It removes all hashes from gcUncountedHashesIndex -// not to include them on the next DB initialization -// (New function) when gcSize is counted. -func (db *DB) writeGCSize(gcSize int64) (err error) { - const maxBatchSize = 1000 - - batch := new(leveldb.Batch) - db.storedGCSize.PutInBatch(batch, uint64(gcSize)) - batchSize := 1 - - // use only one iterator as it acquires its snapshot - // not to remove hashes from index that are added - // after stored gc size is written - err = db.gcUncountedHashesIndex.Iterate(func(item shed.Item) (stop bool, err error) { - db.gcUncountedHashesIndex.DeleteInBatch(batch, item) - batchSize++ - if batchSize >= maxBatchSize { - err = db.shed.WriteBatch(batch) - if err != nil { - return false, err - } - batch.Reset() - batchSize = 0 - } - return false, nil - }, nil) + gcSize, err := db.gcSize.Get() if err != nil { return err } - return db.shed.WriteBatch(batch) + + var new uint64 + if change > 0 { + new = gcSize + uint64(change) + } else { + // 'change' is an int64 and is negative + // a conversion is needed with correct sign + c := uint64(-change) + if c > gcSize { + // protect uint64 undeflow + return nil + } + new = gcSize - c + } + db.gcSize.PutInBatch(batch, new) + + // trigger garbage collection if we reached the capacity + if new >= db.capacity { + db.triggerGarbageCollection() + } + return nil } // testHookCollectGarbage is a hook that can provide // information when a garbage collection run is done // and how many items it removed. -var testHookCollectGarbage func(collectedCount int64) +var testHookCollectGarbage func(collectedCount uint64) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc_test.go index eb039a55..081e0af8 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/gc_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // TestDB_collectGarbageWorker tests garbage collection runs @@ -38,7 +38,7 @@ func TestDB_collectGarbageWorker(t *testing.T) { func TestDB_collectGarbageWorker_multipleBatches(t *testing.T) { // lower the maximal number of chunks in a single // gc batch to ensure multiple batches. - defer func(s int64) { gcBatchSize = s }(gcBatchSize) + defer func(s uint64) { gcBatchSize = s }(gcBatchSize) gcBatchSize = 2 testDB_collectGarbageWorker(t) @@ -47,26 +47,30 @@ func TestDB_collectGarbageWorker_multipleBatches(t *testing.T) { // testDB_collectGarbageWorker is a helper test function to test // garbage collection runs by uploading and syncing a number of chunks. func testDB_collectGarbageWorker(t *testing.T) { - chunkCount := 150 + t.Helper() - testHookCollectGarbageChan := make(chan int64) - defer setTestHookCollectGarbage(func(collectedCount int64) { - testHookCollectGarbageChan <- collectedCount - })() + chunkCount := 150 db, cleanupFunc := newTestDB(t, &Options{ Capacity: 100, }) + testHookCollectGarbageChan := make(chan uint64) + defer setTestHookCollectGarbage(func(collectedCount uint64) { + select { + case testHookCollectGarbageChan <- collectedCount: + case <-db.close: + } + })() defer cleanupFunc() uploader := db.NewPutter(ModePutUpload) syncer := db.NewSetter(ModeSetSync) - addrs := make([]storage.Address, 0) + addrs := make([]chunk.Address, 0) // upload random chunks for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { @@ -89,7 +93,10 @@ func testDB_collectGarbageWorker(t *testing.T) { case <-time.After(10 * time.Second): t.Error("collect garbage timeout") } - gcSize := db.getGCSize() + gcSize, err := db.gcSize.Get() + if err != nil { + t.Fatal(err) + } if gcSize == gcTarget { break } @@ -104,8 +111,8 @@ func testDB_collectGarbageWorker(t *testing.T) { // the first synced chunk should be removed t.Run("get the first synced chunk", func(t *testing.T) { _, err := db.NewGetter(ModeGetRequest).Get(addrs[0]) - if err != storage.ErrChunkNotFound { - t.Errorf("got error %v, want %v", err, storage.ErrChunkNotFound) + if err != chunk.ErrChunkNotFound { + t.Errorf("got error %v, want %v", err, chunk.ErrChunkNotFound) } }) @@ -116,15 +123,6 @@ func testDB_collectGarbageWorker(t *testing.T) { t.Fatal(err) } }) - - // cleanup: drain the last testHookCollectGarbageChan - // element before calling deferred functions not to block - // collectGarbageWorker loop, preventing the race in - // setting testHookCollectGarbage function - select { - case <-testHookCollectGarbageChan: - default: - } } // TestDB_collectGarbageWorker_withRequests is a helper test function @@ -139,16 +137,16 @@ func TestDB_collectGarbageWorker_withRequests(t *testing.T) { uploader := db.NewPutter(ModePutUpload) syncer := db.NewSetter(ModeSetSync) - testHookCollectGarbageChan := make(chan int64) - defer setTestHookCollectGarbage(func(collectedCount int64) { + testHookCollectGarbageChan := make(chan uint64) + defer setTestHookCollectGarbage(func(collectedCount uint64) { testHookCollectGarbageChan <- collectedCount })() - addrs := make([]storage.Address, 0) + addrs := make([]chunk.Address, 0) // upload random chunks just up to the capacity for i := 0; i < int(db.capacity)-1; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { @@ -163,6 +161,14 @@ func TestDB_collectGarbageWorker_withRequests(t *testing.T) { addrs = append(addrs, chunk.Address()) } + // set update gc test hook to signal when + // update gc goroutine is done by closing + // testHookUpdateGCChan channel + testHookUpdateGCChan := make(chan struct{}) + resetTestHookUpdateGC := setTestHookUpdateGC(func() { + close(testHookUpdateGCChan) + }) + // request the latest synced chunk // to prioritize it in the gc index // not to be collected @@ -171,24 +177,35 @@ func TestDB_collectGarbageWorker_withRequests(t *testing.T) { t.Fatal(err) } + // wait for update gc goroutine to finish for garbage + // collector to be correctly triggered after the last upload + select { + case <-testHookUpdateGCChan: + case <-time.After(10 * time.Second): + t.Fatal("updateGC was not called after getting chunk with ModeGetRequest") + } + + // no need to wait for update gc hook anymore + resetTestHookUpdateGC() + // upload and sync another chunk to trigger // garbage collection - chunk := generateRandomChunk() - err = uploader.Put(chunk) + ch := generateTestRandomChunk() + err = uploader.Put(ch) if err != nil { t.Fatal(err) } - err = syncer.Set(chunk.Address()) + err = syncer.Set(ch.Address()) if err != nil { t.Fatal(err) } - addrs = append(addrs, chunk.Address()) + addrs = append(addrs, ch.Address()) // wait for garbage collection gcTarget := db.gcTarget() - var totalCollectedCount int64 + var totalCollectedCount uint64 for { select { case c := <-testHookCollectGarbageChan: @@ -196,13 +213,16 @@ func TestDB_collectGarbageWorker_withRequests(t *testing.T) { case <-time.After(10 * time.Second): t.Error("collect garbage timeout") } - gcSize := db.getGCSize() + gcSize, err := db.gcSize.Get() + if err != nil { + t.Fatal(err) + } if gcSize == gcTarget { break } } - wantTotalCollectedCount := int64(len(addrs)) - gcTarget + wantTotalCollectedCount := uint64(len(addrs)) - gcTarget if totalCollectedCount != wantTotalCollectedCount { t.Errorf("total collected chunks %v, want %v", totalCollectedCount, wantTotalCollectedCount) } @@ -224,8 +244,8 @@ func TestDB_collectGarbageWorker_withRequests(t *testing.T) { // the second synced chunk should be removed t.Run("get gc-ed chunk", func(t *testing.T) { _, err := db.NewGetter(ModeGetRequest).Get(addrs[1]) - if err != storage.ErrChunkNotFound { - t.Errorf("got error %v, want %v", err, storage.ErrChunkNotFound) + if err != chunk.ErrChunkNotFound { + t.Errorf("got error %v, want %v", err, chunk.ErrChunkNotFound) } }) @@ -261,7 +281,7 @@ func TestDB_gcSize(t *testing.T) { count := 100 for i := 0; i < count; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { @@ -274,13 +294,7 @@ func TestDB_gcSize(t *testing.T) { } } - // DB.Close writes gc size to disk, so - // Instead calling Close, simulate database shutdown - // without it. - close(db.close) - db.updateGCWG.Wait() - err = db.shed.Close() - if err != nil { + if err := db.Close(); err != nil { t.Fatal(err) } @@ -288,16 +302,15 @@ func TestDB_gcSize(t *testing.T) { if err != nil { t.Fatal(err) } + defer db.Close() t.Run("gc index size", newIndexGCSizeTest(db)) - - t.Run("gc uncounted hashes index count", newItemsCountTest(db.gcUncountedHashesIndex, 0)) } // setTestHookCollectGarbage sets testHookCollectGarbage and // returns a function that will reset it to the // value before the change. -func setTestHookCollectGarbage(h func(collectedCount int64)) (reset func()) { +func setTestHookCollectGarbage(h func(collectedCount uint64)) (reset func()) { current := testHookCollectGarbage reset = func() { testHookCollectGarbage = current } testHookCollectGarbage = h @@ -309,7 +322,7 @@ func setTestHookCollectGarbage(h func(collectedCount int64)) (reset func()) { // resets the original function. func TestSetTestHookCollectGarbage(t *testing.T) { // Set the current function after the test finishes. - defer func(h func(collectedCount int64)) { testHookCollectGarbage = h }(testHookCollectGarbage) + defer func(h func(collectedCount uint64)) { testHookCollectGarbage = h }(testHookCollectGarbage) // expected value for the unchanged function original := 1 @@ -320,7 +333,7 @@ func TestSetTestHookCollectGarbage(t *testing.T) { var got int // define the original (unchanged) functions - testHookCollectGarbage = func(_ int64) { + testHookCollectGarbage = func(_ uint64) { got = original } @@ -333,7 +346,7 @@ func TestSetTestHookCollectGarbage(t *testing.T) { } // set the new function - reset := setTestHookCollectGarbage(func(_ int64) { + reset := setTestHookCollectGarbage(func(_ uint64) { got = changed }) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/index_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/index_test.go index d9abf440..cf19e4f6 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/index_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/index_test.go @@ -21,7 +21,7 @@ import ( "math/rand" "testing" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // TestDB_pullIndex validates the ordering of keys in pull index. @@ -43,7 +43,7 @@ func TestDB_pullIndex(t *testing.T) { // upload random chunks for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { @@ -62,8 +62,8 @@ func TestDB_pullIndex(t *testing.T) { } testItemsOrder(t, db.pullIndex, chunks, func(i, j int) (less bool) { - poi := storage.Proximity(db.baseKey, chunks[i].Address()) - poj := storage.Proximity(db.baseKey, chunks[j].Address()) + poi := chunk.Proximity(db.baseKey, chunks[i].Address()) + poj := chunk.Proximity(db.baseKey, chunks[j].Address()) if poi < poj { return true } @@ -95,7 +95,7 @@ func TestDB_gcIndex(t *testing.T) { // upload random chunks for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore.go index 7a9fb54f..98d4c788 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore.go @@ -18,14 +18,13 @@ package localstore import ( "encoding/binary" - "encoding/hex" "errors" "sync" "time" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage/mock" ) @@ -41,7 +40,7 @@ var ( var ( // Default value for Capacity DB option. - defaultCapacity int64 = 5000000 + defaultCapacity uint64 = 5000000 // Limit the number of goroutines created by Getters // that call updateGC function. Value 0 sets no limit. maxParallelUpdateGC = 1000 @@ -54,8 +53,6 @@ type DB struct { // schema name of loaded data schemaName shed.StringField - // field that stores number of intems in gc index - storedGCSize shed.Uint64Field // retrieval indexes retrievalDataIndex shed.Index @@ -74,23 +71,16 @@ type DB struct { // garbage collection index gcIndex shed.Index - // index that stores hashes that are not - // counted in and saved to storedGCSize - gcUncountedHashesIndex shed.Index - // number of elements in garbage collection index - // it must be always read by getGCSize and - // set with incGCSize which are locking gcSizeMu - gcSize int64 - gcSizeMu sync.RWMutex + // field that stores number of intems in gc index + gcSize shed.Uint64Field + // garbage collection is triggered when gcSize exceeds // the capacity value - capacity int64 + capacity uint64 // triggers garbage collection event loop collectGarbageTrigger chan struct{} - // triggers write gc size event loop - writeGCSizeTrigger chan struct{} // a buffered channel acting as a semaphore // to limit the maximal number of goroutines @@ -102,11 +92,16 @@ type DB struct { baseKey []byte - addressLocks sync.Map + batchMu sync.Mutex // this channel is closed when close function is called // to terminate other goroutines close chan struct{} + + // protect Close method from exiting before + // garbage collection and gc size write workers + // are done + collectGarbageWorkerDone chan struct{} } // Options struct holds optional parameters for configuring DB. @@ -119,7 +114,7 @@ type Options struct { MockStore *mock.NodeStore // Capacity is a limit that triggers garbage collection when // number of items in gcIndex equals or exceeds it. - Capacity int64 + Capacity uint64 // MetricsPrefix defines a prefix for metrics names. MetricsPrefix string } @@ -134,13 +129,13 @@ func New(path string, baseKey []byte, o *Options) (db *DB, err error) { db = &DB{ capacity: o.Capacity, baseKey: baseKey, - // channels collectGarbageTrigger and writeGCSizeTrigger - // need to be buffered with the size of 1 + // channel collectGarbageTrigger + // needs to be buffered with the size of 1 // to signal another event if it // is triggered during already running function - collectGarbageTrigger: make(chan struct{}, 1), - writeGCSizeTrigger: make(chan struct{}, 1), - close: make(chan struct{}), + collectGarbageTrigger: make(chan struct{}, 1), + close: make(chan struct{}), + collectGarbageWorkerDone: make(chan struct{}), } if db.capacity <= 0 { db.capacity = defaultCapacity @@ -159,7 +154,7 @@ func New(path string, baseKey []byte, o *Options) (db *DB, err error) { return nil, err } // Persist gc size. - db.storedGCSize, err = db.shed.NewUint64Field("gc-size") + db.gcSize, err = db.shed.NewUint64Field("gc-size") if err != nil { return nil, err } @@ -310,48 +305,6 @@ func New(path string, baseKey []byte, o *Options) (db *DB, err error) { if err != nil { return nil, err } - // gc uncounted hashes index keeps hashes that are in gc index - // but not counted in and saved to storedGCSize - db.gcUncountedHashesIndex, err = db.shed.NewIndex("Hash->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - - // count number of elements in garbage collection index - gcSize, err := db.storedGCSize.Get() - if err != nil { - return nil, err - } - // get number of uncounted hashes - gcUncountedSize, err := db.gcUncountedHashesIndex.Count() - if err != nil { - return nil, err - } - gcSize += uint64(gcUncountedSize) - // remove uncounted hashes from the index and - // save the total gcSize after uncounted hashes are removed - err = db.writeGCSize(int64(gcSize)) - if err != nil { - return nil, err - } - db.incGCSize(int64(gcSize)) - - // start worker to write gc size - go db.writeGCSizeWorker() // start garbage collection worker go db.collectGarbageWorker() return db, nil @@ -361,49 +314,25 @@ func New(path string, baseKey []byte, o *Options) (db *DB, err error) { func (db *DB) Close() (err error) { close(db.close) db.updateGCWG.Wait() - if err := db.writeGCSize(db.getGCSize()); err != nil { - log.Error("localstore: write gc size", "err", err) + + // wait for gc worker to + // return before closing the shed + select { + case <-db.collectGarbageWorkerDone: + case <-time.After(5 * time.Second): + log.Error("localstore: collect garbage worker did not return after db close") } return db.shed.Close() } // po computes the proximity order between the address // and database base key. -func (db *DB) po(addr storage.Address) (bin uint8) { - return uint8(storage.Proximity(db.baseKey, addr)) -} - -var ( - // Maximal time for lockAddr to wait until it - // returns error. - addressLockTimeout = 3 * time.Second - // duration between two lock checks in lockAddr. - addressLockCheckDelay = 30 * time.Microsecond -) - -// lockAddr sets the lock on a particular address -// using addressLocks sync.Map and returns unlock function. -// If the address is locked this function will check it -// in a for loop for addressLockTimeout time, after which -// it will return ErrAddressLockTimeout error. -func (db *DB) lockAddr(addr storage.Address) (unlock func(), err error) { - start := time.Now() - lockKey := hex.EncodeToString(addr) - for { - _, loaded := db.addressLocks.LoadOrStore(lockKey, struct{}{}) - if !loaded { - break - } - time.Sleep(addressLockCheckDelay) - if time.Since(start) > addressLockTimeout { - return nil, ErrAddressLockTimeout - } - } - return func() { db.addressLocks.Delete(lockKey) }, nil +func (db *DB) po(addr chunk.Address) (bin uint8) { + return uint8(chunk.Proximity(db.baseKey, addr)) } // chunkToItem creates new Item with data provided by the Chunk. -func chunkToItem(ch storage.Chunk) shed.Item { +func chunkToItem(ch chunk.Chunk) shed.Item { return shed.Item{ Address: ch.Address(), Data: ch.Data(), @@ -411,7 +340,7 @@ func chunkToItem(ch storage.Chunk) shed.Item { } // addressToItem creates new Item with a provided address. -func addressToItem(addr storage.Address) shed.Item { +func addressToItem(addr chunk.Address) shed.Item { return shed.Item{ Address: addr, } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore_test.go index c7309d3c..42e76258 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/localstore_test.go @@ -22,25 +22,44 @@ import ( "io/ioutil" "math/rand" "os" + "runtime" "sort" - "strconv" "sync" "testing" "time" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" "github.com/syndtr/goleveldb/leveldb" ) +func init() { + // Some of the tests in localstore package rely on the same ordering of + // items uploaded or accessed compared to the ordering of items in indexes + // that contain StoreTimestamp or AccessTimestamp in keys. In tests + // where the same order is required from the database as the order + // in which chunks are put or accessed, if the StoreTimestamp or + // AccessTimestamp are the same for two or more sequential items + // their order in database will be based on the chunk address value, + // in which case the ordering of items/chunks stored in a test slice + // will not be the same. To ensure the same ordering in database on such + // indexes on windows systems, an additional short sleep is added to + // the now function. + if runtime.GOOS == "windows" { + setNow(func() int64 { + time.Sleep(time.Microsecond) + return time.Now().UTC().UnixNano() + }) + } +} + // TestDB validates if the chunk can be uploaded and // correctly retrieved. func TestDB(t *testing.T) { db, cleanupFunc := newTestDB(t, nil) defer cleanupFunc() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { @@ -94,7 +113,7 @@ func TestDB_updateGCSem(t *testing.T) { db, cleanupFunc := newTestDB(t, nil) defer cleanupFunc() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { @@ -117,88 +136,6 @@ func TestDB_updateGCSem(t *testing.T) { } } -// BenchmarkNew measures the time that New function -// needs to initialize and count the number of key/value -// pairs in GC index. -// This benchmark generates a number of chunks, uploads them, -// sets them to synced state for them to enter the GC index, -// and measures the execution time of New function by creating -// new databases with the same data directory. -// -// This benchmark takes significant amount of time. -// -// Measurements on MacBook Pro (Retina, 15-inch, Mid 2014) show -// that New function executes around 1s for database with 1M chunks. -// -// # go test -benchmem -run=none github.com/ethereum/go-ethereum/swarm/storage/localstore -bench BenchmarkNew -v -timeout 20m -// goos: darwin -// goarch: amd64 -// pkg: github.com/ethereum/go-ethereum/swarm/storage/localstore -// BenchmarkNew/1000-8 200 11672414 ns/op 9570960 B/op 10008 allocs/op -// BenchmarkNew/10000-8 100 14890609 ns/op 10490118 B/op 7759 allocs/op -// BenchmarkNew/100000-8 20 58334080 ns/op 17763157 B/op 22978 allocs/op -// BenchmarkNew/1000000-8 2 748595153 ns/op 45297404 B/op 253242 allocs/op -// PASS -func BenchmarkNew(b *testing.B) { - if testing.Short() { - b.Skip("skipping benchmark in short mode") - } - for _, count := range []int{ - 1000, - 10000, - 100000, - 1000000, - } { - b.Run(strconv.Itoa(count), func(b *testing.B) { - dir, err := ioutil.TempDir("", "localstore-new-benchmark") - if err != nil { - b.Fatal(err) - } - defer os.RemoveAll(dir) - baseKey := make([]byte, 32) - if _, err := rand.Read(baseKey); err != nil { - b.Fatal(err) - } - db, err := New(dir, baseKey, nil) - if err != nil { - b.Fatal(err) - } - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() - err := uploader.Put(chunk) - if err != nil { - b.Fatal(err) - } - err = syncer.Set(chunk.Address()) - if err != nil { - b.Fatal(err) - } - } - err = db.Close() - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - - for n := 0; n < b.N; n++ { - b.StartTimer() - db, err := New(dir, baseKey, nil) - b.StopTimer() - - if err != nil { - b.Fatal(err) - } - err = db.Close() - if err != nil { - b.Fatal(err) - } - } - }) - } -} - // newTestDB is a helper function that constructs a // temporary database and returns a cleanup function that must // be called to remove the data. @@ -229,53 +166,47 @@ func newTestDB(t testing.TB, o *Options) (db *DB, cleanupFunc func()) { return db, cleanupFunc } -// generateRandomChunk generates a valid Chunk with -// data size of default chunk size. -func generateRandomChunk() storage.Chunk { - return storage.GenerateRandomChunk(ch.DefaultSize) -} - func init() { - // needed for generateFakeRandomChunk + // needed for generateTestRandomChunk rand.Seed(time.Now().UnixNano()) } -// generateFakeRandomChunk generates a Chunk that is not +// generateTestRandomChunk generates a Chunk that is not // valid, but it contains a random key and a random value. -// This function is faster then storage.GenerateRandomChunk +// This function is faster then storage.generateTestRandomChunk // which generates a valid chunk. // Some tests in this package do not need valid chunks, just // random data, and their execution time can be decreased // using this function. -func generateFakeRandomChunk() storage.Chunk { - data := make([]byte, ch.DefaultSize) +func generateTestRandomChunk() chunk.Chunk { + data := make([]byte, chunk.DefaultSize) rand.Read(data) key := make([]byte, 32) rand.Read(key) - return storage.NewChunk(key, data) + return chunk.NewChunk(key, data) } -// TestGenerateFakeRandomChunk validates that -// generateFakeRandomChunk returns random data by comparing +// TestGenerateTestRandomChunk validates that +// generateTestRandomChunk returns random data by comparing // two generated chunks. -func TestGenerateFakeRandomChunk(t *testing.T) { - c1 := generateFakeRandomChunk() - c2 := generateFakeRandomChunk() +func TestGenerateTestRandomChunk(t *testing.T) { + c1 := generateTestRandomChunk() + c2 := generateTestRandomChunk() addrLen := len(c1.Address()) if addrLen != 32 { t.Errorf("first chunk address length %v, want %v", addrLen, 32) } dataLen := len(c1.Data()) - if dataLen != ch.DefaultSize { - t.Errorf("first chunk data length %v, want %v", dataLen, ch.DefaultSize) + if dataLen != chunk.DefaultSize { + t.Errorf("first chunk data length %v, want %v", dataLen, chunk.DefaultSize) } addrLen = len(c2.Address()) if addrLen != 32 { t.Errorf("second chunk address length %v, want %v", addrLen, 32) } dataLen = len(c2.Data()) - if dataLen != ch.DefaultSize { - t.Errorf("second chunk data length %v, want %v", dataLen, ch.DefaultSize) + if dataLen != chunk.DefaultSize { + t.Errorf("second chunk data length %v, want %v", dataLen, chunk.DefaultSize) } if bytes.Equal(c1.Address(), c2.Address()) { t.Error("fake chunks addresses do not differ") @@ -287,7 +218,7 @@ func TestGenerateFakeRandomChunk(t *testing.T) { // newRetrieveIndexesTest returns a test function that validates if the right // chunk values are in the retrieval indexes. -func newRetrieveIndexesTest(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { +func newRetrieveIndexesTest(db *DB, chunk chunk.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { return func(t *testing.T) { item, err := db.retrievalDataIndex.Get(addressToItem(chunk.Address())) if err != nil { @@ -306,7 +237,7 @@ func newRetrieveIndexesTest(db *DB, chunk storage.Chunk, storeTimestamp, accessT // newRetrieveIndexesTestWithAccess returns a test function that validates if the right // chunk values are in the retrieval indexes when access time must be stored. -func newRetrieveIndexesTestWithAccess(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { +func newRetrieveIndexesTestWithAccess(db *DB, chunk chunk.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { return func(t *testing.T) { item, err := db.retrievalDataIndex.Get(addressToItem(chunk.Address())) if err != nil { @@ -326,7 +257,7 @@ func newRetrieveIndexesTestWithAccess(db *DB, chunk storage.Chunk, storeTimestam // newPullIndexTest returns a test function that validates if the right // chunk values are in the pull index. -func newPullIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { +func newPullIndexTest(db *DB, chunk chunk.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { return func(t *testing.T) { item, err := db.pullIndex.Get(shed.Item{ Address: chunk.Address(), @@ -343,7 +274,7 @@ func newPullIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantErr // newPushIndexTest returns a test function that validates if the right // chunk values are in the push index. -func newPushIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { +func newPushIndexTest(db *DB, chunk chunk.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { return func(t *testing.T) { item, err := db.pushIndex.Get(shed.Item{ Address: chunk.Address(), @@ -360,7 +291,7 @@ func newPushIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantErr // newGCIndexTest returns a test function that validates if the right // chunk values are in the push index. -func newGCIndexTest(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { +func newGCIndexTest(db *DB, chunk chunk.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { return func(t *testing.T) { item, err := db.gcIndex.Get(shed.Item{ Address: chunk.Address(), @@ -396,7 +327,7 @@ func newItemsCountTest(i shed.Index, want int) func(t *testing.T) { // value is the same as the number of items in DB.gcIndex. func newIndexGCSizeTest(db *DB) func(t *testing.T) { return func(t *testing.T) { - var want int64 + var want uint64 err := db.gcIndex.Iterate(func(item shed.Item) (stop bool, err error) { want++ return @@ -404,7 +335,10 @@ func newIndexGCSizeTest(db *DB) func(t *testing.T) { if err != nil { t.Fatal(err) } - got := db.getGCSize() + got, err := db.gcSize.Get() + if err != nil { + t.Fatal(err) + } if got != want { t.Errorf("got gc size %v, want %v", got, want) } @@ -414,7 +348,7 @@ func newIndexGCSizeTest(db *DB) func(t *testing.T) { // testIndexChunk embeds storageChunk with additional data that is stored // in database. It is used for index values validations. type testIndexChunk struct { - storage.Chunk + chunk.Chunk storeTimestamp int64 } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get.go index 3a69f6e9..a6353e14 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get.go @@ -18,8 +18,8 @@ package localstore import ( "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" "github.com/syndtr/goleveldb/leveldb" ) @@ -51,23 +51,23 @@ func (db *DB) NewGetter(mode ModeGet) *Getter { } // Get returns a chunk from the database. If the chunk is -// not found storage.ErrChunkNotFound will be returned. +// not found chunk.ErrChunkNotFound will be returned. // All required indexes will be updated required by the // Getter Mode. -func (g *Getter) Get(addr storage.Address) (chunk storage.Chunk, err error) { +func (g *Getter) Get(addr chunk.Address) (ch chunk.Chunk, err error) { out, err := g.db.get(g.mode, addr) if err != nil { if err == leveldb.ErrNotFound { - return nil, storage.ErrChunkNotFound + return nil, chunk.ErrChunkNotFound } return nil, err } - return storage.NewChunk(out.Address, out.Data), nil + return chunk.NewChunk(out.Address, out.Data), nil } // get returns Item from the retrieval index // and updates other indexes. -func (db *DB) get(mode ModeGet, addr storage.Address) (out shed.Item, err error) { +func (db *DB) get(mode ModeGet, addr chunk.Address) (out shed.Item, err error) { item := addressToItem(addr) out, err = db.retrievalDataIndex.Get(item) @@ -113,11 +113,8 @@ func (db *DB) get(mode ModeGet, addr storage.Address) (out shed.Item, err error) // only Address and Data fields with non zero values, // which is ensured by the get function. func (db *DB) updateGC(item shed.Item) (err error) { - unlock, err := db.lockAddr(item.Address) - if err != nil { - return err - } - defer unlock() + db.batchMu.Lock() + defer db.batchMu.Unlock() batch := new(leveldb.Batch) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get_test.go index 6615a3b8..28a70ee0 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_get_test.go @@ -32,7 +32,7 @@ func TestModeGetRequest(t *testing.T) { return uploadTimestamp })() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { @@ -146,7 +146,7 @@ func TestModeGetSync(t *testing.T) { return uploadTimestamp })() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has.go new file mode 100644 index 00000000..90feacee --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has.go @@ -0,0 +1,39 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package localstore + +import ( + "github.com/ethereum/go-ethereum/swarm/chunk" +) + +// Hasser provides Has method to retrieve Chunks +// from database. +type Hasser struct { + db *DB +} + +// NewHasser returns a new Hasser on database. +func (db *DB) NewHasser() *Hasser { + return &Hasser{ + db: db, + } +} + +// Has returns true if the chunk is stored in database. +func (h *Hasser) Has(addr chunk.Address) (bool, error) { + return h.db.retrievalDataIndex.Has(addressToItem(addr)) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has_test.go new file mode 100644 index 00000000..332616ca --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_has_test.go @@ -0,0 +1,55 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package localstore + +import ( + "testing" +) + +// TestHas validates that Hasser is returning true for +// the stored chunk and false for one that is not stored. +func TestHas(t *testing.T) { + db, cleanupFunc := newTestDB(t, nil) + defer cleanupFunc() + + chunk := generateTestRandomChunk() + + err := db.NewPutter(ModePutUpload).Put(chunk) + if err != nil { + t.Fatal(err) + } + + hasser := db.NewHasser() + + has, err := hasser.Has(chunk.Address()) + if err != nil { + t.Fatal(err) + } + if !has { + t.Error("chunk not found") + } + + missingChunk := generateTestRandomChunk() + + has, err = hasser.Has(missingChunk.Address()) + if err != nil { + t.Fatal(err) + } + if has { + t.Error("unexpected chunk is found") + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put.go index 1a5a3d1b..1599ca8e 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put.go @@ -17,8 +17,8 @@ package localstore import ( + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" "github.com/syndtr/goleveldb/leveldb" ) @@ -53,7 +53,7 @@ func (db *DB) NewPutter(mode ModePut) *Putter { // Put stores the Chunk to database and depending // on the Putter mode, it updates required indexes. -func (p *Putter) Put(ch storage.Chunk) (err error) { +func (p *Putter) Put(ch chunk.Chunk) (err error) { return p.db.put(p.mode, chunkToItem(ch)) } @@ -64,11 +64,8 @@ func (p *Putter) Put(ch storage.Chunk) (err error) { // with their nil values. func (db *DB) put(mode ModePut, item shed.Item) (err error) { // protect parallel updates - unlock, err := db.lockAddr(item.Address) - if err != nil { - return err - } - defer unlock() + db.batchMu.Lock() + defer db.batchMu.Unlock() batch := new(leveldb.Batch) @@ -116,7 +113,6 @@ func (db *DB) put(mode ModePut, item shed.Item) (err error) { db.retrievalAccessIndex.PutInBatch(batch, item) // add new entry to gc index db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) gcSizeChange++ db.retrievalDataIndex.PutInBatch(batch, item) @@ -143,12 +139,14 @@ func (db *DB) put(mode ModePut, item shed.Item) (err error) { return ErrInvalidMode } - err = db.shed.WriteBatch(batch) + err = db.incGCSizeInBatch(batch, gcSizeChange) if err != nil { return err } - if gcSizeChange != 0 { - db.incGCSize(gcSizeChange) + + err = db.shed.WriteBatch(batch) + if err != nil { + return err } if triggerPullFeed { db.triggerPullSubscriptions(db.po(item.Address)) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put_test.go index ffe6a4cb..8ecae1d2 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_put_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // TestModePutRequest validates ModePutRequest index values on the provided DB. @@ -33,7 +33,7 @@ func TestModePutRequest(t *testing.T) { putter := db.NewPutter(ModePutRequest) - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() // keep the record when the chunk is stored var storeTimestamp int64 @@ -87,7 +87,7 @@ func TestModePutSync(t *testing.T) { return wantTimestamp })() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutSync).Put(chunk) if err != nil { @@ -109,7 +109,7 @@ func TestModePutUpload(t *testing.T) { return wantTimestamp })() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { @@ -132,7 +132,7 @@ func TestModePutUpload_parallel(t *testing.T) { chunkCount := 1000 workerCount := 100 - chunkChan := make(chan storage.Chunk) + chunkChan := make(chan chunk.Chunk) errChan := make(chan error) doneChan := make(chan struct{}) defer close(doneChan) @@ -159,13 +159,13 @@ func TestModePutUpload_parallel(t *testing.T) { }(i) } - chunks := make([]storage.Chunk, 0) + chunks := make([]chunk.Chunk, 0) var chunksMu sync.Mutex // send chunks to workers go func() { for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() select { case chunkChan <- chunk: case <-doneChan: @@ -271,9 +271,9 @@ func benchmarkPutUpload(b *testing.B, o *Options, count, maxParallelUploads int) defer cleanupFunc() uploader := db.NewPutter(ModePutUpload) - chunks := make([]storage.Chunk, count) + chunks := make([]chunk.Chunk, count) for i := 0; i < count; i++ { - chunks[i] = generateFakeRandomChunk() + chunks[i] = generateTestRandomChunk() } errs := make(chan error) b.StartTimer() diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set.go index a522f444..83fcbea5 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set.go @@ -17,7 +17,7 @@ package localstore import ( - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/syndtr/goleveldb/leveldb" ) @@ -53,7 +53,7 @@ func (db *DB) NewSetter(mode ModeSet) *Setter { // Set updates database indexes for a specific // chunk represented by the address. -func (s *Setter) Set(addr storage.Address) (err error) { +func (s *Setter) Set(addr chunk.Address) (err error) { return s.db.set(s.mode, addr) } @@ -61,13 +61,10 @@ func (s *Setter) Set(addr storage.Address) (err error) { // chunk represented by the address. // It acquires lockAddr to protect two calls // of this function for the same address in parallel. -func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { +func (db *DB) set(mode ModeSet, addr chunk.Address) (err error) { // protect parallel updates - unlock, err := db.lockAddr(addr) - if err != nil { - return err - } - defer unlock() + db.batchMu.Lock() + defer db.batchMu.Unlock() batch := new(leveldb.Batch) @@ -113,7 +110,6 @@ func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { db.pullIndex.PutInBatch(batch, item) triggerPullFeed = true db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) gcSizeChange++ case ModeSetSync: @@ -151,7 +147,6 @@ func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { db.retrievalAccessIndex.PutInBatch(batch, item) db.pushIndex.DeleteInBatch(batch, item) db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) gcSizeChange++ case modeSetRemove: @@ -179,7 +174,6 @@ func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { db.retrievalAccessIndex.DeleteInBatch(batch, item) db.pullIndex.DeleteInBatch(batch, item) db.gcIndex.DeleteInBatch(batch, item) - db.gcUncountedHashesIndex.DeleteInBatch(batch, item) // a check is needed for decrementing gcSize // as delete is not reporting if the key/value pair // is deleted or not @@ -191,12 +185,14 @@ func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { return ErrInvalidMode } - err = db.shed.WriteBatch(batch) + err = db.incGCSizeInBatch(batch, gcSizeChange) if err != nil { return err } - if gcSizeChange != 0 { - db.incGCSize(gcSizeChange) + + err = db.shed.WriteBatch(batch) + if err != nil { + return err } if triggerPullFeed { db.triggerPullSubscriptions(db.po(item.Address)) diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set_test.go index 94cd0a3e..674aaabe 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/mode_set_test.go @@ -28,7 +28,7 @@ func TestModeSetAccess(t *testing.T) { db, cleanupFunc := newTestDB(t, nil) defer cleanupFunc() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() wantTimestamp := time.Now().UTC().UnixNano() defer setNow(func() (t int64) { @@ -56,7 +56,7 @@ func TestModeSetSync(t *testing.T) { db, cleanupFunc := newTestDB(t, nil) defer cleanupFunc() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() wantTimestamp := time.Now().UTC().UnixNano() defer setNow(func() (t int64) { @@ -89,7 +89,7 @@ func TestModeSetRemove(t *testing.T) { db, cleanupFunc := newTestDB(t, nil) defer cleanupFunc() - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := db.NewPutter(ModePutUpload).Put(chunk) if err != nil { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/retrieval_index_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/retrieval_index_test.go index 9f5b452c..b0879012 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/retrieval_index_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/retrieval_index_test.go @@ -20,7 +20,7 @@ import ( "strconv" "testing" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // BenchmarkRetrievalIndexes uploads a number of chunks in order to measure @@ -64,9 +64,9 @@ func benchmarkRetrievalIndexes(b *testing.B, o *Options, count int) { uploader := db.NewPutter(ModePutUpload) syncer := db.NewSetter(ModeSetSync) requester := db.NewGetter(ModeGetRequest) - addrs := make([]storage.Address, count) + addrs := make([]chunk.Address, count) for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { b.Fatal(err) @@ -134,9 +134,9 @@ func benchmarkUpload(b *testing.B, o *Options, count int) { db, cleanupFunc := newTestDB(b, o) defer cleanupFunc() uploader := db.NewPutter(ModePutUpload) - chunks := make([]storage.Chunk, count) + chunks := make([]chunk.Chunk, count) for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() + chunk := generateTestRandomChunk() chunks[i] = chunk } b.StartTimer() diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull.go index a18f0915..0b96102e 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull.go @@ -24,8 +24,9 @@ import ( "sync" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/syndtr/goleveldb/leveldb" ) // SubscribePull returns a channel that provides chunk addresses and stored times from pull syncing index. @@ -158,10 +159,27 @@ func (db *DB) SubscribePull(ctx context.Context, bin uint8, since, until *ChunkD return chunkDescriptors, stop } +// LastPullSubscriptionChunk returns ChunkDescriptor of the latest Chunk +// in pull syncing index for a provided bin. If there are no chunks in +// that bin, chunk.ErrChunkNotFound is returned. +func (db *DB) LastPullSubscriptionChunk(bin uint8) (c *ChunkDescriptor, err error) { + item, err := db.pullIndex.Last([]byte{bin}) + if err != nil { + if err == leveldb.ErrNotFound { + return nil, chunk.ErrChunkNotFound + } + return nil, err + } + return &ChunkDescriptor{ + Address: item.Address, + StoreTimestamp: item.StoreTimestamp, + }, nil +} + // ChunkDescriptor holds information required for Pull syncing. This struct // is provided by subscribing to pull index. type ChunkDescriptor struct { - Address storage.Address + Address chunk.Address StoreTimestamp int64 } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull_test.go index 5c99e0de..d5ddae02 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_pull_test.go @@ -24,7 +24,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // TestDB_SubscribePull uploads some chunks before and after @@ -37,7 +37,7 @@ func TestDB_SubscribePull(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make(map[uint8][]storage.Address) + addrs := make(map[uint8][]chunk.Address) var addrsMu sync.Mutex var wantedChunksCount int @@ -53,7 +53,7 @@ func TestDB_SubscribePull(t *testing.T) { // to validate the number of addresses received by the subscription errChan := make(chan error) - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { ch, stop := db.SubscribePull(ctx, bin, nil, nil) defer stop() @@ -84,7 +84,7 @@ func TestDB_SubscribePull_multiple(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make(map[uint8][]storage.Address) + addrs := make(map[uint8][]chunk.Address) var addrsMu sync.Mutex var wantedChunksCount int @@ -105,7 +105,7 @@ func TestDB_SubscribePull_multiple(t *testing.T) { // start a number of subscriptions // that all of them will write every address error to errChan for j := 0; j < subsCount; j++ { - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { ch, stop := db.SubscribePull(ctx, bin, nil, nil) defer stop() @@ -137,7 +137,7 @@ func TestDB_SubscribePull_since(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make(map[uint8][]storage.Address) + addrs := make(map[uint8][]chunk.Address) var addrsMu sync.Mutex var wantedChunksCount int @@ -151,33 +151,34 @@ func TestDB_SubscribePull_since(t *testing.T) { })() uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { + addrsMu.Lock() + defer addrsMu.Unlock() + last = make(map[uint8]ChunkDescriptor) for i := 0; i < count; i++ { - chunk := generateRandomChunk() + ch := generateTestRandomChunk() - err := uploader.Put(chunk) + err := uploader.Put(ch) if err != nil { t.Fatal(err) } - bin := db.po(chunk.Address()) + bin := db.po(ch.Address()) - addrsMu.Lock() if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) + addrs[bin] = make([]chunk.Address, 0) } if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) + addrs[bin] = append(addrs[bin], ch.Address()) wantedChunksCount++ } - addrsMu.Unlock() lastTimestampMu.RLock() storeTimestamp := lastTimestamp lastTimestampMu.RUnlock() last[bin] = ChunkDescriptor{ - Address: chunk.Address(), + Address: ch.Address(), StoreTimestamp: storeTimestamp, } } @@ -198,7 +199,7 @@ func TestDB_SubscribePull_since(t *testing.T) { // to validate the number of addresses received by the subscription errChan := make(chan error) - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { var since *ChunkDescriptor if c, ok := last[bin]; ok { since = &c @@ -227,7 +228,7 @@ func TestDB_SubscribePull_until(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make(map[uint8][]storage.Address) + addrs := make(map[uint8][]chunk.Address) var addrsMu sync.Mutex var wantedChunksCount int @@ -241,33 +242,34 @@ func TestDB_SubscribePull_until(t *testing.T) { })() uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { + addrsMu.Lock() + defer addrsMu.Unlock() + last = make(map[uint8]ChunkDescriptor) for i := 0; i < count; i++ { - chunk := generateRandomChunk() + ch := generateTestRandomChunk() - err := uploader.Put(chunk) + err := uploader.Put(ch) if err != nil { t.Fatal(err) } - bin := db.po(chunk.Address()) + bin := db.po(ch.Address()) - addrsMu.Lock() if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) + addrs[bin] = make([]chunk.Address, 0) } if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) + addrs[bin] = append(addrs[bin], ch.Address()) wantedChunksCount++ } - addrsMu.Unlock() lastTimestampMu.RLock() storeTimestamp := lastTimestamp lastTimestampMu.RUnlock() last[bin] = ChunkDescriptor{ - Address: chunk.Address(), + Address: ch.Address(), StoreTimestamp: storeTimestamp, } } @@ -288,7 +290,7 @@ func TestDB_SubscribePull_until(t *testing.T) { // to validate the number of addresses received by the subscription errChan := make(chan error) - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { until, ok := last[bin] if !ok { continue @@ -316,7 +318,7 @@ func TestDB_SubscribePull_sinceAndUntil(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make(map[uint8][]storage.Address) + addrs := make(map[uint8][]chunk.Address) var addrsMu sync.Mutex var wantedChunksCount int @@ -330,33 +332,34 @@ func TestDB_SubscribePull_sinceAndUntil(t *testing.T) { })() uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { + addrsMu.Lock() + defer addrsMu.Unlock() + last = make(map[uint8]ChunkDescriptor) for i := 0; i < count; i++ { - chunk := generateRandomChunk() + ch := generateTestRandomChunk() - err := uploader.Put(chunk) + err := uploader.Put(ch) if err != nil { t.Fatal(err) } - bin := db.po(chunk.Address()) + bin := db.po(ch.Address()) - addrsMu.Lock() if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) + addrs[bin] = make([]chunk.Address, 0) } if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) + addrs[bin] = append(addrs[bin], ch.Address()) wantedChunksCount++ } - addrsMu.Unlock() lastTimestampMu.RLock() storeTimestamp := lastTimestamp lastTimestampMu.RUnlock() last[bin] = ChunkDescriptor{ - Address: chunk.Address(), + Address: ch.Address(), StoreTimestamp: storeTimestamp, } } @@ -383,7 +386,7 @@ func TestDB_SubscribePull_sinceAndUntil(t *testing.T) { // to validate the number of addresses received by the subscription errChan := make(chan error) - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { var since *ChunkDescriptor if c, ok := upload1[bin]; ok { since = &c @@ -409,22 +412,23 @@ func TestDB_SubscribePull_sinceAndUntil(t *testing.T) { // uploadRandomChunksBin uploads random chunks to database and adds them to // the map of addresses ber bin. -func uploadRandomChunksBin(t *testing.T, db *DB, uploader *Putter, addrs map[uint8][]storage.Address, addrsMu *sync.Mutex, wantedChunksCount *int, count int) { - for i := 0; i < count; i++ { - chunk := generateRandomChunk() +func uploadRandomChunksBin(t *testing.T, db *DB, uploader *Putter, addrs map[uint8][]chunk.Address, addrsMu *sync.Mutex, wantedChunksCount *int, count int) { + addrsMu.Lock() + defer addrsMu.Unlock() - err := uploader.Put(chunk) + for i := 0; i < count; i++ { + ch := generateTestRandomChunk() + + err := uploader.Put(ch) if err != nil { t.Fatal(err) } - addrsMu.Lock() - bin := db.po(chunk.Address()) + bin := db.po(ch.Address()) if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) + addrs[bin] = make([]chunk.Address, 0) } - addrs[bin] = append(addrs[bin], chunk.Address()) - addrsMu.Unlock() + addrs[bin] = append(addrs[bin], ch.Address()) *wantedChunksCount++ } @@ -433,7 +437,7 @@ func uploadRandomChunksBin(t *testing.T, db *DB, uploader *Putter, addrs map[uin // readPullSubscriptionBin is a helper function that reads all ChunkDescriptors from a channel and // sends error to errChan, even if it is nil, to count the number of ChunkDescriptors // returned by the channel. -func readPullSubscriptionBin(ctx context.Context, bin uint8, ch <-chan ChunkDescriptor, addrs map[uint8][]storage.Address, addrsMu *sync.Mutex, errChan chan error) { +func readPullSubscriptionBin(ctx context.Context, bin uint8, ch <-chan ChunkDescriptor, addrs map[uint8][]chunk.Address, addrsMu *sync.Mutex, errChan chan error) { var i int // address index for { select { @@ -441,19 +445,24 @@ func readPullSubscriptionBin(ctx context.Context, bin uint8, ch <-chan ChunkDesc if !ok { return } + var err error addrsMu.Lock() if i+1 > len(addrs[bin]) { - errChan <- fmt.Errorf("got more chunk addresses %v, then expected %v, for bin %v", i+1, len(addrs[bin]), bin) + err = fmt.Errorf("got more chunk addresses %v, then expected %v, for bin %v", i+1, len(addrs[bin]), bin) + } else { + want := addrs[bin][i] + if !bytes.Equal(got.Address, want) { + err = fmt.Errorf("got chunk address %v in bin %v %s, want %s", i, bin, got.Address.Hex(), want) + } } - want := addrs[bin][i] addrsMu.Unlock() - var err error - if !bytes.Equal(got.Address, want) { - err = fmt.Errorf("got chunk address %v in bin %v %s, want %s", i, bin, got.Address.Hex(), want) - } i++ // send one and only one error per received address - errChan <- err + select { + case errChan <- err: + case <-ctx.Done(): + return + } case <-ctx.Done(): return } @@ -476,3 +485,75 @@ func checkErrChan(ctx context.Context, t *testing.T, errChan chan error, wantedC } } } + +// TestDB_LastPullSubscriptionChunk validates that LastPullSubscriptionChunk +// is returning the last chunk descriptor for proximity order bins by +// doing a few rounds of chunk uploads. +func TestDB_LastPullSubscriptionChunk(t *testing.T) { + db, cleanupFunc := newTestDB(t, nil) + defer cleanupFunc() + + uploader := db.NewPutter(ModePutUpload) + + addrs := make(map[uint8][]chunk.Address) + + lastTimestamp := time.Now().UTC().UnixNano() + var lastTimestampMu sync.RWMutex + defer setNow(func() (t int64) { + lastTimestampMu.Lock() + defer lastTimestampMu.Unlock() + lastTimestamp++ + return lastTimestamp + })() + + last := make(map[uint8]ChunkDescriptor) + + // do a few rounds of uploads and check if + // last pull subscription chunk is correct + for _, count := range []int{1, 3, 10, 11, 100, 120} { + + // upload + for i := 0; i < count; i++ { + ch := generateTestRandomChunk() + + err := uploader.Put(ch) + if err != nil { + t.Fatal(err) + } + + bin := db.po(ch.Address()) + + if _, ok := addrs[bin]; !ok { + addrs[bin] = make([]chunk.Address, 0) + } + addrs[bin] = append(addrs[bin], ch.Address()) + + lastTimestampMu.RLock() + storeTimestamp := lastTimestamp + lastTimestampMu.RUnlock() + + last[bin] = ChunkDescriptor{ + Address: ch.Address(), + StoreTimestamp: storeTimestamp, + } + } + + // check + for bin := uint8(0); bin <= uint8(chunk.MaxPO); bin++ { + want, ok := last[bin] + got, err := db.LastPullSubscriptionChunk(bin) + if ok { + if err != nil { + t.Errorf("got unexpected error value %v", err) + } + if !bytes.Equal(got.Address, want.Address) { + t.Errorf("got last address %s, want %s", got.Address.Hex(), want.Address.Hex()) + } + } else { + if err != chunk.ErrChunkNotFound { + t.Errorf("got unexpected error value %v, want %v", err, chunk.ErrChunkNotFound) + } + } + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push.go index b13f2939..5cbc2eb6 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push.go @@ -21,16 +21,16 @@ import ( "sync" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" ) // SubscribePush returns a channel that provides storage chunks with ordering from push syncing index. // Returned stop function will terminate current and further iterations, and also it will close // the returned channel without any errors. Make sure that you check the second returned parameter // from the channel to stop iteration when its value is false. -func (db *DB) SubscribePush(ctx context.Context) (c <-chan storage.Chunk, stop func()) { - chunks := make(chan storage.Chunk) +func (db *DB) SubscribePush(ctx context.Context) (c <-chan chunk.Chunk, stop func()) { + chunks := make(chan chunk.Chunk) trigger := make(chan struct{}, 1) db.pushTriggersMu.Lock() @@ -65,7 +65,7 @@ func (db *DB) SubscribePush(ctx context.Context) (c <-chan storage.Chunk, stop f } select { - case chunks <- storage.NewChunk(dataItem.Address, dataItem.Data): + case chunks <- chunk.NewChunk(dataItem.Address, dataItem.Data): // set next iteration start item // when its chunk is successfully sent to channel sinceItem = &item diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push_test.go index 73e7c25f..30fb98eb 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore/subscription_push_test.go @@ -24,7 +24,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/swarm/storage" + "github.com/ethereum/go-ethereum/swarm/chunk" ) // TestDB_SubscribePush uploads some chunks before and after @@ -36,21 +36,22 @@ func TestDB_SubscribePush(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - chunks := make([]storage.Chunk, 0) + chunks := make([]chunk.Chunk, 0) var chunksMu sync.Mutex uploadRandomChunks := func(count int) { + chunksMu.Lock() + defer chunksMu.Unlock() + for i := 0; i < count; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { t.Fatal(err) } - chunksMu.Lock() chunks = append(chunks, chunk) - chunksMu.Unlock() } } @@ -90,7 +91,11 @@ func TestDB_SubscribePush(t *testing.T) { } i++ // send one and only one error per received address - errChan <- err + select { + case errChan <- err: + case <-ctx.Done(): + return + } case <-ctx.Done(): return } @@ -119,21 +124,22 @@ func TestDB_SubscribePush_multiple(t *testing.T) { uploader := db.NewPutter(ModePutUpload) - addrs := make([]storage.Address, 0) + addrs := make([]chunk.Address, 0) var addrsMu sync.Mutex uploadRandomChunks := func(count int) { + addrsMu.Lock() + defer addrsMu.Unlock() + for i := 0; i < count; i++ { - chunk := generateRandomChunk() + chunk := generateTestRandomChunk() err := uploader.Put(chunk) if err != nil { t.Fatal(err) } - addrsMu.Lock() addrs = append(addrs, chunk.Address()) - addrsMu.Unlock() } } @@ -175,7 +181,11 @@ func TestDB_SubscribePush_multiple(t *testing.T) { } i++ // send one and only one error per received address - errChan <- err + select { + case errChan <- err: + case <-ctx.Done(): + return + } case <-ctx.Done(): return } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore_test.go index ec69951c..fcadcefa 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/localstore_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" ) var ( @@ -65,7 +65,7 @@ func TestValidator(t *testing.T) { // add content address validator and check puts // bad should fail, good should pass store.Validators = append(store.Validators, NewContentAddressValidator(hashfunc)) - chunks = GenerateRandomChunks(ch.DefaultSize, 2) + chunks = GenerateRandomChunks(chunk.DefaultSize, 2) goodChunk = chunks[0] badChunk = chunks[1] copy(badChunk.Data(), goodChunk.Data()) @@ -83,7 +83,7 @@ func TestValidator(t *testing.T) { var negV boolTestValidator store.Validators = append(store.Validators, negV) - chunks = GenerateRandomChunks(ch.DefaultSize, 2) + chunks = GenerateRandomChunks(chunk.DefaultSize, 2) goodChunk = chunks[0] badChunk = chunks[1] copy(badChunk.Data(), goodChunk.Data()) @@ -101,7 +101,7 @@ func TestValidator(t *testing.T) { var posV boolTestValidator = true store.Validators = append(store.Validators, posV) - chunks = GenerateRandomChunks(ch.DefaultSize, 2) + chunks = GenerateRandomChunks(chunk.DefaultSize, 2) goodChunk = chunks[0] badChunk = chunks[1] copy(badChunk.Data(), goodChunk.Data()) @@ -138,7 +138,7 @@ func putChunks(store *LocalStore, chunks ...Chunk) []error { func put(store *LocalStore, n int, f func(i int64) Chunk) (hs []Address, errs []error) { for i := int64(0); i < int64(n); i++ { - chunk := f(ch.DefaultSize) + chunk := f(chunk.DefaultSize) err := store.Put(context.TODO(), chunk) errs = append(errs, err) hs = append(hs, chunk.Address()) @@ -158,7 +158,7 @@ func TestGetFrequentlyAccessedChunkWontGetGarbageCollected(t *testing.T) { var chunks []Chunk for i := 0; i < ldbCap; i++ { - chunks = append(chunks, GenerateRandomChunk(ch.DefaultSize)) + chunks = append(chunks, GenerateRandomChunk(chunk.DefaultSize)) } mostAccessed := chunks[0].Address() diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db.go index 73ae199e..313a61b4 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db.go @@ -21,8 +21,12 @@ import ( "archive/tar" "bytes" "encoding/json" + "errors" + "fmt" "io" "io/ioutil" + "sync" + "time" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/util" @@ -37,6 +41,10 @@ import ( // release resources used by the database. type GlobalStore struct { db *leveldb.DB + // protects nodes and keys indexes + // in Put and Delete methods + nodesLocks sync.Map + keysLocks sync.Map } // NewGlobalStore creates a new instance of GlobalStore. @@ -64,14 +72,14 @@ func (s *GlobalStore) NewNodeStore(addr common.Address) *mock.NodeStore { // Get returns chunk data if the chunk with key exists for node // on address addr. func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err error) { - has, err := s.db.Has(nodeDBKey(addr, key), nil) + has, err := s.db.Has(indexForHashesPerNode(addr, key), nil) if err != nil { return nil, mock.ErrNotFound } if !has { return nil, mock.ErrNotFound } - data, err = s.db.Get(dataDBKey(key), nil) + data, err = s.db.Get(indexDataKey(key), nil) if err == leveldb.ErrNotFound { err = mock.ErrNotFound } @@ -80,28 +88,165 @@ func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err err // Put saves the chunk data for node with address addr. func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error { + unlock, err := s.lock(addr, key) + if err != nil { + return err + } + defer unlock() + batch := new(leveldb.Batch) - batch.Put(nodeDBKey(addr, key), nil) - batch.Put(dataDBKey(key), data) + batch.Put(indexForHashesPerNode(addr, key), nil) + batch.Put(indexForNodesWithHash(key, addr), nil) + batch.Put(indexForNodes(addr), nil) + batch.Put(indexForHashes(key), nil) + batch.Put(indexDataKey(key), data) return s.db.Write(batch, nil) } // Delete removes the chunk reference to node with address addr. func (s *GlobalStore) Delete(addr common.Address, key []byte) error { + unlock, err := s.lock(addr, key) + if err != nil { + return err + } + defer unlock() + batch := new(leveldb.Batch) - batch.Delete(nodeDBKey(addr, key)) + batch.Delete(indexForHashesPerNode(addr, key)) + batch.Delete(indexForNodesWithHash(key, addr)) + + // check if this node contains any keys, and if not + // remove it from the + x := indexForHashesPerNodePrefix(addr) + if k, _ := s.db.Get(x, nil); !bytes.HasPrefix(k, x) { + batch.Delete(indexForNodes(addr)) + } + + x = indexForNodesWithHashPrefix(key) + if k, _ := s.db.Get(x, nil); !bytes.HasPrefix(k, x) { + batch.Delete(indexForHashes(key)) + } return s.db.Write(batch, nil) } // HasKey returns whether a node with addr contains the key. func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { - has, err := s.db.Has(nodeDBKey(addr, key), nil) + has, err := s.db.Has(indexForHashesPerNode(addr, key), nil) if err != nil { has = false } return has } +// Keys returns a paginated list of keys on all nodes. +func (s *GlobalStore) Keys(startKey []byte, limit int) (keys mock.Keys, err error) { + return s.keys(nil, startKey, limit) +} + +// Nodes returns a paginated list of all known nodes. +func (s *GlobalStore) Nodes(startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + return s.nodes(nil, startAddr, limit) +} + +// NodeKeys returns a paginated list of keys on a node with provided address. +func (s *GlobalStore) NodeKeys(addr common.Address, startKey []byte, limit int) (keys mock.Keys, err error) { + return s.keys(&addr, startKey, limit) +} + +// KeyNodes returns a paginated list of nodes that contain a particular key. +func (s *GlobalStore) KeyNodes(key []byte, startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + return s.nodes(key, startAddr, limit) +} + +// keys returns a paginated list of keys. If addr is not nil, only keys on that +// node will be returned. +func (s *GlobalStore) keys(addr *common.Address, startKey []byte, limit int) (keys mock.Keys, err error) { + iter := s.db.NewIterator(nil, nil) + defer iter.Release() + + if limit <= 0 { + limit = mock.DefaultLimit + } + + prefix := []byte{indexForHashesPrefix} + if addr != nil { + prefix = indexForHashesPerNodePrefix(*addr) + } + if startKey != nil { + if addr != nil { + startKey = indexForHashesPerNode(*addr, startKey) + } else { + startKey = indexForHashes(startKey) + } + } else { + startKey = prefix + } + + ok := iter.Seek(startKey) + if !ok { + return keys, iter.Error() + } + for ; ok; ok = iter.Next() { + k := iter.Key() + if !bytes.HasPrefix(k, prefix) { + break + } + key := append([]byte(nil), bytes.TrimPrefix(k, prefix)...) + + if len(keys.Keys) >= limit { + keys.Next = key + break + } + + keys.Keys = append(keys.Keys, key) + } + return keys, iter.Error() +} + +// nodes returns a paginated list of node addresses. If key is not nil, +// only nodes that contain that key will be returned. +func (s *GlobalStore) nodes(key []byte, startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + iter := s.db.NewIterator(nil, nil) + defer iter.Release() + + if limit <= 0 { + limit = mock.DefaultLimit + } + + prefix := []byte{indexForNodesPrefix} + if key != nil { + prefix = indexForNodesWithHashPrefix(key) + } + startKey := prefix + if startAddr != nil { + if key != nil { + startKey = indexForNodesWithHash(key, *startAddr) + } else { + startKey = indexForNodes(*startAddr) + } + } + + ok := iter.Seek(startKey) + if !ok { + return nodes, iter.Error() + } + for ; ok; ok = iter.Next() { + k := iter.Key() + if !bytes.HasPrefix(k, prefix) { + break + } + addr := common.BytesToAddress(append([]byte(nil), bytes.TrimPrefix(k, prefix)...)) + + if len(nodes.Addrs) >= limit { + nodes.Next = &addr + break + } + + nodes.Addrs = append(nodes.Addrs, addr) + } + return nodes, iter.Error() +} + // Import reads tar archive from a reader that contains exported chunk data. // It returns the number of chunks imported and an error. func (s *GlobalStore) Import(r io.Reader) (n int, err error) { @@ -126,12 +271,18 @@ func (s *GlobalStore) Import(r io.Reader) (n int, err error) { return n, err } + key := common.Hex2Bytes(hdr.Name) + batch := new(leveldb.Batch) for _, addr := range c.Addrs { - batch.Put(nodeDBKeyHex(addr, hdr.Name), nil) + batch.Put(indexForHashesPerNode(addr, key), nil) + batch.Put(indexForNodesWithHash(key, addr), nil) + batch.Put(indexForNodes(addr), nil) } - batch.Put(dataDBKey(common.Hex2Bytes(hdr.Name)), c.Data) + batch.Put(indexForHashes(key), nil) + batch.Put(indexDataKey(key), c.Data) + if err = s.db.Write(batch, nil); err != nil { return n, err } @@ -150,18 +301,23 @@ func (s *GlobalStore) Export(w io.Writer) (n int, err error) { buf := bytes.NewBuffer(make([]byte, 0, 1024)) encoder := json.NewEncoder(buf) - iter := s.db.NewIterator(util.BytesPrefix(nodeKeyPrefix), nil) + snap, err := s.db.GetSnapshot() + if err != nil { + return 0, err + } + + iter := snap.NewIterator(util.BytesPrefix([]byte{indexForHashesByNodePrefix}), nil) defer iter.Release() var currentKey string var addrs []common.Address - saveChunk := func(hexKey string) error { - key := common.Hex2Bytes(hexKey) + saveChunk := func() error { + hexKey := currentKey - data, err := s.db.Get(dataDBKey(key), nil) + data, err := snap.Get(indexDataKey(common.Hex2Bytes(hexKey)), nil) if err != nil { - return err + return fmt.Errorf("get data %s: %v", hexKey, err) } buf.Reset() @@ -189,8 +345,8 @@ func (s *GlobalStore) Export(w io.Writer) (n int, err error) { } for iter.Next() { - k := bytes.TrimPrefix(iter.Key(), nodeKeyPrefix) - i := bytes.Index(k, []byte("-")) + k := bytes.TrimPrefix(iter.Key(), []byte{indexForHashesByNodePrefix}) + i := bytes.Index(k, []byte{keyTermByte}) if i < 0 { continue } @@ -201,7 +357,7 @@ func (s *GlobalStore) Export(w io.Writer) (n int, err error) { } if hexKey != currentKey { - if err = saveChunk(currentKey); err != nil { + if err = saveChunk(); err != nil { return n, err } @@ -209,35 +365,112 @@ func (s *GlobalStore) Export(w io.Writer) (n int, err error) { } currentKey = hexKey - addrs = append(addrs, common.BytesToAddress(k[i:])) + addrs = append(addrs, common.BytesToAddress(k[i+1:])) } if len(addrs) > 0 { - if err = saveChunk(currentKey); err != nil { + if err = saveChunk(); err != nil { return n, err } } - return n, err + return n, iter.Error() } var ( - nodeKeyPrefix = []byte("node-") - dataKeyPrefix = []byte("data-") + // maximal time for lock to wait until it returns error + lockTimeout = 3 * time.Second + // duration between two lock checks. + lockCheckDelay = 30 * time.Microsecond + // error returned by lock method when lock timeout is reached + errLockTimeout = errors.New("lock timeout") ) -// nodeDBKey constructs a database key for key/node mappings. -func nodeDBKey(addr common.Address, key []byte) []byte { - return nodeDBKeyHex(addr, common.Bytes2Hex(key)) +// lock protects parallel writes in Put and Delete methods for both +// node with provided address and for data with provided key. +func (s *GlobalStore) lock(addr common.Address, key []byte) (unlock func(), err error) { + start := time.Now() + nodeLockKey := addr.Hex() + for { + _, loaded := s.nodesLocks.LoadOrStore(nodeLockKey, struct{}{}) + if !loaded { + break + } + time.Sleep(lockCheckDelay) + if time.Since(start) > lockTimeout { + return nil, errLockTimeout + } + } + start = time.Now() + keyLockKey := common.Bytes2Hex(key) + for { + _, loaded := s.keysLocks.LoadOrStore(keyLockKey, struct{}{}) + if !loaded { + break + } + time.Sleep(lockCheckDelay) + if time.Since(start) > lockTimeout { + return nil, errLockTimeout + } + } + return func() { + s.nodesLocks.Delete(nodeLockKey) + s.keysLocks.Delete(keyLockKey) + }, nil } -// nodeDBKeyHex constructs a database key for key/node mappings -// using the hexadecimal string representation of the key. -func nodeDBKeyHex(addr common.Address, hexKey string) []byte { - return append(append(nodeKeyPrefix, []byte(hexKey+"-")...), addr[:]...) +const ( + // prefixes for different indexes + indexDataPrefix = 0 + indexForNodesWithHashesPrefix = 1 + indexForHashesByNodePrefix = 2 + indexForNodesPrefix = 3 + indexForHashesPrefix = 4 + + // keyTermByte splits keys and node addresses + // in database keys + keyTermByte = 0xff +) + +// indexForHashesPerNode constructs a database key to store keys used in +// NodeKeys method. +func indexForHashesPerNode(addr common.Address, key []byte) []byte { + return append(indexForHashesPerNodePrefix(addr), key...) } -// dataDBkey constructs a database key for key/data storage. -func dataDBKey(key []byte) []byte { - return append(dataKeyPrefix, key...) +// indexForHashesPerNodePrefix returns a prefix containing a node address used in +// NodeKeys method. Node address is hex encoded to be able to use keyTermByte +// for splitting node address and key. +func indexForHashesPerNodePrefix(addr common.Address) []byte { + return append([]byte{indexForNodesWithHashesPrefix}, append([]byte(addr.Hex()), keyTermByte)...) +} + +// indexForNodesWithHash constructs a database key to store keys used in +// KeyNodes method. +func indexForNodesWithHash(key []byte, addr common.Address) []byte { + return append(indexForNodesWithHashPrefix(key), addr[:]...) +} + +// indexForNodesWithHashPrefix returns a prefix containing a key used in +// KeyNodes method. Key is hex encoded to be able to use keyTermByte +// for splitting key and node address. +func indexForNodesWithHashPrefix(key []byte) []byte { + return append([]byte{indexForHashesByNodePrefix}, append([]byte(common.Bytes2Hex(key)), keyTermByte)...) +} + +// indexForNodes constructs a database key to store keys used in +// Nodes method. +func indexForNodes(addr common.Address) []byte { + return append([]byte{indexForNodesPrefix}, addr[:]...) +} + +// indexForHashes constructs a database key to store keys used in +// Keys method. +func indexForHashes(key []byte) []byte { + return append([]byte{indexForHashesPrefix}, key...) +} + +// indexDataKey constructs a database key for key/data storage. +func indexDataKey(key []byte) []byte { + return append([]byte{indexDataPrefix}, key...) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db_test.go index 782faaf3..efbf942f 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/db/db_test.go @@ -1,5 +1,3 @@ -// +build go1.8 -// // Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // @@ -29,47 +27,49 @@ import ( // TestDBStore is running a test.MockStore tests // using test.MockStore function. func TestDBStore(t *testing.T) { - dir, err := ioutil.TempDir("", "mock_"+t.Name()) - if err != nil { - panic(err) - } - defer os.RemoveAll(dir) - - store, err := NewGlobalStore(dir) - if err != nil { - t.Fatal(err) - } - defer store.Close() + store, cleanup := newTestStore(t) + defer cleanup() test.MockStore(t, store, 100) } +// TestDBStoreListings is running test.MockStoreListings tests. +func TestDBStoreListings(t *testing.T) { + store, cleanup := newTestStore(t) + defer cleanup() + + test.MockStoreListings(t, store, 1000) +} + // TestImportExport is running a test.ImportExport tests // using test.MockStore function. func TestImportExport(t *testing.T) { - dir1, err := ioutil.TempDir("", "mock_"+t.Name()+"_exporter") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir1) + store1, cleanup := newTestStore(t) + defer cleanup() - store1, err := NewGlobalStore(dir1) - if err != nil { - t.Fatal(err) - } - defer store1.Close() - - dir2, err := ioutil.TempDir("", "mock_"+t.Name()+"_importer") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir2) - - store2, err := NewGlobalStore(dir2) - if err != nil { - t.Fatal(err) - } - defer store2.Close() + store2, cleanup := newTestStore(t) + defer cleanup() test.ImportExport(t, store1, store2, 100) } + +// newTestStore creates a temporary GlobalStore +// that will be closed and data deleted when +// calling returned cleanup function. +func newTestStore(t *testing.T) (s *GlobalStore, cleanup func()) { + dir, err := ioutil.TempDir("", "swarm-mock-db-") + if err != nil { + t.Fatal(err) + } + + s, err = NewGlobalStore(dir) + if err != nil { + os.RemoveAll(dir) + t.Fatal(err) + } + + return s, func() { + s.Close() + os.RemoveAll(dir) + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer.go new file mode 100644 index 00000000..8fffff8f --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer.go @@ -0,0 +1,257 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package explorer + +import ( + "bytes" + "encoding/json" + "io" + "net/http" + "net/url" + "strconv" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/swarm/log" + "github.com/ethereum/go-ethereum/swarm/storage/mock" + "github.com/rs/cors" +) + +const jsonContentType = "application/json; charset=utf-8" + +// NewHandler constructs an http.Handler with router +// that servers requests required by chunk explorer. +// +// /api/has-key/{node}/{key} +// /api/keys?start={key}&node={node}&limit={int[0..1000]} +// /api/nodes?start={node}&key={key}&limit={int[0..1000]} +// +// Data from global store will be served and appropriate +// CORS headers will be sent if allowed origins are provided. +func NewHandler(store mock.GlobalStorer, corsOrigins []string) (handler http.Handler) { + mux := http.NewServeMux() + mux.Handle("/api/has-key/", newHasKeyHandler(store)) + mux.Handle("/api/keys", newKeysHandler(store)) + mux.Handle("/api/nodes", newNodesHandler(store)) + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + jsonStatusResponse(w, http.StatusNotFound) + }) + handler = noCacheHandler(mux) + if corsOrigins != nil { + handler = cors.New(cors.Options{ + AllowedOrigins: corsOrigins, + AllowedMethods: []string{"GET"}, + MaxAge: 600, + }).Handler(handler) + } + return handler +} + +// newHasKeyHandler returns a new handler that serves +// requests for HasKey global store method. +// Possible responses are StatusResponse with +// status codes 200 or 404 if the chunk is found or not. +func newHasKeyHandler(store mock.GlobalStorer) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + addr, key, ok := parseHasKeyPath(r.URL.Path) + if !ok { + jsonStatusResponse(w, http.StatusNotFound) + return + } + found := store.HasKey(addr, key) + if !found { + jsonStatusResponse(w, http.StatusNotFound) + return + } + jsonStatusResponse(w, http.StatusOK) + } +} + +// KeysResponse is a JSON-encoded response for global store +// Keys and NodeKeys methods. +type KeysResponse struct { + Keys []string `json:"keys"` + Next string `json:"next,omitempty"` +} + +// newKeysHandler returns a new handler that serves +// requests for Key global store method. +// HTTP response body will be JSON-encoded KeysResponse. +func newKeysHandler(store mock.GlobalStorer) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + q := r.URL.Query() + node := q.Get("node") + start, limit := listingPage(q) + + var keys mock.Keys + if node == "" { + var err error + keys, err = store.Keys(common.Hex2Bytes(start), limit) + if err != nil { + log.Error("chunk explorer: keys handler: get keys", "start", start, "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + } else { + var err error + keys, err = store.NodeKeys(common.HexToAddress(node), common.Hex2Bytes(start), limit) + if err != nil { + log.Error("chunk explorer: keys handler: get node keys", "node", node, "start", start, "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + } + ks := make([]string, len(keys.Keys)) + for i, k := range keys.Keys { + ks[i] = common.Bytes2Hex(k) + } + data, err := json.Marshal(KeysResponse{ + Keys: ks, + Next: common.Bytes2Hex(keys.Next), + }) + if err != nil { + log.Error("chunk explorer: keys handler: json marshal", "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", jsonContentType) + _, err = io.Copy(w, bytes.NewReader(data)) + if err != nil { + log.Error("chunk explorer: keys handler: write response", "err", err) + } + } +} + +// NodesResponse is a JSON-encoded response for global store +// Nodes and KeyNodes methods. +type NodesResponse struct { + Nodes []string `json:"nodes"` + Next string `json:"next,omitempty"` +} + +// newNodesHandler returns a new handler that serves +// requests for Nodes global store method. +// HTTP response body will be JSON-encoded NodesResponse. +func newNodesHandler(store mock.GlobalStorer) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + q := r.URL.Query() + key := q.Get("key") + var start *common.Address + queryStart, limit := listingPage(q) + if queryStart != "" { + s := common.HexToAddress(queryStart) + start = &s + } + + var nodes mock.Nodes + if key == "" { + var err error + nodes, err = store.Nodes(start, limit) + if err != nil { + log.Error("chunk explorer: nodes handler: get nodes", "start", queryStart, "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + } else { + var err error + nodes, err = store.KeyNodes(common.Hex2Bytes(key), start, limit) + if err != nil { + log.Error("chunk explorer: nodes handler: get key nodes", "key", key, "start", queryStart, "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + } + ns := make([]string, len(nodes.Addrs)) + for i, n := range nodes.Addrs { + ns[i] = n.Hex() + } + var next string + if nodes.Next != nil { + next = nodes.Next.Hex() + } + data, err := json.Marshal(NodesResponse{ + Nodes: ns, + Next: next, + }) + if err != nil { + log.Error("chunk explorer: nodes handler", "err", err) + jsonStatusResponse(w, http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", jsonContentType) + _, err = io.Copy(w, bytes.NewReader(data)) + if err != nil { + log.Error("chunk explorer: nodes handler: write response", "err", err) + } + } +} + +// parseHasKeyPath extracts address and key from HTTP request +// path for HasKey route: /api/has-key/{node}/{key}. +// If ok is false, the provided path is not matched. +func parseHasKeyPath(p string) (addr common.Address, key []byte, ok bool) { + p = strings.TrimPrefix(p, "/api/has-key/") + parts := strings.SplitN(p, "/", 2) + if len(parts) != 2 || parts[0] == "" || parts[1] == "" { + return addr, nil, false + } + addr = common.HexToAddress(parts[0]) + key = common.Hex2Bytes(parts[1]) + return addr, key, true +} + +// listingPage returns start value and listing limit +// from url query values. +func listingPage(q url.Values) (start string, limit int) { + // if limit is not a valid integer (or blank string), + // ignore the error and use the returned 0 value + limit, _ = strconv.Atoi(q.Get("limit")) + return q.Get("start"), limit +} + +// StatusResponse is a standardized JSON-encoded response +// that contains information about HTTP response code +// for easier status identification. +type StatusResponse struct { + Message string `json:"message"` + Code int `json:"code"` +} + +// jsonStatusResponse writes to the response writer +// JSON-encoded StatusResponse based on the provided status code. +func jsonStatusResponse(w http.ResponseWriter, code int) { + w.Header().Set("Content-Type", jsonContentType) + w.WriteHeader(code) + err := json.NewEncoder(w).Encode(StatusResponse{ + Message: http.StatusText(code), + Code: code, + }) + if err != nil { + log.Error("chunk explorer: json status response", "err", err) + } +} + +// noCacheHandler sets required HTTP headers to prevent +// response caching at the client side. +func noCacheHandler(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") + w.Header().Set("Pragma", "no-cache") + w.Header().Set("Expires", "0") + h.ServeHTTP(w, r) + }) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer_test.go new file mode 100644 index 00000000..be266842 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/explorer_test.go @@ -0,0 +1,471 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package explorer + +import ( + "encoding/binary" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "net/url" + "os" + "sort" + "strconv" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/swarm/storage/mock" + "github.com/ethereum/go-ethereum/swarm/storage/mock/db" + "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" +) + +// TestHandler_memGlobalStore runs a set of tests +// to validate handler with mem global store. +func TestHandler_memGlobalStore(t *testing.T) { + t.Parallel() + + globalStore := mem.NewGlobalStore() + + testHandler(t, globalStore) +} + +// TestHandler_dbGlobalStore runs a set of tests +// to validate handler with database global store. +func TestHandler_dbGlobalStore(t *testing.T) { + t.Parallel() + + dir, err := ioutil.TempDir("", "swarm-mock-explorer-db-") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + globalStore, err := db.NewGlobalStore(dir) + if err != nil { + t.Fatal(err) + } + defer globalStore.Close() + + testHandler(t, globalStore) +} + +// testHandler stores data distributed by node addresses +// and validates if this data is correctly retrievable +// by using the http.Handler returned by NewHandler function. +// This test covers all HTTP routes and various get parameters +// on them to check paginated results. +func testHandler(t *testing.T, globalStore mock.GlobalStorer) { + const ( + nodeCount = 350 + keyCount = 250 + keysOnNodeCount = 150 + ) + + // keys for every node + nodeKeys := make(map[string][]string) + + // a node address that is not present in global store + invalidAddr := "0x7b8b72938c254cf002c4e1e714d27e022be88d93" + + // a key that is not present in global store + invalidKey := "f9824192fb515cfb" + + for i := 1; i <= nodeCount; i++ { + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, uint64(i)) + addr := common.BytesToAddress(b).Hex() + nodeKeys[addr] = make([]string, 0) + } + + for i := 1; i <= keyCount; i++ { + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, uint64(i)) + + key := common.Bytes2Hex(b) + + var c int + for addr := range nodeKeys { + nodeKeys[addr] = append(nodeKeys[addr], key) + c++ + if c >= keysOnNodeCount { + break + } + } + } + + // sort keys for every node as they are expected to be + // sorted in HTTP responses + for _, keys := range nodeKeys { + sort.Strings(keys) + } + + // nodes for every key + keyNodes := make(map[string][]string) + + // construct a reverse mapping of nodes for every key + for addr, keys := range nodeKeys { + for _, key := range keys { + keyNodes[key] = append(keyNodes[key], addr) + } + } + + // sort node addresses with case insensitive sort, + // as hex letters in node addresses are in mixed caps + for _, addrs := range keyNodes { + sortCaseInsensitive(addrs) + } + + // find a key that is not stored at the address + var ( + unmatchedAddr string + unmatchedKey string + ) + for addr, keys := range nodeKeys { + for key := range keyNodes { + var found bool + for _, k := range keys { + if k == key { + found = true + break + } + } + if !found { + unmatchedAddr = addr + unmatchedKey = key + } + break + } + if unmatchedAddr != "" { + break + } + } + // check if unmatched key/address pair is found + if unmatchedAddr == "" || unmatchedKey == "" { + t.Fatalf("could not find a key that is not associated with a node") + } + + // store the data + for addr, keys := range nodeKeys { + for _, key := range keys { + err := globalStore.Put(common.HexToAddress(addr), common.Hex2Bytes(key), []byte("data")) + if err != nil { + t.Fatal(err) + } + } + } + + handler := NewHandler(globalStore, nil) + + // this subtest confirms that it has uploaded key and that it does not have invalid keys + t.Run("has key", func(t *testing.T) { + for addr, keys := range nodeKeys { + for _, key := range keys { + testStatusResponse(t, handler, "/api/has-key/"+addr+"/"+key, http.StatusOK) + testStatusResponse(t, handler, "/api/has-key/"+invalidAddr+"/"+key, http.StatusNotFound) + } + testStatusResponse(t, handler, "/api/has-key/"+addr+"/"+invalidKey, http.StatusNotFound) + } + testStatusResponse(t, handler, "/api/has-key/"+invalidAddr+"/"+invalidKey, http.StatusNotFound) + testStatusResponse(t, handler, "/api/has-key/"+unmatchedAddr+"/"+unmatchedKey, http.StatusNotFound) + }) + + // this subtest confirms that all keys are are listed in correct order with expected pagination + t.Run("keys", func(t *testing.T) { + var allKeys []string + for key := range keyNodes { + allKeys = append(allKeys, key) + } + sort.Strings(allKeys) + + t.Run("limit 0", testKeys(handler, allKeys, 0, "")) + t.Run("limit default", testKeys(handler, allKeys, mock.DefaultLimit, "")) + t.Run("limit 2x default", testKeys(handler, allKeys, 2*mock.DefaultLimit, "")) + t.Run("limit 0.5x default", testKeys(handler, allKeys, mock.DefaultLimit/2, "")) + t.Run("limit max", testKeys(handler, allKeys, mock.MaxLimit, "")) + t.Run("limit 2x max", testKeys(handler, allKeys, 2*mock.MaxLimit, "")) + t.Run("limit negative", testKeys(handler, allKeys, -10, "")) + }) + + // this subtest confirms that all keys are are listed for every node in correct order + // and that for one node different pagination options are correct + t.Run("node keys", func(t *testing.T) { + var limitCheckAddr string + + for addr, keys := range nodeKeys { + testKeys(handler, keys, 0, addr)(t) + if limitCheckAddr == "" { + limitCheckAddr = addr + } + } + testKeys(handler, nil, 0, invalidAddr)(t) + + limitCheckKeys := nodeKeys[limitCheckAddr] + t.Run("limit 0", testKeys(handler, limitCheckKeys, 0, limitCheckAddr)) + t.Run("limit default", testKeys(handler, limitCheckKeys, mock.DefaultLimit, limitCheckAddr)) + t.Run("limit 2x default", testKeys(handler, limitCheckKeys, 2*mock.DefaultLimit, limitCheckAddr)) + t.Run("limit 0.5x default", testKeys(handler, limitCheckKeys, mock.DefaultLimit/2, limitCheckAddr)) + t.Run("limit max", testKeys(handler, limitCheckKeys, mock.MaxLimit, limitCheckAddr)) + t.Run("limit 2x max", testKeys(handler, limitCheckKeys, 2*mock.MaxLimit, limitCheckAddr)) + t.Run("limit negative", testKeys(handler, limitCheckKeys, -10, limitCheckAddr)) + }) + + // this subtest confirms that all nodes are are listed in correct order with expected pagination + t.Run("nodes", func(t *testing.T) { + var allNodes []string + for addr := range nodeKeys { + allNodes = append(allNodes, addr) + } + sortCaseInsensitive(allNodes) + + t.Run("limit 0", testNodes(handler, allNodes, 0, "")) + t.Run("limit default", testNodes(handler, allNodes, mock.DefaultLimit, "")) + t.Run("limit 2x default", testNodes(handler, allNodes, 2*mock.DefaultLimit, "")) + t.Run("limit 0.5x default", testNodes(handler, allNodes, mock.DefaultLimit/2, "")) + t.Run("limit max", testNodes(handler, allNodes, mock.MaxLimit, "")) + t.Run("limit 2x max", testNodes(handler, allNodes, 2*mock.MaxLimit, "")) + t.Run("limit negative", testNodes(handler, allNodes, -10, "")) + }) + + // this subtest confirms that all nodes are are listed that contain a a particular key in correct order + // and that for one key different node pagination options are correct + t.Run("key nodes", func(t *testing.T) { + var limitCheckKey string + + for key, addrs := range keyNodes { + testNodes(handler, addrs, 0, key)(t) + if limitCheckKey == "" { + limitCheckKey = key + } + } + testNodes(handler, nil, 0, invalidKey)(t) + + limitCheckKeys := keyNodes[limitCheckKey] + t.Run("limit 0", testNodes(handler, limitCheckKeys, 0, limitCheckKey)) + t.Run("limit default", testNodes(handler, limitCheckKeys, mock.DefaultLimit, limitCheckKey)) + t.Run("limit 2x default", testNodes(handler, limitCheckKeys, 2*mock.DefaultLimit, limitCheckKey)) + t.Run("limit 0.5x default", testNodes(handler, limitCheckKeys, mock.DefaultLimit/2, limitCheckKey)) + t.Run("limit max", testNodes(handler, limitCheckKeys, mock.MaxLimit, limitCheckKey)) + t.Run("limit 2x max", testNodes(handler, limitCheckKeys, 2*mock.MaxLimit, limitCheckKey)) + t.Run("limit negative", testNodes(handler, limitCheckKeys, -10, limitCheckKey)) + }) +} + +// testsKeys returns a test function that validates wantKeys against a series of /api/keys +// HTTP responses with provided limit and node options. +func testKeys(handler http.Handler, wantKeys []string, limit int, node string) func(t *testing.T) { + return func(t *testing.T) { + t.Helper() + + wantLimit := limit + if wantLimit <= 0 { + wantLimit = mock.DefaultLimit + } + if wantLimit > mock.MaxLimit { + wantLimit = mock.MaxLimit + } + wantKeysLen := len(wantKeys) + var i int + var startKey string + for { + var wantNext string + start := i * wantLimit + end := (i + 1) * wantLimit + if end < wantKeysLen { + wantNext = wantKeys[end] + } else { + end = wantKeysLen + } + testKeysResponse(t, handler, node, startKey, limit, KeysResponse{ + Keys: wantKeys[start:end], + Next: wantNext, + }) + if wantNext == "" { + break + } + startKey = wantNext + i++ + } + } +} + +// testNodes returns a test function that validates wantAddrs against a series of /api/nodes +// HTTP responses with provided limit and key options. +func testNodes(handler http.Handler, wantAddrs []string, limit int, key string) func(t *testing.T) { + return func(t *testing.T) { + t.Helper() + + wantLimit := limit + if wantLimit <= 0 { + wantLimit = mock.DefaultLimit + } + if wantLimit > mock.MaxLimit { + wantLimit = mock.MaxLimit + } + wantAddrsLen := len(wantAddrs) + var i int + var startKey string + for { + var wantNext string + start := i * wantLimit + end := (i + 1) * wantLimit + if end < wantAddrsLen { + wantNext = wantAddrs[end] + } else { + end = wantAddrsLen + } + testNodesResponse(t, handler, key, startKey, limit, NodesResponse{ + Nodes: wantAddrs[start:end], + Next: wantNext, + }) + if wantNext == "" { + break + } + startKey = wantNext + i++ + } + } +} + +// testStatusResponse validates a response made on url if it matches +// the expected StatusResponse. +func testStatusResponse(t *testing.T, handler http.Handler, url string, code int) { + t.Helper() + + resp := httpGet(t, handler, url) + + if resp.StatusCode != code { + t.Errorf("got status code %v, want %v", resp.StatusCode, code) + } + if got := resp.Header.Get("Content-Type"); got != jsonContentType { + t.Errorf("got Content-Type header %q, want %q", got, jsonContentType) + } + var r StatusResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if r.Code != code { + t.Errorf("got response code %v, want %v", r.Code, code) + } + if r.Message != http.StatusText(code) { + t.Errorf("got response message %q, want %q", r.Message, http.StatusText(code)) + } +} + +// testKeysResponse validates response returned from handler on /api/keys +// with node, start and limit options against KeysResponse. +func testKeysResponse(t *testing.T, handler http.Handler, node, start string, limit int, want KeysResponse) { + t.Helper() + + u, err := url.Parse("/api/keys") + if err != nil { + t.Fatal(err) + } + q := u.Query() + if node != "" { + q.Set("node", node) + } + if start != "" { + q.Set("start", start) + } + if limit != 0 { + q.Set("limit", strconv.Itoa(limit)) + } + u.RawQuery = q.Encode() + + resp := httpGet(t, handler, u.String()) + + if resp.StatusCode != http.StatusOK { + t.Errorf("got status code %v, want %v", resp.StatusCode, http.StatusOK) + } + if got := resp.Header.Get("Content-Type"); got != jsonContentType { + t.Errorf("got Content-Type header %q, want %q", got, jsonContentType) + } + var r KeysResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if fmt.Sprint(r.Keys) != fmt.Sprint(want.Keys) { + t.Errorf("got keys %v, want %v", r.Keys, want.Keys) + } + if r.Next != want.Next { + t.Errorf("got next %s, want %s", r.Next, want.Next) + } +} + +// testNodesResponse validates response returned from handler on /api/nodes +// with key, start and limit options against NodesResponse. +func testNodesResponse(t *testing.T, handler http.Handler, key, start string, limit int, want NodesResponse) { + t.Helper() + + u, err := url.Parse("/api/nodes") + if err != nil { + t.Fatal(err) + } + q := u.Query() + if key != "" { + q.Set("key", key) + } + if start != "" { + q.Set("start", start) + } + if limit != 0 { + q.Set("limit", strconv.Itoa(limit)) + } + u.RawQuery = q.Encode() + + resp := httpGet(t, handler, u.String()) + + if resp.StatusCode != http.StatusOK { + t.Errorf("got status code %v, want %v", resp.StatusCode, http.StatusOK) + } + if got := resp.Header.Get("Content-Type"); got != jsonContentType { + t.Errorf("got Content-Type header %q, want %q", got, jsonContentType) + } + var r NodesResponse + if err := json.NewDecoder(resp.Body).Decode(&r); err != nil { + t.Fatal(err) + } + if fmt.Sprint(r.Nodes) != fmt.Sprint(want.Nodes) { + t.Errorf("got nodes %v, want %v", r.Nodes, want.Nodes) + } + if r.Next != want.Next { + t.Errorf("got next %s, want %s", r.Next, want.Next) + } +} + +// httpGet uses httptest recorder to provide a response on handler's url. +func httpGet(t *testing.T, handler http.Handler, url string) (r *http.Response) { + t.Helper() + + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + t.Fatal(err) + } + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + return w.Result() +} + +// sortCaseInsensitive performs a case insensitive sort on a string slice. +func sortCaseInsensitive(s []string) { + sort.Slice(s, func(i, j int) bool { + return strings.ToLower(s[i]) < strings.ToLower(s[j]) + }) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/headers_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/headers_test.go new file mode 100644 index 00000000..5b8e05ff --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/headers_test.go @@ -0,0 +1,163 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package explorer + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" + + "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" +) + +// TestHandler_CORSOrigin validates that the correct Access-Control-Allow-Origin +// header is served with various allowed origin settings. +func TestHandler_CORSOrigin(t *testing.T) { + notAllowedOrigin := "http://not-allowed-origin.com/" + + for _, tc := range []struct { + name string + origins []string + }{ + { + name: "no origin", + origins: nil, + }, + { + name: "single origin", + origins: []string{"http://localhost/"}, + }, + { + name: "multiple origins", + origins: []string{"http://localhost/", "http://ethereum.org/"}, + }, + } { + t.Run(tc.name, func(t *testing.T) { + handler := NewHandler(mem.NewGlobalStore(), tc.origins) + + origins := tc.origins + if origins == nil { + // handle the "no origin" test case + origins = []string{""} + } + + for _, origin := range origins { + t.Run(fmt.Sprintf("get %q", origin), newTestCORSOrigin(handler, origin, origin)) + t.Run(fmt.Sprintf("preflight %q", origin), newTestCORSPreflight(handler, origin, origin)) + } + + t.Run(fmt.Sprintf("get %q", notAllowedOrigin), newTestCORSOrigin(handler, notAllowedOrigin, "")) + t.Run(fmt.Sprintf("preflight %q", notAllowedOrigin), newTestCORSPreflight(handler, notAllowedOrigin, "")) + }) + } + + t.Run("wildcard", func(t *testing.T) { + handler := NewHandler(mem.NewGlobalStore(), []string{"*"}) + + for _, origin := range []string{ + "http://example.com/", + "http://ethereum.org", + "http://localhost", + } { + t.Run(fmt.Sprintf("get %q", origin), newTestCORSOrigin(handler, origin, origin)) + t.Run(fmt.Sprintf("preflight %q", origin), newTestCORSPreflight(handler, origin, origin)) + } + }) +} + +// newTestCORSOrigin returns a test function that validates if wantOrigin CORS header is +// served by the handler for a GET request. +func newTestCORSOrigin(handler http.Handler, origin, wantOrigin string) func(t *testing.T) { + return func(t *testing.T) { + req, err := http.NewRequest(http.MethodGet, "/", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Origin", origin) + + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + resp := w.Result() + + header := resp.Header.Get("Access-Control-Allow-Origin") + if header != wantOrigin { + t.Errorf("got Access-Control-Allow-Origin header %q, want %q", header, wantOrigin) + } + } +} + +// newTestCORSPreflight returns a test function that validates if wantOrigin CORS header is +// served by the handler for an OPTIONS CORS preflight request. +func newTestCORSPreflight(handler http.Handler, origin, wantOrigin string) func(t *testing.T) { + return func(t *testing.T) { + req, err := http.NewRequest(http.MethodOptions, "/", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Origin", origin) + req.Header.Set("Access-Control-Request-Method", "GET") + + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + resp := w.Result() + + header := resp.Header.Get("Access-Control-Allow-Origin") + if header != wantOrigin { + t.Errorf("got Access-Control-Allow-Origin header %q, want %q", header, wantOrigin) + } + } +} + +// TestHandler_noCacheHeaders validates that no cache headers are server. +func TestHandler_noCacheHeaders(t *testing.T) { + handler := NewHandler(mem.NewGlobalStore(), nil) + + for _, tc := range []struct { + url string + }{ + { + url: "/", + }, + { + url: "/api/nodes", + }, + { + url: "/api/keys", + }, + } { + req, err := http.NewRequest(http.MethodGet, tc.url, nil) + if err != nil { + t.Fatal(err) + } + + w := httptest.NewRecorder() + handler.ServeHTTP(w, req) + resp := w.Result() + + for header, want := range map[string]string{ + "Cache-Control": "no-cache, no-store, must-revalidate", + "Pragma": "no-cache", + "Expires": "0", + } { + got := resp.Header.Get(header) + if got != want { + t.Errorf("got %q header %q for url %q, want %q", header, tc.url, got, want) + } + } + } +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/swagger.yaml b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/swagger.yaml new file mode 100644 index 00000000..2c014e92 --- /dev/null +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/explorer/swagger.yaml @@ -0,0 +1,176 @@ +swagger: '2.0' +info: + title: Swarm Global Store API + version: 0.1.0 +tags: + - name: Has Key + description: Checks if a Key is stored on a Node + - name: Keys + description: Lists Keys + - name: Nodes + description: Lists Node addresses + +paths: + '/api/has-key/{node}/{key}': + get: + tags: + - Has Key + summary: Checks if a Key is stored on a Node + operationId: hasKey + produces: + - application/json + + parameters: + - name: node + in: path + required: true + type: string + format: hex-endoded + description: Node address. + + - name: key + in: path + required: true + type: string + format: hex-endoded + description: Key. + + responses: + '200': + description: Key is stored on Node + schema: + $ref: '#/definitions/Status' + '404': + description: Key is not stored on Node + schema: + $ref: '#/definitions/Status' + '500': + description: Internal Server Error + schema: + $ref: '#/definitions/Status' + + '/api/keys': + get: + tags: + - Keys + summary: Lists Keys + operationId: keys + produces: + - application/json + + parameters: + - name: start + in: query + required: false + type: string + format: hex-encoded Key + description: A Key as the starting point for the returned list. It is usually a value from the returned "next" field in the Keys repsonse. + + - name: limit + in: query + required: false + type: integer + default: 100 + minimum: 1 + maximum: 1000 + description: Limits the number of Keys returned in on response. + + - name: node + in: query + required: false + type: string + format: hex-encoded Node address + description: If this parameter is provided, only Keys that are stored on this Node be returned in the response. If not, all known Keys will be returned. + + responses: + '200': + description: List of Keys + schema: + $ref: '#/definitions/Keys' + '500': + description: Internal Server Error + schema: + $ref: '#/definitions/Status' + + '/api/nodes': + get: + tags: + - Nodes + summary: Lists Node addresses + operationId: nodes + produces: + - application/json + + parameters: + - name: start + in: query + required: false + type: string + format: hex-encoded Node address + description: A Node address as the starting point for the returned list. It is usually a value from the returned "next" field in the Nodes repsonse. + + - name: limit + in: query + required: false + type: integer + default: 100 + minimum: 1 + maximum: 1000 + description: Limits the number of Node addresses returned in on response. + + - name: key + in: query + required: false + type: string + format: hex-encoded Key + description: If this parameter is provided, only addresses of Nodes that store this Key will be returned in the response. If not, all known Node addresses will be returned. + + responses: + '200': + description: List of Node addresses + schema: + $ref: '#/definitions/Nodes' + '500': + description: Internal Server Error + schema: + $ref: '#/definitions/Status' + +definitions: + + Status: + type: object + properties: + message: + type: string + description: HTTP Status Code name. + code: + type: integer + description: HTTP Status Code. + + Keys: + type: object + properties: + keys: + type: array + description: A list of Keys. + items: + type: string + format: hex-encoded Key + next: + type: string + format: hex-encoded Key + description: If present, the next Key in listing. Can be passed as "start" query parameter to continue the listing. If not present, the end of the listing is reached. + + Nodes: + type: object + properties: + nodes: + type: array + description: A list of Node addresses. + items: + type: string + format: hex-encoded Node address + next: + type: string + format: hex-encoded Node address + description: If present, the next Node address in listing. Can be passed as "start" query parameter to continue the listing. If not present, the end of the listing is reached. diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem.go index 3a0a2beb..38bf098d 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem.go @@ -25,6 +25,7 @@ import ( "encoding/json" "io" "io/ioutil" + "sort" "sync" "github.com/ethereum/go-ethereum/common" @@ -34,16 +35,27 @@ import ( // GlobalStore stores all chunk data and also keys and node addresses relations. // It implements mock.GlobalStore interface. type GlobalStore struct { - nodes map[string]map[common.Address]struct{} - data map[string][]byte - mu sync.Mutex + // holds a slice of keys per node + nodeKeys map[common.Address][][]byte + // holds which key is stored on which nodes + keyNodes map[string][]common.Address + // all node addresses + nodes []common.Address + // all keys + keys [][]byte + // all keys data + data map[string][]byte + mu sync.RWMutex } // NewGlobalStore creates a new instance of GlobalStore. func NewGlobalStore() *GlobalStore { return &GlobalStore{ - nodes: make(map[string]map[common.Address]struct{}), - data: make(map[string][]byte), + nodeKeys: make(map[common.Address][][]byte), + keyNodes: make(map[string][]common.Address), + nodes: make([]common.Address, 0), + keys: make([][]byte, 0), + data: make(map[string][]byte), } } @@ -56,10 +68,10 @@ func (s *GlobalStore) NewNodeStore(addr common.Address) *mock.NodeStore { // Get returns chunk data if the chunk with key exists for node // on address addr. func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err error) { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() - if _, ok := s.nodes[string(key)][addr]; !ok { + if _, has := s.nodeKeyIndex(addr, key); !has { return nil, mock.ErrNotFound } @@ -75,11 +87,33 @@ func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error { s.mu.Lock() defer s.mu.Unlock() - if _, ok := s.nodes[string(key)]; !ok { - s.nodes[string(key)] = make(map[common.Address]struct{}) + if i, found := s.nodeKeyIndex(addr, key); !found { + s.nodeKeys[addr] = append(s.nodeKeys[addr], nil) + copy(s.nodeKeys[addr][i+1:], s.nodeKeys[addr][i:]) + s.nodeKeys[addr][i] = key } - s.nodes[string(key)][addr] = struct{}{} + + if i, found := s.keyNodeIndex(key, addr); !found { + k := string(key) + s.keyNodes[k] = append(s.keyNodes[k], addr) + copy(s.keyNodes[k][i+1:], s.keyNodes[k][i:]) + s.keyNodes[k][i] = addr + } + + if i, found := s.nodeIndex(addr); !found { + s.nodes = append(s.nodes, addr) + copy(s.nodes[i+1:], s.nodes[i:]) + s.nodes[i] = addr + } + + if i, found := s.keyIndex(key); !found { + s.keys = append(s.keys, nil) + copy(s.keys[i+1:], s.keys[i:]) + s.keys[i] = key + } + s.data[string(key)] = data + return nil } @@ -88,24 +122,177 @@ func (s *GlobalStore) Delete(addr common.Address, key []byte) error { s.mu.Lock() defer s.mu.Unlock() - var count int - if _, ok := s.nodes[string(key)]; ok { - delete(s.nodes[string(key)], addr) - count = len(s.nodes[string(key)]) + if i, has := s.nodeKeyIndex(addr, key); has { + s.nodeKeys[addr] = append(s.nodeKeys[addr][:i], s.nodeKeys[addr][i+1:]...) } - if count == 0 { - delete(s.data, string(key)) + + k := string(key) + if i, on := s.keyNodeIndex(key, addr); on { + s.keyNodes[k] = append(s.keyNodes[k][:i], s.keyNodes[k][i+1:]...) + } + + if len(s.nodeKeys[addr]) == 0 { + if i, found := s.nodeIndex(addr); found { + s.nodes = append(s.nodes[:i], s.nodes[i+1:]...) + } + } + + if len(s.keyNodes[k]) == 0 { + if i, found := s.keyIndex(key); found { + s.keys = append(s.keys[:i], s.keys[i+1:]...) + } } return nil } // HasKey returns whether a node with addr contains the key. -func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { - s.mu.Lock() - defer s.mu.Unlock() +func (s *GlobalStore) HasKey(addr common.Address, key []byte) (yes bool) { + s.mu.RLock() + defer s.mu.RUnlock() - _, ok := s.nodes[string(key)][addr] - return ok + _, yes = s.nodeKeyIndex(addr, key) + return yes +} + +// keyIndex returns the index of a key in keys slice. +func (s *GlobalStore) keyIndex(key []byte) (index int, found bool) { + l := len(s.keys) + index = sort.Search(l, func(i int) bool { + return bytes.Compare(s.keys[i], key) >= 0 + }) + found = index < l && bytes.Equal(s.keys[index], key) + return index, found +} + +// nodeIndex returns the index of a node address in nodes slice. +func (s *GlobalStore) nodeIndex(addr common.Address) (index int, found bool) { + l := len(s.nodes) + index = sort.Search(l, func(i int) bool { + return bytes.Compare(s.nodes[i][:], addr[:]) >= 0 + }) + found = index < l && bytes.Equal(s.nodes[index][:], addr[:]) + return index, found +} + +// nodeKeyIndex returns the index of a key in nodeKeys slice. +func (s *GlobalStore) nodeKeyIndex(addr common.Address, key []byte) (index int, found bool) { + l := len(s.nodeKeys[addr]) + index = sort.Search(l, func(i int) bool { + return bytes.Compare(s.nodeKeys[addr][i], key) >= 0 + }) + found = index < l && bytes.Equal(s.nodeKeys[addr][index], key) + return index, found +} + +// keyNodeIndex returns the index of a node address in keyNodes slice. +func (s *GlobalStore) keyNodeIndex(key []byte, addr common.Address) (index int, found bool) { + k := string(key) + l := len(s.keyNodes[k]) + index = sort.Search(l, func(i int) bool { + return bytes.Compare(s.keyNodes[k][i][:], addr[:]) >= 0 + }) + found = index < l && s.keyNodes[k][index] == addr + return index, found +} + +// Keys returns a paginated list of keys on all nodes. +func (s *GlobalStore) Keys(startKey []byte, limit int) (keys mock.Keys, err error) { + s.mu.RLock() + defer s.mu.RUnlock() + + var i int + if startKey != nil { + i, _ = s.keyIndex(startKey) + } + total := len(s.keys) + max := maxIndex(i, limit, total) + keys.Keys = make([][]byte, 0, max-i) + for ; i < max; i++ { + keys.Keys = append(keys.Keys, append([]byte(nil), s.keys[i]...)) + } + if total > max { + keys.Next = s.keys[max] + } + return keys, nil +} + +// Nodes returns a paginated list of all known nodes. +func (s *GlobalStore) Nodes(startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + s.mu.RLock() + defer s.mu.RUnlock() + + var i int + if startAddr != nil { + i, _ = s.nodeIndex(*startAddr) + } + total := len(s.nodes) + max := maxIndex(i, limit, total) + nodes.Addrs = make([]common.Address, 0, max-i) + for ; i < max; i++ { + nodes.Addrs = append(nodes.Addrs, s.nodes[i]) + } + if total > max { + nodes.Next = &s.nodes[max] + } + return nodes, nil +} + +// NodeKeys returns a paginated list of keys on a node with provided address. +func (s *GlobalStore) NodeKeys(addr common.Address, startKey []byte, limit int) (keys mock.Keys, err error) { + s.mu.RLock() + defer s.mu.RUnlock() + + var i int + if startKey != nil { + i, _ = s.nodeKeyIndex(addr, startKey) + } + total := len(s.nodeKeys[addr]) + max := maxIndex(i, limit, total) + keys.Keys = make([][]byte, 0, max-i) + for ; i < max; i++ { + keys.Keys = append(keys.Keys, append([]byte(nil), s.nodeKeys[addr][i]...)) + } + if total > max { + keys.Next = s.nodeKeys[addr][max] + } + return keys, nil +} + +// KeyNodes returns a paginated list of nodes that contain a particular key. +func (s *GlobalStore) KeyNodes(key []byte, startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + s.mu.RLock() + defer s.mu.RUnlock() + + var i int + if startAddr != nil { + i, _ = s.keyNodeIndex(key, *startAddr) + } + total := len(s.keyNodes[string(key)]) + max := maxIndex(i, limit, total) + nodes.Addrs = make([]common.Address, 0, max-i) + for ; i < max; i++ { + nodes.Addrs = append(nodes.Addrs, s.keyNodes[string(key)][i]) + } + if total > max { + nodes.Next = &s.keyNodes[string(key)][max] + } + return nodes, nil +} + +// maxIndex returns the end index for one page listing +// based on the start index, limit and total number of elements. +func maxIndex(start, limit, total int) (max int) { + if limit <= 0 { + limit = mock.DefaultLimit + } + if limit > mock.MaxLimit { + limit = mock.MaxLimit + } + max = total + if start+limit < max { + max = start + limit + } + return max } // Import reads tar archive from a reader that contains exported chunk data. @@ -135,14 +322,26 @@ func (s *GlobalStore) Import(r io.Reader) (n int, err error) { return n, err } - addrs := make(map[common.Address]struct{}) - for _, a := range c.Addrs { - addrs[a] = struct{}{} + key := common.Hex2Bytes(hdr.Name) + s.keyNodes[string(key)] = c.Addrs + for _, addr := range c.Addrs { + if i, has := s.nodeKeyIndex(addr, key); !has { + s.nodeKeys[addr] = append(s.nodeKeys[addr], nil) + copy(s.nodeKeys[addr][i+1:], s.nodeKeys[addr][i:]) + s.nodeKeys[addr][i] = key + } + if i, found := s.nodeIndex(addr); !found { + s.nodes = append(s.nodes, addr) + copy(s.nodes[i+1:], s.nodes[i:]) + s.nodes[i] = addr + } } - - key := string(common.Hex2Bytes(hdr.Name)) - s.nodes[key] = addrs - s.data[key] = c.Data + if i, found := s.keyIndex(key); !found { + s.keys = append(s.keys, nil) + copy(s.keys[i+1:], s.keys[i:]) + s.keys[i] = key + } + s.data[string(key)] = c.Data n++ } return n, err @@ -151,23 +350,18 @@ func (s *GlobalStore) Import(r io.Reader) (n int, err error) { // Export writes to a writer a tar archive with all chunk data from // the store. It returns the number of chunks exported and an error. func (s *GlobalStore) Export(w io.Writer) (n int, err error) { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() tw := tar.NewWriter(w) defer tw.Close() buf := bytes.NewBuffer(make([]byte, 0, 1024)) encoder := json.NewEncoder(buf) - for key, addrs := range s.nodes { - al := make([]common.Address, 0, len(addrs)) - for a := range addrs { - al = append(al, a) - } - + for key, addrs := range s.keyNodes { buf.Reset() if err = encoder.Encode(mock.ExportedChunk{ - Addrs: al, + Addrs: addrs, Data: s.data[key], }); err != nil { return n, err diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem_test.go index adcefaab..d39aaef4 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mem/mem_test.go @@ -28,6 +28,12 @@ func TestGlobalStore(t *testing.T) { test.MockStore(t, NewGlobalStore(), 100) } +// TestGlobalStoreListings is running test for a GlobalStore +// using test.MockStoreListings function. +func TestGlobalStoreListings(t *testing.T) { + test.MockStoreListings(t, NewGlobalStore(), 1000) +} + // TestImportExport is running tests for importing and // exporting data between two GlobalStores // using test.ImportExport function. diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mock.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mock.go index 626ba3fe..586112a9 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mock.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/mock.go @@ -39,6 +39,17 @@ import ( "github.com/ethereum/go-ethereum/common" ) +const ( + // DefaultLimit should be used as default limit for + // Keys, Nodes, NodeKeys and KeyNodes GlobarStorer + // methids implementations. + DefaultLimit = 100 + // MaxLimit should be used as the maximal returned number + // of items for Keys, Nodes, NodeKeys and KeyNodes GlobarStorer + // methids implementations, regardless of provided limit. + MaxLimit = 1000 +) + // ErrNotFound indicates that the chunk is not found. var ErrNotFound = errors.New("not found") @@ -76,6 +87,10 @@ func (n *NodeStore) Delete(key []byte) error { return n.store.Delete(n.addr, key) } +func (n *NodeStore) Keys(startKey []byte, limit int) (keys Keys, err error) { + return n.store.NodeKeys(n.addr, startKey, limit) +} + // GlobalStorer defines methods for mock db store // that stores chunk data for all swarm nodes. // It is used in tests to construct mock NodeStores @@ -85,12 +100,28 @@ type GlobalStorer interface { Put(addr common.Address, key []byte, data []byte) error Delete(addr common.Address, key []byte) error HasKey(addr common.Address, key []byte) bool + Keys(startKey []byte, limit int) (keys Keys, err error) + Nodes(startAddr *common.Address, limit int) (nodes Nodes, err error) + NodeKeys(addr common.Address, startKey []byte, limit int) (keys Keys, err error) + KeyNodes(key []byte, startAddr *common.Address, limit int) (nodes Nodes, err error) // NewNodeStore creates an instance of NodeStore // to be used by a single swarm node with // address addr. NewNodeStore(addr common.Address) *NodeStore } +// Keys are returned results by Keys and NodeKeys GlobalStorer methods. +type Keys struct { + Keys [][]byte + Next []byte +} + +// Nodes are returned results by Nodes and KeyNodes GlobalStorer methods. +type Nodes struct { + Addrs []common.Address + Next *common.Address +} + // Importer defines method for importing mock store data // from an exported tar archive. type Importer interface { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc.go index 8cd6c83a..8150ccff 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc.go @@ -88,3 +88,27 @@ func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { } return has } + +// Keys returns a paginated list of keys on all nodes. +func (s *GlobalStore) Keys(startKey []byte, limit int) (keys mock.Keys, err error) { + err = s.client.Call(&keys, "mockStore_keys", startKey, limit) + return keys, err +} + +// Nodes returns a paginated list of all known nodes. +func (s *GlobalStore) Nodes(startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + err = s.client.Call(&nodes, "mockStore_nodes", startAddr, limit) + return nodes, err +} + +// NodeKeys returns a paginated list of keys on a node with provided address. +func (s *GlobalStore) NodeKeys(addr common.Address, startKey []byte, limit int) (keys mock.Keys, err error) { + err = s.client.Call(&keys, "mockStore_nodeKeys", addr, startKey, limit) + return keys, err +} + +// KeyNodes returns a paginated list of nodes that contain a particular key. +func (s *GlobalStore) KeyNodes(key []byte, startAddr *common.Address, limit int) (nodes mock.Nodes, err error) { + err = s.client.Call(&nodes, "mockStore_keyNodes", key, startAddr, limit) + return nodes, err +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc_test.go index f62340ed..6c465235 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/rpc/rpc_test.go @@ -27,6 +27,27 @@ import ( // TestDBStore is running test for a GlobalStore // using test.MockStore function. func TestRPCStore(t *testing.T) { + store, cleanup := newTestStore(t) + defer cleanup() + + test.MockStore(t, store, 30) +} + +// TestRPCStoreListings is running test for a GlobalStore +// using test.MockStoreListings function. +func TestRPCStoreListings(t *testing.T) { + store, cleanup := newTestStore(t) + defer cleanup() + + test.MockStoreListings(t, store, 1000) +} + +// newTestStore creates a temporary GlobalStore +// that will be closed when returned cleanup function +// is called. +func newTestStore(t *testing.T) (s *GlobalStore, cleanup func()) { + t.Helper() + serverStore := mem.NewGlobalStore() server := rpc.NewServer() @@ -35,7 +56,9 @@ func TestRPCStore(t *testing.T) { } store := NewGlobalStore(rpc.DialInProc(server)) - defer store.Close() - - test.MockStore(t, store, 30) + return store, func() { + if err := store.Close(); err != nil { + t.Error(err) + } + } } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/test/test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/test/test.go index 69828b14..cc837f0b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/test/test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/mock/test/test.go @@ -20,6 +20,7 @@ package test import ( "bytes" + "encoding/binary" "fmt" "io" "strconv" @@ -170,6 +171,123 @@ func MockStore(t *testing.T, globalStore mock.GlobalStorer, n int) { }) } +// MockStoreListings tests global store methods Keys, Nodes, NodeKeys and KeyNodes. +// It uses a provided globalstore to put chunks for n number of node addresses +// and to validate that methods are returning the right responses. +func MockStoreListings(t *testing.T, globalStore mock.GlobalStorer, n int) { + addrs := make([]common.Address, n) + for i := 0; i < n; i++ { + addrs[i] = common.HexToAddress(strconv.FormatInt(int64(i)+1, 16)) + } + type chunk struct { + key []byte + data []byte + } + const chunksPerNode = 5 + keys := make([][]byte, n*chunksPerNode) + for i := 0; i < n*chunksPerNode; i++ { + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, uint64(i)) + keys[i] = b + } + + // keep track of keys on every node + nodeKeys := make(map[common.Address][][]byte) + // keep track of nodes that store particular key + keyNodes := make(map[string][]common.Address) + for i := 0; i < chunksPerNode; i++ { + // put chunks for every address + for j := 0; j < n; j++ { + addr := addrs[j] + key := keys[(i*n)+j] + err := globalStore.Put(addr, key, []byte("data")) + if err != nil { + t.Fatal(err) + } + nodeKeys[addr] = append(nodeKeys[addr], key) + keyNodes[string(key)] = append(keyNodes[string(key)], addr) + } + + // test Keys method + var startKey []byte + var gotKeys [][]byte + for { + keys, err := globalStore.Keys(startKey, 0) + if err != nil { + t.Fatal(err) + } + gotKeys = append(gotKeys, keys.Keys...) + if keys.Next == nil { + break + } + startKey = keys.Next + } + wantKeys := keys[:(i+1)*n] + if fmt.Sprint(gotKeys) != fmt.Sprint(wantKeys) { + t.Fatalf("got #%v keys %v, want %v", i+1, gotKeys, wantKeys) + } + + // test Nodes method + var startNode *common.Address + var gotNodes []common.Address + for { + nodes, err := globalStore.Nodes(startNode, 0) + if err != nil { + t.Fatal(err) + } + gotNodes = append(gotNodes, nodes.Addrs...) + if nodes.Next == nil { + break + } + startNode = nodes.Next + } + wantNodes := addrs + if fmt.Sprint(gotNodes) != fmt.Sprint(wantNodes) { + t.Fatalf("got #%v nodes %v, want %v", i+1, gotNodes, wantNodes) + } + + // test NodeKeys method + for addr, wantKeys := range nodeKeys { + var startKey []byte + var gotKeys [][]byte + for { + keys, err := globalStore.NodeKeys(addr, startKey, 0) + if err != nil { + t.Fatal(err) + } + gotKeys = append(gotKeys, keys.Keys...) + if keys.Next == nil { + break + } + startKey = keys.Next + } + if fmt.Sprint(gotKeys) != fmt.Sprint(wantKeys) { + t.Fatalf("got #%v %s node keys %v, want %v", i+1, addr.Hex(), gotKeys, wantKeys) + } + } + + // test KeyNodes method + for key, wantNodes := range keyNodes { + var startNode *common.Address + var gotNodes []common.Address + for { + nodes, err := globalStore.KeyNodes([]byte(key), startNode, 0) + if err != nil { + t.Fatal(err) + } + gotNodes = append(gotNodes, nodes.Addrs...) + if nodes.Next == nil { + break + } + startNode = nodes.Next + } + if fmt.Sprint(gotNodes) != fmt.Sprint(wantNodes) { + t.Fatalf("got #%v %x key nodes %v, want %v", i+1, []byte(key), gotNodes, wantNodes) + } + } + } +} + // ImportExport saves chunks to the outStore, exports them to the tar archive, // imports tar archive to the inStore and checks if all chunks are imported correctly. func ImportExport(t *testing.T, outStore, inStore mock.GlobalStorer, n int) { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore.go index 202af2bf..7741b8f7 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore.go @@ -26,6 +26,11 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/swarm/log" + "github.com/ethereum/go-ethereum/swarm/spancontext" + "github.com/opentracing/opentracing-go" + olog "github.com/opentracing/opentracing-go/log" + "github.com/syndtr/goleveldb/leveldb" + lru "github.com/hashicorp/golang-lru" ) @@ -82,7 +87,9 @@ func (n *NetStore) Put(ctx context.Context, ch Chunk) error { // if chunk is now put in the store, check if there was an active fetcher and call deliver on it // (this delivers the chunk to requestors via the fetcher) + log.Trace("n.getFetcher", "ref", ch.Address()) if f := n.getFetcher(ch.Address()); f != nil { + log.Trace("n.getFetcher deliver", "ref", ch.Address()) f.deliver(ctx, ch) } return nil @@ -98,6 +105,14 @@ func (n *NetStore) Get(rctx context.Context, ref Address) (Chunk, error) { return nil, err } if chunk != nil { + // this is not measuring how long it takes to get the chunk for the localstore, but + // rather just adding a span for clarity when inspecting traces in Jaeger, in order + // to make it easier to reason which is the node that actually delivered a chunk. + _, sp := spancontext.StartSpan( + rctx, + "localstore.get") + defer sp.Finish() + return chunk, nil } return fetch(rctx) @@ -163,7 +178,8 @@ func (n *NetStore) get(ctx context.Context, ref Address) (Chunk, func(context.Co chunk, err := n.store.Get(ctx, ref) if err != nil { - if err != ErrChunkNotFound { + // TODO: Fix comparison - we should be comparing against leveldb.ErrNotFound, this error should be wrapped. + if err != ErrChunkNotFound && err != leveldb.ErrNotFound { log.Debug("Received error from LocalStore other than ErrNotFound", "err", err) } // The chunk is not available in the LocalStore, let's get the fetcher for it, or create a new one @@ -208,7 +224,13 @@ func (n *NetStore) getOrCreateFetcher(ctx context.Context, ref Address) *fetcher // the peers which requested the chunk should not be requested to deliver it. peers := &sync.Map{} - fetcher := newFetcher(ref, n.NewNetFetcherFunc(cctx, ref, peers), destroy, peers, n.closeC) + cctx, sp := spancontext.StartSpan( + cctx, + "netstore.fetcher", + ) + + sp.LogFields(olog.String("ref", ref.String())) + fetcher := newFetcher(sp, ref, n.NewNetFetcherFunc(cctx, ref, peers), destroy, peers, n.closeC) n.fetchers.Add(key, fetcher) return fetcher @@ -233,15 +255,16 @@ func (n *NetStore) RequestsCacheLen() int { // One fetcher object is responsible to fetch one chunk for one address, and keep track of all the // peers who have requested it and did not receive it yet. type fetcher struct { - addr Address // address of chunk - chunk Chunk // fetcher can set the chunk on the fetcher - deliveredC chan struct{} // chan signalling chunk delivery to requests - cancelledC chan struct{} // chan signalling the fetcher has been cancelled (removed from fetchers in NetStore) - netFetcher NetFetcher // remote fetch function to be called with a request source taken from the context - cancel func() // cleanup function for the remote fetcher to call when all upstream contexts are called - peers *sync.Map // the peers which asked for the chunk - requestCnt int32 // number of requests on this chunk. If all the requests are done (delivered or context is done) the cancel function is called - deliverOnce *sync.Once // guarantees that we only close deliveredC once + addr Address // address of chunk + chunk Chunk // fetcher can set the chunk on the fetcher + deliveredC chan struct{} // chan signalling chunk delivery to requests + cancelledC chan struct{} // chan signalling the fetcher has been cancelled (removed from fetchers in NetStore) + netFetcher NetFetcher // remote fetch function to be called with a request source taken from the context + cancel func() // cleanup function for the remote fetcher to call when all upstream contexts are called + peers *sync.Map // the peers which asked for the chunk + requestCnt int32 // number of requests on this chunk. If all the requests are done (delivered or context is done) the cancel function is called + deliverOnce *sync.Once // guarantees that we only close deliveredC once + span opentracing.Span // measure retrieve time per chunk } // newFetcher creates a new fetcher object for the fiven addr. fetch is the function which actually @@ -250,7 +273,7 @@ type fetcher struct { // 1. when the chunk has been fetched all peers have been either notified or their context has been done // 2. the chunk has not been fetched but all context from all the requests has been done // The peers map stores all the peers which have requested chunk. -func newFetcher(addr Address, nf NetFetcher, cancel func(), peers *sync.Map, closeC chan struct{}) *fetcher { +func newFetcher(span opentracing.Span, addr Address, nf NetFetcher, cancel func(), peers *sync.Map, closeC chan struct{}) *fetcher { cancelOnce := &sync.Once{} // cancel should only be called once return &fetcher{ addr: addr, @@ -264,6 +287,7 @@ func newFetcher(addr Address, nf NetFetcher, cancel func(), peers *sync.Map, clo }) }, peers: peers, + span: span, } } @@ -276,6 +300,7 @@ func (f *fetcher) Fetch(rctx context.Context) (Chunk, error) { if atomic.AddInt32(&f.requestCnt, -1) == 0 { f.cancel() } + f.span.Finish() }() // The peer asking for the chunk. Store in the shared peers map, but delete after the request @@ -318,5 +343,6 @@ func (f *fetcher) deliver(ctx context.Context, ch Chunk) { f.chunk = ch // closing the deliveredC channel will terminate ongoing requests close(f.deliveredC) + log.Trace("n.getFetcher close deliveredC", "ref", ch.Address()) }) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore_test.go index 88ec6c28..65387762 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/netstore_test.go @@ -29,7 +29,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/p2p/enode" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" ) var sourcePeerID = enode.HexID("99d8594b52298567d2ca3f4c441a5ba0140ee9245e26460d01102a52773c73b9") @@ -114,7 +114,7 @@ func mustNewNetStoreWithFetcher(t *testing.T) (*NetStore, *mockNetFetcher) { func TestNetStoreGetAndPut(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() @@ -174,7 +174,7 @@ func TestNetStoreGetAndPut(t *testing.T) { func TestNetStoreGetAfterPut(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) defer cancel() @@ -209,7 +209,7 @@ func TestNetStoreGetAfterPut(t *testing.T) { func TestNetStoreGetTimeout(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) defer cancel() @@ -261,7 +261,7 @@ func TestNetStoreGetTimeout(t *testing.T) { func TestNetStoreGetCancel(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) @@ -313,7 +313,7 @@ func TestNetStoreGetCancel(t *testing.T) { func TestNetStoreMultipleGetAndPut(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() @@ -387,7 +387,7 @@ func TestNetStoreMultipleGetAndPut(t *testing.T) { func TestNetStoreFetchFuncTimeout(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) defer cancel() @@ -426,7 +426,7 @@ func TestNetStoreFetchFuncTimeout(t *testing.T) { func TestNetStoreFetchFuncAfterPut(t *testing.T) { netStore := mustNewNetStore(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() @@ -453,7 +453,7 @@ func TestNetStoreFetchFuncAfterPut(t *testing.T) { func TestNetStoreGetCallsRequest(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx := context.WithValue(context.Background(), "hopcount", uint8(5)) ctx, cancel := context.WithTimeout(ctx, 200*time.Millisecond) @@ -481,7 +481,7 @@ func TestNetStoreGetCallsRequest(t *testing.T) { func TestNetStoreGetCallsOffer(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) // If a source peer is added to the context, NetStore will handle it as an offer ctx := context.WithValue(context.Background(), "source", sourcePeerID.String()) @@ -567,7 +567,7 @@ func TestNetStoreFetcherCountPeers(t *testing.T) { func TestNetStoreFetchFuncCalledMultipleTimes(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) defer cancel() @@ -632,7 +632,7 @@ func TestNetStoreFetchFuncCalledMultipleTimes(t *testing.T) { func TestNetStoreFetcherLifeCycleWithTimeout(t *testing.T) { netStore, fetcher := mustNewNetStoreWithFetcher(t) - chunk := GenerateRandomChunk(ch.DefaultSize) + chunk := GenerateRandomChunk(chunk.DefaultSize) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/pyramid.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/pyramid.go index ed0f843b..281bbe9f 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/pyramid.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/pyramid.go @@ -25,7 +25,7 @@ import ( "sync" "time" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/log" ) @@ -97,11 +97,11 @@ func NewPyramidSplitterParams(addr Address, reader io.Reader, putter Putter, get New chunks to store are store using the putter which the caller provides. */ func PyramidSplit(ctx context.Context, reader io.Reader, putter Putter, getter Getter) (Address, func(context.Context) error, error) { - return NewPyramidSplitter(NewPyramidSplitterParams(nil, reader, putter, getter, ch.DefaultSize)).Split(ctx) + return NewPyramidSplitter(NewPyramidSplitterParams(nil, reader, putter, getter, chunk.DefaultSize)).Split(ctx) } func PyramidAppend(ctx context.Context, addr Address, reader io.Reader, putter Putter, getter Getter) (Address, func(context.Context) error, error) { - return NewPyramidSplitter(NewPyramidSplitterParams(addr, reader, putter, getter, ch.DefaultSize)).Append(ctx) + return NewPyramidSplitter(NewPyramidSplitterParams(addr, reader, putter, getter, chunk.DefaultSize)).Append(ctx) } // Entry to create a tree node diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/storage/types.go b/vendor/github.com/ethereum/go-ethereum/swarm/storage/types.go index 7ec21328..2f39685b 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/storage/types.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/storage/types.go @@ -22,53 +22,29 @@ import ( "crypto" "crypto/rand" "encoding/binary" - "fmt" "io" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/swarm/bmt" - ch "github.com/ethereum/go-ethereum/swarm/chunk" + "github.com/ethereum/go-ethereum/swarm/chunk" "golang.org/x/crypto/sha3" ) -const MaxPO = 16 -const AddressLength = 32 +// MaxPO is the same as chunk.MaxPO for backward compatibility. +const MaxPO = chunk.MaxPO + +// AddressLength is the same as chunk.AddressLength for backward compatibility. +const AddressLength = chunk.AddressLength type SwarmHasher func() SwarmHash -type Address []byte +// Address is an alias for chunk.Address for backward compatibility. +type Address = chunk.Address -// Proximity(x, y) returns the proximity order of the MSB distance between x and y -// -// The distance metric MSB(x, y) of two equal length byte sequences x an y is the -// value of the binary integer cast of the x^y, ie., x and y bitwise xor-ed. -// the binary cast is big endian: most significant bit first (=MSB). -// -// Proximity(x, y) is a discrete logarithmic scaling of the MSB distance. -// It is defined as the reverse rank of the integer part of the base 2 -// logarithm of the distance. -// It is calculated by counting the number of common leading zeros in the (MSB) -// binary representation of the x^y. -// -// (0 farthest, 255 closest, 256 self) -func Proximity(one, other []byte) (ret int) { - b := (MaxPO-1)/8 + 1 - if b > len(one) { - b = len(one) - } - m := 8 - for i := 0; i < b; i++ { - oxo := one[i] ^ other[i] - for j := 0; j < m; j++ { - if (oxo>>uint8(7-j))&0x01 != 0 { - return i*8 + j - } - } - } - return MaxPO -} +// Proximity is the same as chunk.Proximity for backward compatibility. +var Proximity = chunk.Proximity -var ZeroAddr = Address(common.Hash{}.Bytes()) +// ZeroAddr is the same as chunk.ZeroAddr for backward compatibility. +var ZeroAddr = chunk.ZeroAddr func MakeHashFunc(hash string) SwarmHasher { switch hash { @@ -80,7 +56,7 @@ func MakeHashFunc(hash string) SwarmHasher { return func() SwarmHash { hasher := sha3.NewLegacyKeccak256 hasherSize := hasher().Size() - segmentCount := ch.DefaultSize / hasherSize + segmentCount := chunk.DefaultSize / hasherSize pool := bmt.NewTreePool(hasher, segmentCount, bmt.PoolSize) return bmt.New(pool) } @@ -88,33 +64,6 @@ func MakeHashFunc(hash string) SwarmHasher { return nil } -func (a Address) Hex() string { - return fmt.Sprintf("%064x", []byte(a[:])) -} - -func (a Address) Log() string { - if len(a[:]) < 8 { - return fmt.Sprintf("%x", []byte(a[:])) - } - return fmt.Sprintf("%016x", []byte(a[:8])) -} - -func (a Address) String() string { - return fmt.Sprintf("%064x", []byte(a)) -} - -func (a Address) MarshalJSON() (out []byte, err error) { - return []byte(`"` + a.String() + `"`), nil -} - -func (a *Address) UnmarshalJSON(value []byte) error { - s := string(value) - *a = make([]byte, 32) - h := common.Hex2Bytes(s[1 : len(s)-1]) - copy(*a, h) - return nil -} - type AddressCollection []Address func NewAddressCollection(l int) AddressCollection { @@ -133,38 +82,11 @@ func (c AddressCollection) Swap(i, j int) { c[i], c[j] = c[j], c[i] } -// Chunk interface implemented by context.Contexts and data chunks -type Chunk interface { - Address() Address - Data() []byte -} +// Chunk is an alias for chunk.Chunk for backward compatibility. +type Chunk = chunk.Chunk -type chunk struct { - addr Address - sdata []byte - span int64 -} - -func NewChunk(addr Address, data []byte) *chunk { - return &chunk{ - addr: addr, - sdata: data, - span: -1, - } -} - -func (c *chunk) Address() Address { - return c.addr -} - -func (c *chunk) Data() []byte { - return c.sdata -} - -// String() for pretty printing -func (self *chunk) String() string { - return fmt.Sprintf("Address: %v TreeSize: %v Chunksize: %v", self.addr.Log(), self.span, len(self.sdata)) -} +// NewChunk is the same as chunk.NewChunk for backward compatibility. +var NewChunk = chunk.NewChunk func GenerateRandomChunk(dataSize int64) Chunk { hasher := MakeHashFunc(DefaultHash)() @@ -274,9 +196,9 @@ func NewContentAddressValidator(hasher SwarmHasher) *ContentAddressValidator { } // Validate that the given key is a valid content address for the given data -func (v *ContentAddressValidator) Validate(chunk Chunk) bool { - data := chunk.Data() - if l := len(data); l < 9 || l > ch.DefaultSize+8 { +func (v *ContentAddressValidator) Validate(ch Chunk) bool { + data := ch.Data() + if l := len(data); l < 9 || l > chunk.DefaultSize+8 { // log.Error("invalid chunk size", "chunk", addr.Hex(), "size", l) return false } @@ -286,7 +208,7 @@ func (v *ContentAddressValidator) Validate(chunk Chunk) bool { hasher.Write(data[8:]) hash := hasher.Sum(nil) - return bytes.Equal(hash, chunk.Address()) + return bytes.Equal(hash, ch.Address()) } type ChunkStore interface { diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/swarm.go b/vendor/github.com/ethereum/go-ethereum/swarm/swarm.go index 3ab98b3a..61813e23 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/swarm.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/swarm.go @@ -36,7 +36,6 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/protocols" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" @@ -171,10 +170,7 @@ func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err e self.accountingMetrics = protocols.SetupAccountingMetrics(10*time.Second, filepath.Join(config.Path, "metrics.db")) } - var nodeID enode.ID - if err := nodeID.UnmarshalText([]byte(config.NodeID)); err != nil { - return nil, err - } + nodeID := config.Enode.ID() syncing := stream.SyncingAutoSubscribe if !config.SyncEnabled || config.LightNodeEnabled { @@ -426,6 +422,7 @@ func (s *Swarm) Start(srv *p2p.Server) error { func (s *Swarm) Stop() error { if s.tracerClose != nil { err := s.tracerClose.Close() + tracing.FinishSpans() if err != nil { return err } @@ -507,7 +504,7 @@ func (s *Swarm) APIs() []rpc.API { }, { Namespace: "swarmfs", - Version: fuse.Swarmfs_Version, + Version: fuse.SwarmFSVersion, Service: s.sfs, Public: false, }, @@ -521,6 +518,8 @@ func (s *Swarm) APIs() []rpc.API { apis = append(apis, s.bzz.APIs()...) + apis = append(apis, s.streamer.APIs()...) + if s.ps != nil { apis = append(apis, s.ps.APIs()...) } diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/swarm_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/swarm_test.go index d85eb911..2a5b2851 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/swarm_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/swarm_test.go @@ -170,8 +170,12 @@ func TestNewSwarm(t *testing.T) { if err != nil { t.Fatal(err) } + nodekey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } - config.Init(privkey) + config.Init(privkey, nodekey) if tc.configure != nil { tc.configure(config) @@ -307,8 +311,12 @@ func TestLocalStoreAndRetrieve(t *testing.T) { if err != nil { t.Fatal(err) } + nodekey, err := crypto.GenerateKey() + if err != nil { + t.Fatal(err) + } - config.Init(privkey) + config.Init(privkey, nodekey) swarm, err := NewSwarm(config, nil) if err != nil { diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/config.go b/vendor/github.com/ethereum/go-ethereum/swarm/testutil/norace.go similarity index 62% rename from vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/config.go rename to vendor/github.com/ethereum/go-ethereum/swarm/testutil/norace.go index fcc23070..bc652184 100644 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/config.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/testutil/norace.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,14 +14,13 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package whisperv5 +// +build !race -type Config struct { - MaxMessageSize uint32 `toml:",omitempty"` - MinimumAcceptedPOW float64 `toml:",omitempty"` -} +package testutil -var DefaultConfig = Config{ - MaxMessageSize: DefaultMaxMessageSize, - MinimumAcceptedPOW: DefaultMinimumPoW, -} +// RaceEnabled is true when -race flag is provided to the go tool. This const +// might be used in tests to skip some cases as the race detector may increase +// memory usage 5-10x and execution time by 2-20x. That might causes problems +// on Travis. Please, use this flag sparingly and keep your unit tests +// as light on resources as possible. +const RaceEnabled = false diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/race_test.go b/vendor/github.com/ethereum/go-ethereum/swarm/testutil/race.go similarity index 83% rename from vendor/github.com/ethereum/go-ethereum/swarm/network/stream/race_test.go rename to vendor/github.com/ethereum/go-ethereum/swarm/testutil/race.go index 8aed3542..08aa279a 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/network/stream/race_test.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/testutil/race.go @@ -16,8 +16,8 @@ // +build race -package stream +package testutil -// Reduce the scope of some tests when running with race detector, -// as it raises the memory consumption significantly. -const raceTest = true +// RaceEnabled is true when -race flag is provided to the go tool. +// See norace.go for more. +const RaceEnabled = true diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/tracing/tracing.go b/vendor/github.com/ethereum/go-ethereum/swarm/tracing/tracing.go index f95fa41b..55875464 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/tracing/tracing.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/tracing/tracing.go @@ -1,21 +1,39 @@ package tracing import ( + "context" "io" "os" "strings" + "sync" "time" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/swarm/spancontext" + + opentracing "github.com/opentracing/opentracing-go" jaeger "github.com/uber/jaeger-client-go" jaegercfg "github.com/uber/jaeger-client-go/config" cli "gopkg.in/urfave/cli.v1" ) -var Enabled bool = false +var ( + // Enabled turns tracing on for the current swarm instance + Enabled bool = false + store = spanStore{} +) -// TracingEnabledFlag is the CLI flag name to use to enable trace collections. -const TracingEnabledFlag = "tracing" +const ( + // TracingEnabledFlag is the CLI flag name to use to enable trace collections. + TracingEnabledFlag = "tracing" + + // StoreLabelId is the context value key of the name of the span to be saved + StoreLabelId = "span_save_id" + + // StoreLabelMeta is the context value key that together with StoreLabelId constitutes the retrieval key for saved spans in the span store + // StartSaveSpan and ShiftSpanByKey + StoreLabelMeta = "span_save_meta" +) var ( Closer io.Closer @@ -100,3 +118,56 @@ func initTracer(endpoint, svc string) (closer io.Closer) { return closer } + +// spanStore holds saved spans +type spanStore struct { + spans sync.Map +} + +// StartSaveSpan stores the span specified in the passed context for later retrieval +// The span object but be context value on the key StoreLabelId. +// It will be stored under the the following string key context.Value(StoreLabelId)|.|context.Value(StoreLabelMeta) +func StartSaveSpan(ctx context.Context) context.Context { + if !Enabled { + return ctx + } + traceId := ctx.Value(StoreLabelId) + + if traceId != nil { + traceStr := traceId.(string) + var sp opentracing.Span + ctx, sp = spancontext.StartSpan( + ctx, + traceStr, + ) + traceMeta := ctx.Value(StoreLabelMeta) + if traceMeta != nil { + traceStr = traceStr + "." + traceMeta.(string) + } + store.spans.Store(traceStr, sp) + } + return ctx +} + +// ShiftSpanByKey retrieves the span stored under the key of the string given as argument +// The span is then deleted from the store +func ShiftSpanByKey(k string) opentracing.Span { + if !Enabled { + return nil + } + span, spanOk := store.spans.Load(k) + if !spanOk { + return nil + } + store.spans.Delete(k) + return span.(opentracing.Span) +} + +// FinishSpans calls `Finish()` on all stored spans +// It should be called on instance shutdown +func FinishSpans() { + store.spans.Range(func(_, v interface{}) bool { + v.(opentracing.Span).Finish() + return true + }) +} diff --git a/vendor/github.com/ethereum/go-ethereum/swarm/version/version.go b/vendor/github.com/ethereum/go-ethereum/swarm/version/version.go index 820aec2c..ff54bdf1 100644 --- a/vendor/github.com/ethereum/go-ethereum/swarm/version/version.go +++ b/vendor/github.com/ethereum/go-ethereum/swarm/version/version.go @@ -21,10 +21,10 @@ import ( ) const ( - VersionMajor = 0 // Major version component of the current release - VersionMinor = 3 // Minor version component of the current release - VersionPatch = 11 // Patch version component of the current release - VersionMeta = "stable" // Version metadata to append to the version string + VersionMajor = 0 // Major version component of the current release + VersionMinor = 3 // Minor version component of the current release + VersionPatch = 12 // Patch version component of the current release + VersionMeta = "unstable" // Version metadata to append to the version string ) // Version holds the textual version string. diff --git a/vendor/github.com/ethereum/go-ethereum/tests/block_test_util.go b/vendor/github.com/ethereum/go-ethereum/tests/block_test_util.go index 9fa69bf4..d40a3726 100644 --- a/vendor/github.com/ethereum/go-ethereum/tests/block_test_util.go +++ b/vendor/github.com/ethereum/go-ethereum/tests/block_test_util.go @@ -30,10 +30,10 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -101,7 +101,7 @@ func (t *BlockTest) Run() error { } // import pre accounts & construct test genesis block & state root - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gblock, err := t.genesis(config).Commit(db) if err != nil { return err diff --git a/vendor/github.com/ethereum/go-ethereum/tests/state_test_util.go b/vendor/github.com/ethereum/go-ethereum/tests/state_test_util.go index 43628419..0b78f26e 100644 --- a/vendor/github.com/ethereum/go-ethereum/tests/state_test_util.go +++ b/vendor/github.com/ethereum/go-ethereum/tests/state_test_util.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -126,7 +127,7 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config) (*state.StateD return nil, UnsupportedForkError{subtest.Fork} } block := t.genesis(config).ToBlock(nil) - statedb := MakePreState(ethdb.NewMemDatabase(), t.json.Pre) + statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) post := t.json.Post[subtest.Fork][subtest.Index] msg, err := t.json.Tx.toMessage(post) diff --git a/vendor/github.com/ethereum/go-ethereum/tests/vm_test_util.go b/vendor/github.com/ethereum/go-ethereum/tests/vm_test_util.go index cb81c5b9..91566c47 100644 --- a/vendor/github.com/ethereum/go-ethereum/tests/vm_test_util.go +++ b/vendor/github.com/ethereum/go-ethereum/tests/vm_test_util.go @@ -26,10 +26,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -79,7 +79,7 @@ type vmExecMarshaling struct { } func (t *VMTest) Run(vmconfig vm.Config) error { - statedb := MakePreState(ethdb.NewMemDatabase(), t.json.Pre) + statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) ret, gasRemaining, err := t.exec(statedb, vmconfig) if t.json.GasRemaining == nil { diff --git a/vendor/github.com/ethereum/go-ethereum/trie/database.go b/vendor/github.com/ethereum/go-ethereum/trie/database.go index 739a98ad..3bbcb6ad 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/database.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/database.go @@ -17,6 +17,7 @@ package trie import ( + "encoding/binary" "fmt" "io" "sync" @@ -55,20 +56,16 @@ var secureKeyPrefix = []byte("secure-key-") // secureKeyLength is the length of the above prefix + 32byte hash. const secureKeyLength = 11 + 32 -// DatabaseReader wraps the Get and Has method of a backing store for the trie. -type DatabaseReader interface { - // Get retrieves the value associated with key from the database. - Get(key []byte) (value []byte, err error) - - // Has retrieves whether a key is present in the database. - Has(key []byte) (bool, error) -} - // Database is an intermediate write layer between the trie data structures and // the disk database. The aim is to accumulate trie writes in-memory and only // periodically flush a couple tries to disk, garbage collecting the remainder. +// +// Note, the trie Database is **not** thread safe in its mutations, but it **is** +// thread safe in providing individual, independent node access. The rationale +// behind this split design is to provide read access to RPC handlers and sync +// servers even while the trie is executing expensive garbage collection. type Database struct { - diskdb ethdb.Database // Persistent storage for matured trie nodes + diskdb ethdb.KeyValueStore // Persistent storage for matured trie nodes cleans *bigcache.BigCache // GC friendly memory cache of clean node RLPs dirties map[common.Hash]*cachedNode // Data and references relationships of dirty nodes @@ -163,11 +160,11 @@ func (n *cachedNode) rlp() []byte { // obj returns the decoded and expanded trie node, either directly from the cache, // or by regenerating it from the rlp encoded blob. -func (n *cachedNode) obj(hash common.Hash, cachegen uint16) node { +func (n *cachedNode) obj(hash common.Hash) node { if node, ok := n.node.(rawNode); ok { - return mustDecodeNode(hash[:], node, cachegen) + return mustDecodeNode(hash[:], node) } - return expandNode(hash[:], n.node, cachegen) + return expandNode(hash[:], n.node) } // childs returns all the tracked children of this node, both the implicit ones @@ -232,16 +229,15 @@ func simplifyNode(n node) node { // expandNode traverses the node hierarchy of a collapsed storage node and converts // all fields and keys into expanded memory form. -func expandNode(hash hashNode, n node, cachegen uint16) node { +func expandNode(hash hashNode, n node) node { switch n := n.(type) { case *rawShortNode: // Short nodes need key and child expansion return &shortNode{ Key: compactToHex(n.Key), - Val: expandNode(nil, n.Val, cachegen), + Val: expandNode(nil, n.Val), flags: nodeFlag{ hash: hash, - gen: cachegen, }, } @@ -250,12 +246,11 @@ func expandNode(hash hashNode, n node, cachegen uint16) node { node := &fullNode{ flags: nodeFlag{ hash: hash, - gen: cachegen, }, } for i := 0; i < len(node.Children); i++ { if n[i] != nil { - node.Children[i] = expandNode(nil, n[i], cachegen) + node.Children[i] = expandNode(nil, n[i]) } } return node @@ -268,17 +263,30 @@ func expandNode(hash hashNode, n node, cachegen uint16) node { } } +// trienodeHasher is a struct to be used with BigCache, which uses a Hasher to +// determine which shard to place an entry into. It's not a cryptographic hash, +// just to provide a bit of anti-collision (default is FNV64a). +// +// Since trie keys are already hashes, we can just use the key directly to +// map shard id. +type trienodeHasher struct{} + +// Sum64 implements the bigcache.Hasher interface. +func (t trienodeHasher) Sum64(key string) uint64 { + return binary.BigEndian.Uint64([]byte(key)) +} + // NewDatabase creates a new trie database to store ephemeral trie content before // its written out to disk or garbage collected. No read cache is created, so all // data retrievals will hit the underlying disk database. -func NewDatabase(diskdb ethdb.Database) *Database { +func NewDatabase(diskdb ethdb.KeyValueStore) *Database { return NewDatabaseWithCache(diskdb, 0) } // NewDatabaseWithCache creates a new trie database to store ephemeral trie content // before its written out to disk or garbage collected. It also acts as a read cache // for nodes loaded from disk. -func NewDatabaseWithCache(diskdb ethdb.Database, cache int) *Database { +func NewDatabaseWithCache(diskdb ethdb.KeyValueStore, cache int) *Database { var cleans *bigcache.BigCache if cache > 0 { cleans, _ = bigcache.NewBigCache(bigcache.Config{ @@ -287,6 +295,7 @@ func NewDatabaseWithCache(diskdb ethdb.Database, cache int) *Database { MaxEntriesInWindow: cache * 1024, MaxEntrySize: 512, HardMaxCacheSize: cache, + Hasher: trienodeHasher{}, }) } return &Database{ @@ -298,7 +307,7 @@ func NewDatabaseWithCache(diskdb ethdb.Database, cache int) *Database { } // DiskDB retrieves the persistent storage backing the trie database. -func (db *Database) DiskDB() DatabaseReader { +func (db *Database) DiskDB() ethdb.Reader { return db.diskdb } @@ -358,13 +367,13 @@ func (db *Database) insertPreimage(hash common.Hash, preimage []byte) { // node retrieves a cached trie node from memory, or returns nil if none can be // found in the memory cache. -func (db *Database) node(hash common.Hash, cachegen uint16) node { +func (db *Database) node(hash common.Hash) node { // Retrieve the node from the clean cache if available if db.cleans != nil { if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil { memcacheCleanHitMeter.Mark(1) memcacheCleanReadMeter.Mark(int64(len(enc))) - return mustDecodeNode(hash[:], enc, cachegen) + return mustDecodeNode(hash[:], enc) } } // Retrieve the node from the dirty cache if available @@ -373,7 +382,7 @@ func (db *Database) node(hash common.Hash, cachegen uint16) node { db.lock.RUnlock() if dirty != nil { - return dirty.obj(hash, cachegen) + return dirty.obj(hash) } // Content unavailable in memory, attempt to retrieve from disk enc, err := db.diskdb.Get(hash[:]) @@ -385,7 +394,7 @@ func (db *Database) node(hash common.Hash, cachegen uint16) node { memcacheCleanMissMeter.Mark(1) memcacheCleanWriteMeter.Mark(int64(len(enc))) } - return mustDecodeNode(hash[:], enc, cachegen) + return mustDecodeNode(hash[:], enc) } // Node retrieves an encoded cached trie node from memory. If it cannot be found @@ -461,8 +470,8 @@ func (db *Database) Nodes() []common.Hash { // Reference adds a new reference from a parent node to a child node. func (db *Database) Reference(child common.Hash, parent common.Hash) { - db.lock.RLock() - defer db.lock.RUnlock() + db.lock.Lock() + defer db.lock.Unlock() db.reference(child, parent) } @@ -557,13 +566,14 @@ func (db *Database) dereference(child common.Hash, parent common.Hash) { // Cap iteratively flushes old but still referenced trie nodes until the total // memory usage goes below the given threshold. +// +// Note, this method is a non-synchronized mutator. It is unsafe to call this +// concurrently with other mutators. func (db *Database) Cap(limit common.StorageSize) error { // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured // by only uncaching existing data when the database write finalizes. - db.lock.RLock() - nodes, storage, start := len(db.dirties), db.dirtiesSize, time.Now() batch := db.diskdb.NewBatch() @@ -579,12 +589,10 @@ func (db *Database) Cap(limit common.StorageSize) error { for hash, preimage := range db.preimages { if err := batch.Put(db.secureKey(hash[:]), preimage); err != nil { log.Error("Failed to commit preimage from trie database", "err", err) - db.lock.RUnlock() return err } if batch.ValueSize() > ethdb.IdealBatchSize { if err := batch.Write(); err != nil { - db.lock.RUnlock() return err } batch.Reset() @@ -597,14 +605,12 @@ func (db *Database) Cap(limit common.StorageSize) error { // Fetch the oldest referenced node and push into the batch node := db.dirties[oldest] if err := batch.Put(oldest[:], node.rlp()); err != nil { - db.lock.RUnlock() return err } // If we exceeded the ideal batch size, commit and reset if batch.ValueSize() >= ethdb.IdealBatchSize { if err := batch.Write(); err != nil { log.Error("Failed to write flush list to disk", "err", err) - db.lock.RUnlock() return err } batch.Reset() @@ -619,11 +625,8 @@ func (db *Database) Cap(limit common.StorageSize) error { // Flush out any remainder data from the last batch if err := batch.Write(); err != nil { log.Error("Failed to write flush list to disk", "err", err) - db.lock.RUnlock() return err } - db.lock.RUnlock() - // Write successful, clear out the flushed data db.lock.Lock() defer db.lock.Unlock() @@ -657,16 +660,16 @@ func (db *Database) Cap(limit common.StorageSize) error { } // Commit iterates over all the children of a particular node, writes them out -// to disk, forcefully tearing down all references in both directions. +// to disk, forcefully tearing down all references in both directions. As a side +// effect, all pre-images accumulated up to this point are also written. // -// As a side effect, all pre-images accumulated up to this point are also written. +// Note, this method is a non-synchronized mutator. It is unsafe to call this +// concurrently with other mutators. func (db *Database) Commit(node common.Hash, report bool) error { // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured // by only uncaching existing data when the database write finalizes. - db.lock.RLock() - start := time.Now() batch := db.diskdb.NewBatch() @@ -674,9 +677,9 @@ func (db *Database) Commit(node common.Hash, report bool) error { for hash, preimage := range db.preimages { if err := batch.Put(db.secureKey(hash[:]), preimage); err != nil { log.Error("Failed to commit preimage from trie database", "err", err) - db.lock.RUnlock() return err } + // If the batch is too large, flush to disk if batch.ValueSize() > ethdb.IdealBatchSize { if err := batch.Write(); err != nil { return err @@ -684,30 +687,37 @@ func (db *Database) Commit(node common.Hash, report bool) error { batch.Reset() } } + // Since we're going to replay trie node writes into the clean cache, flush out + // any batched pre-images before continuing. + if err := batch.Write(); err != nil { + return err + } + batch.Reset() + // Move the trie itself into the batch, flushing if enough data is accumulated nodes, storage := len(db.dirties), db.dirtiesSize - if err := db.commit(node, batch); err != nil { + + uncacher := &cleaner{db} + if err := db.commit(node, batch, uncacher); err != nil { log.Error("Failed to commit trie from trie database", "err", err) - db.lock.RUnlock() return err } - // Write batch ready, unlock for readers during persistence + // Trie mostly committed to disk, flush any batch leftovers if err := batch.Write(); err != nil { log.Error("Failed to write trie to disk", "err", err) - db.lock.RUnlock() return err } - db.lock.RUnlock() - - // Write successful, clear out the flushed data + // Uncache any leftovers in the last batch db.lock.Lock() defer db.lock.Unlock() + batch.Replay(uncacher) + batch.Reset() + + // Reset the storage counters and bumpd metrics db.preimages = make(map[common.Hash][]byte) db.preimagesSize = 0 - db.uncache(node) - memcacheCommitTimeTimer.Update(time.Since(start)) memcacheCommitSizeMeter.Mark(int64(storage - db.dirtiesSize)) memcacheCommitNodesMeter.Mark(int64(nodes - len(db.dirties))) @@ -727,14 +737,14 @@ func (db *Database) Commit(node common.Hash, report bool) error { } // commit is the private locked version of Commit. -func (db *Database) commit(hash common.Hash, batch ethdb.Batch) error { +func (db *Database) commit(hash common.Hash, batch ethdb.Batch, uncacher *cleaner) error { // If the node does not exist, it's a previously committed node node, ok := db.dirties[hash] if !ok { return nil } for _, child := range node.childs() { - if err := db.commit(child, batch); err != nil { + if err := db.commit(child, batch, uncacher); err != nil { return err } } @@ -746,39 +756,58 @@ func (db *Database) commit(hash common.Hash, batch ethdb.Batch) error { if err := batch.Write(); err != nil { return err } + db.lock.Lock() + batch.Replay(uncacher) batch.Reset() + db.lock.Unlock() } return nil } -// uncache is the post-processing step of a commit operation where the already -// persisted trie is removed from the cache. The reason behind the two-phase -// commit is to ensure consistent data availability while moving from memory -// to disk. -func (db *Database) uncache(hash common.Hash) { +// cleaner is a database batch replayer that takes a batch of write operations +// and cleans up the trie database from anything written to disk. +type cleaner struct { + db *Database +} + +// Put reacts to database writes and implements dirty data uncaching. This is the +// post-processing step of a commit operation where the already persisted trie is +// removed from the dirty cache and moved into the clean cache. The reason behind +// the two-phase commit is to ensure ensure data availability while moving from +// memory to disk. +func (c *cleaner) Put(key []byte, rlp []byte) error { + hash := common.BytesToHash(key) + // If the node does not exist, we're done on this path - node, ok := db.dirties[hash] + node, ok := c.db.dirties[hash] if !ok { - return + return nil } // Node still exists, remove it from the flush-list switch hash { - case db.oldest: - db.oldest = node.flushNext - db.dirties[node.flushNext].flushPrev = common.Hash{} - case db.newest: - db.newest = node.flushPrev - db.dirties[node.flushPrev].flushNext = common.Hash{} + case c.db.oldest: + c.db.oldest = node.flushNext + c.db.dirties[node.flushNext].flushPrev = common.Hash{} + case c.db.newest: + c.db.newest = node.flushPrev + c.db.dirties[node.flushPrev].flushNext = common.Hash{} default: - db.dirties[node.flushPrev].flushNext = node.flushNext - db.dirties[node.flushNext].flushPrev = node.flushPrev + c.db.dirties[node.flushPrev].flushNext = node.flushNext + c.db.dirties[node.flushNext].flushPrev = node.flushPrev } - // Uncache the node's subtries and remove the node itself too - for _, child := range node.childs() { - db.uncache(child) + // Remove the node from the dirty cache + delete(c.db.dirties, hash) + c.db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + + // Move the flushed node into the clean cache to prevent insta-reloads + if c.db.cleans != nil { + c.db.cleans.Set(string(hash[:]), rlp) } - delete(db.dirties, hash) - db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + return nil +} + +func (c *cleaner) Delete(key []byte) error { + panic("Not implemented") } // Size returns the current storage size of the memory cache in front of the @@ -808,7 +837,7 @@ func (db *Database) verifyIntegrity() { db.accumulate(child, reachable) } // Find any unreachable but cached nodes - unreachable := []string{} + var unreachable []string for hash, node := range db.dirties { if _, ok := reachable[hash]; !ok { unreachable = append(unreachable, fmt.Sprintf("%x: {Node: %v, Parents: %d, Prev: %x, Next: %x}", diff --git a/vendor/github.com/ethereum/go-ethereum/trie/hasher.go b/vendor/github.com/ethereum/go-ethereum/trie/hasher.go index 9d6756b6..54f6a9de 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/hasher.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/hasher.go @@ -26,11 +26,9 @@ import ( ) type hasher struct { - tmp sliceBuffer - sha keccakState - cachegen uint16 - cachelimit uint16 - onleaf LeafCallback + tmp sliceBuffer + sha keccakState + onleaf LeafCallback } // keccakState wraps sha3.state. In addition to the usual hash methods, it also supports @@ -62,9 +60,9 @@ var hasherPool = sync.Pool{ }, } -func newHasher(cachegen, cachelimit uint16, onleaf LeafCallback) *hasher { +func newHasher(onleaf LeafCallback) *hasher { h := hasherPool.Get().(*hasher) - h.cachegen, h.cachelimit, h.onleaf = cachegen, cachelimit, onleaf + h.onleaf = onleaf return h } @@ -80,14 +78,13 @@ func (h *hasher) hash(n node, db *Database, force bool) (node, node, error) { if db == nil { return hash, n, nil } - if n.canUnload(h.cachegen, h.cachelimit) { - // Unload the node from cache. All of its subnodes will have a lower or equal - // cache generation number. - cacheUnloadCounter.Inc(1) - return hash, hash, nil - } if !dirty { - return hash, n, nil + switch n.(type) { + case *fullNode, *shortNode: + return hash, hash, nil + default: + return hash, n, nil + } } } // Trie not processed yet or needs storage, walk the children diff --git a/vendor/github.com/ethereum/go-ethereum/trie/iterator.go b/vendor/github.com/ethereum/go-ethereum/trie/iterator.go index 77f16816..da93b2fa 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/iterator.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/iterator.go @@ -180,7 +180,7 @@ func (it *nodeIterator) LeafBlob() []byte { func (it *nodeIterator) LeafProof() [][]byte { if len(it.stack) > 0 { if _, ok := it.stack[len(it.stack)-1].node.(valueNode); ok { - hasher := newHasher(0, 0, nil) + hasher := newHasher(nil) defer returnHasherToPool(hasher) proofs := make([][]byte, 0, len(it.stack)) diff --git a/vendor/github.com/ethereum/go-ethereum/trie/iterator_test.go b/vendor/github.com/ethereum/go-ethereum/trie/iterator_test.go index 4f633b19..88b8103f 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/iterator_test.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/iterator_test.go @@ -23,7 +23,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func TestIterator(t *testing.T) { @@ -120,11 +120,14 @@ func TestNodeIteratorCoverage(t *testing.T) { } } } - for _, key := range db.diskdb.(*ethdb.MemDatabase).Keys() { + it := db.diskdb.NewIterator() + for it.Next() { + key := it.Key() if _, ok := hashes[common.BytesToHash(key)]; !ok { t.Errorf("state entry not reported %x", key) } } + it.Release() } type kvs struct{ k, v string } @@ -289,7 +292,7 @@ func TestIteratorContinueAfterErrorDisk(t *testing.T) { testIteratorContinueA func TestIteratorContinueAfterErrorMemonly(t *testing.T) { testIteratorContinueAfterError(t, true) } func testIteratorContinueAfterError(t *testing.T, memonly bool) { - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) tr, _ := New(common.Hash{}, triedb) @@ -309,7 +312,11 @@ func testIteratorContinueAfterError(t *testing.T, memonly bool) { if memonly { memKeys = triedb.Nodes() } else { - diskKeys = diskdb.Keys() + it := diskdb.NewIterator() + for it.Next() { + diskKeys = append(diskKeys, it.Key()) + } + it.Release() } for i := 0; i < 20; i++ { // Create trie that will load all nodes from DB. @@ -376,7 +383,7 @@ func TestIteratorContinueAfterSeekErrorMemonly(t *testing.T) { func testIteratorContinueAfterSeekError(t *testing.T, memonly bool) { // Commit test trie to db, then remove the node containing "bars". - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) ctr, _ := New(common.Hash{}, triedb) diff --git a/vendor/github.com/ethereum/go-ethereum/trie/node.go b/vendor/github.com/ethereum/go-ethereum/trie/node.go index 1fafb7a5..f4055e77 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/node.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/node.go @@ -30,7 +30,6 @@ var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b type node interface { fstring(string) string cache() (hashNode, bool) - canUnload(cachegen, cachelimit uint16) bool } type ( @@ -71,20 +70,9 @@ func (n *shortNode) copy() *shortNode { copy := *n; return © } // nodeFlag contains caching-related metadata about a node. type nodeFlag struct { hash hashNode // cached hash of the node (may be nil) - gen uint16 // cache generation counter dirty bool // whether the node has changes that must be written to the database } -// canUnload tells whether a node can be unloaded. -func (n *nodeFlag) canUnload(cachegen, cachelimit uint16) bool { - return !n.dirty && cachegen-n.gen >= cachelimit -} - -func (n *fullNode) canUnload(gen, limit uint16) bool { return n.flags.canUnload(gen, limit) } -func (n *shortNode) canUnload(gen, limit uint16) bool { return n.flags.canUnload(gen, limit) } -func (n hashNode) canUnload(uint16, uint16) bool { return false } -func (n valueNode) canUnload(uint16, uint16) bool { return false } - func (n *fullNode) cache() (hashNode, bool) { return n.flags.hash, n.flags.dirty } func (n *shortNode) cache() (hashNode, bool) { return n.flags.hash, n.flags.dirty } func (n hashNode) cache() (hashNode, bool) { return nil, true } @@ -117,8 +105,8 @@ func (n valueNode) fstring(ind string) string { return fmt.Sprintf("%x ", []byte(n)) } -func mustDecodeNode(hash, buf []byte, cachegen uint16) node { - n, err := decodeNode(hash, buf, cachegen) +func mustDecodeNode(hash, buf []byte) node { + n, err := decodeNode(hash, buf) if err != nil { panic(fmt.Sprintf("node %x: %v", hash, err)) } @@ -126,7 +114,7 @@ func mustDecodeNode(hash, buf []byte, cachegen uint16) node { } // decodeNode parses the RLP encoding of a trie node. -func decodeNode(hash, buf []byte, cachegen uint16) (node, error) { +func decodeNode(hash, buf []byte) (node, error) { if len(buf) == 0 { return nil, io.ErrUnexpectedEOF } @@ -136,22 +124,22 @@ func decodeNode(hash, buf []byte, cachegen uint16) (node, error) { } switch c, _ := rlp.CountValues(elems); c { case 2: - n, err := decodeShort(hash, elems, cachegen) + n, err := decodeShort(hash, elems) return n, wrapError(err, "short") case 17: - n, err := decodeFull(hash, elems, cachegen) + n, err := decodeFull(hash, elems) return n, wrapError(err, "full") default: return nil, fmt.Errorf("invalid number of list elements: %v", c) } } -func decodeShort(hash, elems []byte, cachegen uint16) (node, error) { +func decodeShort(hash, elems []byte) (node, error) { kbuf, rest, err := rlp.SplitString(elems) if err != nil { return nil, err } - flag := nodeFlag{hash: hash, gen: cachegen} + flag := nodeFlag{hash: hash} key := compactToHex(kbuf) if hasTerm(key) { // value node @@ -161,17 +149,17 @@ func decodeShort(hash, elems []byte, cachegen uint16) (node, error) { } return &shortNode{key, append(valueNode{}, val...), flag}, nil } - r, _, err := decodeRef(rest, cachegen) + r, _, err := decodeRef(rest) if err != nil { return nil, wrapError(err, "val") } return &shortNode{key, r, flag}, nil } -func decodeFull(hash, elems []byte, cachegen uint16) (*fullNode, error) { - n := &fullNode{flags: nodeFlag{hash: hash, gen: cachegen}} +func decodeFull(hash, elems []byte) (*fullNode, error) { + n := &fullNode{flags: nodeFlag{hash: hash}} for i := 0; i < 16; i++ { - cld, rest, err := decodeRef(elems, cachegen) + cld, rest, err := decodeRef(elems) if err != nil { return n, wrapError(err, fmt.Sprintf("[%d]", i)) } @@ -189,7 +177,7 @@ func decodeFull(hash, elems []byte, cachegen uint16) (*fullNode, error) { const hashLen = len(common.Hash{}) -func decodeRef(buf []byte, cachegen uint16) (node, []byte, error) { +func decodeRef(buf []byte) (node, []byte, error) { kind, val, rest, err := rlp.Split(buf) if err != nil { return nil, buf, err @@ -202,7 +190,7 @@ func decodeRef(buf []byte, cachegen uint16) (node, []byte, error) { err := fmt.Errorf("oversized embedded node (size is %d bytes, want size < %d)", size, hashLen) return nil, buf, err } - n, err := decodeNode(nil, buf, cachegen) + n, err := decodeNode(nil, buf) return n, rest, err case kind == rlp.String && len(val) == 0: // empty node diff --git a/vendor/github.com/ethereum/go-ethereum/trie/node_test.go b/vendor/github.com/ethereum/go-ethereum/trie/node_test.go deleted file mode 100644 index 7ad1ff9e..00000000 --- a/vendor/github.com/ethereum/go-ethereum/trie/node_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package trie - -import "testing" - -func TestCanUnload(t *testing.T) { - tests := []struct { - flag nodeFlag - cachegen, cachelimit uint16 - want bool - }{ - { - flag: nodeFlag{dirty: true, gen: 0}, - want: false, - }, - { - flag: nodeFlag{dirty: false, gen: 0}, - cachegen: 0, cachelimit: 0, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 65534}, - cachegen: 65535, cachelimit: 1, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 65534}, - cachegen: 0, cachelimit: 1, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 1}, - cachegen: 65535, cachelimit: 1, - want: true, - }, - } - - for _, test := range tests { - if got := test.flag.canUnload(test.cachegen, test.cachelimit); got != test.want { - t.Errorf("%+v\n got %t, want %t", test, got, test.want) - } - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/trie/proof.go b/vendor/github.com/ethereum/go-ethereum/trie/proof.go index f90ecd7d..26a41ed2 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/proof.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/proof.go @@ -34,10 +34,10 @@ import ( // If the trie does not contain a value for key, the returned proof contains all // nodes of the longest existing prefix of the key (at least the root node), ending // with the node that proves the absence of the key. -func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Writer) error { // Collect all nodes on the path to key. key = keybytesToHex(key) - nodes := []node{} + var nodes []node tn := t.root for len(key) > 0 && tn != nil { switch n := tn.(type) { @@ -65,7 +65,7 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { panic(fmt.Sprintf("%T: invalid node: %v", tn, tn)) } } - hasher := newHasher(0, 0, nil) + hasher := newHasher(nil) defer returnHasherToPool(hasher) for i, n := range nodes { @@ -97,14 +97,14 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { // If the trie does not contain a value for key, the returned proof contains all // nodes of the longest existing prefix of the key (at least the root node), ending // with the node that proves the absence of the key. -func (t *SecureTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *SecureTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Writer) error { return t.trie.Prove(key, fromLevel, proofDb) } // VerifyProof checks merkle proofs. The given proof must contain the value for // key in a trie with the given root hash. VerifyProof returns an error if the // proof contains invalid trie nodes or the wrong value. -func VerifyProof(rootHash common.Hash, key []byte, proofDb DatabaseReader) (value []byte, nodes int, err error) { +func VerifyProof(rootHash common.Hash, key []byte, proofDb ethdb.Reader) (value []byte, nodes int, err error) { key = keybytesToHex(key) wantHash := rootHash for i := 0; ; i++ { @@ -112,7 +112,7 @@ func VerifyProof(rootHash common.Hash, key []byte, proofDb DatabaseReader) (valu if buf == nil { return nil, i, fmt.Errorf("proof node %d (hash %064x) missing", i, wantHash) } - n, err := decodeNode(wantHash[:], buf, 0) + n, err := decodeNode(wantHash[:], buf) if err != nil { return nil, i, fmt.Errorf("bad proof node %d: %v", i, err) } diff --git a/vendor/github.com/ethereum/go-ethereum/trie/proof_test.go b/vendor/github.com/ethereum/go-ethereum/trie/proof_test.go index 996f8747..c488f342 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/proof_test.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/proof_test.go @@ -25,7 +25,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func init() { @@ -34,18 +34,18 @@ func init() { // makeProvers creates Merkle trie provers based on different implementations to // test all variations. -func makeProvers(trie *Trie) []func(key []byte) *ethdb.MemDatabase { - var provers []func(key []byte) *ethdb.MemDatabase +func makeProvers(trie *Trie) []func(key []byte) *memorydb.Database { + var provers []func(key []byte) *memorydb.Database // Create a direct trie based Merkle prover - provers = append(provers, func(key []byte) *ethdb.MemDatabase { - proof := ethdb.NewMemDatabase() + provers = append(provers, func(key []byte) *memorydb.Database { + proof := memorydb.New() trie.Prove(key, 0, proof) return proof }) // Create a leaf iterator based Merkle prover - provers = append(provers, func(key []byte) *ethdb.MemDatabase { - proof := ethdb.NewMemDatabase() + provers = append(provers, func(key []byte) *memorydb.Database { + proof := memorydb.New() if it := NewIterator(trie.NodeIterator(key)); it.Next() && bytes.Equal(key, it.Key) { for _, p := range it.Prove() { proof.Put(crypto.Keccak256(p), p) @@ -106,9 +106,14 @@ func TestBadProof(t *testing.T) { if proof == nil { t.Fatalf("prover %d: nil proof", i) } - key := proof.Keys()[mrand.Intn(proof.Len())] + it := proof.NewIterator() + for i, d := 0, mrand.Intn(proof.Len()); i <= d; i++ { + it.Next() + } + key := it.Key() val, _ := proof.Get(key) proof.Delete(key) + it.Release() mutateByte(val) proof.Put(crypto.Keccak256(val), val) @@ -127,7 +132,7 @@ func TestMissingKeyProof(t *testing.T) { updateString(trie, "k", "v") for i, key := range []string{"a", "j", "l", "z"} { - proof := ethdb.NewMemDatabase() + proof := memorydb.New() trie.Prove([]byte(key), 0, proof) if proof.Len() != 1 { @@ -164,8 +169,8 @@ func BenchmarkProve(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { kv := vals[keys[i%len(keys)]] - proofs := ethdb.NewMemDatabase() - if trie.Prove(kv.k, 0, proofs); len(proofs.Keys()) == 0 { + proofs := memorydb.New() + if trie.Prove(kv.k, 0, proofs); proofs.Len() == 0 { b.Fatalf("zero length proof for %x", kv.k) } } @@ -175,10 +180,10 @@ func BenchmarkVerifyProof(b *testing.B) { trie, vals := randomTrie(100) root := trie.Hash() var keys []string - var proofs []*ethdb.MemDatabase + var proofs []*memorydb.Database for k := range vals { keys = append(keys, k) - proof := ethdb.NewMemDatabase() + proof := memorydb.New() trie.Prove([]byte(k), 0, proof) proofs = append(proofs, proof) } diff --git a/vendor/github.com/ethereum/go-ethereum/trie/secure_trie.go b/vendor/github.com/ethereum/go-ethereum/trie/secure_trie.go index 6a50cfd5..fbc591ed 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/secure_trie.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/secure_trie.go @@ -51,7 +51,7 @@ type SecureTrie struct { // Loaded nodes are kept around until their 'cache generation' expires. // A new cache generation is created by each call to Commit. // cachelimit sets the number of past cache generations to keep. -func NewSecure(root common.Hash, db *Database, cachelimit uint16) (*SecureTrie, error) { +func NewSecure(root common.Hash, db *Database) (*SecureTrie, error) { if db == nil { panic("trie.NewSecure called without a database") } @@ -59,7 +59,6 @@ func NewSecure(root common.Hash, db *Database, cachelimit uint16) (*SecureTrie, if err != nil { return nil, err } - trie.SetCacheLimit(cachelimit) return &SecureTrie{trie: *trie}, nil } @@ -161,12 +160,6 @@ func (t *SecureTrie) Hash() common.Hash { return t.trie.Hash() } -// Root returns the root hash of SecureTrie. -// Deprecated: use Hash instead. -func (t *SecureTrie) Root() []byte { - return t.trie.Root() -} - // Copy returns a copy of SecureTrie. func (t *SecureTrie) Copy() *SecureTrie { cpy := *t @@ -183,7 +176,7 @@ func (t *SecureTrie) NodeIterator(start []byte) NodeIterator { // The caller must not hold onto the return value because it will become // invalid on the next call to hashKey or secKey. func (t *SecureTrie) hashKey(key []byte) []byte { - h := newHasher(0, 0, nil) + h := newHasher(nil) h.sha.Reset() h.sha.Write(key) buf := h.sha.Sum(t.hashKeyBuf[:0]) diff --git a/vendor/github.com/ethereum/go-ethereum/trie/secure_trie_test.go b/vendor/github.com/ethereum/go-ethereum/trie/secure_trie_test.go index d16d9996..fb6c38ee 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/secure_trie_test.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/secure_trie_test.go @@ -24,20 +24,19 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func newEmptySecure() *SecureTrie { - trie, _ := NewSecure(common.Hash{}, NewDatabase(ethdb.NewMemDatabase()), 0) + trie, _ := NewSecure(common.Hash{}, NewDatabase(memorydb.New())) return trie } // makeTestSecureTrie creates a large enough secure trie for testing. func makeTestSecureTrie() (*Database, *SecureTrie, map[string][]byte) { // Create an empty trie - triedb := NewDatabase(ethdb.NewMemDatabase()) - - trie, _ := NewSecure(common.Hash{}, triedb, 0) + triedb := NewDatabase(memorydb.New()) + trie, _ := NewSecure(common.Hash{}, triedb) // Fill it with some arbitrary data content := make(map[string][]byte) diff --git a/vendor/github.com/ethereum/go-ethereum/trie/sync.go b/vendor/github.com/ethereum/go-ethereum/trie/sync.go index 67dff5a8..85f1b0f8 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/sync.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/sync.go @@ -72,14 +72,14 @@ func newSyncMemBatch() *syncMemBatch { // unknown trie hashes to retrieve, accepts node data associated with said hashes // and reconstructs the trie step by step until all is done. type Sync struct { - database DatabaseReader // Persistent database to check for existing entries + database ethdb.Reader // Persistent database to check for existing entries membatch *syncMemBatch // Memory buffer to avoid frequent database writes requests map[common.Hash]*request // Pending requests pertaining to a key hash queue *prque.Prque // Priority queue with the pending requests } // NewSync creates a new trie data download scheduler. -func NewSync(root common.Hash, database DatabaseReader, callback LeafCallback) *Sync { +func NewSync(root common.Hash, database ethdb.Reader, callback LeafCallback) *Sync { ts := &Sync{ database: database, membatch: newSyncMemBatch(), @@ -101,7 +101,7 @@ func (s *Sync) AddSubTrie(root common.Hash, depth int, parent common.Hash, callb } key := root.Bytes() blob, _ := s.database.Get(key) - if local, err := decodeNode(key, blob, 0); local != nil && err == nil { + if local, err := decodeNode(key, blob); local != nil && err == nil { return } // Assemble the new sub-trie sync request @@ -157,7 +157,7 @@ func (s *Sync) AddRawEntry(hash common.Hash, depth int, parent common.Hash) { // Missing retrieves the known missing nodes from the trie for retrieval. func (s *Sync) Missing(max int) []common.Hash { - requests := []common.Hash{} + var requests []common.Hash for !s.queue.Empty() && (max == 0 || len(requests) < max) { requests = append(requests, s.queue.PopItem().(common.Hash)) } @@ -187,7 +187,7 @@ func (s *Sync) Process(results []SyncResult) (bool, int, error) { continue } // Decode the node data content and update the request - node, err := decodeNode(item.Hash[:], item.Data, 0) + node, err := decodeNode(item.Hash[:], item.Data) if err != nil { return committed, i, err } @@ -213,7 +213,7 @@ func (s *Sync) Process(results []SyncResult) (bool, int, error) { // Commit flushes the data stored in the internal membatch out to persistent // storage, returning the number of items written and any occurred error. -func (s *Sync) Commit(dbw ethdb.Putter) (int, error) { +func (s *Sync) Commit(dbw ethdb.Writer) (int, error) { // Dump the membatch into a database dbw for i, key := range s.membatch.order { if err := dbw.Put(key[:], s.membatch.batch[key]); err != nil { @@ -254,7 +254,7 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { node node depth int } - children := []child{} + var children []child switch node := (object).(type) { case *shortNode: diff --git a/vendor/github.com/ethereum/go-ethereum/trie/sync_test.go b/vendor/github.com/ethereum/go-ethereum/trie/sync_test.go index c76779e5..0d8c29cf 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/sync_test.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/sync_test.go @@ -21,13 +21,13 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) // makeTestTrie create a sample test trie to test node-wise reconstruction. func makeTestTrie() (*Database, *Trie, map[string][]byte) { // Create an empty trie - triedb := NewDatabase(ethdb.NewMemDatabase()) + triedb := NewDatabase(memorydb.New()) trie, _ := New(common.Hash{}, triedb) // Fill it with some arbitrary data @@ -88,13 +88,13 @@ func checkTrieConsistency(db *Database, root common.Hash) error { // Tests that an empty trie is not scheduled for syncing. func TestEmptySync(t *testing.T) { - dbA := NewDatabase(ethdb.NewMemDatabase()) - dbB := NewDatabase(ethdb.NewMemDatabase()) + dbA := NewDatabase(memorydb.New()) + dbB := NewDatabase(memorydb.New()) emptyA, _ := New(common.Hash{}, dbA) emptyB, _ := New(emptyRoot, dbB) for i, trie := range []*Trie{emptyA, emptyB} { - if req := NewSync(trie.Hash(), ethdb.NewMemDatabase(), nil).Missing(1); len(req) != 0 { + if req := NewSync(trie.Hash(), memorydb.New(), nil).Missing(1); len(req) != 0 { t.Errorf("test %d: content requested for empty trie: %v", i, req) } } @@ -110,7 +110,7 @@ func testIterativeSync(t *testing.T, batch int) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) @@ -133,7 +133,7 @@ func testIterativeSync(t *testing.T, batch int) { queue = append(queue[:0], sched.Missing(batch)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that the trie scheduler can correctly reconstruct the state even if only @@ -143,7 +143,7 @@ func TestIterativeDelayedSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) @@ -167,7 +167,7 @@ func TestIterativeDelayedSync(t *testing.T) { queue = append(queue[len(results):], sched.Missing(10000)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that given a root hash, a trie can sync iteratively on a single thread, @@ -181,7 +181,7 @@ func testIterativeRandomSync(t *testing.T, batch int) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) @@ -212,7 +212,7 @@ func testIterativeRandomSync(t *testing.T, batch int) { } } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that the trie scheduler can correctly reconstruct the state even if only @@ -222,7 +222,7 @@ func TestIterativeRandomDelayedSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) @@ -259,7 +259,7 @@ func TestIterativeRandomDelayedSync(t *testing.T) { } } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that a trie sync will not request nodes multiple times, even if they @@ -269,7 +269,7 @@ func TestDuplicateAvoidanceSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) @@ -299,7 +299,7 @@ func TestDuplicateAvoidanceSync(t *testing.T) { queue = append(queue[:0], sched.Missing(0)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that at any point in time during a sync, only complete sub-tries are in @@ -309,11 +309,11 @@ func TestIncompleteSync(t *testing.T) { srcDb, srcTrie, _ := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) sched := NewSync(srcTrie.Hash(), diskdb, nil) - added := []common.Hash{} + var added []common.Hash queue := append([]common.Hash{}, sched.Missing(1)...) for len(queue) > 0 { // Fetch a batch of trie nodes diff --git a/vendor/github.com/ethereum/go-ethereum/trie/trie.go b/vendor/github.com/ethereum/go-ethereum/trie/trie.go index af424d4a..920e331f 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/trie.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/trie.go @@ -24,7 +24,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" ) var ( @@ -35,25 +34,6 @@ var ( emptyState = crypto.Keccak256Hash(nil) ) -var ( - cacheMissCounter = metrics.NewRegisteredCounter("trie/cachemiss", nil) - cacheUnloadCounter = metrics.NewRegisteredCounter("trie/cacheunload", nil) -) - -// CacheMisses retrieves a global counter measuring the number of cache misses -// the trie had since process startup. This isn't useful for anything apart from -// trie debugging purposes. -func CacheMisses() int64 { - return cacheMissCounter.Count() -} - -// CacheUnloads retrieves a global counter measuring the number of cache unloads -// the trie did since process startup. This isn't useful for anything apart from -// trie debugging purposes. -func CacheUnloads() int64 { - return cacheUnloadCounter.Count() -} - // LeafCallback is a callback type invoked when a trie operation reaches a leaf // node. It's used by state sync and commit to allow handling external references // between account and storage tries. @@ -67,23 +47,11 @@ type LeafCallback func(leaf []byte, parent common.Hash) error type Trie struct { db *Database root node - - // Cache generation values. - // cachegen increases by one with each commit operation. - // new nodes are tagged with the current generation and unloaded - // when their generation is older than than cachegen-cachelimit. - cachegen, cachelimit uint16 -} - -// SetCacheLimit sets the number of 'cache generations' to keep. -// A cache generation is created by a call to Commit. -func (t *Trie) SetCacheLimit(l uint16) { - t.cachelimit = l } // newFlag returns the cache flag value for a newly created node. func (t *Trie) newFlag() nodeFlag { - return nodeFlag{dirty: true, gen: t.cachegen} + return nodeFlag{dirty: true} } // New creates a trie with an existing root node from db. @@ -152,14 +120,12 @@ func (t *Trie) tryGet(origNode node, key []byte, pos int) (value []byte, newnode if err == nil && didResolve { n = n.copy() n.Val = newnode - n.flags.gen = t.cachegen } return value, n, didResolve, err case *fullNode: value, newnode, didResolve, err = t.tryGet(n.Children[key[pos]], key, pos+1) if err == nil && didResolve { n = n.copy() - n.flags.gen = t.cachegen n.Children[key[pos]] = newnode } return value, n, didResolve, err @@ -428,19 +394,13 @@ func (t *Trie) resolve(n node, prefix []byte) (node, error) { } func (t *Trie) resolveHash(n hashNode, prefix []byte) (node, error) { - cacheMissCounter.Inc(1) - hash := common.BytesToHash(n) - if node := t.db.node(hash, t.cachegen); node != nil { + if node := t.db.node(hash); node != nil { return node, nil } return nil, &MissingNodeError{NodeHash: hash, Path: prefix} } -// Root returns the root hash of the trie. -// Deprecated: use Hash instead. -func (t *Trie) Root() []byte { return t.Hash().Bytes() } - // Hash returns the root hash of the trie. It does not write to the // database and can be used even if the trie doesn't have one. func (t *Trie) Hash() common.Hash { @@ -460,7 +420,6 @@ func (t *Trie) Commit(onleaf LeafCallback) (root common.Hash, err error) { return common.Hash{}, err } t.root = cached - t.cachegen++ return common.BytesToHash(hash.(hashNode)), nil } @@ -468,7 +427,7 @@ func (t *Trie) hashRoot(db *Database, onleaf LeafCallback) (node, node, error) { if t.root == nil { return hashNode(emptyRoot.Bytes()), nil, nil } - h := newHasher(t.cachegen, t.cachelimit, onleaf) + h := newHasher(onleaf) defer returnHasherToPool(h) return h.hash(t.root, db, true) } diff --git a/vendor/github.com/ethereum/go-ethereum/trie/trie_test.go b/vendor/github.com/ethereum/go-ethereum/trie/trie_test.go index 4d84aa96..ea0b3cbd 100644 --- a/vendor/github.com/ethereum/go-ethereum/trie/trie_test.go +++ b/vendor/github.com/ethereum/go-ethereum/trie/trie_test.go @@ -19,7 +19,6 @@ package trie import ( "bytes" "encoding/binary" - "errors" "fmt" "io/ioutil" "math/big" @@ -33,6 +32,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/leveldb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" "github.com/ethereum/go-ethereum/rlp" ) @@ -43,7 +44,7 @@ func init() { // Used for testing func newEmpty() *Trie { - trie, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + trie, _ := New(common.Hash{}, NewDatabase(memorydb.New())) return trie } @@ -67,7 +68,7 @@ func TestNull(t *testing.T) { } func TestMissingRoot(t *testing.T) { - trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(ethdb.NewMemDatabase())) + trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(memorydb.New())) if trie != nil { t.Error("New returned non-nil trie for invalid root") } @@ -80,7 +81,7 @@ func TestMissingNodeDisk(t *testing.T) { testMissingNode(t, false) } func TestMissingNodeMemonly(t *testing.T) { testMissingNode(t, true) } func testMissingNode(t *testing.T, memonly bool) { - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) trie, _ := New(common.Hash{}, triedb) @@ -317,45 +318,13 @@ func TestLargeValue(t *testing.T) { } type countingDB struct { - ethdb.Database + ethdb.KeyValueStore gets map[string]int } func (db *countingDB) Get(key []byte) ([]byte, error) { db.gets[string(key)]++ - return db.Database.Get(key) -} - -// TestCacheUnload checks that decoded nodes are unloaded after a -// certain number of commit operations. -func TestCacheUnload(t *testing.T) { - // Create test trie with two branches. - trie := newEmpty() - key1 := "---------------------------------" - key2 := "---some other branch" - updateString(trie, key1, "this is the branch of key1.") - updateString(trie, key2, "this is the branch of key2.") - - root, _ := trie.Commit(nil) - trie.db.Commit(root, true) - - // Commit the trie repeatedly and access key1. - // The branch containing it is loaded from DB exactly two times: - // in the 0th and 6th iteration. - diskdb := &countingDB{Database: trie.db.diskdb, gets: make(map[string]int)} - triedb := NewDatabase(diskdb) - trie, _ = New(root, triedb) - trie.SetCacheLimit(5) - for i := 0; i < 12; i++ { - getString(trie, key1) - trie.Commit(nil) - } - // Check that it got loaded two times. - for dbkey, count := range diskdb.gets { - if count != 2 { - t.Errorf("db key %x loaded %d times, want %d times", []byte(dbkey), count, 2) - } - } + return db.KeyValueStore.Get(key) } // randTest performs random trie operations. @@ -377,7 +346,6 @@ const ( opHash opReset opItercheckhash - opCheckCacheInvariant opMax // boundary value, not an actual op ) @@ -412,7 +380,7 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value { } func runRandTest(rt randTest) bool { - triedb := NewDatabase(ethdb.NewMemDatabase()) + triedb := NewDatabase(memorydb.New()) tr, _ := New(common.Hash{}, triedb) values := make(map[string]string) // tracks content of the trie @@ -456,8 +424,6 @@ func runRandTest(rt randTest) bool { if tr.Hash() != checktr.Hash() { rt[i].err = fmt.Errorf("hash mismatch in opItercheckhash") } - case opCheckCacheInvariant: - rt[i].err = checkCacheInvariant(tr.root, nil, tr.cachegen, false, 0) } // Abort the test on error. if rt[i].err != nil { @@ -467,40 +433,6 @@ func runRandTest(rt randTest) bool { return true } -func checkCacheInvariant(n, parent node, parentCachegen uint16, parentDirty bool, depth int) error { - var children []node - var flag nodeFlag - switch n := n.(type) { - case *shortNode: - flag = n.flags - children = []node{n.Val} - case *fullNode: - flag = n.flags - children = n.Children[:] - default: - return nil - } - - errorf := func(format string, args ...interface{}) error { - msg := fmt.Sprintf(format, args...) - msg += fmt.Sprintf("\nat depth %d node %s", depth, spew.Sdump(n)) - msg += fmt.Sprintf("parent: %s", spew.Sdump(parent)) - return errors.New(msg) - } - if flag.gen > parentCachegen { - return errorf("cache invariant violation: %d > %d\n", flag.gen, parentCachegen) - } - if depth > 0 && !parentDirty && flag.dirty { - return errorf("cache invariant violation: %d > %d\n", flag.gen, parentCachegen) - } - for _, child := range children { - if err := checkCacheInvariant(child, n, flag.gen, flag.dirty, depth+1); err != nil { - return err - } - } - return nil -} - func TestRandom(t *testing.T) { if err := quick.Check(runRandTest, nil); err != nil { if cerr, ok := err.(*quick.CheckError); ok { @@ -540,7 +472,7 @@ func benchGet(b *testing.B, commit bool) { b.StopTimer() if commit { - ldb := trie.db.diskdb.(*ethdb.LDBDatabase) + ldb := trie.db.diskdb.(*leveldb.Database) ldb.Close() os.RemoveAll(ldb.Path()) } @@ -596,7 +528,7 @@ func tempDB() (string, *Database) { if err != nil { panic(fmt.Sprintf("can't create temporary directory: %v", err)) } - diskdb, err := ethdb.NewLDBDatabase(dir, 256, 0) + diskdb, err := leveldb.New(dir, 256, 0, "") if err != nil { panic(fmt.Sprintf("can't create temporary database: %v", err)) } @@ -624,6 +556,6 @@ func TestDecodeNode(t *testing.T) { for i := 0; i < 5000000; i++ { rand.Read(hash) rand.Read(elems) - decodeNode(hash, elems, 1) + decodeNode(hash, elems) } } diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/api.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/api.go deleted file mode 100644 index 7d963df8..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/api.go +++ /dev/null @@ -1,561 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "context" - "crypto/ecdsa" - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rpc" -) - -var ( - ErrSymAsym = errors.New("specify either a symmetric or an asymmetric key") - ErrInvalidSymmetricKey = errors.New("invalid symmetric key") - ErrInvalidPublicKey = errors.New("invalid public key") - ErrInvalidSigningPubKey = errors.New("invalid signing public key") - ErrTooLowPoW = errors.New("message rejected, PoW too low") - ErrNoTopics = errors.New("missing topic(s)") -) - -// PublicWhisperAPI provides the whisper RPC service that can be -// use publicly without security implications. -type PublicWhisperAPI struct { - w *Whisper - - mu sync.Mutex - lastUsed map[string]time.Time // keeps track when a filter was polled for the last time. -} - -// NewPublicWhisperAPI create a new RPC whisper service. -func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI { - api := &PublicWhisperAPI{ - w: w, - lastUsed: make(map[string]time.Time), - } - return api -} - -// Version returns the Whisper sub-protocol version. -func (api *PublicWhisperAPI) Version(ctx context.Context) string { - return ProtocolVersionStr -} - -// Info contains diagnostic information. -type Info struct { - Memory int `json:"memory"` // Memory size of the floating messages in bytes. - Messages int `json:"messages"` // Number of floating messages. - MinPow float64 `json:"minPow"` // Minimal accepted PoW - MaxMessageSize uint32 `json:"maxMessageSize"` // Maximum accepted message size -} - -// Info returns diagnostic information about the whisper node. -func (api *PublicWhisperAPI) Info(ctx context.Context) Info { - stats := api.w.Stats() - return Info{ - Memory: stats.memoryUsed, - Messages: len(api.w.messageQueue) + len(api.w.p2pMsgQueue), - MinPow: api.w.MinPow(), - MaxMessageSize: api.w.MaxMessageSize(), - } -} - -// SetMaxMessageSize sets the maximum message size that is accepted. -// Upper limit is defined in whisperv5.MaxMessageSize. -func (api *PublicWhisperAPI) SetMaxMessageSize(ctx context.Context, size uint32) (bool, error) { - return true, api.w.SetMaxMessageSize(size) -} - -// SetMinPoW sets the minimum PoW for a message before it is accepted. -func (api *PublicWhisperAPI) SetMinPoW(ctx context.Context, pow float64) (bool, error) { - return true, api.w.SetMinimumPoW(pow) -} - -// MarkTrustedPeer marks a peer trusted. , which will allow it to send historic (expired) messages. -// Note: This function is not adding new nodes, the node needs to exists as a peer. -func (api *PublicWhisperAPI) MarkTrustedPeer(ctx context.Context, url string) (bool, error) { - n, err := enode.ParseV4(url) - if err != nil { - return false, err - } - return true, api.w.AllowP2PMessagesFromPeer(n.ID().Bytes()) -} - -// NewKeyPair generates a new public and private key pair for message decryption and encryption. -// It returns an ID that can be used to refer to the keypair. -func (api *PublicWhisperAPI) NewKeyPair(ctx context.Context) (string, error) { - return api.w.NewKeyPair() -} - -// AddPrivateKey imports the given private key. -func (api *PublicWhisperAPI) AddPrivateKey(ctx context.Context, privateKey hexutil.Bytes) (string, error) { - key, err := crypto.ToECDSA(privateKey) - if err != nil { - return "", err - } - return api.w.AddKeyPair(key) -} - -// DeleteKeyPair removes the key with the given key if it exists. -func (api *PublicWhisperAPI) DeleteKeyPair(ctx context.Context, key string) (bool, error) { - if ok := api.w.DeleteKeyPair(key); ok { - return true, nil - } - return false, fmt.Errorf("key pair %s not found", key) -} - -// HasKeyPair returns an indication if the node has a key pair that is associated with the given id. -func (api *PublicWhisperAPI) HasKeyPair(ctx context.Context, id string) bool { - return api.w.HasKeyPair(id) -} - -// GetPublicKey returns the public key associated with the given key. The key is the hex -// encoded representation of a key in the form specified in section 4.3.6 of ANSI X9.62. -func (api *PublicWhisperAPI) GetPublicKey(ctx context.Context, id string) (hexutil.Bytes, error) { - key, err := api.w.GetPrivateKey(id) - if err != nil { - return hexutil.Bytes{}, err - } - return crypto.FromECDSAPub(&key.PublicKey), nil -} - -// GetPrivateKey returns the private key associated with the given key. The key is the hex -// encoded representation of a key in the form specified in section 4.3.6 of ANSI X9.62. -func (api *PublicWhisperAPI) GetPrivateKey(ctx context.Context, id string) (hexutil.Bytes, error) { - key, err := api.w.GetPrivateKey(id) - if err != nil { - return hexutil.Bytes{}, err - } - return crypto.FromECDSA(key), nil -} - -// NewSymKey generate a random symmetric key. -// It returns an ID that can be used to refer to the key. -// Can be used encrypting and decrypting messages where the key is known to both parties. -func (api *PublicWhisperAPI) NewSymKey(ctx context.Context) (string, error) { - return api.w.GenerateSymKey() -} - -// AddSymKey import a symmetric key. -// It returns an ID that can be used to refer to the key. -// Can be used encrypting and decrypting messages where the key is known to both parties. -func (api *PublicWhisperAPI) AddSymKey(ctx context.Context, key hexutil.Bytes) (string, error) { - return api.w.AddSymKeyDirect([]byte(key)) -} - -// GenerateSymKeyFromPassword derive a key from the given password, stores it, and returns its ID. -func (api *PublicWhisperAPI) GenerateSymKeyFromPassword(ctx context.Context, passwd string) (string, error) { - return api.w.AddSymKeyFromPassword(passwd) -} - -// HasSymKey returns an indication if the node has a symmetric key associated with the given key. -func (api *PublicWhisperAPI) HasSymKey(ctx context.Context, id string) bool { - return api.w.HasSymKey(id) -} - -// GetSymKey returns the symmetric key associated with the given id. -func (api *PublicWhisperAPI) GetSymKey(ctx context.Context, id string) (hexutil.Bytes, error) { - return api.w.GetSymKey(id) -} - -// DeleteSymKey deletes the symmetric key that is associated with the given id. -func (api *PublicWhisperAPI) DeleteSymKey(ctx context.Context, id string) bool { - return api.w.DeleteSymKey(id) -} - -//go:generate gencodec -type NewMessage -field-override newMessageOverride -out gen_newmessage_json.go - -// NewMessage represents a new whisper message that is posted through the RPC. -type NewMessage struct { - SymKeyID string `json:"symKeyID"` - PublicKey []byte `json:"pubKey"` - Sig string `json:"sig"` - TTL uint32 `json:"ttl"` - Topic TopicType `json:"topic"` - Payload []byte `json:"payload"` - Padding []byte `json:"padding"` - PowTime uint32 `json:"powTime"` - PowTarget float64 `json:"powTarget"` - TargetPeer string `json:"targetPeer"` -} - -type newMessageOverride struct { - PublicKey hexutil.Bytes - Payload hexutil.Bytes - Padding hexutil.Bytes -} - -// Post a message on the Whisper network. -func (api *PublicWhisperAPI) Post(ctx context.Context, req NewMessage) (bool, error) { - var ( - symKeyGiven = len(req.SymKeyID) > 0 - pubKeyGiven = len(req.PublicKey) > 0 - err error - ) - - // user must specify either a symmetric or an asymmetric key - if (symKeyGiven && pubKeyGiven) || (!symKeyGiven && !pubKeyGiven) { - return false, ErrSymAsym - } - - params := &MessageParams{ - TTL: req.TTL, - Payload: req.Payload, - Padding: req.Padding, - WorkTime: req.PowTime, - PoW: req.PowTarget, - Topic: req.Topic, - } - - // Set key that is used to sign the message - if len(req.Sig) > 0 { - if params.Src, err = api.w.GetPrivateKey(req.Sig); err != nil { - return false, err - } - } - - // Set symmetric key that is used to encrypt the message - if symKeyGiven { - if params.Topic == (TopicType{}) { // topics are mandatory with symmetric encryption - return false, ErrNoTopics - } - if params.KeySym, err = api.w.GetSymKey(req.SymKeyID); err != nil { - return false, err - } - if !validateSymmetricKey(params.KeySym) { - return false, ErrInvalidSymmetricKey - } - } - - // Set asymmetric key that is used to encrypt the message - if pubKeyGiven { - if params.Dst, err = crypto.UnmarshalPubkey(req.PublicKey); err != nil { - return false, ErrInvalidPublicKey - } - } - - // encrypt and sent message - whisperMsg, err := NewSentMessage(params) - if err != nil { - return false, err - } - - env, err := whisperMsg.Wrap(params) - if err != nil { - return false, err - } - - // send to specific node (skip PoW check) - if len(req.TargetPeer) > 0 { - n, err := enode.ParseV4(req.TargetPeer) - if err != nil { - return false, fmt.Errorf("failed to parse target peer: %s", err) - } - return true, api.w.SendP2PMessage(n.ID().Bytes(), env) - } - - // ensure that the message PoW meets the node's minimum accepted PoW - if req.PowTarget < api.w.MinPow() { - return false, ErrTooLowPoW - } - - return true, api.w.Send(env) -} - -//go:generate gencodec -type Criteria -field-override criteriaOverride -out gen_criteria_json.go - -// Criteria holds various filter options for inbound messages. -type Criteria struct { - SymKeyID string `json:"symKeyID"` - PrivateKeyID string `json:"privateKeyID"` - Sig []byte `json:"sig"` - MinPow float64 `json:"minPow"` - Topics []TopicType `json:"topics"` - AllowP2P bool `json:"allowP2P"` -} - -type criteriaOverride struct { - Sig hexutil.Bytes -} - -// Messages set up a subscription that fires events when messages arrive that match -// the given set of criteria. -func (api *PublicWhisperAPI) Messages(ctx context.Context, crit Criteria) (*rpc.Subscription, error) { - var ( - symKeyGiven = len(crit.SymKeyID) > 0 - pubKeyGiven = len(crit.PrivateKeyID) > 0 - err error - ) - - // ensure that the RPC connection supports subscriptions - notifier, supported := rpc.NotifierFromContext(ctx) - if !supported { - return nil, rpc.ErrNotificationsUnsupported - } - - // user must specify either a symmetric or an asymmetric key - if (symKeyGiven && pubKeyGiven) || (!symKeyGiven && !pubKeyGiven) { - return nil, ErrSymAsym - } - - filter := Filter{ - PoW: crit.MinPow, - Messages: make(map[common.Hash]*ReceivedMessage), - AllowP2P: crit.AllowP2P, - } - - if len(crit.Sig) > 0 { - if filter.Src, err = crypto.UnmarshalPubkey(crit.Sig); err != nil { - return nil, ErrInvalidSigningPubKey - } - } - - for i, bt := range crit.Topics { - if len(bt) == 0 || len(bt) > 4 { - return nil, fmt.Errorf("subscribe: topic %d has wrong size: %d", i, len(bt)) - } - filter.Topics = append(filter.Topics, bt[:]) - } - - // listen for message that are encrypted with the given symmetric key - if symKeyGiven { - if len(filter.Topics) == 0 { - return nil, ErrNoTopics - } - key, err := api.w.GetSymKey(crit.SymKeyID) - if err != nil { - return nil, err - } - if !validateSymmetricKey(key) { - return nil, ErrInvalidSymmetricKey - } - filter.KeySym = key - filter.SymKeyHash = crypto.Keccak256Hash(filter.KeySym) - } - - // listen for messages that are encrypted with the given public key - if pubKeyGiven { - filter.KeyAsym, err = api.w.GetPrivateKey(crit.PrivateKeyID) - if err != nil || filter.KeyAsym == nil { - return nil, ErrInvalidPublicKey - } - } - - id, err := api.w.Subscribe(&filter) - if err != nil { - return nil, err - } - - // create subscription and start waiting for message events - rpcSub := notifier.CreateSubscription() - go func() { - // for now poll internally, refactor whisper internal for channel support - ticker := time.NewTicker(250 * time.Millisecond) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - if filter := api.w.GetFilter(id); filter != nil { - for _, rpcMessage := range toMessage(filter.Retrieve()) { - if err := notifier.Notify(rpcSub.ID, rpcMessage); err != nil { - log.Error("Failed to send notification", "err", err) - } - } - } - case <-rpcSub.Err(): - api.w.Unsubscribe(id) - return - case <-notifier.Closed(): - api.w.Unsubscribe(id) - return - } - } - }() - - return rpcSub, nil -} - -//go:generate gencodec -type Message -field-override messageOverride -out gen_message_json.go - -// Message is the RPC representation of a whisper message. -type Message struct { - Sig []byte `json:"sig,omitempty"` - TTL uint32 `json:"ttl"` - Timestamp uint32 `json:"timestamp"` - Topic TopicType `json:"topic"` - Payload []byte `json:"payload"` - Padding []byte `json:"padding"` - PoW float64 `json:"pow"` - Hash []byte `json:"hash"` - Dst []byte `json:"recipientPublicKey,omitempty"` -} - -type messageOverride struct { - Sig hexutil.Bytes - Payload hexutil.Bytes - Padding hexutil.Bytes - Hash hexutil.Bytes - Dst hexutil.Bytes -} - -// ToWhisperMessage converts an internal message into an API version. -func ToWhisperMessage(message *ReceivedMessage) *Message { - msg := Message{ - Payload: message.Payload, - Padding: message.Padding, - Timestamp: message.Sent, - TTL: message.TTL, - PoW: message.PoW, - Hash: message.EnvelopeHash.Bytes(), - Topic: message.Topic, - } - - if message.Dst != nil { - b := crypto.FromECDSAPub(message.Dst) - if b != nil { - msg.Dst = b - } - } - - if isMessageSigned(message.Raw[0]) { - b := crypto.FromECDSAPub(message.SigToPubKey()) - if b != nil { - msg.Sig = b - } - } - - return &msg -} - -// toMessage converts a set of messages to its RPC representation. -func toMessage(messages []*ReceivedMessage) []*Message { - msgs := make([]*Message, len(messages)) - for i, msg := range messages { - msgs[i] = ToWhisperMessage(msg) - } - return msgs -} - -// GetFilterMessages returns the messages that match the filter criteria and -// are received between the last poll and now. -func (api *PublicWhisperAPI) GetFilterMessages(id string) ([]*Message, error) { - api.mu.Lock() - f := api.w.GetFilter(id) - if f == nil { - api.mu.Unlock() - return nil, fmt.Errorf("filter not found") - } - api.lastUsed[id] = time.Now() - api.mu.Unlock() - - receivedMessages := f.Retrieve() - messages := make([]*Message, 0, len(receivedMessages)) - for _, msg := range receivedMessages { - messages = append(messages, ToWhisperMessage(msg)) - } - - return messages, nil -} - -// DeleteMessageFilter deletes a filter. -func (api *PublicWhisperAPI) DeleteMessageFilter(id string) (bool, error) { - api.mu.Lock() - defer api.mu.Unlock() - - delete(api.lastUsed, id) - return true, api.w.Unsubscribe(id) -} - -// NewMessageFilter creates a new filter that can be used to poll for -// (new) messages that satisfy the given criteria. -func (api *PublicWhisperAPI) NewMessageFilter(req Criteria) (string, error) { - var ( - src *ecdsa.PublicKey - keySym []byte - keyAsym *ecdsa.PrivateKey - topics [][]byte - - symKeyGiven = len(req.SymKeyID) > 0 - asymKeyGiven = len(req.PrivateKeyID) > 0 - - err error - ) - - // user must specify either a symmetric or an asymmetric key - if (symKeyGiven && asymKeyGiven) || (!symKeyGiven && !asymKeyGiven) { - return "", ErrSymAsym - } - - if len(req.Sig) > 0 { - if src, err = crypto.UnmarshalPubkey(req.Sig); err != nil { - return "", ErrInvalidSigningPubKey - } - } - - if symKeyGiven { - if keySym, err = api.w.GetSymKey(req.SymKeyID); err != nil { - return "", err - } - if !validateSymmetricKey(keySym) { - return "", ErrInvalidSymmetricKey - } - } - - if asymKeyGiven { - if keyAsym, err = api.w.GetPrivateKey(req.PrivateKeyID); err != nil { - return "", err - } - } - - if len(req.Topics) > 0 { - topics = make([][]byte, 0, len(req.Topics)) - for _, topic := range req.Topics { - topics = append(topics, topic[:]) - } - } - - f := &Filter{ - Src: src, - KeySym: keySym, - KeyAsym: keyAsym, - PoW: req.MinPow, - AllowP2P: req.AllowP2P, - Topics: topics, - Messages: make(map[common.Hash]*ReceivedMessage), - } - - id, err := api.w.Subscribe(f) - if err != nil { - return "", err - } - - api.mu.Lock() - api.lastUsed[id] = time.Now() - api.mu.Unlock() - - return id, nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/benchmarks_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/benchmarks_test.go deleted file mode 100644 index dcfbcb56..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/benchmarks_test.go +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "testing" - - "github.com/ethereum/go-ethereum/crypto" -) - -func BenchmarkDeriveKeyMaterial(b *testing.B) { - for i := 0; i < b.N; i++ { - deriveKeyMaterial([]byte("test"), 0) - } -} - -func BenchmarkEncryptionSym(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - for i := 0; i < b.N; i++ { - msg, _ := NewSentMessage(params) - _, err := msg.Wrap(params) - if err != nil { - b.Errorf("failed Wrap with seed %d: %s.", seed, err) - b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload)) - return - } - } -} - -func BenchmarkEncryptionAsym(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - key, err := crypto.GenerateKey() - if err != nil { - b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - params.KeySym = nil - params.Dst = &key.PublicKey - - for i := 0; i < b.N; i++ { - msg, _ := NewSentMessage(params) - _, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - } -} - -func BenchmarkDecryptionSymValid(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, _ := NewSentMessage(params) - env, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - f := Filter{KeySym: params.KeySym} - - for i := 0; i < b.N; i++ { - msg := env.Open(&f) - if msg == nil { - b.Fatalf("failed to open with seed %d.", seed) - } - } -} - -func BenchmarkDecryptionSymInvalid(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, _ := NewSentMessage(params) - env, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - f := Filter{KeySym: []byte("arbitrary stuff here")} - - for i := 0; i < b.N; i++ { - msg := env.Open(&f) - if msg != nil { - b.Fatalf("opened envelope with invalid key, seed: %d.", seed) - } - } -} - -func BenchmarkDecryptionAsymValid(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - key, err := crypto.GenerateKey() - if err != nil { - b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - f := Filter{KeyAsym: key} - params.KeySym = nil - params.Dst = &key.PublicKey - msg, _ := NewSentMessage(params) - env, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - for i := 0; i < b.N; i++ { - msg := env.Open(&f) - if msg == nil { - b.Fatalf("fail to open, seed: %d.", seed) - } - } -} - -func BenchmarkDecryptionAsymInvalid(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - key, err := crypto.GenerateKey() - if err != nil { - b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - params.KeySym = nil - params.Dst = &key.PublicKey - msg, _ := NewSentMessage(params) - env, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - key, err = crypto.GenerateKey() - if err != nil { - b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - f := Filter{KeyAsym: key} - - for i := 0; i < b.N; i++ { - msg := env.Open(&f) - if msg != nil { - b.Fatalf("opened envelope with invalid key, seed: %d.", seed) - } - } -} - -func increment(x []byte) { - for i := 0; i < len(x); i++ { - x[i]++ - if x[i] != 0 { - break - } - } -} - -func BenchmarkPoW(b *testing.B) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - params.Payload = make([]byte, 32) - params.PoW = 10.0 - params.TTL = 1 - - for i := 0; i < b.N; i++ { - increment(params.Payload) - msg, _ := NewSentMessage(params) - _, err := msg.Wrap(params) - if err != nil { - b.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/doc.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/doc.go deleted file mode 100644 index 8161db8e..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/doc.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Package whisperv5 implements the Whisper protocol (version 5). - -Whisper combines aspects of both DHTs and datagram messaging systems (e.g. UDP). -As such it may be likened and compared to both, not dissimilar to the -matter/energy duality (apologies to physicists for the blatant abuse of a -fundamental and beautiful natural principle). - -Whisper is a pure identity-based messaging system. Whisper provides a low-level -(non-application-specific) but easily-accessible API without being based upon -or prejudiced by the low-level hardware attributes and characteristics, -particularly the notion of singular endpoints. -*/ -package whisperv5 - -import ( - "fmt" - "time" -) - -const ( - EnvelopeVersion = uint64(0) - ProtocolVersion = uint64(5) - ProtocolVersionStr = "5.0" - ProtocolName = "shh" - - statusCode = 0 // used by whisper protocol - messagesCode = 1 // normal whisper message - p2pCode = 2 // peer-to-peer message (to be consumed by the peer, but not forwarded any further) - p2pRequestCode = 3 // peer-to-peer message, used by Dapp protocol - NumberOfMessageCodes = 64 - - paddingMask = byte(3) - signatureFlag = byte(4) - - TopicLength = 4 - signatureLength = 65 - aesKeyLength = 32 - AESNonceLength = 12 - keyIdSize = 32 - - MaxMessageSize = uint32(10 * 1024 * 1024) // maximum accepted size of a message. - DefaultMaxMessageSize = uint32(1024 * 1024) - DefaultMinimumPoW = 0.2 - - padSizeLimit = 256 // just an arbitrary number, could be changed without breaking the protocol (must not exceed 2^24) - messageQueueLimit = 1024 - - expirationCycle = time.Second - transmissionCycle = 300 * time.Millisecond - - DefaultTTL = 50 // seconds - SynchAllowance = 10 // seconds -) - -type unknownVersionError uint64 - -func (e unknownVersionError) Error() string { - return fmt.Sprintf("invalid envelope version %d", uint64(e)) -} - -// MailServer represents a mail server, capable of -// archiving the old messages for subsequent delivery -// to the peers. Any implementation must ensure that both -// functions are thread-safe. Also, they must return ASAP. -// DeliverMail should use directMessagesCode for delivery, -// in order to bypass the expiry checks. -type MailServer interface { - Archive(env *Envelope) - DeliverMail(whisperPeer *Peer, request *Envelope) -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/envelope.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/envelope.go deleted file mode 100644 index 169cbba9..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/envelope.go +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Contains the Whisper protocol Envelope element. - -package whisperv5 - -import ( - "crypto/ecdsa" - "encoding/binary" - "fmt" - gmath "math" - "math/big" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/ecies" - "github.com/ethereum/go-ethereum/rlp" -) - -// Envelope represents a clear-text data packet to transmit through the Whisper -// network. Its contents may or may not be encrypted and signed. -type Envelope struct { - Version []byte - Expiry uint32 - TTL uint32 - Topic TopicType - AESNonce []byte - Data []byte - EnvNonce uint64 - - pow float64 // Message-specific PoW as described in the Whisper specification. - hash common.Hash // Cached hash of the envelope to avoid rehashing every time. - // Don't access hash directly, use Hash() function instead. -} - -// size returns the size of envelope as it is sent (i.e. public fields only) -func (e *Envelope) size() int { - return 20 + len(e.Version) + len(e.AESNonce) + len(e.Data) -} - -// rlpWithoutNonce returns the RLP encoded envelope contents, except the nonce. -func (e *Envelope) rlpWithoutNonce() []byte { - res, _ := rlp.EncodeToBytes([]interface{}{e.Version, e.Expiry, e.TTL, e.Topic, e.AESNonce, e.Data}) - return res -} - -// NewEnvelope wraps a Whisper message with expiration and destination data -// included into an envelope for network forwarding. -func NewEnvelope(ttl uint32, topic TopicType, aesNonce []byte, msg *sentMessage) *Envelope { - env := Envelope{ - Version: make([]byte, 1), - Expiry: uint32(time.Now().Add(time.Second * time.Duration(ttl)).Unix()), - TTL: ttl, - Topic: topic, - AESNonce: aesNonce, - Data: msg.Raw, - EnvNonce: 0, - } - - if EnvelopeVersion < 256 { - env.Version[0] = byte(EnvelopeVersion) - } else { - panic("please increase the size of Envelope.Version before releasing this version") - } - - return &env -} - -func (e *Envelope) IsSymmetric() bool { - return len(e.AESNonce) > 0 -} - -func (e *Envelope) isAsymmetric() bool { - return !e.IsSymmetric() -} - -func (e *Envelope) Ver() uint64 { - return bytesToUintLittleEndian(e.Version) -} - -// Seal closes the envelope by spending the requested amount of time as a proof -// of work on hashing the data. -func (e *Envelope) Seal(options *MessageParams) error { - var target, bestBit int - if options.PoW == 0 { - // adjust for the duration of Seal() execution only if execution time is predefined unconditionally - e.Expiry += options.WorkTime - } else { - target = e.powToFirstBit(options.PoW) - if target < 1 { - target = 1 - } - } - - buf := make([]byte, 64) - h := crypto.Keccak256(e.rlpWithoutNonce()) - copy(buf[:32], h) - - finish := time.Now().Add(time.Duration(options.WorkTime) * time.Second).UnixNano() - for nonce := uint64(0); time.Now().UnixNano() < finish; { - for i := 0; i < 1024; i++ { - binary.BigEndian.PutUint64(buf[56:], nonce) - d := new(big.Int).SetBytes(crypto.Keccak256(buf)) - firstBit := math.FirstBitSet(d) - if firstBit > bestBit { - e.EnvNonce, bestBit = nonce, firstBit - if target > 0 && bestBit >= target { - return nil - } - } - nonce++ - } - } - - if target > 0 && bestBit < target { - return fmt.Errorf("failed to reach the PoW target, specified pow time (%d seconds) was insufficient", options.WorkTime) - } - - return nil -} - -func (e *Envelope) PoW() float64 { - if e.pow == 0 { - e.calculatePoW(0) - } - return e.pow -} - -func (e *Envelope) calculatePoW(diff uint32) { - buf := make([]byte, 64) - h := crypto.Keccak256(e.rlpWithoutNonce()) - copy(buf[:32], h) - binary.BigEndian.PutUint64(buf[56:], e.EnvNonce) - d := new(big.Int).SetBytes(crypto.Keccak256(buf)) - firstBit := math.FirstBitSet(d) - x := gmath.Pow(2, float64(firstBit)) - x /= float64(e.size()) - x /= float64(e.TTL + diff) - e.pow = x -} - -func (e *Envelope) powToFirstBit(pow float64) int { - x := pow - x *= float64(e.size()) - x *= float64(e.TTL) - bits := gmath.Log2(x) - bits = gmath.Ceil(bits) - return int(bits) -} - -// Hash returns the SHA3 hash of the envelope, calculating it if not yet done. -func (e *Envelope) Hash() common.Hash { - if (e.hash == common.Hash{}) { - encoded, _ := rlp.EncodeToBytes(e) - e.hash = crypto.Keccak256Hash(encoded) - } - return e.hash -} - -// DecodeRLP decodes an Envelope from an RLP data stream. -func (e *Envelope) DecodeRLP(s *rlp.Stream) error { - raw, err := s.Raw() - if err != nil { - return err - } - // The decoding of Envelope uses the struct fields but also needs - // to compute the hash of the whole RLP-encoded envelope. This - // type has the same structure as Envelope but is not an - // rlp.Decoder (does not implement DecodeRLP function). - // Only public members will be encoded. - type rlpenv Envelope - if err := rlp.DecodeBytes(raw, (*rlpenv)(e)); err != nil { - return err - } - e.hash = crypto.Keccak256Hash(raw) - return nil -} - -// OpenAsymmetric tries to decrypt an envelope, potentially encrypted with a particular key. -func (e *Envelope) OpenAsymmetric(key *ecdsa.PrivateKey) (*ReceivedMessage, error) { - message := &ReceivedMessage{Raw: e.Data} - err := message.decryptAsymmetric(key) - switch err { - case nil: - return message, nil - case ecies.ErrInvalidPublicKey: // addressed to somebody else - return nil, err - default: - return nil, fmt.Errorf("unable to open envelope, decrypt failed: %v", err) - } -} - -// OpenSymmetric tries to decrypt an envelope, potentially encrypted with a particular key. -func (e *Envelope) OpenSymmetric(key []byte) (msg *ReceivedMessage, err error) { - msg = &ReceivedMessage{Raw: e.Data} - err = msg.decryptSymmetric(key, e.AESNonce) - if err != nil { - msg = nil - } - return msg, err -} - -// Open tries to decrypt an envelope, and populates the message fields in case of success. -func (e *Envelope) Open(watcher *Filter) (msg *ReceivedMessage) { - if e.isAsymmetric() { - msg, _ = e.OpenAsymmetric(watcher.KeyAsym) - if msg != nil { - msg.Dst = &watcher.KeyAsym.PublicKey - } - } else if e.IsSymmetric() { - msg, _ = e.OpenSymmetric(watcher.KeySym) - if msg != nil { - msg.SymKeyHash = crypto.Keccak256Hash(watcher.KeySym) - } - } - - if msg != nil { - ok := msg.Validate() - if !ok { - return nil - } - msg.Topic = e.Topic - msg.PoW = e.PoW() - msg.TTL = e.TTL - msg.Sent = e.Expiry - e.TTL - msg.EnvelopeHash = e.Hash() - msg.EnvelopeVersion = e.Ver() - } - return msg -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter.go deleted file mode 100644 index 9550a7e3..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "crypto/ecdsa" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" -) - -type Filter struct { - Src *ecdsa.PublicKey // Sender of the message - KeyAsym *ecdsa.PrivateKey // Private Key of recipient - KeySym []byte // Key associated with the Topic - Topics [][]byte // Topics to filter messages with - PoW float64 // Proof of work as described in the Whisper spec - AllowP2P bool // Indicates whether this filter is interested in direct peer-to-peer messages - SymKeyHash common.Hash // The Keccak256Hash of the symmetric key, needed for optimization - - Messages map[common.Hash]*ReceivedMessage - mutex sync.RWMutex -} - -type Filters struct { - watchers map[string]*Filter - whisper *Whisper - mutex sync.RWMutex -} - -func NewFilters(w *Whisper) *Filters { - return &Filters{ - watchers: make(map[string]*Filter), - whisper: w, - } -} - -func (fs *Filters) Install(watcher *Filter) (string, error) { - if watcher.Messages == nil { - watcher.Messages = make(map[common.Hash]*ReceivedMessage) - } - - id, err := GenerateRandomID() - if err != nil { - return "", err - } - - fs.mutex.Lock() - defer fs.mutex.Unlock() - - if fs.watchers[id] != nil { - return "", fmt.Errorf("failed to generate unique ID") - } - - if watcher.expectsSymmetricEncryption() { - watcher.SymKeyHash = crypto.Keccak256Hash(watcher.KeySym) - } - - fs.watchers[id] = watcher - return id, err -} - -func (fs *Filters) Uninstall(id string) bool { - fs.mutex.Lock() - defer fs.mutex.Unlock() - if fs.watchers[id] != nil { - delete(fs.watchers, id) - return true - } - return false -} - -func (fs *Filters) Get(id string) *Filter { - fs.mutex.RLock() - defer fs.mutex.RUnlock() - return fs.watchers[id] -} - -func (fs *Filters) NotifyWatchers(env *Envelope, p2pMessage bool) { - var msg *ReceivedMessage - - fs.mutex.RLock() - defer fs.mutex.RUnlock() - - i := -1 // only used for logging info - for _, watcher := range fs.watchers { - i++ - if p2pMessage && !watcher.AllowP2P { - log.Trace(fmt.Sprintf("msg [%x], filter [%d]: p2p messages are not allowed", env.Hash(), i)) - continue - } - - var match bool - if msg != nil { - match = watcher.MatchMessage(msg) - } else { - match = watcher.MatchEnvelope(env) - if match { - msg = env.Open(watcher) - if msg == nil { - log.Trace("processing message: failed to open", "message", env.Hash().Hex(), "filter", i) - } - } else { - log.Trace("processing message: does not match", "message", env.Hash().Hex(), "filter", i) - } - } - - if match && msg != nil { - log.Trace("processing message: decrypted", "hash", env.Hash().Hex()) - if watcher.Src == nil || IsPubKeyEqual(msg.Src, watcher.Src) { - watcher.Trigger(msg) - } - } - } -} - -func (f *Filter) processEnvelope(env *Envelope) *ReceivedMessage { - if f.MatchEnvelope(env) { - msg := env.Open(f) - if msg != nil { - return msg - } else { - log.Trace("processing envelope: failed to open", "hash", env.Hash().Hex()) - } - } else { - log.Trace("processing envelope: does not match", "hash", env.Hash().Hex()) - } - return nil -} - -func (f *Filter) expectsAsymmetricEncryption() bool { - return f.KeyAsym != nil -} - -func (f *Filter) expectsSymmetricEncryption() bool { - return f.KeySym != nil -} - -func (f *Filter) Trigger(msg *ReceivedMessage) { - f.mutex.Lock() - defer f.mutex.Unlock() - - if _, exist := f.Messages[msg.EnvelopeHash]; !exist { - f.Messages[msg.EnvelopeHash] = msg - } -} - -func (f *Filter) Retrieve() (all []*ReceivedMessage) { - f.mutex.Lock() - defer f.mutex.Unlock() - - all = make([]*ReceivedMessage, 0, len(f.Messages)) - for _, msg := range f.Messages { - all = append(all, msg) - } - - f.Messages = make(map[common.Hash]*ReceivedMessage) // delete old messages - return all -} - -func (f *Filter) MatchMessage(msg *ReceivedMessage) bool { - if f.PoW > 0 && msg.PoW < f.PoW { - return false - } - - if f.expectsAsymmetricEncryption() && msg.isAsymmetricEncryption() { - return IsPubKeyEqual(&f.KeyAsym.PublicKey, msg.Dst) && f.MatchTopic(msg.Topic) - } else if f.expectsSymmetricEncryption() && msg.isSymmetricEncryption() { - return f.SymKeyHash == msg.SymKeyHash && f.MatchTopic(msg.Topic) - } - return false -} - -func (f *Filter) MatchEnvelope(envelope *Envelope) bool { - if f.PoW > 0 && envelope.pow < f.PoW { - return false - } - - if f.expectsAsymmetricEncryption() && envelope.isAsymmetric() { - return f.MatchTopic(envelope.Topic) - } else if f.expectsSymmetricEncryption() && envelope.IsSymmetric() { - return f.MatchTopic(envelope.Topic) - } - return false -} - -func (f *Filter) MatchTopic(topic TopicType) bool { - if len(f.Topics) == 0 { - // any topic matches - return true - } - - for _, bt := range f.Topics { - if matchSingleTopic(topic, bt) { - return true - } - } - return false -} - -func matchSingleTopic(topic TopicType, bt []byte) bool { - if len(bt) > TopicLength { - bt = bt[:TopicLength] - } - - if len(bt) == 0 { - return false - } - - for j, b := range bt { - if topic[j] != b { - return false - } - } - return true -} - -func IsPubKeyEqual(a, b *ecdsa.PublicKey) bool { - if !ValidatePublicKey(a) { - return false - } else if !ValidatePublicKey(b) { - return false - } - // the curve is always the same, just compare the points - return a.X.Cmp(b.X) == 0 && a.Y.Cmp(b.Y) == 0 -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter_test.go deleted file mode 100644 index 33138fb1..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/filter_test.go +++ /dev/null @@ -1,848 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "math/big" - mrand "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" -) - -var seed int64 - -// InitSingleTest should be called in the beginning of every -// test, which uses RNG, in order to make the tests -// reproduciblity independent of their sequence. -func InitSingleTest() { - seed = time.Now().Unix() - mrand.Seed(seed) -} - -func InitDebugTest(i int64) { - seed = i - mrand.Seed(seed) -} - -type FilterTestCase struct { - f *Filter - id string - alive bool - msgCnt int -} - -func generateFilter(t *testing.T, symmetric bool) (*Filter, error) { - var f Filter - f.Messages = make(map[common.Hash]*ReceivedMessage) - - const topicNum = 8 - f.Topics = make([][]byte, topicNum) - for i := 0; i < topicNum; i++ { - f.Topics[i] = make([]byte, 4) - mrand.Read(f.Topics[i]) - f.Topics[i][0] = 0x01 - } - - key, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("generateFilter 1 failed with seed %d.", seed) - return nil, err - } - f.Src = &key.PublicKey - - if symmetric { - f.KeySym = make([]byte, aesKeyLength) - mrand.Read(f.KeySym) - f.SymKeyHash = crypto.Keccak256Hash(f.KeySym) - } else { - f.KeyAsym, err = crypto.GenerateKey() - if err != nil { - t.Fatalf("generateFilter 2 failed with seed %d.", seed) - return nil, err - } - } - - // AcceptP2P & PoW are not set - return &f, nil -} - -func generateTestCases(t *testing.T, SizeTestFilters int) []FilterTestCase { - cases := make([]FilterTestCase, SizeTestFilters) - for i := 0; i < SizeTestFilters; i++ { - f, _ := generateFilter(t, true) - cases[i].f = f - cases[i].alive = mrand.Int()&int(1) == 0 - } - return cases -} - -func TestInstallFilters(t *testing.T) { - InitSingleTest() - - const SizeTestFilters = 256 - w := New(&Config{}) - filters := NewFilters(w) - tst := generateTestCases(t, SizeTestFilters) - - var err error - var j string - for i := 0; i < SizeTestFilters; i++ { - j, err = filters.Install(tst[i].f) - if err != nil { - t.Fatalf("seed %d: failed to install filter: %s", seed, err) - } - tst[i].id = j - if len(j) != keyIdSize*2 { - t.Fatalf("seed %d: wrong filter id size [%d]", seed, len(j)) - } - } - - for _, testCase := range tst { - if !testCase.alive { - filters.Uninstall(testCase.id) - } - } - - for i, testCase := range tst { - fil := filters.Get(testCase.id) - exist := fil != nil - if exist != testCase.alive { - t.Fatalf("seed %d: failed alive: %d, %v, %v", seed, i, exist, testCase.alive) - } - if exist && fil.PoW != testCase.f.PoW { - t.Fatalf("seed %d: failed Get: %d, %v, %v", seed, i, exist, testCase.alive) - } - } -} - -func TestInstallSymKeyGeneratesHash(t *testing.T) { - InitSingleTest() - - w := New(&Config{}) - filters := NewFilters(w) - filter, _ := generateFilter(t, true) - - // save the current SymKeyHash for comparison - initialSymKeyHash := filter.SymKeyHash - - // ensure the SymKeyHash is invalid, for Install to recreate it - var invalid common.Hash - filter.SymKeyHash = invalid - - _, err := filters.Install(filter) - - if err != nil { - t.Fatalf("Error installing the filter: %s", err) - } - - for i, b := range filter.SymKeyHash { - if b != initialSymKeyHash[i] { - t.Fatalf("The filter's symmetric key hash was not properly generated by Install") - } - } -} - -func TestInstallIdenticalFilters(t *testing.T) { - InitSingleTest() - - w := New(&Config{}) - filters := NewFilters(w) - filter1, _ := generateFilter(t, true) - - // Copy the first filter since some of its fields - // are randomly gnerated. - filter2 := &Filter{ - KeySym: filter1.KeySym, - Topics: filter1.Topics, - PoW: filter1.PoW, - AllowP2P: filter1.AllowP2P, - Messages: make(map[common.Hash]*ReceivedMessage), - } - - _, err := filters.Install(filter1) - - if err != nil { - t.Fatalf("Error installing the first filter with seed %d: %s", seed, err) - } - - _, err = filters.Install(filter2) - - if err != nil { - t.Fatalf("Error installing the second filter with seed %d: %s", seed, err) - } - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("Error generating message parameters with seed %d: %s", seed, err) - } - - params.KeySym = filter1.KeySym - params.Topic = BytesToTopic(filter1.Topics[0]) - - filter1.Src = ¶ms.Src.PublicKey - filter2.Src = ¶ms.Src.PublicKey - - sentMessage, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := sentMessage.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - msg := env.Open(filter1) - if msg == nil { - t.Fatalf("failed to Open with filter1") - } - - if !filter1.MatchEnvelope(env) { - t.Fatalf("failed matching with the first filter") - } - - if !filter2.MatchEnvelope(env) { - t.Fatalf("failed matching with the first filter") - } - - if !filter1.MatchMessage(msg) { - t.Fatalf("failed matching with the second filter") - } - - if !filter2.MatchMessage(msg) { - t.Fatalf("failed matching with the second filter") - } -} - -func TestComparePubKey(t *testing.T) { - InitSingleTest() - - key1, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed to generate first key with seed %d: %s.", seed, err) - } - key2, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed to generate second key with seed %d: %s.", seed, err) - } - if IsPubKeyEqual(&key1.PublicKey, &key2.PublicKey) { - t.Fatalf("public keys are equal, seed %d.", seed) - } - - // generate key3 == key1 - mrand.Seed(seed) - key3, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed to generate third key with seed %d: %s.", seed, err) - } - if IsPubKeyEqual(&key1.PublicKey, &key3.PublicKey) { - t.Fatalf("key1 == key3, seed %d.", seed) - } -} - -func TestMatchEnvelope(t *testing.T) { - InitSingleTest() - - fsym, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateFilter with seed %d: %s.", seed, err) - } - - fasym, err := generateFilter(t, false) - if err != nil { - t.Fatalf("failed generateFilter() with seed %d: %s.", seed, err) - } - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - params.Topic[0] = 0xFF // ensure mismatch - - // mismatch with pseudo-random data - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - match := fsym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope symmetric with seed %d.", seed) - } - match = fasym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope asymmetric with seed %d.", seed) - } - - // encrypt symmetrically - i := mrand.Int() % 4 - fsym.Topics[i] = params.Topic[:] - fasym.Topics[i] = params.Topic[:] - msg, err = NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err = msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap() with seed %d: %s.", seed, err) - } - - // symmetric + matching topic: match - match = fsym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope() symmetric with seed %d.", seed) - } - - // asymmetric + matching topic: mismatch - match = fasym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope() asymmetric with seed %d.", seed) - } - - // symmetric + matching topic + insufficient PoW: mismatch - fsym.PoW = env.PoW() + 1.0 - match = fsym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope(symmetric + matching topic + insufficient PoW) asymmetric with seed %d.", seed) - } - - // symmetric + matching topic + sufficient PoW: match - fsym.PoW = env.PoW() / 2 - match = fsym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(symmetric + matching topic + sufficient PoW) with seed %d.", seed) - } - - // symmetric + topics are nil (wildcard): match - prevTopics := fsym.Topics - fsym.Topics = nil - match = fsym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(symmetric + topics are nil) with seed %d.", seed) - } - fsym.Topics = prevTopics - - // encrypt asymmetrically - key, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - params.KeySym = nil - params.Dst = &key.PublicKey - msg, err = NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err = msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap() with seed %d: %s.", seed, err) - } - - // encryption method mismatch - match = fsym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope(encryption method mismatch) with seed %d.", seed) - } - - // asymmetric + mismatching topic: mismatch - match = fasym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(asymmetric + mismatching topic) with seed %d.", seed) - } - - // asymmetric + matching topic: match - fasym.Topics[i] = fasym.Topics[i+1] - match = fasym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope(asymmetric + matching topic) with seed %d.", seed) - } - - // asymmetric + filter without topic (wildcard): match - fasym.Topics = nil - match = fasym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(asymmetric + filter without topic) with seed %d.", seed) - } - - // asymmetric + insufficient PoW: mismatch - fasym.PoW = env.PoW() + 1.0 - match = fasym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope(asymmetric + insufficient PoW) with seed %d.", seed) - } - - // asymmetric + sufficient PoW: match - fasym.PoW = env.PoW() / 2 - match = fasym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(asymmetric + sufficient PoW) with seed %d.", seed) - } - - // filter without topic + envelope without topic: match - env.Topic = TopicType{} - match = fasym.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope(filter without topic + envelope without topic) with seed %d.", seed) - } - - // filter with topic + envelope without topic: mismatch - fasym.Topics = fsym.Topics - match = fasym.MatchEnvelope(env) - if match { - t.Fatalf("failed MatchEnvelope(filter without topic + envelope without topic) with seed %d.", seed) - } -} - -func TestMatchMessageSym(t *testing.T) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - f, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateFilter with seed %d: %s.", seed, err) - } - - const index = 1 - params.KeySym = f.KeySym - params.Topic = BytesToTopic(f.Topics[index]) - - sentMessage, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := sentMessage.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - msg := env.Open(f) - if msg == nil { - t.Fatalf("failed Open with seed %d.", seed) - } - - // Src: match - *f.Src.X = *params.Src.PublicKey.X - *f.Src.Y = *params.Src.PublicKey.Y - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(src match) with seed %d.", seed) - } - - // insufficient PoW: mismatch - f.PoW = msg.PoW + 1.0 - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(insufficient PoW) with seed %d.", seed) - } - - // sufficient PoW: match - f.PoW = msg.PoW / 2 - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(sufficient PoW) with seed %d.", seed) - } - - // topic mismatch - f.Topics[index][0]++ - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(topic mismatch) with seed %d.", seed) - } - f.Topics[index][0]-- - - // key mismatch - f.SymKeyHash[0]++ - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(key mismatch) with seed %d.", seed) - } - f.SymKeyHash[0]-- - - // Src absent: match - f.Src = nil - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(src absent) with seed %d.", seed) - } - - // key hash mismatch - h := f.SymKeyHash - f.SymKeyHash = common.Hash{} - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(key hash mismatch) with seed %d.", seed) - } - f.SymKeyHash = h - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(key hash match) with seed %d.", seed) - } - - // encryption method mismatch - f.KeySym = nil - f.KeyAsym, err = crypto.GenerateKey() - if err != nil { - t.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(encryption method mismatch) with seed %d.", seed) - } -} - -func TestMatchMessageAsym(t *testing.T) { - InitSingleTest() - - f, err := generateFilter(t, false) - if err != nil { - t.Fatalf("failed generateFilter with seed %d: %s.", seed, err) - } - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - const index = 1 - params.Topic = BytesToTopic(f.Topics[index]) - params.Dst = &f.KeyAsym.PublicKey - keySymOrig := params.KeySym - params.KeySym = nil - - sentMessage, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := sentMessage.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - msg := env.Open(f) - if msg == nil { - t.Fatalf("failed to open with seed %d.", seed) - } - - // Src: match - *f.Src.X = *params.Src.PublicKey.X - *f.Src.Y = *params.Src.PublicKey.Y - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchMessage(src match) with seed %d.", seed) - } - - // insufficient PoW: mismatch - f.PoW = msg.PoW + 1.0 - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(insufficient PoW) with seed %d.", seed) - } - - // sufficient PoW: match - f.PoW = msg.PoW / 2 - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(sufficient PoW) with seed %d.", seed) - } - - // topic mismatch - f.Topics[index][0]++ - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(topic mismatch) with seed %d.", seed) - } - f.Topics[index][0]-- - - // key mismatch - prev := *f.KeyAsym.PublicKey.X - zero := *big.NewInt(0) - *f.KeyAsym.PublicKey.X = zero - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(key mismatch) with seed %d.", seed) - } - *f.KeyAsym.PublicKey.X = prev - - // Src absent: match - f.Src = nil - if !f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(src absent) with seed %d.", seed) - } - - // encryption method mismatch - f.KeySym = keySymOrig - f.KeyAsym = nil - if f.MatchMessage(msg) { - t.Fatalf("failed MatchEnvelope(encryption method mismatch) with seed %d.", seed) - } -} - -func cloneFilter(orig *Filter) *Filter { - var clone Filter - clone.Messages = make(map[common.Hash]*ReceivedMessage) - clone.Src = orig.Src - clone.KeyAsym = orig.KeyAsym - clone.KeySym = orig.KeySym - clone.Topics = orig.Topics - clone.PoW = orig.PoW - clone.AllowP2P = orig.AllowP2P - clone.SymKeyHash = orig.SymKeyHash - return &clone -} - -func generateCompatibeEnvelope(t *testing.T, f *Filter) *Envelope { - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - return nil - } - - params.KeySym = f.KeySym - params.Topic = BytesToTopic(f.Topics[2]) - sentMessage, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := sentMessage.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - return nil - } - return env -} - -func TestWatchers(t *testing.T) { - InitSingleTest() - - const NumFilters = 16 - const NumMessages = 256 - var i int - var j uint32 - var e *Envelope - var x, firstID string - var err error - - w := New(&Config{}) - filters := NewFilters(w) - tst := generateTestCases(t, NumFilters) - for i = 0; i < NumFilters; i++ { - tst[i].f.Src = nil - x, err = filters.Install(tst[i].f) - if err != nil { - t.Fatalf("failed to install filter with seed %d: %s.", seed, err) - } - tst[i].id = x - if len(firstID) == 0 { - firstID = x - } - } - - lastID := x - - var envelopes [NumMessages]*Envelope - for i = 0; i < NumMessages; i++ { - j = mrand.Uint32() % NumFilters - e = generateCompatibeEnvelope(t, tst[j].f) - envelopes[i] = e - tst[j].msgCnt++ - } - - for i = 0; i < NumMessages; i++ { - filters.NotifyWatchers(envelopes[i], false) - } - - var total int - var mail []*ReceivedMessage - var count [NumFilters]int - - for i = 0; i < NumFilters; i++ { - mail = tst[i].f.Retrieve() - count[i] = len(mail) - total += len(mail) - } - - if total != NumMessages { - t.Fatalf("failed with seed %d: total = %d, want: %d.", seed, total, NumMessages) - } - - for i = 0; i < NumFilters; i++ { - mail = tst[i].f.Retrieve() - if len(mail) != 0 { - t.Fatalf("failed with seed %d: i = %d.", seed, i) - } - - if tst[i].msgCnt != count[i] { - t.Fatalf("failed with seed %d: count[%d]: get %d, want %d.", seed, i, tst[i].msgCnt, count[i]) - } - } - - // another round with a cloned filter - - clone := cloneFilter(tst[0].f) - filters.Uninstall(lastID) - total = 0 - last := NumFilters - 1 - tst[last].f = clone - filters.Install(clone) - for i = 0; i < NumFilters; i++ { - tst[i].msgCnt = 0 - count[i] = 0 - } - - // make sure that the first watcher receives at least one message - e = generateCompatibeEnvelope(t, tst[0].f) - envelopes[0] = e - tst[0].msgCnt++ - for i = 1; i < NumMessages; i++ { - j = mrand.Uint32() % NumFilters - e = generateCompatibeEnvelope(t, tst[j].f) - envelopes[i] = e - tst[j].msgCnt++ - } - - for i = 0; i < NumMessages; i++ { - filters.NotifyWatchers(envelopes[i], false) - } - - for i = 0; i < NumFilters; i++ { - mail = tst[i].f.Retrieve() - count[i] = len(mail) - total += len(mail) - } - - combined := tst[0].msgCnt + tst[last].msgCnt - if total != NumMessages+count[0] { - t.Fatalf("failed with seed %d: total = %d, count[0] = %d.", seed, total, count[0]) - } - - if combined != count[0] { - t.Fatalf("failed with seed %d: combined = %d, count[0] = %d.", seed, combined, count[0]) - } - - if combined != count[last] { - t.Fatalf("failed with seed %d: combined = %d, count[last] = %d.", seed, combined, count[last]) - } - - for i = 1; i < NumFilters-1; i++ { - mail = tst[i].f.Retrieve() - if len(mail) != 0 { - t.Fatalf("failed with seed %d: i = %d.", seed, i) - } - - if tst[i].msgCnt != count[i] { - t.Fatalf("failed with seed %d: i = %d, get %d, want %d.", seed, i, tst[i].msgCnt, count[i]) - } - } - - // test AcceptP2P - - total = 0 - filters.NotifyWatchers(envelopes[0], true) - - for i = 0; i < NumFilters; i++ { - mail = tst[i].f.Retrieve() - total += len(mail) - } - - if total != 0 { - t.Fatalf("failed with seed %d: total: got %d, want 0.", seed, total) - } - - f := filters.Get(firstID) - if f == nil { - t.Fatalf("failed to get the filter with seed %d.", seed) - } - f.AllowP2P = true - total = 0 - filters.NotifyWatchers(envelopes[0], true) - - for i = 0; i < NumFilters; i++ { - mail = tst[i].f.Retrieve() - total += len(mail) - } - - if total != 1 { - t.Fatalf("failed with seed %d: total: got %d, want 1.", seed, total) - } -} - -func TestVariableTopics(t *testing.T) { - InitSingleTest() - - const lastTopicByte = 3 - var match bool - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - f, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateFilter with seed %d: %s.", seed, err) - } - - for i := 0; i < 4; i++ { - env.Topic = BytesToTopic(f.Topics[i]) - match = f.MatchEnvelope(env) - if !match { - t.Fatalf("failed MatchEnvelope symmetric with seed %d, step %d.", seed, i) - } - - f.Topics[i][lastTopicByte]++ - match = f.MatchEnvelope(env) - if match { - t.Fatalf("MatchEnvelope symmetric with seed %d, step %d: false positive.", seed, i) - } - } -} - -func TestMatchSingleTopic_ReturnTrue(t *testing.T) { - bt := []byte("test") - topic := BytesToTopic(bt) - - if !matchSingleTopic(topic, bt) { - t.FailNow() - } -} - -func TestMatchSingleTopic_WithTail_ReturnTrue(t *testing.T) { - bt := []byte("test with tail") - topic := BytesToTopic([]byte("test")) - - if !matchSingleTopic(topic, bt) { - t.FailNow() - } -} - -func TestMatchSingleTopic_PartialTopic_ReturnTrue(t *testing.T) { - bt := []byte("tes") - topic := BytesToTopic([]byte("test")) - - if !matchSingleTopic(topic, bt) { - t.FailNow() - } -} - -func TestMatchSingleTopic_NotEquals_ReturnFalse(t *testing.T) { - bt := []byte("test") - topic := BytesToTopic([]byte("not_equal")) - - if matchSingleTopic(topic, bt) { - t.FailNow() - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_criteria_json.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_criteria_json.go deleted file mode 100644 index 1c0e389a..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_criteria_json.go +++ /dev/null @@ -1,64 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package whisperv5 - -import ( - "encoding/json" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -var _ = (*criteriaOverride)(nil) - -func (c Criteria) MarshalJSON() ([]byte, error) { - type Criteria struct { - SymKeyID string `json:"symKeyID"` - PrivateKeyID string `json:"privateKeyID"` - Sig hexutil.Bytes `json:"sig"` - MinPow float64 `json:"minPow"` - Topics []TopicType `json:"topics"` - AllowP2P bool `json:"allowP2P"` - } - var enc Criteria - enc.SymKeyID = c.SymKeyID - enc.PrivateKeyID = c.PrivateKeyID - enc.Sig = c.Sig - enc.MinPow = c.MinPow - enc.Topics = c.Topics - enc.AllowP2P = c.AllowP2P - return json.Marshal(&enc) -} - -func (c *Criteria) UnmarshalJSON(input []byte) error { - type Criteria struct { - SymKeyID *string `json:"symKeyID"` - PrivateKeyID *string `json:"privateKeyID"` - Sig *hexutil.Bytes `json:"sig"` - MinPow *float64 `json:"minPow"` - Topics []TopicType `json:"topics"` - AllowP2P *bool `json:"allowP2P"` - } - var dec Criteria - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.SymKeyID != nil { - c.SymKeyID = *dec.SymKeyID - } - if dec.PrivateKeyID != nil { - c.PrivateKeyID = *dec.PrivateKeyID - } - if dec.Sig != nil { - c.Sig = *dec.Sig - } - if dec.MinPow != nil { - c.MinPow = *dec.MinPow - } - if dec.Topics != nil { - c.Topics = dec.Topics - } - if dec.AllowP2P != nil { - c.AllowP2P = *dec.AllowP2P - } - return nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_message_json.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_message_json.go deleted file mode 100644 index b4c4274d..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_message_json.go +++ /dev/null @@ -1,82 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package whisperv5 - -import ( - "encoding/json" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -var _ = (*messageOverride)(nil) - -func (m Message) MarshalJSON() ([]byte, error) { - type Message struct { - Sig hexutil.Bytes `json:"sig,omitempty"` - TTL uint32 `json:"ttl"` - Timestamp uint32 `json:"timestamp"` - Topic TopicType `json:"topic"` - Payload hexutil.Bytes `json:"payload"` - Padding hexutil.Bytes `json:"padding"` - PoW float64 `json:"pow"` - Hash hexutil.Bytes `json:"hash"` - Dst hexutil.Bytes `json:"recipientPublicKey,omitempty"` - } - var enc Message - enc.Sig = m.Sig - enc.TTL = m.TTL - enc.Timestamp = m.Timestamp - enc.Topic = m.Topic - enc.Payload = m.Payload - enc.Padding = m.Padding - enc.PoW = m.PoW - enc.Hash = m.Hash - enc.Dst = m.Dst - return json.Marshal(&enc) -} - -func (m *Message) UnmarshalJSON(input []byte) error { - type Message struct { - Sig *hexutil.Bytes `json:"sig,omitempty"` - TTL *uint32 `json:"ttl"` - Timestamp *uint32 `json:"timestamp"` - Topic *TopicType `json:"topic"` - Payload *hexutil.Bytes `json:"payload"` - Padding *hexutil.Bytes `json:"padding"` - PoW *float64 `json:"pow"` - Hash *hexutil.Bytes `json:"hash"` - Dst *hexutil.Bytes `json:"recipientPublicKey,omitempty"` - } - var dec Message - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.Sig != nil { - m.Sig = *dec.Sig - } - if dec.TTL != nil { - m.TTL = *dec.TTL - } - if dec.Timestamp != nil { - m.Timestamp = *dec.Timestamp - } - if dec.Topic != nil { - m.Topic = *dec.Topic - } - if dec.Payload != nil { - m.Payload = *dec.Payload - } - if dec.Padding != nil { - m.Padding = *dec.Padding - } - if dec.PoW != nil { - m.PoW = *dec.PoW - } - if dec.Hash != nil { - m.Hash = *dec.Hash - } - if dec.Dst != nil { - m.Dst = *dec.Dst - } - return nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_newmessage_json.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_newmessage_json.go deleted file mode 100644 index 97ffb64a..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/gen_newmessage_json.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package whisperv5 - -import ( - "encoding/json" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -var _ = (*newMessageOverride)(nil) - -func (n NewMessage) MarshalJSON() ([]byte, error) { - type NewMessage struct { - SymKeyID string `json:"symKeyID"` - PublicKey hexutil.Bytes `json:"pubKey"` - Sig string `json:"sig"` - TTL uint32 `json:"ttl"` - Topic TopicType `json:"topic"` - Payload hexutil.Bytes `json:"payload"` - Padding hexutil.Bytes `json:"padding"` - PowTime uint32 `json:"powTime"` - PowTarget float64 `json:"powTarget"` - TargetPeer string `json:"targetPeer"` - } - var enc NewMessage - enc.SymKeyID = n.SymKeyID - enc.PublicKey = n.PublicKey - enc.Sig = n.Sig - enc.TTL = n.TTL - enc.Topic = n.Topic - enc.Payload = n.Payload - enc.Padding = n.Padding - enc.PowTime = n.PowTime - enc.PowTarget = n.PowTarget - enc.TargetPeer = n.TargetPeer - return json.Marshal(&enc) -} - -func (n *NewMessage) UnmarshalJSON(input []byte) error { - type NewMessage struct { - SymKeyID *string `json:"symKeyID"` - PublicKey *hexutil.Bytes `json:"pubKey"` - Sig *string `json:"sig"` - TTL *uint32 `json:"ttl"` - Topic *TopicType `json:"topic"` - Payload *hexutil.Bytes `json:"payload"` - Padding *hexutil.Bytes `json:"padding"` - PowTime *uint32 `json:"powTime"` - PowTarget *float64 `json:"powTarget"` - TargetPeer *string `json:"targetPeer"` - } - var dec NewMessage - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.SymKeyID != nil { - n.SymKeyID = *dec.SymKeyID - } - if dec.PublicKey != nil { - n.PublicKey = *dec.PublicKey - } - if dec.Sig != nil { - n.Sig = *dec.Sig - } - if dec.TTL != nil { - n.TTL = *dec.TTL - } - if dec.Topic != nil { - n.Topic = *dec.Topic - } - if dec.Payload != nil { - n.Payload = *dec.Payload - } - if dec.Padding != nil { - n.Padding = *dec.Padding - } - if dec.PowTime != nil { - n.PowTime = *dec.PowTime - } - if dec.PowTarget != nil { - n.PowTarget = *dec.PowTarget - } - if dec.TargetPeer != nil { - n.TargetPeer = *dec.TargetPeer - } - return nil -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message.go deleted file mode 100644 index 35711d72..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message.go +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Contains the Whisper protocol Message element. - -package whisperv5 - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/ecdsa" - crand "crypto/rand" - "encoding/binary" - "errors" - "strconv" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/ecies" - "github.com/ethereum/go-ethereum/log" -) - -// MessageParams specifies the exact way a message should be wrapped into an Envelope. -type MessageParams struct { - TTL uint32 - Src *ecdsa.PrivateKey - Dst *ecdsa.PublicKey - KeySym []byte - Topic TopicType - WorkTime uint32 - PoW float64 - Payload []byte - Padding []byte -} - -// SentMessage represents an end-user data packet to transmit through the -// Whisper protocol. These are wrapped into Envelopes that need not be -// understood by intermediate nodes, just forwarded. -type sentMessage struct { - Raw []byte -} - -// ReceivedMessage represents a data packet to be received through the -// Whisper protocol. -type ReceivedMessage struct { - Raw []byte - - Payload []byte - Padding []byte - Signature []byte - - PoW float64 // Proof of work as described in the Whisper spec - Sent uint32 // Time when the message was posted into the network - TTL uint32 // Maximum time to live allowed for the message - Src *ecdsa.PublicKey // Message recipient (identity used to decode the message) - Dst *ecdsa.PublicKey // Message recipient (identity used to decode the message) - Topic TopicType - - SymKeyHash common.Hash // The Keccak256Hash of the key, associated with the Topic - EnvelopeHash common.Hash // Message envelope hash to act as a unique id - EnvelopeVersion uint64 -} - -func isMessageSigned(flags byte) bool { - return (flags & signatureFlag) != 0 -} - -func (msg *ReceivedMessage) isSymmetricEncryption() bool { - return msg.SymKeyHash != common.Hash{} -} - -func (msg *ReceivedMessage) isAsymmetricEncryption() bool { - return msg.Dst != nil -} - -// NewSentMessage creates and initializes a non-signed, non-encrypted Whisper message. -func NewSentMessage(params *MessageParams) (*sentMessage, error) { - msg := sentMessage{} - msg.Raw = make([]byte, 1, len(params.Payload)+len(params.Padding)+signatureLength+padSizeLimit) - msg.Raw[0] = 0 // set all the flags to zero - err := msg.appendPadding(params) - if err != nil { - return nil, err - } - msg.Raw = append(msg.Raw, params.Payload...) - return &msg, nil -} - -// getSizeOfLength returns the number of bytes necessary to encode the entire size padding (including these bytes) -func getSizeOfLength(b []byte) (sz int, err error) { - sz = intSize(len(b)) // first iteration - sz = intSize(len(b) + sz) // second iteration - if sz > 3 { - err = errors.New("oversized padding parameter") - } - return sz, err -} - -// sizeOfIntSize returns minimal number of bytes necessary to encode an integer value -func intSize(i int) (s int) { - for s = 1; i >= 256; s++ { - i /= 256 - } - return s -} - -// appendPadding appends the pseudorandom padding bytes and sets the padding flag. -// The last byte contains the size of padding (thus, its size must not exceed 256). -func (msg *sentMessage) appendPadding(params *MessageParams) error { - rawSize := len(params.Payload) + 1 - if params.Src != nil { - rawSize += signatureLength - } - odd := rawSize % padSizeLimit - - if len(params.Padding) != 0 { - padSize := len(params.Padding) - padLengthSize, err := getSizeOfLength(params.Padding) - if err != nil { - return err - } - totalPadSize := padSize + padLengthSize - buf := make([]byte, 8) - binary.LittleEndian.PutUint32(buf, uint32(totalPadSize)) - buf = buf[:padLengthSize] - msg.Raw = append(msg.Raw, buf...) - msg.Raw = append(msg.Raw, params.Padding...) - msg.Raw[0] |= byte(padLengthSize) // number of bytes indicating the padding size - } else if odd != 0 { - totalPadSize := padSizeLimit - odd - if totalPadSize > 255 { - // this algorithm is only valid if padSizeLimit < 256. - // if padSizeLimit will ever change, please fix the algorithm - // (please see also ReceivedMessage.extractPadding() function). - panic("please fix the padding algorithm before releasing new version") - } - buf := make([]byte, totalPadSize) - _, err := crand.Read(buf[1:]) - if err != nil { - return err - } - if totalPadSize > 6 && !validateSymmetricKey(buf) { - return errors.New("failed to generate random padding of size " + strconv.Itoa(totalPadSize)) - } - buf[0] = byte(totalPadSize) - msg.Raw = append(msg.Raw, buf...) - msg.Raw[0] |= byte(0x1) // number of bytes indicating the padding size - } - return nil -} - -// sign calculates and sets the cryptographic signature for the message, -// also setting the sign flag. -func (msg *sentMessage) sign(key *ecdsa.PrivateKey) error { - if isMessageSigned(msg.Raw[0]) { - // this should not happen, but no reason to panic - log.Error("failed to sign the message: already signed") - return nil - } - - msg.Raw[0] |= signatureFlag - hash := crypto.Keccak256(msg.Raw) - signature, err := crypto.Sign(hash, key) - if err != nil { - msg.Raw[0] &= ^signatureFlag // clear the flag - return err - } - msg.Raw = append(msg.Raw, signature...) - return nil -} - -// encryptAsymmetric encrypts a message with a public key. -func (msg *sentMessage) encryptAsymmetric(key *ecdsa.PublicKey) error { - if !ValidatePublicKey(key) { - return errors.New("invalid public key provided for asymmetric encryption") - } - encrypted, err := ecies.Encrypt(crand.Reader, ecies.ImportECDSAPublic(key), msg.Raw, nil, nil) - if err == nil { - msg.Raw = encrypted - } - return err -} - -// encryptSymmetric encrypts a message with a topic key, using AES-GCM-256. -// nonce size should be 12 bytes (see cipher.gcmStandardNonceSize). -func (msg *sentMessage) encryptSymmetric(key []byte) (nonce []byte, err error) { - if !validateSymmetricKey(key) { - return nil, errors.New("invalid key provided for symmetric encryption") - } - - block, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - aesgcm, err := cipher.NewGCM(block) - if err != nil { - return nil, err - } - - // never use more than 2^32 random nonces with a given key - nonce = make([]byte, aesgcm.NonceSize()) - _, err = crand.Read(nonce) - if err != nil { - return nil, err - } else if !validateSymmetricKey(nonce) { - return nil, errors.New("crypto/rand failed to generate nonce") - } - - msg.Raw = aesgcm.Seal(nil, nonce, msg.Raw, nil) - return nonce, nil -} - -// Wrap bundles the message into an Envelope to transmit over the network. -func (msg *sentMessage) Wrap(options *MessageParams) (envelope *Envelope, err error) { - if options.TTL == 0 { - options.TTL = DefaultTTL - } - if options.Src != nil { - if err = msg.sign(options.Src); err != nil { - return nil, err - } - } - var nonce []byte - if options.Dst != nil { - err = msg.encryptAsymmetric(options.Dst) - } else if options.KeySym != nil { - nonce, err = msg.encryptSymmetric(options.KeySym) - } else { - err = errors.New("unable to encrypt the message: neither symmetric nor assymmetric key provided") - } - if err != nil { - return nil, err - } - - envelope = NewEnvelope(options.TTL, options.Topic, nonce, msg) - if err = envelope.Seal(options); err != nil { - return nil, err - } - return envelope, nil -} - -// decryptSymmetric decrypts a message with a topic key, using AES-GCM-256. -// nonce size should be 12 bytes (see cipher.gcmStandardNonceSize). -func (msg *ReceivedMessage) decryptSymmetric(key []byte, nonce []byte) error { - block, err := aes.NewCipher(key) - if err != nil { - return err - } - aesgcm, err := cipher.NewGCM(block) - if err != nil { - return err - } - if len(nonce) != aesgcm.NonceSize() { - log.Error("decrypting the message", "AES nonce size", len(nonce)) - return errors.New("wrong AES nonce size") - } - decrypted, err := aesgcm.Open(nil, nonce, msg.Raw, nil) - if err != nil { - return err - } - msg.Raw = decrypted - return nil -} - -// decryptAsymmetric decrypts an encrypted payload with a private key. -func (msg *ReceivedMessage) decryptAsymmetric(key *ecdsa.PrivateKey) error { - decrypted, err := ecies.ImportECDSA(key).Decrypt(msg.Raw, nil, nil) - if err == nil { - msg.Raw = decrypted - } - return err -} - -// Validate checks the validity and extracts the fields in case of success -func (msg *ReceivedMessage) Validate() bool { - end := len(msg.Raw) - if end < 1 { - return false - } - - if isMessageSigned(msg.Raw[0]) { - end -= signatureLength - if end <= 1 { - return false - } - msg.Signature = msg.Raw[end:] - msg.Src = msg.SigToPubKey() - if msg.Src == nil { - return false - } - } - - padSize, ok := msg.extractPadding(end) - if !ok { - return false - } - - msg.Payload = msg.Raw[1+padSize : end] - return true -} - -// extractPadding extracts the padding from raw message. -// although we don't support sending messages with padding size -// exceeding 255 bytes, such messages are perfectly valid, and -// can be successfully decrypted. -func (msg *ReceivedMessage) extractPadding(end int) (int, bool) { - paddingSize := 0 - sz := int(msg.Raw[0] & paddingMask) // number of bytes indicating the entire size of padding (including these bytes) - // could be zero -- it means no padding - if sz != 0 { - paddingSize = int(bytesToUintLittleEndian(msg.Raw[1 : 1+sz])) - if paddingSize < sz || paddingSize+1 > end { - return 0, false - } - msg.Padding = msg.Raw[1+sz : 1+paddingSize] - } - return paddingSize, true -} - -// SigToPubKey retrieves the public key of the message signer. -func (msg *ReceivedMessage) SigToPubKey() *ecdsa.PublicKey { - defer func() { recover() }() // in case of invalid signature - - pub, err := crypto.SigToPub(msg.hash(), msg.Signature) - if err != nil { - log.Error("failed to recover public key from signature", "err", err) - return nil - } - return pub -} - -// hash calculates the SHA3 checksum of the message flags, payload and padding. -func (msg *ReceivedMessage) hash() []byte { - if isMessageSigned(msg.Raw[0]) { - sz := len(msg.Raw) - signatureLength - return crypto.Keccak256(msg.Raw[:sz]) - } - return crypto.Keccak256(msg.Raw) -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message_test.go deleted file mode 100644 index 2edf945d..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/message_test.go +++ /dev/null @@ -1,415 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "bytes" - mrand "math/rand" - "testing" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/rlp" -) - -func generateMessageParams() (*MessageParams, error) { - // set all the parameters except p.Dst and p.Padding - - buf := make([]byte, 4) - mrand.Read(buf) - sz := mrand.Intn(400) - - var p MessageParams - p.PoW = 0.01 - p.WorkTime = 1 - p.TTL = uint32(mrand.Intn(1024)) - p.Payload = make([]byte, sz) - p.KeySym = make([]byte, aesKeyLength) - mrand.Read(p.Payload) - mrand.Read(p.KeySym) - p.Topic = BytesToTopic(buf) - - var err error - p.Src, err = crypto.GenerateKey() - if err != nil { - return nil, err - } - - return &p, nil -} - -func singleMessageTest(t *testing.T, symmetric bool) { - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - key, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - - if !symmetric { - params.KeySym = nil - params.Dst = &key.PublicKey - } - - text := make([]byte, 0, 512) - text = append(text, params.Payload...) - - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - var decrypted *ReceivedMessage - if symmetric { - decrypted, err = env.OpenSymmetric(params.KeySym) - } else { - decrypted, err = env.OpenAsymmetric(key) - } - - if err != nil { - t.Fatalf("failed to encrypt with seed %d: %s.", seed, err) - } - - if !decrypted.Validate() { - t.Fatalf("failed to validate with seed %d.", seed) - } - - if !bytes.Equal(text, decrypted.Payload) { - t.Fatalf("failed with seed %d: compare payload.", seed) - } - if !isMessageSigned(decrypted.Raw[0]) { - t.Fatalf("failed with seed %d: unsigned.", seed) - } - if len(decrypted.Signature) != signatureLength { - t.Fatalf("failed with seed %d: signature len %d.", seed, len(decrypted.Signature)) - } - if !IsPubKeyEqual(decrypted.Src, ¶ms.Src.PublicKey) { - t.Fatalf("failed with seed %d: signature mismatch.", seed) - } -} - -func TestMessageEncryption(t *testing.T) { - InitSingleTest() - - var symmetric bool - for i := 0; i < 256; i++ { - singleMessageTest(t, symmetric) - symmetric = !symmetric - } -} - -func TestMessageWrap(t *testing.T) { - seed = int64(1777444222) - mrand.Seed(seed) - target := 128.0 - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.TTL = 1 - params.WorkTime = 12 - params.PoW = target - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - pow := env.PoW() - if pow < target { - t.Fatalf("failed Wrap with seed %d: pow < target (%f vs. %f).", seed, pow, target) - } - - // set PoW target too high, expect error - msg2, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.TTL = 1000000 - params.WorkTime = 1 - params.PoW = 10000000.0 - _, err = msg2.Wrap(params) - if err == nil { - t.Fatalf("unexpectedly reached the PoW target with seed %d.", seed) - } -} - -func TestMessageSeal(t *testing.T) { - // this test depends on deterministic choice of seed (1976726903) - seed = int64(1976726903) - mrand.Seed(seed) - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.TTL = 1 - aesnonce := make([]byte, 12) - mrand.Read(aesnonce) - - env := NewEnvelope(params.TTL, params.Topic, aesnonce, msg) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - env.Expiry = uint32(seed) // make it deterministic - target := 32.0 - params.WorkTime = 4 - params.PoW = target - env.Seal(params) - - env.calculatePoW(0) - pow := env.PoW() - if pow < target { - t.Fatalf("failed Wrap with seed %d: pow < target (%f vs. %f).", seed, pow, target) - } - - params.WorkTime = 1 - params.PoW = 1000000000.0 - env.Seal(params) - env.calculatePoW(0) - pow = env.PoW() - if pow < 2*target { - t.Fatalf("failed Wrap with seed %d: pow too small %f.", seed, pow) - } -} - -func TestEnvelopeOpen(t *testing.T) { - InitSingleTest() - - var symmetric bool - for i := 0; i < 256; i++ { - singleEnvelopeOpenTest(t, symmetric) - symmetric = !symmetric - } -} - -func singleEnvelopeOpenTest(t *testing.T, symmetric bool) { - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - key, err := crypto.GenerateKey() - if err != nil { - t.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) - } - - if !symmetric { - params.KeySym = nil - params.Dst = &key.PublicKey - } - - text := make([]byte, 0, 512) - text = append(text, params.Payload...) - - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - f := Filter{KeyAsym: key, KeySym: params.KeySym} - decrypted := env.Open(&f) - if decrypted == nil { - t.Fatalf("failed to open with seed %d.", seed) - } - - if !bytes.Equal(text, decrypted.Payload) { - t.Fatalf("failed with seed %d: compare payload.", seed) - } - if !isMessageSigned(decrypted.Raw[0]) { - t.Fatalf("failed with seed %d: unsigned.", seed) - } - if len(decrypted.Signature) != signatureLength { - t.Fatalf("failed with seed %d: signature len %d.", seed, len(decrypted.Signature)) - } - if !IsPubKeyEqual(decrypted.Src, ¶ms.Src.PublicKey) { - t.Fatalf("failed with seed %d: signature mismatch.", seed) - } - if decrypted.isAsymmetricEncryption() == symmetric { - t.Fatalf("failed with seed %d: asymmetric %v vs. %v.", seed, decrypted.isAsymmetricEncryption(), symmetric) - } - if decrypted.isSymmetricEncryption() != symmetric { - t.Fatalf("failed with seed %d: symmetric %v vs. %v.", seed, decrypted.isSymmetricEncryption(), symmetric) - } - if !symmetric { - if decrypted.Dst == nil { - t.Fatalf("failed with seed %d: dst is nil.", seed) - } - if !IsPubKeyEqual(decrypted.Dst, &key.PublicKey) { - t.Fatalf("failed with seed %d: Dst.", seed) - } - } -} - -func TestEncryptWithZeroKey(t *testing.T) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.KeySym = make([]byte, aesKeyLength) - _, err = msg.Wrap(params) - if err == nil { - t.Fatalf("wrapped with zero key, seed: %d.", seed) - } - - params, err = generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, err = NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.KeySym = make([]byte, 0) - _, err = msg.Wrap(params) - if err == nil { - t.Fatalf("wrapped with empty key, seed: %d.", seed) - } - - params, err = generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, err = NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - params.KeySym = nil - _, err = msg.Wrap(params) - if err == nil { - t.Fatalf("wrapped with nil key, seed: %d.", seed) - } -} - -func TestRlpEncode(t *testing.T) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("wrapped with zero key, seed: %d.", seed) - } - - raw, err := rlp.EncodeToBytes(env) - if err != nil { - t.Fatalf("RLP encode failed: %s.", err) - } - - var decoded Envelope - rlp.DecodeBytes(raw, &decoded) - if err != nil { - t.Fatalf("RLP decode failed: %s.", err) - } - - he := env.Hash() - hd := decoded.Hash() - - if he != hd { - t.Fatalf("Hashes are not equal: %x vs. %x", he, hd) - } -} - -func singlePaddingTest(t *testing.T, padSize int) { - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d and sz=%d: %s.", seed, padSize, err) - } - params.Padding = make([]byte, padSize) - params.PoW = 0.0000000001 - pad := make([]byte, padSize) - _, err = mrand.Read(pad) - if err != nil { - t.Fatalf("padding is not generated (seed %d): %s", seed, err) - } - n := copy(params.Padding, pad) - if n != padSize { - t.Fatalf("padding is not copied (seed %d): %s", seed, err) - } - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed to wrap, seed: %d and sz=%d.", seed, padSize) - } - f := Filter{KeySym: params.KeySym} - decrypted := env.Open(&f) - if decrypted == nil { - t.Fatalf("failed to open, seed and sz=%d: %d.", seed, padSize) - } - if !bytes.Equal(pad, decrypted.Padding) { - t.Fatalf("padding is not retireved as expected with seed %d and sz=%d:\n[%x]\n[%x].", seed, padSize, pad, decrypted.Padding) - } -} - -func TestPadding(t *testing.T) { - InitSingleTest() - - for i := 1; i < 260; i++ { - singlePaddingTest(t, i) - } - - lim := 256 * 256 - for i := lim - 5; i < lim+2; i++ { - singlePaddingTest(t, i) - } - - for i := 0; i < 256; i++ { - n := mrand.Intn(256*254) + 256 - singlePaddingTest(t, n) - } - - for i := 0; i < 256; i++ { - n := mrand.Intn(256*1024) + 256*256 - singlePaddingTest(t, n) - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer.go deleted file mode 100644 index 2bb5677c..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "fmt" - "time" - - mapset "github.com/deckarep/golang-set" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rlp" -) - -// Peer represents a whisper protocol peer connection. -type Peer struct { - host *Whisper - peer *p2p.Peer - ws p2p.MsgReadWriter - trusted bool - - known mapset.Set // Messages already known by the peer to avoid wasting bandwidth - - quit chan struct{} -} - -// newPeer creates a new whisper peer object, but does not run the handshake itself. -func newPeer(host *Whisper, remote *p2p.Peer, rw p2p.MsgReadWriter) *Peer { - return &Peer{ - host: host, - peer: remote, - ws: rw, - trusted: false, - known: mapset.NewSet(), - quit: make(chan struct{}), - } -} - -// start initiates the peer updater, periodically broadcasting the whisper packets -// into the network. -func (peer *Peer) start() { - go peer.update() - log.Trace("start", "peer", peer.ID()) -} - -// stop terminates the peer updater, stopping message forwarding to it. -func (peer *Peer) stop() { - close(peer.quit) - log.Trace("stop", "peer", peer.ID()) -} - -// handshake sends the protocol initiation status message to the remote peer and -// verifies the remote status too. -func (peer *Peer) handshake() error { - // Send the handshake status message asynchronously - errc := make(chan error, 1) - go func() { - errc <- p2p.Send(peer.ws, statusCode, ProtocolVersion) - }() - // Fetch the remote status packet and verify protocol match - packet, err := peer.ws.ReadMsg() - if err != nil { - return err - } - if packet.Code != statusCode { - return fmt.Errorf("peer [%x] sent packet %x before status packet", peer.ID(), packet.Code) - } - s := rlp.NewStream(packet.Payload, uint64(packet.Size)) - peerVersion, err := s.Uint() - if err != nil { - return fmt.Errorf("peer [%x] sent bad status message: %v", peer.ID(), err) - } - if peerVersion != ProtocolVersion { - return fmt.Errorf("peer [%x]: protocol version mismatch %d != %d", peer.ID(), peerVersion, ProtocolVersion) - } - // Wait until out own status is consumed too - if err := <-errc; err != nil { - return fmt.Errorf("peer [%x] failed to send status packet: %v", peer.ID(), err) - } - return nil -} - -// update executes periodic operations on the peer, including message transmission -// and expiration. -func (peer *Peer) update() { - // Start the tickers for the updates - expire := time.NewTicker(expirationCycle) - transmit := time.NewTicker(transmissionCycle) - - // Loop and transmit until termination is requested - for { - select { - case <-expire.C: - peer.expire() - - case <-transmit.C: - if err := peer.broadcast(); err != nil { - log.Trace("broadcast failed", "reason", err, "peer", peer.ID()) - return - } - - case <-peer.quit: - return - } - } -} - -// mark marks an envelope known to the peer so that it won't be sent back. -func (peer *Peer) mark(envelope *Envelope) { - peer.known.Add(envelope.Hash()) -} - -// marked checks if an envelope is already known to the remote peer. -func (peer *Peer) marked(envelope *Envelope) bool { - return peer.known.Contains(envelope.Hash()) -} - -// expire iterates over all the known envelopes in the host and removes all -// expired (unknown) ones from the known list. -func (peer *Peer) expire() { - unmark := make(map[common.Hash]struct{}) - peer.known.Each(func(v interface{}) bool { - if !peer.host.isEnvelopeCached(v.(common.Hash)) { - unmark[v.(common.Hash)] = struct{}{} - } - return true - }) - // Dump all known but no longer cached - for hash := range unmark { - peer.known.Remove(hash) - } -} - -// broadcast iterates over the collection of envelopes and transmits yet unknown -// ones over the network. -func (peer *Peer) broadcast() error { - var cnt int - envelopes := peer.host.Envelopes() - for _, envelope := range envelopes { - if !peer.marked(envelope) { - err := p2p.Send(peer.ws, messagesCode, envelope) - if err != nil { - return err - } else { - peer.mark(envelope) - cnt++ - } - } - } - if cnt > 0 { - log.Trace("broadcast", "num. messages", cnt) - } - return nil -} - -func (peer *Peer) ID() []byte { - id := peer.peer.ID() - return id[:] -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer_test.go deleted file mode 100644 index 24495320..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/peer_test.go +++ /dev/null @@ -1,297 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "bytes" - "crypto/ecdsa" - "net" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nat" -) - -var keys = []string{ - "d49dcf37238dc8a7aac57dc61b9fee68f0a97f062968978b9fafa7d1033d03a9", - "73fd6143c48e80ed3c56ea159fe7494a0b6b393a392227b422f4c3e8f1b54f98", - "119dd32adb1daa7a4c7bf77f847fb28730785aa92947edf42fdd997b54de40dc", - "deeda8709dea935bb772248a3144dea449ffcc13e8e5a1fd4ef20ce4e9c87837", - "5bd208a079633befa349441bdfdc4d85ba9bd56081525008380a63ac38a407cf", - "1d27fb4912002d58a2a42a50c97edb05c1b3dffc665dbaa42df1fe8d3d95c9b5", - "15def52800c9d6b8ca6f3066b7767a76afc7b611786c1276165fbc61636afb68", - "51be6ab4b2dc89f251ff2ace10f3c1cc65d6855f3e083f91f6ff8efdfd28b48c", - "ef1ef7441bf3c6419b162f05da6037474664f198b58db7315a6f4de52414b4a0", - "09bdf6985aabc696dc1fbeb5381aebd7a6421727343872eb2fadfc6d82486fd9", - "15d811bf2e01f99a224cdc91d0cf76cea08e8c67905c16fee9725c9be71185c4", - "2f83e45cf1baaea779789f755b7da72d8857aeebff19362dd9af31d3c9d14620", - "73f04e34ac6532b19c2aae8f8e52f38df1ac8f5cd10369f92325b9b0494b0590", - "1e2e07b69e5025537fb73770f483dc8d64f84ae3403775ef61cd36e3faf162c1", - "8963d9bbb3911aac6d30388c786756b1c423c4fbbc95d1f96ddbddf39809e43a", - "0422da85abc48249270b45d8de38a4cc3c02032ede1fcf0864a51092d58a2f1f", - "8ae5c15b0e8c7cade201fdc149831aa9b11ff626a7ffd27188886cc108ad0fa8", - "acd8f5a71d4aecfcb9ad00d32aa4bcf2a602939b6a9dd071bab443154184f805", - "a285a922125a7481600782ad69debfbcdb0316c1e97c267aff29ef50001ec045", - "28fd4eee78c6cd4bf78f39f8ab30c32c67c24a6223baa40e6f9c9a0e1de7cef5", - "c5cca0c9e6f043b288c6f1aef448ab59132dab3e453671af5d0752961f013fc7", - "46df99b051838cb6f8d1b73f232af516886bd8c4d0ee07af9a0a033c391380fd", - "c6a06a53cbaadbb432884f36155c8f3244e244881b5ee3e92e974cfa166d793f", - "783b90c75c63dc72e2f8d11b6f1b4de54d63825330ec76ee8db34f06b38ea211", - "9450038f10ca2c097a8013e5121b36b422b95b04892232f930a29292d9935611", - "e215e6246ed1cfdcf7310d4d8cdbe370f0d6a8371e4eb1089e2ae05c0e1bc10f", - "487110939ed9d64ebbc1f300adeab358bc58875faf4ca64990fbd7fe03b78f2b", - "824a70ea76ac81366da1d4f4ac39de851c8ac49dca456bb3f0a186ceefa269a5", - "ba8f34fa40945560d1006a328fe70c42e35cc3d1017e72d26864cd0d1b150f15", - "30a5dfcfd144997f428901ea88a43c8d176b19c79dde54cc58eea001aa3d246c", - "de59f7183aca39aa245ce66a05245fecfc7e2c75884184b52b27734a4a58efa2", - "92629e2ff5f0cb4f5f08fffe0f64492024d36f045b901efb271674b801095c5a", - "7184c1701569e3a4c4d2ddce691edd983b81e42e09196d332e1ae2f1e062cff4", -} - -const NumNodes = 16 // must not exceed the number of keys (32) - -type TestData struct { - counter [NumNodes]int - mutex sync.RWMutex -} - -type TestNode struct { - shh *Whisper - id *ecdsa.PrivateKey - server *p2p.Server - filerId string -} - -var result TestData -var nodes [NumNodes]*TestNode -var sharedKey = []byte("some arbitrary data here") -var sharedTopic TopicType = TopicType{0xF, 0x1, 0x2, 0} -var expectedMessage = []byte("per rectum ad astra") - -// This test does the following: -// 1. creates a chain of whisper nodes, -// 2. installs the filters with shared (predefined) parameters, -// 3. each node sends a number of random (undecryptable) messages, -// 4. first node sends one expected (decryptable) message, -// 5. checks if each node have received and decrypted exactly one message. -func TestSimulation(t *testing.T) { - initialize(t) - - for i := 0; i < NumNodes; i++ { - sendMsg(t, false, i) - } - - sendMsg(t, true, 0) - checkPropagation(t) - stopServers() -} - -func initialize(t *testing.T) { - var err error - - for i := 0; i < NumNodes; i++ { - var node TestNode - node.shh = New(&DefaultConfig) - node.shh.SetMinimumPoW(0.00000001) - node.shh.Start(nil) - topics := make([]TopicType, 0) - topics = append(topics, sharedTopic) - f := Filter{KeySym: sharedKey} - f.Topics = [][]byte{topics[0][:]} - node.filerId, err = node.shh.Subscribe(&f) - if err != nil { - t.Fatalf("failed to install the filter: %s.", err) - } - node.id, err = crypto.HexToECDSA(keys[i]) - if err != nil { - t.Fatalf("failed convert the key: %s.", keys[i]) - } - name := common.MakeName("whisper-go", "2.0") - node.server = &p2p.Server{ - Config: p2p.Config{ - PrivateKey: node.id, - MaxPeers: NumNodes/2 + 1, - Name: name, - Protocols: node.shh.Protocols(), - ListenAddr: "127.0.0.1:0", - NAT: nat.Any(), - }, - } - - err = node.server.Start() - if err != nil { - t.Fatalf("failed to start server %d. err: %v", i, err) - } - - for j := 0; j < i; j++ { - peerNodeId := nodes[j].id - address, _ := net.ResolveTCPAddr("tcp", nodes[j].server.ListenAddr) - peerPort := uint16(address.Port) - peer := enode.NewV4(&peerNodeId.PublicKey, address.IP, int(peerPort), int(peerPort)) - node.server.AddPeer(peer) - } - - nodes[i] = &node - } -} - -func stopServers() { - for i := 0; i < NumNodes; i++ { - n := nodes[i] - if n != nil { - n.shh.Unsubscribe(n.filerId) - n.shh.Stop() - n.server.Stop() - } - } -} - -func checkPropagation(t *testing.T) { - if t.Failed() { - return - } - - const cycle = 100 - const iterations = 100 - - for j := 0; j < iterations; j++ { - time.Sleep(cycle * time.Millisecond) - - for i := 0; i < NumNodes; i++ { - f := nodes[i].shh.GetFilter(nodes[i].filerId) - if f == nil { - t.Fatalf("failed to get filterId %s from node %d.", nodes[i].filerId, i) - } - - mail := f.Retrieve() - if !validateMail(t, i, mail) { - return - } - - if isTestComplete() { - return - } - } - } - - t.Fatalf("Test was not complete: timeout %d seconds.", iterations*cycle/1000) -} - -func validateMail(t *testing.T, index int, mail []*ReceivedMessage) bool { - var cnt int - for _, m := range mail { - if bytes.Equal(m.Payload, expectedMessage) { - cnt++ - } - } - - if cnt == 0 { - // no messages received yet: nothing is wrong - return true - } - if cnt > 1 { - t.Fatalf("node %d received %d.", index, cnt) - return false - } - - if cnt > 0 { - result.mutex.Lock() - defer result.mutex.Unlock() - result.counter[index] += cnt - if result.counter[index] > 1 { - t.Fatalf("node %d accumulated %d.", index, result.counter[index]) - } - } - return true -} - -func isTestComplete() bool { - result.mutex.RLock() - defer result.mutex.RUnlock() - - for i := 0; i < NumNodes; i++ { - if result.counter[i] < 1 { - return false - } - } - - for i := 0; i < NumNodes; i++ { - envelopes := nodes[i].shh.Envelopes() - if len(envelopes) < 2 { - return false - } - } - - return true -} - -func sendMsg(t *testing.T, expected bool, id int) { - if t.Failed() { - return - } - - opt := MessageParams{KeySym: sharedKey, Topic: sharedTopic, Payload: expectedMessage, PoW: 0.00000001, WorkTime: 1} - if !expected { - opt.KeySym[0]++ - opt.Topic[0]++ - opt.Payload = opt.Payload[1:] - } - - msg, err := NewSentMessage(&opt) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - envelope, err := msg.Wrap(&opt) - if err != nil { - t.Fatalf("failed to seal message: %s", err) - } - - err = nodes[id].shh.Send(envelope) - if err != nil { - t.Fatalf("failed to send message: %s", err) - } -} - -func TestPeerBasic(t *testing.T) { - InitSingleTest() - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d.", seed) - } - - params.PoW = 0.001 - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d.", seed) - } - - p := newPeer(nil, nil, nil) - p.mark(env) - if !p.marked(env) { - t.Fatalf("failed mark with seed %d.", seed) - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic.go deleted file mode 100644 index c4eda1db..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Contains the Whisper protocol Topic element. - -package whisperv5 - -import ( - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" -) - -// TopicType represents a cryptographically secure, probabilistic partial -// classifications of a message, determined as the first (left) 4 bytes of the -// SHA3 hash of some arbitrary data given by the original author of the message. -type TopicType [TopicLength]byte - -func BytesToTopic(b []byte) (t TopicType) { - sz := TopicLength - if x := len(b); x < TopicLength { - sz = x - } - for i := 0; i < sz; i++ { - t[i] = b[i] - } - return t -} - -// String converts a topic byte array to a string representation. -func (t *TopicType) String() string { - return common.ToHex(t[:]) -} - -// MarshalText returns the hex representation of t. -func (t TopicType) MarshalText() ([]byte, error) { - return hexutil.Bytes(t[:]).MarshalText() -} - -// UnmarshalText parses a hex representation to a topic. -func (t *TopicType) UnmarshalText(input []byte) error { - return hexutil.UnmarshalFixedText("Topic", input, t[:]) -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic_test.go deleted file mode 100644 index 54bbeaf8..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/topic_test.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "encoding/json" - "testing" -) - -var topicStringTests = []struct { - topic TopicType - str string -}{ - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, str: "0x00000000"}, - {topic: TopicType{0x00, 0x7f, 0x80, 0xff}, str: "0x007f80ff"}, - {topic: TopicType{0xff, 0x80, 0x7f, 0x00}, str: "0xff807f00"}, - {topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, str: "0xf26e7779"}, -} - -func TestTopicString(t *testing.T) { - for i, tst := range topicStringTests { - s := tst.topic.String() - if s != tst.str { - t.Fatalf("failed test %d: have %s, want %s.", i, s, tst.str) - } - } -} - -var bytesToTopicTests = []struct { - data []byte - topic TopicType -}{ - {topic: TopicType{0x8f, 0x9a, 0x2b, 0x7d}, data: []byte{0x8f, 0x9a, 0x2b, 0x7d}}, - {topic: TopicType{0x00, 0x7f, 0x80, 0xff}, data: []byte{0x00, 0x7f, 0x80, 0xff}}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{0x00, 0x00, 0x00, 0x00}}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{0x00, 0x00, 0x00}}, - {topic: TopicType{0x01, 0x00, 0x00, 0x00}, data: []byte{0x01}}, - {topic: TopicType{0x00, 0xfe, 0x00, 0x00}, data: []byte{0x00, 0xfe}}, - {topic: TopicType{0xea, 0x1d, 0x43, 0x00}, data: []byte{0xea, 0x1d, 0x43}}, - {topic: TopicType{0x6f, 0x3c, 0xb0, 0xdd}, data: []byte{0x6f, 0x3c, 0xb0, 0xdd, 0x0f, 0x00, 0x90}}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte{}}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: nil}, -} - -var unmarshalTestsGood = []struct { - topic TopicType - data []byte -}{ - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x00000000"`)}, - {topic: TopicType{0x00, 0x7f, 0x80, 0xff}, data: []byte(`"0x007f80ff"`)}, - {topic: TopicType{0xff, 0x80, 0x7f, 0x00}, data: []byte(`"0xff807f00"`)}, - {topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, data: []byte(`"0xf26e7779"`)}, -} - -var unmarshalTestsBad = []struct { - topic TopicType - data []byte -}{ - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x0000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x000000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0x0000000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"000000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"0000000000"`)}, - {topic: TopicType{0x00, 0x00, 0x00, 0x00}, data: []byte(`"abcdefg0"`)}, -} - -var unmarshalTestsUgly = []struct { - topic TopicType - data []byte -}{ - {topic: TopicType{0x01, 0x00, 0x00, 0x00}, data: []byte(`"0x00000001"`)}, -} - -func TestBytesToTopic(t *testing.T) { - for i, tst := range bytesToTopicTests { - top := BytesToTopic(tst.data) - if top != tst.topic { - t.Fatalf("failed test %d: have %v, want %v.", i, t, tst.topic) - } - } -} - -func TestUnmarshalTestsGood(t *testing.T) { - for i, tst := range unmarshalTestsGood { - var top TopicType - err := json.Unmarshal(tst.data, &top) - if err != nil { - t.Errorf("failed test %d. input: %v. err: %v", i, tst.data, err) - } else if top != tst.topic { - t.Errorf("failed test %d: have %v, want %v.", i, t, tst.topic) - } - } -} - -func TestUnmarshalTestsBad(t *testing.T) { - // in this test UnmarshalJSON() is supposed to fail - for i, tst := range unmarshalTestsBad { - var top TopicType - err := json.Unmarshal(tst.data, &top) - if err == nil { - t.Fatalf("failed test %d. input: %v.", i, tst.data) - } - } -} - -func TestUnmarshalTestsUgly(t *testing.T) { - // in this test UnmarshalJSON() is NOT supposed to fail, but result should be wrong - for i, tst := range unmarshalTestsUgly { - var top TopicType - err := json.Unmarshal(tst.data, &top) - if err != nil { - t.Errorf("failed test %d. input: %v.", i, tst.data) - } else if top == tst.topic { - t.Errorf("failed test %d: have %v, want %v.", i, top, tst.topic) - } - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper.go deleted file mode 100644 index 46554582..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper.go +++ /dev/null @@ -1,855 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "bytes" - "crypto/ecdsa" - crand "crypto/rand" - "crypto/sha256" - "fmt" - "runtime" - "sync" - "time" - - mapset "github.com/deckarep/golang-set" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rpc" - "github.com/syndtr/goleveldb/leveldb/errors" - "golang.org/x/crypto/pbkdf2" - "golang.org/x/sync/syncmap" -) - -type Statistics struct { - messagesCleared int - memoryCleared int - memoryUsed int - cycles int - totalMessagesCleared int -} - -const ( - minPowIdx = iota // Minimal PoW required by the whisper node - maxMsgSizeIdx = iota // Maximal message length allowed by the whisper node - overflowIdx = iota // Indicator of message queue overflow -) - -// Whisper represents a dark communication interface through the Ethereum -// network, using its very own P2P communication layer. -type Whisper struct { - protocol p2p.Protocol // Protocol description and parameters - filters *Filters // Message filters installed with Subscribe function - - privateKeys map[string]*ecdsa.PrivateKey // Private key storage - symKeys map[string][]byte // Symmetric key storage - keyMu sync.RWMutex // Mutex associated with key storages - - poolMu sync.RWMutex // Mutex to sync the message and expiration pools - envelopes map[common.Hash]*Envelope // Pool of envelopes currently tracked by this node - expirations map[uint32]mapset.Set // Message expiration pool - - peerMu sync.RWMutex // Mutex to sync the active peer set - peers map[*Peer]struct{} // Set of currently active peers - - messageQueue chan *Envelope // Message queue for normal whisper messages - p2pMsgQueue chan *Envelope // Message queue for peer-to-peer messages (not to be forwarded any further) - quit chan struct{} // Channel used for graceful exit - - settings syncmap.Map // holds configuration settings that can be dynamically changed - - statsMu sync.Mutex // guard stats - stats Statistics // Statistics of whisper node - - mailServer MailServer // MailServer interface -} - -// New creates a Whisper client ready to communicate through the Ethereum P2P network. -func New(cfg *Config) *Whisper { - if cfg == nil { - cfg = &DefaultConfig - } - - whisper := &Whisper{ - privateKeys: make(map[string]*ecdsa.PrivateKey), - symKeys: make(map[string][]byte), - envelopes: make(map[common.Hash]*Envelope), - expirations: make(map[uint32]mapset.Set), - peers: make(map[*Peer]struct{}), - messageQueue: make(chan *Envelope, messageQueueLimit), - p2pMsgQueue: make(chan *Envelope, messageQueueLimit), - quit: make(chan struct{}), - } - - whisper.filters = NewFilters(whisper) - - whisper.settings.Store(minPowIdx, cfg.MinimumAcceptedPOW) - whisper.settings.Store(maxMsgSizeIdx, cfg.MaxMessageSize) - whisper.settings.Store(overflowIdx, false) - - // p2p whisper sub protocol handler - whisper.protocol = p2p.Protocol{ - Name: ProtocolName, - Version: uint(ProtocolVersion), - Length: NumberOfMessageCodes, - Run: whisper.HandlePeer, - NodeInfo: func() interface{} { - return map[string]interface{}{ - "version": ProtocolVersionStr, - "maxMessageSize": whisper.MaxMessageSize(), - "minimumPoW": whisper.MinPow(), - } - }, - } - - return whisper -} - -func (w *Whisper) MinPow() float64 { - val, _ := w.settings.Load(minPowIdx) - return val.(float64) -} - -// MaxMessageSize returns the maximum accepted message size. -func (w *Whisper) MaxMessageSize() uint32 { - val, _ := w.settings.Load(maxMsgSizeIdx) - return val.(uint32) -} - -// Overflow returns an indication if the message queue is full. -func (w *Whisper) Overflow() bool { - val, _ := w.settings.Load(overflowIdx) - return val.(bool) -} - -// APIs returns the RPC descriptors the Whisper implementation offers -func (w *Whisper) APIs() []rpc.API { - return []rpc.API{ - { - Namespace: ProtocolName, - Version: ProtocolVersionStr, - Service: NewPublicWhisperAPI(w), - Public: true, - }, - } -} - -// RegisterServer registers MailServer interface. -// MailServer will process all the incoming messages with p2pRequestCode. -func (w *Whisper) RegisterServer(server MailServer) { - w.mailServer = server -} - -// Protocols returns the whisper sub-protocols ran by this particular client. -func (w *Whisper) Protocols() []p2p.Protocol { - return []p2p.Protocol{w.protocol} -} - -// Version returns the whisper sub-protocols version number. -func (w *Whisper) Version() uint { - return w.protocol.Version -} - -// SetMaxMessageSize sets the maximal message size allowed by this node -func (w *Whisper) SetMaxMessageSize(size uint32) error { - if size > MaxMessageSize { - return fmt.Errorf("message size too large [%d>%d]", size, MaxMessageSize) - } - w.settings.Store(maxMsgSizeIdx, size) - return nil -} - -// SetMinimumPoW sets the minimal PoW required by this node -func (w *Whisper) SetMinimumPoW(val float64) error { - if val <= 0.0 { - return fmt.Errorf("invalid PoW: %f", val) - } - w.settings.Store(minPowIdx, val) - return nil -} - -// getPeer retrieves peer by ID -func (w *Whisper) getPeer(peerID []byte) (*Peer, error) { - w.peerMu.Lock() - defer w.peerMu.Unlock() - for p := range w.peers { - id := p.peer.ID() - if bytes.Equal(peerID, id[:]) { - return p, nil - } - } - return nil, fmt.Errorf("Could not find peer with ID: %x", peerID) -} - -// AllowP2PMessagesFromPeer marks specific peer trusted, -// which will allow it to send historic (expired) messages. -func (w *Whisper) AllowP2PMessagesFromPeer(peerID []byte) error { - p, err := w.getPeer(peerID) - if err != nil { - return err - } - p.trusted = true - return nil -} - -// RequestHistoricMessages sends a message with p2pRequestCode to a specific peer, -// which is known to implement MailServer interface, and is supposed to process this -// request and respond with a number of peer-to-peer messages (possibly expired), -// which are not supposed to be forwarded any further. -// The whisper protocol is agnostic of the format and contents of envelope. -func (w *Whisper) RequestHistoricMessages(peerID []byte, envelope *Envelope) error { - p, err := w.getPeer(peerID) - if err != nil { - return err - } - p.trusted = true - return p2p.Send(p.ws, p2pRequestCode, envelope) -} - -// SendP2PMessage sends a peer-to-peer message to a specific peer. -func (w *Whisper) SendP2PMessage(peerID []byte, envelope *Envelope) error { - p, err := w.getPeer(peerID) - if err != nil { - return err - } - return w.SendP2PDirect(p, envelope) -} - -// SendP2PDirect sends a peer-to-peer message to a specific peer. -func (w *Whisper) SendP2PDirect(peer *Peer, envelope *Envelope) error { - return p2p.Send(peer.ws, p2pCode, envelope) -} - -// NewKeyPair generates a new cryptographic identity for the client, and injects -// it into the known identities for message decryption. Returns ID of the new key pair. -func (w *Whisper) NewKeyPair() (string, error) { - key, err := crypto.GenerateKey() - if err != nil || !validatePrivateKey(key) { - key, err = crypto.GenerateKey() // retry once - } - if err != nil { - return "", err - } - if !validatePrivateKey(key) { - return "", fmt.Errorf("failed to generate valid key") - } - - id, err := GenerateRandomID() - if err != nil { - return "", fmt.Errorf("failed to generate ID: %s", err) - } - - w.keyMu.Lock() - defer w.keyMu.Unlock() - - if w.privateKeys[id] != nil { - return "", fmt.Errorf("failed to generate unique ID") - } - w.privateKeys[id] = key - return id, nil -} - -// DeleteKeyPair deletes the specified key if it exists. -func (w *Whisper) DeleteKeyPair(key string) bool { - w.keyMu.Lock() - defer w.keyMu.Unlock() - - if w.privateKeys[key] != nil { - delete(w.privateKeys, key) - return true - } - return false -} - -// AddKeyPair imports a asymmetric private key and returns it identifier. -func (w *Whisper) AddKeyPair(key *ecdsa.PrivateKey) (string, error) { - id, err := GenerateRandomID() - if err != nil { - return "", fmt.Errorf("failed to generate ID: %s", err) - } - - w.keyMu.Lock() - w.privateKeys[id] = key - w.keyMu.Unlock() - - return id, nil -} - -// HasKeyPair checks if the whisper node is configured with the private key -// of the specified public pair. -func (w *Whisper) HasKeyPair(id string) bool { - w.keyMu.RLock() - defer w.keyMu.RUnlock() - return w.privateKeys[id] != nil -} - -// GetPrivateKey retrieves the private key of the specified identity. -func (w *Whisper) GetPrivateKey(id string) (*ecdsa.PrivateKey, error) { - w.keyMu.RLock() - defer w.keyMu.RUnlock() - key := w.privateKeys[id] - if key == nil { - return nil, fmt.Errorf("invalid id") - } - return key, nil -} - -// GenerateSymKey generates a random symmetric key and stores it under id, -// which is then returned. Will be used in the future for session key exchange. -func (w *Whisper) GenerateSymKey() (string, error) { - key := make([]byte, aesKeyLength) - _, err := crand.Read(key) - if err != nil { - return "", err - } else if !validateSymmetricKey(key) { - return "", fmt.Errorf("error in GenerateSymKey: crypto/rand failed to generate random data") - } - - id, err := GenerateRandomID() - if err != nil { - return "", fmt.Errorf("failed to generate ID: %s", err) - } - - w.keyMu.Lock() - defer w.keyMu.Unlock() - - if w.symKeys[id] != nil { - return "", fmt.Errorf("failed to generate unique ID") - } - w.symKeys[id] = key - return id, nil -} - -// AddSymKeyDirect stores the key, and returns its id. -func (w *Whisper) AddSymKeyDirect(key []byte) (string, error) { - if len(key) != aesKeyLength { - return "", fmt.Errorf("wrong key size: %d", len(key)) - } - - id, err := GenerateRandomID() - if err != nil { - return "", fmt.Errorf("failed to generate ID: %s", err) - } - - w.keyMu.Lock() - defer w.keyMu.Unlock() - - if w.symKeys[id] != nil { - return "", fmt.Errorf("failed to generate unique ID") - } - w.symKeys[id] = key - return id, nil -} - -// AddSymKeyFromPassword generates the key from password, stores it, and returns its id. -func (w *Whisper) AddSymKeyFromPassword(password string) (string, error) { - id, err := GenerateRandomID() - if err != nil { - return "", fmt.Errorf("failed to generate ID: %s", err) - } - if w.HasSymKey(id) { - return "", fmt.Errorf("failed to generate unique ID") - } - - derived, err := deriveKeyMaterial([]byte(password), EnvelopeVersion) - if err != nil { - return "", err - } - - w.keyMu.Lock() - defer w.keyMu.Unlock() - - // double check is necessary, because deriveKeyMaterial() is very slow - if w.symKeys[id] != nil { - return "", fmt.Errorf("critical error: failed to generate unique ID") - } - w.symKeys[id] = derived - return id, nil -} - -// HasSymKey returns true if there is a key associated with the given id. -// Otherwise returns false. -func (w *Whisper) HasSymKey(id string) bool { - w.keyMu.RLock() - defer w.keyMu.RUnlock() - return w.symKeys[id] != nil -} - -// DeleteSymKey deletes the key associated with the name string if it exists. -func (w *Whisper) DeleteSymKey(id string) bool { - w.keyMu.Lock() - defer w.keyMu.Unlock() - if w.symKeys[id] != nil { - delete(w.symKeys, id) - return true - } - return false -} - -// GetSymKey returns the symmetric key associated with the given id. -func (w *Whisper) GetSymKey(id string) ([]byte, error) { - w.keyMu.RLock() - defer w.keyMu.RUnlock() - if w.symKeys[id] != nil { - return w.symKeys[id], nil - } - return nil, fmt.Errorf("non-existent key ID") -} - -// Subscribe installs a new message handler used for filtering, decrypting -// and subsequent storing of incoming messages. -func (w *Whisper) Subscribe(f *Filter) (string, error) { - return w.filters.Install(f) -} - -// GetFilter returns the filter by id. -func (w *Whisper) GetFilter(id string) *Filter { - return w.filters.Get(id) -} - -// Unsubscribe removes an installed message handler. -func (w *Whisper) Unsubscribe(id string) error { - ok := w.filters.Uninstall(id) - if !ok { - return fmt.Errorf("Unsubscribe: Invalid ID") - } - return nil -} - -// Send injects a message into the whisper send queue, to be distributed in the -// network in the coming cycles. -func (w *Whisper) Send(envelope *Envelope) error { - ok, err := w.add(envelope) - if err != nil { - return err - } - if !ok { - return fmt.Errorf("failed to add envelope") - } - return err -} - -// Start implements node.Service, starting the background data propagation thread -// of the Whisper protocol. -func (w *Whisper) Start(*p2p.Server) error { - log.Info("started whisper v." + ProtocolVersionStr) - go w.update() - - numCPU := runtime.NumCPU() - for i := 0; i < numCPU; i++ { - go w.processQueue() - } - - return nil -} - -// Stop implements node.Service, stopping the background data propagation thread -// of the Whisper protocol. -func (w *Whisper) Stop() error { - close(w.quit) - log.Info("whisper stopped") - return nil -} - -// HandlePeer is called by the underlying P2P layer when the whisper sub-protocol -// connection is negotiated. -func (w *Whisper) HandlePeer(peer *p2p.Peer, rw p2p.MsgReadWriter) error { - // Create the new peer and start tracking it - whisperPeer := newPeer(w, peer, rw) - - w.peerMu.Lock() - w.peers[whisperPeer] = struct{}{} - w.peerMu.Unlock() - - defer func() { - w.peerMu.Lock() - delete(w.peers, whisperPeer) - w.peerMu.Unlock() - }() - - // Run the peer handshake and state updates - if err := whisperPeer.handshake(); err != nil { - return err - } - whisperPeer.start() - defer whisperPeer.stop() - - return w.runMessageLoop(whisperPeer, rw) -} - -// runMessageLoop reads and processes inbound messages directly to merge into client-global state. -func (w *Whisper) runMessageLoop(p *Peer, rw p2p.MsgReadWriter) error { - for { - // fetch the next packet - packet, err := rw.ReadMsg() - if err != nil { - log.Info("message loop", "peer", p.peer.ID(), "err", err) - return err - } - if packet.Size > w.MaxMessageSize() { - log.Warn("oversized message received", "peer", p.peer.ID()) - return errors.New("oversized message received") - } - - switch packet.Code { - case statusCode: - // this should not happen, but no need to panic; just ignore this message. - log.Warn("unxepected status message received", "peer", p.peer.ID()) - case messagesCode: - // decode the contained envelopes - var envelope Envelope - if err := packet.Decode(&envelope); err != nil { - log.Warn("failed to decode envelope, peer will be disconnected", "peer", p.peer.ID(), "err", err) - return errors.New("invalid envelope") - } - cached, err := w.add(&envelope) - if err != nil { - log.Warn("bad envelope received, peer will be disconnected", "peer", p.peer.ID(), "err", err) - return errors.New("invalid envelope") - } - if cached { - p.mark(&envelope) - } - case p2pCode: - // peer-to-peer message, sent directly to peer bypassing PoW checks, etc. - // this message is not supposed to be forwarded to other peers, and - // therefore might not satisfy the PoW, expiry and other requirements. - // these messages are only accepted from the trusted peer. - if p.trusted { - var envelope Envelope - if err := packet.Decode(&envelope); err != nil { - log.Warn("failed to decode direct message, peer will be disconnected", "peer", p.peer.ID(), "err", err) - return errors.New("invalid direct message") - } - w.postEvent(&envelope, true) - } - case p2pRequestCode: - // Must be processed if mail server is implemented. Otherwise ignore. - if w.mailServer != nil { - var request Envelope - if err := packet.Decode(&request); err != nil { - log.Warn("failed to decode p2p request message, peer will be disconnected", "peer", p.peer.ID(), "err", err) - return errors.New("invalid p2p request") - } - w.mailServer.DeliverMail(p, &request) - } - default: - // New message types might be implemented in the future versions of Whisper. - // For forward compatibility, just ignore. - } - - packet.Discard() - } -} - -// add inserts a new envelope into the message pool to be distributed within the -// whisper network. It also inserts the envelope into the expiration pool at the -// appropriate time-stamp. In case of error, connection should be dropped. -func (w *Whisper) add(envelope *Envelope) (bool, error) { - now := uint32(time.Now().Unix()) - sent := envelope.Expiry - envelope.TTL - - if sent > now { - if sent-SynchAllowance > now { - return false, fmt.Errorf("envelope created in the future [%x]", envelope.Hash()) - } - // recalculate PoW, adjusted for the time difference, plus one second for latency - envelope.calculatePoW(sent - now + 1) - } - - if envelope.Expiry < now { - if envelope.Expiry+SynchAllowance*2 < now { - return false, fmt.Errorf("very old message") - } - log.Debug("expired envelope dropped", "hash", envelope.Hash().Hex()) - return false, nil // drop envelope without error - } - - if uint32(envelope.size()) > w.MaxMessageSize() { - return false, fmt.Errorf("huge messages are not allowed [%x]", envelope.Hash()) - } - - if len(envelope.Version) > 4 { - return false, fmt.Errorf("oversized version [%x]", envelope.Hash()) - } - - aesNonceSize := len(envelope.AESNonce) - if aesNonceSize != 0 && aesNonceSize != AESNonceLength { - // the standard AES GCM nonce size is 12 bytes, - // but constant gcmStandardNonceSize cannot be accessed (not exported) - return false, fmt.Errorf("wrong size of AESNonce: %d bytes [env: %x]", aesNonceSize, envelope.Hash()) - } - - if envelope.PoW() < w.MinPow() { - log.Debug("envelope with low PoW dropped", "PoW", envelope.PoW(), "hash", envelope.Hash().Hex()) - return false, nil // drop envelope without error - } - - hash := envelope.Hash() - - w.poolMu.Lock() - _, alreadyCached := w.envelopes[hash] - if !alreadyCached { - w.envelopes[hash] = envelope - if w.expirations[envelope.Expiry] == nil { - w.expirations[envelope.Expiry] = mapset.NewThreadUnsafeSet() - } - if !w.expirations[envelope.Expiry].Contains(hash) { - w.expirations[envelope.Expiry].Add(hash) - } - } - w.poolMu.Unlock() - - if alreadyCached { - log.Trace("whisper envelope already cached", "hash", envelope.Hash().Hex()) - } else { - log.Trace("cached whisper envelope", "hash", envelope.Hash().Hex()) - w.statsMu.Lock() - w.stats.memoryUsed += envelope.size() - w.statsMu.Unlock() - w.postEvent(envelope, false) // notify the local node about the new message - if w.mailServer != nil { - w.mailServer.Archive(envelope) - } - } - return true, nil -} - -// postEvent queues the message for further processing. -func (w *Whisper) postEvent(envelope *Envelope, isP2P bool) { - // if the version of incoming message is higher than - // currently supported version, we can not decrypt it, - // and therefore just ignore this message - if envelope.Ver() <= EnvelopeVersion { - if isP2P { - w.p2pMsgQueue <- envelope - } else { - w.checkOverflow() - w.messageQueue <- envelope - } - } -} - -// checkOverflow checks if message queue overflow occurs and reports it if necessary. -func (w *Whisper) checkOverflow() { - queueSize := len(w.messageQueue) - - if queueSize == messageQueueLimit { - if !w.Overflow() { - w.settings.Store(overflowIdx, true) - log.Warn("message queue overflow") - } - } else if queueSize <= messageQueueLimit/2 { - if w.Overflow() { - w.settings.Store(overflowIdx, false) - log.Warn("message queue overflow fixed (back to normal)") - } - } -} - -// processQueue delivers the messages to the watchers during the lifetime of the whisper node. -func (w *Whisper) processQueue() { - var e *Envelope - for { - select { - case <-w.quit: - return - - case e = <-w.messageQueue: - w.filters.NotifyWatchers(e, false) - - case e = <-w.p2pMsgQueue: - w.filters.NotifyWatchers(e, true) - } - } -} - -// update loops until the lifetime of the whisper node, updating its internal -// state by expiring stale messages from the pool. -func (w *Whisper) update() { - // Start a ticker to check for expirations - expire := time.NewTicker(expirationCycle) - - // Repeat updates until termination is requested - for { - select { - case <-expire.C: - w.expire() - - case <-w.quit: - return - } - } -} - -// expire iterates over all the expiration timestamps, removing all stale -// messages from the pools. -func (w *Whisper) expire() { - w.poolMu.Lock() - defer w.poolMu.Unlock() - - w.statsMu.Lock() - defer w.statsMu.Unlock() - w.stats.reset() - now := uint32(time.Now().Unix()) - for expiry, hashSet := range w.expirations { - if expiry < now { - // Dump all expired messages and remove timestamp - hashSet.Each(func(v interface{}) bool { - sz := w.envelopes[v.(common.Hash)].size() - delete(w.envelopes, v.(common.Hash)) - w.stats.messagesCleared++ - w.stats.memoryCleared += sz - w.stats.memoryUsed -= sz - return false - }) - w.expirations[expiry].Clear() - delete(w.expirations, expiry) - } - } -} - -// Stats returns the whisper node statistics. -func (w *Whisper) Stats() Statistics { - w.statsMu.Lock() - defer w.statsMu.Unlock() - - return w.stats -} - -// Envelopes retrieves all the messages currently pooled by the node. -func (w *Whisper) Envelopes() []*Envelope { - w.poolMu.RLock() - defer w.poolMu.RUnlock() - - all := make([]*Envelope, 0, len(w.envelopes)) - for _, envelope := range w.envelopes { - all = append(all, envelope) - } - return all -} - -// Messages iterates through all currently floating envelopes -// and retrieves all the messages, that this filter could decrypt. -func (w *Whisper) Messages(id string) []*ReceivedMessage { - result := make([]*ReceivedMessage, 0) - w.poolMu.RLock() - defer w.poolMu.RUnlock() - - if filter := w.filters.Get(id); filter != nil { - for _, env := range w.envelopes { - msg := filter.processEnvelope(env) - if msg != nil { - result = append(result, msg) - } - } - } - return result -} - -// isEnvelopeCached checks if envelope with specific hash has already been received and cached. -func (w *Whisper) isEnvelopeCached(hash common.Hash) bool { - w.poolMu.Lock() - defer w.poolMu.Unlock() - - _, exist := w.envelopes[hash] - return exist -} - -// reset resets the node's statistics after each expiry cycle. -func (s *Statistics) reset() { - s.cycles++ - s.totalMessagesCleared += s.messagesCleared - - s.memoryCleared = 0 - s.messagesCleared = 0 -} - -// ValidatePublicKey checks the format of the given public key. -func ValidatePublicKey(k *ecdsa.PublicKey) bool { - return k != nil && k.X != nil && k.Y != nil && k.X.Sign() != 0 && k.Y.Sign() != 0 -} - -// validatePrivateKey checks the format of the given private key. -func validatePrivateKey(k *ecdsa.PrivateKey) bool { - if k == nil || k.D == nil || k.D.Sign() == 0 { - return false - } - return ValidatePublicKey(&k.PublicKey) -} - -// validateSymmetricKey returns false if the key contains all zeros -func validateSymmetricKey(k []byte) bool { - return len(k) > 0 && !containsOnlyZeros(k) -} - -// containsOnlyZeros checks if the data contain only zeros. -func containsOnlyZeros(data []byte) bool { - for _, b := range data { - if b != 0 { - return false - } - } - return true -} - -// bytesToUintLittleEndian converts the slice to 64-bit unsigned integer. -func bytesToUintLittleEndian(b []byte) (res uint64) { - mul := uint64(1) - for i := 0; i < len(b); i++ { - res += uint64(b[i]) * mul - mul *= 256 - } - return res -} - -// BytesToUintBigEndian converts the slice to 64-bit unsigned integer. -func BytesToUintBigEndian(b []byte) (res uint64) { - for i := 0; i < len(b); i++ { - res *= 256 - res += uint64(b[i]) - } - return res -} - -// deriveKeyMaterial derives symmetric key material from the key or password. -// pbkdf2 is used for security, in case people use password instead of randomly generated keys. -func deriveKeyMaterial(key []byte, version uint64) (derivedKey []byte, err error) { - if version == 0 { - // kdf should run no less than 0.1 seconds on average compute, - // because it's a once in a session experience - derivedKey := pbkdf2.Key(key, nil, 65356, aesKeyLength, sha256.New) - return derivedKey, nil - } - return nil, unknownVersionError(version) -} - -// GenerateRandomID generates a random string, which is then returned to be used as a key id -func GenerateRandomID() (id string, err error) { - buf := make([]byte, keyIdSize) - _, err = crand.Read(buf) - if err != nil { - return "", err - } - if !validateSymmetricKey(buf) { - return "", fmt.Errorf("error in generateRandomID: crypto/rand failed to generate random data") - } - id = common.Bytes2Hex(buf) - return id, err -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper_test.go deleted file mode 100644 index a7bd17e4..00000000 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv5/whisper_test.go +++ /dev/null @@ -1,858 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package whisperv5 - -import ( - "bytes" - "crypto/ecdsa" - mrand "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" -) - -func TestWhisperBasic(t *testing.T) { - w := New(&DefaultConfig) - p := w.Protocols() - shh := p[0] - if shh.Name != ProtocolName { - t.Fatalf("failed Protocol Name: %v.", shh.Name) - } - if uint64(shh.Version) != ProtocolVersion { - t.Fatalf("failed Protocol Version: %v.", shh.Version) - } - if shh.Length != NumberOfMessageCodes { - t.Fatalf("failed Protocol Length: %v.", shh.Length) - } - if shh.Run == nil { - t.Fatalf("failed shh.Run.") - } - if uint64(w.Version()) != ProtocolVersion { - t.Fatalf("failed whisper Version: %v.", shh.Version) - } - if w.GetFilter("non-existent") != nil { - t.Fatalf("failed GetFilter.") - } - - peerID := make([]byte, 64) - mrand.Read(peerID) - peer, _ := w.getPeer(peerID) - if peer != nil { - t.Fatal("found peer for random key.") - } - if err := w.AllowP2PMessagesFromPeer(peerID); err == nil { - t.Fatalf("failed MarkPeerTrusted.") - } - exist := w.HasSymKey("non-existing") - if exist { - t.Fatalf("failed HasSymKey.") - } - key, err := w.GetSymKey("non-existing") - if err == nil { - t.Fatalf("failed GetSymKey(non-existing): false positive.") - } - if key != nil { - t.Fatalf("failed GetSymKey: false positive.") - } - mail := w.Envelopes() - if len(mail) != 0 { - t.Fatalf("failed w.Envelopes().") - } - m := w.Messages("non-existent") - if len(m) != 0 { - t.Fatalf("failed w.Messages.") - } - - var derived []byte - ver := uint64(0xDEADBEEF) - if _, err := deriveKeyMaterial(peerID, ver); err != unknownVersionError(ver) { - t.Fatalf("failed deriveKeyMaterial with param = %v: %s.", peerID, err) - } - derived, err = deriveKeyMaterial(peerID, 0) - if err != nil { - t.Fatalf("failed second deriveKeyMaterial with param = %v: %s.", peerID, err) - } - if !validateSymmetricKey(derived) { - t.Fatalf("failed validateSymmetricKey with param = %v.", derived) - } - if containsOnlyZeros(derived) { - t.Fatalf("failed containsOnlyZeros with param = %v.", derived) - } - - buf := []byte{0xFF, 0xE5, 0x80, 0x2, 0} - le := bytesToUintLittleEndian(buf) - be := BytesToUintBigEndian(buf) - if le != uint64(0x280e5ff) { - t.Fatalf("failed bytesToIntLittleEndian: %d.", le) - } - if be != uint64(0xffe5800200) { - t.Fatalf("failed BytesToIntBigEndian: %d.", be) - } - - id, err := w.NewKeyPair() - if err != nil { - t.Fatalf("failed to generate new key pair: %s.", err) - } - pk, err := w.GetPrivateKey(id) - if err != nil { - t.Fatalf("failed to retrieve new key pair: %s.", err) - } - if !validatePrivateKey(pk) { - t.Fatalf("failed validatePrivateKey: %v.", pk) - } - if !ValidatePublicKey(&pk.PublicKey) { - t.Fatalf("failed ValidatePublicKey: %v.", pk) - } -} - -func TestWhisperAsymmetricKeyImport(t *testing.T) { - var ( - w = New(&DefaultConfig) - privateKeys []*ecdsa.PrivateKey - ) - - for i := 0; i < 50; i++ { - id, err := w.NewKeyPair() - if err != nil { - t.Fatalf("could not generate key: %v", err) - } - - pk, err := w.GetPrivateKey(id) - if err != nil { - t.Fatalf("could not export private key: %v", err) - } - - privateKeys = append(privateKeys, pk) - - if !w.DeleteKeyPair(id) { - t.Fatalf("could not delete private key") - } - } - - for _, pk := range privateKeys { - if _, err := w.AddKeyPair(pk); err != nil { - t.Fatalf("could not import private key: %v", err) - } - } -} - -func TestWhisperIdentityManagement(t *testing.T) { - w := New(&DefaultConfig) - id1, err := w.NewKeyPair() - if err != nil { - t.Fatalf("failed to generate new key pair: %s.", err) - } - id2, err := w.NewKeyPair() - if err != nil { - t.Fatalf("failed to generate new key pair: %s.", err) - } - pk1, err := w.GetPrivateKey(id1) - if err != nil { - t.Fatalf("failed to retrieve the key pair: %s.", err) - } - pk2, err := w.GetPrivateKey(id2) - if err != nil { - t.Fatalf("failed to retrieve the key pair: %s.", err) - } - - if !w.HasKeyPair(id1) { - t.Fatalf("failed HasIdentity(pk1).") - } - if !w.HasKeyPair(id2) { - t.Fatalf("failed HasIdentity(pk2).") - } - if pk1 == nil { - t.Fatalf("failed GetIdentity(pk1).") - } - if pk2 == nil { - t.Fatalf("failed GetIdentity(pk2).") - } - - if !validatePrivateKey(pk1) { - t.Fatalf("pk1 is invalid.") - } - if !validatePrivateKey(pk2) { - t.Fatalf("pk2 is invalid.") - } - - // Delete one identity - done := w.DeleteKeyPair(id1) - if !done { - t.Fatalf("failed to delete id1.") - } - pk1, err = w.GetPrivateKey(id1) - if err == nil { - t.Fatalf("retrieve the key pair: false positive.") - } - pk2, err = w.GetPrivateKey(id2) - if err != nil { - t.Fatalf("failed to retrieve the key pair: %s.", err) - } - if w.HasKeyPair(id1) { - t.Fatalf("failed DeleteIdentity(pub1): still exist.") - } - if !w.HasKeyPair(id2) { - t.Fatalf("failed DeleteIdentity(pub1): pub2 does not exist.") - } - if pk1 != nil { - t.Fatalf("failed DeleteIdentity(pub1): first key still exist.") - } - if pk2 == nil { - t.Fatalf("failed DeleteIdentity(pub1): second key does not exist.") - } - - // Delete again non-existing identity - done = w.DeleteKeyPair(id1) - if done { - t.Fatalf("delete id1: false positive.") - } - pk1, err = w.GetPrivateKey(id1) - if err == nil { - t.Fatalf("retrieve the key pair: false positive.") - } - pk2, err = w.GetPrivateKey(id2) - if err != nil { - t.Fatalf("failed to retrieve the key pair: %s.", err) - } - if w.HasKeyPair(id1) { - t.Fatalf("failed delete non-existing identity: exist.") - } - if !w.HasKeyPair(id2) { - t.Fatalf("failed delete non-existing identity: pub2 does not exist.") - } - if pk1 != nil { - t.Fatalf("failed delete non-existing identity: first key exist.") - } - if pk2 == nil { - t.Fatalf("failed delete non-existing identity: second key does not exist.") - } - - // Delete second identity - done = w.DeleteKeyPair(id2) - if !done { - t.Fatalf("failed to delete id2.") - } - pk1, err = w.GetPrivateKey(id1) - if err == nil { - t.Fatalf("retrieve the key pair: false positive.") - } - pk2, err = w.GetPrivateKey(id2) - if err == nil { - t.Fatalf("retrieve the key pair: false positive.") - } - if w.HasKeyPair(id1) { - t.Fatalf("failed delete second identity: first identity exist.") - } - if w.HasKeyPair(id2) { - t.Fatalf("failed delete second identity: still exist.") - } - if pk1 != nil { - t.Fatalf("failed delete second identity: first key exist.") - } - if pk2 != nil { - t.Fatalf("failed delete second identity: second key exist.") - } -} - -func TestWhisperSymKeyManagement(t *testing.T) { - InitSingleTest() - - var err error - var k1, k2 []byte - w := New(&DefaultConfig) - id1 := string("arbitrary-string-1") - id2 := string("arbitrary-string-2") - - id1, err = w.GenerateSymKey() - if err != nil { - t.Fatalf("failed GenerateSymKey with seed %d: %s.", seed, err) - } - - k1, err = w.GetSymKey(id1) - if err != nil { - t.Fatalf("failed GetSymKey(id1).") - } - k2, err = w.GetSymKey(id2) - if err == nil { - t.Fatalf("failed GetSymKey(id2): false positive.") - } - if !w.HasSymKey(id1) { - t.Fatalf("failed HasSymKey(id1).") - } - if w.HasSymKey(id2) { - t.Fatalf("failed HasSymKey(id2): false positive.") - } - if k1 == nil { - t.Fatalf("first key does not exist.") - } - if k2 != nil { - t.Fatalf("second key still exist.") - } - - // add existing id, nothing should change - randomKey := make([]byte, aesKeyLength) - mrand.Read(randomKey) - id1, err = w.AddSymKeyDirect(randomKey) - if err != nil { - t.Fatalf("failed AddSymKey with seed %d: %s.", seed, err) - } - - k1, err = w.GetSymKey(id1) - if err != nil { - t.Fatalf("failed w.GetSymKey(id1).") - } - k2, err = w.GetSymKey(id2) - if err == nil { - t.Fatalf("failed w.GetSymKey(id2): false positive.") - } - if !w.HasSymKey(id1) { - t.Fatalf("failed w.HasSymKey(id1).") - } - if w.HasSymKey(id2) { - t.Fatalf("failed w.HasSymKey(id2): false positive.") - } - if k1 == nil { - t.Fatalf("first key does not exist.") - } - if !bytes.Equal(k1, randomKey) { - t.Fatalf("k1 != randomKey.") - } - if k2 != nil { - t.Fatalf("second key already exist.") - } - - id2, err = w.AddSymKeyDirect(randomKey) - if err != nil { - t.Fatalf("failed AddSymKey(id2) with seed %d: %s.", seed, err) - } - k1, err = w.GetSymKey(id1) - if err != nil { - t.Fatalf("failed w.GetSymKey(id1).") - } - k2, err = w.GetSymKey(id2) - if err != nil { - t.Fatalf("failed w.GetSymKey(id2).") - } - if !w.HasSymKey(id1) { - t.Fatalf("HasSymKey(id1) failed.") - } - if !w.HasSymKey(id2) { - t.Fatalf("HasSymKey(id2) failed.") - } - if k1 == nil { - t.Fatalf("k1 does not exist.") - } - if k2 == nil { - t.Fatalf("k2 does not exist.") - } - if !bytes.Equal(k1, k2) { - t.Fatalf("k1 != k2.") - } - if !bytes.Equal(k1, randomKey) { - t.Fatalf("k1 != randomKey.") - } - if len(k1) != aesKeyLength { - t.Fatalf("wrong length of k1.") - } - if len(k2) != aesKeyLength { - t.Fatalf("wrong length of k2.") - } - - w.DeleteSymKey(id1) - k1, err = w.GetSymKey(id1) - if err == nil { - t.Fatalf("failed w.GetSymKey(id1): false positive.") - } - if k1 != nil { - t.Fatalf("failed GetSymKey(id1): false positive.") - } - k2, err = w.GetSymKey(id2) - if err != nil { - t.Fatalf("failed w.GetSymKey(id2).") - } - if w.HasSymKey(id1) { - t.Fatalf("failed to delete first key: still exist.") - } - if !w.HasSymKey(id2) { - t.Fatalf("failed to delete first key: second key does not exist.") - } - if k1 != nil { - t.Fatalf("failed to delete first key.") - } - if k2 == nil { - t.Fatalf("failed to delete first key: second key is nil.") - } - - w.DeleteSymKey(id1) - w.DeleteSymKey(id2) - k1, err = w.GetSymKey(id1) - if err == nil { - t.Fatalf("failed w.GetSymKey(id1): false positive.") - } - k2, err = w.GetSymKey(id2) - if err == nil { - t.Fatalf("failed w.GetSymKey(id2): false positive.") - } - if k1 != nil || k2 != nil { - t.Fatalf("k1 or k2 is not nil") - } - if w.HasSymKey(id1) { - t.Fatalf("failed to delete second key: first key exist.") - } - if w.HasSymKey(id2) { - t.Fatalf("failed to delete second key: still exist.") - } - if k1 != nil { - t.Fatalf("failed to delete second key: first key is not nil.") - } - if k2 != nil { - t.Fatalf("failed to delete second key: second key is not nil.") - } - - randomKey = make([]byte, aesKeyLength+1) - mrand.Read(randomKey) - _, err = w.AddSymKeyDirect(randomKey) - if err == nil { - t.Fatalf("added the key with wrong size, seed %d.", seed) - } - - const password = "arbitrary data here" - id1, err = w.AddSymKeyFromPassword(password) - if err != nil { - t.Fatalf("failed AddSymKeyFromPassword(id1) with seed %d: %s.", seed, err) - } - id2, err = w.AddSymKeyFromPassword(password) - if err != nil { - t.Fatalf("failed AddSymKeyFromPassword(id2) with seed %d: %s.", seed, err) - } - k1, err = w.GetSymKey(id1) - if err != nil { - t.Fatalf("failed w.GetSymKey(id1).") - } - k2, err = w.GetSymKey(id2) - if err != nil { - t.Fatalf("failed w.GetSymKey(id2).") - } - if !w.HasSymKey(id1) { - t.Fatalf("HasSymKey(id1) failed.") - } - if !w.HasSymKey(id2) { - t.Fatalf("HasSymKey(id2) failed.") - } - if k1 == nil { - t.Fatalf("k1 does not exist.") - } - if k2 == nil { - t.Fatalf("k2 does not exist.") - } - if !bytes.Equal(k1, k2) { - t.Fatalf("k1 != k2.") - } - if len(k1) != aesKeyLength { - t.Fatalf("wrong length of k1.") - } - if len(k2) != aesKeyLength { - t.Fatalf("wrong length of k2.") - } - if !validateSymmetricKey(k2) { - t.Fatalf("key validation failed.") - } -} - -func TestExpiry(t *testing.T) { - InitSingleTest() - - w := New(&DefaultConfig) - w.SetMinimumPoW(0.0000001) - defer w.SetMinimumPoW(DefaultMinimumPoW) - w.Start(nil) - defer w.Stop() - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - params.TTL = 1 - - messagesCount := 5 - - // Send a few messages one after another. Due to low PoW and expiration buckets - // with one second resolution, it covers a case when there are multiple items - // in a single expiration bucket. - for i := 0; i < messagesCount; i++ { - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - err = w.Send(env) - if err != nil { - t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) - } - } - - // wait till received or timeout - var received, expired bool - for j := 0; j < 20; j++ { - time.Sleep(100 * time.Millisecond) - if len(w.Envelopes()) == messagesCount { - received = true - break - } - } - - if !received { - t.Fatalf("did not receive the sent envelope, seed: %d.", seed) - } - - // wait till expired or timeout - for j := 0; j < 20; j++ { - time.Sleep(100 * time.Millisecond) - if len(w.Envelopes()) == 0 { - expired = true - break - } - } - - if !expired { - t.Fatalf("expire failed, seed: %d.", seed) - } -} - -func TestCustomization(t *testing.T) { - InitSingleTest() - - w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW) - defer w.SetMaxMessageSize(DefaultMaxMessageSize) - w.Start(nil) - defer w.Stop() - - const smallPoW = 0.00001 - - f, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - params.KeySym = f.KeySym - params.Topic = BytesToTopic(f.Topics[2]) - params.PoW = smallPoW - params.TTL = 3600 * 24 // one day - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - err = w.Send(env) - if err == nil { - t.Fatalf("successfully sent envelope with PoW %.06f, false positive (seed %d).", env.PoW(), seed) - } - - w.SetMinimumPoW(smallPoW / 2) - err = w.Send(env) - if err != nil { - t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) - } - - params.TTL++ - msg, err = NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err = msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - w.SetMaxMessageSize(uint32(env.size() - 1)) - err = w.Send(env) - if err == nil { - t.Fatalf("successfully sent oversized envelope (seed %d): false positive.", seed) - } - - w.SetMaxMessageSize(DefaultMaxMessageSize) - err = w.Send(env) - if err != nil { - t.Fatalf("failed to send second envelope with seed %d: %s.", seed, err) - } - - // wait till received or timeout - var received bool - for j := 0; j < 20; j++ { - time.Sleep(100 * time.Millisecond) - if len(w.Envelopes()) > 1 { - received = true - break - } - } - - if !received { - t.Fatalf("did not receive the sent envelope, seed: %d.", seed) - } - - // check w.messages() - id, err := w.Subscribe(f) - if err != nil { - t.Fatalf("failed subscribe with seed %d: %s.", seed, err) - } - time.Sleep(5 * time.Millisecond) - mail := f.Retrieve() - if len(mail) > 0 { - t.Fatalf("received premature mail") - } - - mail = w.Messages(id) - if len(mail) != 2 { - t.Fatalf("failed to get whisper messages") - } -} - -func TestSymmetricSendCycle(t *testing.T) { - InitSingleTest() - - w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW) - defer w.SetMaxMessageSize(DefaultMaxMessageSize) - w.Start(nil) - defer w.Stop() - - filter1, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - filter1.PoW = DefaultMinimumPoW - - // Copy the first filter since some of its fields - // are randomly gnerated. - filter2 := &Filter{ - KeySym: filter1.KeySym, - Topics: filter1.Topics, - PoW: filter1.PoW, - AllowP2P: filter1.AllowP2P, - Messages: make(map[common.Hash]*ReceivedMessage), - } - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - filter1.Src = ¶ms.Src.PublicKey - filter2.Src = ¶ms.Src.PublicKey - - params.KeySym = filter1.KeySym - params.Topic = BytesToTopic(filter1.Topics[2]) - params.PoW = filter1.PoW - params.WorkTime = 10 - params.TTL = 50 - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - _, err = w.Subscribe(filter1) - if err != nil { - t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) - } - - _, err = w.Subscribe(filter2) - if err != nil { - t.Fatalf("failed subscribe 2 with seed %d: %s.", seed, err) - } - - err = w.Send(env) - if err != nil { - t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) - } - - // wait till received or timeout - var received bool - for j := 0; j < 200; j++ { - time.Sleep(10 * time.Millisecond) - if len(w.Envelopes()) > 0 { - received = true - break - } - } - - if !received { - t.Fatalf("did not receive the sent envelope, seed: %d.", seed) - } - - // check w.messages() - time.Sleep(5 * time.Millisecond) - mail1 := filter1.Retrieve() - mail2 := filter2.Retrieve() - if len(mail2) == 0 { - t.Fatalf("did not receive any email for filter 2") - } - if len(mail1) == 0 { - t.Fatalf("did not receive any email for filter 1") - } - -} - -func TestSymmetricSendWithoutAKey(t *testing.T) { - InitSingleTest() - - w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW) - defer w.SetMaxMessageSize(DefaultMaxMessageSize) - w.Start(nil) - defer w.Stop() - - filter, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - filter.PoW = DefaultMinimumPoW - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - filter.Src = nil - - params.KeySym = filter.KeySym - params.Topic = BytesToTopic(filter.Topics[2]) - params.PoW = filter.PoW - params.WorkTime = 10 - params.TTL = 50 - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - _, err = w.Subscribe(filter) - if err != nil { - t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) - } - - err = w.Send(env) - if err != nil { - t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) - } - - // wait till received or timeout - var received bool - for j := 0; j < 200; j++ { - time.Sleep(10 * time.Millisecond) - if len(w.Envelopes()) > 0 { - received = true - break - } - } - - if !received { - t.Fatalf("did not receive the sent envelope, seed: %d.", seed) - } - - // check w.messages() - time.Sleep(5 * time.Millisecond) - mail := filter.Retrieve() - if len(mail) == 0 { - t.Fatalf("did not receive message in spite of not setting a public key") - } -} - -func TestSymmetricSendKeyMismatch(t *testing.T) { - InitSingleTest() - - w := New(&DefaultConfig) - defer w.SetMinimumPoW(DefaultMinimumPoW) - defer w.SetMaxMessageSize(DefaultMaxMessageSize) - w.Start(nil) - defer w.Stop() - - filter, err := generateFilter(t, true) - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - filter.PoW = DefaultMinimumPoW - - params, err := generateMessageParams() - if err != nil { - t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) - } - - params.KeySym = filter.KeySym - params.Topic = BytesToTopic(filter.Topics[2]) - params.PoW = filter.PoW - params.WorkTime = 10 - params.TTL = 50 - msg, err := NewSentMessage(params) - if err != nil { - t.Fatalf("failed to create new message with seed %d: %s.", seed, err) - } - env, err := msg.Wrap(params) - if err != nil { - t.Fatalf("failed Wrap with seed %d: %s.", seed, err) - } - - _, err = w.Subscribe(filter) - if err != nil { - t.Fatalf("failed subscribe 1 with seed %d: %s.", seed, err) - } - - err = w.Send(env) - if err != nil { - t.Fatalf("Failed sending envelope with PoW %.06f (seed %d): %s", env.PoW(), seed, err) - } - - // wait till received or timeout - var received bool - for j := 0; j < 200; j++ { - time.Sleep(10 * time.Millisecond) - if len(w.Envelopes()) > 0 { - received = true - break - } - } - - if !received { - t.Fatalf("did not receive the sent envelope, seed: %d.", seed) - } - - // check w.messages() - time.Sleep(5 * time.Millisecond) - mail := filter.Retrieve() - if len(mail) > 0 { - t.Fatalf("received a message when keys weren't matching") - } -} diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope.go index c42d1fa8..5d9d3508 100644 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope.go +++ b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope.go @@ -27,7 +27,6 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/ecies" "github.com/ethereum/go-ethereum/rlp" @@ -82,7 +81,7 @@ func (e *Envelope) Seal(options *MessageParams) error { return nil } - var target, bestBit int + var target, bestLeadingZeros int if options.PoW < 0 { // target is not set - the function should run for a period // of time specified in WorkTime param. Since we can predict @@ -101,10 +100,10 @@ func (e *Envelope) Seal(options *MessageParams) error { for i := 0; i < 1024; i++ { binary.BigEndian.PutUint64(buf[56:], nonce) d := new(big.Int).SetBytes(crypto.Keccak256(buf)) - firstBit := math.FirstBitSet(d) - if firstBit > bestBit { - e.Nonce, bestBit = nonce, firstBit - if target > 0 && bestBit >= target { + leadingZeros := 256 - d.BitLen() + if leadingZeros > bestLeadingZeros { + e.Nonce, bestLeadingZeros = nonce, leadingZeros + if target > 0 && bestLeadingZeros >= target { return nil } } @@ -112,7 +111,7 @@ func (e *Envelope) Seal(options *MessageParams) error { } } - if target > 0 && bestBit < target { + if target > 0 && bestLeadingZeros < target { return fmt.Errorf("failed to reach the PoW target, specified pow time (%d seconds) was insufficient", options.WorkTime) } @@ -130,13 +129,14 @@ func (e *Envelope) PoW() float64 { func (e *Envelope) calculatePoW(diff uint32) { buf := make([]byte, 64) - h := crypto.Keccak256(e.rlpWithoutNonce()) + rlp := e.rlpWithoutNonce() + h := crypto.Keccak256(rlp) copy(buf[:32], h) binary.BigEndian.PutUint64(buf[56:], e.Nonce) - d := new(big.Int).SetBytes(crypto.Keccak256(buf)) - firstBit := math.FirstBitSet(d) - x := gmath.Pow(2, float64(firstBit)) - x /= float64(e.size()) + powHash := new(big.Int).SetBytes(crypto.Keccak256(buf)) + leadingZeroes := 256 - powHash.BitLen() + x := gmath.Pow(2, float64(leadingZeroes)) + x /= float64(len(rlp)) x /= float64(e.TTL + diff) e.pow = x } diff --git a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope_test.go b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope_test.go index 410b250a..d6e38e68 100644 --- a/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope_test.go +++ b/vendor/github.com/ethereum/go-ethereum/whisper/whisperv6/envelope_test.go @@ -25,6 +25,33 @@ import ( "github.com/ethereum/go-ethereum/crypto" ) +func TestPoWCalculationsWithNoLeadingZeros(t *testing.T) { + e := Envelope{ + TTL: 1, + Data: []byte{0xde, 0xad, 0xbe, 0xef}, + Nonce: 100000, + } + + e.calculatePoW(0) + + if e.pow != 0.07692307692307693 { + t.Fatalf("invalid PoW calculation. Expected 0.07692307692307693, got %v", e.pow) + } +} + +func TestPoWCalculationsWith8LeadingZeros(t *testing.T) { + e := Envelope{ + TTL: 1, + Data: []byte{0xde, 0xad, 0xbe, 0xef}, + Nonce: 48159, + } + e.calculatePoW(0) + + if e.pow != 40329.846153846156 { + t.Fatalf("invalid PoW calculation. Expected 0.07692307692307693, got %v", e.pow) + } +} + func TestEnvelopeOpenAcceptsOnlyOneKeyTypeInFilter(t *testing.T) { symKey := make([]byte, aesKeyLength) mrand.Read(symKey) diff --git a/vendor/github.com/philhofer/fwd/LICENSE.md b/vendor/github.com/philhofer/fwd/LICENSE.md deleted file mode 100644 index 1ac6a81f..00000000 --- a/vendor/github.com/philhofer/fwd/LICENSE.md +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2014-2015, Philip Hofer - -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. \ No newline at end of file diff --git a/vendor/github.com/philhofer/fwd/README.md b/vendor/github.com/philhofer/fwd/README.md deleted file mode 100644 index 38349af3..00000000 --- a/vendor/github.com/philhofer/fwd/README.md +++ /dev/null @@ -1,315 +0,0 @@ - -# fwd - import "github.com/philhofer/fwd" - -The `fwd` package provides a buffered reader -and writer. Each has methods that help improve -the encoding/decoding performance of some binary -protocols. - -The `fwd.Writer` and `fwd.Reader` type provide similar -functionality to their counterparts in `bufio`, plus -a few extra utility methods that simplify read-ahead -and write-ahead. I wrote this package to improve serialization -performance for
    http://github.com/tinylib/msgp, -where it provided about a 2x speedup over `bufio` for certain -workloads. However, care must be taken to understand the semantics of the -extra methods provided by this package, as they allow -the user to access and manipulate the buffer memory -directly. - -The extra methods for `fwd.Reader` are `Peek`, `Skip` -and `Next`. `(*fwd.Reader).Peek`, unlike `(*bufio.Reader).Peek`, -will re-allocate the read buffer in order to accommodate arbitrarily -large read-ahead. `(*fwd.Reader).Skip` skips the next `n` bytes -in the stream, and uses the `io.Seeker` interface if the underlying -stream implements it. `(*fwd.Reader).Next` returns a slice pointing -to the next `n` bytes in the read buffer (like `Peek`), but also -increments the read position. This allows users to process streams -in arbitrary block sizes without having to manage appropriately-sized -slices. Additionally, obviating the need to copy the data from the -buffer to another location in memory can improve performance dramatically -in CPU-bound applications. - -`fwd.Writer` only has one extra method, which is `(*fwd.Writer).Next`, which -returns a slice pointing to the next `n` bytes of the writer, and increments -the write position by the length of the returned slice. This allows users -to write directly to the end of the buffer. - - - - -## Constants -``` go -const ( - // DefaultReaderSize is the default size of the read buffer - DefaultReaderSize = 2048 -) -``` -``` go -const ( - // DefaultWriterSize is the - // default write buffer size. - DefaultWriterSize = 2048 -) -``` - - - -## type Reader -``` go -type Reader struct { - // contains filtered or unexported fields -} -``` -Reader is a buffered look-ahead reader - - - - - - - - - -### func NewReader -``` go -func NewReader(r io.Reader) *Reader -``` -NewReader returns a new *Reader that reads from 'r' - - -### func NewReaderSize -``` go -func NewReaderSize(r io.Reader, n int) *Reader -``` -NewReaderSize returns a new *Reader that -reads from 'r' and has a buffer size 'n' - - - - -### func (\*Reader) BufferSize -``` go -func (r *Reader) BufferSize() int -``` -BufferSize returns the total size of the buffer - - - -### func (\*Reader) Buffered -``` go -func (r *Reader) Buffered() int -``` -Buffered returns the number of bytes currently in the buffer - - - -### func (\*Reader) Next -``` go -func (r *Reader) Next(n int) ([]byte, error) -``` -Next returns the next 'n' bytes in the stream. -Unlike Peek, Next advances the reader position. -The returned bytes point to the same -data as the buffer, so the slice is -only valid until the next reader method call. -An EOF is considered an unexpected error. -If an the returned slice is less than the -length asked for, an error will be returned, -and the reader position will not be incremented. - - - -### func (\*Reader) Peek -``` go -func (r *Reader) Peek(n int) ([]byte, error) -``` -Peek returns the next 'n' buffered bytes, -reading from the underlying reader if necessary. -It will only return a slice shorter than 'n' bytes -if it also returns an error. Peek does not advance -the reader. EOF errors are *not* returned as -io.ErrUnexpectedEOF. - - - -### func (\*Reader) Read -``` go -func (r *Reader) Read(b []byte) (int, error) -``` -Read implements `io.Reader` - - - -### func (\*Reader) ReadByte -``` go -func (r *Reader) ReadByte() (byte, error) -``` -ReadByte implements `io.ByteReader` - - - -### func (\*Reader) ReadFull -``` go -func (r *Reader) ReadFull(b []byte) (int, error) -``` -ReadFull attempts to read len(b) bytes into -'b'. It returns the number of bytes read into -'b', and an error if it does not return len(b). -EOF is considered an unexpected error. - - - -### func (\*Reader) Reset -``` go -func (r *Reader) Reset(rd io.Reader) -``` -Reset resets the underlying reader -and the read buffer. - - - -### func (\*Reader) Skip -``` go -func (r *Reader) Skip(n int) (int, error) -``` -Skip moves the reader forward 'n' bytes. -Returns the number of bytes skipped and any -errors encountered. It is analogous to Seek(n, 1). -If the underlying reader implements io.Seeker, then -that method will be used to skip forward. - -If the reader encounters -an EOF before skipping 'n' bytes, it -returns io.ErrUnexpectedEOF. If the -underlying reader implements io.Seeker, then -those rules apply instead. (Many implementations -will not return `io.EOF` until the next call -to Read.) - - - -### func (\*Reader) WriteTo -``` go -func (r *Reader) WriteTo(w io.Writer) (int64, error) -``` -WriteTo implements `io.WriterTo` - - - -## type Writer -``` go -type Writer struct { - // contains filtered or unexported fields -} -``` -Writer is a buffered writer - - - - - - - - - -### func NewWriter -``` go -func NewWriter(w io.Writer) *Writer -``` -NewWriter returns a new writer -that writes to 'w' and has a buffer -that is `DefaultWriterSize` bytes. - - -### func NewWriterSize -``` go -func NewWriterSize(w io.Writer, size int) *Writer -``` -NewWriterSize returns a new writer -that writes to 'w' and has a buffer -that is 'size' bytes. - - - - -### func (\*Writer) BufferSize -``` go -func (w *Writer) BufferSize() int -``` -BufferSize returns the maximum size of the buffer. - - - -### func (\*Writer) Buffered -``` go -func (w *Writer) Buffered() int -``` -Buffered returns the number of buffered bytes -in the reader. - - - -### func (\*Writer) Flush -``` go -func (w *Writer) Flush() error -``` -Flush flushes any buffered bytes -to the underlying writer. - - - -### func (\*Writer) Next -``` go -func (w *Writer) Next(n int) ([]byte, error) -``` -Next returns the next 'n' free bytes -in the write buffer, flushing the writer -as necessary. Next will return `io.ErrShortBuffer` -if 'n' is greater than the size of the write buffer. -Calls to 'next' increment the write position by -the size of the returned buffer. - - - -### func (\*Writer) ReadFrom -``` go -func (w *Writer) ReadFrom(r io.Reader) (int64, error) -``` -ReadFrom implements `io.ReaderFrom` - - - -### func (\*Writer) Write -``` go -func (w *Writer) Write(p []byte) (int, error) -``` -Write implements `io.Writer` - - - -### func (\*Writer) WriteByte -``` go -func (w *Writer) WriteByte(b byte) error -``` -WriteByte implements `io.ByteWriter` - - - -### func (\*Writer) WriteString -``` go -func (w *Writer) WriteString(s string) (int, error) -``` -WriteString is analogous to Write, but it takes a string. - - - - - - - - - -- - - -Generated by [godoc2md](http://godoc.org/github.com/davecheney/godoc2md) \ No newline at end of file diff --git a/vendor/github.com/philhofer/fwd/reader.go b/vendor/github.com/philhofer/fwd/reader.go deleted file mode 100644 index 75be62ab..00000000 --- a/vendor/github.com/philhofer/fwd/reader.go +++ /dev/null @@ -1,383 +0,0 @@ -// The `fwd` package provides a buffered reader -// and writer. Each has methods that help improve -// the encoding/decoding performance of some binary -// protocols. -// -// The `fwd.Writer` and `fwd.Reader` type provide similar -// functionality to their counterparts in `bufio`, plus -// a few extra utility methods that simplify read-ahead -// and write-ahead. I wrote this package to improve serialization -// performance for http://github.com/tinylib/msgp, -// where it provided about a 2x speedup over `bufio` for certain -// workloads. However, care must be taken to understand the semantics of the -// extra methods provided by this package, as they allow -// the user to access and manipulate the buffer memory -// directly. -// -// The extra methods for `fwd.Reader` are `Peek`, `Skip` -// and `Next`. `(*fwd.Reader).Peek`, unlike `(*bufio.Reader).Peek`, -// will re-allocate the read buffer in order to accommodate arbitrarily -// large read-ahead. `(*fwd.Reader).Skip` skips the next `n` bytes -// in the stream, and uses the `io.Seeker` interface if the underlying -// stream implements it. `(*fwd.Reader).Next` returns a slice pointing -// to the next `n` bytes in the read buffer (like `Peek`), but also -// increments the read position. This allows users to process streams -// in arbitrary block sizes without having to manage appropriately-sized -// slices. Additionally, obviating the need to copy the data from the -// buffer to another location in memory can improve performance dramatically -// in CPU-bound applications. -// -// `fwd.Writer` only has one extra method, which is `(*fwd.Writer).Next`, which -// returns a slice pointing to the next `n` bytes of the writer, and increments -// the write position by the length of the returned slice. This allows users -// to write directly to the end of the buffer. -// -package fwd - -import "io" - -const ( - // DefaultReaderSize is the default size of the read buffer - DefaultReaderSize = 2048 - - // minimum read buffer; straight from bufio - minReaderSize = 16 -) - -// NewReader returns a new *Reader that reads from 'r' -func NewReader(r io.Reader) *Reader { - return NewReaderSize(r, DefaultReaderSize) -} - -// NewReaderSize returns a new *Reader that -// reads from 'r' and has a buffer size 'n' -func NewReaderSize(r io.Reader, n int) *Reader { - rd := &Reader{ - r: r, - data: make([]byte, 0, max(minReaderSize, n)), - } - if s, ok := r.(io.Seeker); ok { - rd.rs = s - } - return rd -} - -// Reader is a buffered look-ahead reader -type Reader struct { - r io.Reader // underlying reader - - // data[n:len(data)] is buffered data; data[len(data):cap(data)] is free buffer space - data []byte // data - n int // read offset - state error // last read error - - // if the reader past to NewReader was - // also an io.Seeker, this is non-nil - rs io.Seeker -} - -// Reset resets the underlying reader -// and the read buffer. -func (r *Reader) Reset(rd io.Reader) { - r.r = rd - r.data = r.data[0:0] - r.n = 0 - r.state = nil - if s, ok := rd.(io.Seeker); ok { - r.rs = s - } else { - r.rs = nil - } -} - -// more() does one read on the underlying reader -func (r *Reader) more() { - // move data backwards so that - // the read offset is 0; this way - // we can supply the maximum number of - // bytes to the reader - if r.n != 0 { - if r.n < len(r.data) { - r.data = r.data[:copy(r.data[0:], r.data[r.n:])] - } else { - r.data = r.data[:0] - } - r.n = 0 - } - var a int - a, r.state = r.r.Read(r.data[len(r.data):cap(r.data)]) - if a == 0 && r.state == nil { - r.state = io.ErrNoProgress - return - } else if a > 0 && r.state == io.EOF { - // discard the io.EOF if we read more than 0 bytes. - // the next call to Read should return io.EOF again. - r.state = nil - } - r.data = r.data[:len(r.data)+a] -} - -// pop error -func (r *Reader) err() (e error) { - e, r.state = r.state, nil - return -} - -// pop error; EOF -> io.ErrUnexpectedEOF -func (r *Reader) noEOF() (e error) { - e, r.state = r.state, nil - if e == io.EOF { - e = io.ErrUnexpectedEOF - } - return -} - -// buffered bytes -func (r *Reader) buffered() int { return len(r.data) - r.n } - -// Buffered returns the number of bytes currently in the buffer -func (r *Reader) Buffered() int { return len(r.data) - r.n } - -// BufferSize returns the total size of the buffer -func (r *Reader) BufferSize() int { return cap(r.data) } - -// Peek returns the next 'n' buffered bytes, -// reading from the underlying reader if necessary. -// It will only return a slice shorter than 'n' bytes -// if it also returns an error. Peek does not advance -// the reader. EOF errors are *not* returned as -// io.ErrUnexpectedEOF. -func (r *Reader) Peek(n int) ([]byte, error) { - // in the degenerate case, - // we may need to realloc - // (the caller asked for more - // bytes than the size of the buffer) - if cap(r.data) < n { - old := r.data[r.n:] - r.data = make([]byte, n+r.buffered()) - r.data = r.data[:copy(r.data, old)] - r.n = 0 - } - - // keep filling until - // we hit an error or - // read enough bytes - for r.buffered() < n && r.state == nil { - r.more() - } - - // we must have hit an error - if r.buffered() < n { - return r.data[r.n:], r.err() - } - - return r.data[r.n : r.n+n], nil -} - -// Skip moves the reader forward 'n' bytes. -// Returns the number of bytes skipped and any -// errors encountered. It is analogous to Seek(n, 1). -// If the underlying reader implements io.Seeker, then -// that method will be used to skip forward. -// -// If the reader encounters -// an EOF before skipping 'n' bytes, it -// returns io.ErrUnexpectedEOF. If the -// underlying reader implements io.Seeker, then -// those rules apply instead. (Many implementations -// will not return `io.EOF` until the next call -// to Read.) -func (r *Reader) Skip(n int) (int, error) { - - // fast path - if r.buffered() >= n { - r.n += n - return n, nil - } - - // use seeker implementation - // if we can - if r.rs != nil { - return r.skipSeek(n) - } - - // loop on filling - // and then erasing - o := n - for r.buffered() < n && r.state == nil { - r.more() - // we can skip forward - // up to r.buffered() bytes - step := min(r.buffered(), n) - r.n += step - n -= step - } - // at this point, n should be - // 0 if everything went smoothly - return o - n, r.noEOF() -} - -// Next returns the next 'n' bytes in the stream. -// Unlike Peek, Next advances the reader position. -// The returned bytes point to the same -// data as the buffer, so the slice is -// only valid until the next reader method call. -// An EOF is considered an unexpected error. -// If an the returned slice is less than the -// length asked for, an error will be returned, -// and the reader position will not be incremented. -func (r *Reader) Next(n int) ([]byte, error) { - - // in case the buffer is too small - if cap(r.data) < n { - old := r.data[r.n:] - r.data = make([]byte, n+r.buffered()) - r.data = r.data[:copy(r.data, old)] - r.n = 0 - } - - // fill at least 'n' bytes - for r.buffered() < n && r.state == nil { - r.more() - } - - if r.buffered() < n { - return r.data[r.n:], r.noEOF() - } - out := r.data[r.n : r.n+n] - r.n += n - return out, nil -} - -// skipSeek uses the io.Seeker to seek forward. -// only call this function when n > r.buffered() -func (r *Reader) skipSeek(n int) (int, error) { - o := r.buffered() - // first, clear buffer - n -= o - r.n = 0 - r.data = r.data[:0] - - // then seek forward remaning bytes - i, err := r.rs.Seek(int64(n), 1) - return int(i) + o, err -} - -// Read implements `io.Reader` -func (r *Reader) Read(b []byte) (int, error) { - // if we have data in the buffer, just - // return that. - if r.buffered() != 0 { - x := copy(b, r.data[r.n:]) - r.n += x - return x, nil - } - var n int - // we have no buffered data; determine - // whether or not to buffer or call - // the underlying reader directly - if len(b) >= cap(r.data) { - n, r.state = r.r.Read(b) - } else { - r.more() - n = copy(b, r.data) - r.n = n - } - if n == 0 { - return 0, r.err() - } - return n, nil -} - -// ReadFull attempts to read len(b) bytes into -// 'b'. It returns the number of bytes read into -// 'b', and an error if it does not return len(b). -// EOF is considered an unexpected error. -func (r *Reader) ReadFull(b []byte) (int, error) { - var n int // read into b - var nn int // scratch - l := len(b) - // either read buffered data, - // or read directly for the underlying - // buffer, or fetch more buffered data. - for n < l && r.state == nil { - if r.buffered() != 0 { - nn = copy(b[n:], r.data[r.n:]) - n += nn - r.n += nn - } else if l-n > cap(r.data) { - nn, r.state = r.r.Read(b[n:]) - n += nn - } else { - r.more() - } - } - if n < l { - return n, r.noEOF() - } - return n, nil -} - -// ReadByte implements `io.ByteReader` -func (r *Reader) ReadByte() (byte, error) { - for r.buffered() < 1 && r.state == nil { - r.more() - } - if r.buffered() < 1 { - return 0, r.err() - } - b := r.data[r.n] - r.n++ - return b, nil -} - -// WriteTo implements `io.WriterTo` -func (r *Reader) WriteTo(w io.Writer) (int64, error) { - var ( - i int64 - ii int - err error - ) - // first, clear buffer - if r.buffered() > 0 { - ii, err = w.Write(r.data[r.n:]) - i += int64(ii) - if err != nil { - return i, err - } - r.data = r.data[0:0] - r.n = 0 - } - for r.state == nil { - // here we just do - // 1:1 reads and writes - r.more() - if r.buffered() > 0 { - ii, err = w.Write(r.data) - i += int64(ii) - if err != nil { - return i, err - } - r.data = r.data[0:0] - r.n = 0 - } - } - if r.state != io.EOF { - return i, r.err() - } - return i, nil -} - -func min(a int, b int) int { - if a < b { - return a - } - return b -} - -func max(a int, b int) int { - if a < b { - return b - } - return a -} diff --git a/vendor/github.com/philhofer/fwd/reader_test.go b/vendor/github.com/philhofer/fwd/reader_test.go deleted file mode 100644 index e96303ad..00000000 --- a/vendor/github.com/philhofer/fwd/reader_test.go +++ /dev/null @@ -1,398 +0,0 @@ -package fwd - -import ( - "bytes" - "io" - "io/ioutil" - "math/rand" - "testing" - "unsafe" -) - -// partialReader reads into only -// part of the supplied byte slice -// to the underlying reader -type partialReader struct { - r io.Reader -} - -func (p partialReader) Read(b []byte) (int, error) { - n := max(1, rand.Intn(len(b))) - return p.r.Read(b[:n]) -} - -func randomBts(sz int) []byte { - o := make([]byte, sz) - for i := 0; i < len(o); i += 8 { - j := (*int64)(unsafe.Pointer(&o[i])) - *j = rand.Int63() - } - return o -} - -func TestRead(t *testing.T) { - bts := randomBts(512) - - // make the buffer much - // smaller than the underlying - // bytes to incur multiple fills - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 128) - - if rd.BufferSize() != cap(rd.data) { - t.Errorf("BufferSize() returned %d; should return %d", rd.BufferSize(), cap(rd.data)) - } - - // starting Buffered() should be 0 - if rd.Buffered() != 0 { - t.Errorf("Buffered() should return 0 at initialization; got %d", rd.Buffered()) - } - - some := make([]byte, 32) - n, err := rd.Read(some) - if err != nil { - t.Fatal(err) - } - if n == 0 { - t.Fatal("read 0 bytes w/ a non-nil error!") - } - some = some[:n] - - more := make([]byte, 64) - j, err := rd.Read(more) - if err != nil { - t.Fatal(err) - } - if j == 0 { - t.Fatal("read 0 bytes w/ a non-nil error") - } - more = more[:j] - - out, err := ioutil.ReadAll(rd) - if err != nil { - t.Fatal(err) - } - - all := append(some, more...) - all = append(all, out...) - - if !bytes.Equal(bts, all) { - t.Errorf("bytes not equal; %d bytes in and %d bytes out", len(bts), len(out)) - } - - // test filling out of the underlying reader - big := randomBts(1 << 21) - rd = NewReaderSize(partialReader{bytes.NewReader(big)}, 2048) - buf := make([]byte, 3100) - - n, err = rd.ReadFull(buf) - if err != nil { - t.Fatal(err) - } - if n != 3100 { - t.Errorf("expected 3100 bytes read by ReadFull; got %d", n) - } - if !bytes.Equal(buf[:n], big[:n]) { - t.Error("data parity") - } - rest := make([]byte, (1<<21)-3100) - n, err = io.ReadFull(rd, rest) - if err != nil { - t.Fatal(err) - } - if n != len(rest) { - t.Errorf("expected %d bytes read by io.ReadFull; got %d", len(rest), n) - } - if !bytes.Equal(append(buf, rest...), big) { - t.Fatal("data parity") - } -} - -func TestReadByte(t *testing.T) { - bts := randomBts(512) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 98) - - var ( - err error - i int - b byte - ) - - // scan through the whole - // array byte-by-byte - for err != io.EOF { - b, err = rd.ReadByte() - if err == nil { - if b != bts[i] { - t.Fatalf("offset %d: %d in; %d out", i, b, bts[i]) - } - } - i++ - } - if err != io.EOF { - t.Fatal(err) - } -} - -func TestSkipNoSeek(t *testing.T) { - bts := randomBts(1024) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) - - n, err := rd.Skip(512) - if err != nil { - t.Fatal(err) - } - if n != 512 { - t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 512) - } - - var b byte - b, err = rd.ReadByte() - if err != nil { - t.Fatal(err) - } - - if b != bts[512] { - t.Fatalf("at index %d: %d in; %d out", 512, bts[512], b) - } - - n, err = rd.Skip(10) - if err != nil { - t.Fatal(err) - } - if n != 10 { - t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 10) - } - - // now try to skip past the end - rd = NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) - - n, err = rd.Skip(2000) - if err != io.ErrUnexpectedEOF { - t.Fatalf("expected error %q; got %q", io.EOF, err) - } - if n != 1024 { - t.Fatalf("expected to skip only 1024 bytes; skipped %d", n) - } -} - -func TestSkipSeek(t *testing.T) { - bts := randomBts(1024) - - // bytes.Reader implements io.Seeker - rd := NewReaderSize(bytes.NewReader(bts), 200) - - n, err := rd.Skip(512) - if err != nil { - t.Fatal(err) - } - if n != 512 { - t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 512) - } - - var b byte - b, err = rd.ReadByte() - if err != nil { - t.Fatal(err) - } - - if b != bts[512] { - t.Fatalf("at index %d: %d in; %d out", 512, bts[512], b) - } - - n, err = rd.Skip(10) - if err != nil { - t.Fatal(err) - } - if n != 10 { - t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 10) - } - - // now try to skip past the end - rd.Reset(bytes.NewReader(bts)) - - // because of how bytes.Reader - // implements Seek, this should - // return (2000, nil) - n, err = rd.Skip(2000) - if err != nil { - t.Fatal(err) - } - if n != 2000 { - t.Fatalf("should have returned %d bytes; returned %d", 2000, n) - } - - // the next call to Read() - // should return io.EOF - n, err = rd.Read([]byte{0, 0, 0}) - if err != io.EOF { - t.Errorf("expected %q; got %q", io.EOF, err) - } - if n != 0 { - t.Errorf("expected 0 bytes read; got %d", n) - } - -} - -func TestPeek(t *testing.T) { - bts := randomBts(1024) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) - - // first, a peek < buffer size - var ( - peek []byte - err error - ) - peek, err = rd.Peek(100) - if err != nil { - t.Fatal(err) - } - if len(peek) != 100 { - t.Fatalf("asked for %d bytes; got %d", 100, len(peek)) - } - if !bytes.Equal(peek, bts[:100]) { - t.Fatal("peeked bytes not equal") - } - - // now, a peek > buffer size - peek, err = rd.Peek(256) - if err != nil { - t.Fatal(err) - } - if len(peek) != 256 { - t.Fatalf("asked for %d bytes; got %d", 100, len(peek)) - } - if !bytes.Equal(peek, bts[:256]) { - t.Fatal("peeked bytes not equal") - } - - // now try to peek past EOF - peek, err = rd.Peek(2048) - if err != io.EOF { - t.Fatalf("expected error %q; got %q", io.EOF, err) - } - if len(peek) != 1024 { - t.Fatalf("expected %d bytes peek-able; got %d", 1024, len(peek)) - } -} - -func TestNext(t *testing.T) { - size := 1024 - bts := randomBts(size) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) - - chunksize := 256 - chunks := size / chunksize - - for i := 0; i < chunks; i++ { - out, err := rd.Next(chunksize) - if err != nil { - t.Fatal(err) - } - start := chunksize * i - if !bytes.Equal(bts[start:start+chunksize], out) { - t.Fatalf("chunk %d: chunks not equal", i+1) - } - } -} - -func TestWriteTo(t *testing.T) { - bts := randomBts(2048) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) - - // cause the buffer - // to fill a little, just - // to complicate things - rd.Peek(25) - - var out bytes.Buffer - n, err := rd.WriteTo(&out) - if err != nil { - t.Fatal(err) - } - if n != 2048 { - t.Fatalf("should have written %d bytes; wrote %d", 2048, n) - } - if !bytes.Equal(out.Bytes(), bts) { - t.Fatal("bytes not equal") - } -} - -func TestReadFull(t *testing.T) { - bts := randomBts(1024) - rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 256) - - // try to ReadFull() the whole thing - out := make([]byte, 1024) - n, err := rd.ReadFull(out) - if err != nil { - t.Fatal(err) - } - if n != 1024 { - t.Fatalf("expected to read %d bytes; read %d", 1024, n) - } - if !bytes.Equal(bts, out) { - t.Fatal("bytes not equal") - } - - // we've read everything; this should EOF - n, err = rd.Read(out) - if err != io.EOF { - t.Fatalf("expected %q; got %q", io.EOF, err) - } - - rd.Reset(partialReader{bytes.NewReader(bts)}) - - // now try to read *past* EOF - out = make([]byte, 1500) - n, err = rd.ReadFull(out) - if err != io.ErrUnexpectedEOF { - t.Fatalf("expected error %q; got %q", io.EOF, err) - } - if n != 1024 { - t.Fatalf("expected to read %d bytes; read %d", 1024, n) - } -} - -type readCounter struct { - r io.Reader - count int -} - -func (r *readCounter) Read(p []byte) (int, error) { - r.count++ - return r.r.Read(p) -} - -func TestReadFullPerf(t *testing.T) { - const size = 1 << 22 - data := randomBts(size) - - c := readCounter{ - r: &partialReader{ - r: bytes.NewReader(data), - }, - } - - r := NewReader(&c) - - const segments = 4 - out := make([]byte, size/segments) - - for i := 0; i < segments; i++ { - // force an unaligned read - _, err := r.Peek(5) - if err != nil { - t.Fatal(err) - } - - n, err := r.ReadFull(out) - if err != nil { - t.Fatal(err) - } - if n != size/segments { - t.Fatalf("read %d bytes, not %d", n, size/segments) - } - } - - t.Logf("called Read() on the underlying reader %d times to fill %d buffers", c.count, size/r.BufferSize()) -} diff --git a/vendor/github.com/philhofer/fwd/writer.go b/vendor/github.com/philhofer/fwd/writer.go deleted file mode 100644 index 2dc392a9..00000000 --- a/vendor/github.com/philhofer/fwd/writer.go +++ /dev/null @@ -1,224 +0,0 @@ -package fwd - -import "io" - -const ( - // DefaultWriterSize is the - // default write buffer size. - DefaultWriterSize = 2048 - - minWriterSize = minReaderSize -) - -// Writer is a buffered writer -type Writer struct { - w io.Writer // writer - buf []byte // 0:len(buf) is bufered data -} - -// NewWriter returns a new writer -// that writes to 'w' and has a buffer -// that is `DefaultWriterSize` bytes. -func NewWriter(w io.Writer) *Writer { - if wr, ok := w.(*Writer); ok { - return wr - } - return &Writer{ - w: w, - buf: make([]byte, 0, DefaultWriterSize), - } -} - -// NewWriterSize returns a new writer -// that writes to 'w' and has a buffer -// that is 'size' bytes. -func NewWriterSize(w io.Writer, size int) *Writer { - if wr, ok := w.(*Writer); ok && cap(wr.buf) >= size { - return wr - } - return &Writer{ - w: w, - buf: make([]byte, 0, max(size, minWriterSize)), - } -} - -// Buffered returns the number of buffered bytes -// in the reader. -func (w *Writer) Buffered() int { return len(w.buf) } - -// BufferSize returns the maximum size of the buffer. -func (w *Writer) BufferSize() int { return cap(w.buf) } - -// Flush flushes any buffered bytes -// to the underlying writer. -func (w *Writer) Flush() error { - l := len(w.buf) - if l > 0 { - n, err := w.w.Write(w.buf) - - // if we didn't write the whole - // thing, copy the unwritten - // bytes to the beginnning of the - // buffer. - if n < l && n > 0 { - w.pushback(n) - if err == nil { - err = io.ErrShortWrite - } - } - if err != nil { - return err - } - w.buf = w.buf[:0] - return nil - } - return nil -} - -// Write implements `io.Writer` -func (w *Writer) Write(p []byte) (int, error) { - c, l, ln := cap(w.buf), len(w.buf), len(p) - avail := c - l - - // requires flush - if avail < ln { - if err := w.Flush(); err != nil { - return 0, err - } - l = len(w.buf) - } - // too big to fit in buffer; - // write directly to w.w - if c < ln { - return w.w.Write(p) - } - - // grow buf slice; copy; return - w.buf = w.buf[:l+ln] - return copy(w.buf[l:], p), nil -} - -// WriteString is analogous to Write, but it takes a string. -func (w *Writer) WriteString(s string) (int, error) { - c, l, ln := cap(w.buf), len(w.buf), len(s) - avail := c - l - - // requires flush - if avail < ln { - if err := w.Flush(); err != nil { - return 0, err - } - l = len(w.buf) - } - // too big to fit in buffer; - // write directly to w.w - // - // yes, this is unsafe. *but* - // io.Writer is not allowed - // to mutate its input or - // maintain a reference to it, - // per the spec in package io. - // - // plus, if the string is really - // too big to fit in the buffer, then - // creating a copy to write it is - // expensive (and, strictly speaking, - // unnecessary) - if c < ln { - return w.w.Write(unsafestr(s)) - } - - // grow buf slice; copy; return - w.buf = w.buf[:l+ln] - return copy(w.buf[l:], s), nil -} - -// WriteByte implements `io.ByteWriter` -func (w *Writer) WriteByte(b byte) error { - if len(w.buf) == cap(w.buf) { - if err := w.Flush(); err != nil { - return err - } - } - w.buf = append(w.buf, b) - return nil -} - -// Next returns the next 'n' free bytes -// in the write buffer, flushing the writer -// as necessary. Next will return `io.ErrShortBuffer` -// if 'n' is greater than the size of the write buffer. -// Calls to 'next' increment the write position by -// the size of the returned buffer. -func (w *Writer) Next(n int) ([]byte, error) { - c, l := cap(w.buf), len(w.buf) - if n > c { - return nil, io.ErrShortBuffer - } - avail := c - l - if avail < n { - if err := w.Flush(); err != nil { - return nil, err - } - l = len(w.buf) - } - w.buf = w.buf[:l+n] - return w.buf[l:], nil -} - -// take the bytes from w.buf[n:len(w.buf)] -// and put them at the beginning of w.buf, -// and resize to the length of the copied segment. -func (w *Writer) pushback(n int) { - w.buf = w.buf[:copy(w.buf, w.buf[n:])] -} - -// ReadFrom implements `io.ReaderFrom` -func (w *Writer) ReadFrom(r io.Reader) (int64, error) { - // anticipatory flush - if err := w.Flush(); err != nil { - return 0, err - } - - w.buf = w.buf[0:cap(w.buf)] // expand buffer - - var nn int64 // written - var err error // error - var x int // read - - // 1:1 reads and writes - for err == nil { - x, err = r.Read(w.buf) - if x > 0 { - n, werr := w.w.Write(w.buf[:x]) - nn += int64(n) - - if err != nil { - if n < x && n > 0 { - w.pushback(n - x) - } - return nn, werr - } - if n < x { - w.pushback(n - x) - return nn, io.ErrShortWrite - } - } else if err == nil { - err = io.ErrNoProgress - break - } - } - if err != io.EOF { - return nn, err - } - - // we only clear here - // because we are sure - // the writes have - // succeeded. otherwise, - // we retain the data in case - // future writes succeed. - w.buf = w.buf[0:0] - - return nn, nil -} diff --git a/vendor/github.com/philhofer/fwd/writer_appengine.go b/vendor/github.com/philhofer/fwd/writer_appengine.go deleted file mode 100644 index e367f393..00000000 --- a/vendor/github.com/philhofer/fwd/writer_appengine.go +++ /dev/null @@ -1,5 +0,0 @@ -// +build appengine - -package fwd - -func unsafestr(s string) []byte { return []byte(s) } diff --git a/vendor/github.com/philhofer/fwd/writer_test.go b/vendor/github.com/philhofer/fwd/writer_test.go deleted file mode 100644 index 3dcf3a5b..00000000 --- a/vendor/github.com/philhofer/fwd/writer_test.go +++ /dev/null @@ -1,239 +0,0 @@ -package fwd - -import ( - "bytes" - "io" - "math/rand" - "testing" -) - -type chunkedWriter struct { - w *Writer -} - -// writes 'p' in randomly-sized chunks -func (c chunkedWriter) Write(p []byte) (int, error) { - l := len(p) - n := 0 - for n < l { - amt := max(rand.Intn(l-n), 1) // number of bytes to write; at least 1 - nn, err := c.w.Write(p[n : n+amt]) // - n += nn - if err == nil && nn < amt { - err = io.ErrShortWrite - } - if err != nil { - return n, err - } - } - return n, nil -} - -// analogous to Write(), but w/ str -func (c chunkedWriter) WriteString(s string) (int, error) { - l := len(s) - n := 0 - for n < l { - amt := max(rand.Intn(l-n), 1) // number of bytes to write; at least 1 - nn, err := c.w.WriteString(s[n : n+amt]) // - n += nn - if err == nil && nn < amt { - err = io.ErrShortWrite - } - if err != nil { - return n, err - } - } - return n, nil -} - -// writes via random calls to Next() -type nextWriter struct { - wr *Writer -} - -func (c nextWriter) Write(p []byte) (int, error) { - l := len(p) - n := 0 - for n < l { - amt := max(rand.Intn(l-n), 1) // at least 1 byte - fwd, err := c.wr.Next(amt) // get next (amt) bytes - if err != nil { - - // this may happen occasionally - if err == io.ErrShortBuffer { - if cap(c.wr.buf) >= amt { - panic("bad io.ErrShortBuffer") - } - continue - } - - return n, err - } - if len(fwd) != amt { - panic("bad Next() len") - } - n += copy(fwd, p[n:]) - } - return n, nil -} - -func TestWrite(t *testing.T) { - nbts := 4096 - bts := randomBts(nbts) - var buf bytes.Buffer - wr := NewWriterSize(&buf, 512) - - if wr.BufferSize() != 512 { - t.Fatalf("expected BufferSize() to be %d; found %d", 512, wr.BufferSize()) - } - - cwr := chunkedWriter{wr} - nb, err := cwr.Write(bts) - if err != nil { - t.Fatal(err) - } - if nb != nbts { - t.Fatalf("expected to write %d bytes; wrote %d bytes", nbts, nb) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - if wr.Buffered() != 0 { - t.Fatalf("expected 0 buffered bytes; found %d", wr.Buffered()) - } - - if buf.Len() != nbts { - t.Fatalf("wrote %d bytes, but buffer is %d bytes long", nbts, buf.Len()) - } - if !bytes.Equal(bts, buf.Bytes()) { - t.Fatal("buf.Bytes() is not the same as the input bytes") - } -} - -func TestWriteString(t *testing.T) { - nbts := 3998 - str := string(randomBts(nbts)) - var buf bytes.Buffer - wr := NewWriterSize(&buf, 1137) - - if wr.BufferSize() != 1137 { - t.Fatalf("expected BufferSize() to return %d; returned %d", 1137, wr.BufferSize()) - } - - cwr := chunkedWriter{wr} - nb, err := cwr.WriteString(str) - if err != nil { - t.Fatal(err) - } - if nb != nbts { - t.Fatalf("expected to write %d bytes; wrote %d bytes", nbts, nb) - } - - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - if wr.Buffered() != 0 { - t.Fatalf("expected 0 buffered bytes; found %d", wr.Buffered()) - } - - if buf.Len() != nbts { - t.Fatalf("wrote %d bytes, buf buffer is %d bytes long", nbts, buf.Len()) - } - if buf.String() != str { - t.Fatal("buf.String() is not the same as input string") - } -} - -func TestWriteByte(t *testing.T) { - nbts := 3200 - bts := randomBts(nbts) - var buf bytes.Buffer - wr := NewWriter(&buf) - - if wr.BufferSize() != DefaultWriterSize { - t.Fatalf("expected BufferSize() to return %d; returned %d", DefaultWriterSize, wr.BufferSize()) - } - - // write byte-by-byte - for _, b := range bts { - if err := wr.WriteByte(b); err != nil { - t.Fatal(err) - } - } - - err := wr.Flush() - if err != nil { - t.Fatal(err) - } - - if buf.Len() != nbts { - t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) - } - - if !bytes.Equal(buf.Bytes(), bts) { - t.Fatal("buf.Bytes() and input are not equal") - } -} - -func TestWriterNext(t *testing.T) { - nbts := 1871 - bts := randomBts(nbts) - var buf bytes.Buffer - wr := NewWriterSize(&buf, 500) - nwr := nextWriter{wr} - - nb, err := nwr.Write(bts) - if err != nil { - t.Fatal(err) - } - - if nb != nbts { - t.Fatalf("expected to write %d bytes; wrote %d", nbts, nb) - } - - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - if buf.Len() != nbts { - t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) - } - - if !bytes.Equal(buf.Bytes(), bts) { - t.Fatal("buf.Bytes() and input are not equal") - } -} - -func TestReadFrom(t *testing.T) { - nbts := 2139 - bts := randomBts(nbts) - var buf bytes.Buffer - wr := NewWriterSize(&buf, 987) - - rd := partialReader{bytes.NewReader(bts)} - - nb, err := wr.ReadFrom(rd) - if err != nil { - t.Fatal(err) - } - if nb != int64(nbts) { - t.Fatalf("expeted to write %d bytes; wrote %d", nbts, nb) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - if buf.Len() != nbts { - t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) - } - if !bytes.Equal(buf.Bytes(), bts) { - t.Fatal("buf.Bytes() and input are not equal") - } - -} diff --git a/vendor/github.com/philhofer/fwd/writer_unsafe.go b/vendor/github.com/philhofer/fwd/writer_unsafe.go deleted file mode 100644 index a0bf453b..00000000 --- a/vendor/github.com/philhofer/fwd/writer_unsafe.go +++ /dev/null @@ -1,18 +0,0 @@ -// +build !appengine - -package fwd - -import ( - "reflect" - "unsafe" -) - -// unsafe cast string as []byte -func unsafestr(b string) []byte { - l := len(b) - return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ - Len: l, - Cap: l, - Data: (*reflect.StringHeader)(unsafe.Pointer(&b)).Data, - })) -} diff --git a/vendor/github.com/tinylib/msgp/.gitignore b/vendor/github.com/tinylib/msgp/.gitignore deleted file mode 100644 index 17f1ccdc..00000000 --- a/vendor/github.com/tinylib/msgp/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -_generated/generated.go -_generated/generated_test.go -_generated/*_gen.go -_generated/*_gen_test.go -msgp/defgen_test.go -msgp/cover.out -*~ \ No newline at end of file diff --git a/vendor/github.com/tinylib/msgp/.travis.yml b/vendor/github.com/tinylib/msgp/.travis.yml deleted file mode 100644 index b9c6a1b6..00000000 --- a/vendor/github.com/tinylib/msgp/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: go - -go: - - 1.7 - - tip - -env: - - GIMME_ARCH=amd64 - - GIMME_ARCH=386 - -script: "make travis" diff --git a/vendor/github.com/tinylib/msgp/LICENSE b/vendor/github.com/tinylib/msgp/LICENSE deleted file mode 100644 index 14d60424..00000000 --- a/vendor/github.com/tinylib/msgp/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -Copyright (c) 2014 Philip Hofer -Portions Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated - -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. \ No newline at end of file diff --git a/vendor/github.com/tinylib/msgp/Makefile b/vendor/github.com/tinylib/msgp/Makefile deleted file mode 100644 index 81b8b126..00000000 --- a/vendor/github.com/tinylib/msgp/Makefile +++ /dev/null @@ -1,55 +0,0 @@ - -# NOTE: This Makefile is only necessary if you -# plan on developing the msgp tool and library. -# Installation can still be performed with a -# normal `go install`. - -# generated integration test files -GGEN = ./_generated/generated.go ./_generated/generated_test.go -# generated unit test files -MGEN = ./msgp/defgen_test.go - -SHELL := /bin/bash - -BIN = $(GOBIN)/msgp - -.PHONY: clean wipe install get-deps bench all - -$(BIN): */*.go - @go install ./... - -install: $(BIN) - -$(GGEN): ./_generated/def.go - go generate ./_generated - -$(MGEN): ./msgp/defs_test.go - go generate ./msgp - -test: all - go test -v ./msgp - go test -v ./_generated - -bench: all - go test -bench . ./msgp - go test -bench . ./_generated - -clean: - $(RM) $(GGEN) $(MGEN) - -wipe: clean - $(RM) $(BIN) - -get-deps: - go get -d -t ./... - -all: install $(GGEN) $(MGEN) - -# travis CI enters here -travis: - go get -d -t ./... - go build -o "$${GOPATH%%:*}/bin/msgp" . - go generate ./msgp - go generate ./_generated - go test ./msgp - go test ./_generated diff --git a/vendor/github.com/tinylib/msgp/README.md b/vendor/github.com/tinylib/msgp/README.md deleted file mode 100644 index 1328ccaf..00000000 --- a/vendor/github.com/tinylib/msgp/README.md +++ /dev/null @@ -1,102 +0,0 @@ -MessagePack Code Generator [![Build Status](https://travis-ci.org/tinylib/msgp.svg?branch=master)](https://travis-ci.org/tinylib/msgp) -======= - -This is a code generation tool and serialization library for [MessagePack](http://msgpack.org). You can read more about MessagePack [in the wiki](http://github.com/tinylib/msgp/wiki), or at [msgpack.org](http://msgpack.org). - -### Why? - -- Use Go as your schema language -- Performance -- [JSON interop](http://godoc.org/github.com/tinylib/msgp/msgp#CopyToJSON) -- [User-defined extensions](http://github.com/tinylib/msgp/wiki/Using-Extensions) -- Type safety -- Encoding flexibility - -### Quickstart - -In a source file, include the following directive: - -```go -//go:generate msgp -``` - -The `msgp` command will generate serialization methods for all exported type declarations in the file. - -You can [read more about the code generation options here](http://github.com/tinylib/msgp/wiki/Using-the-Code-Generator). - -### Use - -Field names can be set in much the same way as the `encoding/json` package. For example: - -```go -type Person struct { - Name string `msg:"name"` - Address string `msg:"address"` - Age int `msg:"age"` - Hidden string `msg:"-"` // this field is ignored - unexported bool // this field is also ignored -} -``` - -By default, the code generator will satisfy `msgp.Sizer`, `msgp.Encodable`, `msgp.Decodable`, -`msgp.Marshaler`, and `msgp.Unmarshaler`. Carefully-designed applications can use these methods to do -marshalling/unmarshalling with zero heap allocations. - -While `msgp.Marshaler` and `msgp.Unmarshaler` are quite similar to the standard library's -`json.Marshaler` and `json.Unmarshaler`, `msgp.Encodable` and `msgp.Decodable` are useful for -stream serialization. (`*msgp.Writer` and `*msgp.Reader` are essentially protocol-aware versions -of `*bufio.Writer` and `*bufio.Reader`, respectively.) - -### Features - - - Extremely fast generated code - - Test and benchmark generation - - JSON interoperability (see `msgp.CopyToJSON() and msgp.UnmarshalAsJSON()`) - - Support for complex type declarations - - Native support for Go's `time.Time`, `complex64`, and `complex128` types - - Generation of both `[]byte`-oriented and `io.Reader/io.Writer`-oriented methods - - Support for arbitrary type system extensions - - [Preprocessor directives](http://github.com/tinylib/msgp/wiki/Preprocessor-Directives) - - File-based dependency model means fast codegen regardless of source tree size. - -Consider the following: -```go -const Eight = 8 -type MyInt int -type Data []byte - -type Struct struct { - Which map[string]*MyInt `msg:"which"` - Other Data `msg:"other"` - Nums [Eight]float64 `msg:"nums"` -} -``` -As long as the declarations of `MyInt` and `Data` are in the same file as `Struct`, the parser will determine that the type information for `MyInt` and `Data` can be passed into the definition of `Struct` before its methods are generated. - -#### Extensions - -MessagePack supports defining your own types through "extensions," which are just a tuple of -the data "type" (`int8`) and the raw binary. You [can see a worked example in the wiki.](http://github.com/tinylib/msgp/wiki/Using-Extensions) - -### Status - -Mostly stable, in that no breaking changes have been made to the `/msgp` library in more than a year. Newer versions -of the code may generate different code than older versions for performance reasons. I (@philhofer) am aware of a -number of stability-critical commercial applications that use this code with good results. But, caveat emptor. - -You can read more about how `msgp` maps MessagePack types onto Go types [in the wiki](http://github.com/tinylib/msgp/wiki). - -Here some of the known limitations/restrictions: - -- Identifiers from outside the processed source file are assumed (optimistically) to satisfy the generator's interfaces. If this isn't the case, your code will fail to compile. -- Like most serializers, `chan` and `func` fields are ignored, as well as non-exported fields. -- Encoding of `interface{}` is limited to built-ins or types that have explicit encoding methods. -- _Maps must have `string` keys._ This is intentional (as it preserves JSON interop.) Although non-string map keys are not forbidden by the MessagePack standard, many serializers impose this restriction. (It also means *any* well-formed `struct` can be de-serialized into a `map[string]interface{}`.) The only exception to this rule is that the deserializers will allow you to read map keys encoded as `bin` types, due to the fact that some legacy encodings permitted this. (However, those values will still be cast to Go `string`s, and they will be converted to `str` types when re-encoded. It is the responsibility of the user to ensure that map keys are UTF-8 safe in this case.) The same rules hold true for JSON translation. - -If the output compiles, then there's a pretty good chance things are fine. (Plus, we generate tests for you.) *Please, please, please* file an issue if you think the generator is writing broken code. - -### Performance - -If you like benchmarks, see [here](http://bravenewgeek.com/so-you-wanna-go-fast/) and [here](https://github.com/alecthomas/go_serialization_benchmarks). - -As one might expect, the generated methods that deal with `[]byte` are faster for small objects, but the `io.Reader/Writer` methods are generally more memory-efficient (and, at some point, faster) for large (> 2KB) objects. diff --git a/vendor/github.com/tinylib/msgp/_generated/def.go b/vendor/github.com/tinylib/msgp/_generated/def.go deleted file mode 100644 index 5579b256..00000000 --- a/vendor/github.com/tinylib/msgp/_generated/def.go +++ /dev/null @@ -1,212 +0,0 @@ -package _generated - -import ( - "github.com/tinylib/msgp/msgp" - "os" - "time" -) - -//go:generate msgp -o generated.go - -// All of the struct -// definitions in this -// file are fed to the code -// generator when `make test` is -// called, followed by an -// invocation of `go test -v` in this -// directory. A simple way of testing -// a struct definition is -// by adding it to this file. - -type Block [32]byte - -// tests edge-cases with -// compiling size compilation. -type X struct { - Values [32]byte // should compile to 32*msgp.ByteSize; encoded as Bin - ValuesPtr *[32]byte // check (*)[:] deref - More Block // should be identical to the above - Others [][32]int32 // should compile to len(x.Others)*32*msgp.Int32Size - Matrix [][]int32 // should not optimize - ManyFixed []Fixed -} - -// test fixed-size struct -// size compilation -type Fixed struct { - A float64 - B bool -} - -type TestType struct { - F *float64 `msg:"float"` - Els map[string]string `msg:"elements"` - Obj struct { // test anonymous struct - ValueA string `msg:"value_a"` - ValueB []byte `msg:"value_b"` - } `msg:"object"` - Child *TestType `msg:"child"` - Time time.Time `msg:"time"` - Any interface{} `msg:"any"` - Appended msgp.Raw `msg:"appended"` - Num msgp.Number `msg:"num"` - Slice1 []string - Slice2 []string - SlicePtr *[]string -} - -//msgp:tuple Object -type Object struct { - ObjectNo string `msg:"objno"` - Slice1 []string `msg:"slice1"` - Slice2 []string `msg:"slice2"` - MapMap map[string]map[string]string -} - -//msgp:tuple TestBench - -type TestBench struct { - Name string - BirthDay time.Time - Phone string - Siblings int - Spouse bool - Money float64 -} - -//msgp:tuple TestFast - -type TestFast struct { - Lat, Long, Alt float64 // test inline decl - Data []byte -} - -// Test nested aliases -type FastAlias TestFast -type AliasContainer struct { - Fast FastAlias -} - -// Test dependency resolution -type IntA int -type IntB IntA -type IntC IntB - -type TestHidden struct { - A string - B []float64 - Bad func(string) bool // This results in a warning: field "Bad" unsupported -} - -type Embedded struct { - *Embedded // test embedded field - Children []Embedded - PtrChildren []*Embedded - Other string -} - -const eight = 8 - -type Things struct { - Cmplx complex64 `msg:"complex"` // test slices - Vals []int32 `msg:"values"` - Arr [msgp.ExtensionPrefixSize]float64 `msg:"arr"` // test const array and *ast.SelectorExpr as array size - Arr2 [4]float64 `msg:"arr2"` // test basic lit array - Ext *msgp.RawExtension `msg:"ext,extension"` // test extension - Oext msgp.RawExtension `msg:"oext,extension"` // test extension reference -} - -//msgp:shim SpecialID as:[]byte using:toBytes/fromBytes - -type SpecialID string -type TestObj struct{ ID1, ID2 SpecialID } - -func toBytes(id SpecialID) []byte { return []byte(string(id)) } -func fromBytes(id []byte) SpecialID { return SpecialID(string(id)) } - -type MyEnum byte - -const ( - A MyEnum = iota - B - C - D - invalid -) - -// test shim directive (below) - -//msgp:shim MyEnum as:string using:(MyEnum).String/myenumStr - -//msgp:shim *os.File as:string using:filetostr/filefromstr - -func filetostr(f *os.File) string { - return f.Name() -} - -func filefromstr(s string) *os.File { - f, _ := os.Open(s) - return f -} - -func (m MyEnum) String() string { - switch m { - case A: - return "A" - case B: - return "B" - case C: - return "C" - case D: - return "D" - default: - return "" - } -} - -func myenumStr(s string) MyEnum { - switch s { - case "A": - return A - case "B": - return B - case "C": - return C - case "D": - return D - default: - return invalid - } -} - -// test pass-specific directive -//msgp:decode ignore Insane - -type Insane [3]map[string]struct{ A, B CustomInt } - -type Custom struct { - Bts CustomBytes `msg:"bts"` - Mp map[string]*Embedded `msg:"mp"` - Enums []MyEnum `msg:"enums"` // test explicit enum shim - Some FileHandle `msg:file_handle` -} - -type Files []*os.File - -type FileHandle struct { - Relevent Files `msg:"files"` - Name string `msg:"name"` -} - -type CustomInt int -type CustomBytes []byte - -type Wrapper struct { - Tree *Tree -} - -type Tree struct { - Children []Tree - Element int - Parent *Wrapper -} diff --git a/vendor/github.com/tinylib/msgp/_generated/gen_test.go b/vendor/github.com/tinylib/msgp/_generated/gen_test.go deleted file mode 100644 index a89b3be8..00000000 --- a/vendor/github.com/tinylib/msgp/_generated/gen_test.go +++ /dev/null @@ -1,150 +0,0 @@ -package _generated - -import ( - "bytes" - "github.com/tinylib/msgp/msgp" - "reflect" - "testing" - "time" -) - -// benchmark encoding a small, "fast" type. -// the point here is to see how much garbage -// is generated intrinsically by the encoding/ -// decoding process as opposed to the nature -// of the struct. -func BenchmarkFastEncode(b *testing.B) { - v := &TestFast{ - Lat: 40.12398, - Long: -41.9082, - Alt: 201.08290, - Data: []byte("whaaaaargharbl"), - } - var buf bytes.Buffer - msgp.Encode(&buf, v) - en := msgp.NewWriter(msgp.Nowhere) - b.SetBytes(int64(buf.Len())) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - v.EncodeMsg(en) - } - en.Flush() -} - -// benchmark decoding a small, "fast" type. -// the point here is to see how much garbage -// is generated intrinsically by the encoding/ -// decoding process as opposed to the nature -// of the struct. -func BenchmarkFastDecode(b *testing.B) { - v := &TestFast{ - Lat: 40.12398, - Long: -41.9082, - Alt: 201.08290, - Data: []byte("whaaaaargharbl"), - } - - var buf bytes.Buffer - msgp.Encode(&buf, v) - dc := msgp.NewReader(msgp.NewEndlessReader(buf.Bytes(), b)) - b.SetBytes(int64(buf.Len())) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - v.DecodeMsg(dc) - } -} - -func (a *TestType) Equal(b *TestType) bool { - // compare times, then zero out those - // fields, perform a DeepEqual, and restore them - ta, tb := a.Time, b.Time - if !ta.Equal(tb) { - return false - } - a.Time, b.Time = time.Time{}, time.Time{} - ok := reflect.DeepEqual(a, b) - a.Time, b.Time = ta, tb - return ok -} - -// This covers the following cases: -// - Recursive types -// - Non-builtin identifiers (and recursive types) -// - time.Time -// - map[string]string -// - anonymous structs -// -func Test1EncodeDecode(t *testing.T) { - f := 32.00 - tt := &TestType{ - F: &f, - Els: map[string]string{ - "thing_one": "one", - "thing_two": "two", - }, - Obj: struct { - ValueA string `msg:"value_a"` - ValueB []byte `msg:"value_b"` - }{ - ValueA: "here's the first inner value", - ValueB: []byte("here's the second inner value"), - }, - Child: nil, - Time: time.Now(), - Appended: msgp.Raw([]byte{0xc0}), // 'nil' - } - - var buf bytes.Buffer - - err := msgp.Encode(&buf, tt) - if err != nil { - t.Fatal(err) - } - - tnew := new(TestType) - - err = msgp.Decode(&buf, tnew) - if err != nil { - t.Error(err) - } - - if !tt.Equal(tnew) { - t.Logf("in: %v", tt) - t.Logf("out: %v", tnew) - t.Fatal("objects not equal") - } - - tanother := new(TestType) - - buf.Reset() - msgp.Encode(&buf, tt) - - var left []byte - left, err = tanother.UnmarshalMsg(buf.Bytes()) - if err != nil { - t.Error(err) - } - if len(left) > 0 { - t.Errorf("%d bytes left", len(left)) - } - - if !tt.Equal(tanother) { - t.Logf("in: %v", tt) - t.Logf("out: %v", tanother) - t.Fatal("objects not equal") - } -} - -func TestIssue168(t *testing.T) { - buf := bytes.Buffer{} - test := TestObj{} - - msgp.Encode(&buf, &TestObj{ID1: "1", ID2: "2"}) - msgp.Decode(&buf, &test) - - if test.ID1 != "1" || test.ID2 != "2" { - t.Fatalf("got back %+v", test) - } -} diff --git a/vendor/github.com/tinylib/msgp/_generated/issue94.go b/vendor/github.com/tinylib/msgp/_generated/issue94.go deleted file mode 100644 index 4384d5d0..00000000 --- a/vendor/github.com/tinylib/msgp/_generated/issue94.go +++ /dev/null @@ -1,31 +0,0 @@ -package _generated - -import ( - "time" -) - -//go:generate msgp - -// Issue 94: shims were not propogated recursively, -// which caused shims that weren't at the top level -// to be silently ignored. -// -// The following line will generate an error after -// the code is generated if the generated code doesn't -// have the right identifier in it. - -//go:generate ./search.sh $GOFILE timetostr - -//msgp:shim time.Time as:string using:timetostr/strtotime -type T struct { - T time.Time -} - -func timetostr(t time.Time) string { - return t.Format(time.RFC3339) -} - -func strtotime(s string) time.Time { - t, _ := time.Parse(time.RFC3339, s) - return t -} diff --git a/vendor/github.com/tinylib/msgp/_generated/search.sh b/vendor/github.com/tinylib/msgp/_generated/search.sh deleted file mode 100755 index aa6d6477..00000000 --- a/vendor/github.com/tinylib/msgp/_generated/search.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh - -FILE=$(echo $1 | sed s/.go/_gen.go/) -echo "searching" $FILE "for" $2 -grep -q $2 $FILE -if [ $? -eq 0 ] -then - echo "OK" -else - echo "whoops!" - exit 1 -fi diff --git a/vendor/github.com/tinylib/msgp/gen/decode.go b/vendor/github.com/tinylib/msgp/gen/decode.go deleted file mode 100644 index f3907601..00000000 --- a/vendor/github.com/tinylib/msgp/gen/decode.go +++ /dev/null @@ -1,218 +0,0 @@ -package gen - -import ( - "io" - "strconv" -) - -func decode(w io.Writer) *decodeGen { - return &decodeGen{ - p: printer{w: w}, - hasfield: false, - } -} - -type decodeGen struct { - passes - p printer - hasfield bool -} - -func (d *decodeGen) Method() Method { return Decode } - -func (d *decodeGen) needsField() { - if d.hasfield { - return - } - d.p.print("\nvar field []byte; _ = field") - d.hasfield = true -} - -func (d *decodeGen) Execute(p Elem) error { - p = d.applyall(p) - if p == nil { - return nil - } - d.hasfield = false - if !d.p.ok() { - return d.p.err - } - - if !IsPrintable(p) { - return nil - } - - d.p.comment("DecodeMsg implements msgp.Decodable") - - d.p.printf("\nfunc (%s %s) DecodeMsg(dc *msgp.Reader) (err error) {", p.Varname(), methodReceiver(p)) - next(d, p) - d.p.nakedReturn() - unsetReceiver(p) - return d.p.err -} - -func (d *decodeGen) gStruct(s *Struct) { - if !d.p.ok() { - return - } - if s.AsTuple { - d.structAsTuple(s) - } else { - d.structAsMap(s) - } - return -} - -func (d *decodeGen) assignAndCheck(name string, typ string) { - if !d.p.ok() { - return - } - d.p.printf("\n%s, err = dc.Read%s()", name, typ) - d.p.print(errcheck) -} - -func (d *decodeGen) structAsTuple(s *Struct) { - nfields := len(s.Fields) - - sz := randIdent() - d.p.declare(sz, u32) - d.assignAndCheck(sz, arrayHeader) - d.p.arrayCheck(strconv.Itoa(nfields), sz) - for i := range s.Fields { - if !d.p.ok() { - return - } - next(d, s.Fields[i].FieldElem) - } -} - -func (d *decodeGen) structAsMap(s *Struct) { - d.needsField() - sz := randIdent() - d.p.declare(sz, u32) - d.assignAndCheck(sz, mapHeader) - - d.p.printf("\nfor %s > 0 {\n%s--", sz, sz) - d.assignAndCheck("field", mapKey) - d.p.print("\nswitch msgp.UnsafeString(field) {") - for i := range s.Fields { - d.p.printf("\ncase \"%s\":", s.Fields[i].FieldTag) - next(d, s.Fields[i].FieldElem) - if !d.p.ok() { - return - } - } - d.p.print("\ndefault:\nerr = dc.Skip()") - d.p.print(errcheck) - d.p.closeblock() // close switch - d.p.closeblock() // close for loop -} - -func (d *decodeGen) gBase(b *BaseElem) { - if !d.p.ok() { - return - } - - // open block for 'tmp' - var tmp string - if b.Convert { - tmp = randIdent() - d.p.printf("\n{ var %s %s", tmp, b.BaseType()) - } - - vname := b.Varname() // e.g. "z.FieldOne" - bname := b.BaseName() // e.g. "Float64" - - // handle special cases - // for object type. - switch b.Value { - case Bytes: - if b.Convert { - d.p.printf("\n%s, err = dc.ReadBytes([]byte(%s))", tmp, vname) - } else { - d.p.printf("\n%s, err = dc.ReadBytes(%s)", vname, vname) - } - case IDENT: - d.p.printf("\nerr = %s.DecodeMsg(dc)", vname) - case Ext: - d.p.printf("\nerr = dc.ReadExtension(%s)", vname) - default: - if b.Convert { - d.p.printf("\n%s, err = dc.Read%s()", tmp, bname) - } else { - d.p.printf("\n%s, err = dc.Read%s()", vname, bname) - } - } - - // close block for 'tmp' - if b.Convert { - d.p.printf("\n%s = %s(%s)\n}", vname, b.FromBase(), tmp) - } - - d.p.print(errcheck) -} - -func (d *decodeGen) gMap(m *Map) { - if !d.p.ok() { - return - } - sz := randIdent() - - // resize or allocate map - d.p.declare(sz, u32) - d.assignAndCheck(sz, mapHeader) - d.p.resizeMap(sz, m) - - // for element in map, read string/value - // pair and assign - d.p.printf("\nfor %s > 0 {\n%s--", sz, sz) - d.p.declare(m.Keyidx, "string") - d.p.declare(m.Validx, m.Value.TypeName()) - d.assignAndCheck(m.Keyidx, stringTyp) - next(d, m.Value) - d.p.mapAssign(m) - d.p.closeblock() -} - -func (d *decodeGen) gSlice(s *Slice) { - if !d.p.ok() { - return - } - sz := randIdent() - d.p.declare(sz, u32) - d.assignAndCheck(sz, arrayHeader) - d.p.resizeSlice(sz, s) - d.p.rangeBlock(s.Index, s.Varname(), d, s.Els) -} - -func (d *decodeGen) gArray(a *Array) { - if !d.p.ok() { - return - } - - // special case if we have [const]byte - if be, ok := a.Els.(*BaseElem); ok && (be.Value == Byte || be.Value == Uint8) { - d.p.printf("\nerr = dc.ReadExactBytes((%s)[:])", a.Varname()) - d.p.print(errcheck) - return - } - sz := randIdent() - d.p.declare(sz, u32) - d.assignAndCheck(sz, arrayHeader) - d.p.arrayCheck(a.Size, sz) - - d.p.rangeBlock(a.Index, a.Varname(), d, a.Els) -} - -func (d *decodeGen) gPtr(p *Ptr) { - if !d.p.ok() { - return - } - d.p.print("\nif dc.IsNil() {") - d.p.print("\nerr = dc.ReadNil()") - d.p.print(errcheck) - d.p.printf("\n%s = nil\n} else {", p.Varname()) - d.p.initPtr(p) - next(d, p.Value) - d.p.closeblock() -} diff --git a/vendor/github.com/tinylib/msgp/gen/elem.go b/vendor/github.com/tinylib/msgp/gen/elem.go deleted file mode 100644 index 719df2e8..00000000 --- a/vendor/github.com/tinylib/msgp/gen/elem.go +++ /dev/null @@ -1,598 +0,0 @@ -package gen - -import ( - "fmt" - "math/rand" - "strings" -) - -const ( - idxChars = "abcdefghijlkmnopqrstuvwxyz" - idxLen = 3 -) - -// generate a random identifier name -func randIdent() string { - bts := make([]byte, idxLen) - for i := range bts { - bts[i] = idxChars[rand.Intn(len(idxChars))] - } - - // Use a `z` prefix so the randomly generated bytes can't conflict with - // Go keywords (such as `int` and `var`). - return "z" + string(bts) -} - -// This code defines the type declaration tree. -// -// Consider the following: -// -// type Marshaler struct { -// Thing1 *float64 `msg:"thing1"` -// Body []byte `msg:"body"` -// } -// -// A parser using this generator as a backend -// should parse the above into: -// -// var val Elem = &Ptr{ -// name: "z", -// Value: &Struct{ -// Name: "Marshaler", -// Fields: []StructField{ -// { -// FieldTag: "thing1", -// FieldElem: &Ptr{ -// name: "z.Thing1", -// Value: &BaseElem{ -// name: "*z.Thing1", -// Value: Float64, -// Convert: false, -// }, -// }, -// }, -// { -// FieldTag: "body", -// FieldElem: &BaseElem{ -// name: "z.Body", -// Value: Bytes, -// Convert: false, -// }, -// }, -// }, -// }, -// } - -// Base is one of the -// base types -type Primitive uint8 - -// this is effectively the -// list of currently available -// ReadXxxx / WriteXxxx methods. -const ( - Invalid Primitive = iota - Bytes - String - Float32 - Float64 - Complex64 - Complex128 - Uint - Uint8 - Uint16 - Uint32 - Uint64 - Byte - Int - Int8 - Int16 - Int32 - Int64 - Bool - Intf // interface{} - Time // time.Time - Ext // extension - - IDENT // IDENT means an unrecognized identifier -) - -// all of the recognized identities -// that map to primitive types -var primitives = map[string]Primitive{ - "[]byte": Bytes, - "string": String, - "float32": Float32, - "float64": Float64, - "complex64": Complex64, - "complex128": Complex128, - "uint": Uint, - "uint8": Uint8, - "uint16": Uint16, - "uint32": Uint32, - "uint64": Uint64, - "byte": Byte, - "int": Int, - "int8": Int8, - "int16": Int16, - "int32": Int32, - "int64": Int64, - "bool": Bool, - "interface{}": Intf, - "time.Time": Time, - "msgp.Extension": Ext, -} - -// types built into the library -// that satisfy all of the -// interfaces. -var builtins = map[string]struct{}{ - "msgp.Raw": struct{}{}, - "msgp.Number": struct{}{}, -} - -// common data/methods for every Elem -type common struct{ vname, alias string } - -func (c *common) SetVarname(s string) { c.vname = s } -func (c *common) Varname() string { return c.vname } -func (c *common) Alias(typ string) { c.alias = typ } -func (c *common) hidden() {} - -func IsPrintable(e Elem) bool { - if be, ok := e.(*BaseElem); ok && !be.Printable() { - return false - } - return true -} - -// Elem is a go type capable of being -// serialized into MessagePack. It is -// implemented by *Ptr, *Struct, *Array, -// *Slice, *Map, and *BaseElem. -type Elem interface { - // SetVarname sets this nodes - // variable name and recursively - // sets the names of all its children. - // In general, this should only be - // called on the parent of the tree. - SetVarname(s string) - - // Varname returns the variable - // name of the element. - Varname() string - - // TypeName is the canonical - // go type name of the node - // e.g. "string", "int", "map[string]float64" - // OR the alias name, if it has been set. - TypeName() string - - // Alias sets a type (alias) name - Alias(typ string) - - // Copy should perform a deep copy of the object - Copy() Elem - - // Complexity returns a measure of the - // complexity of element (greater than - // or equal to 1.) - Complexity() int - - hidden() -} - -// Ident returns the *BaseElem that corresponds -// to the provided identity. -func Ident(id string) *BaseElem { - p, ok := primitives[id] - if ok { - return &BaseElem{Value: p} - } - be := &BaseElem{Value: IDENT} - be.Alias(id) - return be -} - -type Array struct { - common - Index string // index variable name - Size string // array size - Els Elem // child -} - -func (a *Array) SetVarname(s string) { - a.common.SetVarname(s) -ridx: - a.Index = randIdent() - - // try to avoid using the same - // index as a parent slice - if strings.Contains(a.Varname(), a.Index) { - goto ridx - } - - a.Els.SetVarname(fmt.Sprintf("%s[%s]", a.Varname(), a.Index)) -} - -func (a *Array) TypeName() string { - if a.common.alias != "" { - return a.common.alias - } - a.common.Alias(fmt.Sprintf("[%s]%s", a.Size, a.Els.TypeName())) - return a.common.alias -} - -func (a *Array) Copy() Elem { - b := *a - b.Els = a.Els.Copy() - return &b -} - -func (a *Array) Complexity() int { return 1 + a.Els.Complexity() } - -// Map is a map[string]Elem -type Map struct { - common - Keyidx string // key variable name - Validx string // value variable name - Value Elem // value element -} - -func (m *Map) SetVarname(s string) { - m.common.SetVarname(s) -ridx: - m.Keyidx = randIdent() - m.Validx = randIdent() - - // just in case - if m.Keyidx == m.Validx { - goto ridx - } - - m.Value.SetVarname(m.Validx) -} - -func (m *Map) TypeName() string { - if m.common.alias != "" { - return m.common.alias - } - m.common.Alias("map[string]" + m.Value.TypeName()) - return m.common.alias -} - -func (m *Map) Copy() Elem { - g := *m - g.Value = m.Value.Copy() - return &g -} - -func (m *Map) Complexity() int { return 2 + m.Value.Complexity() } - -type Slice struct { - common - Index string - Els Elem // The type of each element -} - -func (s *Slice) SetVarname(a string) { - s.common.SetVarname(a) - s.Index = randIdent() - varName := s.Varname() - if varName[0] == '*' { - // Pointer-to-slice requires parenthesis for slicing. - varName = "(" + varName + ")" - } - s.Els.SetVarname(fmt.Sprintf("%s[%s]", varName, s.Index)) -} - -func (s *Slice) TypeName() string { - if s.common.alias != "" { - return s.common.alias - } - s.common.Alias("[]" + s.Els.TypeName()) - return s.common.alias -} - -func (s *Slice) Copy() Elem { - z := *s - z.Els = s.Els.Copy() - return &z -} - -func (s *Slice) Complexity() int { - return 1 + s.Els.Complexity() -} - -type Ptr struct { - common - Value Elem -} - -func (s *Ptr) SetVarname(a string) { - s.common.SetVarname(a) - - // struct fields are dereferenced - // automatically... - switch x := s.Value.(type) { - case *Struct: - // struct fields are automatically dereferenced - x.SetVarname(a) - return - - case *BaseElem: - // identities have pointer receivers - if x.Value == IDENT { - x.SetVarname(a) - } else { - x.SetVarname("*" + a) - } - return - - default: - s.Value.SetVarname("*" + a) - return - } -} - -func (s *Ptr) TypeName() string { - if s.common.alias != "" { - return s.common.alias - } - s.common.Alias("*" + s.Value.TypeName()) - return s.common.alias -} - -func (s *Ptr) Copy() Elem { - v := *s - v.Value = s.Value.Copy() - return &v -} - -func (s *Ptr) Complexity() int { return 1 + s.Value.Complexity() } - -func (s *Ptr) Needsinit() bool { - if be, ok := s.Value.(*BaseElem); ok && be.needsref { - return false - } - return true -} - -type Struct struct { - common - Fields []StructField // field list - AsTuple bool // write as an array instead of a map -} - -func (s *Struct) TypeName() string { - if s.common.alias != "" { - return s.common.alias - } - str := "struct{\n" - for i := range s.Fields { - str += s.Fields[i].FieldName + " " + s.Fields[i].FieldElem.TypeName() + ";\n" - } - str += "}" - s.common.Alias(str) - return s.common.alias -} - -func (s *Struct) SetVarname(a string) { - s.common.SetVarname(a) - writeStructFields(s.Fields, a) -} - -func (s *Struct) Copy() Elem { - g := *s - g.Fields = make([]StructField, len(s.Fields)) - copy(g.Fields, s.Fields) - for i := range s.Fields { - g.Fields[i].FieldElem = s.Fields[i].FieldElem.Copy() - } - return &g -} - -func (s *Struct) Complexity() int { - c := 1 - for i := range s.Fields { - c += s.Fields[i].FieldElem.Complexity() - } - return c -} - -type StructField struct { - FieldTag string // the string inside the `msg:""` tag - FieldName string // the name of the struct field - FieldElem Elem // the field type -} - -// BaseElem is an element that -// can be represented by a primitive -// MessagePack type. -type BaseElem struct { - common - ShimToBase string // shim to base type, or empty - ShimFromBase string // shim from base type, or empty - Value Primitive // Type of element - Convert bool // should we do an explicit conversion? - mustinline bool // must inline; not printable - needsref bool // needs reference for shim -} - -func (s *BaseElem) Printable() bool { return !s.mustinline } - -func (s *BaseElem) Alias(typ string) { - s.common.Alias(typ) - if s.Value != IDENT { - s.Convert = true - } - if strings.Contains(typ, ".") { - s.mustinline = true - } -} - -func (s *BaseElem) SetVarname(a string) { - // extensions whose parents - // are not pointers need to - // be explicitly referenced - if s.Value == Ext || s.needsref { - if strings.HasPrefix(a, "*") { - s.common.SetVarname(a[1:]) - return - } - s.common.SetVarname("&" + a) - return - } - - s.common.SetVarname(a) -} - -// TypeName returns the syntactically correct Go -// type name for the base element. -func (s *BaseElem) TypeName() string { - if s.common.alias != "" { - return s.common.alias - } - s.common.Alias(s.BaseType()) - return s.common.alias -} - -// ToBase, used if Convert==true, is used as tmp = {{ToBase}}({{Varname}}) -func (s *BaseElem) ToBase() string { - if s.ShimToBase != "" { - return s.ShimToBase - } - return s.BaseType() -} - -// FromBase, used if Convert==true, is used as {{Varname}} = {{FromBase}}(tmp) -func (s *BaseElem) FromBase() string { - if s.ShimFromBase != "" { - return s.ShimFromBase - } - return s.TypeName() -} - -// BaseName returns the string form of the -// base type (e.g. Float64, Ident, etc) -func (s *BaseElem) BaseName() string { - // time is a special case; - // we strip the package prefix - if s.Value == Time { - return "Time" - } - return s.Value.String() -} - -func (s *BaseElem) BaseType() string { - switch s.Value { - case IDENT: - return s.TypeName() - - // exceptions to the naming/capitalization - // rule: - case Intf: - return "interface{}" - case Bytes: - return "[]byte" - case Time: - return "time.Time" - case Ext: - return "msgp.Extension" - - // everything else is base.String() with - // the first letter as lowercase - default: - return strings.ToLower(s.BaseName()) - } -} - -func (s *BaseElem) Needsref(b bool) { - s.needsref = b -} - -func (s *BaseElem) Copy() Elem { - g := *s - return &g -} - -func (s *BaseElem) Complexity() int { - if s.Convert && !s.mustinline { - return 2 - } - // we need to return 1 if !printable(), - // in order to make sure that stuff gets - // inlined appropriately - return 1 -} - -// Resolved returns whether or not -// the type of the element is -// a primitive or a builtin provided -// by the package. -func (s *BaseElem) Resolved() bool { - if s.Value == IDENT { - _, ok := builtins[s.TypeName()] - return ok - } - return true -} - -func (k Primitive) String() string { - switch k { - case String: - return "String" - case Bytes: - return "Bytes" - case Float32: - return "Float32" - case Float64: - return "Float64" - case Complex64: - return "Complex64" - case Complex128: - return "Complex128" - case Uint: - return "Uint" - case Uint8: - return "Uint8" - case Uint16: - return "Uint16" - case Uint32: - return "Uint32" - case Uint64: - return "Uint64" - case Byte: - return "Byte" - case Int: - return "Int" - case Int8: - return "Int8" - case Int16: - return "Int16" - case Int32: - return "Int32" - case Int64: - return "Int64" - case Bool: - return "Bool" - case Intf: - return "Intf" - case Time: - return "time.Time" - case Ext: - return "Extension" - case IDENT: - return "Ident" - default: - return "INVALID" - } -} - -// writeStructFields is a trampoline for writeBase for -// all of the fields in a struct -func writeStructFields(s []StructField, name string) { - for i := range s { - s[i].FieldElem.SetVarname(fmt.Sprintf("%s.%s", name, s[i].FieldName)) - } -} diff --git a/vendor/github.com/tinylib/msgp/gen/encode.go b/vendor/github.com/tinylib/msgp/gen/encode.go deleted file mode 100644 index a224a594..00000000 --- a/vendor/github.com/tinylib/msgp/gen/encode.go +++ /dev/null @@ -1,184 +0,0 @@ -package gen - -import ( - "fmt" - "github.com/tinylib/msgp/msgp" - "io" -) - -func encode(w io.Writer) *encodeGen { - return &encodeGen{ - p: printer{w: w}, - } -} - -type encodeGen struct { - passes - p printer - fuse []byte -} - -func (e *encodeGen) Method() Method { return Encode } - -func (e *encodeGen) Apply(dirs []string) error { - return nil -} - -func (e *encodeGen) writeAndCheck(typ string, argfmt string, arg interface{}) { - e.p.printf("\nerr = en.Write%s(%s)", typ, fmt.Sprintf(argfmt, arg)) - e.p.print(errcheck) -} - -func (e *encodeGen) fuseHook() { - if len(e.fuse) > 0 { - e.appendraw(e.fuse) - e.fuse = e.fuse[:0] - } -} - -func (e *encodeGen) Fuse(b []byte) { - if len(e.fuse) > 0 { - e.fuse = append(e.fuse, b...) - } else { - e.fuse = b - } -} - -func (e *encodeGen) Execute(p Elem) error { - if !e.p.ok() { - return e.p.err - } - p = e.applyall(p) - if p == nil { - return nil - } - if !IsPrintable(p) { - return nil - } - - e.p.comment("EncodeMsg implements msgp.Encodable") - - e.p.printf("\nfunc (%s %s) EncodeMsg(en *msgp.Writer) (err error) {", p.Varname(), imutMethodReceiver(p)) - next(e, p) - e.p.nakedReturn() - return e.p.err -} - -func (e *encodeGen) gStruct(s *Struct) { - if !e.p.ok() { - return - } - if s.AsTuple { - e.tuple(s) - } else { - e.structmap(s) - } - return -} - -func (e *encodeGen) tuple(s *Struct) { - nfields := len(s.Fields) - data := msgp.AppendArrayHeader(nil, uint32(nfields)) - e.p.printf("\n// array header, size %d", nfields) - e.Fuse(data) - for i := range s.Fields { - if !e.p.ok() { - return - } - next(e, s.Fields[i].FieldElem) - } -} - -func (e *encodeGen) appendraw(bts []byte) { - e.p.print("\nerr = en.Append(") - for i, b := range bts { - if i != 0 { - e.p.print(", ") - } - e.p.printf("0x%x", b) - } - e.p.print(")\nif err != nil { return err }") -} - -func (e *encodeGen) structmap(s *Struct) { - nfields := len(s.Fields) - data := msgp.AppendMapHeader(nil, uint32(nfields)) - e.p.printf("\n// map header, size %d", nfields) - e.Fuse(data) - for i := range s.Fields { - if !e.p.ok() { - return - } - data = msgp.AppendString(nil, s.Fields[i].FieldTag) - e.p.printf("\n// write %q", s.Fields[i].FieldTag) - e.Fuse(data) - next(e, s.Fields[i].FieldElem) - } -} - -func (e *encodeGen) gMap(m *Map) { - if !e.p.ok() { - return - } - e.fuseHook() - vname := m.Varname() - e.writeAndCheck(mapHeader, lenAsUint32, vname) - - e.p.printf("\nfor %s, %s := range %s {", m.Keyidx, m.Validx, vname) - e.writeAndCheck(stringTyp, literalFmt, m.Keyidx) - next(e, m.Value) - e.p.closeblock() -} - -func (e *encodeGen) gPtr(s *Ptr) { - if !e.p.ok() { - return - } - e.fuseHook() - e.p.printf("\nif %s == nil { err = en.WriteNil(); if err != nil { return; } } else {", s.Varname()) - next(e, s.Value) - e.p.closeblock() -} - -func (e *encodeGen) gSlice(s *Slice) { - if !e.p.ok() { - return - } - e.fuseHook() - e.writeAndCheck(arrayHeader, lenAsUint32, s.Varname()) - e.p.rangeBlock(s.Index, s.Varname(), e, s.Els) -} - -func (e *encodeGen) gArray(a *Array) { - if !e.p.ok() { - return - } - e.fuseHook() - // shortcut for [const]byte - if be, ok := a.Els.(*BaseElem); ok && (be.Value == Byte || be.Value == Uint8) { - e.p.printf("\nerr = en.WriteBytes((%s)[:])", a.Varname()) - e.p.print(errcheck) - return - } - - e.writeAndCheck(arrayHeader, literalFmt, a.Size) - e.p.rangeBlock(a.Index, a.Varname(), e, a.Els) -} - -func (e *encodeGen) gBase(b *BaseElem) { - if !e.p.ok() { - return - } - e.fuseHook() - vname := b.Varname() - if b.Convert { - vname = tobaseConvert(b) - } - - if b.Value == IDENT { // unknown identity - e.p.printf("\nerr = %s.EncodeMsg(en)", vname) - e.p.print(errcheck) - } else { // typical case - e.writeAndCheck(b.BaseName(), literalFmt, vname) - } -} diff --git a/vendor/github.com/tinylib/msgp/gen/marshal.go b/vendor/github.com/tinylib/msgp/gen/marshal.go deleted file mode 100644 index 90eccc22..00000000 --- a/vendor/github.com/tinylib/msgp/gen/marshal.go +++ /dev/null @@ -1,198 +0,0 @@ -package gen - -import ( - "fmt" - "github.com/tinylib/msgp/msgp" - "io" -) - -func marshal(w io.Writer) *marshalGen { - return &marshalGen{ - p: printer{w: w}, - } -} - -type marshalGen struct { - passes - p printer - fuse []byte -} - -func (m *marshalGen) Method() Method { return Marshal } - -func (m *marshalGen) Apply(dirs []string) error { - return nil -} - -func (m *marshalGen) Execute(p Elem) error { - if !m.p.ok() { - return m.p.err - } - p = m.applyall(p) - if p == nil { - return nil - } - if !IsPrintable(p) { - return nil - } - - m.p.comment("MarshalMsg implements msgp.Marshaler") - - // save the vname before - // calling methodReceiver so - // that z.Msgsize() is printed correctly - c := p.Varname() - - m.p.printf("\nfunc (%s %s) MarshalMsg(b []byte) (o []byte, err error) {", p.Varname(), imutMethodReceiver(p)) - m.p.printf("\no = msgp.Require(b, %s.Msgsize())", c) - next(m, p) - m.p.nakedReturn() - return m.p.err -} - -func (m *marshalGen) rawAppend(typ string, argfmt string, arg interface{}) { - m.p.printf("\no = msgp.Append%s(o, %s)", typ, fmt.Sprintf(argfmt, arg)) -} - -func (m *marshalGen) fuseHook() { - if len(m.fuse) > 0 { - m.rawbytes(m.fuse) - m.fuse = m.fuse[:0] - } -} - -func (m *marshalGen) Fuse(b []byte) { - if len(m.fuse) == 0 { - m.fuse = b - } else { - m.fuse = append(m.fuse, b...) - } -} - -func (m *marshalGen) gStruct(s *Struct) { - if !m.p.ok() { - return - } - - if s.AsTuple { - m.tuple(s) - } else { - m.mapstruct(s) - } - return -} - -func (m *marshalGen) tuple(s *Struct) { - data := make([]byte, 0, 5) - data = msgp.AppendArrayHeader(data, uint32(len(s.Fields))) - m.p.printf("\n// array header, size %d", len(s.Fields)) - m.Fuse(data) - for i := range s.Fields { - if !m.p.ok() { - return - } - next(m, s.Fields[i].FieldElem) - } -} - -func (m *marshalGen) mapstruct(s *Struct) { - data := make([]byte, 0, 64) - data = msgp.AppendMapHeader(data, uint32(len(s.Fields))) - m.p.printf("\n// map header, size %d", len(s.Fields)) - m.Fuse(data) - for i := range s.Fields { - if !m.p.ok() { - return - } - data = msgp.AppendString(nil, s.Fields[i].FieldTag) - - m.p.printf("\n// string %q", s.Fields[i].FieldTag) - m.Fuse(data) - - next(m, s.Fields[i].FieldElem) - } -} - -// append raw data -func (m *marshalGen) rawbytes(bts []byte) { - m.p.print("\no = append(o, ") - for _, b := range bts { - m.p.printf("0x%x,", b) - } - m.p.print(")") -} - -func (m *marshalGen) gMap(s *Map) { - if !m.p.ok() { - return - } - m.fuseHook() - vname := s.Varname() - m.rawAppend(mapHeader, lenAsUint32, vname) - m.p.printf("\nfor %s, %s := range %s {", s.Keyidx, s.Validx, vname) - m.rawAppend(stringTyp, literalFmt, s.Keyidx) - next(m, s.Value) - m.p.closeblock() -} - -func (m *marshalGen) gSlice(s *Slice) { - if !m.p.ok() { - return - } - m.fuseHook() - vname := s.Varname() - m.rawAppend(arrayHeader, lenAsUint32, vname) - m.p.rangeBlock(s.Index, vname, m, s.Els) -} - -func (m *marshalGen) gArray(a *Array) { - if !m.p.ok() { - return - } - m.fuseHook() - if be, ok := a.Els.(*BaseElem); ok && be.Value == Byte { - m.rawAppend("Bytes", "(%s)[:]", a.Varname()) - return - } - - m.rawAppend(arrayHeader, literalFmt, a.Size) - m.p.rangeBlock(a.Index, a.Varname(), m, a.Els) -} - -func (m *marshalGen) gPtr(p *Ptr) { - if !m.p.ok() { - return - } - m.fuseHook() - m.p.printf("\nif %s == nil {\no = msgp.AppendNil(o)\n} else {", p.Varname()) - next(m, p.Value) - m.p.closeblock() -} - -func (m *marshalGen) gBase(b *BaseElem) { - if !m.p.ok() { - return - } - m.fuseHook() - vname := b.Varname() - - if b.Convert { - vname = tobaseConvert(b) - } - - var echeck bool - switch b.Value { - case IDENT: - echeck = true - m.p.printf("\no, err = %s.MarshalMsg(o)", vname) - case Intf, Ext: - echeck = true - m.p.printf("\no, err = msgp.Append%s(o, %s)", b.BaseName(), vname) - default: - m.rawAppend(b.BaseName(), literalFmt, vname) - } - - if echeck { - m.p.print(errcheck) - } -} diff --git a/vendor/github.com/tinylib/msgp/gen/size.go b/vendor/github.com/tinylib/msgp/gen/size.go deleted file mode 100644 index 3e636e47..00000000 --- a/vendor/github.com/tinylib/msgp/gen/size.go +++ /dev/null @@ -1,272 +0,0 @@ -package gen - -import ( - "fmt" - "github.com/tinylib/msgp/msgp" - "io" - "strconv" -) - -type sizeState uint8 - -const ( - // need to write "s = ..." - assign sizeState = iota - - // need to write "s += ..." - add - - // can just append "+ ..." - expr -) - -func sizes(w io.Writer) *sizeGen { - return &sizeGen{ - p: printer{w: w}, - state: assign, - } -} - -type sizeGen struct { - passes - p printer - state sizeState -} - -func (s *sizeGen) Method() Method { return Size } - -func (s *sizeGen) Apply(dirs []string) error { - return nil -} - -func builtinSize(typ string) string { - return "msgp." + typ + "Size" -} - -// this lets us chain together addition -// operations where possible -func (s *sizeGen) addConstant(sz string) { - if !s.p.ok() { - return - } - - switch s.state { - case assign: - s.p.print("\ns = " + sz) - s.state = expr - return - case add: - s.p.print("\ns += " + sz) - s.state = expr - return - case expr: - s.p.print(" + " + sz) - return - } - - panic("unknown size state") -} - -func (s *sizeGen) Execute(p Elem) error { - if !s.p.ok() { - return s.p.err - } - p = s.applyall(p) - if p == nil { - return nil - } - if !IsPrintable(p) { - return nil - } - - s.p.comment("Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message") - - s.p.printf("\nfunc (%s %s) Msgsize() (s int) {", p.Varname(), imutMethodReceiver(p)) - s.state = assign - next(s, p) - s.p.nakedReturn() - return s.p.err -} - -func (s *sizeGen) gStruct(st *Struct) { - if !s.p.ok() { - return - } - - nfields := uint32(len(st.Fields)) - - if st.AsTuple { - data := msgp.AppendArrayHeader(nil, nfields) - s.addConstant(strconv.Itoa(len(data))) - for i := range st.Fields { - if !s.p.ok() { - return - } - next(s, st.Fields[i].FieldElem) - } - } else { - data := msgp.AppendMapHeader(nil, nfields) - s.addConstant(strconv.Itoa(len(data))) - for i := range st.Fields { - data = data[:0] - data = msgp.AppendString(data, st.Fields[i].FieldTag) - s.addConstant(strconv.Itoa(len(data))) - next(s, st.Fields[i].FieldElem) - } - } -} - -func (s *sizeGen) gPtr(p *Ptr) { - s.state = add // inner must use add - s.p.printf("\nif %s == nil {\ns += msgp.NilSize\n} else {", p.Varname()) - next(s, p.Value) - s.state = add // closing block; reset to add - s.p.closeblock() -} - -func (s *sizeGen) gSlice(sl *Slice) { - if !s.p.ok() { - return - } - - s.addConstant(builtinSize(arrayHeader)) - - // if the slice's element is a fixed size - // (e.g. float64, [32]int, etc.), then - // print the length times the element size directly - if str, ok := fixedsizeExpr(sl.Els); ok { - s.addConstant(fmt.Sprintf("(%s * (%s))", lenExpr(sl), str)) - return - } - - // add inside the range block, and immediately after - s.state = add - s.p.rangeBlock(sl.Index, sl.Varname(), s, sl.Els) - s.state = add -} - -func (s *sizeGen) gArray(a *Array) { - if !s.p.ok() { - return - } - - s.addConstant(builtinSize(arrayHeader)) - - // if the array's children are a fixed - // size, we can compile an expression - // that always represents the array's wire size - if str, ok := fixedsizeExpr(a); ok { - s.addConstant(str) - return - } - - s.state = add - s.p.rangeBlock(a.Index, a.Varname(), s, a.Els) - s.state = add -} - -func (s *sizeGen) gMap(m *Map) { - s.addConstant(builtinSize(mapHeader)) - vn := m.Varname() - s.p.printf("\nif %s != nil {", vn) - s.p.printf("\nfor %s, %s := range %s {", m.Keyidx, m.Validx, vn) - s.p.printf("\n_ = %s", m.Validx) // we may not use the value - s.p.printf("\ns += msgp.StringPrefixSize + len(%s)", m.Keyidx) - s.state = expr - next(s, m.Value) - s.p.closeblock() - s.p.closeblock() - s.state = add -} - -func (s *sizeGen) gBase(b *BaseElem) { - if !s.p.ok() { - return - } - s.addConstant(basesizeExpr(b)) -} - -// returns "len(slice)" -func lenExpr(sl *Slice) string { - return "len(" + sl.Varname() + ")" -} - -// is a given primitive always the same (max) -// size on the wire? -func fixedSize(p Primitive) bool { - switch p { - case Intf, Ext, IDENT, Bytes, String: - return false - default: - return true - } -} - -// strip reference from string -func stripRef(s string) string { - if s[0] == '&' { - return s[1:] - } - return s -} - -// return a fixed-size expression, if possible. -// only possible for *BaseElem and *Array. -// returns (expr, ok) -func fixedsizeExpr(e Elem) (string, bool) { - switch e := e.(type) { - case *Array: - if str, ok := fixedsizeExpr(e.Els); ok { - return fmt.Sprintf("(%s * (%s))", e.Size, str), true - } - case *BaseElem: - if fixedSize(e.Value) { - return builtinSize(e.BaseName()), true - } - case *Struct: - var str string - for _, f := range e.Fields { - if fs, ok := fixedsizeExpr(f.FieldElem); ok { - if str == "" { - str = fs - } else { - str += "+" + fs - } - } else { - return "", false - } - } - var hdrlen int - mhdr := msgp.AppendMapHeader(nil, uint32(len(e.Fields))) - hdrlen += len(mhdr) - var strbody []byte - for _, f := range e.Fields { - strbody = msgp.AppendString(strbody[:0], f.FieldTag) - hdrlen += len(strbody) - } - return fmt.Sprintf("%d + %s", hdrlen, str), true - } - return "", false -} - -// print size expression of a variable name -func basesizeExpr(b *BaseElem) string { - vname := b.Varname() - if b.Convert { - vname = tobaseConvert(b) - } - switch b.Value { - case Ext: - return "msgp.ExtensionPrefixSize + " + stripRef(vname) + ".Len()" - case Intf: - return "msgp.GuessSize(" + vname + ")" - case IDENT: - return vname + ".Msgsize()" - case Bytes: - return "msgp.BytesPrefixSize + len(" + vname + ")" - case String: - return "msgp.StringPrefixSize + len(" + vname + ")" - default: - return builtinSize(b.BaseName()) - } -} diff --git a/vendor/github.com/tinylib/msgp/gen/spec.go b/vendor/github.com/tinylib/msgp/gen/spec.go deleted file mode 100644 index e1968165..00000000 --- a/vendor/github.com/tinylib/msgp/gen/spec.go +++ /dev/null @@ -1,376 +0,0 @@ -package gen - -import ( - "fmt" - "io" -) - -const ( - errcheck = "\nif err != nil { return }" - lenAsUint32 = "uint32(len(%s))" - literalFmt = "%s" - intFmt = "%d" - quotedFmt = `"%s"` - mapHeader = "MapHeader" - arrayHeader = "ArrayHeader" - mapKey = "MapKeyPtr" - stringTyp = "String" - u32 = "uint32" -) - -// Method is a bitfield representing something that the -// generator knows how to print. -type Method uint8 - -// are the bits in 'f' set in 'm'? -func (m Method) isset(f Method) bool { return (m&f == f) } - -// String implements fmt.Stringer -func (m Method) String() string { - switch m { - case 0, invalidmeth: - return "" - case Decode: - return "decode" - case Encode: - return "encode" - case Marshal: - return "marshal" - case Unmarshal: - return "unmarshal" - case Size: - return "size" - case Test: - return "test" - default: - // return e.g. "decode+encode+test" - modes := [...]Method{Decode, Encode, Marshal, Unmarshal, Size, Test} - any := false - nm := "" - for _, mm := range modes { - if m.isset(mm) { - if any { - nm += "+" + mm.String() - } else { - nm += mm.String() - any = true - } - } - } - return nm - - } -} - -func strtoMeth(s string) Method { - switch s { - case "encode": - return Encode - case "decode": - return Decode - case "marshal": - return Marshal - case "unmarshal": - return Unmarshal - case "size": - return Size - case "test": - return Test - default: - return 0 - } -} - -const ( - Decode Method = 1 << iota // msgp.Decodable - Encode // msgp.Encodable - Marshal // msgp.Marshaler - Unmarshal // msgp.Unmarshaler - Size // msgp.Sizer - Test // generate tests - invalidmeth // this isn't a method - encodetest = Encode | Decode | Test // tests for Encodable and Decodable - marshaltest = Marshal | Unmarshal | Test // tests for Marshaler and Unmarshaler -) - -type Printer struct { - gens []generator -} - -func NewPrinter(m Method, out io.Writer, tests io.Writer) *Printer { - if m.isset(Test) && tests == nil { - panic("cannot print tests with 'nil' tests argument!") - } - gens := make([]generator, 0, 7) - if m.isset(Decode) { - gens = append(gens, decode(out)) - } - if m.isset(Encode) { - gens = append(gens, encode(out)) - } - if m.isset(Marshal) { - gens = append(gens, marshal(out)) - } - if m.isset(Unmarshal) { - gens = append(gens, unmarshal(out)) - } - if m.isset(Size) { - gens = append(gens, sizes(out)) - } - if m.isset(marshaltest) { - gens = append(gens, mtest(tests)) - } - if m.isset(encodetest) { - gens = append(gens, etest(tests)) - } - if len(gens) == 0 { - panic("NewPrinter called with invalid method flags") - } - return &Printer{gens: gens} -} - -// TransformPass is a pass that transforms individual -// elements. (Note that if the returned is different from -// the argument, it should not point to the same objects.) -type TransformPass func(Elem) Elem - -// IgnoreTypename is a pass that just ignores -// types of a given name. -func IgnoreTypename(name string) TransformPass { - return func(e Elem) Elem { - if e.TypeName() == name { - return nil - } - return e - } -} - -// ApplyDirective applies a directive to a named pass -// and all of its dependents. -func (p *Printer) ApplyDirective(pass Method, t TransformPass) { - for _, g := range p.gens { - if g.Method().isset(pass) { - g.Add(t) - } - } -} - -// Print prints an Elem. -func (p *Printer) Print(e Elem) error { - for _, g := range p.gens { - err := g.Execute(e) - if err != nil { - return err - } - } - return nil -} - -// generator is the interface through -// which code is generated. -type generator interface { - Method() Method - Add(p TransformPass) - Execute(Elem) error // execute writes the method for the provided object. -} - -type passes []TransformPass - -func (p *passes) Add(t TransformPass) { - *p = append(*p, t) -} - -func (p *passes) applyall(e Elem) Elem { - for _, t := range *p { - e = t(e) - if e == nil { - return nil - } - } - return e -} - -type traversal interface { - gMap(*Map) - gSlice(*Slice) - gArray(*Array) - gPtr(*Ptr) - gBase(*BaseElem) - gStruct(*Struct) -} - -// type-switch dispatch to the correct -// method given the type of 'e' -func next(t traversal, e Elem) { - switch e := e.(type) { - case *Map: - t.gMap(e) - case *Struct: - t.gStruct(e) - case *Slice: - t.gSlice(e) - case *Array: - t.gArray(e) - case *Ptr: - t.gPtr(e) - case *BaseElem: - t.gBase(e) - default: - panic("bad element type") - } -} - -// possibly-immutable method receiver -func imutMethodReceiver(p Elem) string { - switch e := p.(type) { - case *Struct: - // TODO(HACK): actually do real math here. - if len(e.Fields) <= 3 { - for i := range e.Fields { - if be, ok := e.Fields[i].FieldElem.(*BaseElem); !ok || (be.Value == IDENT || be.Value == Bytes) { - goto nope - } - } - return p.TypeName() - } - nope: - return "*" + p.TypeName() - - // gets dereferenced automatically - case *Array: - return "*" + p.TypeName() - - // everything else can be - // by-value. - default: - return p.TypeName() - } -} - -// if necessary, wraps a type -// so that its method receiver -// is of the write type. -func methodReceiver(p Elem) string { - switch p.(type) { - - // structs and arrays are - // dereferenced automatically, - // so no need to alter varname - case *Struct, *Array: - return "*" + p.TypeName() - // set variable name to - // *varname - default: - p.SetVarname("(*" + p.Varname() + ")") - return "*" + p.TypeName() - } -} - -func unsetReceiver(p Elem) { - switch p.(type) { - case *Struct, *Array: - default: - p.SetVarname("z") - } -} - -// shared utility for generators -type printer struct { - w io.Writer - err error -} - -// writes "var {{name}} {{typ}};" -func (p *printer) declare(name string, typ string) { - p.printf("\nvar %s %s", name, typ) -} - -// does: -// -// if m != nil && size > 0 { -// m = make(type, size) -// } else if len(m) > 0 { -// for key, _ := range m { delete(m, key) } -// } -// -func (p *printer) resizeMap(size string, m *Map) { - vn := m.Varname() - if !p.ok() { - return - } - p.printf("\nif %s == nil && %s > 0 {", vn, size) - p.printf("\n%s = make(%s, %s)", vn, m.TypeName(), size) - p.printf("\n} else if len(%s) > 0 {", vn) - p.clearMap(vn) - p.closeblock() -} - -// assign key to value based on varnames -func (p *printer) mapAssign(m *Map) { - if !p.ok() { - return - } - p.printf("\n%s[%s] = %s", m.Varname(), m.Keyidx, m.Validx) -} - -// clear map keys -func (p *printer) clearMap(name string) { - p.printf("\nfor key, _ := range %[1]s { delete(%[1]s, key) }", name) -} - -func (p *printer) resizeSlice(size string, s *Slice) { - p.printf("\nif cap(%[1]s) >= int(%[2]s) { %[1]s = (%[1]s)[:%[2]s] } else { %[1]s = make(%[3]s, %[2]s) }", s.Varname(), size, s.TypeName()) -} - -func (p *printer) arrayCheck(want string, got string) { - p.printf("\nif %[1]s != %[2]s { err = msgp.ArrayError{Wanted: %[2]s, Got: %[1]s}; return }", got, want) -} - -func (p *printer) closeblock() { p.print("\n}") } - -// does: -// -// for idx := range iter { -// {{generate inner}} -// } -// -func (p *printer) rangeBlock(idx string, iter string, t traversal, inner Elem) { - p.printf("\n for %s := range %s {", idx, iter) - next(t, inner) - p.closeblock() -} - -func (p *printer) nakedReturn() { - if p.ok() { - p.print("\nreturn\n}\n") - } -} - -func (p *printer) comment(s string) { - p.print("\n// " + s) -} - -func (p *printer) printf(format string, args ...interface{}) { - if p.err == nil { - _, p.err = fmt.Fprintf(p.w, format, args...) - } -} - -func (p *printer) print(format string) { - if p.err == nil { - _, p.err = io.WriteString(p.w, format) - } -} - -func (p *printer) initPtr(pt *Ptr) { - if pt.Needsinit() { - vname := pt.Varname() - p.printf("\nif %s == nil { %s = new(%s); }", vname, vname, pt.Value.TypeName()) - } -} - -func (p *printer) ok() bool { return p.err == nil } - -func tobaseConvert(b *BaseElem) string { - return b.ToBase() + "(" + b.Varname() + ")" -} diff --git a/vendor/github.com/tinylib/msgp/gen/testgen.go b/vendor/github.com/tinylib/msgp/gen/testgen.go deleted file mode 100644 index a0e0114e..00000000 --- a/vendor/github.com/tinylib/msgp/gen/testgen.go +++ /dev/null @@ -1,182 +0,0 @@ -package gen - -import ( - "io" - "text/template" -) - -var ( - marshalTestTempl = template.New("MarshalTest") - encodeTestTempl = template.New("EncodeTest") -) - -// TODO(philhofer): -// for simplicity's sake, right now -// we can only generate tests for types -// that can be initialized with the -// "Type{}" syntax. -// we should support all the types. - -func mtest(w io.Writer) *mtestGen { - return &mtestGen{w: w} -} - -type mtestGen struct { - passes - w io.Writer -} - -func (m *mtestGen) Execute(p Elem) error { - p = m.applyall(p) - if p != nil && IsPrintable(p) { - switch p.(type) { - case *Struct, *Array, *Slice, *Map: - return marshalTestTempl.Execute(m.w, p) - } - } - return nil -} - -func (m *mtestGen) Method() Method { return marshaltest } - -type etestGen struct { - passes - w io.Writer -} - -func etest(w io.Writer) *etestGen { - return &etestGen{w: w} -} - -func (e *etestGen) Execute(p Elem) error { - p = e.applyall(p) - if p != nil && IsPrintable(p) { - switch p.(type) { - case *Struct, *Array, *Slice, *Map: - return encodeTestTempl.Execute(e.w, p) - } - } - return nil -} - -func (e *etestGen) Method() Method { return encodetest } - -func init() { - template.Must(marshalTestTempl.Parse(`func TestMarshalUnmarshal{{.TypeName}}(t *testing.T) { - v := {{.TypeName}}{} - bts, err := v.MarshalMsg(nil) - if err != nil { - t.Fatal(err) - } - left, err := v.UnmarshalMsg(bts) - if err != nil { - t.Fatal(err) - } - if len(left) > 0 { - t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) - } - - left, err = msgp.Skip(bts) - if err != nil { - t.Fatal(err) - } - if len(left) > 0 { - t.Errorf("%d bytes left over after Skip(): %q", len(left), left) - } -} - -func BenchmarkMarshalMsg{{.TypeName}}(b *testing.B) { - v := {{.TypeName}}{} - b.ReportAllocs() - b.ResetTimer() - for i:=0; i m { - t.Logf("WARNING: Msgsize() for %v is inaccurate", v) - } - - vn := {{.TypeName}}{} - err := msgp.Decode(&buf, &vn) - if err != nil { - t.Error(err) - } - - buf.Reset() - msgp.Encode(&buf, &v) - err = msgp.NewReader(&buf).Skip() - if err != nil { - t.Error(err) - } -} - -func BenchmarkEncode{{.TypeName}}(b *testing.B) { - v := {{.TypeName}}{} - var buf bytes.Buffer - msgp.Encode(&buf, &v) - b.SetBytes(int64(buf.Len())) - en := msgp.NewWriter(msgp.Nowhere) - b.ReportAllocs() - b.ResetTimer() - for i:=0; i 0 {", sz) - u.p.printf("\n%s--; field, bts, err = msgp.ReadMapKeyZC(bts)", sz) - u.p.print(errcheck) - u.p.print("\nswitch msgp.UnsafeString(field) {") - for i := range s.Fields { - if !u.p.ok() { - return - } - u.p.printf("\ncase \"%s\":", s.Fields[i].FieldTag) - next(u, s.Fields[i].FieldElem) - } - u.p.print("\ndefault:\nbts, err = msgp.Skip(bts)") - u.p.print(errcheck) - u.p.print("\n}\n}") // close switch and for loop -} - -func (u *unmarshalGen) gBase(b *BaseElem) { - if !u.p.ok() { - return - } - - refname := b.Varname() // assigned to - lowered := b.Varname() // passed as argument - if b.Convert { - // begin 'tmp' block - refname = randIdent() - lowered = b.ToBase() + "(" + lowered + ")" - u.p.printf("\n{\nvar %s %s", refname, b.BaseType()) - } - - switch b.Value { - case Bytes: - u.p.printf("\n%s, bts, err = msgp.ReadBytesBytes(bts, %s)", refname, lowered) - case Ext: - u.p.printf("\nbts, err = msgp.ReadExtensionBytes(bts, %s)", lowered) - case IDENT: - u.p.printf("\nbts, err = %s.UnmarshalMsg(bts)", lowered) - default: - u.p.printf("\n%s, bts, err = msgp.Read%sBytes(bts)", refname, b.BaseName()) - } - if b.Convert { - // close 'tmp' block - u.p.printf("\n%s = %s(%s)\n}", b.Varname(), b.FromBase(), refname) - } - - u.p.print(errcheck) -} - -func (u *unmarshalGen) gArray(a *Array) { - if !u.p.ok() { - return - } - - // special case for [const]byte objects - // see decode.go for symmetry - if be, ok := a.Els.(*BaseElem); ok && be.Value == Byte { - u.p.printf("\nbts, err = msgp.ReadExactBytes(bts, (%s)[:])", a.Varname()) - u.p.print(errcheck) - return - } - - sz := randIdent() - u.p.declare(sz, u32) - u.assignAndCheck(sz, arrayHeader) - u.p.arrayCheck(a.Size, sz) - u.p.rangeBlock(a.Index, a.Varname(), u, a.Els) -} - -func (u *unmarshalGen) gSlice(s *Slice) { - if !u.p.ok() { - return - } - sz := randIdent() - u.p.declare(sz, u32) - u.assignAndCheck(sz, arrayHeader) - u.p.resizeSlice(sz, s) - u.p.rangeBlock(s.Index, s.Varname(), u, s.Els) -} - -func (u *unmarshalGen) gMap(m *Map) { - if !u.p.ok() { - return - } - sz := randIdent() - u.p.declare(sz, u32) - u.assignAndCheck(sz, mapHeader) - - // allocate or clear map - u.p.resizeMap(sz, m) - - // loop and get key,value - u.p.printf("\nfor %s > 0 {", sz) - u.p.printf("\nvar %s string; var %s %s; %s--", m.Keyidx, m.Validx, m.Value.TypeName(), sz) - u.assignAndCheck(m.Keyidx, stringTyp) - next(u, m.Value) - u.p.mapAssign(m) - u.p.closeblock() -} - -func (u *unmarshalGen) gPtr(p *Ptr) { - u.p.printf("\nif msgp.IsNil(bts) { bts, err = msgp.ReadNilBytes(bts); if err != nil { return }; %s = nil; } else { ", p.Varname()) - u.p.initPtr(p) - next(u, p.Value) - u.p.closeblock() -} diff --git a/vendor/github.com/tinylib/msgp/main.go b/vendor/github.com/tinylib/msgp/main.go deleted file mode 100644 index 4369d739..00000000 --- a/vendor/github.com/tinylib/msgp/main.go +++ /dev/null @@ -1,119 +0,0 @@ -// msgp is a code generation tool for -// creating methods to serialize and de-serialize -// Go data structures to and from MessagePack. -// -// This package is targeted at the `go generate` tool. -// To use it, include the following directive in a -// go source file with types requiring source generation: -// -// //go:generate msgp -// -// The go generate tool should set the proper environment variables for -// the generator to execute without any command-line flags. However, the -// following options are supported, if you need them: -// -// -o = output file name (default is {input}_gen.go) -// -file = input file name (or directory; default is $GOFILE, which is set by the `go generate` command) -// -io = satisfy the `msgp.Decodable` and `msgp.Encodable` interfaces (default is true) -// -marshal = satisfy the `msgp.Marshaler` and `msgp.Unmarshaler` interfaces (default is true) -// -tests = generate tests and benchmarks (default is true) -// -// For more information, please read README.md, and the wiki at github.com/tinylib/msgp -// -package main - -import ( - "flag" - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/tinylib/msgp/gen" - "github.com/tinylib/msgp/parse" - "github.com/tinylib/msgp/printer" - "github.com/ttacon/chalk" -) - -var ( - out = flag.String("o", "", "output file") - file = flag.String("file", "", "input file") - encode = flag.Bool("io", true, "create Encode and Decode methods") - marshal = flag.Bool("marshal", true, "create Marshal and Unmarshal methods") - tests = flag.Bool("tests", true, "create tests and benchmarks") - unexported = flag.Bool("unexported", false, "also process unexported types") -) - -func main() { - flag.Parse() - - // GOFILE is set by go generate - if *file == "" { - *file = os.Getenv("GOFILE") - if *file == "" { - fmt.Println(chalk.Red.Color("No file to parse.")) - os.Exit(1) - } - } - - var mode gen.Method - if *encode { - mode |= (gen.Encode | gen.Decode | gen.Size) - } - if *marshal { - mode |= (gen.Marshal | gen.Unmarshal | gen.Size) - } - if *tests { - mode |= gen.Test - } - - if mode&^gen.Test == 0 { - fmt.Println(chalk.Red.Color("No methods to generate; -io=false && -marshal=false")) - os.Exit(1) - } - - if err := Run(*file, mode, *unexported); err != nil { - fmt.Println(chalk.Red.Color(err.Error())) - os.Exit(1) - } -} - -// Run writes all methods using the associated file or path, e.g. -// -// err := msgp.Run("path/to/myfile.go", gen.Size|gen.Marshal|gen.Unmarshal|gen.Test, false) -// -func Run(gofile string, mode gen.Method, unexported bool) error { - if mode&^gen.Test == 0 { - return nil - } - fmt.Println(chalk.Magenta.Color("======== MessagePack Code Generator =======")) - fmt.Printf(chalk.Magenta.Color(">>> Input: \"%s\"\n"), gofile) - fs, err := parse.File(gofile, unexported) - if err != nil { - return err - } - - if len(fs.Identities) == 0 { - fmt.Println(chalk.Magenta.Color("No types requiring code generation were found!")) - return nil - } - - return printer.PrintFile(newFilename(gofile, fs.Package), fs, mode) -} - -// picks a new file name based on input flags and input filename(s). -func newFilename(old string, pkg string) string { - if *out != "" { - if pre := strings.TrimPrefix(*out, old); len(pre) > 0 && - !strings.HasSuffix(*out, ".go") { - return filepath.Join(old, *out) - } - return *out - } - - if fi, err := os.Stat(old); err == nil && fi.IsDir() { - old = filepath.Join(old, pkg) - } - // new file name is old file name + _gen.go - return strings.TrimSuffix(old, ".go") + "_gen.go" -} diff --git a/vendor/github.com/tinylib/msgp/msgp/advise_linux.go b/vendor/github.com/tinylib/msgp/msgp/advise_linux.go deleted file mode 100644 index 6c6bb37a..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/advise_linux.go +++ /dev/null @@ -1,24 +0,0 @@ -// +build linux,!appengine - -package msgp - -import ( - "os" - "syscall" -) - -func adviseRead(mem []byte) { - syscall.Madvise(mem, syscall.MADV_SEQUENTIAL|syscall.MADV_WILLNEED) -} - -func adviseWrite(mem []byte) { - syscall.Madvise(mem, syscall.MADV_SEQUENTIAL) -} - -func fallocate(f *os.File, sz int64) error { - err := syscall.Fallocate(int(f.Fd()), 0, 0, sz) - if err == syscall.ENOTSUP { - return f.Truncate(sz) - } - return err -} diff --git a/vendor/github.com/tinylib/msgp/msgp/advise_other.go b/vendor/github.com/tinylib/msgp/msgp/advise_other.go deleted file mode 100644 index da65ea54..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/advise_other.go +++ /dev/null @@ -1,17 +0,0 @@ -// +build !linux appengine - -package msgp - -import ( - "os" -) - -// TODO: darwin, BSD support - -func adviseRead(mem []byte) {} - -func adviseWrite(mem []byte) {} - -func fallocate(f *os.File, sz int64) error { - return f.Truncate(sz) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/appengine.go b/vendor/github.com/tinylib/msgp/msgp/appengine.go deleted file mode 100644 index bff9e768..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/appengine.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build appengine - -package msgp - -// let's just assume appengine -// uses 64-bit hardware... -const smallint = false - -func UnsafeString(b []byte) string { - return string(b) -} - -func UnsafeBytes(s string) []byte { - return []byte(s) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/circular.go b/vendor/github.com/tinylib/msgp/msgp/circular.go deleted file mode 100644 index a0434c7e..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/circular.go +++ /dev/null @@ -1,39 +0,0 @@ -package msgp - -type timer interface { - StartTimer() - StopTimer() -} - -// EndlessReader is an io.Reader -// that loops over the same data -// endlessly. It is used for benchmarking. -type EndlessReader struct { - tb timer - data []byte - offset int -} - -// NewEndlessReader returns a new endless reader -func NewEndlessReader(b []byte, tb timer) *EndlessReader { - return &EndlessReader{tb: tb, data: b, offset: 0} -} - -// Read implements io.Reader. In practice, it -// always returns (len(p), nil), although it -// fills the supplied slice while the benchmark -// timer is stopped. -func (c *EndlessReader) Read(p []byte) (int, error) { - c.tb.StopTimer() - var n int - l := len(p) - m := len(c.data) - for n < l { - nn := copy(p[n:], c.data[c.offset:]) - n += nn - c.offset += nn - c.offset %= m - } - c.tb.StartTimer() - return n, nil -} diff --git a/vendor/github.com/tinylib/msgp/msgp/defs.go b/vendor/github.com/tinylib/msgp/msgp/defs.go deleted file mode 100644 index c634eef1..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/defs.go +++ /dev/null @@ -1,142 +0,0 @@ -// This package is the support library for the msgp code generator (http://github.com/tinylib/msgp). -// -// This package defines the utilites used by the msgp code generator for encoding and decoding MessagePack -// from []byte and io.Reader/io.Writer types. Much of this package is devoted to helping the msgp code -// generator implement the Marshaler/Unmarshaler and Encodable/Decodable interfaces. -// -// This package defines four "families" of functions: -// - AppendXxxx() appends an object to a []byte in MessagePack encoding. -// - ReadXxxxBytes() reads an object from a []byte and returns the remaining bytes. -// - (*Writer).WriteXxxx() writes an object to the buffered *Writer type. -// - (*Reader).ReadXxxx() reads an object from a buffered *Reader type. -// -// Once a type has satisfied the `Encodable` and `Decodable` interfaces, -// it can be written and read from arbitrary `io.Writer`s and `io.Reader`s using -// msgp.Encode(io.Writer, msgp.Encodable) -// and -// msgp.Decode(io.Reader, msgp.Decodable) -// -// There are also methods for converting MessagePack to JSON without -// an explicit de-serialization step. -// -// For additional tips, tricks, and gotchas, please visit -// the wiki at http://github.com/tinylib/msgp -package msgp - -const last4 = 0x0f -const first4 = 0xf0 -const last5 = 0x1f -const first3 = 0xe0 -const last7 = 0x7f - -func isfixint(b byte) bool { - return b>>7 == 0 -} - -func isnfixint(b byte) bool { - return b&first3 == mnfixint -} - -func isfixmap(b byte) bool { - return b&first4 == mfixmap -} - -func isfixarray(b byte) bool { - return b&first4 == mfixarray -} - -func isfixstr(b byte) bool { - return b&first3 == mfixstr -} - -func wfixint(u uint8) byte { - return u & last7 -} - -func rfixint(b byte) uint8 { - return b -} - -func wnfixint(i int8) byte { - return byte(i) | mnfixint -} - -func rnfixint(b byte) int8 { - return int8(b) -} - -func rfixmap(b byte) uint8 { - return b & last4 -} - -func wfixmap(u uint8) byte { - return mfixmap | (u & last4) -} - -func rfixstr(b byte) uint8 { - return b & last5 -} - -func wfixstr(u uint8) byte { - return (u & last5) | mfixstr -} - -func rfixarray(b byte) uint8 { - return (b & last4) -} - -func wfixarray(u uint8) byte { - return (u & last4) | mfixarray -} - -// These are all the byte -// prefixes defined by the -// msgpack standard -const ( - // 0XXXXXXX - mfixint uint8 = 0x00 - - // 111XXXXX - mnfixint uint8 = 0xe0 - - // 1000XXXX - mfixmap uint8 = 0x80 - - // 1001XXXX - mfixarray uint8 = 0x90 - - // 101XXXXX - mfixstr uint8 = 0xa0 - - mnil uint8 = 0xc0 - mfalse uint8 = 0xc2 - mtrue uint8 = 0xc3 - mbin8 uint8 = 0xc4 - mbin16 uint8 = 0xc5 - mbin32 uint8 = 0xc6 - mext8 uint8 = 0xc7 - mext16 uint8 = 0xc8 - mext32 uint8 = 0xc9 - mfloat32 uint8 = 0xca - mfloat64 uint8 = 0xcb - muint8 uint8 = 0xcc - muint16 uint8 = 0xcd - muint32 uint8 = 0xce - muint64 uint8 = 0xcf - mint8 uint8 = 0xd0 - mint16 uint8 = 0xd1 - mint32 uint8 = 0xd2 - mint64 uint8 = 0xd3 - mfixext1 uint8 = 0xd4 - mfixext2 uint8 = 0xd5 - mfixext4 uint8 = 0xd6 - mfixext8 uint8 = 0xd7 - mfixext16 uint8 = 0xd8 - mstr8 uint8 = 0xd9 - mstr16 uint8 = 0xda - mstr32 uint8 = 0xdb - marray16 uint8 = 0xdc - marray32 uint8 = 0xdd - mmap16 uint8 = 0xde - mmap32 uint8 = 0xdf -) diff --git a/vendor/github.com/tinylib/msgp/msgp/defs_test.go b/vendor/github.com/tinylib/msgp/msgp/defs_test.go deleted file mode 100644 index 667dfd60..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/defs_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package msgp_test - -//go:generate msgp -o=defgen_test.go -tests=false - -type Blobs []Blob - -type Blob struct { - Name string `msg:"name"` - Float float64 `msg:"float"` - Bytes []byte `msg:"bytes"` - Amount int64 `msg:"amount"` -} diff --git a/vendor/github.com/tinylib/msgp/msgp/edit.go b/vendor/github.com/tinylib/msgp/msgp/edit.go deleted file mode 100644 index 41f92986..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/edit.go +++ /dev/null @@ -1,241 +0,0 @@ -package msgp - -import ( - "math" -) - -// Locate returns a []byte pointing to the field -// in a messagepack map with the provided key. (The returned []byte -// points to a sub-slice of 'raw'; Locate does no allocations.) If the -// key doesn't exist in the map, a zero-length []byte will be returned. -func Locate(key string, raw []byte) []byte { - s, n := locate(raw, key) - return raw[s:n] -} - -// Replace takes a key ("key") in a messagepack map ("raw") -// and replaces its value with the one provided and returns -// the new []byte. The returned []byte may point to the same -// memory as "raw". Replace makes no effort to evaluate the validity -// of the contents of 'val'. It may use up to the full capacity of 'raw.' -// Replace returns 'nil' if the field doesn't exist or if the object in 'raw' -// is not a map. -func Replace(key string, raw []byte, val []byte) []byte { - start, end := locate(raw, key) - if start == end { - return nil - } - return replace(raw, start, end, val, true) -} - -// CopyReplace works similarly to Replace except that the returned -// byte slice does not point to the same memory as 'raw'. CopyReplace -// returns 'nil' if the field doesn't exist or 'raw' isn't a map. -func CopyReplace(key string, raw []byte, val []byte) []byte { - start, end := locate(raw, key) - if start == end { - return nil - } - return replace(raw, start, end, val, false) -} - -// Remove removes a key-value pair from 'raw'. It returns -// 'raw' unchanged if the key didn't exist. -func Remove(key string, raw []byte) []byte { - start, end := locateKV(raw, key) - if start == end { - return raw - } - raw = raw[:start+copy(raw[start:], raw[end:])] - return resizeMap(raw, -1) -} - -// HasKey returns whether the map in 'raw' has -// a field with key 'key' -func HasKey(key string, raw []byte) bool { - sz, bts, err := ReadMapHeaderBytes(raw) - if err != nil { - return false - } - var field []byte - for i := uint32(0); i < sz; i++ { - field, bts, err = ReadStringZC(bts) - if err != nil { - return false - } - if UnsafeString(field) == key { - return true - } - } - return false -} - -func replace(raw []byte, start int, end int, val []byte, inplace bool) []byte { - ll := end - start // length of segment to replace - lv := len(val) - - if inplace { - extra := lv - ll - - // fastest case: we're doing - // a 1:1 replacement - if extra == 0 { - copy(raw[start:], val) - return raw - - } else if extra < 0 { - // 'val' smaller than replaced value - // copy in place and shift back - - x := copy(raw[start:], val) - y := copy(raw[start+x:], raw[end:]) - return raw[:start+x+y] - - } else if extra < cap(raw)-len(raw) { - // 'val' less than (cap-len) extra bytes - // copy in place and shift forward - raw = raw[0 : len(raw)+extra] - // shift end forward - copy(raw[end+extra:], raw[end:]) - copy(raw[start:], val) - return raw - } - } - - // we have to allocate new space - out := make([]byte, len(raw)+len(val)-ll) - x := copy(out, raw[:start]) - y := copy(out[x:], val) - copy(out[x+y:], raw[end:]) - return out -} - -// locate does a naive O(n) search for the map key; returns start, end -// (returns 0,0 on error) -func locate(raw []byte, key string) (start int, end int) { - var ( - sz uint32 - bts []byte - field []byte - err error - ) - sz, bts, err = ReadMapHeaderBytes(raw) - if err != nil { - return - } - - // loop and locate field - for i := uint32(0); i < sz; i++ { - field, bts, err = ReadStringZC(bts) - if err != nil { - return 0, 0 - } - if UnsafeString(field) == key { - // start location - l := len(raw) - start = l - len(bts) - bts, err = Skip(bts) - if err != nil { - return 0, 0 - } - end = l - len(bts) - return - } - bts, err = Skip(bts) - if err != nil { - return 0, 0 - } - } - return 0, 0 -} - -// locate key AND value -func locateKV(raw []byte, key string) (start int, end int) { - var ( - sz uint32 - bts []byte - field []byte - err error - ) - sz, bts, err = ReadMapHeaderBytes(raw) - if err != nil { - return 0, 0 - } - - for i := uint32(0); i < sz; i++ { - tmp := len(bts) - field, bts, err = ReadStringZC(bts) - if err != nil { - return 0, 0 - } - if UnsafeString(field) == key { - start = len(raw) - tmp - bts, err = Skip(bts) - if err != nil { - return 0, 0 - } - end = len(raw) - len(bts) - return - } - bts, err = Skip(bts) - if err != nil { - return 0, 0 - } - } - return 0, 0 -} - -// delta is delta on map size -func resizeMap(raw []byte, delta int64) []byte { - var sz int64 - switch raw[0] { - case mmap16: - sz = int64(big.Uint16(raw[1:])) - if sz+delta <= math.MaxUint16 { - big.PutUint16(raw[1:], uint16(sz+delta)) - return raw - } - if cap(raw)-len(raw) >= 2 { - raw = raw[0 : len(raw)+2] - copy(raw[5:], raw[3:]) - big.PutUint32(raw[1:], uint32(sz+delta)) - return raw - } - n := make([]byte, 0, len(raw)+5) - n = AppendMapHeader(n, uint32(sz+delta)) - return append(n, raw[3:]...) - - case mmap32: - sz = int64(big.Uint32(raw[1:])) - big.PutUint32(raw[1:], uint32(sz+delta)) - return raw - - default: - sz = int64(rfixmap(raw[0])) - if sz+delta < 16 { - raw[0] = wfixmap(uint8(sz + delta)) - return raw - } else if sz+delta <= math.MaxUint16 { - if cap(raw)-len(raw) >= 2 { - raw = raw[0 : len(raw)+2] - copy(raw[3:], raw[1:]) - raw[0] = mmap16 - big.PutUint16(raw[1:], uint16(sz+delta)) - return raw - } - n := make([]byte, 0, len(raw)+5) - n = AppendMapHeader(n, uint32(sz+delta)) - return append(n, raw[1:]...) - } - if cap(raw)-len(raw) >= 4 { - raw = raw[0 : len(raw)+4] - copy(raw[5:], raw[1:]) - raw[0] = mmap32 - big.PutUint32(raw[1:], uint32(sz+delta)) - return raw - } - n := make([]byte, 0, len(raw)+5) - n = AppendMapHeader(n, uint32(sz+delta)) - return append(n, raw[1:]...) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/edit_test.go b/vendor/github.com/tinylib/msgp/msgp/edit_test.go deleted file mode 100644 index e33b4e1b..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/edit_test.go +++ /dev/null @@ -1,200 +0,0 @@ -package msgp - -import ( - "bytes" - "reflect" - "testing" -) - -func TestRemove(t *testing.T) { - var buf bytes.Buffer - w := NewWriter(&buf) - w.WriteMapHeader(3) - w.WriteString("first") - w.WriteFloat64(-3.1) - w.WriteString("second") - w.WriteString("DELETE ME!!!") - w.WriteString("third") - w.WriteBytes([]byte("blah")) - w.Flush() - - raw := Remove("second", buf.Bytes()) - - m, _, err := ReadMapStrIntfBytes(raw, nil) - if err != nil { - t.Fatal(err) - } - if len(m) != 2 { - t.Errorf("expected %d fields; found %d", 2, len(m)) - } - if _, ok := m["first"]; !ok { - t.Errorf("field %q not found", "first") - } - if _, ok := m["third"]; !ok { - t.Errorf("field %q not found", "third") - } - if _, ok := m["second"]; ok { - t.Errorf("field %q (deleted field) still present", "second") - } -} - -func TestLocate(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteMapHeader(2) - en.WriteString("thing_one") - en.WriteString("value_one") - en.WriteString("thing_two") - en.WriteFloat64(2.0) - en.Flush() - - field := Locate("thing_one", buf.Bytes()) - if len(field) == 0 { - t.Fatal("field not found") - } - - if !HasKey("thing_one", buf.Bytes()) { - t.Fatal("field not found") - } - - var zbuf bytes.Buffer - w := NewWriter(&zbuf) - w.WriteString("value_one") - w.Flush() - - if !bytes.Equal(zbuf.Bytes(), field) { - t.Errorf("got %q; wanted %q", field, zbuf.Bytes()) - } - - zbuf.Reset() - w.WriteFloat64(2.0) - w.Flush() - field = Locate("thing_two", buf.Bytes()) - if len(field) == 0 { - t.Fatal("field not found") - } - if !bytes.Equal(zbuf.Bytes(), field) { - t.Errorf("got %q; wanted %q", field, zbuf.Bytes()) - } - - field = Locate("nope", buf.Bytes()) - if len(field) != 0 { - t.Fatalf("wanted a zero-length returned slice") - } - -} - -func TestReplace(t *testing.T) { - // there are 4 cases that need coverage: - // - new value is smaller than old value - // - new value is the same size as the old value - // - new value is larger than old, but fits within cap(b) - // - new value is larger than old, and doesn't fit within cap(b) - - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteMapHeader(3) - en.WriteString("thing_one") - en.WriteString("value_one") - en.WriteString("thing_two") - en.WriteFloat64(2.0) - en.WriteString("some_bytes") - en.WriteBytes([]byte("here are some bytes")) - en.Flush() - - // same-size replacement - var fbuf bytes.Buffer - w := NewWriter(&fbuf) - w.WriteFloat64(4.0) - w.Flush() - - // replace 2.0 with 4.0 in field two - raw := Replace("thing_two", buf.Bytes(), fbuf.Bytes()) - if len(raw) == 0 { - t.Fatal("field not found") - } - var err error - m := make(map[string]interface{}) - m, _, err = ReadMapStrIntfBytes(raw, m) - if err != nil { - t.Logf("%q", raw) - t.Fatal(err) - } - - if !reflect.DeepEqual(m["thing_two"], 4.0) { - t.Errorf("wanted %v; got %v", 4.0, m["thing_two"]) - } - - // smaller-size replacement - // replace 2.0 with []byte("hi!") - fbuf.Reset() - w.WriteBytes([]byte("hi!")) - w.Flush() - raw = Replace("thing_two", raw, fbuf.Bytes()) - if len(raw) == 0 { - t.Fatal("field not found") - } - - m, _, err = ReadMapStrIntfBytes(raw, m) - if err != nil { - t.Logf("%q", raw) - t.Fatal(err) - } - - if !reflect.DeepEqual(m["thing_two"], []byte("hi!")) { - t.Errorf("wanted %v; got %v", []byte("hi!"), m["thing_two"]) - } - - // larger-size replacement - fbuf.Reset() - w.WriteBytes([]byte("some even larger bytes than before")) - w.Flush() - raw = Replace("some_bytes", raw, fbuf.Bytes()) - if len(raw) == 0 { - t.Logf("%q", raw) - t.Fatal(err) - } - - m, _, err = ReadMapStrIntfBytes(raw, m) - if err != nil { - t.Logf("%q", raw) - t.Fatal(err) - } - - if !reflect.DeepEqual(m["some_bytes"], []byte("some even larger bytes than before")) { - t.Errorf("wanted %v; got %v", []byte("hello there!"), m["some_bytes"]) - } - - // identical in-place replacement - field := Locate("some_bytes", raw) - newraw := CopyReplace("some_bytes", raw, field) - - if !bytes.Equal(newraw, raw) { - t.Logf("in: %q", raw) - t.Logf("out: %q", newraw) - t.Error("bytes not equal after copyreplace") - } -} - -func BenchmarkLocate(b *testing.B) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteMapHeader(3) - en.WriteString("thing_one") - en.WriteString("value_one") - en.WriteString("thing_two") - en.WriteFloat64(2.0) - en.WriteString("thing_three") - en.WriteBytes([]byte("hello!")) - en.Flush() - - raw := buf.Bytes() - // bytes/s will be the number of bytes traversed per unit of time - field := Locate("thing_three", raw) - b.SetBytes(int64(len(raw) - len(field))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - Locate("thing_three", raw) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/elsize.go b/vendor/github.com/tinylib/msgp/msgp/elsize.go deleted file mode 100644 index 95762e7e..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/elsize.go +++ /dev/null @@ -1,99 +0,0 @@ -package msgp - -// size of every object on the wire, -// plus type information. gives us -// constant-time type information -// for traversing composite objects. -// -var sizes = [256]bytespec{ - mnil: {size: 1, extra: constsize, typ: NilType}, - mfalse: {size: 1, extra: constsize, typ: BoolType}, - mtrue: {size: 1, extra: constsize, typ: BoolType}, - mbin8: {size: 2, extra: extra8, typ: BinType}, - mbin16: {size: 3, extra: extra16, typ: BinType}, - mbin32: {size: 5, extra: extra32, typ: BinType}, - mext8: {size: 3, extra: extra8, typ: ExtensionType}, - mext16: {size: 4, extra: extra16, typ: ExtensionType}, - mext32: {size: 6, extra: extra32, typ: ExtensionType}, - mfloat32: {size: 5, extra: constsize, typ: Float32Type}, - mfloat64: {size: 9, extra: constsize, typ: Float64Type}, - muint8: {size: 2, extra: constsize, typ: UintType}, - muint16: {size: 3, extra: constsize, typ: UintType}, - muint32: {size: 5, extra: constsize, typ: UintType}, - muint64: {size: 9, extra: constsize, typ: UintType}, - mint8: {size: 2, extra: constsize, typ: IntType}, - mint16: {size: 3, extra: constsize, typ: IntType}, - mint32: {size: 5, extra: constsize, typ: IntType}, - mint64: {size: 9, extra: constsize, typ: IntType}, - mfixext1: {size: 3, extra: constsize, typ: ExtensionType}, - mfixext2: {size: 4, extra: constsize, typ: ExtensionType}, - mfixext4: {size: 6, extra: constsize, typ: ExtensionType}, - mfixext8: {size: 10, extra: constsize, typ: ExtensionType}, - mfixext16: {size: 18, extra: constsize, typ: ExtensionType}, - mstr8: {size: 2, extra: extra8, typ: StrType}, - mstr16: {size: 3, extra: extra16, typ: StrType}, - mstr32: {size: 5, extra: extra32, typ: StrType}, - marray16: {size: 3, extra: array16v, typ: ArrayType}, - marray32: {size: 5, extra: array32v, typ: ArrayType}, - mmap16: {size: 3, extra: map16v, typ: MapType}, - mmap32: {size: 5, extra: map32v, typ: MapType}, -} - -func init() { - // set up fixed fields - - // fixint - for i := mfixint; i < 0x80; i++ { - sizes[i] = bytespec{size: 1, extra: constsize, typ: IntType} - } - - // nfixint - for i := uint16(mnfixint); i < 0x100; i++ { - sizes[uint8(i)] = bytespec{size: 1, extra: constsize, typ: IntType} - } - - // fixstr gets constsize, - // since the prefix yields the size - for i := mfixstr; i < 0xc0; i++ { - sizes[i] = bytespec{size: 1 + rfixstr(i), extra: constsize, typ: StrType} - } - - // fixmap - for i := mfixmap; i < 0x90; i++ { - sizes[i] = bytespec{size: 1, extra: varmode(2 * rfixmap(i)), typ: MapType} - } - - // fixarray - for i := mfixarray; i < 0xa0; i++ { - sizes[i] = bytespec{size: 1, extra: varmode(rfixarray(i)), typ: ArrayType} - } -} - -// a valid bytespsec has -// non-zero 'size' and -// non-zero 'typ' -type bytespec struct { - size uint8 // prefix size information - extra varmode // extra size information - typ Type // type - _ byte // makes bytespec 4 bytes (yes, this matters) -} - -// size mode -// if positive, # elements for composites -type varmode int8 - -const ( - constsize varmode = 0 // constant size (size bytes + uint8(varmode) objects) - extra8 = -1 // has uint8(p[1]) extra bytes - extra16 = -2 // has be16(p[1:]) extra bytes - extra32 = -3 // has be32(p[1:]) extra bytes - map16v = -4 // use map16 - map32v = -5 // use map32 - array16v = -6 // use array16 - array32v = -7 // use array32 -) - -func getType(v byte) Type { - return sizes[v].typ -} diff --git a/vendor/github.com/tinylib/msgp/msgp/errors.go b/vendor/github.com/tinylib/msgp/msgp/errors.go deleted file mode 100644 index 5c24f271..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/errors.go +++ /dev/null @@ -1,142 +0,0 @@ -package msgp - -import ( - "fmt" - "reflect" -) - -var ( - // ErrShortBytes is returned when the - // slice being decoded is too short to - // contain the contents of the message - ErrShortBytes error = errShort{} - - // this error is only returned - // if we reach code that should - // be unreachable - fatal error = errFatal{} -) - -// Error is the interface satisfied -// by all of the errors that originate -// from this package. -type Error interface { - error - - // Resumable returns whether - // or not the error means that - // the stream of data is malformed - // and the information is unrecoverable. - Resumable() bool -} - -type errShort struct{} - -func (e errShort) Error() string { return "msgp: too few bytes left to read object" } -func (e errShort) Resumable() bool { return false } - -type errFatal struct{} - -func (f errFatal) Error() string { return "msgp: fatal decoding error (unreachable code)" } -func (f errFatal) Resumable() bool { return false } - -// ArrayError is an error returned -// when decoding a fix-sized array -// of the wrong size -type ArrayError struct { - Wanted uint32 - Got uint32 -} - -// Error implements the error interface -func (a ArrayError) Error() string { - return fmt.Sprintf("msgp: wanted array of size %d; got %d", a.Wanted, a.Got) -} - -// Resumable is always 'true' for ArrayErrors -func (a ArrayError) Resumable() bool { return true } - -// IntOverflow is returned when a call -// would downcast an integer to a type -// with too few bits to hold its value. -type IntOverflow struct { - Value int64 // the value of the integer - FailedBitsize int // the bit size that the int64 could not fit into -} - -// Error implements the error interface -func (i IntOverflow) Error() string { - return fmt.Sprintf("msgp: %d overflows int%d", i.Value, i.FailedBitsize) -} - -// Resumable is always 'true' for overflows -func (i IntOverflow) Resumable() bool { return true } - -// UintOverflow is returned when a call -// would downcast an unsigned integer to a type -// with too few bits to hold its value -type UintOverflow struct { - Value uint64 // value of the uint - FailedBitsize int // the bit size that couldn't fit the value -} - -// Error implements the error interface -func (u UintOverflow) Error() string { - return fmt.Sprintf("msgp: %d overflows uint%d", u.Value, u.FailedBitsize) -} - -// Resumable is always 'true' for overflows -func (u UintOverflow) Resumable() bool { return true } - -// A TypeError is returned when a particular -// decoding method is unsuitable for decoding -// a particular MessagePack value. -type TypeError struct { - Method Type // Type expected by method - Encoded Type // Type actually encoded -} - -// Error implements the error interface -func (t TypeError) Error() string { - return fmt.Sprintf("msgp: attempted to decode type %q with method for %q", t.Encoded, t.Method) -} - -// Resumable returns 'true' for TypeErrors -func (t TypeError) Resumable() bool { return true } - -// returns either InvalidPrefixError or -// TypeError depending on whether or not -// the prefix is recognized -func badPrefix(want Type, lead byte) error { - t := sizes[lead].typ - if t == InvalidType { - return InvalidPrefixError(lead) - } - return TypeError{Method: want, Encoded: t} -} - -// InvalidPrefixError is returned when a bad encoding -// uses a prefix that is not recognized in the MessagePack standard. -// This kind of error is unrecoverable. -type InvalidPrefixError byte - -// Error implements the error interface -func (i InvalidPrefixError) Error() string { - return fmt.Sprintf("msgp: unrecognized type prefix 0x%x", byte(i)) -} - -// Resumable returns 'false' for InvalidPrefixErrors -func (i InvalidPrefixError) Resumable() bool { return false } - -// ErrUnsupportedType is returned -// when a bad argument is supplied -// to a function that takes `interface{}`. -type ErrUnsupportedType struct { - T reflect.Type -} - -// Error implements error -func (e *ErrUnsupportedType) Error() string { return fmt.Sprintf("msgp: type %q not supported", e.T) } - -// Resumable returns 'true' for ErrUnsupportedType -func (e *ErrUnsupportedType) Resumable() bool { return true } diff --git a/vendor/github.com/tinylib/msgp/msgp/extension.go b/vendor/github.com/tinylib/msgp/msgp/extension.go deleted file mode 100644 index 588b18f9..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/extension.go +++ /dev/null @@ -1,548 +0,0 @@ -package msgp - -import ( - "fmt" - "math" -) - -const ( - // Complex64Extension is the extension number used for complex64 - Complex64Extension = 3 - - // Complex128Extension is the extension number used for complex128 - Complex128Extension = 4 - - // TimeExtension is the extension number used for time.Time - TimeExtension = 5 -) - -// our extensions live here -var extensionReg = make(map[int8]func() Extension) - -// RegisterExtension registers extensions so that they -// can be initialized and returned by methods that -// decode `interface{}` values. This should only -// be called during initialization. f() should return -// a newly-initialized zero value of the extension. Keep in -// mind that extensions 3, 4, and 5 are reserved for -// complex64, complex128, and time.Time, respectively, -// and that MessagePack reserves extension types from -127 to -1. -// -// For example, if you wanted to register a user-defined struct: -// -// msgp.RegisterExtension(10, func() msgp.Extension { &MyExtension{} }) -// -// RegisterExtension will panic if you call it multiple times -// with the same 'typ' argument, or if you use a reserved -// type (3, 4, or 5). -func RegisterExtension(typ int8, f func() Extension) { - switch typ { - case Complex64Extension, Complex128Extension, TimeExtension: - panic(fmt.Sprint("msgp: forbidden extension type:", typ)) - } - if _, ok := extensionReg[typ]; ok { - panic(fmt.Sprint("msgp: RegisterExtension() called with typ", typ, "more than once")) - } - extensionReg[typ] = f -} - -// ExtensionTypeError is an error type returned -// when there is a mis-match between an extension type -// and the type encoded on the wire -type ExtensionTypeError struct { - Got int8 - Want int8 -} - -// Error implements the error interface -func (e ExtensionTypeError) Error() string { - return fmt.Sprintf("msgp: error decoding extension: wanted type %d; got type %d", e.Want, e.Got) -} - -// Resumable returns 'true' for ExtensionTypeErrors -func (e ExtensionTypeError) Resumable() bool { return true } - -func errExt(got int8, wanted int8) error { - return ExtensionTypeError{Got: got, Want: wanted} -} - -// Extension is the interface fulfilled -// by types that want to define their -// own binary encoding. -type Extension interface { - // ExtensionType should return - // a int8 that identifies the concrete - // type of the extension. (Types <0 are - // officially reserved by the MessagePack - // specifications.) - ExtensionType() int8 - - // Len should return the length - // of the data to be encoded - Len() int - - // MarshalBinaryTo should copy - // the data into the supplied slice, - // assuming that the slice has length Len() - MarshalBinaryTo([]byte) error - - UnmarshalBinary([]byte) error -} - -// RawExtension implements the Extension interface -type RawExtension struct { - Data []byte - Type int8 -} - -// ExtensionType implements Extension.ExtensionType, and returns r.Type -func (r *RawExtension) ExtensionType() int8 { return r.Type } - -// Len implements Extension.Len, and returns len(r.Data) -func (r *RawExtension) Len() int { return len(r.Data) } - -// MarshalBinaryTo implements Extension.MarshalBinaryTo, -// and returns a copy of r.Data -func (r *RawExtension) MarshalBinaryTo(d []byte) error { - copy(d, r.Data) - return nil -} - -// UnmarshalBinary implements Extension.UnmarshalBinary, -// and sets r.Data to the contents of the provided slice -func (r *RawExtension) UnmarshalBinary(b []byte) error { - if cap(r.Data) >= len(b) { - r.Data = r.Data[0:len(b)] - } else { - r.Data = make([]byte, len(b)) - } - copy(r.Data, b) - return nil -} - -// WriteExtension writes an extension type to the writer -func (mw *Writer) WriteExtension(e Extension) error { - l := e.Len() - var err error - switch l { - case 0: - o, err := mw.require(3) - if err != nil { - return err - } - mw.buf[o] = mext8 - mw.buf[o+1] = 0 - mw.buf[o+2] = byte(e.ExtensionType()) - case 1: - o, err := mw.require(2) - if err != nil { - return err - } - mw.buf[o] = mfixext1 - mw.buf[o+1] = byte(e.ExtensionType()) - case 2: - o, err := mw.require(2) - if err != nil { - return err - } - mw.buf[o] = mfixext2 - mw.buf[o+1] = byte(e.ExtensionType()) - case 4: - o, err := mw.require(2) - if err != nil { - return err - } - mw.buf[o] = mfixext4 - mw.buf[o+1] = byte(e.ExtensionType()) - case 8: - o, err := mw.require(2) - if err != nil { - return err - } - mw.buf[o] = mfixext8 - mw.buf[o+1] = byte(e.ExtensionType()) - case 16: - o, err := mw.require(2) - if err != nil { - return err - } - mw.buf[o] = mfixext16 - mw.buf[o+1] = byte(e.ExtensionType()) - default: - switch { - case l < math.MaxUint8: - o, err := mw.require(3) - if err != nil { - return err - } - mw.buf[o] = mext8 - mw.buf[o+1] = byte(uint8(l)) - mw.buf[o+2] = byte(e.ExtensionType()) - case l < math.MaxUint16: - o, err := mw.require(4) - if err != nil { - return err - } - mw.buf[o] = mext16 - big.PutUint16(mw.buf[o+1:], uint16(l)) - mw.buf[o+3] = byte(e.ExtensionType()) - default: - o, err := mw.require(6) - if err != nil { - return err - } - mw.buf[o] = mext32 - big.PutUint32(mw.buf[o+1:], uint32(l)) - mw.buf[o+5] = byte(e.ExtensionType()) - } - } - // we can only write directly to the - // buffer if we're sure that it - // fits the object - if l <= mw.bufsize() { - o, err := mw.require(l) - if err != nil { - return err - } - return e.MarshalBinaryTo(mw.buf[o:]) - } - // here we create a new buffer - // just large enough for the body - // and save it as the write buffer - err = mw.flush() - if err != nil { - return err - } - buf := make([]byte, l) - err = e.MarshalBinaryTo(buf) - if err != nil { - return err - } - mw.buf = buf - mw.wloc = l - return nil -} - -// peek at the extension type, assuming the next -// kind to be read is Extension -func (m *Reader) peekExtensionType() (int8, error) { - p, err := m.R.Peek(2) - if err != nil { - return 0, err - } - spec := sizes[p[0]] - if spec.typ != ExtensionType { - return 0, badPrefix(ExtensionType, p[0]) - } - if spec.extra == constsize { - return int8(p[1]), nil - } - size := spec.size - p, err = m.R.Peek(int(size)) - if err != nil { - return 0, err - } - return int8(p[size-1]), nil -} - -// peekExtension peeks at the extension encoding type -// (must guarantee at least 1 byte in 'b') -func peekExtension(b []byte) (int8, error) { - spec := sizes[b[0]] - size := spec.size - if spec.typ != ExtensionType { - return 0, badPrefix(ExtensionType, b[0]) - } - if len(b) < int(size) { - return 0, ErrShortBytes - } - // for fixed extensions, - // the type information is in - // the second byte - if spec.extra == constsize { - return int8(b[1]), nil - } - // otherwise, it's in the last - // part of the prefix - return int8(b[size-1]), nil -} - -// ReadExtension reads the next object from the reader -// as an extension. ReadExtension will fail if the next -// object in the stream is not an extension, or if -// e.Type() is not the same as the wire type. -func (m *Reader) ReadExtension(e Extension) (err error) { - var p []byte - p, err = m.R.Peek(2) - if err != nil { - return - } - lead := p[0] - var read int - var off int - switch lead { - case mfixext1: - if int8(p[1]) != e.ExtensionType() { - err = errExt(int8(p[1]), e.ExtensionType()) - return - } - p, err = m.R.Peek(3) - if err != nil { - return - } - err = e.UnmarshalBinary(p[2:]) - if err == nil { - _, err = m.R.Skip(3) - } - return - - case mfixext2: - if int8(p[1]) != e.ExtensionType() { - err = errExt(int8(p[1]), e.ExtensionType()) - return - } - p, err = m.R.Peek(4) - if err != nil { - return - } - err = e.UnmarshalBinary(p[2:]) - if err == nil { - _, err = m.R.Skip(4) - } - return - - case mfixext4: - if int8(p[1]) != e.ExtensionType() { - err = errExt(int8(p[1]), e.ExtensionType()) - return - } - p, err = m.R.Peek(6) - if err != nil { - return - } - err = e.UnmarshalBinary(p[2:]) - if err == nil { - _, err = m.R.Skip(6) - } - return - - case mfixext8: - if int8(p[1]) != e.ExtensionType() { - err = errExt(int8(p[1]), e.ExtensionType()) - return - } - p, err = m.R.Peek(10) - if err != nil { - return - } - err = e.UnmarshalBinary(p[2:]) - if err == nil { - _, err = m.R.Skip(10) - } - return - - case mfixext16: - if int8(p[1]) != e.ExtensionType() { - err = errExt(int8(p[1]), e.ExtensionType()) - return - } - p, err = m.R.Peek(18) - if err != nil { - return - } - err = e.UnmarshalBinary(p[2:]) - if err == nil { - _, err = m.R.Skip(18) - } - return - - case mext8: - p, err = m.R.Peek(3) - if err != nil { - return - } - if int8(p[2]) != e.ExtensionType() { - err = errExt(int8(p[2]), e.ExtensionType()) - return - } - read = int(uint8(p[1])) - off = 3 - - case mext16: - p, err = m.R.Peek(4) - if err != nil { - return - } - if int8(p[3]) != e.ExtensionType() { - err = errExt(int8(p[3]), e.ExtensionType()) - return - } - read = int(big.Uint16(p[1:])) - off = 4 - - case mext32: - p, err = m.R.Peek(6) - if err != nil { - return - } - if int8(p[5]) != e.ExtensionType() { - err = errExt(int8(p[5]), e.ExtensionType()) - return - } - read = int(big.Uint32(p[1:])) - off = 6 - - default: - err = badPrefix(ExtensionType, lead) - return - } - - p, err = m.R.Peek(read + off) - if err != nil { - return - } - err = e.UnmarshalBinary(p[off:]) - if err == nil { - _, err = m.R.Skip(read + off) - } - return -} - -// AppendExtension appends a MessagePack extension to the provided slice -func AppendExtension(b []byte, e Extension) ([]byte, error) { - l := e.Len() - var o []byte - var n int - switch l { - case 0: - o, n = ensure(b, 3) - o[n] = mext8 - o[n+1] = 0 - o[n+2] = byte(e.ExtensionType()) - return o[:n+3], nil - case 1: - o, n = ensure(b, 3) - o[n] = mfixext1 - o[n+1] = byte(e.ExtensionType()) - n += 2 - case 2: - o, n = ensure(b, 4) - o[n] = mfixext2 - o[n+1] = byte(e.ExtensionType()) - n += 2 - case 4: - o, n = ensure(b, 6) - o[n] = mfixext4 - o[n+1] = byte(e.ExtensionType()) - n += 2 - case 8: - o, n = ensure(b, 10) - o[n] = mfixext8 - o[n+1] = byte(e.ExtensionType()) - n += 2 - case 16: - o, n = ensure(b, 18) - o[n] = mfixext16 - o[n+1] = byte(e.ExtensionType()) - n += 2 - } - switch { - case l < math.MaxUint8: - o, n = ensure(b, l+3) - o[n] = mext8 - o[n+1] = byte(uint8(l)) - o[n+2] = byte(e.ExtensionType()) - n += 3 - case l < math.MaxUint16: - o, n = ensure(b, l+4) - o[n] = mext16 - big.PutUint16(o[n+1:], uint16(l)) - o[n+3] = byte(e.ExtensionType()) - n += 4 - default: - o, n = ensure(b, l+6) - o[n] = mext32 - big.PutUint32(o[n+1:], uint32(l)) - o[n+5] = byte(e.ExtensionType()) - n += 6 - } - return o, e.MarshalBinaryTo(o[n:]) -} - -// ReadExtensionBytes reads an extension from 'b' into 'e' -// and returns any remaining bytes. -// Possible errors: -// - ErrShortBytes ('b' not long enough) -// - ExtensionTypeErorr{} (wire type not the same as e.Type()) -// - TypeErorr{} (next object not an extension) -// - InvalidPrefixError -// - An umarshal error returned from e.UnmarshalBinary -func ReadExtensionBytes(b []byte, e Extension) ([]byte, error) { - l := len(b) - if l < 3 { - return b, ErrShortBytes - } - lead := b[0] - var ( - sz int // size of 'data' - off int // offset of 'data' - typ int8 - ) - switch lead { - case mfixext1: - typ = int8(b[1]) - sz = 1 - off = 2 - case mfixext2: - typ = int8(b[1]) - sz = 2 - off = 2 - case mfixext4: - typ = int8(b[1]) - sz = 4 - off = 2 - case mfixext8: - typ = int8(b[1]) - sz = 8 - off = 2 - case mfixext16: - typ = int8(b[1]) - sz = 16 - off = 2 - case mext8: - sz = int(uint8(b[1])) - typ = int8(b[2]) - off = 3 - if sz == 0 { - return b[3:], e.UnmarshalBinary(b[3:3]) - } - case mext16: - if l < 4 { - return b, ErrShortBytes - } - sz = int(big.Uint16(b[1:])) - typ = int8(b[3]) - off = 4 - case mext32: - if l < 6 { - return b, ErrShortBytes - } - sz = int(big.Uint32(b[1:])) - typ = int8(b[5]) - off = 6 - default: - return b, badPrefix(ExtensionType, lead) - } - - if typ != e.ExtensionType() { - return b, errExt(typ, e.ExtensionType()) - } - - // the data of the extension starts - // at 'off' and is 'sz' bytes long - if len(b[off:]) < sz { - return b, ErrShortBytes - } - tot := off + sz - return b[tot:], e.UnmarshalBinary(b[off:tot]) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/extension_test.go b/vendor/github.com/tinylib/msgp/msgp/extension_test.go deleted file mode 100644 index d46fcfee..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/extension_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package msgp - -import ( - "bytes" - "math/rand" - "testing" - "time" -) - -var extSizes = [...]int{0, 1, 2, 4, 8, 16, int(tint8), int(tuint16), int(tuint32)} - -func randomExt() RawExtension { - e := RawExtension{} - e.Type = int8(rand.Int()) - e.Data = RandBytes(extSizes[rand.Intn(len(extSizes))]) - return e -} - -func TestReadWriteExtension(t *testing.T) { - rand.Seed(time.Now().Unix()) - var buf bytes.Buffer - en := NewWriter(&buf) - dc := NewReader(&buf) - - for i := 0; i < 25; i++ { - buf.Reset() - e := randomExt() - en.WriteExtension(&e) - en.Flush() - err := dc.ReadExtension(&e) - if err != nil { - t.Errorf("error with extension (length %d): %s", len(buf.Bytes()), err) - } - } -} - -func TestReadWriteExtensionBytes(t *testing.T) { - var bts []byte - rand.Seed(time.Now().Unix()) - - for i := 0; i < 24; i++ { - e := randomExt() - bts, _ = AppendExtension(bts[0:0], &e) - _, err := ReadExtensionBytes(bts, &e) - if err != nil { - t.Errorf("error with extension (length %d): %s", len(bts), err) - } - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/file.go b/vendor/github.com/tinylib/msgp/msgp/file.go deleted file mode 100644 index 8e7370eb..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/file.go +++ /dev/null @@ -1,92 +0,0 @@ -// +build linux darwin dragonfly freebsd netbsd openbsd -// +build !appengine - -package msgp - -import ( - "os" - "syscall" -) - -// ReadFile reads a file into 'dst' using -// a read-only memory mapping. Consequently, -// the file must be mmap-able, and the -// Unmarshaler should never write to -// the source memory. (Methods generated -// by the msgp tool obey that constraint, but -// user-defined implementations may not.) -// -// Reading and writing through file mappings -// is only efficient for large files; small -// files are best read and written using -// the ordinary streaming interfaces. -// -func ReadFile(dst Unmarshaler, file *os.File) error { - stat, err := file.Stat() - if err != nil { - return err - } - data, err := syscall.Mmap(int(file.Fd()), 0, int(stat.Size()), syscall.PROT_READ, syscall.MAP_SHARED) - if err != nil { - return err - } - adviseRead(data) - _, err = dst.UnmarshalMsg(data) - uerr := syscall.Munmap(data) - if err == nil { - err = uerr - } - return err -} - -// MarshalSizer is the combination -// of the Marshaler and Sizer -// interfaces. -type MarshalSizer interface { - Marshaler - Sizer -} - -// WriteFile writes a file from 'src' using -// memory mapping. It overwrites the entire -// contents of the previous file. -// The mapping size is calculated -// using the `Msgsize()` method -// of 'src', so it must produce a result -// equal to or greater than the actual encoded -// size of the object. Otherwise, -// a fault (SIGBUS) will occur. -// -// Reading and writing through file mappings -// is only efficient for large files; small -// files are best read and written using -// the ordinary streaming interfaces. -// -// NOTE: The performance of this call -// is highly OS- and filesystem-dependent. -// Users should take care to test that this -// performs as expected in a production environment. -// (Linux users should run a kernel and filesystem -// that support fallocate(2) for the best results.) -func WriteFile(src MarshalSizer, file *os.File) error { - sz := src.Msgsize() - err := fallocate(file, int64(sz)) - if err != nil { - return err - } - data, err := syscall.Mmap(int(file.Fd()), 0, sz, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED) - if err != nil { - return err - } - adviseWrite(data) - chunk := data[:0] - chunk, err = src.MarshalMsg(chunk) - if err != nil { - return err - } - uerr := syscall.Munmap(data) - if uerr != nil { - return uerr - } - return file.Truncate(int64(len(chunk))) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/file_port.go b/vendor/github.com/tinylib/msgp/msgp/file_port.go deleted file mode 100644 index 6e654dbd..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/file_port.go +++ /dev/null @@ -1,47 +0,0 @@ -// +build windows appengine - -package msgp - -import ( - "io/ioutil" - "os" -) - -// MarshalSizer is the combination -// of the Marshaler and Sizer -// interfaces. -type MarshalSizer interface { - Marshaler - Sizer -} - -func ReadFile(dst Unmarshaler, file *os.File) error { - if u, ok := dst.(Decodable); ok { - return u.DecodeMsg(NewReader(file)) - } - - data, err := ioutil.ReadAll(file) - if err != nil { - return err - } - _, err = dst.UnmarshalMsg(data) - return err -} - -func WriteFile(src MarshalSizer, file *os.File) error { - if e, ok := src.(Encodable); ok { - w := NewWriter(file) - err := e.EncodeMsg(w) - if err == nil { - err = w.Flush() - } - return err - } - - raw, err := src.MarshalMsg(nil) - if err != nil { - return err - } - _, err = file.Write(raw) - return err -} diff --git a/vendor/github.com/tinylib/msgp/msgp/file_test.go b/vendor/github.com/tinylib/msgp/msgp/file_test.go deleted file mode 100644 index 1cc01cec..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/file_test.go +++ /dev/null @@ -1,103 +0,0 @@ -// +build linux darwin dragonfly freebsd netbsd openbsd - -package msgp_test - -import ( - "bytes" - "crypto/rand" - "github.com/tinylib/msgp/msgp" - prand "math/rand" - "os" - "testing" -) - -type rawBytes []byte - -func (r rawBytes) MarshalMsg(b []byte) ([]byte, error) { - return msgp.AppendBytes(b, []byte(r)), nil -} - -func (r rawBytes) Msgsize() int { - return msgp.BytesPrefixSize + len(r) -} - -func (r *rawBytes) UnmarshalMsg(b []byte) ([]byte, error) { - tmp, out, err := msgp.ReadBytesBytes(b, (*(*[]byte)(r))[:0]) - *r = rawBytes(tmp) - return out, err -} - -func TestReadWriteFile(t *testing.T) { - t.Parallel() - - f, err := os.Create("tmpfile") - if err != nil { - t.Fatal(err) - } - defer func() { - f.Close() - os.Remove("tmpfile") - }() - - data := make([]byte, 1024*1024) - rand.Read(data) - - err = msgp.WriteFile(rawBytes(data), f) - if err != nil { - t.Fatal(err) - } - - var out rawBytes - f.Seek(0, os.SEEK_SET) - err = msgp.ReadFile(&out, f) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal([]byte(out), []byte(data)) { - t.Fatal("Input and output not equal.") - } -} - -var blobstrings = []string{"", "a string", "a longer string here!"} -var blobfloats = []float64{0.0, -1.0, 1.0, 3.1415926535} -var blobints = []int64{0, 1, -1, 80000, 1 << 30} -var blobbytes = [][]byte{[]byte{}, []byte("hello"), []byte("{\"is_json\":true,\"is_compact\":\"unable to determine\"}")} - -func BenchmarkWriteReadFile(b *testing.B) { - - // let's not run out of disk space... - if b.N > 10000000 { - b.N = 10000000 - } - - fname := "bench-tmpfile" - f, err := os.Create(fname) - if err != nil { - b.Fatal(err) - } - defer func(f *os.File, name string) { - f.Close() - os.Remove(name) - }(f, fname) - - data := make(Blobs, b.N) - - for i := range data { - data[i].Name = blobstrings[prand.Intn(len(blobstrings))] - data[i].Float = blobfloats[prand.Intn(len(blobfloats))] - data[i].Amount = blobints[prand.Intn(len(blobints))] - data[i].Bytes = blobbytes[prand.Intn(len(blobbytes))] - } - - b.SetBytes(int64(data.Msgsize() / b.N)) - b.ResetTimer() - err = msgp.WriteFile(data, f) - if err != nil { - b.Fatal(err) - } - err = msgp.ReadFile(&data, f) - if err != nil { - b.Fatal(err) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go b/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go deleted file mode 100644 index 575b081b..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package msgp - -import ( - "testing" -) - -func BenchmarkReadWriteFloat32(b *testing.B) { - var f float32 = 3.9081 - bts := AppendFloat32([]byte{}, f) - b.ResetTimer() - for i := 0; i < b.N; i++ { - bts = AppendFloat32(bts[0:0], f) - f, bts, _ = ReadFloat32Bytes(bts) - } -} - -func BenchmarkReadWriteFloat64(b *testing.B) { - var f float64 = 3.9081 - bts := AppendFloat64([]byte{}, f) - b.ResetTimer() - for i := 0; i < b.N; i++ { - bts = AppendFloat64(bts[0:0], f) - f, bts, _ = ReadFloat64Bytes(bts) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/integers.go b/vendor/github.com/tinylib/msgp/msgp/integers.go deleted file mode 100644 index f817d775..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/integers.go +++ /dev/null @@ -1,174 +0,0 @@ -package msgp - -/* ---------------------------------- - integer encoding utilities - (inline-able) - - TODO(tinylib): there are faster, - albeit non-portable solutions - to the code below. implement - byteswap? - ---------------------------------- */ - -func putMint64(b []byte, i int64) { - b[0] = mint64 - b[1] = byte(i >> 56) - b[2] = byte(i >> 48) - b[3] = byte(i >> 40) - b[4] = byte(i >> 32) - b[5] = byte(i >> 24) - b[6] = byte(i >> 16) - b[7] = byte(i >> 8) - b[8] = byte(i) -} - -func getMint64(b []byte) int64 { - return (int64(b[1]) << 56) | (int64(b[2]) << 48) | - (int64(b[3]) << 40) | (int64(b[4]) << 32) | - (int64(b[5]) << 24) | (int64(b[6]) << 16) | - (int64(b[7]) << 8) | (int64(b[8])) -} - -func putMint32(b []byte, i int32) { - b[0] = mint32 - b[1] = byte(i >> 24) - b[2] = byte(i >> 16) - b[3] = byte(i >> 8) - b[4] = byte(i) -} - -func getMint32(b []byte) int32 { - return (int32(b[1]) << 24) | (int32(b[2]) << 16) | (int32(b[3]) << 8) | (int32(b[4])) -} - -func putMint16(b []byte, i int16) { - b[0] = mint16 - b[1] = byte(i >> 8) - b[2] = byte(i) -} - -func getMint16(b []byte) (i int16) { - return (int16(b[1]) << 8) | int16(b[2]) -} - -func putMint8(b []byte, i int8) { - b[0] = mint8 - b[1] = byte(i) -} - -func getMint8(b []byte) (i int8) { - return int8(b[1]) -} - -func putMuint64(b []byte, u uint64) { - b[0] = muint64 - b[1] = byte(u >> 56) - b[2] = byte(u >> 48) - b[3] = byte(u >> 40) - b[4] = byte(u >> 32) - b[5] = byte(u >> 24) - b[6] = byte(u >> 16) - b[7] = byte(u >> 8) - b[8] = byte(u) -} - -func getMuint64(b []byte) uint64 { - return (uint64(b[1]) << 56) | (uint64(b[2]) << 48) | - (uint64(b[3]) << 40) | (uint64(b[4]) << 32) | - (uint64(b[5]) << 24) | (uint64(b[6]) << 16) | - (uint64(b[7]) << 8) | (uint64(b[8])) -} - -func putMuint32(b []byte, u uint32) { - b[0] = muint32 - b[1] = byte(u >> 24) - b[2] = byte(u >> 16) - b[3] = byte(u >> 8) - b[4] = byte(u) -} - -func getMuint32(b []byte) uint32 { - return (uint32(b[1]) << 24) | (uint32(b[2]) << 16) | (uint32(b[3]) << 8) | (uint32(b[4])) -} - -func putMuint16(b []byte, u uint16) { - b[0] = muint16 - b[1] = byte(u >> 8) - b[2] = byte(u) -} - -func getMuint16(b []byte) uint16 { - return (uint16(b[1]) << 8) | uint16(b[2]) -} - -func putMuint8(b []byte, u uint8) { - b[0] = muint8 - b[1] = byte(u) -} - -func getMuint8(b []byte) uint8 { - return uint8(b[1]) -} - -func getUnix(b []byte) (sec int64, nsec int32) { - sec = (int64(b[0]) << 56) | (int64(b[1]) << 48) | - (int64(b[2]) << 40) | (int64(b[3]) << 32) | - (int64(b[4]) << 24) | (int64(b[5]) << 16) | - (int64(b[6]) << 8) | (int64(b[7])) - - nsec = (int32(b[8]) << 24) | (int32(b[9]) << 16) | (int32(b[10]) << 8) | (int32(b[11])) - return -} - -func putUnix(b []byte, sec int64, nsec int32) { - b[0] = byte(sec >> 56) - b[1] = byte(sec >> 48) - b[2] = byte(sec >> 40) - b[3] = byte(sec >> 32) - b[4] = byte(sec >> 24) - b[5] = byte(sec >> 16) - b[6] = byte(sec >> 8) - b[7] = byte(sec) - b[8] = byte(nsec >> 24) - b[9] = byte(nsec >> 16) - b[10] = byte(nsec >> 8) - b[11] = byte(nsec) -} - -/* ----------------------------- - prefix utilities - ----------------------------- */ - -// write prefix and uint8 -func prefixu8(b []byte, pre byte, sz uint8) { - b[0] = pre - b[1] = byte(sz) -} - -// write prefix and big-endian uint16 -func prefixu16(b []byte, pre byte, sz uint16) { - b[0] = pre - b[1] = byte(sz >> 8) - b[2] = byte(sz) -} - -// write prefix and big-endian uint32 -func prefixu32(b []byte, pre byte, sz uint32) { - b[0] = pre - b[1] = byte(sz >> 24) - b[2] = byte(sz >> 16) - b[3] = byte(sz >> 8) - b[4] = byte(sz) -} - -func prefixu64(b []byte, pre byte, sz uint64) { - b[0] = pre - b[1] = byte(sz >> 56) - b[2] = byte(sz >> 48) - b[3] = byte(sz >> 40) - b[4] = byte(sz >> 32) - b[5] = byte(sz >> 24) - b[6] = byte(sz >> 16) - b[7] = byte(sz >> 8) - b[8] = byte(sz) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/json.go b/vendor/github.com/tinylib/msgp/msgp/json.go deleted file mode 100644 index 4325860a..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/json.go +++ /dev/null @@ -1,542 +0,0 @@ -package msgp - -import ( - "bufio" - "encoding/base64" - "encoding/json" - "io" - "strconv" - "unicode/utf8" -) - -var ( - null = []byte("null") - hex = []byte("0123456789abcdef") -) - -var defuns [_maxtype]func(jsWriter, *Reader) (int, error) - -// note: there is an initialization loop if -// this isn't set up during init() -func init() { - // since none of these functions are inline-able, - // there is not much of a penalty to the indirect - // call. however, this is best expressed as a jump-table... - defuns = [_maxtype]func(jsWriter, *Reader) (int, error){ - StrType: rwString, - BinType: rwBytes, - MapType: rwMap, - ArrayType: rwArray, - Float64Type: rwFloat64, - Float32Type: rwFloat32, - BoolType: rwBool, - IntType: rwInt, - UintType: rwUint, - NilType: rwNil, - ExtensionType: rwExtension, - Complex64Type: rwExtension, - Complex128Type: rwExtension, - TimeType: rwTime, - } -} - -// this is the interface -// used to write json -type jsWriter interface { - io.Writer - io.ByteWriter - WriteString(string) (int, error) -} - -// CopyToJSON reads MessagePack from 'src' and copies it -// as JSON to 'dst' until EOF. -func CopyToJSON(dst io.Writer, src io.Reader) (n int64, err error) { - r := NewReader(src) - n, err = r.WriteToJSON(dst) - freeR(r) - return -} - -// WriteToJSON translates MessagePack from 'r' and writes it as -// JSON to 'w' until the underlying reader returns io.EOF. It returns -// the number of bytes written, and an error if it stopped before EOF. -func (r *Reader) WriteToJSON(w io.Writer) (n int64, err error) { - var j jsWriter - var bf *bufio.Writer - if jsw, ok := w.(jsWriter); ok { - j = jsw - } else { - bf = bufio.NewWriter(w) - j = bf - } - var nn int - for err == nil { - nn, err = rwNext(j, r) - n += int64(nn) - } - if err != io.EOF { - if bf != nil { - bf.Flush() - } - return - } - err = nil - if bf != nil { - err = bf.Flush() - } - return -} - -func rwNext(w jsWriter, src *Reader) (int, error) { - t, err := src.NextType() - if err != nil { - return 0, err - } - return defuns[t](w, src) -} - -func rwMap(dst jsWriter, src *Reader) (n int, err error) { - var comma bool - var sz uint32 - var field []byte - - sz, err = src.ReadMapHeader() - if err != nil { - return - } - - if sz == 0 { - return dst.WriteString("{}") - } - - err = dst.WriteByte('{') - if err != nil { - return - } - n++ - var nn int - for i := uint32(0); i < sz; i++ { - if comma { - err = dst.WriteByte(',') - if err != nil { - return - } - n++ - } - - field, err = src.ReadMapKeyPtr() - if err != nil { - return - } - nn, err = rwquoted(dst, field) - n += nn - if err != nil { - return - } - - err = dst.WriteByte(':') - if err != nil { - return - } - n++ - nn, err = rwNext(dst, src) - n += nn - if err != nil { - return - } - if !comma { - comma = true - } - } - - err = dst.WriteByte('}') - if err != nil { - return - } - n++ - return -} - -func rwArray(dst jsWriter, src *Reader) (n int, err error) { - err = dst.WriteByte('[') - if err != nil { - return - } - var sz uint32 - var nn int - sz, err = src.ReadArrayHeader() - if err != nil { - return - } - comma := false - for i := uint32(0); i < sz; i++ { - if comma { - err = dst.WriteByte(',') - if err != nil { - return - } - n++ - } - nn, err = rwNext(dst, src) - n += nn - if err != nil { - return - } - comma = true - } - - err = dst.WriteByte(']') - if err != nil { - return - } - n++ - return -} - -func rwNil(dst jsWriter, src *Reader) (int, error) { - err := src.ReadNil() - if err != nil { - return 0, err - } - return dst.Write(null) -} - -func rwFloat32(dst jsWriter, src *Reader) (int, error) { - f, err := src.ReadFloat32() - if err != nil { - return 0, err - } - src.scratch = strconv.AppendFloat(src.scratch[:0], float64(f), 'f', -1, 64) - return dst.Write(src.scratch) -} - -func rwFloat64(dst jsWriter, src *Reader) (int, error) { - f, err := src.ReadFloat64() - if err != nil { - return 0, err - } - src.scratch = strconv.AppendFloat(src.scratch[:0], f, 'f', -1, 32) - return dst.Write(src.scratch) -} - -func rwInt(dst jsWriter, src *Reader) (int, error) { - i, err := src.ReadInt64() - if err != nil { - return 0, err - } - src.scratch = strconv.AppendInt(src.scratch[:0], i, 10) - return dst.Write(src.scratch) -} - -func rwUint(dst jsWriter, src *Reader) (int, error) { - u, err := src.ReadUint64() - if err != nil { - return 0, err - } - src.scratch = strconv.AppendUint(src.scratch[:0], u, 10) - return dst.Write(src.scratch) -} - -func rwBool(dst jsWriter, src *Reader) (int, error) { - b, err := src.ReadBool() - if err != nil { - return 0, err - } - if b { - return dst.WriteString("true") - } - return dst.WriteString("false") -} - -func rwTime(dst jsWriter, src *Reader) (int, error) { - t, err := src.ReadTime() - if err != nil { - return 0, err - } - bts, err := t.MarshalJSON() - if err != nil { - return 0, err - } - return dst.Write(bts) -} - -func rwExtension(dst jsWriter, src *Reader) (n int, err error) { - et, err := src.peekExtensionType() - if err != nil { - return 0, err - } - - // registered extensions can override - // the JSON encoding - if j, ok := extensionReg[et]; ok { - var bts []byte - e := j() - err = src.ReadExtension(e) - if err != nil { - return - } - bts, err = json.Marshal(e) - if err != nil { - return - } - return dst.Write(bts) - } - - e := RawExtension{} - e.Type = et - err = src.ReadExtension(&e) - if err != nil { - return - } - - var nn int - err = dst.WriteByte('{') - if err != nil { - return - } - n++ - - nn, err = dst.WriteString(`"type:"`) - n += nn - if err != nil { - return - } - - src.scratch = strconv.AppendInt(src.scratch[0:0], int64(e.Type), 10) - nn, err = dst.Write(src.scratch) - n += nn - if err != nil { - return - } - - nn, err = dst.WriteString(`,"data":"`) - n += nn - if err != nil { - return - } - - enc := base64.NewEncoder(base64.StdEncoding, dst) - - nn, err = enc.Write(e.Data) - n += nn - if err != nil { - return - } - err = enc.Close() - if err != nil { - return - } - nn, err = dst.WriteString(`"}`) - n += nn - return -} - -func rwString(dst jsWriter, src *Reader) (n int, err error) { - var p []byte - p, err = src.R.Peek(1) - if err != nil { - return - } - lead := p[0] - var read int - - if isfixstr(lead) { - read = int(rfixstr(lead)) - src.R.Skip(1) - goto write - } - - switch lead { - case mstr8: - p, err = src.R.Next(2) - if err != nil { - return - } - read = int(uint8(p[1])) - case mstr16: - p, err = src.R.Next(3) - if err != nil { - return - } - read = int(big.Uint16(p[1:])) - case mstr32: - p, err = src.R.Next(5) - if err != nil { - return - } - read = int(big.Uint32(p[1:])) - default: - err = badPrefix(StrType, lead) - return - } -write: - p, err = src.R.Next(read) - if err != nil { - return - } - n, err = rwquoted(dst, p) - return -} - -func rwBytes(dst jsWriter, src *Reader) (n int, err error) { - var nn int - err = dst.WriteByte('"') - if err != nil { - return - } - n++ - src.scratch, err = src.ReadBytes(src.scratch[:0]) - if err != nil { - return - } - enc := base64.NewEncoder(base64.StdEncoding, dst) - nn, err = enc.Write(src.scratch) - n += nn - if err != nil { - return - } - err = enc.Close() - if err != nil { - return - } - err = dst.WriteByte('"') - if err != nil { - return - } - n++ - return -} - -// Below (c) The Go Authors, 2009-2014 -// Subject to the BSD-style license found at http://golang.org -// -// see: encoding/json/encode.go:(*encodeState).stringbytes() -func rwquoted(dst jsWriter, s []byte) (n int, err error) { - var nn int - err = dst.WriteByte('"') - if err != nil { - return - } - n++ - start := 0 - for i := 0; i < len(s); { - if b := s[i]; b < utf8.RuneSelf { - if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' { - i++ - continue - } - if start < i { - nn, err = dst.Write(s[start:i]) - n += nn - if err != nil { - return - } - } - switch b { - case '\\', '"': - err = dst.WriteByte('\\') - if err != nil { - return - } - n++ - err = dst.WriteByte(b) - if err != nil { - return - } - n++ - case '\n': - err = dst.WriteByte('\\') - if err != nil { - return - } - n++ - err = dst.WriteByte('n') - if err != nil { - return - } - n++ - case '\r': - err = dst.WriteByte('\\') - if err != nil { - return - } - n++ - err = dst.WriteByte('r') - if err != nil { - return - } - n++ - default: - nn, err = dst.WriteString(`\u00`) - n += nn - if err != nil { - return - } - err = dst.WriteByte(hex[b>>4]) - if err != nil { - return - } - n++ - err = dst.WriteByte(hex[b&0xF]) - if err != nil { - return - } - n++ - } - i++ - start = i - continue - } - c, size := utf8.DecodeRune(s[i:]) - if c == utf8.RuneError && size == 1 { - if start < i { - nn, err = dst.Write(s[start:i]) - n += nn - if err != nil { - return - } - nn, err = dst.WriteString(`\ufffd`) - n += nn - if err != nil { - return - } - i += size - start = i - continue - } - } - if c == '\u2028' || c == '\u2029' { - if start < i { - nn, err = dst.Write(s[start:i]) - n += nn - if err != nil { - return - } - nn, err = dst.WriteString(`\u202`) - n += nn - if err != nil { - return - } - err = dst.WriteByte(hex[c&0xF]) - if err != nil { - return - } - n++ - } - } - i += size - } - if start < len(s) { - nn, err = dst.Write(s[start:]) - n += nn - if err != nil { - return - } - } - err = dst.WriteByte('"') - if err != nil { - return - } - n++ - return -} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_bytes.go b/vendor/github.com/tinylib/msgp/msgp/json_bytes.go deleted file mode 100644 index 438caf53..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/json_bytes.go +++ /dev/null @@ -1,363 +0,0 @@ -package msgp - -import ( - "bufio" - "encoding/base64" - "encoding/json" - "io" - "strconv" - "time" -) - -var unfuns [_maxtype]func(jsWriter, []byte, []byte) ([]byte, []byte, error) - -func init() { - - // NOTE(pmh): this is best expressed as a jump table, - // but gc doesn't do that yet. revisit post-go1.5. - unfuns = [_maxtype]func(jsWriter, []byte, []byte) ([]byte, []byte, error){ - StrType: rwStringBytes, - BinType: rwBytesBytes, - MapType: rwMapBytes, - ArrayType: rwArrayBytes, - Float64Type: rwFloat64Bytes, - Float32Type: rwFloat32Bytes, - BoolType: rwBoolBytes, - IntType: rwIntBytes, - UintType: rwUintBytes, - NilType: rwNullBytes, - ExtensionType: rwExtensionBytes, - Complex64Type: rwExtensionBytes, - Complex128Type: rwExtensionBytes, - TimeType: rwTimeBytes, - } -} - -// UnmarshalAsJSON takes raw messagepack and writes -// it as JSON to 'w'. If an error is returned, the -// bytes not translated will also be returned. If -// no errors are encountered, the length of the returned -// slice will be zero. -func UnmarshalAsJSON(w io.Writer, msg []byte) ([]byte, error) { - var ( - scratch []byte - cast bool - dst jsWriter - err error - ) - if jsw, ok := w.(jsWriter); ok { - dst = jsw - cast = true - } else { - dst = bufio.NewWriterSize(w, 512) - } - for len(msg) > 0 && err == nil { - msg, scratch, err = writeNext(dst, msg, scratch) - } - if !cast && err == nil { - err = dst.(*bufio.Writer).Flush() - } - return msg, err -} - -func writeNext(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - if len(msg) < 1 { - return msg, scratch, ErrShortBytes - } - t := getType(msg[0]) - if t == InvalidType { - return msg, scratch, InvalidPrefixError(msg[0]) - } - if t == ExtensionType { - et, err := peekExtension(msg) - if err != nil { - return nil, scratch, err - } - if et == TimeExtension { - t = TimeType - } - } - return unfuns[t](w, msg, scratch) -} - -func rwArrayBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - sz, msg, err := ReadArrayHeaderBytes(msg) - if err != nil { - return msg, scratch, err - } - err = w.WriteByte('[') - if err != nil { - return msg, scratch, err - } - for i := uint32(0); i < sz; i++ { - if i != 0 { - err = w.WriteByte(',') - if err != nil { - return msg, scratch, err - } - } - msg, scratch, err = writeNext(w, msg, scratch) - if err != nil { - return msg, scratch, err - } - } - err = w.WriteByte(']') - return msg, scratch, err -} - -func rwMapBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - sz, msg, err := ReadMapHeaderBytes(msg) - if err != nil { - return msg, scratch, err - } - err = w.WriteByte('{') - if err != nil { - return msg, scratch, err - } - for i := uint32(0); i < sz; i++ { - if i != 0 { - err = w.WriteByte(',') - if err != nil { - return msg, scratch, err - } - } - msg, scratch, err = rwMapKeyBytes(w, msg, scratch) - if err != nil { - return msg, scratch, err - } - err = w.WriteByte(':') - if err != nil { - return msg, scratch, err - } - msg, scratch, err = writeNext(w, msg, scratch) - if err != nil { - return msg, scratch, err - } - } - err = w.WriteByte('}') - return msg, scratch, err -} - -func rwMapKeyBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - msg, scratch, err := rwStringBytes(w, msg, scratch) - if err != nil { - if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { - return rwBytesBytes(w, msg, scratch) - } - } - return msg, scratch, err -} - -func rwStringBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - str, msg, err := ReadStringZC(msg) - if err != nil { - return msg, scratch, err - } - _, err = rwquoted(w, str) - return msg, scratch, err -} - -func rwBytesBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - bts, msg, err := ReadBytesZC(msg) - if err != nil { - return msg, scratch, err - } - l := base64.StdEncoding.EncodedLen(len(bts)) - if cap(scratch) >= l { - scratch = scratch[0:l] - } else { - scratch = make([]byte, l) - } - base64.StdEncoding.Encode(scratch, bts) - err = w.WriteByte('"') - if err != nil { - return msg, scratch, err - } - _, err = w.Write(scratch) - if err != nil { - return msg, scratch, err - } - err = w.WriteByte('"') - return msg, scratch, err -} - -func rwNullBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - msg, err := ReadNilBytes(msg) - if err != nil { - return msg, scratch, err - } - _, err = w.Write(null) - return msg, scratch, err -} - -func rwBoolBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - b, msg, err := ReadBoolBytes(msg) - if err != nil { - return msg, scratch, err - } - if b { - _, err = w.WriteString("true") - return msg, scratch, err - } - _, err = w.WriteString("false") - return msg, scratch, err -} - -func rwIntBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - i, msg, err := ReadInt64Bytes(msg) - if err != nil { - return msg, scratch, err - } - scratch = strconv.AppendInt(scratch[0:0], i, 10) - _, err = w.Write(scratch) - return msg, scratch, err -} - -func rwUintBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - u, msg, err := ReadUint64Bytes(msg) - if err != nil { - return msg, scratch, err - } - scratch = strconv.AppendUint(scratch[0:0], u, 10) - _, err = w.Write(scratch) - return msg, scratch, err -} - -func rwFloatBytes(w jsWriter, msg []byte, f64 bool, scratch []byte) ([]byte, []byte, error) { - var f float64 - var err error - var sz int - if f64 { - sz = 64 - f, msg, err = ReadFloat64Bytes(msg) - } else { - sz = 32 - var v float32 - v, msg, err = ReadFloat32Bytes(msg) - f = float64(v) - } - if err != nil { - return msg, scratch, err - } - scratch = strconv.AppendFloat(scratch, f, 'f', -1, sz) - _, err = w.Write(scratch) - return msg, scratch, err -} - -func rwFloat32Bytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - var f float32 - var err error - f, msg, err = ReadFloat32Bytes(msg) - if err != nil { - return msg, scratch, err - } - scratch = strconv.AppendFloat(scratch[:0], float64(f), 'f', -1, 32) - _, err = w.Write(scratch) - return msg, scratch, err -} - -func rwFloat64Bytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - var f float64 - var err error - f, msg, err = ReadFloat64Bytes(msg) - if err != nil { - return msg, scratch, err - } - scratch = strconv.AppendFloat(scratch[:0], f, 'f', -1, 64) - _, err = w.Write(scratch) - return msg, scratch, err -} - -func rwTimeBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - var t time.Time - var err error - t, msg, err = ReadTimeBytes(msg) - if err != nil { - return msg, scratch, err - } - bts, err := t.MarshalJSON() - if err != nil { - return msg, scratch, err - } - _, err = w.Write(bts) - return msg, scratch, err -} - -func rwExtensionBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { - var err error - var et int8 - et, err = peekExtension(msg) - if err != nil { - return msg, scratch, err - } - - // if it's time.Time - if et == TimeExtension { - var tm time.Time - tm, msg, err = ReadTimeBytes(msg) - if err != nil { - return msg, scratch, err - } - bts, err := tm.MarshalJSON() - if err != nil { - return msg, scratch, err - } - _, err = w.Write(bts) - return msg, scratch, err - } - - // if the extension is registered, - // use its canonical JSON form - if f, ok := extensionReg[et]; ok { - e := f() - msg, err = ReadExtensionBytes(msg, e) - if err != nil { - return msg, scratch, err - } - bts, err := json.Marshal(e) - if err != nil { - return msg, scratch, err - } - _, err = w.Write(bts) - return msg, scratch, err - } - - // otherwise, write `{"type": , "data": ""}` - r := RawExtension{} - r.Type = et - msg, err = ReadExtensionBytes(msg, &r) - if err != nil { - return msg, scratch, err - } - scratch, err = writeExt(w, r, scratch) - return msg, scratch, err -} - -func writeExt(w jsWriter, r RawExtension, scratch []byte) ([]byte, error) { - _, err := w.WriteString(`{"type":`) - if err != nil { - return scratch, err - } - scratch = strconv.AppendInt(scratch[0:0], int64(r.Type), 10) - _, err = w.Write(scratch) - if err != nil { - return scratch, err - } - _, err = w.WriteString(`,"data":"`) - if err != nil { - return scratch, err - } - l := base64.StdEncoding.EncodedLen(len(r.Data)) - if cap(scratch) >= l { - scratch = scratch[0:l] - } else { - scratch = make([]byte, l) - } - base64.StdEncoding.Encode(scratch, r.Data) - _, err = w.Write(scratch) - if err != nil { - return scratch, err - } - _, err = w.WriteString(`"}`) - return scratch, err -} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go deleted file mode 100644 index 726974ab..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package msgp - -import ( - "bytes" - "encoding/json" - "testing" - "time" -) - -func TestUnmarshalJSON(t *testing.T) { - var buf bytes.Buffer - enc := NewWriter(&buf) - enc.WriteMapHeader(5) - - enc.WriteString("thing_1") - enc.WriteString("a string object") - - enc.WriteString("a_map") - enc.WriteMapHeader(2) - - // INNER - enc.WriteString("cmplx") - enc.WriteComplex64(complex(1.0, 1.0)) - enc.WriteString("int_b") - enc.WriteInt64(-100) - - enc.WriteString("an extension") - enc.WriteExtension(&RawExtension{Type: 1, Data: []byte("blaaahhh")}) - - enc.WriteString("some bytes") - enc.WriteBytes([]byte("here are some bytes")) - - enc.WriteString("now") - enc.WriteTime(time.Now()) - - enc.Flush() - - var js bytes.Buffer - _, err := UnmarshalAsJSON(&js, buf.Bytes()) - if err != nil { - t.Logf("%s", js.Bytes()) - t.Fatal(err) - } - mp := make(map[string]interface{}) - err = json.Unmarshal(js.Bytes(), &mp) - if err != nil { - t.Log(js.String()) - t.Fatalf("Error unmarshaling: %s", err) - } - - if len(mp) != 5 { - t.Errorf("map length should be %d, not %d", 5, len(mp)) - } - - so, ok := mp["thing_1"] - if !ok || so != "a string object" { - t.Errorf("expected %q; got %q", "a string object", so) - } - - if _, ok := mp["now"]; !ok { - t.Error(`"now" field doesn't exist`) - } - - c, ok := mp["a_map"] - if !ok { - t.Error(`"a_map" field doesn't exist`) - } else { - if m, ok := c.(map[string]interface{}); ok { - if _, ok := m["cmplx"]; !ok { - t.Error(`"a_map.cmplx" doesn't exist`) - } - } else { - t.Error(`can't type-assert "c" to map[string]interface{}`) - } - - } - - t.Logf("JSON: %s", js.Bytes()) -} - -func BenchmarkUnmarshalAsJSON(b *testing.B) { - var buf bytes.Buffer - enc := NewWriter(&buf) - enc.WriteMapHeader(4) - - enc.WriteString("thing_1") - enc.WriteString("a string object") - - enc.WriteString("a_first_map") - enc.WriteMapHeader(2) - enc.WriteString("float_a") - enc.WriteFloat32(1.0) - enc.WriteString("int_b") - enc.WriteInt64(-100) - - enc.WriteString("an array") - enc.WriteArrayHeader(2) - enc.WriteBool(true) - enc.WriteUint(2089) - - enc.WriteString("a_second_map") - enc.WriteMapStrStr(map[string]string{ - "internal_one": "blah", - "internal_two": "blahhh...", - }) - enc.Flush() - - var js bytes.Buffer - bts := buf.Bytes() - _, err := UnmarshalAsJSON(&js, bts) - if err != nil { - b.Fatal(err) - } - b.SetBytes(int64(len(js.Bytes()))) - b.ResetTimer() - b.ReportAllocs() - for i := 0; i < b.N; i++ { - js.Reset() - UnmarshalAsJSON(&js, bts) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_test.go b/vendor/github.com/tinylib/msgp/msgp/json_test.go deleted file mode 100644 index 439d4790..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/json_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package msgp - -import ( - "bytes" - "encoding/json" - "reflect" - "testing" -) - -func TestCopyJSON(t *testing.T) { - var buf bytes.Buffer - enc := NewWriter(&buf) - enc.WriteMapHeader(5) - - enc.WriteString("thing_1") - enc.WriteString("a string object") - - enc.WriteString("a_map") - enc.WriteMapHeader(2) - enc.WriteString("float_a") - enc.WriteFloat32(1.0) - enc.WriteString("int_b") - enc.WriteInt64(-100) - - enc.WriteString("some bytes") - enc.WriteBytes([]byte("here are some bytes")) - enc.WriteString("a bool") - enc.WriteBool(true) - - enc.WriteString("a map") - enc.WriteMapStrStr(map[string]string{ - "internal_one": "blah", - "internal_two": "blahhh...", - }) - enc.Flush() - - var js bytes.Buffer - _, err := CopyToJSON(&js, &buf) - if err != nil { - t.Fatal(err) - } - mp := make(map[string]interface{}) - err = json.Unmarshal(js.Bytes(), &mp) - if err != nil { - t.Log(js.String()) - t.Fatalf("Error unmarshaling: %s", err) - } - - if len(mp) != 5 { - t.Errorf("map length should be %d, not %d", 4, len(mp)) - } - - so, ok := mp["thing_1"] - if !ok || so != "a string object" { - t.Errorf("expected %q; got %q", "a string object", so) - } - - in, ok := mp["a map"] - if !ok { - t.Error("no key 'a map'") - } - if inm, ok := in.(map[string]interface{}); !ok { - t.Error("inner map not type-assertable to map[string]interface{}") - } else { - inm1, ok := inm["internal_one"] - if !ok || !reflect.DeepEqual(inm1, "blah") { - t.Errorf("inner map field %q should be %q, not %q", "internal_one", "blah", inm1) - } - } -} - -func BenchmarkCopyToJSON(b *testing.B) { - var buf bytes.Buffer - enc := NewWriter(&buf) - enc.WriteMapHeader(4) - - enc.WriteString("thing_1") - enc.WriteString("a string object") - - enc.WriteString("a_first_map") - enc.WriteMapHeader(2) - enc.WriteString("float_a") - enc.WriteFloat32(1.0) - enc.WriteString("int_b") - enc.WriteInt64(-100) - - enc.WriteString("an array") - enc.WriteArrayHeader(2) - enc.WriteBool(true) - enc.WriteUint(2089) - - enc.WriteString("a_second_map") - enc.WriteMapStrStr(map[string]string{ - "internal_one": "blah", - "internal_two": "blahhh...", - }) - enc.Flush() - - var js bytes.Buffer - bts := buf.Bytes() - _, err := CopyToJSON(&js, &buf) - if err != nil { - b.Fatal(err) - } - b.SetBytes(int64(len(js.Bytes()))) - b.ResetTimer() - b.ReportAllocs() - for i := 0; i < b.N; i++ { - js.Reset() - CopyToJSON(&js, bytes.NewReader(bts)) - } -} - -func BenchmarkStdlibJSON(b *testing.B) { - obj := map[string]interface{}{ - "thing_1": "a string object", - "a_first_map": map[string]interface{}{ - "float_a": float32(1.0), - "float_b": -100, - }, - "an array": []interface{}{ - "part_A", - "part_B", - }, - "a_second_map": map[string]interface{}{ - "internal_one": "blah", - "internal_two": "blahhh...", - }, - } - var js bytes.Buffer - err := json.NewEncoder(&js).Encode(&obj) - if err != nil { - b.Fatal(err) - } - b.SetBytes(int64(len(js.Bytes()))) - b.ResetTimer() - b.ReportAllocs() - for i := 0; i < b.N; i++ { - js.Reset() - json.NewEncoder(&js).Encode(&obj) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/number.go b/vendor/github.com/tinylib/msgp/msgp/number.go deleted file mode 100644 index ad07ef99..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/number.go +++ /dev/null @@ -1,267 +0,0 @@ -package msgp - -import ( - "math" - "strconv" -) - -// The portable parts of the Number implementation - -// Number can be -// an int64, uint64, float32, -// or float64 internally. -// It can decode itself -// from any of the native -// messagepack number types. -// The zero-value of Number -// is Int(0). Using the equality -// operator with Number compares -// both the type and the value -// of the number. -type Number struct { - // internally, this - // is just a tagged union. - // the raw bits of the number - // are stored the same way regardless. - bits uint64 - typ Type -} - -// AsInt sets the number to an int64. -func (n *Number) AsInt(i int64) { - - // we always store int(0) - // as {0, InvalidType} in - // order to preserve - // the behavior of the == operator - if i == 0 { - n.typ = InvalidType - n.bits = 0 - return - } - - n.typ = IntType - n.bits = uint64(i) -} - -// AsUint sets the number to a uint64. -func (n *Number) AsUint(u uint64) { - n.typ = UintType - n.bits = u -} - -// AsFloat32 sets the value of the number -// to a float32. -func (n *Number) AsFloat32(f float32) { - n.typ = Float32Type - n.bits = uint64(math.Float32bits(f)) -} - -// AsFloat64 sets the value of the -// number to a float64. -func (n *Number) AsFloat64(f float64) { - n.typ = Float64Type - n.bits = math.Float64bits(f) -} - -// Int casts the number as an int64, and -// returns whether or not that was the -// underlying type. -func (n *Number) Int() (int64, bool) { - return int64(n.bits), n.typ == IntType || n.typ == InvalidType -} - -// Uint casts the number as a uint64, and returns -// whether or not that was the underlying type. -func (n *Number) Uint() (uint64, bool) { - return n.bits, n.typ == UintType -} - -// Float casts the number to a float64, and -// returns whether or not that was the underlying -// type (either a float64 or a float32). -func (n *Number) Float() (float64, bool) { - switch n.typ { - case Float32Type: - return float64(math.Float32frombits(uint32(n.bits))), true - case Float64Type: - return math.Float64frombits(n.bits), true - default: - return 0.0, false - } -} - -// Type will return one of: -// Float64Type, Float32Type, UintType, or IntType. -func (n *Number) Type() Type { - if n.typ == InvalidType { - return IntType - } - return n.typ -} - -// DecodeMsg implements msgp.Decodable -func (n *Number) DecodeMsg(r *Reader) error { - typ, err := r.NextType() - if err != nil { - return err - } - switch typ { - case Float32Type: - f, err := r.ReadFloat32() - if err != nil { - return err - } - n.AsFloat32(f) - return nil - case Float64Type: - f, err := r.ReadFloat64() - if err != nil { - return err - } - n.AsFloat64(f) - return nil - case IntType: - i, err := r.ReadInt64() - if err != nil { - return err - } - n.AsInt(i) - return nil - case UintType: - u, err := r.ReadUint64() - if err != nil { - return err - } - n.AsUint(u) - return nil - default: - return TypeError{Encoded: typ, Method: IntType} - } -} - -// UnmarshalMsg implements msgp.Unmarshaler -func (n *Number) UnmarshalMsg(b []byte) ([]byte, error) { - typ := NextType(b) - switch typ { - case IntType: - i, o, err := ReadInt64Bytes(b) - if err != nil { - return b, err - } - n.AsInt(i) - return o, nil - case UintType: - u, o, err := ReadUint64Bytes(b) - if err != nil { - return b, err - } - n.AsUint(u) - return o, nil - case Float64Type: - f, o, err := ReadFloat64Bytes(b) - if err != nil { - return b, err - } - n.AsFloat64(f) - return o, nil - case Float32Type: - f, o, err := ReadFloat32Bytes(b) - if err != nil { - return b, err - } - n.AsFloat32(f) - return o, nil - default: - return b, TypeError{Method: IntType, Encoded: typ} - } -} - -// MarshalMsg implements msgp.Marshaler -func (n *Number) MarshalMsg(b []byte) ([]byte, error) { - switch n.typ { - case IntType: - return AppendInt64(b, int64(n.bits)), nil - case UintType: - return AppendUint64(b, uint64(n.bits)), nil - case Float64Type: - return AppendFloat64(b, math.Float64frombits(n.bits)), nil - case Float32Type: - return AppendFloat32(b, math.Float32frombits(uint32(n.bits))), nil - default: - return AppendInt64(b, 0), nil - } -} - -// EncodeMsg implements msgp.Encodable -func (n *Number) EncodeMsg(w *Writer) error { - switch n.typ { - case IntType: - return w.WriteInt64(int64(n.bits)) - case UintType: - return w.WriteUint64(n.bits) - case Float64Type: - return w.WriteFloat64(math.Float64frombits(n.bits)) - case Float32Type: - return w.WriteFloat32(math.Float32frombits(uint32(n.bits))) - default: - return w.WriteInt64(0) - } -} - -// Msgsize implements msgp.Sizer -func (n *Number) Msgsize() int { - switch n.typ { - case Float32Type: - return Float32Size - case Float64Type: - return Float64Size - case IntType: - return Int64Size - case UintType: - return Uint64Size - default: - return 1 // fixint(0) - } -} - -// MarshalJSON implements json.Marshaler -func (n *Number) MarshalJSON() ([]byte, error) { - t := n.Type() - if t == InvalidType { - return []byte{'0'}, nil - } - out := make([]byte, 0, 32) - switch t { - case Float32Type, Float64Type: - f, _ := n.Float() - return strconv.AppendFloat(out, f, 'f', -1, 64), nil - case IntType: - i, _ := n.Int() - return strconv.AppendInt(out, i, 10), nil - case UintType: - u, _ := n.Uint() - return strconv.AppendUint(out, u, 10), nil - default: - panic("(*Number).typ is invalid") - } -} - -// String implements fmt.Stringer -func (n *Number) String() string { - switch n.typ { - case InvalidType: - return "0" - case Float32Type, Float64Type: - f, _ := n.Float() - return strconv.FormatFloat(f, 'f', -1, 64) - case IntType: - i, _ := n.Int() - return strconv.FormatInt(i, 10) - case UintType: - u, _ := n.Uint() - return strconv.FormatUint(u, 10) - default: - panic("(*Number).typ is invalid") - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/number_test.go b/vendor/github.com/tinylib/msgp/msgp/number_test.go deleted file mode 100644 index 3490647c..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/number_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package msgp - -import ( - "bytes" - "testing" -) - -func TestNumber(t *testing.T) { - - n := Number{} - - if n.Type() != IntType { - t.Errorf("expected zero-value type to be %s; got %s", IntType, n.Type()) - } - - if n.String() != "0" { - t.Errorf("expected Number{}.String() to be \"0\" but got %q", n.String()) - } - - n.AsInt(248) - i, ok := n.Int() - if !ok || i != 248 || n.Type() != IntType || n.String() != "248" { - t.Errorf("%d in; %d out!", 248, i) - } - - n.AsFloat64(3.141) - f, ok := n.Float() - if !ok || f != 3.141 || n.Type() != Float64Type || n.String() != "3.141" { - t.Errorf("%f in; %f out!", 3.141, f) - } - - n.AsUint(40000) - u, ok := n.Uint() - if !ok || u != 40000 || n.Type() != UintType || n.String() != "40000" { - t.Errorf("%d in; %d out!", 40000, u) - } - - nums := []interface{}{ - float64(3.14159), - int64(-29081), - uint64(90821983), - float32(3.141), - } - - var dat []byte - var buf bytes.Buffer - wr := NewWriter(&buf) - for _, n := range nums { - dat, _ = AppendIntf(dat, n) - wr.WriteIntf(n) - } - wr.Flush() - - mout := make([]Number, len(nums)) - dout := make([]Number, len(nums)) - - rd := NewReader(&buf) - unm := dat - for i := range nums { - var err error - unm, err = mout[i].UnmarshalMsg(unm) - if err != nil { - t.Fatal("unmarshal error:", err) - } - err = dout[i].DecodeMsg(rd) - if err != nil { - t.Fatal("decode error:", err) - } - if mout[i] != dout[i] { - t.Errorf("for %#v, got %#v from unmarshal and %#v from decode", nums[i], mout[i], dout[i]) - } - } - - buf.Reset() - var odat []byte - for i := range nums { - var err error - odat, err = mout[i].MarshalMsg(odat) - if err != nil { - t.Fatal("marshal error:", err) - } - err = dout[i].EncodeMsg(wr) - } - wr.Flush() - - if !bytes.Equal(dat, odat) { - t.Errorf("marshal: expected output %#v; got %#v", dat, odat) - } - - if !bytes.Equal(dat, buf.Bytes()) { - t.Errorf("encode: expected output %#v; got %#v", dat, buf.Bytes()) - } - -} diff --git a/vendor/github.com/tinylib/msgp/msgp/raw_test.go b/vendor/github.com/tinylib/msgp/msgp/raw_test.go deleted file mode 100644 index 9f3321f4..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/raw_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package msgp - -import ( - "bytes" - "testing" - "time" -) - -// all standard interfaces -type allifaces interface { - Encodable - Decodable - Marshaler - Unmarshaler - Sizer -} - -func TestRaw(t *testing.T) { - bts := make([]byte, 0, 512) - bts = AppendMapHeader(bts, 3) - bts = AppendString(bts, "key_one") - bts = AppendFloat64(bts, -1.0) - bts = AppendString(bts, "key_two") - bts = AppendString(bts, "value_two") - bts = AppendString(bts, "key_three") - bts = AppendTime(bts, time.Now()) - - var r Raw - - // verify that Raw satisfies - // the interfaces we want it to - var _ allifaces = &r - - // READ TESTS - - extra, err := r.UnmarshalMsg(bts) - if err != nil { - t.Fatal("error from UnmarshalMsg:", err) - } - if len(extra) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(extra)) - } - if !bytes.Equal([]byte(r), bts) { - t.Fatal("value of raw and input slice are not equal after UnmarshalMsg") - } - - r = r[:0] - - var buf bytes.Buffer - buf.Write(bts) - - rd := NewReader(&buf) - - err = r.DecodeMsg(rd) - if err != nil { - t.Fatal("error from DecodeMsg:", err) - } - - if !bytes.Equal([]byte(r), bts) { - t.Fatal("value of raw and input slice are not equal after DecodeMsg") - } - - // WRITE TESTS - - buf.Reset() - wr := NewWriter(&buf) - err = r.EncodeMsg(wr) - if err != nil { - t.Fatal("error from EncodeMsg:", err) - } - - wr.Flush() - if !bytes.Equal(buf.Bytes(), bts) { - t.Fatal("value of buf.Bytes() and input slice are not equal after EncodeMsg") - } - - var outsl []byte - outsl, err = r.MarshalMsg(outsl) - if err != nil { - t.Fatal("error from MarshalMsg:", err) - } - if !bytes.Equal(outsl, bts) { - t.Fatal("value of output and input of MarshalMsg are not equal.") - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/read.go b/vendor/github.com/tinylib/msgp/msgp/read.go deleted file mode 100644 index 20cd1ef8..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/read.go +++ /dev/null @@ -1,1265 +0,0 @@ -package msgp - -import ( - "io" - "math" - "sync" - "time" - - "github.com/philhofer/fwd" -) - -// where we keep old *Readers -var readerPool = sync.Pool{New: func() interface{} { return &Reader{} }} - -// Type is a MessagePack wire type, -// including this package's built-in -// extension types. -type Type byte - -// MessagePack Types -// -// The zero value of Type -// is InvalidType. -const ( - InvalidType Type = iota - - // MessagePack built-in types - - StrType - BinType - MapType - ArrayType - Float64Type - Float32Type - BoolType - IntType - UintType - NilType - ExtensionType - - // pseudo-types provided - // by extensions - - Complex64Type - Complex128Type - TimeType - - _maxtype -) - -// String implements fmt.Stringer -func (t Type) String() string { - switch t { - case StrType: - return "str" - case BinType: - return "bin" - case MapType: - return "map" - case ArrayType: - return "array" - case Float64Type: - return "float64" - case Float32Type: - return "float32" - case BoolType: - return "bool" - case UintType: - return "uint" - case IntType: - return "int" - case ExtensionType: - return "ext" - case NilType: - return "nil" - default: - return "" - } -} - -func freeR(m *Reader) { - readerPool.Put(m) -} - -// Unmarshaler is the interface fulfilled -// by objects that know how to unmarshal -// themselves from MessagePack. -// UnmarshalMsg unmarshals the object -// from binary, returing any leftover -// bytes and any errors encountered. -type Unmarshaler interface { - UnmarshalMsg([]byte) ([]byte, error) -} - -// Decodable is the interface fulfilled -// by objects that know how to read -// themselves from a *Reader. -type Decodable interface { - DecodeMsg(*Reader) error -} - -// Decode decodes 'd' from 'r'. -func Decode(r io.Reader, d Decodable) error { - rd := NewReader(r) - err := d.DecodeMsg(rd) - freeR(rd) - return err -} - -// NewReader returns a *Reader that -// reads from the provided reader. The -// reader will be buffered. -func NewReader(r io.Reader) *Reader { - p := readerPool.Get().(*Reader) - if p.R == nil { - p.R = fwd.NewReader(r) - } else { - p.R.Reset(r) - } - return p -} - -// NewReaderSize returns a *Reader with a buffer of the given size. -// (This is vastly preferable to passing the decoder a reader that is already buffered.) -func NewReaderSize(r io.Reader, sz int) *Reader { - return &Reader{R: fwd.NewReaderSize(r, sz)} -} - -// Reader wraps an io.Reader and provides -// methods to read MessagePack-encoded values -// from it. Readers are buffered. -type Reader struct { - // R is the buffered reader - // that the Reader uses - // to decode MessagePack. - // The Reader itself - // is stateless; all the - // buffering is done - // within R. - R *fwd.Reader - scratch []byte -} - -// Read implements `io.Reader` -func (m *Reader) Read(p []byte) (int, error) { - return m.R.Read(p) -} - -// CopyNext reads the next object from m without decoding it and writes it to w. -// It avoids unnecessary copies internally. -func (m *Reader) CopyNext(w io.Writer) (int64, error) { - sz, o, err := getNextSize(m.R) - if err != nil { - return 0, err - } - - var n int64 - // Opportunistic optimization: if we can fit the whole thing in the m.R - // buffer, then just get a pointer to that, and pass it to w.Write, - // avoiding an allocation. - if int(sz) <= m.R.BufferSize() { - var nn int - var buf []byte - buf, err = m.R.Next(int(sz)) - if err != nil { - if err == io.ErrUnexpectedEOF { - err = ErrShortBytes - } - return 0, err - } - nn, err = w.Write(buf) - n += int64(nn) - } else { - // Fall back to io.CopyN. - // May avoid allocating if w is a ReaderFrom (e.g. bytes.Buffer) - n, err = io.CopyN(w, m.R, int64(sz)) - if err == io.ErrUnexpectedEOF { - err = ErrShortBytes - } - } - if err != nil { - return n, err - } else if n < int64(sz) { - return n, io.ErrShortWrite - } - - // for maps and slices, read elements - for x := uintptr(0); x < o; x++ { - var n2 int64 - n2, err = m.CopyNext(w) - if err != nil { - return n, err - } - n += n2 - } - return n, nil -} - -// ReadFull implements `io.ReadFull` -func (m *Reader) ReadFull(p []byte) (int, error) { - return m.R.ReadFull(p) -} - -// Reset resets the underlying reader. -func (m *Reader) Reset(r io.Reader) { m.R.Reset(r) } - -// Buffered returns the number of bytes currently in the read buffer. -func (m *Reader) Buffered() int { return m.R.Buffered() } - -// BufferSize returns the capacity of the read buffer. -func (m *Reader) BufferSize() int { return m.R.BufferSize() } - -// NextType returns the next object type to be decoded. -func (m *Reader) NextType() (Type, error) { - p, err := m.R.Peek(1) - if err != nil { - return InvalidType, err - } - t := getType(p[0]) - if t == InvalidType { - return t, InvalidPrefixError(p[0]) - } - if t == ExtensionType { - v, err := m.peekExtensionType() - if err != nil { - return InvalidType, err - } - switch v { - case Complex64Extension: - return Complex64Type, nil - case Complex128Extension: - return Complex128Type, nil - case TimeExtension: - return TimeType, nil - } - } - return t, nil -} - -// IsNil returns whether or not -// the next byte is a null messagepack byte -func (m *Reader) IsNil() bool { - p, err := m.R.Peek(1) - return err == nil && p[0] == mnil -} - -// getNextSize returns the size of the next object on the wire. -// returns (obj size, obj elements, error) -// only maps and arrays have non-zero obj elements -// for maps and arrays, obj size does not include elements -// -// use uintptr b/c it's guaranteed to be large enough -// to hold whatever we can fit in memory. -func getNextSize(r *fwd.Reader) (uintptr, uintptr, error) { - b, err := r.Peek(1) - if err != nil { - return 0, 0, err - } - lead := b[0] - spec := &sizes[lead] - size, mode := spec.size, spec.extra - if size == 0 { - return 0, 0, InvalidPrefixError(lead) - } - if mode >= 0 { - return uintptr(size), uintptr(mode), nil - } - b, err = r.Peek(int(size)) - if err != nil { - return 0, 0, err - } - switch mode { - case extra8: - return uintptr(size) + uintptr(b[1]), 0, nil - case extra16: - return uintptr(size) + uintptr(big.Uint16(b[1:])), 0, nil - case extra32: - return uintptr(size) + uintptr(big.Uint32(b[1:])), 0, nil - case map16v: - return uintptr(size), 2 * uintptr(big.Uint16(b[1:])), nil - case map32v: - return uintptr(size), 2 * uintptr(big.Uint32(b[1:])), nil - case array16v: - return uintptr(size), uintptr(big.Uint16(b[1:])), nil - case array32v: - return uintptr(size), uintptr(big.Uint32(b[1:])), nil - default: - return 0, 0, fatal - } -} - -// Skip skips over the next object, regardless of -// its type. If it is an array or map, the whole array -// or map will be skipped. -func (m *Reader) Skip() error { - var ( - v uintptr // bytes - o uintptr // objects - err error - p []byte - ) - - // we can use the faster - // method if we have enough - // buffered data - if m.R.Buffered() >= 5 { - p, err = m.R.Peek(5) - if err != nil { - return err - } - v, o, err = getSize(p) - if err != nil { - return err - } - } else { - v, o, err = getNextSize(m.R) - if err != nil { - return err - } - } - - // 'v' is always non-zero - // if err == nil - _, err = m.R.Skip(int(v)) - if err != nil { - return err - } - - // for maps and slices, skip elements - for x := uintptr(0); x < o; x++ { - err = m.Skip() - if err != nil { - return err - } - } - return nil -} - -// ReadMapHeader reads the next object -// as a map header and returns the size -// of the map and the number of bytes written. -// It will return a TypeError{} if the next -// object is not a map. -func (m *Reader) ReadMapHeader() (sz uint32, err error) { - var p []byte - var lead byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - if isfixmap(lead) { - sz = uint32(rfixmap(lead)) - _, err = m.R.Skip(1) - return - } - switch lead { - case mmap16: - p, err = m.R.Next(3) - if err != nil { - return - } - sz = uint32(big.Uint16(p[1:])) - return - case mmap32: - p, err = m.R.Next(5) - if err != nil { - return - } - sz = big.Uint32(p[1:]) - return - default: - err = badPrefix(MapType, lead) - return - } -} - -// ReadMapKey reads either a 'str' or 'bin' field from -// the reader and returns the value as a []byte. It uses -// scratch for storage if it is large enough. -func (m *Reader) ReadMapKey(scratch []byte) ([]byte, error) { - out, err := m.ReadStringAsBytes(scratch) - if err != nil { - if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { - return m.ReadBytes(scratch) - } - return nil, err - } - return out, nil -} - -// MapKeyPtr returns a []byte pointing to the contents -// of a valid map key. The key cannot be empty, and it -// must be shorter than the total buffer size of the -// *Reader. Additionally, the returned slice is only -// valid until the next *Reader method call. Users -// should exercise extreme care when using this -// method; writing into the returned slice may -// corrupt future reads. -func (m *Reader) ReadMapKeyPtr() ([]byte, error) { - p, err := m.R.Peek(1) - if err != nil { - return nil, err - } - lead := p[0] - var read int - if isfixstr(lead) { - read = int(rfixstr(lead)) - m.R.Skip(1) - goto fill - } - switch lead { - case mstr8, mbin8: - p, err = m.R.Next(2) - if err != nil { - return nil, err - } - read = int(p[1]) - case mstr16, mbin16: - p, err = m.R.Next(3) - if err != nil { - return nil, err - } - read = int(big.Uint16(p[1:])) - case mstr32, mbin32: - p, err = m.R.Next(5) - if err != nil { - return nil, err - } - read = int(big.Uint32(p[1:])) - default: - return nil, badPrefix(StrType, lead) - } -fill: - if read == 0 { - return nil, ErrShortBytes - } - return m.R.Next(read) -} - -// ReadArrayHeader reads the next object as an -// array header and returns the size of the array -// and the number of bytes read. -func (m *Reader) ReadArrayHeader() (sz uint32, err error) { - var lead byte - var p []byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - if isfixarray(lead) { - sz = uint32(rfixarray(lead)) - _, err = m.R.Skip(1) - return - } - switch lead { - case marray16: - p, err = m.R.Next(3) - if err != nil { - return - } - sz = uint32(big.Uint16(p[1:])) - return - - case marray32: - p, err = m.R.Next(5) - if err != nil { - return - } - sz = big.Uint32(p[1:]) - return - - default: - err = badPrefix(ArrayType, lead) - return - } -} - -// ReadNil reads a 'nil' MessagePack byte from the reader -func (m *Reader) ReadNil() error { - p, err := m.R.Peek(1) - if err != nil { - return err - } - if p[0] != mnil { - return badPrefix(NilType, p[0]) - } - _, err = m.R.Skip(1) - return err -} - -// ReadFloat64 reads a float64 from the reader. -// (If the value on the wire is encoded as a float32, -// it will be up-cast to a float64.) -func (m *Reader) ReadFloat64() (f float64, err error) { - var p []byte - p, err = m.R.Peek(9) - if err != nil { - // we'll allow a coversion from float32 to float64, - // since we don't lose any precision - if err == io.EOF && len(p) > 0 && p[0] == mfloat32 { - ef, err := m.ReadFloat32() - return float64(ef), err - } - return - } - if p[0] != mfloat64 { - // see above - if p[0] == mfloat32 { - ef, err := m.ReadFloat32() - return float64(ef), err - } - err = badPrefix(Float64Type, p[0]) - return - } - f = math.Float64frombits(getMuint64(p)) - _, err = m.R.Skip(9) - return -} - -// ReadFloat32 reads a float32 from the reader -func (m *Reader) ReadFloat32() (f float32, err error) { - var p []byte - p, err = m.R.Peek(5) - if err != nil { - return - } - if p[0] != mfloat32 { - err = badPrefix(Float32Type, p[0]) - return - } - f = math.Float32frombits(getMuint32(p)) - _, err = m.R.Skip(5) - return -} - -// ReadBool reads a bool from the reader -func (m *Reader) ReadBool() (b bool, err error) { - var p []byte - p, err = m.R.Peek(1) - if err != nil { - return - } - switch p[0] { - case mtrue: - b = true - case mfalse: - default: - err = badPrefix(BoolType, p[0]) - return - } - _, err = m.R.Skip(1) - return -} - -// ReadInt64 reads an int64 from the reader -func (m *Reader) ReadInt64() (i int64, err error) { - var p []byte - var lead byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - - if isfixint(lead) { - i = int64(rfixint(lead)) - _, err = m.R.Skip(1) - return - } else if isnfixint(lead) { - i = int64(rnfixint(lead)) - _, err = m.R.Skip(1) - return - } - - switch lead { - case mint8: - p, err = m.R.Next(2) - if err != nil { - return - } - i = int64(getMint8(p)) - return - - case mint16: - p, err = m.R.Next(3) - if err != nil { - return - } - i = int64(getMint16(p)) - return - - case mint32: - p, err = m.R.Next(5) - if err != nil { - return - } - i = int64(getMint32(p)) - return - - case mint64: - p, err = m.R.Next(9) - if err != nil { - return - } - i = getMint64(p) - return - - default: - err = badPrefix(IntType, lead) - return - } -} - -// ReadInt32 reads an int32 from the reader -func (m *Reader) ReadInt32() (i int32, err error) { - var in int64 - in, err = m.ReadInt64() - if in > math.MaxInt32 || in < math.MinInt32 { - err = IntOverflow{Value: in, FailedBitsize: 32} - return - } - i = int32(in) - return -} - -// ReadInt16 reads an int16 from the reader -func (m *Reader) ReadInt16() (i int16, err error) { - var in int64 - in, err = m.ReadInt64() - if in > math.MaxInt16 || in < math.MinInt16 { - err = IntOverflow{Value: in, FailedBitsize: 16} - return - } - i = int16(in) - return -} - -// ReadInt8 reads an int8 from the reader -func (m *Reader) ReadInt8() (i int8, err error) { - var in int64 - in, err = m.ReadInt64() - if in > math.MaxInt8 || in < math.MinInt8 { - err = IntOverflow{Value: in, FailedBitsize: 8} - return - } - i = int8(in) - return -} - -// ReadInt reads an int from the reader -func (m *Reader) ReadInt() (i int, err error) { - if smallint { - var in int32 - in, err = m.ReadInt32() - i = int(in) - return - } - var in int64 - in, err = m.ReadInt64() - i = int(in) - return -} - -// ReadUint64 reads a uint64 from the reader -func (m *Reader) ReadUint64() (u uint64, err error) { - var p []byte - var lead byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - if isfixint(lead) { - u = uint64(rfixint(lead)) - _, err = m.R.Skip(1) - return - } - switch lead { - case muint8: - p, err = m.R.Next(2) - if err != nil { - return - } - u = uint64(getMuint8(p)) - return - - case muint16: - p, err = m.R.Next(3) - if err != nil { - return - } - u = uint64(getMuint16(p)) - return - - case muint32: - p, err = m.R.Next(5) - if err != nil { - return - } - u = uint64(getMuint32(p)) - return - - case muint64: - p, err = m.R.Next(9) - if err != nil { - return - } - u = getMuint64(p) - return - - default: - err = badPrefix(UintType, lead) - return - - } -} - -// ReadUint32 reads a uint32 from the reader -func (m *Reader) ReadUint32() (u uint32, err error) { - var in uint64 - in, err = m.ReadUint64() - if in > math.MaxUint32 { - err = UintOverflow{Value: in, FailedBitsize: 32} - return - } - u = uint32(in) - return -} - -// ReadUint16 reads a uint16 from the reader -func (m *Reader) ReadUint16() (u uint16, err error) { - var in uint64 - in, err = m.ReadUint64() - if in > math.MaxUint16 { - err = UintOverflow{Value: in, FailedBitsize: 16} - return - } - u = uint16(in) - return -} - -// ReadUint8 reads a uint8 from the reader -func (m *Reader) ReadUint8() (u uint8, err error) { - var in uint64 - in, err = m.ReadUint64() - if in > math.MaxUint8 { - err = UintOverflow{Value: in, FailedBitsize: 8} - return - } - u = uint8(in) - return -} - -// ReadUint reads a uint from the reader -func (m *Reader) ReadUint() (u uint, err error) { - if smallint { - var un uint32 - un, err = m.ReadUint32() - u = uint(un) - return - } - var un uint64 - un, err = m.ReadUint64() - u = uint(un) - return -} - -// ReadByte is analogous to ReadUint8. -// -// NOTE: this is *not* an implementation -// of io.ByteReader. -func (m *Reader) ReadByte() (b byte, err error) { - var in uint64 - in, err = m.ReadUint64() - if in > math.MaxUint8 { - err = UintOverflow{Value: in, FailedBitsize: 8} - return - } - b = byte(in) - return -} - -// ReadBytes reads a MessagePack 'bin' object -// from the reader and returns its value. It may -// use 'scratch' for storage if it is non-nil. -func (m *Reader) ReadBytes(scratch []byte) (b []byte, err error) { - var p []byte - var lead byte - p, err = m.R.Peek(2) - if err != nil { - return - } - lead = p[0] - var read int64 - switch lead { - case mbin8: - read = int64(p[1]) - m.R.Skip(2) - case mbin16: - p, err = m.R.Next(3) - if err != nil { - return - } - read = int64(big.Uint16(p[1:])) - case mbin32: - p, err = m.R.Next(5) - if err != nil { - return - } - read = int64(big.Uint32(p[1:])) - default: - err = badPrefix(BinType, lead) - return - } - if int64(cap(scratch)) < read { - b = make([]byte, read) - } else { - b = scratch[0:read] - } - _, err = m.R.ReadFull(b) - return -} - -// ReadBytesHeader reads the size header -// of a MessagePack 'bin' object. The user -// is responsible for dealing with the next -// 'sz' bytes from the reader in an application-specific -// way. -func (m *Reader) ReadBytesHeader() (sz uint32, err error) { - var p []byte - p, err = m.R.Peek(1) - if err != nil { - return - } - switch p[0] { - case mbin8: - p, err = m.R.Next(2) - if err != nil { - return - } - sz = uint32(p[1]) - return - case mbin16: - p, err = m.R.Next(3) - if err != nil { - return - } - sz = uint32(big.Uint16(p[1:])) - return - case mbin32: - p, err = m.R.Next(5) - if err != nil { - return - } - sz = uint32(big.Uint32(p[1:])) - return - default: - err = badPrefix(BinType, p[0]) - return - } -} - -// ReadExactBytes reads a MessagePack 'bin'-encoded -// object off of the wire into the provided slice. An -// ArrayError will be returned if the object is not -// exactly the length of the input slice. -func (m *Reader) ReadExactBytes(into []byte) error { - p, err := m.R.Peek(2) - if err != nil { - return err - } - lead := p[0] - var read int64 // bytes to read - var skip int // prefix size to skip - switch lead { - case mbin8: - read = int64(p[1]) - skip = 2 - case mbin16: - p, err = m.R.Peek(3) - if err != nil { - return err - } - read = int64(big.Uint16(p[1:])) - skip = 3 - case mbin32: - p, err = m.R.Peek(5) - if err != nil { - return err - } - read = int64(big.Uint32(p[1:])) - skip = 5 - default: - return badPrefix(BinType, lead) - } - if read != int64(len(into)) { - return ArrayError{Wanted: uint32(len(into)), Got: uint32(read)} - } - m.R.Skip(skip) - _, err = m.R.ReadFull(into) - return err -} - -// ReadStringAsBytes reads a MessagePack 'str' (utf-8) string -// and returns its value as bytes. It may use 'scratch' for storage -// if it is non-nil. -func (m *Reader) ReadStringAsBytes(scratch []byte) (b []byte, err error) { - var p []byte - var lead byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - var read int64 - - if isfixstr(lead) { - read = int64(rfixstr(lead)) - m.R.Skip(1) - goto fill - } - - switch lead { - case mstr8: - p, err = m.R.Next(2) - if err != nil { - return - } - read = int64(uint8(p[1])) - case mstr16: - p, err = m.R.Next(3) - if err != nil { - return - } - read = int64(big.Uint16(p[1:])) - case mstr32: - p, err = m.R.Next(5) - if err != nil { - return - } - read = int64(big.Uint32(p[1:])) - default: - err = badPrefix(StrType, lead) - return - } -fill: - if int64(cap(scratch)) < read { - b = make([]byte, read) - } else { - b = scratch[0:read] - } - _, err = m.R.ReadFull(b) - return -} - -// ReadStringHeader reads a string header -// off of the wire. The user is then responsible -// for dealing with the next 'sz' bytes from -// the reader in an application-specific manner. -func (m *Reader) ReadStringHeader() (sz uint32, err error) { - var p []byte - p, err = m.R.Peek(1) - if err != nil { - return - } - lead := p[0] - if isfixstr(lead) { - sz = uint32(rfixstr(lead)) - m.R.Skip(1) - return - } - switch lead { - case mstr8: - p, err = m.R.Next(2) - if err != nil { - return - } - sz = uint32(p[1]) - return - case mstr16: - p, err = m.R.Next(3) - if err != nil { - return - } - sz = uint32(big.Uint16(p[1:])) - return - case mstr32: - p, err = m.R.Next(5) - if err != nil { - return - } - sz = big.Uint32(p[1:]) - return - default: - err = badPrefix(StrType, lead) - return - } -} - -// ReadString reads a utf-8 string from the reader -func (m *Reader) ReadString() (s string, err error) { - var p []byte - var lead byte - var read int64 - p, err = m.R.Peek(1) - if err != nil { - return - } - lead = p[0] - - if isfixstr(lead) { - read = int64(rfixstr(lead)) - m.R.Skip(1) - goto fill - } - - switch lead { - case mstr8: - p, err = m.R.Next(2) - if err != nil { - return - } - read = int64(uint8(p[1])) - case mstr16: - p, err = m.R.Next(3) - if err != nil { - return - } - read = int64(big.Uint16(p[1:])) - case mstr32: - p, err = m.R.Next(5) - if err != nil { - return - } - read = int64(big.Uint32(p[1:])) - default: - err = badPrefix(StrType, lead) - return - } -fill: - if read == 0 { - s, err = "", nil - return - } - // reading into the memory - // that will become the string - // itself has vastly superior - // worst-case performance, because - // the reader buffer doesn't have - // to be large enough to hold the string. - // the idea here is to make it more - // difficult for someone malicious - // to cause the system to run out of - // memory by sending very large strings. - // - // NOTE: this works because the argument - // passed to (*fwd.Reader).ReadFull escapes - // to the heap; its argument may, in turn, - // be passed to the underlying reader, and - // thus escape analysis *must* conclude that - // 'out' escapes. - out := make([]byte, read) - _, err = m.R.ReadFull(out) - if err != nil { - return - } - s = UnsafeString(out) - return -} - -// ReadComplex64 reads a complex64 from the reader -func (m *Reader) ReadComplex64() (f complex64, err error) { - var p []byte - p, err = m.R.Peek(10) - if err != nil { - return - } - if p[0] != mfixext8 { - err = badPrefix(Complex64Type, p[0]) - return - } - if int8(p[1]) != Complex64Extension { - err = errExt(int8(p[1]), Complex64Extension) - return - } - f = complex(math.Float32frombits(big.Uint32(p[2:])), - math.Float32frombits(big.Uint32(p[6:]))) - _, err = m.R.Skip(10) - return -} - -// ReadComplex128 reads a complex128 from the reader -func (m *Reader) ReadComplex128() (f complex128, err error) { - var p []byte - p, err = m.R.Peek(18) - if err != nil { - return - } - if p[0] != mfixext16 { - err = badPrefix(Complex128Type, p[0]) - return - } - if int8(p[1]) != Complex128Extension { - err = errExt(int8(p[1]), Complex128Extension) - return - } - f = complex(math.Float64frombits(big.Uint64(p[2:])), - math.Float64frombits(big.Uint64(p[10:]))) - _, err = m.R.Skip(18) - return -} - -// ReadMapStrIntf reads a MessagePack map into a map[string]interface{}. -// (You must pass a non-nil map into the function.) -func (m *Reader) ReadMapStrIntf(mp map[string]interface{}) (err error) { - var sz uint32 - sz, err = m.ReadMapHeader() - if err != nil { - return - } - for key := range mp { - delete(mp, key) - } - for i := uint32(0); i < sz; i++ { - var key string - var val interface{} - key, err = m.ReadString() - if err != nil { - return - } - val, err = m.ReadIntf() - if err != nil { - return - } - mp[key] = val - } - return -} - -// ReadTime reads a time.Time object from the reader. -// The returned time's location will be set to time.Local. -func (m *Reader) ReadTime() (t time.Time, err error) { - var p []byte - p, err = m.R.Peek(15) - if err != nil { - return - } - if p[0] != mext8 || p[1] != 12 { - err = badPrefix(TimeType, p[0]) - return - } - if int8(p[2]) != TimeExtension { - err = errExt(int8(p[2]), TimeExtension) - return - } - sec, nsec := getUnix(p[3:]) - t = time.Unix(sec, int64(nsec)).Local() - _, err = m.R.Skip(15) - return -} - -// ReadIntf reads out the next object as a raw interface{}. -// Arrays are decoded as []interface{}, and maps are decoded -// as map[string]interface{}. Integers are decoded as int64 -// and unsigned integers are decoded as uint64. -func (m *Reader) ReadIntf() (i interface{}, err error) { - var t Type - t, err = m.NextType() - if err != nil { - return - } - switch t { - case BoolType: - i, err = m.ReadBool() - return - - case IntType: - i, err = m.ReadInt64() - return - - case UintType: - i, err = m.ReadUint64() - return - - case BinType: - i, err = m.ReadBytes(nil) - return - - case StrType: - i, err = m.ReadString() - return - - case Complex64Type: - i, err = m.ReadComplex64() - return - - case Complex128Type: - i, err = m.ReadComplex128() - return - - case TimeType: - i, err = m.ReadTime() - return - - case ExtensionType: - var t int8 - t, err = m.peekExtensionType() - if err != nil { - return - } - f, ok := extensionReg[t] - if ok { - e := f() - err = m.ReadExtension(e) - i = e - return - } - var e RawExtension - e.Type = t - err = m.ReadExtension(&e) - i = &e - return - - case MapType: - mp := make(map[string]interface{}) - err = m.ReadMapStrIntf(mp) - i = mp - return - - case NilType: - err = m.ReadNil() - i = nil - return - - case Float32Type: - i, err = m.ReadFloat32() - return - - case Float64Type: - i, err = m.ReadFloat64() - return - - case ArrayType: - var sz uint32 - sz, err = m.ReadArrayHeader() - - if err != nil { - return - } - out := make([]interface{}, int(sz)) - for j := range out { - out[j], err = m.ReadIntf() - if err != nil { - return - } - } - i = out - return - - default: - return nil, fatal // unreachable - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_bytes.go b/vendor/github.com/tinylib/msgp/msgp/read_bytes.go deleted file mode 100644 index 78e466fc..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/read_bytes.go +++ /dev/null @@ -1,1089 +0,0 @@ -package msgp - -import ( - "bytes" - "encoding/binary" - "math" - "time" -) - -var big = binary.BigEndian - -// NextType returns the type of the next -// object in the slice. If the length -// of the input is zero, it returns -// InvalidType. -func NextType(b []byte) Type { - if len(b) == 0 { - return InvalidType - } - spec := sizes[b[0]] - t := spec.typ - if t == ExtensionType && len(b) > int(spec.size) { - var tp int8 - if spec.extra == constsize { - tp = int8(b[1]) - } else { - tp = int8(b[spec.size-1]) - } - switch tp { - case TimeExtension: - return TimeType - case Complex128Extension: - return Complex128Type - case Complex64Extension: - return Complex64Type - default: - return ExtensionType - } - } - return t -} - -// IsNil returns true if len(b)>0 and -// the leading byte is a 'nil' MessagePack -// byte; false otherwise -func IsNil(b []byte) bool { - if len(b) != 0 && b[0] == mnil { - return true - } - return false -} - -// Raw is raw MessagePack. -// Raw allows you to read and write -// data without interpreting its contents. -type Raw []byte - -// MarshalMsg implements msgp.Marshaler. -// It appends the raw contents of 'raw' -// to the provided byte slice. If 'raw' -// is 0 bytes, 'nil' will be appended instead. -func (r Raw) MarshalMsg(b []byte) ([]byte, error) { - i := len(r) - if i == 0 { - return AppendNil(b), nil - } - o, l := ensure(b, i) - copy(o[l:], []byte(r)) - return o, nil -} - -// UnmarshalMsg implements msgp.Unmarshaler. -// It sets the contents of *Raw to be the next -// object in the provided byte slice. -func (r *Raw) UnmarshalMsg(b []byte) ([]byte, error) { - l := len(b) - out, err := Skip(b) - if err != nil { - return b, err - } - rlen := l - len(out) - if cap(*r) < rlen { - *r = make(Raw, rlen) - } else { - *r = (*r)[0:rlen] - } - copy(*r, b[:rlen]) - return out, nil -} - -// EncodeMsg implements msgp.Encodable. -// It writes the raw bytes to the writer. -// If r is empty, it writes 'nil' instead. -func (r Raw) EncodeMsg(w *Writer) error { - if len(r) == 0 { - return w.WriteNil() - } - _, err := w.Write([]byte(r)) - return err -} - -// DecodeMsg implements msgp.Decodable. -// It sets the value of *Raw to be the -// next object on the wire. -func (r *Raw) DecodeMsg(f *Reader) error { - *r = (*r)[:0] - return appendNext(f, (*[]byte)(r)) -} - -// Msgsize implements msgp.Sizer -func (r Raw) Msgsize() int { - l := len(r) - if l == 0 { - return 1 // for 'nil' - } - return l -} - -func appendNext(f *Reader, d *[]byte) error { - amt, o, err := getNextSize(f.R) - if err != nil { - return err - } - var i int - *d, i = ensure(*d, int(amt)) - _, err = f.R.ReadFull((*d)[i:]) - if err != nil { - return err - } - for o > 0 { - err = appendNext(f, d) - if err != nil { - return err - } - o-- - } - return nil -} - -// MarshalJSON implements json.Marshaler -func (r *Raw) MarshalJSON() ([]byte, error) { - var buf bytes.Buffer - _, err := UnmarshalAsJSON(&buf, []byte(*r)) - return buf.Bytes(), err -} - -// ReadMapHeaderBytes reads a map header size -// from 'b' and returns the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a map) -func ReadMapHeaderBytes(b []byte) (sz uint32, o []byte, err error) { - l := len(b) - if l < 1 { - err = ErrShortBytes - return - } - - lead := b[0] - if isfixmap(lead) { - sz = uint32(rfixmap(lead)) - o = b[1:] - return - } - - switch lead { - case mmap16: - if l < 3 { - err = ErrShortBytes - return - } - sz = uint32(big.Uint16(b[1:])) - o = b[3:] - return - - case mmap32: - if l < 5 { - err = ErrShortBytes - return - } - sz = big.Uint32(b[1:]) - o = b[5:] - return - - default: - err = badPrefix(MapType, lead) - return - } -} - -// ReadMapKeyZC attempts to read a map key -// from 'b' and returns the key bytes and the remaining bytes -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a str or bin) -func ReadMapKeyZC(b []byte) ([]byte, []byte, error) { - o, b, err := ReadStringZC(b) - if err != nil { - if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { - return ReadBytesZC(b) - } - return nil, b, err - } - return o, b, nil -} - -// ReadArrayHeaderBytes attempts to read -// the array header size off of 'b' and return -// the size and remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not an array) -func ReadArrayHeaderBytes(b []byte) (sz uint32, o []byte, err error) { - if len(b) < 1 { - return 0, nil, ErrShortBytes - } - lead := b[0] - if isfixarray(lead) { - sz = uint32(rfixarray(lead)) - o = b[1:] - return - } - - switch lead { - case marray16: - if len(b) < 3 { - err = ErrShortBytes - return - } - sz = uint32(big.Uint16(b[1:])) - o = b[3:] - return - - case marray32: - if len(b) < 5 { - err = ErrShortBytes - return - } - sz = big.Uint32(b[1:]) - o = b[5:] - return - - default: - err = badPrefix(ArrayType, lead) - return - } -} - -// ReadNilBytes tries to read a "nil" byte -// off of 'b' and return the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a 'nil') -// - InvalidPrefixError -func ReadNilBytes(b []byte) ([]byte, error) { - if len(b) < 1 { - return nil, ErrShortBytes - } - if b[0] != mnil { - return b, badPrefix(NilType, b[0]) - } - return b[1:], nil -} - -// ReadFloat64Bytes tries to read a float64 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a float64) -func ReadFloat64Bytes(b []byte) (f float64, o []byte, err error) { - if len(b) < 9 { - if len(b) >= 5 && b[0] == mfloat32 { - var tf float32 - tf, o, err = ReadFloat32Bytes(b) - f = float64(tf) - return - } - err = ErrShortBytes - return - } - - if b[0] != mfloat64 { - if b[0] == mfloat32 { - var tf float32 - tf, o, err = ReadFloat32Bytes(b) - f = float64(tf) - return - } - err = badPrefix(Float64Type, b[0]) - return - } - - f = math.Float64frombits(getMuint64(b)) - o = b[9:] - return -} - -// ReadFloat32Bytes tries to read a float64 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a float32) -func ReadFloat32Bytes(b []byte) (f float32, o []byte, err error) { - if len(b) < 5 { - err = ErrShortBytes - return - } - - if b[0] != mfloat32 { - err = TypeError{Method: Float32Type, Encoded: getType(b[0])} - return - } - - f = math.Float32frombits(getMuint32(b)) - o = b[5:] - return -} - -// ReadBoolBytes tries to read a float64 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a bool) -func ReadBoolBytes(b []byte) (bool, []byte, error) { - if len(b) < 1 { - return false, b, ErrShortBytes - } - switch b[0] { - case mtrue: - return true, b[1:], nil - case mfalse: - return false, b[1:], nil - default: - return false, b, badPrefix(BoolType, b[0]) - } -} - -// ReadInt64Bytes tries to read an int64 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError (not a int) -func ReadInt64Bytes(b []byte) (i int64, o []byte, err error) { - l := len(b) - if l < 1 { - return 0, nil, ErrShortBytes - } - - lead := b[0] - if isfixint(lead) { - i = int64(rfixint(lead)) - o = b[1:] - return - } - if isnfixint(lead) { - i = int64(rnfixint(lead)) - o = b[1:] - return - } - - switch lead { - case mint8: - if l < 2 { - err = ErrShortBytes - return - } - i = int64(getMint8(b)) - o = b[2:] - return - - case mint16: - if l < 3 { - err = ErrShortBytes - return - } - i = int64(getMint16(b)) - o = b[3:] - return - - case mint32: - if l < 5 { - err = ErrShortBytes - return - } - i = int64(getMint32(b)) - o = b[5:] - return - - case mint64: - if l < 9 { - err = ErrShortBytes - return - } - i = getMint64(b) - o = b[9:] - return - - default: - err = badPrefix(IntType, lead) - return - } -} - -// ReadInt32Bytes tries to read an int32 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a int) -// - IntOverflow{} (value doesn't fit in int32) -func ReadInt32Bytes(b []byte) (int32, []byte, error) { - i, o, err := ReadInt64Bytes(b) - if i > math.MaxInt32 || i < math.MinInt32 { - return 0, o, IntOverflow{Value: i, FailedBitsize: 32} - } - return int32(i), o, err -} - -// ReadInt16Bytes tries to read an int16 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a int) -// - IntOverflow{} (value doesn't fit in int16) -func ReadInt16Bytes(b []byte) (int16, []byte, error) { - i, o, err := ReadInt64Bytes(b) - if i > math.MaxInt16 || i < math.MinInt16 { - return 0, o, IntOverflow{Value: i, FailedBitsize: 16} - } - return int16(i), o, err -} - -// ReadInt8Bytes tries to read an int16 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a int) -// - IntOverflow{} (value doesn't fit in int8) -func ReadInt8Bytes(b []byte) (int8, []byte, error) { - i, o, err := ReadInt64Bytes(b) - if i > math.MaxInt8 || i < math.MinInt8 { - return 0, o, IntOverflow{Value: i, FailedBitsize: 8} - } - return int8(i), o, err -} - -// ReadIntBytes tries to read an int -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a int) -// - IntOverflow{} (value doesn't fit in int; 32-bit platforms only) -func ReadIntBytes(b []byte) (int, []byte, error) { - if smallint { - i, b, err := ReadInt32Bytes(b) - return int(i), b, err - } - i, b, err := ReadInt64Bytes(b) - return int(i), b, err -} - -// ReadUint64Bytes tries to read a uint64 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a uint) -func ReadUint64Bytes(b []byte) (u uint64, o []byte, err error) { - l := len(b) - if l < 1 { - return 0, nil, ErrShortBytes - } - - lead := b[0] - if isfixint(lead) { - u = uint64(rfixint(lead)) - o = b[1:] - return - } - - switch lead { - case muint8: - if l < 2 { - err = ErrShortBytes - return - } - u = uint64(getMuint8(b)) - o = b[2:] - return - - case muint16: - if l < 3 { - err = ErrShortBytes - return - } - u = uint64(getMuint16(b)) - o = b[3:] - return - - case muint32: - if l < 5 { - err = ErrShortBytes - return - } - u = uint64(getMuint32(b)) - o = b[5:] - return - - case muint64: - if l < 9 { - err = ErrShortBytes - return - } - u = getMuint64(b) - o = b[9:] - return - - default: - err = badPrefix(UintType, lead) - return - } -} - -// ReadUint32Bytes tries to read a uint32 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a uint) -// - UintOverflow{} (value too large for uint32) -func ReadUint32Bytes(b []byte) (uint32, []byte, error) { - v, o, err := ReadUint64Bytes(b) - if v > math.MaxUint32 { - return 0, nil, UintOverflow{Value: v, FailedBitsize: 32} - } - return uint32(v), o, err -} - -// ReadUint16Bytes tries to read a uint16 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a uint) -// - UintOverflow{} (value too large for uint16) -func ReadUint16Bytes(b []byte) (uint16, []byte, error) { - v, o, err := ReadUint64Bytes(b) - if v > math.MaxUint16 { - return 0, nil, UintOverflow{Value: v, FailedBitsize: 16} - } - return uint16(v), o, err -} - -// ReadUint8Bytes tries to read a uint8 -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a uint) -// - UintOverflow{} (value too large for uint8) -func ReadUint8Bytes(b []byte) (uint8, []byte, error) { - v, o, err := ReadUint64Bytes(b) - if v > math.MaxUint8 { - return 0, nil, UintOverflow{Value: v, FailedBitsize: 8} - } - return uint8(v), o, err -} - -// ReadUintBytes tries to read a uint -// from 'b' and return the value and the remaining bytes. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a uint) -// - UintOverflow{} (value too large for uint; 32-bit platforms only) -func ReadUintBytes(b []byte) (uint, []byte, error) { - if smallint { - u, b, err := ReadUint32Bytes(b) - return uint(u), b, err - } - u, b, err := ReadUint64Bytes(b) - return uint(u), b, err -} - -// ReadByteBytes is analogous to ReadUint8Bytes -func ReadByteBytes(b []byte) (byte, []byte, error) { - return ReadUint8Bytes(b) -} - -// ReadBytesBytes reads a 'bin' object -// from 'b' and returns its vaue and -// the remaining bytes in 'b'. -// Possible errors: -// - ErrShortBytes (too few bytes) -// - TypeError{} (not a 'bin' object) -func ReadBytesBytes(b []byte, scratch []byte) (v []byte, o []byte, err error) { - return readBytesBytes(b, scratch, false) -} - -func readBytesBytes(b []byte, scratch []byte, zc bool) (v []byte, o []byte, err error) { - l := len(b) - if l < 1 { - return nil, nil, ErrShortBytes - } - - lead := b[0] - var read int - switch lead { - case mbin8: - if l < 2 { - err = ErrShortBytes - return - } - - read = int(b[1]) - b = b[2:] - - case mbin16: - if l < 3 { - err = ErrShortBytes - return - } - read = int(big.Uint16(b[1:])) - b = b[3:] - - case mbin32: - if l < 5 { - err = ErrShortBytes - return - } - read = int(big.Uint32(b[1:])) - b = b[5:] - - default: - err = badPrefix(BinType, lead) - return - } - - if len(b) < read { - err = ErrShortBytes - return - } - - // zero-copy - if zc { - v = b[0:read] - o = b[read:] - return - } - - if cap(scratch) >= read { - v = scratch[0:read] - } else { - v = make([]byte, read) - } - - o = b[copy(v, b):] - return -} - -// ReadBytesZC extracts the messagepack-encoded -// binary field without copying. The returned []byte -// points to the same memory as the input slice. -// Possible errors: -// - ErrShortBytes (b not long enough) -// - TypeError{} (object not 'bin') -func ReadBytesZC(b []byte) (v []byte, o []byte, err error) { - return readBytesBytes(b, nil, true) -} - -func ReadExactBytes(b []byte, into []byte) (o []byte, err error) { - l := len(b) - if l < 1 { - err = ErrShortBytes - return - } - - lead := b[0] - var read uint32 - var skip int - switch lead { - case mbin8: - if l < 2 { - err = ErrShortBytes - return - } - - read = uint32(b[1]) - skip = 2 - - case mbin16: - if l < 3 { - err = ErrShortBytes - return - } - read = uint32(big.Uint16(b[1:])) - skip = 3 - - case mbin32: - if l < 5 { - err = ErrShortBytes - return - } - read = uint32(big.Uint32(b[1:])) - skip = 5 - - default: - err = badPrefix(BinType, lead) - return - } - - if read != uint32(len(into)) { - err = ArrayError{Wanted: uint32(len(into)), Got: read} - return - } - - o = b[skip+copy(into, b[skip:]):] - return -} - -// ReadStringZC reads a messagepack string field -// without copying. The returned []byte points -// to the same memory as the input slice. -// Possible errors: -// - ErrShortBytes (b not long enough) -// - TypeError{} (object not 'str') -func ReadStringZC(b []byte) (v []byte, o []byte, err error) { - l := len(b) - if l < 1 { - return nil, nil, ErrShortBytes - } - - lead := b[0] - var read int - - if isfixstr(lead) { - read = int(rfixstr(lead)) - b = b[1:] - } else { - switch lead { - case mstr8: - if l < 2 { - err = ErrShortBytes - return - } - read = int(b[1]) - b = b[2:] - - case mstr16: - if l < 3 { - err = ErrShortBytes - return - } - read = int(big.Uint16(b[1:])) - b = b[3:] - - case mstr32: - if l < 5 { - err = ErrShortBytes - return - } - read = int(big.Uint32(b[1:])) - b = b[5:] - - default: - err = TypeError{Method: StrType, Encoded: getType(lead)} - return - } - } - - if len(b) < read { - err = ErrShortBytes - return - } - - v = b[0:read] - o = b[read:] - return -} - -// ReadStringBytes reads a 'str' object -// from 'b' and returns its value and the -// remaining bytes in 'b'. -// Possible errors: -// - ErrShortBytes (b not long enough) -// - TypeError{} (not 'str' type) -// - InvalidPrefixError -func ReadStringBytes(b []byte) (string, []byte, error) { - v, o, err := ReadStringZC(b) - return string(v), o, err -} - -// ReadStringAsBytes reads a 'str' object -// into a slice of bytes. 'v' is the value of -// the 'str' object, which may reside in memory -// pointed to by 'scratch.' 'o' is the remaining bytes -// in 'b.'' -// Possible errors: -// - ErrShortBytes (b not long enough) -// - TypeError{} (not 'str' type) -// - InvalidPrefixError (unknown type marker) -func ReadStringAsBytes(b []byte, scratch []byte) (v []byte, o []byte, err error) { - var tmp []byte - tmp, o, err = ReadStringZC(b) - v = append(scratch[:0], tmp...) - return -} - -// ReadComplex128Bytes reads a complex128 -// extension object from 'b' and returns the -// remaining bytes. -// Possible errors: -// - ErrShortBytes (not enough bytes in 'b') -// - TypeError{} (object not a complex128) -// - InvalidPrefixError -// - ExtensionTypeError{} (object an extension of the correct size, but not a complex128) -func ReadComplex128Bytes(b []byte) (c complex128, o []byte, err error) { - if len(b) < 18 { - err = ErrShortBytes - return - } - if b[0] != mfixext16 { - err = badPrefix(Complex128Type, b[0]) - return - } - if int8(b[1]) != Complex128Extension { - err = errExt(int8(b[1]), Complex128Extension) - return - } - c = complex(math.Float64frombits(big.Uint64(b[2:])), - math.Float64frombits(big.Uint64(b[10:]))) - o = b[18:] - return -} - -// ReadComplex64Bytes reads a complex64 -// extension object from 'b' and returns the -// remaining bytes. -// Possible errors: -// - ErrShortBytes (not enough bytes in 'b') -// - TypeError{} (object not a complex64) -// - ExtensionTypeError{} (object an extension of the correct size, but not a complex64) -func ReadComplex64Bytes(b []byte) (c complex64, o []byte, err error) { - if len(b) < 10 { - err = ErrShortBytes - return - } - if b[0] != mfixext8 { - err = badPrefix(Complex64Type, b[0]) - return - } - if b[1] != Complex64Extension { - err = errExt(int8(b[1]), Complex64Extension) - return - } - c = complex(math.Float32frombits(big.Uint32(b[2:])), - math.Float32frombits(big.Uint32(b[6:]))) - o = b[10:] - return -} - -// ReadTimeBytes reads a time.Time -// extension object from 'b' and returns the -// remaining bytes. -// Possible errors: -// - ErrShortBytes (not enough bytes in 'b') -// - TypeError{} (object not a complex64) -// - ExtensionTypeError{} (object an extension of the correct size, but not a time.Time) -func ReadTimeBytes(b []byte) (t time.Time, o []byte, err error) { - if len(b) < 15 { - err = ErrShortBytes - return - } - if b[0] != mext8 || b[1] != 12 { - err = badPrefix(TimeType, b[0]) - return - } - if int8(b[2]) != TimeExtension { - err = errExt(int8(b[2]), TimeExtension) - return - } - sec, nsec := getUnix(b[3:]) - t = time.Unix(sec, int64(nsec)).Local() - o = b[15:] - return -} - -// ReadMapStrIntfBytes reads a map[string]interface{} -// out of 'b' and returns the map and remaining bytes. -// If 'old' is non-nil, the values will be read into that map. -func ReadMapStrIntfBytes(b []byte, old map[string]interface{}) (v map[string]interface{}, o []byte, err error) { - var sz uint32 - o = b - sz, o, err = ReadMapHeaderBytes(o) - - if err != nil { - return - } - - if old != nil { - for key := range old { - delete(old, key) - } - v = old - } else { - v = make(map[string]interface{}, int(sz)) - } - - for z := uint32(0); z < sz; z++ { - if len(o) < 1 { - err = ErrShortBytes - return - } - var key []byte - key, o, err = ReadMapKeyZC(o) - if err != nil { - return - } - var val interface{} - val, o, err = ReadIntfBytes(o) - if err != nil { - return - } - v[string(key)] = val - } - return -} - -// ReadIntfBytes attempts to read -// the next object out of 'b' as a raw interface{} and -// return the remaining bytes. -func ReadIntfBytes(b []byte) (i interface{}, o []byte, err error) { - if len(b) < 1 { - err = ErrShortBytes - return - } - - k := NextType(b) - - switch k { - case MapType: - i, o, err = ReadMapStrIntfBytes(b, nil) - return - - case ArrayType: - var sz uint32 - sz, o, err = ReadArrayHeaderBytes(b) - if err != nil { - return - } - j := make([]interface{}, int(sz)) - i = j - for d := range j { - j[d], o, err = ReadIntfBytes(o) - if err != nil { - return - } - } - return - - case Float32Type: - i, o, err = ReadFloat32Bytes(b) - return - - case Float64Type: - i, o, err = ReadFloat64Bytes(b) - return - - case IntType: - i, o, err = ReadInt64Bytes(b) - return - - case UintType: - i, o, err = ReadUint64Bytes(b) - return - - case BoolType: - i, o, err = ReadBoolBytes(b) - return - - case TimeType: - i, o, err = ReadTimeBytes(b) - return - - case Complex64Type: - i, o, err = ReadComplex64Bytes(b) - return - - case Complex128Type: - i, o, err = ReadComplex128Bytes(b) - return - - case ExtensionType: - var t int8 - t, err = peekExtension(b) - if err != nil { - return - } - // use a user-defined extension, - // if it's been registered - f, ok := extensionReg[t] - if ok { - e := f() - o, err = ReadExtensionBytes(b, e) - i = e - return - } - // last resort is a raw extension - e := RawExtension{} - e.Type = int8(t) - o, err = ReadExtensionBytes(b, &e) - i = &e - return - - case NilType: - o, err = ReadNilBytes(b) - return - - case BinType: - i, o, err = ReadBytesBytes(b, nil) - return - - case StrType: - i, o, err = ReadStringBytes(b) - return - - default: - err = InvalidPrefixError(b[0]) - return - } -} - -// Skip skips the next object in 'b' and -// returns the remaining bytes. If the object -// is a map or array, all of its elements -// will be skipped. -// Possible Errors: -// - ErrShortBytes (not enough bytes in b) -// - InvalidPrefixError (bad encoding) -func Skip(b []byte) ([]byte, error) { - sz, asz, err := getSize(b) - if err != nil { - return b, err - } - if uintptr(len(b)) < sz { - return b, ErrShortBytes - } - b = b[sz:] - for asz > 0 { - b, err = Skip(b) - if err != nil { - return b, err - } - asz-- - } - return b, nil -} - -// returns (skip N bytes, skip M objects, error) -func getSize(b []byte) (uintptr, uintptr, error) { - l := len(b) - if l == 0 { - return 0, 0, ErrShortBytes - } - lead := b[0] - spec := &sizes[lead] // get type information - size, mode := spec.size, spec.extra - if size == 0 { - return 0, 0, InvalidPrefixError(lead) - } - if mode >= 0 { // fixed composites - return uintptr(size), uintptr(mode), nil - } - if l < int(size) { - return 0, 0, ErrShortBytes - } - switch mode { - case extra8: - return uintptr(size) + uintptr(b[1]), 0, nil - case extra16: - return uintptr(size) + uintptr(big.Uint16(b[1:])), 0, nil - case extra32: - return uintptr(size) + uintptr(big.Uint32(b[1:])), 0, nil - case map16v: - return uintptr(size), 2 * uintptr(big.Uint16(b[1:])), nil - case map32v: - return uintptr(size), 2 * uintptr(big.Uint32(b[1:])), nil - case array16v: - return uintptr(size), uintptr(big.Uint16(b[1:])), nil - case array32v: - return uintptr(size), uintptr(big.Uint32(b[1:])), nil - default: - return 0, 0, fatal - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go deleted file mode 100644 index 0049471b..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go +++ /dev/null @@ -1,518 +0,0 @@ -package msgp - -import ( - "bytes" - "reflect" - "testing" - "time" -) - -func TestReadMapHeaderBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []uint32{0, 1, 5, 49082} - - for i, v := range tests { - buf.Reset() - en.WriteMapHeader(v) - en.Flush() - - out, left, err := ReadMapHeaderBytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - - if out != v { - t.Errorf("%d in; %d out", v, out) - } - } -} - -func BenchmarkReadMapHeaderBytes(b *testing.B) { - sizes := []uint32{1, 100, tuint16, tuint32} - buf := make([]byte, 0, 5*len(sizes)) - for _, sz := range sizes { - buf = AppendMapHeader(buf, sz) - } - b.SetBytes(int64(len(buf) / len(sizes))) - b.ReportAllocs() - b.ResetTimer() - o := buf - for i := 0; i < b.N; i++ { - _, buf, _ = ReadMapHeaderBytes(buf) - if len(buf) == 0 { - buf = o - } - } -} - -func TestReadArrayHeaderBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []uint32{0, 1, 5, 49082} - - for i, v := range tests { - buf.Reset() - en.WriteArrayHeader(v) - en.Flush() - - out, left, err := ReadArrayHeaderBytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - - if out != v { - t.Errorf("%d in; %d out", v, out) - } - } -} - -func BenchmarkReadArrayHeaderBytes(b *testing.B) { - sizes := []uint32{1, 100, tuint16, tuint32} - buf := make([]byte, 0, 5*len(sizes)) - for _, sz := range sizes { - buf = AppendArrayHeader(buf, sz) - } - b.SetBytes(int64(len(buf) / len(sizes))) - b.ReportAllocs() - b.ResetTimer() - o := buf - for i := 0; i < b.N; i++ { - _, buf, _ = ReadArrayHeaderBytes(buf) - if len(buf) == 0 { - buf = o - } - } -} - -func TestReadNilBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteNil() - en.Flush() - - left, err := ReadNilBytes(buf.Bytes()) - if err != nil { - t.Fatal(err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } -} - -func BenchmarkReadNilByte(b *testing.B) { - buf := []byte{mnil} - b.SetBytes(1) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - ReadNilBytes(buf) - } -} - -func TestReadFloat64Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteFloat64(3.14159) - en.Flush() - - out, left, err := ReadFloat64Bytes(buf.Bytes()) - if err != nil { - t.Fatal(err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if out != 3.14159 { - t.Errorf("%f in; %f out", 3.14159, out) - } -} - -func BenchmarkReadFloat64Bytes(b *testing.B) { - f := float64(3.14159) - buf := make([]byte, 0, 9) - buf = AppendFloat64(buf, f) - b.SetBytes(int64(len(buf))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - ReadFloat64Bytes(buf) - } -} - -func TestReadFloat32Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteFloat32(3.1) - en.Flush() - - out, left, err := ReadFloat32Bytes(buf.Bytes()) - if err != nil { - t.Fatal(err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if out != 3.1 { - t.Errorf("%f in; %f out", 3.1, out) - } -} - -func BenchmarkReadFloat32Bytes(b *testing.B) { - f := float32(3.14159) - buf := make([]byte, 0, 5) - buf = AppendFloat32(buf, f) - b.SetBytes(int64(len(buf))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - ReadFloat32Bytes(buf) - } -} - -func TestReadBoolBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []bool{true, false} - - for i, v := range tests { - buf.Reset() - en.WriteBool(v) - en.Flush() - out, left, err := ReadBoolBytes(buf.Bytes()) - - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - - if out != v { - t.Errorf("%t in; %t out", v, out) - } - } -} - -func BenchmarkReadBoolBytes(b *testing.B) { - buf := []byte{mtrue, mfalse, mtrue, mfalse} - b.SetBytes(1) - b.ReportAllocs() - b.ResetTimer() - o := buf - for i := 0; i < b.N; i++ { - _, buf, _ = ReadBoolBytes(buf) - if len(buf) == 0 { - buf = o - } - } -} - -func TestReadInt64Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []int64{-5, -30, 0, 1, 127, 300, 40921, 34908219} - - for i, v := range tests { - buf.Reset() - en.WriteInt64(v) - en.Flush() - out, left, err := ReadInt64Bytes(buf.Bytes()) - - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - - if out != v { - t.Errorf("%d in; %d out", v, out) - } - } -} - -func TestReadUint64Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []uint64{0, 1, 127, 300, 40921, 34908219} - - for i, v := range tests { - buf.Reset() - en.WriteUint64(v) - en.Flush() - out, left, err := ReadUint64Bytes(buf.Bytes()) - - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - - if out != v { - t.Errorf("%d in; %d out", v, out) - } - } -} - -func TestReadBytesBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := [][]byte{[]byte{}, []byte("some bytes"), []byte("some more bytes")} - var scratch []byte - - for i, v := range tests { - buf.Reset() - en.WriteBytes(v) - en.Flush() - out, left, err := ReadBytesBytes(buf.Bytes(), scratch) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if !bytes.Equal(out, v) { - t.Errorf("%q in; %q out", v, out) - } - } -} - -func TestReadZCBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := [][]byte{[]byte{}, []byte("some bytes"), []byte("some more bytes")} - - for i, v := range tests { - buf.Reset() - en.WriteBytes(v) - en.Flush() - out, left, err := ReadBytesZC(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if !bytes.Equal(out, v) { - t.Errorf("%q in; %q out", v, out) - } - } -} - -func TestReadZCString(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []string{"", "hello", "here's another string......"} - - for i, v := range tests { - buf.Reset() - en.WriteString(v) - en.Flush() - - out, left, err := ReadStringZC(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if string(out) != v { - t.Errorf("%q in; %q out", v, out) - } - } -} - -func TestReadStringBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []string{"", "hello", "here's another string......"} - - for i, v := range tests { - buf.Reset() - en.WriteString(v) - en.Flush() - - out, left, err := ReadStringBytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if out != v { - t.Errorf("%q in; %q out", v, out) - } - } -} - -func TestReadComplex128Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []complex128{complex(0, 0), complex(12.8, 32.0)} - - for i, v := range tests { - buf.Reset() - en.WriteComplex128(v) - en.Flush() - - out, left, err := ReadComplex128Bytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if out != v { - t.Errorf("%f in; %f out", v, out) - } - } -} - -func TestReadComplex64Bytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := []complex64{complex(0, 0), complex(12.8, 32.0)} - - for i, v := range tests { - buf.Reset() - en.WriteComplex64(v) - en.Flush() - - out, left, err := ReadComplex64Bytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if out != v { - t.Errorf("%f in; %f out", v, out) - } - } -} - -func TestReadTimeBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - now := time.Now() - en.WriteTime(now) - en.Flush() - out, left, err := ReadTimeBytes(buf.Bytes()) - if err != nil { - t.Fatal(err) - } - - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if !now.Equal(out) { - t.Errorf("%s in; %s out", now, out) - } -} - -func BenchmarkReadTimeBytes(b *testing.B) { - data := AppendTime(nil, time.Now()) - b.SetBytes(15) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - ReadTimeBytes(data) - } -} - -func TestReadIntfBytes(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - tests := make([]interface{}, 0, 10) - tests = append(tests, float64(3.5)) - tests = append(tests, int64(-49082)) - tests = append(tests, uint64(34908)) - tests = append(tests, string("hello!")) - tests = append(tests, []byte("blah.")) - tests = append(tests, map[string]interface{}{ - "key_one": 3.5, - "key_two": "hi.", - }) - - for i, v := range tests { - buf.Reset() - if err := en.WriteIntf(v); err != nil { - t.Fatal(err) - } - en.Flush() - - out, left, err := ReadIntfBytes(buf.Bytes()) - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if len(left) != 0 { - t.Errorf("expected 0 bytes left; found %d", len(left)) - } - if !reflect.DeepEqual(v, out) { - t.Errorf("ReadIntf(): %v in; %v out", v, out) - } - } - -} - -func BenchmarkSkipBytes(b *testing.B) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteMapHeader(6) - - en.WriteString("thing_one") - en.WriteString("value_one") - - en.WriteString("thing_two") - en.WriteFloat64(3.14159) - - en.WriteString("some_bytes") - en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) - - en.WriteString("the_time") - en.WriteTime(time.Now()) - - en.WriteString("what?") - en.WriteBool(true) - - en.WriteString("ext") - en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) - en.Flush() - - bts := buf.Bytes() - b.SetBytes(int64(len(bts))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := Skip(bts) - if err != nil { - b.Fatal(err) - } - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_test.go b/vendor/github.com/tinylib/msgp/msgp/read_test.go deleted file mode 100644 index 8e781c10..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/read_test.go +++ /dev/null @@ -1,770 +0,0 @@ -package msgp - -import ( - "bytes" - "io" - "math" - "math/rand" - "reflect" - "testing" - "time" -) - -func TestSanity(t *testing.T) { - if !isfixint(0) { - t.Fatal("WUT.") - } -} - -func TestReadIntf(t *testing.T) { - // NOTE: if you include cases - // with, say, int32s, the test - // will fail, b/c integers are - // always read out as int64, and - // unsigned integers as uint64 - - var testCases = []interface{}{ - float64(128.032), - float32(9082.092), - int64(-40), - uint64(9082981), - time.Now(), - "hello!", - []byte("hello!"), - map[string]interface{}{ - "thing-1": "thing-1-value", - "thing-2": int64(800), - "thing-3": []byte("some inner bytes..."), - "thing-4": false, - }, - } - - var buf bytes.Buffer - var v interface{} - dec := NewReader(&buf) - enc := NewWriter(&buf) - - for i, ts := range testCases { - buf.Reset() - err := enc.WriteIntf(ts) - if err != nil { - t.Errorf("Test case %d: %s", i, err) - continue - } - err = enc.Flush() - if err != nil { - t.Fatal(err) - } - v, err = dec.ReadIntf() - if err != nil { - t.Errorf("Test case: %d: %s", i, err) - } - - /* for time, use time.Equal instead of reflect.DeepEqual */ - if tm, ok := v.(time.Time); ok { - if !tm.Equal(v.(time.Time)) { - t.Errorf("%v != %v", ts, v) - } - } else if !reflect.DeepEqual(v, ts) { - t.Errorf("%v in; %v out", ts, v) - } - } - -} - -func TestReadMapHeader(t *testing.T) { - tests := []struct { - Sz uint32 - }{ - {0}, - {1}, - {tuint16}, - {tuint32}, - } - - var buf bytes.Buffer - var sz uint32 - var err error - wr := NewWriter(&buf) - rd := NewReader(&buf) - for i, test := range tests { - buf.Reset() - err = wr.WriteMapHeader(test.Sz) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - sz, err = rd.ReadMapHeader() - if err != nil { - t.Errorf("Test case %d: got error %s", i, err) - } - if sz != test.Sz { - t.Errorf("Test case %d: wrote size %d; got size %d", i, test.Sz, sz) - } - } -} - -func BenchmarkReadMapHeader(b *testing.B) { - sizes := []uint32{0, 1, tuint16, tuint32} - data := make([]byte, 0, len(sizes)*5) - for _, d := range sizes { - data = AppendMapHeader(data, d) - } - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data) / len(sizes))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - rd.ReadMapHeader() - } -} - -func TestReadArrayHeader(t *testing.T) { - tests := []struct { - Sz uint32 - }{ - {0}, - {1}, - {tuint16}, - {tuint32}, - } - - var buf bytes.Buffer - var sz uint32 - var err error - wr := NewWriter(&buf) - rd := NewReader(&buf) - for i, test := range tests { - buf.Reset() - err = wr.WriteArrayHeader(test.Sz) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - sz, err = rd.ReadArrayHeader() - if err != nil { - t.Errorf("Test case %d: got error %s", i, err) - } - if sz != test.Sz { - t.Errorf("Test case %d: wrote size %d; got size %d", i, test.Sz, sz) - } - } -} - -func BenchmarkReadArrayHeader(b *testing.B) { - sizes := []uint32{0, 1, tuint16, tuint32} - data := make([]byte, 0, len(sizes)*5) - for _, d := range sizes { - data = AppendArrayHeader(data, d) - } - rd := NewReader(NewEndlessReader(data, b)) - b.ReportAllocs() - b.SetBytes(int64(len(data) / len(sizes))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - rd.ReadArrayHeader() - } -} - -func TestReadNil(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - wr.WriteNil() - wr.Flush() - err := rd.ReadNil() - if err != nil { - t.Fatal(err) - } -} - -func BenchmarkReadNil(b *testing.B) { - data := AppendNil(nil) - rd := NewReader(NewEndlessReader(data, b)) - b.ReportAllocs() - b.SetBytes(1) - b.ResetTimer() - for i := 0; i < b.N; i++ { - err := rd.ReadNil() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadFloat64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - for i := 0; i < 100; i++ { - buf.Reset() - - flt := (rand.Float64() - 0.5) * math.MaxFloat64 - err := wr.WriteFloat64(flt) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - out, err := rd.ReadFloat64() - if err != nil { - t.Errorf("Error reading %f: %s", flt, err) - continue - } - - if out != flt { - t.Errorf("Put in %f but got out %f", flt, out) - } - } -} - -func BenchmarkReadFloat64(b *testing.B) { - fs := []float64{rand.Float64(), rand.Float64(), rand.Float64(), rand.Float64()} - data := make([]byte, 0, 9*len(fs)) - for _, f := range fs { - data = AppendFloat64(data, f) - } - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadFloat64() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadFloat32(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - for i := 0; i < 10000; i++ { - buf.Reset() - - flt := (rand.Float32() - 0.5) * math.MaxFloat32 - err := wr.WriteFloat32(flt) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - out, err := rd.ReadFloat32() - if err != nil { - t.Errorf("Error reading %f: %s", flt, err) - continue - } - - if out != flt { - t.Errorf("Put in %f but got out %f", flt, out) - } - } -} - -func BenchmarkReadFloat32(b *testing.B) { - fs := []float32{rand.Float32(), rand.Float32(), rand.Float32(), rand.Float32()} - data := make([]byte, 0, 5*len(fs)) - for _, f := range fs { - data = AppendFloat32(data, f) - } - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(5) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadFloat32() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadInt64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - ints := []int64{-100000, -5000, -5, 0, 8, 240, int64(tuint16), int64(tuint32), int64(tuint64)} - - for i, num := range ints { - buf.Reset() - - err := wr.WriteInt64(num) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - out, err := rd.ReadInt64() - if err != nil { - t.Fatal(err) - } - if out != num { - t.Errorf("Test case %d: put %d in and got %d out", i, num, out) - } - } -} - -func BenchmarkReadInt64(b *testing.B) { - is := []int64{0, 1, 65000, rand.Int63()} - data := make([]byte, 0, 9*len(is)) - for _, n := range is { - data = AppendInt64(data, n) - } - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data) / len(is))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadInt64() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadUint64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - ints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} - - for i, num := range ints { - buf.Reset() - - err := wr.WriteUint64(num) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - out, err := rd.ReadUint64() - if out != num { - t.Errorf("Test case %d: put %d in and got %d out", i, num, out) - } - } -} - -func BenchmarkReadUint64(b *testing.B) { - us := []uint64{0, 1, 10000, uint64(rand.Uint32() * 4)} - data := make([]byte, 0, 9*len(us)) - for _, n := range us { - data = AppendUint64(data, n) - } - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data) / len(us))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadUint64() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadBytes(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - sizes := []int{0, 1, 225, int(tuint32)} - var scratch []byte - for i, size := range sizes { - buf.Reset() - bts := RandBytes(size) - - err := wr.WriteBytes(bts) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - out, err := rd.ReadBytes(scratch) - if err != nil { - t.Errorf("test case %d: %s", i, err) - continue - } - - if !bytes.Equal(bts, out) { - t.Errorf("test case %d: Bytes not equal.", i) - } - - } -} - -func benchBytes(size uint32, b *testing.B) { - data := make([]byte, 0, size+5) - data = AppendBytes(data, RandBytes(int(size))) - - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - var scratch []byte - var err error - for i := 0; i < b.N; i++ { - scratch, err = rd.ReadBytes(scratch) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkRead16Bytes(b *testing.B) { - benchBytes(16, b) -} - -func BenchmarkRead256Bytes(b *testing.B) { - benchBytes(256, b) -} - -// This particular case creates -// an object larger than the default -// read buffer size, so it's a decent -// indicator of worst-case performance. -func BenchmarkRead2048Bytes(b *testing.B) { - benchBytes(2048, b) -} - -func TestReadString(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - sizes := []int{0, 1, 225, int(math.MaxUint16 + 5)} - for i, size := range sizes { - buf.Reset() - in := string(RandBytes(size)) - - err := wr.WriteString(in) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - out, err := rd.ReadString() - if err != nil { - t.Errorf("test case %d: %s", i, err) - } - if out != in { - t.Errorf("test case %d: strings not equal.", i) - t.Errorf("string (len = %d) in; string (len = %d) out", size, len(out)) - } - - } -} - -func benchString(size uint32, b *testing.B) { - str := string(RandBytes(int(size))) - data := make([]byte, 0, len(str)+5) - data = AppendString(data, str) - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadString() - if err != nil { - b.Fatal(err) - } - } -} - -func benchStringAsBytes(size uint32, b *testing.B) { - str := string(RandBytes(int(size))) - data := make([]byte, 0, len(str)+5) - data = AppendString(data, str) - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - var scratch []byte - var err error - for i := 0; i < b.N; i++ { - scratch, err = rd.ReadStringAsBytes(scratch) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkRead16StringAsBytes(b *testing.B) { - benchStringAsBytes(16, b) -} - -func BenchmarkRead256StringAsBytes(b *testing.B) { - benchStringAsBytes(256, b) -} - -func BenchmarkRead16String(b *testing.B) { - benchString(16, b) -} - -func BenchmarkRead256String(b *testing.B) { - benchString(256, b) -} - -func TestReadComplex64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - for i := 0; i < 100; i++ { - buf.Reset() - f := complex(rand.Float32()*math.MaxFloat32, rand.Float32()*math.MaxFloat32) - - wr.WriteComplex64(f) - err := wr.Flush() - if err != nil { - t.Fatal(err) - } - - out, err := rd.ReadComplex64() - if err != nil { - t.Error(err) - continue - } - - if out != f { - t.Errorf("Wrote %f; read %f", f, out) - } - - } -} - -func BenchmarkReadComplex64(b *testing.B) { - f := complex(rand.Float32(), rand.Float32()) - data := AppendComplex64(nil, f) - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadComplex64() - if err != nil { - b.Fatal(err) - } - } -} - -func TestReadComplex128(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - for i := 0; i < 10; i++ { - buf.Reset() - f := complex(rand.Float64()*math.MaxFloat64, rand.Float64()*math.MaxFloat64) - - wr.WriteComplex128(f) - err := wr.Flush() - if err != nil { - t.Fatal(err) - } - - out, err := rd.ReadComplex128() - if err != nil { - t.Error(err) - continue - } - if out != f { - t.Errorf("Wrote %f; read %f", f, out) - } - - } -} - -func BenchmarkReadComplex128(b *testing.B) { - f := complex(rand.Float64(), rand.Float64()) - data := AppendComplex128(nil, f) - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadComplex128() - if err != nil { - b.Fatal(err) - } - } -} - -func TestTime(t *testing.T) { - var buf bytes.Buffer - now := time.Now() - en := NewWriter(&buf) - dc := NewReader(&buf) - - err := en.WriteTime(now) - if err != nil { - t.Fatal(err) - } - err = en.Flush() - if err != nil { - t.Fatal(err) - } - - out, err := dc.ReadTime() - if err != nil { - t.Fatal(err) - } - - // check for equivalence - if !now.Equal(out) { - t.Fatalf("%s in; %s out", now, out) - } -} - -func BenchmarkReadTime(b *testing.B) { - t := time.Now() - data := AppendTime(nil, t) - rd := NewReader(NewEndlessReader(data, b)) - b.SetBytes(int64(len(data))) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := rd.ReadTime() - if err != nil { - b.Fatal(err) - } - } -} - -func TestSkip(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - rd := NewReader(&buf) - - wr.WriteMapHeader(4) - wr.WriteString("key_1") - wr.WriteBytes([]byte("value_1")) - wr.WriteString("key_2") - wr.WriteFloat64(2.0) - wr.WriteString("key_3") - wr.WriteComplex128(3.0i) - wr.WriteString("key_4") - wr.WriteInt64(49080432189) - wr.Flush() - - // this should skip the whole map - err := rd.Skip() - if err != nil { - t.Fatal(err) - } - - tp, err := rd.NextType() - if err != io.EOF { - t.Errorf("expected %q; got %q", io.EOF, err) - t.Errorf("returned type %q", tp) - } - -} - -func BenchmarkSkip(b *testing.B) { - var buf bytes.Buffer - en := NewWriter(&buf) - en.WriteMapHeader(6) - - en.WriteString("thing_one") - en.WriteString("value_one") - - en.WriteString("thing_two") - en.WriteFloat64(3.14159) - - en.WriteString("some_bytes") - en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) - - en.WriteString("the_time") - en.WriteTime(time.Now()) - - en.WriteString("what?") - en.WriteBool(true) - - en.WriteString("ext") - en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) - en.Flush() - - bts := buf.Bytes() - b.SetBytes(int64(len(bts))) - b.ReportAllocs() - b.ResetTimer() - - rd := NewReader(NewEndlessReader(bts, b)) - for i := 0; i < b.N; i++ { - err := rd.Skip() - if err != nil { - b.Fatal(err) - } - } -} - -func TestCopyNext(t *testing.T) { - var buf bytes.Buffer - en := NewWriter(&buf) - - en.WriteMapHeader(6) - - en.WriteString("thing_one") - en.WriteString("value_one") - - en.WriteString("thing_two") - en.WriteFloat64(3.14159) - - en.WriteString("some_bytes") - en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) - - en.WriteString("the_time") - en.WriteTime(time.Now()) - - en.WriteString("what?") - en.WriteBool(true) - - en.WriteString("ext") - en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) - - en.Flush() - - // Read from a copy of the original buf. - de := NewReader(bytes.NewReader(buf.Bytes())) - - w := new(bytes.Buffer) - - n, err := de.CopyNext(w) - if err != nil { - t.Fatal(err) - } - if n != int64(buf.Len()) { - t.Fatalf("CopyNext returned the wrong value (%d != %d)", - n, buf.Len()) - } - - if !bytes.Equal(buf.Bytes(), w.Bytes()) { - t.Fatalf("not equal! %v, %v", buf.Bytes(), w.Bytes()) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/size.go b/vendor/github.com/tinylib/msgp/msgp/size.go deleted file mode 100644 index ce2f8b16..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/size.go +++ /dev/null @@ -1,38 +0,0 @@ -package msgp - -// The sizes provided -// are the worst-case -// encoded sizes for -// each type. For variable- -// length types ([]byte, string), -// the total encoded size is -// the prefix size plus the -// length of the object. -const ( - Int64Size = 9 - IntSize = Int64Size - UintSize = Int64Size - Int8Size = 2 - Int16Size = 3 - Int32Size = 5 - Uint8Size = 2 - ByteSize = Uint8Size - Uint16Size = 3 - Uint32Size = 5 - Uint64Size = Int64Size - Float64Size = 9 - Float32Size = 5 - Complex64Size = 10 - Complex128Size = 18 - - TimeSize = 15 - BoolSize = 1 - NilSize = 1 - - MapHeaderSize = 5 - ArrayHeaderSize = 5 - - BytesPrefixSize = 5 - StringPrefixSize = 5 - ExtensionPrefixSize = 6 -) diff --git a/vendor/github.com/tinylib/msgp/msgp/unsafe.go b/vendor/github.com/tinylib/msgp/msgp/unsafe.go deleted file mode 100644 index 0cb972e3..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/unsafe.go +++ /dev/null @@ -1,40 +0,0 @@ -// +build !appengine - -package msgp - -import ( - "reflect" - "unsafe" -) - -// NOTE: -// all of the definition in this file -// should be repeated in appengine.go, -// but without using unsafe - -const ( - // spec says int and uint are always - // the same size, but that int/uint - // size may not be machine word size - smallint = unsafe.Sizeof(int(0)) == 4 -) - -// UnsafeString returns the byte slice as a volatile string -// THIS SHOULD ONLY BE USED BY THE CODE GENERATOR. -// THIS IS EVIL CODE. -// YOU HAVE BEEN WARNED. -func UnsafeString(b []byte) string { - return *(*string)(unsafe.Pointer(&reflect.StringHeader{Data: uintptr(unsafe.Pointer(&b[0])), Len: len(b)})) -} - -// UnsafeBytes returns the string as a byte slice -// THIS SHOULD ONLY BE USED BY THE CODE GENERATOR. -// THIS IS EVIL CODE. -// YOU HAVE BEEN WARNED. -func UnsafeBytes(s string) []byte { - return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ - Len: len(s), - Cap: len(s), - Data: (*(*reflect.StringHeader)(unsafe.Pointer(&s))).Data, - })) -} diff --git a/vendor/github.com/tinylib/msgp/msgp/write.go b/vendor/github.com/tinylib/msgp/msgp/write.go deleted file mode 100644 index da9099c2..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/write.go +++ /dev/null @@ -1,845 +0,0 @@ -package msgp - -import ( - "errors" - "fmt" - "io" - "math" - "reflect" - "sync" - "time" -) - -// Sizer is an interface implemented -// by types that can estimate their -// size when MessagePack encoded. -// This interface is optional, but -// encoding/marshaling implementations -// may use this as a way to pre-allocate -// memory for serialization. -type Sizer interface { - Msgsize() int -} - -var ( - // Nowhere is an io.Writer to nowhere - Nowhere io.Writer = nwhere{} - - btsType = reflect.TypeOf(([]byte)(nil)) - writerPool = sync.Pool{ - New: func() interface{} { - return &Writer{buf: make([]byte, 2048)} - }, - } -) - -func popWriter(w io.Writer) *Writer { - wr := writerPool.Get().(*Writer) - wr.Reset(w) - return wr -} - -func pushWriter(wr *Writer) { - wr.w = nil - wr.wloc = 0 - writerPool.Put(wr) -} - -// freeW frees a writer for use -// by other processes. It is not necessary -// to call freeW on a writer. However, maintaining -// a reference to a *Writer after calling freeW on -// it will cause undefined behavior. -func freeW(w *Writer) { pushWriter(w) } - -// Require ensures that cap(old)-len(old) >= extra. -func Require(old []byte, extra int) []byte { - l := len(old) - c := cap(old) - r := l + extra - if c >= r { - return old - } else if l == 0 { - return make([]byte, 0, extra) - } - // the new size is the greater - // of double the old capacity - // and the sum of the old length - // and the number of new bytes - // necessary. - c <<= 1 - if c < r { - c = r - } - n := make([]byte, l, c) - copy(n, old) - return n -} - -// nowhere writer -type nwhere struct{} - -func (n nwhere) Write(p []byte) (int, error) { return len(p), nil } - -// Marshaler is the interface implemented -// by types that know how to marshal themselves -// as MessagePack. MarshalMsg appends the marshalled -// form of the object to the provided -// byte slice, returning the extended -// slice and any errors encountered. -type Marshaler interface { - MarshalMsg([]byte) ([]byte, error) -} - -// Encodable is the interface implemented -// by types that know how to write themselves -// as MessagePack using a *msgp.Writer. -type Encodable interface { - EncodeMsg(*Writer) error -} - -// Writer is a buffered writer -// that can be used to write -// MessagePack objects to an io.Writer. -// You must call *Writer.Flush() in order -// to flush all of the buffered data -// to the underlying writer. -type Writer struct { - w io.Writer - buf []byte - wloc int -} - -// NewWriter returns a new *Writer. -func NewWriter(w io.Writer) *Writer { - if wr, ok := w.(*Writer); ok { - return wr - } - return popWriter(w) -} - -// NewWriterSize returns a writer with a custom buffer size. -func NewWriterSize(w io.Writer, sz int) *Writer { - // we must be able to require() 18 - // contiguous bytes, so that is the - // practical minimum buffer size - if sz < 18 { - sz = 18 - } - - return &Writer{ - w: w, - buf: make([]byte, sz), - } -} - -// Encode encodes an Encodable to an io.Writer. -func Encode(w io.Writer, e Encodable) error { - wr := NewWriter(w) - err := e.EncodeMsg(wr) - if err == nil { - err = wr.Flush() - } - freeW(wr) - return err -} - -func (mw *Writer) flush() error { - if mw.wloc == 0 { - return nil - } - n, err := mw.w.Write(mw.buf[:mw.wloc]) - if err != nil { - if n > 0 { - mw.wloc = copy(mw.buf, mw.buf[n:mw.wloc]) - } - return err - } - mw.wloc = 0 - return nil -} - -// Flush flushes all of the buffered -// data to the underlying writer. -func (mw *Writer) Flush() error { return mw.flush() } - -// Buffered returns the number bytes in the write buffer -func (mw *Writer) Buffered() int { return len(mw.buf) - mw.wloc } - -func (mw *Writer) avail() int { return len(mw.buf) - mw.wloc } - -func (mw *Writer) bufsize() int { return len(mw.buf) } - -// NOTE: this should only be called with -// a number that is guaranteed to be less than -// len(mw.buf). typically, it is called with a constant. -// -// NOTE: this is a hot code path -func (mw *Writer) require(n int) (int, error) { - c := len(mw.buf) - wl := mw.wloc - if c-wl < n { - if err := mw.flush(); err != nil { - return 0, err - } - wl = mw.wloc - } - mw.wloc += n - return wl, nil -} - -func (mw *Writer) Append(b ...byte) error { - if mw.avail() < len(b) { - err := mw.flush() - if err != nil { - return err - } - } - mw.wloc += copy(mw.buf[mw.wloc:], b) - return nil -} - -// push one byte onto the buffer -// -// NOTE: this is a hot code path -func (mw *Writer) push(b byte) error { - if mw.wloc == len(mw.buf) { - if err := mw.flush(); err != nil { - return err - } - } - mw.buf[mw.wloc] = b - mw.wloc++ - return nil -} - -func (mw *Writer) prefix8(b byte, u uint8) error { - const need = 2 - if len(mw.buf)-mw.wloc < need { - if err := mw.flush(); err != nil { - return err - } - } - prefixu8(mw.buf[mw.wloc:], b, u) - mw.wloc += need - return nil -} - -func (mw *Writer) prefix16(b byte, u uint16) error { - const need = 3 - if len(mw.buf)-mw.wloc < need { - if err := mw.flush(); err != nil { - return err - } - } - prefixu16(mw.buf[mw.wloc:], b, u) - mw.wloc += need - return nil -} - -func (mw *Writer) prefix32(b byte, u uint32) error { - const need = 5 - if len(mw.buf)-mw.wloc < need { - if err := mw.flush(); err != nil { - return err - } - } - prefixu32(mw.buf[mw.wloc:], b, u) - mw.wloc += need - return nil -} - -func (mw *Writer) prefix64(b byte, u uint64) error { - const need = 9 - if len(mw.buf)-mw.wloc < need { - if err := mw.flush(); err != nil { - return err - } - } - prefixu64(mw.buf[mw.wloc:], b, u) - mw.wloc += need - return nil -} - -// Write implements io.Writer, and writes -// data directly to the buffer. -func (mw *Writer) Write(p []byte) (int, error) { - l := len(p) - if mw.avail() < l { - if err := mw.flush(); err != nil { - return 0, err - } - if l > len(mw.buf) { - return mw.w.Write(p) - } - } - mw.wloc += copy(mw.buf[mw.wloc:], p) - return l, nil -} - -// implements io.WriteString -func (mw *Writer) writeString(s string) error { - l := len(s) - if mw.avail() < l { - if err := mw.flush(); err != nil { - return err - } - if l > len(mw.buf) { - _, err := io.WriteString(mw.w, s) - return err - } - } - mw.wloc += copy(mw.buf[mw.wloc:], s) - return nil -} - -// Reset changes the underlying writer used by the Writer -func (mw *Writer) Reset(w io.Writer) { - mw.buf = mw.buf[:cap(mw.buf)] - mw.w = w - mw.wloc = 0 -} - -// WriteMapHeader writes a map header of the given -// size to the writer -func (mw *Writer) WriteMapHeader(sz uint32) error { - switch { - case sz <= 15: - return mw.push(wfixmap(uint8(sz))) - case sz <= math.MaxUint16: - return mw.prefix16(mmap16, uint16(sz)) - default: - return mw.prefix32(mmap32, sz) - } -} - -// WriteArrayHeader writes an array header of the -// given size to the writer -func (mw *Writer) WriteArrayHeader(sz uint32) error { - switch { - case sz <= 15: - return mw.push(wfixarray(uint8(sz))) - case sz <= math.MaxUint16: - return mw.prefix16(marray16, uint16(sz)) - default: - return mw.prefix32(marray32, sz) - } -} - -// WriteNil writes a nil byte to the buffer -func (mw *Writer) WriteNil() error { - return mw.push(mnil) -} - -// WriteFloat64 writes a float64 to the writer -func (mw *Writer) WriteFloat64(f float64) error { - return mw.prefix64(mfloat64, math.Float64bits(f)) -} - -// WriteFloat32 writes a float32 to the writer -func (mw *Writer) WriteFloat32(f float32) error { - return mw.prefix32(mfloat32, math.Float32bits(f)) -} - -// WriteInt64 writes an int64 to the writer -func (mw *Writer) WriteInt64(i int64) error { - if i >= 0 { - switch { - case i <= math.MaxInt8: - return mw.push(wfixint(uint8(i))) - case i <= math.MaxInt16: - return mw.prefix16(mint16, uint16(i)) - case i <= math.MaxInt32: - return mw.prefix32(mint32, uint32(i)) - default: - return mw.prefix64(mint64, uint64(i)) - } - } - switch { - case i >= -32: - return mw.push(wnfixint(int8(i))) - case i >= math.MinInt8: - return mw.prefix8(mint8, uint8(i)) - case i >= math.MinInt16: - return mw.prefix16(mint16, uint16(i)) - case i >= math.MinInt32: - return mw.prefix32(mint32, uint32(i)) - default: - return mw.prefix64(mint64, uint64(i)) - } -} - -// WriteInt8 writes an int8 to the writer -func (mw *Writer) WriteInt8(i int8) error { return mw.WriteInt64(int64(i)) } - -// WriteInt16 writes an int16 to the writer -func (mw *Writer) WriteInt16(i int16) error { return mw.WriteInt64(int64(i)) } - -// WriteInt32 writes an int32 to the writer -func (mw *Writer) WriteInt32(i int32) error { return mw.WriteInt64(int64(i)) } - -// WriteInt writes an int to the writer -func (mw *Writer) WriteInt(i int) error { return mw.WriteInt64(int64(i)) } - -// WriteUint64 writes a uint64 to the writer -func (mw *Writer) WriteUint64(u uint64) error { - switch { - case u <= (1<<7)-1: - return mw.push(wfixint(uint8(u))) - case u <= math.MaxUint8: - return mw.prefix8(muint8, uint8(u)) - case u <= math.MaxUint16: - return mw.prefix16(muint16, uint16(u)) - case u <= math.MaxUint32: - return mw.prefix32(muint32, uint32(u)) - default: - return mw.prefix64(muint64, u) - } -} - -// WriteByte is analogous to WriteUint8 -func (mw *Writer) WriteByte(u byte) error { return mw.WriteUint8(uint8(u)) } - -// WriteUint8 writes a uint8 to the writer -func (mw *Writer) WriteUint8(u uint8) error { return mw.WriteUint64(uint64(u)) } - -// WriteUint16 writes a uint16 to the writer -func (mw *Writer) WriteUint16(u uint16) error { return mw.WriteUint64(uint64(u)) } - -// WriteUint32 writes a uint32 to the writer -func (mw *Writer) WriteUint32(u uint32) error { return mw.WriteUint64(uint64(u)) } - -// WriteUint writes a uint to the writer -func (mw *Writer) WriteUint(u uint) error { return mw.WriteUint64(uint64(u)) } - -// WriteBytes writes binary as 'bin' to the writer -func (mw *Writer) WriteBytes(b []byte) error { - sz := uint32(len(b)) - var err error - switch { - case sz <= math.MaxUint8: - err = mw.prefix8(mbin8, uint8(sz)) - case sz <= math.MaxUint16: - err = mw.prefix16(mbin16, uint16(sz)) - default: - err = mw.prefix32(mbin32, sz) - } - if err != nil { - return err - } - _, err = mw.Write(b) - return err -} - -// WriteBytesHeader writes just the size header -// of a MessagePack 'bin' object. The user is responsible -// for then writing 'sz' more bytes into the stream. -func (mw *Writer) WriteBytesHeader(sz uint32) error { - switch { - case sz <= math.MaxUint8: - return mw.prefix8(mbin8, uint8(sz)) - case sz <= math.MaxUint16: - return mw.prefix16(mbin16, uint16(sz)) - default: - return mw.prefix32(mbin32, sz) - } -} - -// WriteBool writes a bool to the writer -func (mw *Writer) WriteBool(b bool) error { - if b { - return mw.push(mtrue) - } - return mw.push(mfalse) -} - -// WriteString writes a messagepack string to the writer. -// (This is NOT an implementation of io.StringWriter) -func (mw *Writer) WriteString(s string) error { - sz := uint32(len(s)) - var err error - switch { - case sz <= 31: - err = mw.push(wfixstr(uint8(sz))) - case sz <= math.MaxUint8: - err = mw.prefix8(mstr8, uint8(sz)) - case sz <= math.MaxUint16: - err = mw.prefix16(mstr16, uint16(sz)) - default: - err = mw.prefix32(mstr32, sz) - } - if err != nil { - return err - } - return mw.writeString(s) -} - -// WriteStringHeader writes just the string size -// header of a MessagePack 'str' object. The user -// is responsible for writing 'sz' more valid UTF-8 -// bytes to the stream. -func (mw *Writer) WriteStringHeader(sz uint32) error { - switch { - case sz <= 31: - return mw.push(wfixstr(uint8(sz))) - case sz <= math.MaxUint8: - return mw.prefix8(mstr8, uint8(sz)) - case sz <= math.MaxUint16: - return mw.prefix16(mstr16, uint16(sz)) - default: - return mw.prefix32(mstr32, sz) - } -} - -// WriteStringFromBytes writes a 'str' object -// from a []byte. -func (mw *Writer) WriteStringFromBytes(str []byte) error { - sz := uint32(len(str)) - var err error - switch { - case sz <= 31: - err = mw.push(wfixstr(uint8(sz))) - case sz <= math.MaxUint8: - err = mw.prefix8(mstr8, uint8(sz)) - case sz <= math.MaxUint16: - err = mw.prefix16(mstr16, uint16(sz)) - default: - err = mw.prefix32(mstr32, sz) - } - if err != nil { - return err - } - _, err = mw.Write(str) - return err -} - -// WriteComplex64 writes a complex64 to the writer -func (mw *Writer) WriteComplex64(f complex64) error { - o, err := mw.require(10) - if err != nil { - return err - } - mw.buf[o] = mfixext8 - mw.buf[o+1] = Complex64Extension - big.PutUint32(mw.buf[o+2:], math.Float32bits(real(f))) - big.PutUint32(mw.buf[o+6:], math.Float32bits(imag(f))) - return nil -} - -// WriteComplex128 writes a complex128 to the writer -func (mw *Writer) WriteComplex128(f complex128) error { - o, err := mw.require(18) - if err != nil { - return err - } - mw.buf[o] = mfixext16 - mw.buf[o+1] = Complex128Extension - big.PutUint64(mw.buf[o+2:], math.Float64bits(real(f))) - big.PutUint64(mw.buf[o+10:], math.Float64bits(imag(f))) - return nil -} - -// WriteMapStrStr writes a map[string]string to the writer -func (mw *Writer) WriteMapStrStr(mp map[string]string) (err error) { - err = mw.WriteMapHeader(uint32(len(mp))) - if err != nil { - return - } - for key, val := range mp { - err = mw.WriteString(key) - if err != nil { - return - } - err = mw.WriteString(val) - if err != nil { - return - } - } - return nil -} - -// WriteMapStrIntf writes a map[string]interface to the writer -func (mw *Writer) WriteMapStrIntf(mp map[string]interface{}) (err error) { - err = mw.WriteMapHeader(uint32(len(mp))) - if err != nil { - return - } - for key, val := range mp { - err = mw.WriteString(key) - if err != nil { - return - } - err = mw.WriteIntf(val) - if err != nil { - return - } - } - return -} - -// WriteTime writes a time.Time object to the wire. -// -// Time is encoded as Unix time, which means that -// location (time zone) data is removed from the object. -// The encoded object itself is 12 bytes: 8 bytes for -// a big-endian 64-bit integer denoting seconds -// elapsed since "zero" Unix time, followed by 4 bytes -// for a big-endian 32-bit signed integer denoting -// the nanosecond offset of the time. This encoding -// is intended to ease portability across languages. -// (Note that this is *not* the standard time.Time -// binary encoding, because its implementation relies -// heavily on the internal representation used by the -// time package.) -func (mw *Writer) WriteTime(t time.Time) error { - t = t.UTC() - o, err := mw.require(15) - if err != nil { - return err - } - mw.buf[o] = mext8 - mw.buf[o+1] = 12 - mw.buf[o+2] = TimeExtension - putUnix(mw.buf[o+3:], t.Unix(), int32(t.Nanosecond())) - return nil -} - -// WriteIntf writes the concrete type of 'v'. -// WriteIntf will error if 'v' is not one of the following: -// - A bool, float, string, []byte, int, uint, or complex -// - A map of supported types (with string keys) -// - An array or slice of supported types -// - A pointer to a supported type -// - A type that satisfies the msgp.Encodable interface -// - A type that satisfies the msgp.Extension interface -func (mw *Writer) WriteIntf(v interface{}) error { - if v == nil { - return mw.WriteNil() - } - switch v := v.(type) { - - // preferred interfaces - - case Encodable: - return v.EncodeMsg(mw) - case Extension: - return mw.WriteExtension(v) - - // concrete types - - case bool: - return mw.WriteBool(v) - case float32: - return mw.WriteFloat32(v) - case float64: - return mw.WriteFloat64(v) - case complex64: - return mw.WriteComplex64(v) - case complex128: - return mw.WriteComplex128(v) - case uint8: - return mw.WriteUint8(v) - case uint16: - return mw.WriteUint16(v) - case uint32: - return mw.WriteUint32(v) - case uint64: - return mw.WriteUint64(v) - case uint: - return mw.WriteUint(v) - case int8: - return mw.WriteInt8(v) - case int16: - return mw.WriteInt16(v) - case int32: - return mw.WriteInt32(v) - case int64: - return mw.WriteInt64(v) - case int: - return mw.WriteInt(v) - case string: - return mw.WriteString(v) - case []byte: - return mw.WriteBytes(v) - case map[string]string: - return mw.WriteMapStrStr(v) - case map[string]interface{}: - return mw.WriteMapStrIntf(v) - case time.Time: - return mw.WriteTime(v) - } - - val := reflect.ValueOf(v) - if !isSupported(val.Kind()) || !val.IsValid() { - return fmt.Errorf("msgp: type %s not supported", val) - } - - switch val.Kind() { - case reflect.Ptr: - if val.IsNil() { - return mw.WriteNil() - } - return mw.WriteIntf(val.Elem().Interface()) - case reflect.Slice: - return mw.writeSlice(val) - case reflect.Map: - return mw.writeMap(val) - } - return &ErrUnsupportedType{val.Type()} -} - -func (mw *Writer) writeMap(v reflect.Value) (err error) { - if v.Type().Key().Kind() != reflect.String { - return errors.New("msgp: map keys must be strings") - } - ks := v.MapKeys() - err = mw.WriteMapHeader(uint32(len(ks))) - if err != nil { - return - } - for _, key := range ks { - val := v.MapIndex(key) - err = mw.WriteString(key.String()) - if err != nil { - return - } - err = mw.WriteIntf(val.Interface()) - if err != nil { - return - } - } - return -} - -func (mw *Writer) writeSlice(v reflect.Value) (err error) { - // is []byte - if v.Type().ConvertibleTo(btsType) { - return mw.WriteBytes(v.Bytes()) - } - - sz := uint32(v.Len()) - err = mw.WriteArrayHeader(sz) - if err != nil { - return - } - for i := uint32(0); i < sz; i++ { - err = mw.WriteIntf(v.Index(int(i)).Interface()) - if err != nil { - return - } - } - return -} - -func (mw *Writer) writeStruct(v reflect.Value) error { - if enc, ok := v.Interface().(Encodable); ok { - return enc.EncodeMsg(mw) - } - return fmt.Errorf("msgp: unsupported type: %s", v.Type()) -} - -func (mw *Writer) writeVal(v reflect.Value) error { - if !isSupported(v.Kind()) { - return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type()) - } - - // shortcut for nil values - if v.IsNil() { - return mw.WriteNil() - } - switch v.Kind() { - case reflect.Bool: - return mw.WriteBool(v.Bool()) - - case reflect.Float32, reflect.Float64: - return mw.WriteFloat64(v.Float()) - - case reflect.Complex64, reflect.Complex128: - return mw.WriteComplex128(v.Complex()) - - case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int8: - return mw.WriteInt64(v.Int()) - - case reflect.Interface, reflect.Ptr: - if v.IsNil() { - mw.WriteNil() - } - return mw.writeVal(v.Elem()) - - case reflect.Map: - return mw.writeMap(v) - - case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8: - return mw.WriteUint64(v.Uint()) - - case reflect.String: - return mw.WriteString(v.String()) - - case reflect.Slice, reflect.Array: - return mw.writeSlice(v) - - case reflect.Struct: - return mw.writeStruct(v) - - } - return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type()) -} - -// is the reflect.Kind encodable? -func isSupported(k reflect.Kind) bool { - switch k { - case reflect.Func, reflect.Chan, reflect.Invalid, reflect.UnsafePointer: - return false - default: - return true - } -} - -// GuessSize guesses the size of the underlying -// value of 'i'. If the underlying value is not -// a simple builtin (or []byte), GuessSize defaults -// to 512. -func GuessSize(i interface{}) int { - if i == nil { - return NilSize - } - - switch i := i.(type) { - case Sizer: - return i.Msgsize() - case Extension: - return ExtensionPrefixSize + i.Len() - case float64: - return Float64Size - case float32: - return Float32Size - case uint8, uint16, uint32, uint64, uint: - return UintSize - case int8, int16, int32, int64, int: - return IntSize - case []byte: - return BytesPrefixSize + len(i) - case string: - return StringPrefixSize + len(i) - case complex64: - return Complex64Size - case complex128: - return Complex128Size - case bool: - return BoolSize - case map[string]interface{}: - s := MapHeaderSize - for key, val := range i { - s += StringPrefixSize + len(key) + GuessSize(val) - } - return s - case map[string]string: - s := MapHeaderSize - for key, val := range i { - s += 2*StringPrefixSize + len(key) + len(val) - } - return s - default: - return 512 - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_bytes.go b/vendor/github.com/tinylib/msgp/msgp/write_bytes.go deleted file mode 100644 index eaa03c46..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/write_bytes.go +++ /dev/null @@ -1,411 +0,0 @@ -package msgp - -import ( - "math" - "reflect" - "time" -) - -// ensure 'sz' extra bytes in 'b' btw len(b) and cap(b) -func ensure(b []byte, sz int) ([]byte, int) { - l := len(b) - c := cap(b) - if c-l < sz { - o := make([]byte, (2*c)+sz) // exponential growth - n := copy(o, b) - return o[:n+sz], n - } - return b[:l+sz], l -} - -// AppendMapHeader appends a map header with the -// given size to the slice -func AppendMapHeader(b []byte, sz uint32) []byte { - switch { - case sz <= 15: - return append(b, wfixmap(uint8(sz))) - - case sz <= math.MaxUint16: - o, n := ensure(b, 3) - prefixu16(o[n:], mmap16, uint16(sz)) - return o - - default: - o, n := ensure(b, 5) - prefixu32(o[n:], mmap32, sz) - return o - } -} - -// AppendArrayHeader appends an array header with -// the given size to the slice -func AppendArrayHeader(b []byte, sz uint32) []byte { - switch { - case sz <= 15: - return append(b, wfixarray(uint8(sz))) - - case sz <= math.MaxUint16: - o, n := ensure(b, 3) - prefixu16(o[n:], marray16, uint16(sz)) - return o - - default: - o, n := ensure(b, 5) - prefixu32(o[n:], marray32, sz) - return o - } -} - -// AppendNil appends a 'nil' byte to the slice -func AppendNil(b []byte) []byte { return append(b, mnil) } - -// AppendFloat64 appends a float64 to the slice -func AppendFloat64(b []byte, f float64) []byte { - o, n := ensure(b, Float64Size) - prefixu64(o[n:], mfloat64, math.Float64bits(f)) - return o -} - -// AppendFloat32 appends a float32 to the slice -func AppendFloat32(b []byte, f float32) []byte { - o, n := ensure(b, Float32Size) - prefixu32(o[n:], mfloat32, math.Float32bits(f)) - return o -} - -// AppendInt64 appends an int64 to the slice -func AppendInt64(b []byte, i int64) []byte { - if i >= 0 { - switch { - case i <= math.MaxInt8: - return append(b, wfixint(uint8(i))) - case i <= math.MaxInt16: - o, n := ensure(b, 3) - putMint16(o[n:], int16(i)) - return o - case i <= math.MaxInt32: - o, n := ensure(b, 5) - putMint32(o[n:], int32(i)) - return o - default: - o, n := ensure(b, 9) - putMint64(o[n:], i) - return o - } - } - switch { - case i >= -32: - return append(b, wnfixint(int8(i))) - case i >= math.MinInt8: - o, n := ensure(b, 2) - putMint8(o[n:], int8(i)) - return o - case i >= math.MinInt16: - o, n := ensure(b, 3) - putMint16(o[n:], int16(i)) - return o - case i >= math.MinInt32: - o, n := ensure(b, 5) - putMint32(o[n:], int32(i)) - return o - default: - o, n := ensure(b, 9) - putMint64(o[n:], i) - return o - } -} - -// AppendInt appends an int to the slice -func AppendInt(b []byte, i int) []byte { return AppendInt64(b, int64(i)) } - -// AppendInt8 appends an int8 to the slice -func AppendInt8(b []byte, i int8) []byte { return AppendInt64(b, int64(i)) } - -// AppendInt16 appends an int16 to the slice -func AppendInt16(b []byte, i int16) []byte { return AppendInt64(b, int64(i)) } - -// AppendInt32 appends an int32 to the slice -func AppendInt32(b []byte, i int32) []byte { return AppendInt64(b, int64(i)) } - -// AppendUint64 appends a uint64 to the slice -func AppendUint64(b []byte, u uint64) []byte { - switch { - case u <= (1<<7)-1: - return append(b, wfixint(uint8(u))) - - case u <= math.MaxUint8: - o, n := ensure(b, 2) - putMuint8(o[n:], uint8(u)) - return o - - case u <= math.MaxUint16: - o, n := ensure(b, 3) - putMuint16(o[n:], uint16(u)) - return o - - case u <= math.MaxUint32: - o, n := ensure(b, 5) - putMuint32(o[n:], uint32(u)) - return o - - default: - o, n := ensure(b, 9) - putMuint64(o[n:], u) - return o - - } -} - -// AppendUint appends a uint to the slice -func AppendUint(b []byte, u uint) []byte { return AppendUint64(b, uint64(u)) } - -// AppendUint8 appends a uint8 to the slice -func AppendUint8(b []byte, u uint8) []byte { return AppendUint64(b, uint64(u)) } - -// AppendByte is analogous to AppendUint8 -func AppendByte(b []byte, u byte) []byte { return AppendUint8(b, uint8(u)) } - -// AppendUint16 appends a uint16 to the slice -func AppendUint16(b []byte, u uint16) []byte { return AppendUint64(b, uint64(u)) } - -// AppendUint32 appends a uint32 to the slice -func AppendUint32(b []byte, u uint32) []byte { return AppendUint64(b, uint64(u)) } - -// AppendBytes appends bytes to the slice as MessagePack 'bin' data -func AppendBytes(b []byte, bts []byte) []byte { - sz := len(bts) - var o []byte - var n int - switch { - case sz <= math.MaxUint8: - o, n = ensure(b, 2+sz) - prefixu8(o[n:], mbin8, uint8(sz)) - n += 2 - case sz <= math.MaxUint16: - o, n = ensure(b, 3+sz) - prefixu16(o[n:], mbin16, uint16(sz)) - n += 3 - default: - o, n = ensure(b, 5+sz) - prefixu32(o[n:], mbin32, uint32(sz)) - n += 5 - } - return o[:n+copy(o[n:], bts)] -} - -// AppendBool appends a bool to the slice -func AppendBool(b []byte, t bool) []byte { - if t { - return append(b, mtrue) - } - return append(b, mfalse) -} - -// AppendString appends a string as a MessagePack 'str' to the slice -func AppendString(b []byte, s string) []byte { - sz := len(s) - var n int - var o []byte - switch { - case sz <= 31: - o, n = ensure(b, 1+sz) - o[n] = wfixstr(uint8(sz)) - n++ - case sz <= math.MaxUint8: - o, n = ensure(b, 2+sz) - prefixu8(o[n:], mstr8, uint8(sz)) - n += 2 - case sz <= math.MaxUint16: - o, n = ensure(b, 3+sz) - prefixu16(o[n:], mstr16, uint16(sz)) - n += 3 - default: - o, n = ensure(b, 5+sz) - prefixu32(o[n:], mstr32, uint32(sz)) - n += 5 - } - return o[:n+copy(o[n:], s)] -} - -// AppendStringFromBytes appends a []byte -// as a MessagePack 'str' to the slice 'b.' -func AppendStringFromBytes(b []byte, str []byte) []byte { - sz := len(str) - var n int - var o []byte - switch { - case sz <= 31: - o, n = ensure(b, 1+sz) - o[n] = wfixstr(uint8(sz)) - n++ - case sz <= math.MaxUint8: - o, n = ensure(b, 2+sz) - prefixu8(o[n:], mstr8, uint8(sz)) - n += 2 - case sz <= math.MaxUint16: - o, n = ensure(b, 3+sz) - prefixu16(o[n:], mstr16, uint16(sz)) - n += 3 - default: - o, n = ensure(b, 5+sz) - prefixu32(o[n:], mstr32, uint32(sz)) - n += 5 - } - return o[:n+copy(o[n:], str)] -} - -// AppendComplex64 appends a complex64 to the slice as a MessagePack extension -func AppendComplex64(b []byte, c complex64) []byte { - o, n := ensure(b, Complex64Size) - o[n] = mfixext8 - o[n+1] = Complex64Extension - big.PutUint32(o[n+2:], math.Float32bits(real(c))) - big.PutUint32(o[n+6:], math.Float32bits(imag(c))) - return o -} - -// AppendComplex128 appends a complex128 to the slice as a MessagePack extension -func AppendComplex128(b []byte, c complex128) []byte { - o, n := ensure(b, Complex128Size) - o[n] = mfixext16 - o[n+1] = Complex128Extension - big.PutUint64(o[n+2:], math.Float64bits(real(c))) - big.PutUint64(o[n+10:], math.Float64bits(imag(c))) - return o -} - -// AppendTime appends a time.Time to the slice as a MessagePack extension -func AppendTime(b []byte, t time.Time) []byte { - o, n := ensure(b, TimeSize) - t = t.UTC() - o[n] = mext8 - o[n+1] = 12 - o[n+2] = TimeExtension - putUnix(o[n+3:], t.Unix(), int32(t.Nanosecond())) - return o -} - -// AppendMapStrStr appends a map[string]string to the slice -// as a MessagePack map with 'str'-type keys and values -func AppendMapStrStr(b []byte, m map[string]string) []byte { - sz := uint32(len(m)) - b = AppendMapHeader(b, sz) - for key, val := range m { - b = AppendString(b, key) - b = AppendString(b, val) - } - return b -} - -// AppendMapStrIntf appends a map[string]interface{} to the slice -// as a MessagePack map with 'str'-type keys. -func AppendMapStrIntf(b []byte, m map[string]interface{}) ([]byte, error) { - sz := uint32(len(m)) - b = AppendMapHeader(b, sz) - var err error - for key, val := range m { - b = AppendString(b, key) - b, err = AppendIntf(b, val) - if err != nil { - return b, err - } - } - return b, nil -} - -// AppendIntf appends the concrete type of 'i' to the -// provided []byte. 'i' must be one of the following: -// - 'nil' -// - A bool, float, string, []byte, int, uint, or complex -// - A map[string]interface{} or map[string]string -// - A []T, where T is another supported type -// - A *T, where T is another supported type -// - A type that satisfieds the msgp.Marshaler interface -// - A type that satisfies the msgp.Extension interface -func AppendIntf(b []byte, i interface{}) ([]byte, error) { - if i == nil { - return AppendNil(b), nil - } - - // all the concrete types - // for which we have methods - switch i := i.(type) { - case Marshaler: - return i.MarshalMsg(b) - case Extension: - return AppendExtension(b, i) - case bool: - return AppendBool(b, i), nil - case float32: - return AppendFloat32(b, i), nil - case float64: - return AppendFloat64(b, i), nil - case complex64: - return AppendComplex64(b, i), nil - case complex128: - return AppendComplex128(b, i), nil - case string: - return AppendString(b, i), nil - case []byte: - return AppendBytes(b, i), nil - case int8: - return AppendInt8(b, i), nil - case int16: - return AppendInt16(b, i), nil - case int32: - return AppendInt32(b, i), nil - case int64: - return AppendInt64(b, i), nil - case int: - return AppendInt64(b, int64(i)), nil - case uint: - return AppendUint64(b, uint64(i)), nil - case uint8: - return AppendUint8(b, i), nil - case uint16: - return AppendUint16(b, i), nil - case uint32: - return AppendUint32(b, i), nil - case uint64: - return AppendUint64(b, i), nil - case time.Time: - return AppendTime(b, i), nil - case map[string]interface{}: - return AppendMapStrIntf(b, i) - case map[string]string: - return AppendMapStrStr(b, i), nil - case []interface{}: - b = AppendArrayHeader(b, uint32(len(i))) - var err error - for _, k := range i { - b, err = AppendIntf(b, k) - if err != nil { - return b, err - } - } - return b, nil - } - - var err error - v := reflect.ValueOf(i) - switch v.Kind() { - case reflect.Array, reflect.Slice: - l := v.Len() - b = AppendArrayHeader(b, uint32(l)) - for i := 0; i < l; i++ { - b, err = AppendIntf(b, v.Index(i).Interface()) - if err != nil { - return b, err - } - } - return b, nil - case reflect.Ptr: - if v.IsNil() { - return AppendNil(b), err - } - b, err = AppendIntf(b, v.Elem().Interface()) - return b, err - default: - return b, &ErrUnsupportedType{T: v.Type()} - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go deleted file mode 100644 index fa0b7d53..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go +++ /dev/null @@ -1,319 +0,0 @@ -package msgp - -import ( - "bytes" - "math" - "testing" - "time" -) - -func TestIssue116(t *testing.T) { - data := AppendInt64(nil, math.MinInt64) - i, _, err := ReadInt64Bytes(data) - if err != nil { - t.Fatal(err) - } - if i != math.MinInt64 { - t.Errorf("put %d in and got %d out", int64(math.MinInt64), i) - } - - var buf bytes.Buffer - - w := NewWriter(&buf) - w.WriteInt64(math.MinInt64) - w.Flush() - i, err = NewReader(&buf).ReadInt64() - if err != nil { - t.Fatal(err) - } - if i != math.MinInt64 { - t.Errorf("put %d in and got %d out", int64(math.MinInt64), i) - } -} - -func TestAppendMapHeader(t *testing.T) { - szs := []uint32{0, 1, uint32(tint8), uint32(tint16), tuint32} - var buf bytes.Buffer - en := NewWriter(&buf) - - var bts []byte - for _, sz := range szs { - buf.Reset() - en.WriteMapHeader(sz) - en.Flush() - bts = AppendMapHeader(bts[0:0], sz) - - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for size %d, encoder wrote %q and append wrote %q", sz, buf.Bytes(), bts) - } - } -} - -func BenchmarkAppendMapHeader(b *testing.B) { - buf := make([]byte, 0, 9) - N := b.N / 4 - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < N; i++ { - AppendMapHeader(buf[:0], 0) - AppendMapHeader(buf[:0], uint32(tint8)) - AppendMapHeader(buf[:0], tuint16) - AppendMapHeader(buf[:0], tuint32) - } -} - -func TestAppendArrayHeader(t *testing.T) { - szs := []uint32{0, 1, uint32(tint8), uint32(tint16), tuint32} - var buf bytes.Buffer - en := NewWriter(&buf) - - var bts []byte - for _, sz := range szs { - buf.Reset() - en.WriteArrayHeader(sz) - en.Flush() - bts = AppendArrayHeader(bts[0:0], sz) - - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for size %d, encoder wrote %q and append wrote %q", sz, buf.Bytes(), bts) - } - } -} - -func BenchmarkAppendArrayHeader(b *testing.B) { - buf := make([]byte, 0, 9) - N := b.N / 4 - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < N; i++ { - AppendArrayHeader(buf[:0], 0) - AppendArrayHeader(buf[:0], uint32(tint8)) - AppendArrayHeader(buf[:0], tuint16) - AppendArrayHeader(buf[:0], tuint32) - } -} - -func TestAppendNil(t *testing.T) { - var bts []byte - bts = AppendNil(bts[0:0]) - if bts[0] != mnil { - t.Fatal("bts[0] is not 'nil'") - } -} - -func TestAppendFloat64(t *testing.T) { - f := float64(3.14159) - var buf bytes.Buffer - en := NewWriter(&buf) - - var bts []byte - en.WriteFloat64(f) - en.Flush() - bts = AppendFloat64(bts[0:0], f) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for float %f, encoder wrote %q; append wrote %q", f, buf.Bytes(), bts) - } -} - -func BenchmarkAppendFloat64(b *testing.B) { - f := float64(3.14159) - buf := make([]byte, 0, 9) - b.SetBytes(9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendFloat64(buf[0:0], f) - } -} - -func TestAppendFloat32(t *testing.T) { - f := float32(3.14159) - var buf bytes.Buffer - en := NewWriter(&buf) - - var bts []byte - en.WriteFloat32(f) - en.Flush() - bts = AppendFloat32(bts[0:0], f) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for float %f, encoder wrote %q; append wrote %q", f, buf.Bytes(), bts) - } -} - -func BenchmarkAppendFloat32(b *testing.B) { - f := float32(3.14159) - buf := make([]byte, 0, 5) - b.SetBytes(5) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendFloat32(buf[0:0], f) - } -} - -func TestAppendInt64(t *testing.T) { - is := []int64{0, 1, -5, -50, int64(tint16), int64(tint32), int64(tint64)} - var buf bytes.Buffer - en := NewWriter(&buf) - - var bts []byte - for _, i := range is { - buf.Reset() - en.WriteInt64(i) - en.Flush() - bts = AppendInt64(bts[0:0], i) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for int64 %d, encoder wrote %q; append wrote %q", i, buf.Bytes(), bts) - } - } -} - -func BenchmarkAppendInt64(b *testing.B) { - is := []int64{0, 1, -5, -50, int64(tint16), int64(tint32), int64(tint64)} - l := len(is) - buf := make([]byte, 0, 9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendInt64(buf[0:0], is[i%l]) - } -} - -func TestAppendUint64(t *testing.T) { - us := []uint64{0, 1, uint64(tuint16), uint64(tuint32), tuint64} - var buf bytes.Buffer - en := NewWriter(&buf) - var bts []byte - - for _, u := range us { - buf.Reset() - en.WriteUint64(u) - en.Flush() - bts = AppendUint64(bts[0:0], u) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for uint64 %d, encoder wrote %q; append wrote %q", u, buf.Bytes(), bts) - } - } -} - -func BenchmarkAppendUint64(b *testing.B) { - us := []uint64{0, 1, 15, uint64(tuint16), uint64(tuint32), tuint64} - buf := make([]byte, 0, 9) - b.ReportAllocs() - b.ResetTimer() - l := len(us) - for i := 0; i < b.N; i++ { - AppendUint64(buf[0:0], us[i%l]) - } -} - -func TestAppendBytes(t *testing.T) { - sizes := []int{0, 1, 225, int(tuint32)} - var buf bytes.Buffer - en := NewWriter(&buf) - var bts []byte - - for _, sz := range sizes { - buf.Reset() - b := RandBytes(sz) - en.WriteBytes(b) - en.Flush() - bts = AppendBytes(b[0:0], b) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for bytes of length %d, encoder wrote %d bytes and append wrote %d bytes", sz, buf.Len(), len(bts)) - } - } -} - -func benchappendBytes(size uint32, b *testing.B) { - bts := RandBytes(int(size)) - buf := make([]byte, 0, len(bts)+5) - b.SetBytes(int64(len(bts) + 5)) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendBytes(buf[0:0], bts) - } -} - -func BenchmarkAppend16Bytes(b *testing.B) { benchappendBytes(16, b) } - -func BenchmarkAppend256Bytes(b *testing.B) { benchappendBytes(256, b) } - -func BenchmarkAppend2048Bytes(b *testing.B) { benchappendBytes(2048, b) } - -func TestAppendString(t *testing.T) { - sizes := []int{0, 1, 225, int(tuint32)} - var buf bytes.Buffer - en := NewWriter(&buf) - var bts []byte - - for _, sz := range sizes { - buf.Reset() - s := string(RandBytes(sz)) - en.WriteString(s) - en.Flush() - bts = AppendString(bts[0:0], s) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for string of length %d, encoder wrote %d bytes and append wrote %d bytes", sz, buf.Len(), len(bts)) - t.Errorf("WriteString prefix: %x", buf.Bytes()[0:5]) - t.Errorf("Appendstring prefix: %x", bts[0:5]) - } - } -} - -func benchappendString(size uint32, b *testing.B) { - str := string(RandBytes(int(size))) - buf := make([]byte, 0, len(str)+5) - b.SetBytes(int64(len(str) + 5)) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendString(buf[0:0], str) - } -} - -func BenchmarkAppend16String(b *testing.B) { benchappendString(16, b) } - -func BenchmarkAppend256String(b *testing.B) { benchappendString(256, b) } - -func BenchmarkAppend2048String(b *testing.B) { benchappendString(2048, b) } - -func TestAppendBool(t *testing.T) { - vs := []bool{true, false} - var buf bytes.Buffer - en := NewWriter(&buf) - var bts []byte - - for _, v := range vs { - buf.Reset() - en.WriteBool(v) - en.Flush() - bts = AppendBool(bts[0:0], v) - if !bytes.Equal(buf.Bytes(), bts) { - t.Errorf("for %t, encoder wrote %q and append wrote %q", v, buf.Bytes(), bts) - } - } -} - -func BenchmarkAppendBool(b *testing.B) { - vs := []bool{true, false} - buf := make([]byte, 0, 1) - b.SetBytes(1) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendBool(buf[0:0], vs[i%2]) - } -} - -func BenchmarkAppendTime(b *testing.B) { - t := time.Now() - b.SetBytes(15) - buf := make([]byte, 0, 15) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - AppendTime(buf[0:0], t) - } -} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_test.go b/vendor/github.com/tinylib/msgp/msgp/write_test.go deleted file mode 100644 index c5e97fe2..00000000 --- a/vendor/github.com/tinylib/msgp/msgp/write_test.go +++ /dev/null @@ -1,405 +0,0 @@ -package msgp - -import ( - "bytes" - "math" - "math/rand" - "testing" - "time" -) - -var ( - tint8 int8 = 126 // cannot be most fix* types - tint16 int16 = 150 // cannot be int8 - tint32 int32 = math.MaxInt16 + 100 // cannot be int16 - tint64 int64 = math.MaxInt32 + 100 // cannot be int32 - tuint16 uint32 = 300 // cannot be uint8 - tuint32 uint32 = math.MaxUint16 + 100 // cannot be uint16 - tuint64 uint64 = math.MaxUint32 + 100 // cannot be uint32 -) - -func RandBytes(sz int) []byte { - out := make([]byte, sz) - for i := range out { - out[i] = byte(rand.Int63n(math.MaxInt64) % 256) - } - return out -} - -func TestWriteMapHeader(t *testing.T) { - tests := []struct { - Sz uint32 - Outbytes []byte - }{ - {0, []byte{mfixmap}}, - {1, []byte{mfixmap | byte(1)}}, - {100, []byte{mmap16, byte(uint16(100) >> 8), byte(uint16(100))}}, - {tuint32, - []byte{mmap32, - byte(tuint32 >> 24), - byte(tuint32 >> 16), - byte(tuint32 >> 8), - byte(tuint32), - }, - }, - } - - var buf bytes.Buffer - var err error - wr := NewWriter(&buf) - for _, test := range tests { - buf.Reset() - err = wr.WriteMapHeader(test.Sz) - if err != nil { - t.Error(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), test.Outbytes) { - t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes()) - } - } -} - -func BenchmarkWriteMapHeader(b *testing.B) { - wr := NewWriter(Nowhere) - N := b.N / 4 - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < N; i++ { - wr.WriteMapHeader(0) - wr.WriteMapHeader(8) - wr.WriteMapHeader(tuint16) - wr.WriteMapHeader(tuint32) - } -} - -func TestWriteArrayHeader(t *testing.T) { - tests := []struct { - Sz uint32 - Outbytes []byte - }{ - {0, []byte{mfixarray}}, - {1, []byte{mfixarray | byte(1)}}, - {tuint16, []byte{marray16, byte(tuint16 >> 8), byte(tuint16)}}, - {tuint32, []byte{marray32, byte(tuint32 >> 24), byte(tuint32 >> 16), byte(tuint32 >> 8), byte(tuint32)}}, - } - - var buf bytes.Buffer - var err error - wr := NewWriter(&buf) - for _, test := range tests { - buf.Reset() - err = wr.WriteArrayHeader(test.Sz) - if err != nil { - t.Error(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), test.Outbytes) { - t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes()) - } - } -} - -func TestReadWriteStringHeader(t *testing.T) { - sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32} - var buf bytes.Buffer - var err error - wr := NewWriter(&buf) - for _, sz := range sizes { - buf.Reset() - err = wr.WriteStringHeader(sz) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - var nsz uint32 - nsz, err = NewReader(&buf).ReadStringHeader() - if err != nil { - t.Fatal(err) - } - if nsz != sz { - t.Errorf("put in size %d but got out size %d", sz, nsz) - } - } -} - -func TestReadWriteBytesHeader(t *testing.T) { - sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32} - var buf bytes.Buffer - var err error - wr := NewWriter(&buf) - for _, sz := range sizes { - buf.Reset() - err = wr.WriteBytesHeader(sz) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - var nsz uint32 - nsz, err = NewReader(&buf).ReadBytesHeader() - if err != nil { - t.Fatal(err) - } - if nsz != sz { - t.Errorf("put in size %d but got out size %d", sz, nsz) - } - } -} - -func BenchmarkWriteArrayHeader(b *testing.B) { - wr := NewWriter(Nowhere) - N := b.N / 4 - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < N; i++ { - wr.WriteArrayHeader(0) - wr.WriteArrayHeader(16) - wr.WriteArrayHeader(tuint16) - wr.WriteArrayHeader(tuint32) - } -} - -func TestWriteNil(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - - err := wr.WriteNil() - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - bts := buf.Bytes() - if bts[0] != mnil { - t.Errorf("Expected %x; wrote %x", mnil, bts[0]) - } -} - -func TestWriteFloat64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - - for i := 0; i < 10000; i++ { - buf.Reset() - flt := (rand.Float64() - 0.5) * math.MaxFloat64 - err := wr.WriteFloat64(flt) - if err != nil { - t.Errorf("Error with %f: %s", flt, err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - bts := buf.Bytes() - - if bts[0] != mfloat64 { - t.Errorf("Leading byte was %x and not %x", bts[0], mfloat64) - } - } -} - -func BenchmarkWriteFloat64(b *testing.B) { - f := rand.Float64() - wr := NewWriter(Nowhere) - b.SetBytes(9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteFloat64(f) - } -} - -func TestWriteFloat32(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - - for i := 0; i < 10000; i++ { - buf.Reset() - flt := (rand.Float32() - 0.5) * math.MaxFloat32 - err := wr.WriteFloat32(flt) - if err != nil { - t.Errorf("Error with %f: %s", flt, err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - bts := buf.Bytes() - - if bts[0] != mfloat32 { - t.Errorf("Leading byte was %x and not %x", bts[0], mfloat64) - } - } -} - -func BenchmarkWriteFloat32(b *testing.B) { - f := rand.Float32() - wr := NewWriter(Nowhere) - b.SetBytes(5) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteFloat32(f) - } -} - -func TestWriteInt64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - - for i := 0; i < 10000; i++ { - buf.Reset() - - num := (rand.Int63n(math.MaxInt64)) - (math.MaxInt64 / 2) - - err := wr.WriteInt64(num) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - if buf.Len() > 9 { - t.Errorf("buffer length should be <= 9; it's %d", buf.Len()) - } - } -} - -func BenchmarkWriteInt64(b *testing.B) { - wr := NewWriter(Nowhere) - b.SetBytes(9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteInt64(int64(tint64)) - } -} - -func TestWriteUint64(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - - for i := 0; i < 10000; i++ { - buf.Reset() - - num := uint64(rand.Int63n(math.MaxInt64)) - - err := wr.WriteUint64(num) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - if buf.Len() > 9 { - t.Errorf("buffer length should be <= 9; it's %d", buf.Len()) - } - } -} - -func BenchmarkWriteUint64(b *testing.B) { - wr := NewWriter(Nowhere) - b.SetBytes(9) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteUint64(uint64(tuint64)) - } -} - -func TestWriteBytes(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - sizes := []int{0, 1, 225, int(tuint32)} - - for _, size := range sizes { - buf.Reset() - bts := RandBytes(size) - - err := wr.WriteBytes(bts) - if err != nil { - t.Fatal(err) - } - - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - - if buf.Len() < len(bts) { - t.Errorf("somehow, %d bytes were encoded in %d bytes", len(bts), buf.Len()) - } - } -} - -func benchwrBytes(size uint32, b *testing.B) { - bts := RandBytes(int(size)) - wr := NewWriter(Nowhere) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteBytes(bts) - } -} - -func BenchmarkWrite16Bytes(b *testing.B) { benchwrBytes(16, b) } - -func BenchmarkWrite256Bytes(b *testing.B) { benchwrBytes(256, b) } - -func BenchmarkWrite2048Bytes(b *testing.B) { benchwrBytes(2048, b) } - -func TestWriteTime(t *testing.T) { - var buf bytes.Buffer - wr := NewWriter(&buf) - tm := time.Now() - err := wr.WriteTime(tm) - if err != nil { - t.Fatal(err) - } - err = wr.Flush() - if err != nil { - t.Fatal(err) - } - if buf.Len() != 15 { - t.Errorf("expected time.Time to be %d bytes; got %d", 15, buf.Len()) - } - - newt, err := NewReader(&buf).ReadTime() - if err != nil { - t.Fatal(err) - } - if !newt.Equal(tm) { - t.Errorf("in/out not equal; %s in and %s out", tm, newt) - } -} - -func BenchmarkWriteTime(b *testing.B) { - t := time.Now() - wr := NewWriter(Nowhere) - b.SetBytes(15) - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - wr.WriteTime(t) - } -} diff --git a/vendor/github.com/tinylib/msgp/parse/directives.go b/vendor/github.com/tinylib/msgp/parse/directives.go deleted file mode 100644 index fb78974b..00000000 --- a/vendor/github.com/tinylib/msgp/parse/directives.go +++ /dev/null @@ -1,117 +0,0 @@ -package parse - -import ( - "fmt" - "github.com/tinylib/msgp/gen" - "go/ast" - "strings" -) - -const linePrefix = "//msgp:" - -// func(args, fileset) -type directive func([]string, *FileSet) error - -// func(passName, args, printer) -type passDirective func(gen.Method, []string, *gen.Printer) error - -// map of all recognized directives -// -// to add a directive, define a func([]string, *FileSet) error -// and then add it to this list. -var directives = map[string]directive{ - "shim": applyShim, - "ignore": ignore, - "tuple": astuple, -} - -var passDirectives = map[string]passDirective{ - "ignore": passignore, -} - -func passignore(m gen.Method, text []string, p *gen.Printer) error { - pushstate(m.String()) - for _, a := range text { - p.ApplyDirective(m, gen.IgnoreTypename(a)) - infof("ignoring %s\n", a) - } - popstate() - return nil -} - -// find all comment lines that begin with //msgp: -func yieldComments(c []*ast.CommentGroup) []string { - var out []string - for _, cg := range c { - for _, line := range cg.List { - if strings.HasPrefix(line.Text, linePrefix) { - out = append(out, strings.TrimPrefix(line.Text, linePrefix)) - } - } - } - return out -} - -//msgp:shim {Type} as:{Newtype} using:{toFunc/fromFunc} -func applyShim(text []string, f *FileSet) error { - if len(text) != 4 { - return fmt.Errorf("shim directive should have 3 arguments; found %d", len(text)-1) - } - - name := text[1] - be := gen.Ident(strings.TrimPrefix(strings.TrimSpace(text[2]), "as:")) // parse as::{base} - if name[0] == '*' { - name = name[1:] - be.Needsref(true) - } - be.Alias(name) - - usestr := strings.TrimPrefix(strings.TrimSpace(text[3]), "using:") // parse using::{method/method} - - methods := strings.Split(usestr, "/") - if len(methods) != 2 { - return fmt.Errorf("expected 2 using::{} methods; found %d (%q)", len(methods), text[3]) - } - - be.ShimToBase = methods[0] - be.ShimFromBase = methods[1] - - infof("%s -> %s\n", name, be.Value.String()) - f.findShim(name, be) - - return nil -} - -//msgp:ignore {TypeA} {TypeB}... -func ignore(text []string, f *FileSet) error { - if len(text) < 2 { - return nil - } - for _, item := range text[1:] { - name := strings.TrimSpace(item) - if _, ok := f.Identities[name]; ok { - delete(f.Identities, name) - infof("ignoring %s\n", name) - } - } - return nil -} - -//msgp:tuple {TypeA} {TypeB}... -func astuple(text []string, f *FileSet) error { - if len(text) < 2 { - return nil - } - for _, item := range text[1:] { - name := strings.TrimSpace(item) - if el, ok := f.Identities[name]; ok { - if st, ok := el.(*gen.Struct); ok { - st.AsTuple = true - infoln(name) - } else { - warnf("%s: only structs can be tuples\n", name) - } - } - } - return nil -} diff --git a/vendor/github.com/tinylib/msgp/parse/getast.go b/vendor/github.com/tinylib/msgp/parse/getast.go deleted file mode 100644 index 355ad772..00000000 --- a/vendor/github.com/tinylib/msgp/parse/getast.go +++ /dev/null @@ -1,589 +0,0 @@ -package parse - -import ( - "fmt" - "go/ast" - "go/parser" - "go/token" - "os" - "reflect" - "sort" - "strings" - - "github.com/tinylib/msgp/gen" - "github.com/ttacon/chalk" -) - -// A FileSet is the in-memory representation of a -// parsed file. -type FileSet struct { - Package string // package name - Specs map[string]ast.Expr // type specs in file - Identities map[string]gen.Elem // processed from specs - Directives []string // raw preprocessor directives - Imports []*ast.ImportSpec // imports -} - -// File parses a file at the relative path -// provided and produces a new *FileSet. -// If you pass in a path to a directory, the entire -// directory will be parsed. -// If unexport is false, only exported identifiers are included in the FileSet. -// If the resulting FileSet would be empty, an error is returned. -func File(name string, unexported bool) (*FileSet, error) { - pushstate(name) - defer popstate() - fs := &FileSet{ - Specs: make(map[string]ast.Expr), - Identities: make(map[string]gen.Elem), - } - - fset := token.NewFileSet() - finfo, err := os.Stat(name) - if err != nil { - return nil, err - } - if finfo.IsDir() { - pkgs, err := parser.ParseDir(fset, name, nil, parser.ParseComments) - if err != nil { - return nil, err - } - if len(pkgs) != 1 { - return nil, fmt.Errorf("multiple packages in directory: %s", name) - } - var one *ast.Package - for _, nm := range pkgs { - one = nm - break - } - fs.Package = one.Name - for _, fl := range one.Files { - pushstate(fl.Name.Name) - fs.Directives = append(fs.Directives, yieldComments(fl.Comments)...) - if !unexported { - ast.FileExports(fl) - } - fs.getTypeSpecs(fl) - popstate() - } - } else { - f, err := parser.ParseFile(fset, name, nil, parser.ParseComments) - if err != nil { - return nil, err - } - fs.Package = f.Name.Name - fs.Directives = yieldComments(f.Comments) - if !unexported { - ast.FileExports(f) - } - fs.getTypeSpecs(f) - } - - if len(fs.Specs) == 0 { - return nil, fmt.Errorf("no definitions in %s", name) - } - - fs.process() - fs.applyDirectives() - fs.propInline() - - return fs, nil -} - -// applyDirectives applies all of the directives that -// are known to the parser. additional method-specific -// directives remain in f.Directives -func (f *FileSet) applyDirectives() { - newdirs := make([]string, 0, len(f.Directives)) - for _, d := range f.Directives { - chunks := strings.Split(d, " ") - if len(chunks) > 0 { - if fn, ok := directives[chunks[0]]; ok { - pushstate(chunks[0]) - err := fn(chunks, f) - if err != nil { - warnln(err.Error()) - } - popstate() - } else { - newdirs = append(newdirs, d) - } - } - } - f.Directives = newdirs -} - -// A linkset is a graph of unresolved -// identities. -// -// Since gen.Ident can only represent -// one level of type indirection (e.g. Foo -> uint8), -// type declarations like `type Foo Bar` -// aren't resolve-able until we've processed -// everything else. -// -// The goal of this dependency resolution -// is to distill the type declaration -// into just one level of indirection. -// In other words, if we have: -// -// type A uint64 -// type B A -// type C B -// type D C -// -// ... then we want to end up -// figuring out that D is just a uint64. -type linkset map[string]*gen.BaseElem - -func (f *FileSet) resolve(ls linkset) { - progress := true - for progress && len(ls) > 0 { - progress = false - for name, elem := range ls { - real, ok := f.Identities[elem.TypeName()] - if ok { - // copy the old type descriptor, - // alias it to the new value, - // and insert it into the resolved - // identities list - progress = true - nt := real.Copy() - nt.Alias(name) - f.Identities[name] = nt - delete(ls, name) - } - } - } - - // what's left can't be resolved - for name, elem := range ls { - warnf("couldn't resolve type %s (%s)\n", name, elem.TypeName()) - } -} - -// process takes the contents of f.Specs and -// uses them to populate f.Identities -func (f *FileSet) process() { - - deferred := make(linkset) -parse: - for name, def := range f.Specs { - pushstate(name) - el := f.parseExpr(def) - if el == nil { - warnln("failed to parse") - popstate() - continue parse - } - // push unresolved identities into - // the graph of links and resolve after - // we've handled every possible named type. - if be, ok := el.(*gen.BaseElem); ok && be.Value == gen.IDENT { - deferred[name] = be - popstate() - continue parse - } - el.Alias(name) - f.Identities[name] = el - popstate() - } - - if len(deferred) > 0 { - f.resolve(deferred) - } -} - -func strToMethod(s string) gen.Method { - switch s { - case "encode": - return gen.Encode - case "decode": - return gen.Decode - case "test": - return gen.Test - case "size": - return gen.Size - case "marshal": - return gen.Marshal - case "unmarshal": - return gen.Unmarshal - default: - return 0 - } -} - -func (f *FileSet) applyDirs(p *gen.Printer) { - // apply directives of the form - // - // //msgp:encode ignore {{TypeName}} - // -loop: - for _, d := range f.Directives { - chunks := strings.Split(d, " ") - if len(chunks) > 1 { - for i := range chunks { - chunks[i] = strings.TrimSpace(chunks[i]) - } - m := strToMethod(chunks[0]) - if m == 0 { - warnf("unknown pass name: %q\n", chunks[0]) - continue loop - } - if fn, ok := passDirectives[chunks[1]]; ok { - pushstate(chunks[1]) - err := fn(m, chunks[2:], p) - if err != nil { - warnf("error applying directive: %s\n", err) - } - popstate() - } else { - warnf("unrecognized directive %q\n", chunks[1]) - } - } else { - warnf("empty directive: %q\n", d) - } - } -} - -func (f *FileSet) PrintTo(p *gen.Printer) error { - f.applyDirs(p) - names := make([]string, 0, len(f.Identities)) - for name := range f.Identities { - names = append(names, name) - } - sort.Strings(names) - for _, name := range names { - el := f.Identities[name] - el.SetVarname("z") - pushstate(el.TypeName()) - err := p.Print(el) - popstate() - if err != nil { - return err - } - } - return nil -} - -// getTypeSpecs extracts all of the *ast.TypeSpecs in the file -// into fs.Identities, but does not set the actual element -func (fs *FileSet) getTypeSpecs(f *ast.File) { - - // collect all imports... - fs.Imports = append(fs.Imports, f.Imports...) - - // check all declarations... - for i := range f.Decls { - - // for GenDecls... - if g, ok := f.Decls[i].(*ast.GenDecl); ok { - - // and check the specs... - for _, s := range g.Specs { - - // for ast.TypeSpecs.... - if ts, ok := s.(*ast.TypeSpec); ok { - switch ts.Type.(type) { - - // this is the list of parse-able - // type specs - case *ast.StructType, - *ast.ArrayType, - *ast.StarExpr, - *ast.MapType, - *ast.Ident: - fs.Specs[ts.Name.Name] = ts.Type - - } - } - } - } - } -} - -func fieldName(f *ast.Field) string { - switch len(f.Names) { - case 0: - return stringify(f.Type) - case 1: - return f.Names[0].Name - default: - return f.Names[0].Name + " (and others)" - } -} - -func (fs *FileSet) parseFieldList(fl *ast.FieldList) []gen.StructField { - if fl == nil || fl.NumFields() == 0 { - return nil - } - out := make([]gen.StructField, 0, fl.NumFields()) - for _, field := range fl.List { - pushstate(fieldName(field)) - fds := fs.getField(field) - if len(fds) > 0 { - out = append(out, fds...) - } else { - warnln("ignored.") - } - popstate() - } - return out -} - -// translate *ast.Field into []gen.StructField -func (fs *FileSet) getField(f *ast.Field) []gen.StructField { - sf := make([]gen.StructField, 1) - var extension bool - // parse tag; otherwise field name is field tag - if f.Tag != nil { - body := reflect.StructTag(strings.Trim(f.Tag.Value, "`")).Get("msg") - tags := strings.Split(body, ",") - if len(tags) == 2 && tags[1] == "extension" { - extension = true - } - // ignore "-" fields - if tags[0] == "-" { - return nil - } - sf[0].FieldTag = tags[0] - } - - ex := fs.parseExpr(f.Type) - if ex == nil { - return nil - } - - // parse field name - switch len(f.Names) { - case 0: - sf[0].FieldName = embedded(f.Type) - case 1: - sf[0].FieldName = f.Names[0].Name - default: - // this is for a multiple in-line declaration, - // e.g. type A struct { One, Two int } - sf = sf[0:0] - for _, nm := range f.Names { - sf = append(sf, gen.StructField{ - FieldTag: nm.Name, - FieldName: nm.Name, - FieldElem: ex.Copy(), - }) - } - return sf - } - sf[0].FieldElem = ex - if sf[0].FieldTag == "" { - sf[0].FieldTag = sf[0].FieldName - } - - // validate extension - if extension { - switch ex := ex.(type) { - case *gen.Ptr: - if b, ok := ex.Value.(*gen.BaseElem); ok { - b.Value = gen.Ext - } else { - warnln("couldn't cast to extension.") - return nil - } - case *gen.BaseElem: - ex.Value = gen.Ext - default: - warnln("couldn't cast to extension.") - return nil - } - } - return sf -} - -// extract embedded field name -// -// so, for a struct like -// -// type A struct { -// io.Writer -// } -// -// we want "Writer" -func embedded(f ast.Expr) string { - switch f := f.(type) { - case *ast.Ident: - return f.Name - case *ast.StarExpr: - return embedded(f.X) - case *ast.SelectorExpr: - return f.Sel.Name - default: - // other possibilities are disallowed - return "" - } -} - -// stringify a field type name -func stringify(e ast.Expr) string { - switch e := e.(type) { - case *ast.Ident: - return e.Name - case *ast.StarExpr: - return "*" + stringify(e.X) - case *ast.SelectorExpr: - return stringify(e.X) + "." + e.Sel.Name - case *ast.ArrayType: - if e.Len == nil { - return "[]" + stringify(e.Elt) - } - return fmt.Sprintf("[%s]%s", stringify(e.Len), stringify(e.Elt)) - case *ast.InterfaceType: - if e.Methods == nil || e.Methods.NumFields() == 0 { - return "interface{}" - } - } - return "" -} - -// recursively translate ast.Expr to gen.Elem; nil means type not supported -// expected input types: -// - *ast.MapType (map[T]J) -// - *ast.Ident (name) -// - *ast.ArrayType ([(sz)]T) -// - *ast.StarExpr (*T) -// - *ast.StructType (struct {}) -// - *ast.SelectorExpr (a.B) -// - *ast.InterfaceType (interface {}) -func (fs *FileSet) parseExpr(e ast.Expr) gen.Elem { - switch e := e.(type) { - - case *ast.MapType: - if k, ok := e.Key.(*ast.Ident); ok && k.Name == "string" { - if in := fs.parseExpr(e.Value); in != nil { - return &gen.Map{Value: in} - } - } - return nil - - case *ast.Ident: - b := gen.Ident(e.Name) - - // work to resove this expression - // can be done later, once we've resolved - // everything else. - if b.Value == gen.IDENT { - if _, ok := fs.Specs[e.Name]; !ok { - warnf("non-local identifier: %s\n", e.Name) - } - } - return b - - case *ast.ArrayType: - - // special case for []byte - if e.Len == nil { - if i, ok := e.Elt.(*ast.Ident); ok && i.Name == "byte" { - return &gen.BaseElem{Value: gen.Bytes} - } - } - - // return early if we don't know - // what the slice element type is - els := fs.parseExpr(e.Elt) - if els == nil { - return nil - } - - // array and not a slice - if e.Len != nil { - switch s := e.Len.(type) { - case *ast.BasicLit: - return &gen.Array{ - Size: s.Value, - Els: els, - } - - case *ast.Ident: - return &gen.Array{ - Size: s.String(), - Els: els, - } - - case *ast.SelectorExpr: - return &gen.Array{ - Size: stringify(s), - Els: els, - } - - default: - return nil - } - } - return &gen.Slice{Els: els} - - case *ast.StarExpr: - if v := fs.parseExpr(e.X); v != nil { - return &gen.Ptr{Value: v} - } - return nil - - case *ast.StructType: - if fields := fs.parseFieldList(e.Fields); len(fields) > 0 { - return &gen.Struct{Fields: fields} - } - return nil - - case *ast.SelectorExpr: - return gen.Ident(stringify(e)) - - case *ast.InterfaceType: - // support `interface{}` - if len(e.Methods.List) == 0 { - return &gen.BaseElem{Value: gen.Intf} - } - return nil - - default: // other types not supported - return nil - } -} - -func infof(s string, v ...interface{}) { - pushstate(s) - fmt.Printf(chalk.Green.Color(strings.Join(logctx, ": ")), v...) - popstate() -} - -func infoln(s string) { - pushstate(s) - fmt.Println(chalk.Green.Color(strings.Join(logctx, ": "))) - popstate() -} - -func warnf(s string, v ...interface{}) { - pushstate(s) - fmt.Printf(chalk.Yellow.Color(strings.Join(logctx, ": ")), v...) - popstate() -} - -func warnln(s string) { - pushstate(s) - fmt.Println(chalk.Yellow.Color(strings.Join(logctx, ": "))) - popstate() -} - -func fatalf(s string, v ...interface{}) { - pushstate(s) - fmt.Printf(chalk.Red.Color(strings.Join(logctx, ": ")), v...) - popstate() -} - -var logctx []string - -// push logging state -func pushstate(s string) { - logctx = append(logctx, s) -} - -// pop logging state -func popstate() { - logctx = logctx[:len(logctx)-1] -} diff --git a/vendor/github.com/tinylib/msgp/parse/inline.go b/vendor/github.com/tinylib/msgp/parse/inline.go deleted file mode 100644 index 5dba4e56..00000000 --- a/vendor/github.com/tinylib/msgp/parse/inline.go +++ /dev/null @@ -1,146 +0,0 @@ -package parse - -import ( - "github.com/tinylib/msgp/gen" -) - -// This file defines when and how we -// propagate type information from -// one type declaration to another. -// After the processing pass, every -// non-primitive type is marshalled/unmarshalled/etc. -// through a function call. Here, we propagate -// the type information into the caller's type -// tree *if* the child type is simple enough. -// -// For example, types like -// -// type A [4]int -// -// will get pushed into parent methods, -// whereas types like -// -// type B [3]map[string]struct{A, B [4]string} -// -// will not. - -// this is an approximate measure -// of the number of children in a node -const maxComplex = 5 - -// begin recursive search for identities with the -// given name and replace them with be -func (f *FileSet) findShim(id string, be *gen.BaseElem) { - for name, el := range f.Identities { - pushstate(name) - switch el := el.(type) { - case *gen.Struct: - for i := range el.Fields { - f.nextShim(&el.Fields[i].FieldElem, id, be) - } - case *gen.Array: - f.nextShim(&el.Els, id, be) - case *gen.Slice: - f.nextShim(&el.Els, id, be) - case *gen.Map: - f.nextShim(&el.Value, id, be) - case *gen.Ptr: - f.nextShim(&el.Value, id, be) - } - popstate() - } - // we'll need this at the top level as well - f.Identities[id] = be -} - -func (f *FileSet) nextShim(ref *gen.Elem, id string, be *gen.BaseElem) { - if (*ref).TypeName() == id { - vn := (*ref).Varname() - *ref = be.Copy() - (*ref).SetVarname(vn) - } else { - switch el := (*ref).(type) { - case *gen.Struct: - for i := range el.Fields { - f.nextShim(&el.Fields[i].FieldElem, id, be) - } - case *gen.Array: - f.nextShim(&el.Els, id, be) - case *gen.Slice: - f.nextShim(&el.Els, id, be) - case *gen.Map: - f.nextShim(&el.Value, id, be) - case *gen.Ptr: - f.nextShim(&el.Value, id, be) - } - } -} - -// propInline identifies and inlines candidates -func (f *FileSet) propInline() { - for name, el := range f.Identities { - pushstate(name) - switch el := el.(type) { - case *gen.Struct: - for i := range el.Fields { - f.nextInline(&el.Fields[i].FieldElem, name) - } - case *gen.Array: - f.nextInline(&el.Els, name) - case *gen.Slice: - f.nextInline(&el.Els, name) - case *gen.Map: - f.nextInline(&el.Value, name) - case *gen.Ptr: - f.nextInline(&el.Value, name) - } - popstate() - } -} - -const fatalloop = `detected infinite recursion in inlining loop! -Please file a bug at github.com/tinylib/msgp/issues! -Thanks! -` - -func (f *FileSet) nextInline(ref *gen.Elem, root string) { - switch el := (*ref).(type) { - case *gen.BaseElem: - // ensure that we're not inlining - // a type into itself - typ := el.TypeName() - if el.Value == gen.IDENT && typ != root { - if node, ok := f.Identities[typ]; ok && node.Complexity() < maxComplex { - infof("inlining %s\n", typ) - - // This should never happen; it will cause - // infinite recursion. - if node == *ref { - panic(fatalloop) - } - - *ref = node.Copy() - f.nextInline(ref, node.TypeName()) - } else if !ok && !el.Resolved() { - // this is the point at which we're sure that - // we've got a type that isn't a primitive, - // a library builtin, or a processed type - warnf("unresolved identifier: %s\n", typ) - } - } - case *gen.Struct: - for i := range el.Fields { - f.nextInline(&el.Fields[i].FieldElem, root) - } - case *gen.Array: - f.nextInline(&el.Els, root) - case *gen.Slice: - f.nextInline(&el.Els, root) - case *gen.Map: - f.nextInline(&el.Value, root) - case *gen.Ptr: - f.nextInline(&el.Value, root) - default: - panic("bad elem type") - } -} diff --git a/vendor/github.com/tinylib/msgp/printer/print.go b/vendor/github.com/tinylib/msgp/printer/print.go deleted file mode 100644 index 4766871f..00000000 --- a/vendor/github.com/tinylib/msgp/printer/print.go +++ /dev/null @@ -1,128 +0,0 @@ -package printer - -import ( - "bytes" - "fmt" - "github.com/tinylib/msgp/gen" - "github.com/tinylib/msgp/parse" - "github.com/ttacon/chalk" - "golang.org/x/tools/imports" - "io" - "io/ioutil" - "strings" -) - -func infof(s string, v ...interface{}) { - fmt.Printf(chalk.Magenta.Color(s), v...) -} - -// PrintFile prints the methods for the provided list -// of elements to the given file name and canonical -// package path. -func PrintFile(file string, f *parse.FileSet, mode gen.Method) error { - out, tests, err := generate(f, mode) - if err != nil { - return err - } - - // we'll run goimports on the main file - // in another goroutine, and run it here - // for the test file. empirically, this - // takes about the same amount of time as - // doing them in serial when GOMAXPROCS=1, - // and faster otherwise. - res := goformat(file, out.Bytes()) - if tests != nil { - testfile := strings.TrimSuffix(file, ".go") + "_test.go" - err = format(testfile, tests.Bytes()) - if err != nil { - return err - } - infof(">>> Wrote and formatted \"%s\"\n", testfile) - } - err = <-res - if err != nil { - return err - } - return nil -} - -func format(file string, data []byte) error { - out, err := imports.Process(file, data, nil) - if err != nil { - return err - } - return ioutil.WriteFile(file, out, 0600) -} - -func goformat(file string, data []byte) <-chan error { - out := make(chan error, 1) - go func(file string, data []byte, end chan error) { - end <- format(file, data) - infof(">>> Wrote and formatted \"%s\"\n", file) - }(file, data, out) - return out -} - -func dedupImports(imp []string) []string { - m := make(map[string]struct{}) - for i := range imp { - m[imp[i]] = struct{}{} - } - r := []string{} - for k := range m { - r = append(r, k) - } - return r -} - -func generate(f *parse.FileSet, mode gen.Method) (*bytes.Buffer, *bytes.Buffer, error) { - outbuf := bytes.NewBuffer(make([]byte, 0, 4096)) - writePkgHeader(outbuf, f.Package) - - myImports := []string{"github.com/tinylib/msgp/msgp"} - for _, imp := range f.Imports { - if imp.Name != nil { - // have an alias, include it. - myImports = append(myImports, imp.Name.Name+` `+imp.Path.Value) - } else { - myImports = append(myImports, imp.Path.Value) - } - } - dedup := dedupImports(myImports) - writeImportHeader(outbuf, dedup...) - - var testbuf *bytes.Buffer - var testwr io.Writer - if mode&gen.Test == gen.Test { - testbuf = bytes.NewBuffer(make([]byte, 0, 4096)) - writePkgHeader(testbuf, f.Package) - if mode&(gen.Encode|gen.Decode) != 0 { - writeImportHeader(testbuf, "bytes", "github.com/tinylib/msgp/msgp", "testing") - } else { - writeImportHeader(testbuf, "github.com/tinylib/msgp/msgp", "testing") - } - testwr = testbuf - } - return outbuf, testbuf, f.PrintTo(gen.NewPrinter(mode, outbuf, testwr)) -} - -func writePkgHeader(b *bytes.Buffer, name string) { - b.WriteString("package ") - b.WriteString(name) - b.WriteByte('\n') - b.WriteString("// NOTE: THIS FILE WAS PRODUCED BY THE\n// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp)\n// DO NOT EDIT\n\n") -} - -func writeImportHeader(b *bytes.Buffer, imports ...string) { - b.WriteString("import (\n") - for _, im := range imports { - if im[len(im)-1] == '"' { - // support aliased imports - fmt.Fprintf(b, "\t%s\n", im) - } else { - fmt.Fprintf(b, "\t%q\n", im) - } - } - b.WriteString(")\n\n") -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/.circleci/config.yml b/vendor/gopkg.in/DataDog/dd-trace-go.v1/.circleci/config.yml deleted file mode 100644 index aa355834..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/.circleci/config.yml +++ /dev/null @@ -1,135 +0,0 @@ -version: 2 - -jobs: - build: - working_directory: /go/src/gopkg.in/DataDog/dd-trace-go.v1 - resource_class: xlarge - - docker: - - image: circleci/golang:latest - - image: cassandra:3.7 - - image: circleci/mysql:5.7 - environment: - MYSQL_ROOT_PASSWORD: admin - MYSQL_PASSWORD: test - MYSQL_USER: test - MYSQL_DATABASE: test - - image: circleci/postgres:9.5 - environment: - POSTGRES_PASSWORD: postgres - POSTGRES_USER: postgres - POSTGRES_DB: postgres - - image: redis:3.2 - - image: elasticsearch:2 - environment: - ES_JAVA_OPTS: "-Xms750m -Xmx750m" # https://github.com/10up/wp-local-docker/issues/6 - - image: elasticsearch:5 - environment: - ES_JAVA_OPTS: "-Xms750m -Xmx750m" # https://github.com/10up/wp-local-docker/issues/6 - - image: datadog/docker-dd-agent - environment: - DD_APM_ENABLED: "true" - DD_BIND_HOST: "0.0.0.0" - DD_API_KEY: invalid_key_but_this_is_fine - - image: circleci/mongo:latest-ram - - image: memcached:1.5.9 - - image: confluentinc/cp-zookeeper:5.0.0 - environment: - ZOOKEEPER_CLIENT_PORT: "2181" - - image: confluentinc/cp-kafka:5.0.0 - environment: - KAFKA_ZOOKEEPER_CONNECT: localhost:2181 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 - KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 - KAFKA_CREATE_TOPICS: gotest:1:1 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" - - steps: - - checkout - - - restore_cache: - keys: - - v1-librdkafka-v0.11.5 - - run: - name: Install rdkafka - command: | - if [ ! -d /tmp/librdkafka-v0.11.5 ] ; then - echo "building librdkafka" - git clone --branch v0.11.5 https://github.com/edenhill/librdkafka.git /tmp/librdkafka-v0.11.5 - (cd /tmp/librdkafka-v0.11.5 && ./configure && make) - fi - echo "installing librdkafka" - (cd /tmp/librdkafka-v0.11.5 && sudo make install) - sudo ldconfig - - save_cache: - key: v1-librdkafka-v0.11.5 - paths: - - /tmp/librdkafka-v0.11.5 - - - run: - name: Vendor gRPC v1.2.0 - # This step vendors gRPC v1.2.0 inside our gRPC.v12 contrib - # to allow running the tests against the correct version of - # the gRPC library. The library is not committed into the - # repository to avoid conflicts with the user's imports. - environment: - GRPC_DEST: contrib/google.golang.org/grpc.v12/vendor/google.golang.org/grpc - command: | - mkdir -p $GRPC_DEST - git clone --branch v1.2.0 https://github.com/grpc/grpc-go $GRPC_DEST - - - run: - name: Fetching dependencies - command: | - go get -v -t ./... - go get -v -u golang.org/x/lint/golint - go get -v -u github.com/alecthomas/gometalinter - - - run: - name: Wait for MySQL - command: dockerize -wait tcp://localhost:3306 -timeout 1m - - - run: - name: Wait for Postgres - command: dockerize -wait tcp://localhost:5432 -timeout 1m - - - run: - name: Wait for Redis - command: dockerize -wait tcp://localhost:6379 -timeout 1m - - - run: - name: Wait for ElasticSearch (1) - command: dockerize -wait http://localhost:9200 -timeout 1m - - - run: - name: Wait for ElasticSearch (2) - command: dockerize -wait http://localhost:9201 -timeout 1m - - - run: - name: Wait for Datadog Agent - command: dockerize -wait tcp://127.0.0.1:8126 -timeout 1m - - - run: - name: Wait for Cassandra - command: dockerize -wait tcp://localhost:9042 -timeout 2m - - - run: - name: Linting - command: | - gometalinter --disable-all --vendor --deadline=60s \ - --enable=golint \ - --enable=vet \ - ./... - - - run: - name: Testing - command: | - INTEGRATION=1 go test -v -race `go list ./... | grep -v contrib/go-redis/redis` - - - run: - name: Testing contrib/go-redis/redis - command: | - (cd $GOPATH/src/github.com/go-redis/redis && git checkout v6.13.2) - INTEGRATION=1 go test -v -race ./contrib/go-redis/redis/... - (cd $GOPATH/src/github.com/go-redis/redis && git checkout master) - INTEGRATION=1 go test -v -race ./contrib/go-redis/redis/... diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/.gitignore b/vendor/gopkg.in/DataDog/dd-trace-go.v1/.gitignore deleted file mode 100644 index 094cfe1b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# go -bin/ - -# profiling -*.test -*.out - -# generic -.DS_Store -*.cov -*.lock -*.swp - -/contrib/google.golang.org/grpc.v12/vendor/ diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/CONTRIBUTING.md b/vendor/gopkg.in/DataDog/dd-trace-go.v1/CONTRIBUTING.md deleted file mode 100644 index cd479542..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/CONTRIBUTING.md +++ /dev/null @@ -1,17 +0,0 @@ -### Contributing - -Pull requests for bug fixes are welcome, but before submitting new features or changes to current functionalities [open an issue](https://github.com/DataDog/dd-trace-go/issues/new) -and discuss your ideas or propose the changes you wish to make. After a resolution is reached a PR can be submitted for review. - -For commit messages, try to use the same conventions as most Go projects, for example: -``` -contrib/database/sql: use method context on QueryContext and ExecContext - -QueryContext and ExecContext were using the wrong context to create -spans. Instead of using the method's argument they were using the -Prepare context, which was wrong. - -Fixes #113 -``` -Please apply the same logic for Pull Requests, start with the package name, followed by a colon and a description of the change, just like -the official [Go language](https://github.com/golang/go/pulls). diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE b/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE deleted file mode 100644 index 23351821..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2016, Datadog -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 Datadog 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 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. diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE-3rdparty.csv b/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE-3rdparty.csv deleted file mode 100644 index 582ea791..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/LICENSE-3rdparty.csv +++ /dev/null @@ -1,2 +0,0 @@ -Component,Origin,License,Copyright -import,io.opentracing,Apache-2.0,Copyright 2016-2017 The OpenTracing Authors \ No newline at end of file diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/MIGRATING.md b/vendor/gopkg.in/DataDog/dd-trace-go.v1/MIGRATING.md deleted file mode 100644 index 84f5bf49..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/MIGRATING.md +++ /dev/null @@ -1,104 +0,0 @@ -# Migration Guide - -This document outlines migrating from an older version of the Datadog tracer (0.6.x) to v1. - -Datadog's v1 version of the Go tracer provides not only an overhauled core that comes with huge performance improvements, but also the promise of a new and stable API to be relied on. It is the result of continuous feedback from customers, the community, as well as our extensive internal usage. - -As is common and recommended in the Go community, the best way to approach migrating to this new API is by using the [gradual code repair](https://talks.golang.org/2016/refactor.article) method. We have done the same internally and it has worked just great! For this exact reason we have provided a new, [semver](https://semver.org/) friendly import path to help with using both tracers in parallel, without conflict, for the duration of the migration. This new path is `gopkg.in/DataDog/dd-trace-go.v1`. - -Our [godoc page](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace) should deem helpful during this process. We also have the [official documentation](https://docs.datadoghq.com/tracing/setup/go/), which contains a couple of examples. - -This document will further outline some _before_ and _after_ examples. - -## Starting the tracer - -The new tracer needs to be started before it can be used. A default started tracer is no longer available. The default tracer is now a no-op. - -Here is an example of starting a custom tracer with a non-default agent endpoint using the old API: - -```go -t := tracer.NewTracerTransport(tracer.NewTransport("localhost", "8199")) -t.SetDebugLogging(true) -defer t.ForceFlush() -``` - -This would now become: - -```go -tracer.Start( - tracer.WithAgentAddr("localhost:8199"), - tracer.WithDebugMode(true), -) -defer tracer.Stop() -``` - -Notice that the tracer object is no longer returned. Consult the documentation to see [all possible parameters](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#StartOption) to the `Start` call. - -## Service Information - -The [`tracer.SetServiceInfo`](https://godoc.org/github.com/DataDog/dd-trace-go/tracer#Tracer.SetServiceInfo) method has been deprecated. The service information is now set automatically based on the value of the [`ext.SpanType`](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext#SpanType) tag that was set on the root span of a trace. - -## Spans - -Starting spans is now possible with [functional options](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#StartSpanOption). Which means that all span properties (or none) can be set when starting a span dynamically. Before: - -```go -span := tracer.NewRootSpan("web.request", "my_service", "resource_name") -``` - -Becomes: - -```go -span := tracer.StartSpan("web.request", tracer.ServiceName("my_service"), tracer.ResourceName("resource_name")) -``` - -We've done this because in many cases the extra parameters could become tedious, given that service names can be inherited and resource names can default to the operation name. This also allows us to have one single, more dynamic API for starting both root and child spans. Check out all possible [StartSpanOption](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#StartSpanOption) values to get an idea. - -### Children - -Here is an example for spawning a child of the previously declared span: -```go -child := tracer.StartSpan("process.user", tracer.ChildOf(span.Context())) -``` -You will notice that the new tracer also introduces the concept of [SpanContext](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace#SpanContext), which is different from Go's context and is used to carry information needed to spawn children of a specific span and can be propagated cross-process. To learn more about distributed tracing check the package-level [documentation](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#ChildOf) of the `tracer` package. - -### Using Go's context - -It is also possible to create children of spans that live inside Go's [context](https://golang.org/pkg/context/): -```go -child, ctx := tracer.StartSpanFromContext(ctx, "process.user", tracer.Tag("key", "value")) -``` -This will create a child of the span which exists inside the passed context and return it, along with a new context which contains the new span. To add or retrieve a span from a context use the [`ContextWithSpan`](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#ContextWithSpan) or [`SpanFromContext`](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#SpanFromContext) functions. - -### Setting errors - -The [`SetError`](https://godoc.org/github.com/DataDog/dd-trace-go/tracer#Span.SetError) has been deprecated in favour of the [`ext.Error`](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext#Error) tag value which matches other tracing libraries in the wild. Whereas before we had: - -```go -span.SetError(err) -``` - -Now we have: - -```go -span.SetTag(ext.Error, err) -``` - -Note that this tag can accept value of the types `error`, `string` and `bool` as well for setting errors. - -### Finishing - -The [`FinishWithErr`](https://godoc.org/github.com/DataDog/dd-trace-go/tracer#Span.FinishWithErr) and [`FinishWithTime`](https://godoc.org/github.com/DataDog/dd-trace-go/tracer#Span.FinishWithTime) methods have been removed in favour of a set of [`FinishOption`](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer#FinishOption). For example, this would now become: - -```go -span.Finish(tracer.WithError(err), tracer.FinishTime(t)) -``` - -Providing a `nil` value as an error is perfectly fine and will not mark the span as erroneous. - -## Further reading - -The new version of the tracer also comes with a lot of new features, such as support for distributed tracing and distributed sampling priority. - -* package level documentation of the [`tracer` package](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer) for a better overview. -* [official documentation](https://docs.datadoghq.com/tracing/setup/go/) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/README.md b/vendor/gopkg.in/DataDog/dd-trace-go.v1/README.md deleted file mode 100644 index 1a77333c..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/README.md +++ /dev/null @@ -1,30 +0,0 @@ -[![CircleCI](https://circleci.com/gh/DataDog/dd-trace-go/tree/v1.svg?style=svg)](https://circleci.com/gh/DataDog/dd-trace-go/tree/v1) -[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace) - -### Installing - -```bash -go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace -``` - -Requires: - -* Go 1.9 -* Datadog's Trace Agent >= 5.21.1 - -### Documentation - -The API is documented on [godoc](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace) as well as Datadog's [official documentation](https://docs.datadoghq.com/tracing/setup/go/). If you are migrating -from an older version of the tracer (e.g. 0.6.x) you may also find the [migration document](https://github.com/DataDog/dd-trace-go/blob/v1/MIGRATING.md) we've put together helpful. - -### Testing - -Tests can be run locally using the Go toolset. The grpc.v12 integration will fail (and this is normal), because it covers for deprecated methods. In the CI environment -we vendor this version of the library inside the integration. Under normal circumstances this is not something that we want to do, because users using this integration -might be running versions different from the vendored one, creating hard to debug conflicts. - -To run integration tests locally, you should set the `INTEGRATION` environment variable. The dependencies of the integration tests are best run via Docker. To get an -idea about the versions and the set-up take a look at our [CI config](https://github.com/DataDog/dd-trace-go/blob/v1/.circleci/config.yml). - -The best way to run the entire test suite is using the [CircleCI CLI](https://circleci.com/docs/2.0/local-jobs/). Simply run `circleci build` -in the repository root. Note that you might have to increase the resources dedicated to Docker to around 4GB. diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/README.md b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/README.md deleted file mode 100644 index fb2de1a8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/README.md +++ /dev/null @@ -1,19 +0,0 @@ -[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/contrib) - -The purpose of these packages is to provide tracing on top of commonly used packages from the standard library as well as the -community in a "plug-and-play" manner. This means that by simply importing the appropriate path, functions are exposed having - the same signature as the original package. These functions return structures which embed the original return value, allowing -them to be used as they normally would with tracing activated out of the box. - -All of these libraries are supported by our [APM product](https://www.datadoghq.com/apm/). - -### Usage - -First, find the library which you'd like to integrate with. The naming convention for the integration packages is: - -* If the package is from the standard library (eg. `database/sql`), it will be located at the same path. -* If the package is hosted on Github (eg. `github.com/user/repo`), it will be located at the shorthand path `user/repo`. -* If the package is from anywhere else (eg. `google.golang.org/grpc`), it can be found under the full import path. - -Each integration comes with thorough documentation and usage examples. A good overview can be seen on our -[godoc](https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/contrib) page. diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/example_test.go deleted file mode 100644 index aa4d1d67..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/example_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package sarama_test - -import ( - "log" - - saramatrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - sarama "gopkg.in/Shopify/sarama.v1" -) - -func Example_asyncProducer() { - cfg := sarama.NewConfig() - - producer, err := sarama.NewAsyncProducer([]string{"localhost:9092"}, cfg) - if err != nil { - panic(err) - } - defer producer.Close() - - producer = saramatrace.WrapAsyncProducer(cfg, producer) - - msg := &sarama.ProducerMessage{ - Topic: "some-topic", - Value: sarama.StringEncoder("Hello World"), - } - producer.Input() <- msg -} - -func Example_syncProducer() { - cfg := sarama.NewConfig() - cfg.Producer.Return.Successes = true - - producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, cfg) - if err != nil { - panic(err) - } - defer producer.Close() - - producer = saramatrace.WrapSyncProducer(cfg, producer) - - msg := &sarama.ProducerMessage{ - Topic: "some-topic", - Value: sarama.StringEncoder("Hello World"), - } - _, _, err = producer.SendMessage(msg) - if err != nil { - panic(err) - } -} - -func Example_consumer() { - consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil) - if err != nil { - panic(err) - } - defer consumer.Close() - - consumer = saramatrace.WrapConsumer(consumer) - - partitionConsumer, err := consumer.ConsumePartition("some-topic", 0, sarama.OffsetNewest) - if err != nil { - panic(err) - } - defer partitionConsumer.Close() - - consumed := 0 - for msg := range partitionConsumer.Messages() { - // if you want to use the kafka message as a parent span: - if spanctx, err := tracer.Extract(saramatrace.NewConsumerMessageCarrier(msg)); err == nil { - // you can create a span using ChildOf(spanctx) - _ = spanctx - } - - log.Printf("Consumed message offset %d\n", msg.Offset) - consumed++ - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/headers.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/headers.go deleted file mode 100644 index 93f18d4b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/headers.go +++ /dev/null @@ -1,90 +0,0 @@ -package sarama - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - sarama "gopkg.in/Shopify/sarama.v1" -) - -// A ProducerMessageCarrier injects and extracts traces from a sarama.ProducerMessage. -type ProducerMessageCarrier struct { - msg *sarama.ProducerMessage -} - -var _ interface { - tracer.TextMapReader - tracer.TextMapWriter -} = (*ProducerMessageCarrier)(nil) - -// ForeachKey iterates over every header. -func (c ProducerMessageCarrier) ForeachKey(handler func(key, val string) error) error { - for _, h := range c.msg.Headers { - err := handler(string(h.Key), string(h.Value)) - if err != nil { - return err - } - } - return nil -} - -// Set sets a header. -func (c ProducerMessageCarrier) Set(key, val string) { - // ensure uniqueness of keys - for i := 0; i < len(c.msg.Headers); i++ { - if string(c.msg.Headers[i].Key) == key { - c.msg.Headers = append(c.msg.Headers[:i], c.msg.Headers[i+1:]...) - i-- - } - } - c.msg.Headers = append(c.msg.Headers, sarama.RecordHeader{ - Key: []byte(key), - Value: []byte(val), - }) -} - -// NewProducerMessageCarrier creates a new ProducerMessageCarrier. -func NewProducerMessageCarrier(msg *sarama.ProducerMessage) ProducerMessageCarrier { - return ProducerMessageCarrier{msg} -} - -// A ConsumerMessageCarrier injects and extracts traces from a sarama.ConsumerMessage. -type ConsumerMessageCarrier struct { - msg *sarama.ConsumerMessage -} - -var _ interface { - tracer.TextMapReader - tracer.TextMapWriter -} = (*ConsumerMessageCarrier)(nil) - -// NewConsumerMessageCarrier creates a new ConsumerMessageCarrier. -func NewConsumerMessageCarrier(msg *sarama.ConsumerMessage) ConsumerMessageCarrier { - return ConsumerMessageCarrier{msg} -} - -// ForeachKey iterates over every header. -func (c ConsumerMessageCarrier) ForeachKey(handler func(key, val string) error) error { - for _, h := range c.msg.Headers { - if h != nil { - err := handler(string(h.Key), string(h.Value)) - if err != nil { - return err - } - } - } - return nil -} - -// Set sets a header. -func (c ConsumerMessageCarrier) Set(key, val string) { - // ensure uniqueness of keys - for i := 0; i < len(c.msg.Headers); i++ { - if c.msg.Headers[i] != nil && string(c.msg.Headers[i].Key) == key { - c.msg.Headers = append(c.msg.Headers[:i], c.msg.Headers[i+1:]...) - i-- - } - } - c.msg.Headers = append(c.msg.Headers, &sarama.RecordHeader{ - Key: []byte(key), - Value: []byte(val), - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/option.go deleted file mode 100644 index 39ca88a5..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/option.go +++ /dev/null @@ -1,19 +0,0 @@ -package sarama - -type config struct { - serviceName string -} - -func defaults(cfg *config) { - cfg.serviceName = "kafka" -} - -// An Option is used to customize the config for the sarama tracer. -type Option func(cfg *config) - -// WithServiceName sets the given service name for the intercepted client. -func WithServiceName(name string) Option { - return func(cfg *config) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama.go deleted file mode 100644 index d5b547a4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama.go +++ /dev/null @@ -1,258 +0,0 @@ -// Package sarama provides functions to trace the Shopify/sarama package (https://github.com/Shopify/sarama). -package sarama // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama" - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - sarama "gopkg.in/Shopify/sarama.v1" -) - -type partitionConsumer struct { - sarama.PartitionConsumer - messages chan *sarama.ConsumerMessage -} - -// Messages returns the read channel for the messages that are returned by -// the broker. -func (pc *partitionConsumer) Messages() <-chan *sarama.ConsumerMessage { - return pc.messages -} - -// WrapPartitionConsumer wraps a sarama.PartitionConsumer causing each received -// message to be traced. -func WrapPartitionConsumer(pc sarama.PartitionConsumer, opts ...Option) sarama.PartitionConsumer { - cfg := new(config) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - wrapped := &partitionConsumer{ - PartitionConsumer: pc, - messages: make(chan *sarama.ConsumerMessage), - } - go func() { - msgs := pc.Messages() - var prev ddtrace.Span - for msg := range msgs { - // create the next span from the message - opts := []tracer.StartSpanOption{ - tracer.ServiceName(cfg.serviceName), - tracer.ResourceName("Consume Topic " + msg.Topic), - tracer.SpanType(ext.SpanTypeMessageConsumer), - tracer.Tag("partition", msg.Partition), - tracer.Tag("offset", msg.Offset), - } - // kafka supports headers, so try to extract a span context - carrier := NewConsumerMessageCarrier(msg) - if spanctx, err := tracer.Extract(carrier); err == nil { - opts = append(opts, tracer.ChildOf(spanctx)) - } - next := tracer.StartSpan("kafka.consume", opts...) - // reinject the span context so consumers can pick it up - tracer.Inject(next.Context(), carrier) - - wrapped.messages <- msg - - // if the next message was received, finish the previous span - if prev != nil { - prev.Finish() - } - prev = next - } - // finish any remaining span - if prev != nil { - prev.Finish() - } - close(wrapped.messages) - }() - return wrapped -} - -type consumer struct { - sarama.Consumer - opts []Option -} - -// ConsumePartition invokes Consumer.ConsumePartition and wraps the resulting -// PartitionConsumer. -func (c *consumer) ConsumePartition(topic string, partition int32, offset int64) (sarama.PartitionConsumer, error) { - pc, err := c.Consumer.ConsumePartition(topic, partition, offset) - if err != nil { - return pc, err - } - return WrapPartitionConsumer(pc, c.opts...), nil -} - -// WrapConsumer wraps a sarama.Consumer wrapping any PartitionConsumer created -// via Consumer.ConsumePartition. -func WrapConsumer(c sarama.Consumer, opts ...Option) sarama.Consumer { - return &consumer{ - Consumer: c, - opts: opts, - } -} - -type syncProducer struct { - sarama.SyncProducer - version sarama.KafkaVersion - cfg *config -} - -// SendMessage calls sarama.SyncProducer.SendMessage and traces the request. -func (p *syncProducer) SendMessage(msg *sarama.ProducerMessage) (partition int32, offset int64, err error) { - span := startProducerSpan(p.cfg, p.version, msg) - partition, offset, err = p.SyncProducer.SendMessage(msg) - finishProducerSpan(span, partition, offset, err) - return partition, offset, err -} - -// SendMessages calls sarama.SyncProducer.SendMessages and traces the requests. -func (p *syncProducer) SendMessages(msgs []*sarama.ProducerMessage) error { - // although there's only one call made to the SyncProducer, the messages are - // treated individually, so we create a span for each one - spans := make([]ddtrace.Span, len(msgs)) - for i, msg := range msgs { - spans[i] = startProducerSpan(p.cfg, p.version, msg) - } - err := p.SyncProducer.SendMessages(msgs) - for i, span := range spans { - finishProducerSpan(span, msgs[i].Partition, msgs[i].Offset, err) - } - return err -} - -// WrapSyncProducer wraps a sarama.SyncProducer so that all produced messages -// are traced. -func WrapSyncProducer(saramaConfig *sarama.Config, producer sarama.SyncProducer, opts ...Option) sarama.SyncProducer { - cfg := new(config) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - if saramaConfig == nil { - saramaConfig = sarama.NewConfig() - } - return &syncProducer{ - SyncProducer: producer, - version: saramaConfig.Version, - cfg: cfg, - } -} - -type asyncProducer struct { - sarama.AsyncProducer - input chan *sarama.ProducerMessage - successes chan *sarama.ProducerMessage - errors chan *sarama.ProducerError -} - -// Input returns the input channel. -func (p *asyncProducer) Input() chan<- *sarama.ProducerMessage { - return p.input -} - -// Successes returns the successes channel. -func (p *asyncProducer) Successes() <-chan *sarama.ProducerMessage { - return p.successes -} - -// Errors returns the errors channel. -func (p *asyncProducer) Errors() <-chan *sarama.ProducerError { - return p.errors -} - -// WrapAsyncProducer wraps a sarama.AsyncProducer so that all produced messages -// are traced. It requires the underlying sarama Config so we can know whether -// or not sucesses will be returned. -func WrapAsyncProducer(saramaConfig *sarama.Config, p sarama.AsyncProducer, opts ...Option) sarama.AsyncProducer { - cfg := new(config) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - if saramaConfig == nil { - saramaConfig = sarama.NewConfig() - } - wrapped := &asyncProducer{ - AsyncProducer: p, - input: make(chan *sarama.ProducerMessage), - successes: make(chan *sarama.ProducerMessage), - errors: make(chan *sarama.ProducerError), - } - go func() { - type spanKey struct { - topic string - partition int32 - offset int64 - } - spans := make(map[spanKey]ddtrace.Span) - defer close(wrapped.successes) - defer close(wrapped.errors) - for { - select { - case msg := <-wrapped.input: - key := spanKey{msg.Topic, msg.Partition, msg.Offset} - span := startProducerSpan(cfg, saramaConfig.Version, msg) - p.Input() <- msg - if saramaConfig.Producer.Return.Successes { - spans[key] = span - } else { - // if returning successes isn't enabled, we just finish the - // span right away because there's no way to know when it will - // be done - finishProducerSpan(span, key.partition, key.offset, nil) - } - case msg, ok := <-p.Successes(): - if !ok { - // producer was closed, so exit - return - } - key := spanKey{msg.Topic, msg.Partition, msg.Offset} - if span, ok := spans[key]; ok { - delete(spans, key) - finishProducerSpan(span, msg.Partition, msg.Offset, nil) - } - wrapped.successes <- msg - case err, ok := <-p.Errors(): - if !ok { - // producer was closed - return - } - key := spanKey{err.Msg.Topic, err.Msg.Partition, err.Msg.Offset} - if span, ok := spans[key]; ok { - delete(spans, key) - finishProducerSpan(span, err.Msg.Partition, err.Msg.Offset, err.Err) - } - wrapped.errors <- err - } - } - }() - return wrapped -} - -func startProducerSpan(cfg *config, version sarama.KafkaVersion, msg *sarama.ProducerMessage) ddtrace.Span { - carrier := NewProducerMessageCarrier(msg) - opts := []tracer.StartSpanOption{ - tracer.ServiceName(cfg.serviceName), - tracer.ResourceName("Produce Topic " + msg.Topic), - tracer.SpanType(ext.SpanTypeMessageProducer), - } - // if there's a span context in the headers, use that as the parent - if spanctx, err := tracer.Extract(carrier); err == nil { - opts = append(opts, tracer.ChildOf(spanctx)) - } - span := tracer.StartSpan("kafka.produce", opts...) - if version.IsAtLeast(sarama.V0_11_0_0) { - // re-inject the span context so consumers can pick it up - tracer.Inject(span.Context(), carrier) - } - return span -} - -func finishProducerSpan(span ddtrace.Span, partition int32, offset int64, err error) { - span.SetTag("partition", partition) - span.SetTag("offset", offset) - span.Finish(tracer.WithError(err)) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama_test.go deleted file mode 100644 index ec6c3b42..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama/sarama_test.go +++ /dev/null @@ -1,290 +0,0 @@ -package sarama - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - sarama "gopkg.in/Shopify/sarama.v1" -) - -func TestConsumer(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - broker := sarama.NewMockBroker(t, 0) - defer broker.Close() - - broker.SetHandlerByMap(map[string]sarama.MockResponse{ - "MetadataRequest": sarama.NewMockMetadataResponse(t). - SetBroker(broker.Addr(), broker.BrokerID()). - SetLeader("test-topic", 0, broker.BrokerID()), - "OffsetRequest": sarama.NewMockOffsetResponse(t). - SetOffset("test-topic", 0, sarama.OffsetOldest, 0). - SetOffset("test-topic", 0, sarama.OffsetNewest, 1), - "FetchRequest": sarama.NewMockFetchResponse(t, 1). - SetMessage("test-topic", 0, 0, sarama.StringEncoder("hello")). - SetMessage("test-topic", 0, 1, sarama.StringEncoder("world")), - }) - - client, err := sarama.NewClient([]string{broker.Addr()}, sarama.NewConfig()) - if err != nil { - t.Fatal(err) - } - defer client.Close() - - consumer, err := sarama.NewConsumerFromClient(client) - if err != nil { - t.Fatal(err) - } - defer consumer.Close() - - consumer = WrapConsumer(consumer) - - partitionConsumer, err := consumer.ConsumePartition("test-topic", 0, 0) - if err != nil { - t.Fatal(err) - } - msg1 := <-partitionConsumer.Messages() - msg2 := <-partitionConsumer.Messages() - partitionConsumer.Close() - // wait for the channel to be closed - <-partitionConsumer.Messages() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - { - s := spans[0] - spanctx, err := tracer.Extract(NewConsumerMessageCarrier(msg1)) - assert.NoError(t, err) - assert.Equal(t, spanctx.TraceID(), s.TraceID(), - "span context should be injected into the consumer message headers") - - assert.Equal(t, int32(0), s.Tag("partition")) - assert.Equal(t, int64(0), s.Tag("offset")) - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "Consume Topic test-topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "kafka.consume", s.OperationName()) - } - { - s := spans[1] - spanctx, err := tracer.Extract(NewConsumerMessageCarrier(msg2)) - assert.NoError(t, err) - assert.Equal(t, spanctx.TraceID(), s.TraceID(), - "span context should be injected into the consumer message headers") - - assert.Equal(t, int32(0), s.Tag("partition")) - assert.Equal(t, int64(1), s.Tag("offset")) - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "Consume Topic test-topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "kafka.consume", s.OperationName()) - } -} - -func TestSyncProducer(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - seedBroker := sarama.NewMockBroker(t, 1) - defer seedBroker.Close() - - leader := sarama.NewMockBroker(t, 2) - defer leader.Close() - - metadataResponse := new(sarama.MetadataResponse) - metadataResponse.AddBroker(leader.Addr(), leader.BrokerID()) - metadataResponse.AddTopicPartition("my_topic", 0, leader.BrokerID(), nil, nil, sarama.ErrNoError) - seedBroker.Returns(metadataResponse) - - prodSuccess := new(sarama.ProduceResponse) - prodSuccess.AddTopicPartition("my_topic", 0, sarama.ErrNoError) - leader.Returns(prodSuccess) - - cfg := sarama.NewConfig() - cfg.Producer.Return.Successes = true - - producer, err := sarama.NewSyncProducer([]string{seedBroker.Addr()}, cfg) - if err != nil { - t.Fatal(err) - } - producer = WrapSyncProducer(cfg, producer) - - msg1 := &sarama.ProducerMessage{ - Topic: "my_topic", - Value: sarama.StringEncoder("test 1"), - Metadata: "test", - } - producer.SendMessage(msg1) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - { - s := spans[0] - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "Produce Topic my_topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "kafka.produce", s.OperationName()) - assert.Equal(t, int32(0), s.Tag("partition")) - assert.Equal(t, int64(0), s.Tag("offset")) - } -} - -func TestSyncProducerSendMessages(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - seedBroker := sarama.NewMockBroker(t, 1) - defer seedBroker.Close() - leader := sarama.NewMockBroker(t, 2) - defer leader.Close() - - metadataResponse := new(sarama.MetadataResponse) - metadataResponse.AddBroker(leader.Addr(), leader.BrokerID()) - metadataResponse.AddTopicPartition("my_topic", 0, leader.BrokerID(), nil, nil, sarama.ErrNoError) - seedBroker.Returns(metadataResponse) - - prodSuccess := new(sarama.ProduceResponse) - prodSuccess.AddTopicPartition("my_topic", 0, sarama.ErrNoError) - leader.Returns(prodSuccess) - - cfg := sarama.NewConfig() - cfg.Producer.Return.Successes = true - cfg.Producer.Flush.Messages = 2 - - producer, err := sarama.NewSyncProducer([]string{seedBroker.Addr()}, cfg) - if err != nil { - t.Fatal(err) - } - producer = WrapSyncProducer(cfg, producer) - - msg1 := &sarama.ProducerMessage{ - Topic: "my_topic", - Value: sarama.StringEncoder("test 1"), - Metadata: "test", - } - msg2 := &sarama.ProducerMessage{ - Topic: "my_topic", - Value: sarama.StringEncoder("test 2"), - Metadata: "test", - } - producer.SendMessages([]*sarama.ProducerMessage{msg1, msg2}) - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - for _, s := range spans { - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "Produce Topic my_topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "kafka.produce", s.OperationName()) - assert.Equal(t, int32(0), s.Tag("partition")) - } -} - -func TestAsyncProducer(t *testing.T) { - // the default for producers is a fire-and-forget model that doesn't return - // successes - t.Run("Without Successes", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - broker := newMockBroker(t) - - producer, err := sarama.NewAsyncProducer([]string{broker.Addr()}, nil) - if err != nil { - t.Fatal(err) - } - producer = WrapAsyncProducer(nil, producer) - - msg1 := &sarama.ProducerMessage{ - Topic: "my_topic", - Value: sarama.StringEncoder("test 1"), - } - producer.Input() <- msg1 - - waitForSpans(mt, 1, time.Second*10) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - { - s := spans[0] - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "Produce Topic my_topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "kafka.produce", s.OperationName()) - assert.Equal(t, int32(0), s.Tag("partition")) - assert.Equal(t, int64(0), s.Tag("offset")) - } - }) - - t.Run("With Successes", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - broker := newMockBroker(t) - - cfg := sarama.NewConfig() - cfg.Producer.Return.Successes = true - - producer, err := sarama.NewAsyncProducer([]string{broker.Addr()}, cfg) - if err != nil { - t.Fatal(err) - } - producer = WrapAsyncProducer(cfg, producer) - - msg1 := &sarama.ProducerMessage{ - Topic: "my_topic", - Value: sarama.StringEncoder("test 1"), - } - producer.Input() <- msg1 - <-producer.Successes() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - { - s := spans[0] - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, "Produce Topic my_topic", s.Tag(ext.ResourceName)) - assert.Equal(t, "kafka.produce", s.OperationName()) - assert.Equal(t, int32(0), s.Tag("partition")) - assert.Equal(t, int64(0), s.Tag("offset")) - } - }) -} - -func newMockBroker(t *testing.T) *sarama.MockBroker { - broker := sarama.NewMockBroker(t, 1) - - metadataResponse := new(sarama.MetadataResponse) - metadataResponse.AddBroker(broker.Addr(), broker.BrokerID()) - metadataResponse.AddTopicPartition("my_topic", 0, broker.BrokerID(), nil, nil, sarama.ErrNoError) - broker.Returns(metadataResponse) - - prodSuccess := new(sarama.ProduceResponse) - prodSuccess.AddTopicPartition("my_topic", 0, sarama.ErrNoError) - for i := 0; i < 10; i++ { - broker.Returns(prodSuccess) - } - return broker -} - -// waitForSpans polls the mock tracer until the expected number of spans -// appear -func waitForSpans(mt mocktracer.Tracer, sz int, maxWait time.Duration) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() - - for len(mt.FinishedSpans()) < sz { - select { - case <-ctx.Done(): - return - default: - } - time.Sleep(time.Millisecond * 100) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws.go deleted file mode 100644 index 0cbd6999..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws.go +++ /dev/null @@ -1,99 +0,0 @@ -// Package aws provides functions to trace aws/aws-sdk-go (https://github.com/aws/aws-sdk-go). -package aws // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws" - -import ( - "strconv" - - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/aws/session" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -const ( - tagAWSAgent = "aws.agent" - tagAWSOperation = "aws.operation" - tagAWSRegion = "aws.region" -) - -type handlers struct { - cfg *config -} - -// WrapSession wraps a session.Session, causing requests and responses to be traced. -func WrapSession(s *session.Session, opts ...Option) *session.Session { - cfg := new(config) - for _, opt := range opts { - opt(cfg) - } - h := &handlers{cfg: cfg} - s = s.Copy() - s.Handlers.Send.PushFrontNamed(request.NamedHandler{ - Name: "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/handlers.Send", - Fn: h.Send, - }) - s.Handlers.Complete.PushBackNamed(request.NamedHandler{ - Name: "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/handlers.Complete", - Fn: h.Complete, - }) - return s -} - -func (h *handlers) Send(req *request.Request) { - _, ctx := tracer.StartSpanFromContext(req.Context(), h.operationName(req), - tracer.SpanType(ext.SpanTypeHTTP), - tracer.ServiceName(h.serviceName(req)), - tracer.ResourceName(h.resourceName(req)), - tracer.Tag(tagAWSAgent, h.awsAgent(req)), - tracer.Tag(tagAWSOperation, h.awsOperation(req)), - tracer.Tag(tagAWSRegion, h.awsRegion(req)), - tracer.Tag(ext.HTTPMethod, req.Operation.HTTPMethod), - tracer.Tag(ext.HTTPURL, req.HTTPRequest.URL.String()), - ) - req.SetContext(ctx) -} - -func (h *handlers) Complete(req *request.Request) { - span, ok := tracer.SpanFromContext(req.Context()) - if !ok { - return - } - if req.HTTPResponse != nil { - span.SetTag(ext.HTTPCode, strconv.Itoa(req.HTTPResponse.StatusCode)) - } - span.Finish(tracer.WithError(req.Error)) -} - -func (h *handlers) operationName(req *request.Request) string { - return h.awsService(req) + ".command" -} - -func (h *handlers) resourceName(req *request.Request) string { - return h.awsService(req) + "." + req.Operation.Name -} - -func (h *handlers) serviceName(req *request.Request) string { - if h.cfg.serviceName != "" { - return h.cfg.serviceName - } - return "aws." + h.awsService(req) -} - -func (h *handlers) awsAgent(req *request.Request) string { - if agent := req.HTTPRequest.Header.Get("User-Agent"); agent != "" { - return agent - } - return "aws-sdk-go" -} - -func (h *handlers) awsOperation(req *request.Request) string { - return req.Operation.Name -} - -func (h *handlers) awsRegion(req *request.Request) string { - return req.ClientInfo.SigningRegion -} - -func (h *handlers) awsService(req *request.Request) string { - return req.ClientInfo.ServiceName -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws_test.go deleted file mode 100644 index 26fe8d15..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/aws_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package aws - -import ( - "context" - "testing" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/ec2" - "github.com/aws/aws-sdk-go/service/s3" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestAWS(t *testing.T) { - cfg := aws.NewConfig(). - WithRegion("us-west-2"). - WithDisableSSL(true). - WithCredentials(credentials.AnonymousCredentials) - - session := WrapSession(session.Must(session.NewSession(cfg))) - - t.Run("s3", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - root, ctx := tracer.StartSpanFromContext(context.Background(), "test") - s3api := s3.New(session) - s3api.CreateBucketWithContext(ctx, &s3.CreateBucketInput{ - Bucket: aws.String("BUCKET"), - }) - root.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[1].TraceID(), spans[0].TraceID()) - - s := spans[0] - assert.Equal(t, "s3.command", s.OperationName()) - assert.Contains(t, s.Tag(tagAWSAgent), "aws-sdk-go") - assert.Equal(t, "CreateBucket", s.Tag(tagAWSOperation)) - assert.Equal(t, "us-west-2", s.Tag(tagAWSRegion)) - assert.Equal(t, "s3.CreateBucket", s.Tag(ext.ResourceName)) - assert.Equal(t, "aws.s3", s.Tag(ext.ServiceName)) - assert.Equal(t, "403", s.Tag(ext.HTTPCode)) - assert.Equal(t, "PUT", s.Tag(ext.HTTPMethod)) - assert.Equal(t, "http://s3.us-west-2.amazonaws.com/BUCKET", s.Tag(ext.HTTPURL)) - }) - - t.Run("ec2", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - root, ctx := tracer.StartSpanFromContext(context.Background(), "test") - ec2api := ec2.New(session) - ec2api.DescribeInstancesWithContext(ctx, &ec2.DescribeInstancesInput{}) - root.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[1].TraceID(), spans[0].TraceID()) - - s := spans[0] - assert.Equal(t, "ec2.command", s.OperationName()) - assert.Contains(t, s.Tag(tagAWSAgent), "aws-sdk-go") - assert.Equal(t, "DescribeInstances", s.Tag(tagAWSOperation)) - assert.Equal(t, "us-west-2", s.Tag(tagAWSRegion)) - assert.Equal(t, "ec2.DescribeInstances", s.Tag(ext.ResourceName)) - assert.Equal(t, "aws.ec2", s.Tag(ext.ServiceName)) - assert.Equal(t, "400", s.Tag(ext.HTTPCode)) - assert.Equal(t, "POST", s.Tag(ext.HTTPMethod)) - assert.Equal(t, "http://ec2.us-west-2.amazonaws.com/", s.Tag(ext.HTTPURL)) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/example_test.go deleted file mode 100644 index dcc8b390..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/example_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package aws_test - -import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3" - awstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws" -) - -// To start tracing requests, wrap the AWS session.Session by invoking -// awstrace.WrapSession. -func Example() { - cfg := aws.NewConfig().WithRegion("us-west-2") - sess := session.Must(session.NewSession(cfg)) - sess = awstrace.WrapSession(sess) - - s3api := s3.New(sess) - s3api.CreateBucket(&s3.CreateBucketInput{ - Bucket: aws.String("some-bucket-name"), - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/option.go deleted file mode 100644 index 6a306102..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package aws - -type config struct { - serviceName string -} - -// Option represents an option that can be passed to Dial. -type Option func(*config) - -// WithServiceName sets the given service name for the dialled connection. -// When the service name is not explicitly set it will be inferred based on the -// request to AWS. -func WithServiceName(name string) Option { - return func(cfg *config) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/example_test.go deleted file mode 100644 index 5d733bec..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/example_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package memcache_test - -import ( - "context" - - "github.com/bradfitz/gomemcache/memcache" - memcachetrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func Example() { - span, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.ServiceName("web"), - tracer.ResourceName("/home"), - ) - defer span.Finish() - - mc := memcachetrace.WrapClient(memcache.New("127.0.0.1:11211")) - // you can use WithContext to set the parent span - mc.WithContext(ctx).Set(&memcache.Item{Key: "my key", Value: []byte("my value")}) - -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache.go deleted file mode 100644 index 45aac47d..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache.go +++ /dev/null @@ -1,162 +0,0 @@ -// Package memcache provides functions to trace the bradfitz/gomemcache package (https://github.com/bradfitz/gomemcache). -// -// `WrapClient` will wrap a memcache `Client` and return a new struct with all -// the same methods, so should be seamless for existing applications. It also -// has an additional `WithContext` method which can be used to connect a span -// to an existing trace. -package memcache // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache" - -import ( - "context" - - "github.com/bradfitz/gomemcache/memcache" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// WrapClient wraps a memcache.Client so that all requests are traced using the -// default tracer with the service name "memcached". -func WrapClient(client *memcache.Client, opts ...ClientOption) *Client { - cfg := new(clientConfig) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - return &Client{ - Client: client, - cfg: cfg, - context: context.Background(), - } -} - -// A Client is used to trace requests to the memcached server. -type Client struct { - *memcache.Client - cfg *clientConfig - context context.Context -} - -// WithContext creates a copy of the Client with the given context. -func (c *Client) WithContext(ctx context.Context) *Client { - // the existing memcache client doesn't support context, but may in the - // future, so we do a runtime check to detect this - mc := c.Client - if wc, ok := (interface{})(c.Client).(interface { - WithContext(context.Context) *memcache.Client - }); ok { - mc = wc.WithContext(ctx) - } - return &Client{ - Client: mc, - cfg: c.cfg, - context: ctx, - } -} - -// startSpan starts a span from the context set with WithContext. -func (c *Client) startSpan(resourceName string) ddtrace.Span { - span, _ := tracer.StartSpanFromContext(c.context, operationName, - tracer.SpanType(ext.SpanTypeMemcached), - tracer.ServiceName(c.cfg.serviceName), - tracer.ResourceName(resourceName)) - return span -} - -// wrapped methods: - -// Add invokes and traces Client.Add. -func (c *Client) Add(item *memcache.Item) error { - span := c.startSpan("Add") - err := c.Client.Add(item) - span.Finish(tracer.WithError(err)) - return err -} - -// CompareAndSwap invokes and traces Client.CompareAndSwap. -func (c *Client) CompareAndSwap(item *memcache.Item) error { - span := c.startSpan("CompareAndSwap") - err := c.Client.CompareAndSwap(item) - span.Finish(tracer.WithError(err)) - return err -} - -// Decrement invokes and traces Client.Decrement. -func (c *Client) Decrement(key string, delta uint64) (newValue uint64, err error) { - span := c.startSpan("Decrement") - newValue, err = c.Client.Decrement(key, delta) - span.Finish(tracer.WithError(err)) - return newValue, err -} - -// Delete invokes and traces Client.Delete. -func (c *Client) Delete(key string) error { - span := c.startSpan("Delete") - err := c.Client.Delete(key) - span.Finish(tracer.WithError(err)) - return err -} - -// DeleteAll invokes and traces Client.DeleteAll. -func (c *Client) DeleteAll() error { - span := c.startSpan("DeleteAll") - err := c.Client.DeleteAll() - span.Finish(tracer.WithError(err)) - return err -} - -// FlushAll invokes and traces Client.FlushAll. -func (c *Client) FlushAll() error { - span := c.startSpan("FlushAll") - err := c.Client.FlushAll() - span.Finish(tracer.WithError(err)) - return err -} - -// Get invokes and traces Client.Get. -func (c *Client) Get(key string) (item *memcache.Item, err error) { - span := c.startSpan("Get") - item, err = c.Client.Get(key) - span.Finish(tracer.WithError(err)) - return item, err -} - -// GetMulti invokes and traces Client.GetMulti. -func (c *Client) GetMulti(keys []string) (map[string]*memcache.Item, error) { - span := c.startSpan("GetMulti") - items, err := c.Client.GetMulti(keys) - span.Finish(tracer.WithError(err)) - return items, err -} - -// Increment invokes and traces Client.Increment. -func (c *Client) Increment(key string, delta uint64) (newValue uint64, err error) { - span := c.startSpan("Increment") - newValue, err = c.Client.Increment(key, delta) - span.Finish(tracer.WithError(err)) - return newValue, err -} - -// Replace invokes and traces Client.Replace. -func (c *Client) Replace(item *memcache.Item) error { - span := c.startSpan("Replace") - err := c.Client.Replace(item) - span.Finish(tracer.WithError(err)) - return err -} - -// Set invokes and traces Client.Set. -func (c *Client) Set(item *memcache.Item) error { - span := c.startSpan("Set") - err := c.Client.Set(item) - span.Finish(tracer.WithError(err)) - return err -} - -// Touch invokes and traces Client.Touch. -func (c *Client) Touch(key string, seconds int32) error { - span := c.startSpan("Touch") - err := c.Client.Touch(key, seconds) - span.Finish(tracer.WithError(err)) - return err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache_test.go deleted file mode 100644 index fbef2323..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/memcache_test.go +++ /dev/null @@ -1,146 +0,0 @@ -package memcache - -import ( - "bufio" - "context" - "fmt" - "net" - "os" - "strings" - "testing" - - "github.com/bradfitz/gomemcache/memcache" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestMemcache(t *testing.T) { - li := makeFakeServer(t) - defer li.Close() - - testMemcache(t, li.Addr().String()) -} - -func TestMemcacheIntegration(t *testing.T) { - if _, ok := os.LookupEnv("INTEGRATION"); !ok { - t.Skip("to enable integration test, set the INTEGRATION environment variable") - } - - testMemcache(t, "localhost:11211") -} - -func testMemcache(t *testing.T, addr string) { - client := WrapClient(memcache.New(addr), WithServiceName("test-memcache")) - defer client.DeleteAll() - - validateMemcacheSpan := func(t *testing.T, span mocktracer.Span, resourceName string) { - assert.Equal(t, "test-memcache", span.Tag(ext.ServiceName), - "service name should be set to test-memcache") - assert.Equal(t, "memcached.query", span.OperationName(), - "operation name should be set to memcached.query") - assert.Equal(t, resourceName, span.Tag(ext.ResourceName), - "resource name should be set to the memcache command") - } - - t.Run("traces without context", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - err := client. - Add(&memcache.Item{ - Key: "key1", - Value: []byte("value1"), - }) - assert.Nil(t, err) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - validateMemcacheSpan(t, spans[0], "Add") - }) - - t.Run("traces with context", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - ctx := context.Background() - span, ctx := tracer.StartSpanFromContext(ctx, "parent") - - err := client. - WithContext(ctx). - Add(&memcache.Item{ - Key: "key2", - Value: []byte("value2"), - }) - assert.Nil(t, err) - - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - validateMemcacheSpan(t, spans[0], "Add") - assert.Equal(t, span, spans[1]) - assert.Equal(t, spans[1].TraceID(), spans[0].TraceID(), - "memcache span should be part of the parent trace") - }) -} - -func TestFakeServer(t *testing.T) { - li := makeFakeServer(t) - defer li.Close() - - conn, err := net.Dial("tcp", li.Addr().String()) - if err != nil { - t.Fatal(err) - } - defer conn.Close() - - fmt.Fprintf(conn, "add %s\r\n%s\r\n", "key", "value") - s := bufio.NewScanner(conn) - assert.True(t, s.Scan()) - assert.Equal(t, "STORED", s.Text()) -} - -func makeFakeServer(t *testing.T) net.Listener { - li, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatal(err) - } - - go func() { - for { - c, err := li.Accept() - if err != nil { - break - } - go func() { - defer c.Close() - - // the memcache textual protocol is line-oriented with each - // command being space separated: - // - // command1 arg1 arg2 - // command2 arg1 arg2 - // ... - // - s := bufio.NewScanner(c) - for s.Scan() { - args := strings.Split(s.Text(), " ") - switch args[0] { - case "add": - if !s.Scan() { - return - } - fmt.Fprintf(c, "STORED\r\n") - default: - fmt.Fprintf(c, "SERVER ERROR unknown command: %v \r\n", args[0]) - return - } - } - }() - } - }() - - return li -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/option.go deleted file mode 100644 index 8bcb57a2..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache/option.go +++ /dev/null @@ -1,22 +0,0 @@ -package memcache - -const ( - serviceName = "memcached" - operationName = "memcached.query" -) - -type clientConfig struct{ serviceName string } - -// ClientOption represents an option that can be passed to Dial. -type ClientOption func(*clientConfig) - -func defaults(cfg *clientConfig) { - cfg.serviceName = serviceName -} - -// WithServiceName sets the given service name for the dialled connection. -func WithServiceName(name string) ClientOption { - return func(cfg *clientConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/headers.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/headers.go deleted file mode 100644 index 8d40dcc0..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/headers.go +++ /dev/null @@ -1,47 +0,0 @@ -package kafka - -import ( - "github.com/confluentinc/confluent-kafka-go/kafka" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// A MessageCarrier injects and extracts traces from a sarama.ProducerMessage. -type MessageCarrier struct { - msg *kafka.Message -} - -var _ interface { - tracer.TextMapReader - tracer.TextMapWriter -} = (*MessageCarrier)(nil) - -// ForeachKey iterates over every header. -func (c MessageCarrier) ForeachKey(handler func(key, val string) error) error { - for _, h := range c.msg.Headers { - err := handler(string(h.Key), string(h.Value)) - if err != nil { - return err - } - } - return nil -} - -// Set sets a header. -func (c MessageCarrier) Set(key, val string) { - // ensure uniqueness of keys - for i := 0; i < len(c.msg.Headers); i++ { - if string(c.msg.Headers[i].Key) == key { - c.msg.Headers = append(c.msg.Headers[:i], c.msg.Headers[i+1:]...) - i-- - } - } - c.msg.Headers = append(c.msg.Headers, kafka.Header{ - Key: key, - Value: []byte(val), - }) -} - -// NewMessageCarrier creates a new MessageCarrier. -func NewMessageCarrier(msg *kafka.Message) MessageCarrier { - return MessageCarrier{msg} -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka.go deleted file mode 100644 index a0e6d6e8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka.go +++ /dev/null @@ -1,223 +0,0 @@ -// Package kafka provides functions to trace the confluentinc/confluent-kafka-go package (https://github.com/confluentinc/confluent-kafka-go). -package kafka // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka" - -import ( - "github.com/confluentinc/confluent-kafka-go/kafka" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// NewConsumer calls kafka.NewConsumer and wraps the resulting Consumer. -func NewConsumer(conf *kafka.ConfigMap, opts ...Option) (*Consumer, error) { - c, err := kafka.NewConsumer(conf) - if err != nil { - return nil, err - } - return WrapConsumer(c, opts...), nil -} - -// NewProducer calls kafka.NewProducer and wraps the resulting Producer. -func NewProducer(conf *kafka.ConfigMap, opts ...Option) (*Producer, error) { - p, err := kafka.NewProducer(conf) - if err != nil { - return nil, err - } - return WrapProducer(p, opts...), nil -} - -// A Consumer wraps a kafka.Consumer. -type Consumer struct { - *kafka.Consumer - cfg *config - events chan kafka.Event - prev ddtrace.Span -} - -// WrapConsumer wraps a kafka.Consumer so that any consumed events are traced. -func WrapConsumer(c *kafka.Consumer, opts ...Option) *Consumer { - wrapped := &Consumer{ - Consumer: c, - cfg: newConfig(opts...), - } - wrapped.events = wrapped.traceEventsChannel(c.Events()) - return wrapped -} - -func (c *Consumer) traceEventsChannel(in chan kafka.Event) chan kafka.Event { - // in will be nil when consuming via the events channel is not enabled - if in == nil { - return nil - } - - out := make(chan kafka.Event, 1) - go func() { - defer close(out) - for evt := range in { - var next ddtrace.Span - - // only trace messages - if msg, ok := evt.(*kafka.Message); ok { - next = c.startSpan(msg) - } - - out <- evt - - if c.prev != nil { - c.prev.Finish() - } - c.prev = next - } - // finish any remaining span - if c.prev != nil { - c.prev.Finish() - c.prev = nil - } - }() - - return out -} - -func (c *Consumer) startSpan(msg *kafka.Message) ddtrace.Span { - opts := []tracer.StartSpanOption{ - tracer.ServiceName(c.cfg.serviceName), - tracer.ResourceName("Consume Topic " + *msg.TopicPartition.Topic), - tracer.SpanType(ext.SpanTypeMessageConsumer), - tracer.Tag("partition", msg.TopicPartition.Partition), - tracer.Tag("offset", msg.TopicPartition.Offset), - } - // kafka supports headers, so try to extract a span context - carrier := NewMessageCarrier(msg) - if spanctx, err := tracer.Extract(carrier); err == nil { - opts = append(opts, tracer.ChildOf(spanctx)) - } - span, _ := tracer.StartSpanFromContext(c.cfg.ctx, "kafka.consume", opts...) - // reinject the span context so consumers can pick it up - tracer.Inject(span.Context(), carrier) - return span -} - -// Close calls the underlying Consumer.Close and if polling is enabled, finishes -// any remaining span. -func (c *Consumer) Close() error { - err := c.Consumer.Close() - // we only close the previous span if consuming via the events channel is - // not enabled, because otherwise there would be a data race from the - // consuming goroutine. - if c.events == nil && c.prev != nil { - c.prev.Finish() - c.prev = nil - } - return err -} - -// Events returns the kafka Events channel (if enabled). Message events will be -// traced. -func (c *Consumer) Events() chan kafka.Event { - return c.events -} - -// Poll polls the consumer for messages or events. Message events will be -// traced. -func (c *Consumer) Poll(timeoutMS int) (event kafka.Event) { - if c.prev != nil { - c.prev.Finish() - c.prev = nil - } - evt := c.Consumer.Poll(timeoutMS) - if msg, ok := evt.(*kafka.Message); ok { - c.prev = c.startSpan(msg) - } - return evt -} - -// A Producer wraps a kafka.Producer. -type Producer struct { - *kafka.Producer - cfg *config - produceChannel chan *kafka.Message -} - -// WrapProducer wraps a kafka.Producer so requests are traced. -func WrapProducer(p *kafka.Producer, opts ...Option) *Producer { - wrapped := &Producer{ - Producer: p, - cfg: newConfig(opts...), - } - wrapped.produceChannel = wrapped.traceProduceChannel(p.ProduceChannel()) - return wrapped -} - -func (p *Producer) traceProduceChannel(out chan *kafka.Message) chan *kafka.Message { - if out == nil { - return out - } - - in := make(chan *kafka.Message, 1) - go func() { - for msg := range in { - span := p.startSpan(msg) - out <- msg - span.Finish() - } - }() - - return in -} - -func (p *Producer) startSpan(msg *kafka.Message) ddtrace.Span { - opts := []tracer.StartSpanOption{ - tracer.ServiceName(p.cfg.serviceName), - tracer.ResourceName("Produce Topic " + *msg.TopicPartition.Topic), - tracer.SpanType(ext.SpanTypeMessageProducer), - tracer.Tag("partition", msg.TopicPartition.Partition), - } - carrier := NewMessageCarrier(msg) - span, _ := tracer.StartSpanFromContext(p.cfg.ctx, "kafka.produce", opts...) - // inject the span context so consumers can pick it up - tracer.Inject(span.Context(), carrier) - return span -} - -// Close calls the underlying Producer.Close and also closes the internal -// wrapping producer channel. -func (p *Producer) Close() { - close(p.produceChannel) - p.Producer.Close() -} - -// Produce calls the underlying Producer.Produce and traces the request. -func (p *Producer) Produce(msg *kafka.Message, deliveryChan chan kafka.Event) error { - span := p.startSpan(msg) - - // if the user has selected a delivery channel, we will wrap it and - // wait for the delivery event to finish the span - if deliveryChan != nil { - oldDeliveryChan := deliveryChan - deliveryChan = make(chan kafka.Event) - go func() { - var err error - evt := <-deliveryChan - if msg, ok := evt.(*kafka.Message); ok { - // delivery errors are returned via TopicPartition.Error - err = msg.TopicPartition.Error - } - span.Finish(tracer.WithError(err)) - oldDeliveryChan <- evt - }() - } - - err := p.Producer.Produce(msg, deliveryChan) - // with no delivery channel, finish immediately - if deliveryChan == nil { - span.Finish(tracer.WithError(err)) - } - - return err -} - -// ProduceChannel returns a channel which can receive kafka Messages and will -// send them to the underlying producer channel. -func (p *Producer) ProduceChannel() chan *kafka.Message { - return p.produceChannel -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka_test.go deleted file mode 100644 index 82f30175..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/kafka_test.go +++ /dev/null @@ -1,172 +0,0 @@ -package kafka - -import ( - "os" - "testing" - - "github.com/confluentinc/confluent-kafka-go/kafka" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -var ( - testGroupID = "gotest" - testTopic = "gotest" -) - -func TestConsumerChannel(t *testing.T) { - // we can test consuming via the Events channel by artifically sending - // messages. Testing .Poll is done via an integration test. - - mt := mocktracer.Start() - defer mt.Stop() - - c, err := NewConsumer(&kafka.ConfigMap{ - "go.events.channel.enable": true, // required for the events channel to be turned on - "group.id": testGroupID, - "socket.timeout.ms": 10, - "session.timeout.ms": 10, - "enable.auto.offset.store": false, - }) - assert.NoError(t, err) - - err = c.Subscribe(testTopic, nil) - assert.NoError(t, err) - - go func() { - c.Consumer.Events() <- &kafka.Message{ - TopicPartition: kafka.TopicPartition{ - Topic: &testTopic, - Partition: 1, - Offset: 1, - }, - Key: []byte("key1"), - Value: []byte("value1"), - } - c.Consumer.Events() <- &kafka.Message{ - TopicPartition: kafka.TopicPartition{ - Topic: &testTopic, - Partition: 1, - Offset: 2, - }, - Key: []byte("key2"), - Value: []byte("value2"), - } - }() - - msg1 := (<-c.Events()).(*kafka.Message) - assert.Equal(t, []byte("key1"), msg1.Key) - msg2 := (<-c.Events()).(*kafka.Message) - assert.Equal(t, []byte("key2"), msg2.Key) - - c.Close() - // wait for the events channel to be closed - <-c.Events() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - for i, s := range spans { - assert.Equal(t, "kafka.consume", s.OperationName()) - assert.Equal(t, "kafka", s.Tag(ext.ServiceName)) - assert.Equal(t, "Consume Topic gotest", s.Tag(ext.ResourceName)) - assert.Equal(t, "queue", s.Tag(ext.SpanType)) - assert.Equal(t, int32(1), s.Tag("partition")) - assert.Equal(t, kafka.Offset(i+1), s.Tag("offset")) - } -} - -/* -to run the integration test locally: - - docker network create confluent - - docker run --rm \ - --name zookeeper \ - --network confluent \ - -p 2181:2181 \ - -e ZOOKEEPER_CLIENT_PORT=2181 \ - confluentinc/cp-zookeeper:5.0.0 - - docker run --rm \ - --name kafka \ - --network confluent \ - -p 9092:9092 \ - -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \ - -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \ - -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ - -e KAFKA_CREATE_TOPICS=gotest:1:1 \ - -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \ - confluentinc/cp-kafka:5.0.0 -*/ - -func TestConsumerPoll(t *testing.T) { - if _, ok := os.LookupEnv("INTEGRATION"); !ok { - t.Skip("to enable integration test, set the INTEGRATION environment variable") - } - - mt := mocktracer.Start() - defer mt.Stop() - - // first write a message to the topic - - p, err := NewProducer(&kafka.ConfigMap{ - "group.id": testGroupID, - "bootstrap.servers": "127.0.0.1:9092", - "go.delivery.reports": true, - }) - assert.NoError(t, err) - delivery := make(chan kafka.Event, 1) - err = p.Produce(&kafka.Message{ - TopicPartition: kafka.TopicPartition{ - Topic: &testTopic, - Partition: 0, - }, - Key: []byte("key2"), - Value: []byte("value2"), - }, delivery) - assert.NoError(t, err) - msg1, _ := (<-delivery).(*kafka.Message) - p.Close() - - // next attempt to consume the message - - c, err := NewConsumer(&kafka.ConfigMap{ - "group.id": testGroupID, - "bootstrap.servers": "127.0.0.1:9092", - "socket.timeout.ms": 1000, - "session.timeout.ms": 1000, - "enable.auto.offset.store": false, - }) - assert.NoError(t, err) - - err = c.Assign([]kafka.TopicPartition{ - {Topic: &testTopic, Partition: 0, Offset: msg1.TopicPartition.Offset}, - }) - assert.NoError(t, err) - - msg2, _ := c.Poll(3000).(*kafka.Message) - assert.Equal(t, msg1.String(), msg2.String()) - - c.Close() - - // now verify the spans - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - // they should be linked via headers - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - - s0 := spans[0] // produce - assert.Equal(t, "kafka.produce", s0.OperationName()) - assert.Equal(t, "kafka", s0.Tag(ext.ServiceName)) - assert.Equal(t, "Produce Topic gotest", s0.Tag(ext.ResourceName)) - assert.Equal(t, "queue", s0.Tag(ext.SpanType)) - assert.Equal(t, int32(0), s0.Tag("partition")) - - s1 := spans[1] // consume - assert.Equal(t, "kafka.consume", s1.OperationName()) - assert.Equal(t, "kafka", s1.Tag(ext.ServiceName)) - assert.Equal(t, "Consume Topic gotest", s1.Tag(ext.ResourceName)) - assert.Equal(t, "queue", s1.Tag(ext.SpanType)) - assert.Equal(t, int32(0), s1.Tag("partition")) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/option.go deleted file mode 100644 index 53e47ee5..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go/kafka/option.go +++ /dev/null @@ -1,36 +0,0 @@ -package kafka - -import "context" - -type config struct { - serviceName string - ctx context.Context -} - -// An Option customizes the config. -type Option func(cfg *config) - -func newConfig(opts ...Option) *config { - cfg := &config{ - serviceName: "kafka", - ctx: context.Background(), - } - for _, opt := range opts { - opt(cfg) - } - return cfg -} - -// WithContext sets the config context to ctx. -func WithContext(ctx context.Context) Option { - return func(cfg *config) { - cfg.ctx = ctx - } -} - -// WithServiceName sets the config service name to serviceName. -func WithServiceName(serviceName string) Option { - return func(cfg *config) { - cfg.serviceName = serviceName - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/conn.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/conn.go deleted file mode 100644 index 661bb91b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/conn.go +++ /dev/null @@ -1,119 +0,0 @@ -package sql // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - -import ( - "context" - "database/sql/driver" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -var _ driver.Conn = (*tracedConn)(nil) - -type tracedConn struct { - driver.Conn - *traceParams -} - -func (tc *tracedConn) BeginTx(ctx context.Context, opts driver.TxOptions) (tx driver.Tx, err error) { - span := tc.newChildSpanFromContext(ctx, "Begin", "") - defer func() { - span.Finish(tracer.WithError(err)) - }() - if connBeginTx, ok := tc.Conn.(driver.ConnBeginTx); ok { - tx, err = connBeginTx.BeginTx(ctx, opts) - if err != nil { - return nil, err - } - return &tracedTx{tx, tc.traceParams, ctx}, nil - } - tx, err = tc.Conn.Begin() - if err != nil { - return nil, err - } - return &tracedTx{tx, tc.traceParams, ctx}, nil -} - -func (tc *tracedConn) PrepareContext(ctx context.Context, query string) (stmt driver.Stmt, err error) { - span := tc.newChildSpanFromContext(ctx, "Prepare", query) - defer func() { - span.Finish(tracer.WithError(err)) - }() - if connPrepareCtx, ok := tc.Conn.(driver.ConnPrepareContext); ok { - stmt, err := connPrepareCtx.PrepareContext(ctx, query) - if err != nil { - return nil, err - } - return &tracedStmt{stmt, tc.traceParams, ctx, query}, nil - } - stmt, err = tc.Prepare(query) - if err != nil { - return nil, err - } - return &tracedStmt{stmt, tc.traceParams, ctx, query}, nil -} - -func (tc *tracedConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if execer, ok := tc.Conn.(driver.Execer); ok { - return execer.Exec(query, args) - } - return nil, driver.ErrSkip -} - -func (tc *tracedConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (r driver.Result, err error) { - span := tc.newChildSpanFromContext(ctx, "Exec", query) - defer func() { - span.Finish(tracer.WithError(err)) - }() - if execContext, ok := tc.Conn.(driver.ExecerContext); ok { - return execContext.ExecContext(ctx, query, args) - } - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - } - return tc.Exec(query, dargs) -} - -// tracedConn has a Ping method in order to implement the pinger interface -func (tc *tracedConn) Ping(ctx context.Context) (err error) { - span := tc.newChildSpanFromContext(ctx, "Ping", "") - defer func() { - span.Finish(tracer.WithError(err)) - }() - if pinger, ok := tc.Conn.(driver.Pinger); ok { - return pinger.Ping(ctx) - } - return nil -} - -func (tc *tracedConn) Query(query string, args []driver.Value) (driver.Rows, error) { - if queryer, ok := tc.Conn.(driver.Queryer); ok { - return queryer.Query(query, args) - } - return nil, driver.ErrSkip -} - -func (tc *tracedConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (rows driver.Rows, err error) { - span := tc.newChildSpanFromContext(ctx, "Query", query) - defer func() { - span.Finish(tracer.WithError(err)) - }() - if queryerContext, ok := tc.Conn.(driver.QueryerContext); ok { - return queryerContext.QueryContext(ctx, query, args) - } - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - } - return tc.Query(query, dargs) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/driver.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/driver.go deleted file mode 100644 index ef3e3468..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/driver.go +++ /dev/null @@ -1,82 +0,0 @@ -package sql - -import ( - "context" - "database/sql" - "database/sql/driver" - "fmt" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -var _ driver.Driver = (*tracedDriver)(nil) - -// tracedDriver wraps an inner sql driver with tracing. It implements the (database/sql).driver.Driver interface. -type tracedDriver struct { - driver.Driver - driverName string - config *registerConfig -} - -// Open returns a tracedConn so that we can pass all the info we get from the DSN -// all along the tracing -func (d *tracedDriver) Open(dsn string) (c driver.Conn, err error) { - var ( - meta map[string]string - conn driver.Conn - ) - meta, err = internal.ParseDSN(d.driverName, dsn) - if err != nil { - return nil, err - } - conn, err = d.Driver.Open(dsn) - if err != nil { - return nil, err - } - tp := &traceParams{ - driverName: d.driverName, - config: d.config, - meta: meta, - } - return &tracedConn{conn, tp}, err -} - -// traceParams stores all information relative to the tracing -type traceParams struct { - config *registerConfig - driverName string - resource string - meta map[string]string -} - -func (tp *traceParams) newChildSpanFromContext(ctx context.Context, resource string, query string) ddtrace.Span { - name := fmt.Sprintf("%s.query", tp.driverName) - span, _ := tracer.StartSpanFromContext(ctx, name, - tracer.SpanType(ext.SpanTypeSQL), - tracer.ServiceName(tp.config.serviceName), - ) - if query != "" { - resource = query - } - span.SetTag(ext.ResourceName, resource) - for k, v := range tp.meta { - span.SetTag(k, v) - } - return span -} - -// tracedDriverName returns the name of the traced version for the given driver name. -func tracedDriverName(name string) string { return name + ".traced" } - -// driverExists returns true if the given driver name has already been registered. -func driverExists(name string) bool { - for _, v := range sql.Drivers() { - if name == v { - return true - } - } - return false -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/example_test.go deleted file mode 100644 index 7a43b6a6..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/example_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package sql_test - -import ( - "context" - "log" - - sqlite "github.com/mattn/go-sqlite3" // Setup application to use Sqlite - sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/go-sql-driver/mysql" - "github.com/lib/pq" -) - -func Example() { - // The first step is to register the driver that we will be using. - sqltrace.Register("postgres", &pq.Driver{}) - - // Followed by a call to Open. - db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable") - if err != nil { - log.Fatal(err) - } - - // Then, we continue using the database/sql package as we normally would, with tracing. - rows, err := db.Query("SELECT name FROM users WHERE age=?", 27) - if err != nil { - log.Fatal(err) - } - defer rows.Close() -} - -func Example_context() { - // Register the driver that we will be using (in this case mysql) under a custom service name. - sqltrace.Register("mysql", &mysql.MySQLDriver{}, sqltrace.WithServiceName("my-db")) - - // Open a connection to the DB using the driver we've just registered with tracing. - db, err := sqltrace.Open("mysql", "user:password@/dbname") - if err != nil { - log.Fatal(err) - } - - // Create a root span, giving name, server and resource. - _, ctx := tracer.StartSpanFromContext(context.Background(), "my-query", - tracer.SpanType(ext.SpanTypeSQL), - tracer.ServiceName("my-db"), - tracer.ResourceName("initial-access"), - ) - - // Subsequent spans inherit their parent from context. - rows, err := db.QueryContext(ctx, "SELECT * FROM city LIMIT 5") - if err != nil { - log.Fatal(err) - } - rows.Close() -} - -func Example_sqlite() { - // Register the driver that we will be using (in this case Sqlite) under a custom service name. - sqltrace.Register("sqlite", &sqlite.SQLiteDriver{}, sqltrace.WithServiceName("sqlite-example")) - - // Open a connection to the DB using the driver we've just registered with tracing. - db, err := sqltrace.Open("sqlite", "./test.db") - if err != nil { - log.Fatal(err) - } - - // Create a root span, giving name, server and resource. - _, ctx := tracer.StartSpanFromContext(context.Background(), "my-query", - tracer.SpanType("example"), - tracer.ServiceName("sqlite-example"), - tracer.ResourceName("initial-access"), - ) - - // Subsequent spans inherit their parent from context. - rows, err := db.QueryContext(ctx, "SELECT * FROM city LIMIT 5") - if err != nil { - log.Fatal(err) - } - rows.Close() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn.go deleted file mode 100644 index 2ef12e8c..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn.go +++ /dev/null @@ -1,83 +0,0 @@ -package internal // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal" - -import ( - "net" - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -// ParseDSN parses various supported DSN types (currently mysql and postgres) into a -// map of key/value pairs which can be used as valid tags. -func ParseDSN(driverName, dsn string) (meta map[string]string, err error) { - meta = make(map[string]string) - switch driverName { - case "mysql": - meta, err = parseMySQLDSN(dsn) - if err != nil { - return - } - case "postgres": - meta, err = parsePostgresDSN(dsn) - if err != nil { - return - } - default: - // not supported - } - return reduceKeys(meta), nil -} - -// reduceKeys takes a map containing parsed DSN information and returns a new -// map containing only the keys relevant as tracing tags, if any. -func reduceKeys(meta map[string]string) map[string]string { - var keysOfInterest = map[string]string{ - "user": ext.DBUser, - "application_name": ext.DBApplication, - "dbname": ext.DBName, - "host": ext.TargetHost, - "port": ext.TargetPort, - } - m := make(map[string]string) - for k, v := range meta { - if nk, ok := keysOfInterest[k]; ok { - m[nk] = v - } - } - return m -} - -// parseMySQLDSN parses a mysql-type dsn into a map. -func parseMySQLDSN(dsn string) (m map[string]string, err error) { - var cfg *mySQLConfig - if cfg, err = mySQLConfigFromDSN(dsn); err == nil { - host, port, _ := net.SplitHostPort(cfg.Addr) - m = map[string]string{ - "user": cfg.User, - "host": host, - "port": port, - "dbname": cfg.DBName, - } - return m, nil - } - return nil, err -} - -// parsePostgresDSN parses a postgres-type dsn into a map. -func parsePostgresDSN(dsn string) (map[string]string, error) { - var err error - if strings.HasPrefix(dsn, "postgres://") || strings.HasPrefix(dsn, "postgresql://") { - // url form, convert to opts - dsn, err = parseURL(dsn) - if err != nil { - return nil, err - } - } - meta := make(map[string]string) - if err := parseOpts(dsn, meta); err != nil { - return nil, err - } - // remove sensitive information - delete(meta, "password") - return meta, nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn_test.go deleted file mode 100644 index d9fa03f8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/dsn_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package internal - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -func TestParseDSN(t *testing.T) { - assert := assert.New(t) - for _, tt := range []struct { - driverName string - dsn string - expected map[string]string - }{ - { - driverName: "postgres", - dsn: "postgres://bob:secret@1.2.3.4:5432/mydb?sslmode=verify-full", - expected: map[string]string{ - ext.DBUser: "bob", - ext.TargetHost: "1.2.3.4", - ext.TargetPort: "5432", - ext.DBName: "mydb", - }, - }, - { - driverName: "mysql", - dsn: "bob:secret@tcp(1.2.3.4:5432)/mydb", - expected: map[string]string{ - ext.DBName: "mydb", - ext.DBUser: "bob", - ext.TargetHost: "1.2.3.4", - ext.TargetPort: "5432", - }, - }, - { - driverName: "postgres", - dsn: "connect_timeout=0 binary_parameters=no password=zMWmQz26GORmgVVKEbEl dbname=dogdatastaging application_name=trace-api port=5433 sslmode=disable host=master-db-master-active.postgres.service.consul user=dog", - expected: map[string]string{ - ext.TargetPort: "5433", - ext.TargetHost: "master-db-master-active.postgres.service.consul", - ext.DBName: "dogdatastaging", - ext.DBApplication: "trace-api", - ext.DBUser: "dog", - }, - }, - } { - m, err := ParseDSN(tt.driverName, tt.dsn) - assert.Equal(nil, err) - assert.Equal(tt.expected, m) - } -} - -func TestParseMySQLDSN(t *testing.T) { - assert := assert.New(t) - expected := map[string]string{ - "dbname": "mydb", - "user": "bob", - "host": "1.2.3.4", - "port": "5432", - } - m, err := parseMySQLDSN("bob:secret@tcp(1.2.3.4:5432)/mydb") - assert.Equal(nil, err) - assert.Equal(expected, m) -} - -func TestParsePostgresDSN(t *testing.T) { - assert := assert.New(t) - - for _, tt := range []struct { - dsn string - expected map[string]string - }{ - { - dsn: "postgres://bob:secret@1.2.3.4:5432/mydb?sslmode=verify-full", - expected: map[string]string{ - "user": "bob", - "host": "1.2.3.4", - "port": "5432", - "dbname": "mydb", - "sslmode": "verify-full", - }, - }, - { - dsn: "password=zMWmQz26GORmgVVKEbEl dbname=dogdatastaging application_name=trace-api port=5433 host=master-db-master-active.postgres.service.consul user=dog", - expected: map[string]string{ - "user": "dog", - "port": "5433", - "host": "master-db-master-active.postgres.service.consul", - "dbname": "dogdatastaging", - "application_name": "trace-api", - }, - }, - } { - m, err := parsePostgresDSN(tt.dsn) - assert.Equal(nil, err) - assert.Equal(tt.expected, m) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/mysql.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/mysql.go deleted file mode 100644 index acf7cce0..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/mysql.go +++ /dev/null @@ -1,167 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. -// -// Copied from package github.com/go-sql-driver: -// https://github.com/go-sql-driver/mysql/blob/9181e3a86a19bacd63e68d43ae8b7b36320d8092/dsn.go - -package internal - -import ( - "crypto/tls" - "errors" - "strings" - "time" -) - -const defaultCollation = "utf8_general_ci" - -// A blacklist of collations which is unsafe to interpolate parameters. -// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. -var unsafeCollations = map[string]bool{ - "big5_chinese_ci": true, - "sjis_japanese_ci": true, - "gbk_chinese_ci": true, - "big5_bin": true, - "gb2312_bin": true, - "gbk_bin": true, - "sjis_bin": true, - "cp932_japanese_ci": true, - "cp932_bin": true, -} - -var ( - errInvalidDSNUnescaped = errors.New("invalid DSN: did you forget to escape a param value?") - errInvalidDSNAddr = errors.New("invalid DSN: network address not terminated (missing closing brace)") - errInvalidDSNNoSlash = errors.New("invalid DSN: missing the slash separating the database name") - errInvalidDSNUnsafeCollation = errors.New("invalid DSN: interpolateParams can not be used with unsafe collations") -) - -// Config is a configuration parsed from a DSN string -type mySQLConfig struct { - User string // Username - Passwd string // Password (requires User) - Net string // Network type - Addr string // Network address (requires Net) - DBName string // Database name - Params map[string]string // Connection parameters - Collation string // Connection collation - Loc *time.Location // Location for time.Time values - MaxAllowedPacket int // Max packet size allowed - TLSConfig string // TLS configuration name - tls *tls.Config // TLS configuration - Timeout time.Duration // Dial timeout - ReadTimeout time.Duration // I/O read timeout - WriteTimeout time.Duration // I/O write timeout - - AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE - AllowCleartextPasswords bool // Allows the cleartext client side plugin - AllowNativePasswords bool // Allows the native password authentication method - AllowOldPasswords bool // Allows the old insecure password method - ClientFoundRows bool // Return number of matching rows instead of rows changed - ColumnsWithAlias bool // Prepend table alias to column names - InterpolateParams bool // Interpolate placeholders into query string - MultiStatements bool // Allow multiple statements in one query - ParseTime bool // Parse time values to time.Time - Strict bool // Return warnings as errors -} - -// mySQLConfigFromDSN parses the MySQL DSN string to a Config. -func mySQLConfigFromDSN(dsn string) (cfg *mySQLConfig, err error) { - // New config with some default values - cfg = &mySQLConfig{ - Loc: time.UTC, - Collation: defaultCollation, - } - - // [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN] - // Find the last '/' (since the password or the net addr might contain a '/') - foundSlash := false - for i := len(dsn) - 1; i >= 0; i-- { - if dsn[i] == '/' { - foundSlash = true - var j, k int - - // left part is empty if i <= 0 - if i > 0 { - // [username[:password]@][protocol[(address)]] - // Find the last '@' in dsn[:i] - for j = i; j >= 0; j-- { - if dsn[j] == '@' { - // username[:password] - // Find the first ':' in dsn[:j] - for k = 0; k < j; k++ { - if dsn[k] == ':' { - cfg.Passwd = dsn[k+1 : j] - break - } - } - cfg.User = dsn[:k] - - break - } - } - - // [protocol[(address)]] - // Find the first '(' in dsn[j+1:i] - for k = j + 1; k < i; k++ { - if dsn[k] == '(' { - // dsn[i-1] must be == ')' if an address is specified - if dsn[i-1] != ')' { - if strings.ContainsRune(dsn[k+1:i], ')') { - return nil, errInvalidDSNUnescaped - } - return nil, errInvalidDSNAddr - } - cfg.Addr = dsn[k+1 : i-1] - break - } - } - cfg.Net = dsn[j+1 : k] - } - - // dbname[?param1=value1&...¶mN=valueN] - // Find the first '?' in dsn[i+1:] - for j = i + 1; j < len(dsn); j++ { - if dsn[j] == '?' { - break - } - } - cfg.DBName = dsn[i+1 : j] - - break - } - } - - if !foundSlash && len(dsn) > 0 { - return nil, errInvalidDSNNoSlash - } - - if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { - return nil, errInvalidDSNUnsafeCollation - } - - // Set default network if empty - if cfg.Net == "" { - cfg.Net = "tcp" - } - - // Set default address if empty - if cfg.Addr == "" { - switch cfg.Net { - case "tcp": - cfg.Addr = "127.0.0.1:3306" - case "unix": - cfg.Addr = "/tmp/mysql.sock" - default: - return nil, errors.New("default addr for network '" + cfg.Net + "' unknown") - } - - } - - return -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/postgres.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/postgres.go deleted file mode 100644 index 11bc3e3b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/internal/postgres.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copied from package github.com/lib/pq: -// -// parseOpts: https://github.com/lib/pq/blob/61fe37aa2ee24fabcdbe5c4ac1d4ac566f88f345/conn.go -// parseURL: https://github.com/lib/pq/blob/50761b0867bd1d9d069276790bcd4a3bccf2324a/url.go - -package internal - -import ( - "fmt" - "net" - nurl "net/url" - "sort" - "strings" - "unicode" -) - -type values map[string]string - -// scanner implements a tokenizer for libpq-style option strings. -type scanner struct { - s []rune - i int -} - -// newScanner returns a new scanner initialized with the option string s. -func newScanner(s string) *scanner { - return &scanner{[]rune(s), 0} -} - -// Next returns the next rune. -// It returns 0, false if the end of the text has been reached. -func (s *scanner) Next() (rune, bool) { - if s.i >= len(s.s) { - return 0, false - } - r := s.s[s.i] - s.i++ - return r, true -} - -// SkipSpaces returns the next non-whitespace rune. -// It returns 0, false if the end of the text has been reached. -func (s *scanner) SkipSpaces() (rune, bool) { - r, ok := s.Next() - for unicode.IsSpace(r) && ok { - r, ok = s.Next() - } - return r, ok -} - -// parseOpts parses the options from name and adds them to the values. -// The parsing code is based on conninfo_parse from libpq's fe-connect.c -func parseOpts(name string, o values) error { - s := newScanner(name) - - for { - var ( - keyRunes, valRunes []rune - r rune - ok bool - ) - - if r, ok = s.SkipSpaces(); !ok { - break - } - - // Scan the key - for !unicode.IsSpace(r) && r != '=' { - keyRunes = append(keyRunes, r) - if r, ok = s.Next(); !ok { - break - } - } - - // Skip any whitespace if we're not at the = yet - if r != '=' { - r, ok = s.SkipSpaces() - } - - // The current character should be = - if r != '=' || !ok { - return fmt.Errorf(`missing "=" after %q in connection info string"`, string(keyRunes)) - } - - // Skip any whitespace after the = - if r, ok = s.SkipSpaces(); !ok { - // If we reach the end here, the last value is just an empty string as per libpq. - o[string(keyRunes)] = "" - break - } - - if r != '\'' { - for !unicode.IsSpace(r) { - if r == '\\' { - if r, ok = s.Next(); !ok { - return fmt.Errorf(`missing character after backslash`) - } - } - valRunes = append(valRunes, r) - - if r, ok = s.Next(); !ok { - break - } - } - } else { - quote: - for { - if r, ok = s.Next(); !ok { - return fmt.Errorf(`unterminated quoted string literal in connection string`) - } - switch r { - case '\'': - break quote - case '\\': - r, _ = s.Next() - fallthrough - default: - valRunes = append(valRunes, r) - } - } - } - - o[string(keyRunes)] = string(valRunes) - } - - return nil -} - -// parseURL no longer needs to be used by clients of this library since supplying a URL as a -// connection string to sql.Open() is now supported: -// -// sql.Open("postgres", "postgres://bob:secret@1.2.3.4:5432/mydb?sslmode=verify-full") -// -// It remains exported here for backwards-compatibility. -// -// parseURL converts a url to a connection string for driver.Open. -// Example: -// -// "postgres://bob:secret@1.2.3.4:5432/mydb?sslmode=verify-full" -// -// converts to: -// -// "user=bob password=secret host=1.2.3.4 port=5432 dbname=mydb sslmode=verify-full" -// -// A minimal example: -// -// "postgres://" -// -// This will be blank, causing driver.Open to use all of the defaults -func parseURL(url string) (string, error) { - u, err := nurl.Parse(url) - if err != nil { - return "", err - } - - if u.Scheme != "postgres" && u.Scheme != "postgresql" { - return "", fmt.Errorf("invalid connection protocol: %s", u.Scheme) - } - - var kvs []string - escaper := strings.NewReplacer(` `, `\ `, `'`, `\'`, `\`, `\\`) - accrue := func(k, v string) { - if v != "" { - kvs = append(kvs, k+"="+escaper.Replace(v)) - } - } - - if u.User != nil { - v := u.User.Username() - accrue("user", v) - - v, _ = u.User.Password() - accrue("password", v) - } - - if host, port, err := net.SplitHostPort(u.Host); err != nil { - accrue("host", u.Host) - } else { - accrue("host", host) - accrue("port", port) - } - - if u.Path != "" { - accrue("dbname", u.Path[1:]) - } - - q := u.Query() - for k := range q { - accrue(k, q.Get(k)) - } - - sort.Strings(kvs) // Makes testing easier (not a performance concern) - return strings.Join(kvs, " "), nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/option.go deleted file mode 100644 index f3d18d9a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package sql - -type registerConfig struct{ serviceName string } - -// RegisterOption represents an option that can be passed to Register. -type RegisterOption func(*registerConfig) - -func defaults(cfg *registerConfig) { - // default cfg.serviceName set in Register based on driver name -} - -// WithServiceName sets the given service name for the registered driver. -func WithServiceName(name string) RegisterOption { - return func(cfg *registerConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql.go deleted file mode 100644 index 301256b1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql.go +++ /dev/null @@ -1,60 +0,0 @@ -// Package sql provides functions to trace the database/sql package (https://golang.org/pkg/database/sql). -// It will automatically augment operations such as connections, statements and transactions with tracing. -// -// We start by telling the package which driver we will be using. For example, if we are using "github.com/lib/pq", -// we would do as follows: -// -// sqltrace.Register("pq", pq.Driver{}) -// db, err := sqltrace.Open("pq", "postgres://pqgotest:password@localhost...") -// -// The rest of our application would continue as usual, but with tracing enabled. -// -package sql - -import ( - "database/sql" - "database/sql/driver" - "errors" -) - -// Register tells the sql integration package about the driver that we will be tracing. It must -// be called before Open, if that connection is to be traced. It uses the driverName suffixed -// with ".db" as the default service name. -func Register(driverName string, driver driver.Driver, opts ...RegisterOption) { - if driver == nil { - panic("sqltrace: Register driver is nil") - } - name := tracedDriverName(driverName) - if driverExists(name) { - // no problem, carry on - return - } - cfg := new(registerConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - if cfg.serviceName == "" { - cfg.serviceName = driverName + ".db" - } - sql.Register(name, &tracedDriver{ - Driver: driver, - driverName: driverName, - config: cfg, - }) -} - -// errNotRegistered is returned when there is an attempt to open a database connection towards a driver -// that has not previously been registered using this package. -var errNotRegistered = errors.New("sqltrace: Register must be called before Open") - -// Open returns connection to a DB using a the traced version of the given driver. In order for Open -// to work, the driver must first be registered using Register or RegisterWithServiceName. If this -// did not occur, Open will return an error. -func Open(driverName, dataSourceName string) (*sql.DB, error) { - name := tracedDriverName(driverName) - if !driverExists(name) { - return nil, errNotRegistered - } - return sql.Open(name, dataSourceName) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql_test.go deleted file mode 100644 index e9296016..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/sql_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package sql - -import ( - "fmt" - "log" - "os" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - - "github.com/go-sql-driver/mysql" - "github.com/lib/pq" -) - -// tableName holds the SQL table that these tests will be run against. It must be unique cross-repo. -const tableName = "testsql" - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - defer sqltest.Prepare(tableName)() - os.Exit(m.Run()) -} - -func TestMySQL(t *testing.T) { - Register("mysql", &mysql.MySQLDriver{}) - db, err := Open("mysql", "test:test@tcp(127.0.0.1:3306)/test") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - testConfig := &sqltest.Config{ - DB: db, - DriverName: "mysql", - TableName: tableName, - ExpectName: "mysql.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "mysql.db", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "3306", - ext.DBUser: "test", - ext.DBName: "test", - }, - } - sqltest.RunAll(t, testConfig) -} - -func TestPostgres(t *testing.T) { - Register("postgres", &pq.Driver{}, WithServiceName("postgres-test")) - db, err := Open("postgres", "postgres://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - testConfig := &sqltest.Config{ - DB: db, - DriverName: "postgres", - TableName: tableName, - ExpectName: "postgres.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "postgres-test", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "5432", - ext.DBUser: "postgres", - ext.DBName: "postgres", - }, - } - sqltest.RunAll(t, testConfig) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/stmt.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/stmt.go deleted file mode 100644 index 358c79af..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/stmt.go +++ /dev/null @@ -1,82 +0,0 @@ -package sql - -import ( - "context" - "database/sql/driver" - "errors" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -var _ driver.Stmt = (*tracedStmt)(nil) - -// tracedStmt is traced version of sql.Stmt -type tracedStmt struct { - driver.Stmt - *traceParams - ctx context.Context - query string -} - -// Close sends a span before closing a statement -func (s *tracedStmt) Close() (err error) { - span := s.newChildSpanFromContext(s.ctx, "Close", "") - defer func() { - span.Finish(tracer.WithError(err)) - }() - return s.Stmt.Close() -} - -// ExecContext is needed to implement the driver.StmtExecContext interface -func (s *tracedStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (res driver.Result, err error) { - span := s.newChildSpanFromContext(ctx, "Exec", s.query) - defer func() { - span.Finish(tracer.WithError(err)) - }() - if stmtExecContext, ok := s.Stmt.(driver.StmtExecContext); ok { - return stmtExecContext.ExecContext(ctx, args) - } - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - } - return s.Exec(dargs) -} - -// QueryContext is needed to implement the driver.StmtQueryContext interface -func (s *tracedStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (rows driver.Rows, err error) { - span := s.newChildSpanFromContext(ctx, "Query", s.query) - defer func() { - span.Finish(tracer.WithError(err)) - }() - if stmtQueryContext, ok := s.Stmt.(driver.StmtQueryContext); ok { - return stmtQueryContext.QueryContext(ctx, args) - } - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - } - return s.Query(dargs) -} - -// copied from stdlib database/sql package: src/database/sql/ctxutil.go -func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { - dargs := make([]driver.Value, len(named)) - for n, param := range named { - if len(param.Name) > 0 { - return nil, errors.New("sql: driver does not support the use of Named Parameters") - } - dargs[n] = param.Value - } - return dargs, nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/tx.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/tx.go deleted file mode 100644 index 6ad1a829..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql/tx.go +++ /dev/null @@ -1,35 +0,0 @@ -package sql - -import ( - "context" - "database/sql/driver" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -var _ driver.Tx = (*tracedTx)(nil) - -// tracedTx is a traced version of sql.Tx -type tracedTx struct { - driver.Tx - *traceParams - ctx context.Context -} - -// Commit sends a span at the end of the transaction -func (t *tracedTx) Commit() (err error) { - span := t.newChildSpanFromContext(t.ctx, "Commit", "") - defer func() { - span.Finish(tracer.WithError(err)) - }() - return t.Tx.Commit() -} - -// Rollback sends a span if the connection is aborted -func (t *tracedTx) Rollback() (err error) { - span := t.newChildSpanFromContext(t.ctx, "Rollback", "") - defer func() { - span.Finish(tracer.WithError(err)) - }() - return t.Tx.Rollback() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/example_test.go deleted file mode 100644 index 9086e748..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/example_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package redigo_test - -import ( - "context" - "log" - "time" - - redigotrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/garyburd/redigo/redis" -) - -// To start tracing Redis commands, use the TracedDial function to create a connection, -// passing in a service name of choice. -func Example() { - c, err := redigotrace.Dial("tcp", "127.0.0.1:6379") - if err != nil { - log.Fatal(err) - } - - // Emit spans per command by using your Redis connection as usual - c.Do("SET", "vehicle", "truck") - - // Use a context to pass information down the call chain - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.ServiceName("web"), - tracer.ResourceName("/home"), - ) - - // When passed a context as the final argument, c.Do will emit a span inheriting from 'parent.request' - c.Do("SET", "food", "cheese", ctx) - root.Finish() -} - -func Example_tracedConn() { - c, err := redigotrace.Dial("tcp", "127.0.0.1:6379", - redigotrace.WithServiceName("my-redis-backend"), - redis.DialKeepAlive(time.Minute), - ) - if err != nil { - log.Fatal(err) - } - - // Emit spans per command by using your Redis connection as usual - c.Do("SET", "vehicle", "truck") - - // Use a context to pass information down the call chain - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.ServiceName("web"), - tracer.ResourceName("/home"), - ) - - // When passed a context as the final argument, c.Do will emit a span inheriting from 'parent.request' - c.Do("SET", "food", "cheese", ctx) - root.Finish() -} - -// Alternatively, provide a redis URL to the TracedDialURL function -func Example_dialURL() { - c, err := redigotrace.DialURL("redis://127.0.0.1:6379") - if err != nil { - log.Fatal(err) - } - c.Do("SET", "vehicle", "truck") -} - -// When using a redigo Pool, set your Dial function to return a traced connection -func Example_pool() { - pool := &redis.Pool{ - Dial: func() (redis.Conn, error) { - return redigotrace.Dial("tcp", "127.0.0.1:6379", - redigotrace.WithServiceName("my-redis-backend"), - ) - }, - } - - c := pool.Get() - c.Do("SET", " whiskey", " glass") -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/option.go deleted file mode 100644 index 173cafc1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package redigo // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo" - -type dialConfig struct{ serviceName string } - -// DialOption represents an option that can be passed to Dial. -type DialOption func(*dialConfig) - -func defaults(cfg *dialConfig) { - cfg.serviceName = "redis.conn" -} - -// WithServiceName sets the given service name for the dialled connection. -func WithServiceName(name string) DialOption { - return func(cfg *dialConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo.go deleted file mode 100644 index 94dc3d11..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo.go +++ /dev/null @@ -1,153 +0,0 @@ -// Package redigo provides functions to trace the garyburd/redigo package (https://github.com/garyburd/redigo). -package redigo - -import ( - "bytes" - "context" - "fmt" - "net" - "net/url" - "strconv" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - redis "github.com/garyburd/redigo/redis" -) - -// Conn is an implementation of the redis.Conn interface that supports tracing -type Conn struct { - redis.Conn - *params -} - -// params contains fields and metadata useful for command tracing -type params struct { - config *dialConfig - network string - host string - port string -} - -// parseOptions parses a set of arbitrary options (which can be of type redis.DialOption -// or the local DialOption) and returns the corresponding redis.DialOption set as well as -// a configured dialConfig. -func parseOptions(options ...interface{}) ([]redis.DialOption, *dialConfig) { - dialOpts := []redis.DialOption{} - cfg := new(dialConfig) - defaults(cfg) - for _, opt := range options { - switch o := opt.(type) { - case redis.DialOption: - dialOpts = append(dialOpts, o) - case DialOption: - o(cfg) - } - } - return dialOpts, cfg -} - -// Dial dials into the network address and returns a traced redis.Conn. -// The set of supported options must be either of type redis.DialOption or this package's DialOption. -func Dial(network, address string, options ...interface{}) (redis.Conn, error) { - dialOpts, cfg := parseOptions(options...) - c, err := redis.Dial(network, address, dialOpts...) - if err != nil { - return nil, err - } - host, port, err := net.SplitHostPort(address) - if err != nil { - return nil, err - } - tc := Conn{c, ¶ms{cfg, network, host, port}} - return tc, nil -} - -// DialURL connects to a Redis server at the given URL using the Redis -// URI scheme. URLs should follow the draft IANA specification for the -// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis). -// The returned redis.Conn is traced. -func DialURL(rawurl string, options ...interface{}) (redis.Conn, error) { - dialOpts, cfg := parseOptions(options...) - u, err := url.Parse(rawurl) - if err != nil { - return Conn{}, err - } - host, port, err := net.SplitHostPort(u.Host) - if err != nil { - host = u.Host - port = "6379" - } - if host == "" { - host = "localhost" - } - network := "tcp" - c, err := redis.DialURL(rawurl, dialOpts...) - tc := Conn{c, ¶ms{cfg, network, host, port}} - return tc, err -} - -// newChildSpan creates a span inheriting from the given context. It adds to the span useful metadata about the traced Redis connection -func (tc Conn) newChildSpan(ctx context.Context) ddtrace.Span { - p := tc.params - span, _ := tracer.StartSpanFromContext(ctx, "redis.command", - tracer.SpanType(ext.SpanTypeRedis), - tracer.ServiceName(p.config.serviceName), - ) - span.SetTag("out.network", p.network) - span.SetTag(ext.TargetPort, p.port) - span.SetTag(ext.TargetHost, p.host) - return span -} - -// Do wraps redis.Conn.Do. It sends a command to the Redis server and returns the received reply. -// In the process it emits a span containing key information about the command sent. -// When passed a context.Context as the final argument, Do will ensure that any span created -// inherits from this context. The rest of the arguments are passed through to the Redis server unchanged. -func (tc Conn) Do(commandName string, args ...interface{}) (reply interface{}, err error) { - var ( - ctx context.Context - ok bool - ) - if n := len(args); n > 0 { - ctx, ok = args[n-1].(context.Context) - if ok { - args = args[:n-1] - } - } - - span := tc.newChildSpan(ctx) - defer func() { - span.Finish(tracer.WithError(err)) - }() - - span.SetTag("redis.args_length", strconv.Itoa(len(args))) - - if len(commandName) > 0 { - span.SetTag(ext.ResourceName, commandName) - } else { - // When the command argument to the Do method is "", then the Do method will flush the output buffer - // See https://godoc.org/github.com/garyburd/redigo/redis#hdr-Pipelining - span.SetTag(ext.ResourceName, "redigo.Conn.Flush") - } - var b bytes.Buffer - b.WriteString(commandName) - for _, arg := range args { - b.WriteString(" ") - switch arg := arg.(type) { - case string: - b.WriteString(arg) - case int: - b.WriteString(strconv.Itoa(arg)) - case int32: - b.WriteString(strconv.FormatInt(int64(arg), 10)) - case int64: - b.WriteString(strconv.FormatInt(arg, 10)) - case fmt.Stringer: - b.WriteString(arg.String()) - } - } - span.SetTag("redis.raw_command", b.String()) - return tc.Conn.Do(commandName, args...) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo_test.go deleted file mode 100644 index fa5e64b4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo/redigo_test.go +++ /dev/null @@ -1,176 +0,0 @@ -package redigo - -import ( - "context" - "fmt" - "os" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/garyburd/redigo/redis" - "github.com/stretchr/testify/assert" -) - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - os.Exit(m.Run()) -} - -func TestClient(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - c, err := Dial("tcp", "127.0.0.1:6379", WithServiceName("my-service")) - assert.Nil(err) - c.Do("SET", 1, "truck") - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal("redis.command", span.OperationName()) - assert.Equal(ext.SpanTypeRedis, span.Tag(ext.SpanType)) - assert.Equal("my-service", span.Tag(ext.ServiceName)) - assert.Equal("SET", span.Tag(ext.ResourceName)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("SET 1 truck", span.Tag("redis.raw_command")) - assert.Equal("2", span.Tag("redis.args_length")) -} - -func TestCommandError(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - c, err := Dial("tcp", "127.0.0.1:6379", WithServiceName("my-service")) - assert.Nil(err) - _, err = c.Do("NOT_A_COMMAND", context.Background()) - assert.NotNil(err) - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - - assert.Equal(err, span.Tag(ext.Error).(error)) - assert.Equal("redis.command", span.OperationName()) - assert.Equal("my-service", span.Tag(ext.ServiceName)) - assert.Equal("NOT_A_COMMAND", span.Tag(ext.ResourceName)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("NOT_A_COMMAND", span.Tag("redis.raw_command")) -} - -func TestConnectionError(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - _, err := Dial("tcp", "127.0.0.1:1000", WithServiceName("redis-service")) - - assert.NotNil(err) - assert.Contains(err.Error(), "dial tcp 127.0.0.1:1000") -} - -func TestInheritance(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.span") - client, err := Dial("tcp", "127.0.0.1:6379", WithServiceName("redis-service")) - assert.Nil(err) - client.Do("SET", "water", "bottle", ctx) - root.Finish() - - spans := mt.FinishedSpans() - assert.Len(spans, 2) - - var child, parent mocktracer.Span - for _, s := range spans { - switch s.OperationName() { - case "redis.command": - child = s - case "parent.span": - parent = s - } - } - assert.NotNil(child) - assert.NotNil(parent) - - assert.Equal(child.ParentID(), parent.SpanID()) - assert.Equal(child.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(child.Tag(ext.TargetPort), "6379") -} - -type stringifyTest struct{ A, B int } - -func (ts stringifyTest) String() string { return fmt.Sprintf("[%d, %d]", ts.A, ts.B) } - -func TestCommandsToSring(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - str := stringifyTest{A: 57, B: 8} - c, err := Dial("tcp", "127.0.0.1:6379", WithServiceName("my-service")) - assert.Nil(err) - c.Do("SADD", "testSet", "a", int(0), int32(1), int64(2), str, context.Background()) - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - - assert.Equal("redis.command", span.OperationName()) - assert.Equal("my-service", span.Tag(ext.ServiceName)) - assert.Equal("SADD", span.Tag(ext.ResourceName)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("SADD testSet a 0 1 2 [57, 8]", span.Tag("redis.raw_command")) -} - -func TestPool(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - pool := &redis.Pool{ - MaxIdle: 2, - MaxActive: 3, - IdleTimeout: 23, - Wait: true, - Dial: func() (redis.Conn, error) { - return Dial("tcp", "127.0.0.1:6379", WithServiceName("my-service")) - }, - } - - pc := pool.Get() - pc.Do("SET", " whiskey", " glass", context.Background()) - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - assert.Equal(span.Tag("out.network"), "tcp") -} - -func TestTracingDialUrl(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - url := "redis://127.0.0.1:6379" - client, err := DialURL(url, WithServiceName("redis-service")) - assert.Nil(err) - client.Do("SET", "ONE", " TWO", context.Background()) - - spans := mt.FinishedSpans() - assert.True(len(spans) > 0) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/example_test.go deleted file mode 100644 index a6f11b7a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/example_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package gin_test - -import ( - gintrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gin-gonic/gin" -) - -// To start tracing requests, add the trace middleware to your Gin router. -func Example() { - // Create a gin.Engine - r := gin.New() - - // Use the tracer middleware with your desired service name. - r.Use(gintrace.Middleware("my-web-app")) - - // Set up some endpoints. - r.GET("/hello", func(c *gin.Context) { - c.String(200, "hello world!") - }) - - // And start gathering request traces. - r.Run(":8080") -} - -func ExampleHTML() { - r := gin.Default() - r.Use(gintrace.Middleware("my-web-app")) - r.LoadHTMLGlob("templates/*") - - r.GET("/index", func(c *gin.Context) { - // render the html and trace the execution time. - gintrace.HTML(c, 200, "index.tmpl", gin.H{ - "title": "Main website", - }) - }) -} - -func Example_spanFromContext() { - r := gin.Default() - r.Use(gintrace.Middleware("image-encoder")) - r.GET("/image/encode", func(c *gin.Context) { - ctx := c.Request.Context() - // create a child span to track operation timing. - encodeSpan, _ := tracer.StartSpanFromContext(ctx, "image.encode") - // encode a image - encodeSpan.Finish() - - c.String(200, "ok!") - }) - -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace.go deleted file mode 100644 index d0f3c6bf..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace.go +++ /dev/null @@ -1,62 +0,0 @@ -// Package gin provides functions to trace the gin-gonic/gin package (https://github.com/gin-gonic/gin). -package gin // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin" - -import ( - "fmt" - "strconv" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gin-gonic/gin" -) - -// Middleware returns middleware that will trace incoming requests. -// The last parameter is optional and can be used to pass a custom tracer. -func Middleware(service string) gin.HandlerFunc { - return func(c *gin.Context) { - resource := c.HandlerName() - opts := []ddtrace.StartSpanOption{ - tracer.ServiceName(service), - tracer.ResourceName(resource), - tracer.SpanType(ext.SpanTypeWeb), - tracer.Tag(ext.HTTPMethod, c.Request.Method), - tracer.Tag(ext.HTTPURL, c.Request.URL.Path), - } - if spanctx, err := tracer.Extract(tracer.HTTPHeadersCarrier(c.Request.Header)); err == nil { - opts = append(opts, tracer.ChildOf(spanctx)) - } - span, ctx := tracer.StartSpanFromContext(c.Request.Context(), "http.request", opts...) - defer span.Finish() - - // pass the span through the request context - c.Request = c.Request.WithContext(ctx) - - // serve the request to the next middleware - c.Next() - - span.SetTag(ext.HTTPCode, strconv.Itoa(c.Writer.Status())) - - if len(c.Errors) > 0 { - span.SetTag("gin.errors", c.Errors.String()) - span.SetTag(ext.Error, c.Errors[0]) - } - } -} - -// HTML will trace the rendering of the template as a child of the span in the given context. -func HTML(c *gin.Context, code int, name string, obj interface{}) { - span, _ := tracer.StartSpanFromContext(c.Request.Context(), "gin.render.html") - span.SetTag("go.template", name) - defer func() { - if r := recover(); r != nil { - err := fmt.Errorf("error rendering tmpl:%s: %s", name, r) - span.Finish(tracer.WithError(err)) - panic(r) - } else { - span.Finish() - } - }() - c.HTML(code, name, obj) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace_test.go deleted file mode 100644 index e1f23534..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin/gintrace_test.go +++ /dev/null @@ -1,191 +0,0 @@ -package gin - -import ( - "errors" - "html/template" - "net/http/httptest" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gin-gonic/gin" - "github.com/stretchr/testify/assert" -) - -func init() { - gin.SetMode(gin.ReleaseMode) // silence annoying log msgs -} - -func TestChildSpan(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - router := gin.New() - router.Use(Middleware("foobar")) - router.GET("/user/:id", func(c *gin.Context) { - _, ok := tracer.SpanFromContext(c.Request.Context()) - assert.True(ok) - }) - - r := httptest.NewRequest("GET", "/user/123", nil) - w := httptest.NewRecorder() - - router.ServeHTTP(w, r) -} - -func TestTrace200(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - router := gin.New() - router.Use(Middleware("foobar")) - router.GET("/user/:id", func(c *gin.Context) { - span, ok := tracer.SpanFromContext(c.Request.Context()) - assert.True(ok) - assert.Equal(span.(mocktracer.Span).Tag(ext.ServiceName), "foobar") - id := c.Param("id") - c.Writer.Write([]byte(id)) - }) - - r := httptest.NewRequest("GET", "/user/123", nil) - w := httptest.NewRecorder() - - // do and verify the request - router.ServeHTTP(w, r) - response := w.Result() - assert.Equal(response.StatusCode, 200) - - // verify traces look good - spans := mt.FinishedSpans() - assert.Len(spans, 1) - if len(spans) < 1 { - t.Fatalf("no spans") - } - span := spans[0] - assert.Equal("http.request", span.OperationName()) - assert.Equal(ext.SpanTypeWeb, span.Tag(ext.SpanType)) - assert.Equal("foobar", span.Tag(ext.ServiceName)) - assert.Contains(span.Tag(ext.ResourceName), "gin.TestTrace200") - assert.Equal("200", span.Tag(ext.HTTPCode)) - assert.Equal("GET", span.Tag(ext.HTTPMethod)) - // TODO(x) would be much nicer to have "/user/:id" here - assert.Equal("/user/123", span.Tag(ext.HTTPURL)) -} - -func TestError(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // setup - router := gin.New() - router.Use(Middleware("foobar")) - wantErr := errors.New("oh no") - - // a handler with an error and make the requests - router.GET("/err", func(c *gin.Context) { - c.AbortWithError(500, wantErr) - }) - r := httptest.NewRequest("GET", "/err", nil) - w := httptest.NewRecorder() - router.ServeHTTP(w, r) - response := w.Result() - assert.Equal(response.StatusCode, 500) - - // verify the errors and status are correct - spans := mt.FinishedSpans() - assert.Len(spans, 1) - if len(spans) < 1 { - t.Fatalf("no spans") - } - span := spans[0] - assert.Equal("http.request", span.OperationName()) - assert.Equal("foobar", span.Tag(ext.ServiceName)) - assert.Equal("500", span.Tag(ext.HTTPCode)) - assert.Equal(wantErr.Error(), span.Tag(ext.Error).(error).Error()) -} - -func TestHTML(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // setup - router := gin.New() - router.Use(Middleware("foobar")) - - // add a template - tmpl := template.Must(template.New("hello").Parse("hello {{.}}")) - router.SetHTMLTemplate(tmpl) - - // a handler with an error and make the requests - router.GET("/hello", func(c *gin.Context) { - HTML(c, 200, "hello", "world") - }) - r := httptest.NewRequest("GET", "/hello", nil) - w := httptest.NewRecorder() - router.ServeHTTP(w, r) - response := w.Result() - assert.Equal(response.StatusCode, 200) - assert.Equal("hello world", w.Body.String()) - - // verify the errors and status are correct - spans := mt.FinishedSpans() - assert.Len(spans, 2) - for _, s := range spans { - assert.Equal("foobar", s.Tag(ext.ServiceName), s.String()) - } - - var tspan mocktracer.Span - for _, s := range spans { - // we need to pick up the span we're searching for, as the - // order is not garanteed within the buffer - if s.OperationName() == "gin.render.html" { - tspan = s - } - } - assert.NotNil(tspan) - assert.Equal("hello", tspan.Tag("go.template")) -} - -func TestGetSpanNotInstrumented(t *testing.T) { - assert := assert.New(t) - router := gin.New() - router.GET("/ping", func(c *gin.Context) { - // Assert we don't have a span on the context. - _, ok := tracer.SpanFromContext(c.Request.Context()) - assert.False(ok) - c.Writer.Write([]byte("ok")) - }) - r := httptest.NewRequest("GET", "/ping", nil) - w := httptest.NewRecorder() - router.ServeHTTP(w, r) - response := w.Result() - assert.Equal(response.StatusCode, 200) -} - -func TestPropagation(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - r := httptest.NewRequest("GET", "/user/123", nil) - w := httptest.NewRecorder() - - pspan := tracer.StartSpan("test") - tracer.Inject(pspan.Context(), tracer.HTTPHeadersCarrier(r.Header)) - - router := gin.New() - router.Use(Middleware("foobar")) - router.GET("/user/:id", func(c *gin.Context) { - span, ok := tracer.SpanFromContext(c.Request.Context()) - assert.True(ok) - assert.Equal(span.(mocktracer.Span).ParentID(), pspan.(mocktracer.Span).SpanID()) - }) - - router.ServeHTTP(w, r) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/collection.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/collection.go deleted file mode 100644 index bc2cfc11..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/collection.go +++ /dev/null @@ -1,202 +0,0 @@ -package mgo - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/globalsign/mgo" - "github.com/globalsign/mgo/bson" -) - -// Collection provides a mgo.Collection along with -// data used for APM Tracing. -type Collection struct { - *mgo.Collection - cfg mongoConfig -} - -// Create invokes and traces Collection.Create -func (c *Collection) Create(info *mgo.CollectionInfo) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.Create(info) - span.Finish(tracer.WithError(err)) - return err -} - -// DropCollection invokes and traces Collection.DropCollection -func (c *Collection) DropCollection() error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.DropCollection() - span.Finish(tracer.WithError(err)) - return err -} - -// EnsureIndexKey invokes and traces Collection.EnsureIndexKey -func (c *Collection) EnsureIndexKey(key ...string) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.EnsureIndexKey(key...) - span.Finish(tracer.WithError(err)) - return err -} - -// EnsureIndex invokes and traces Collection.EnsureIndex -func (c *Collection) EnsureIndex(index mgo.Index) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.EnsureIndex(index) - span.Finish(tracer.WithError(err)) - return err -} - -// DropIndex invokes and traces Collection.DropIndex -func (c *Collection) DropIndex(key ...string) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.DropIndex(key...) - span.Finish(tracer.WithError(err)) - return err -} - -// DropIndexName invokes and traces Collection.DropIndexName -func (c *Collection) DropIndexName(name string) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.DropIndexName(name) - span.Finish(tracer.WithError(err)) - return err -} - -// Indexes invokes and traces Collection.Indexes -func (c *Collection) Indexes() (indexes []mgo.Index, err error) { - span := newChildSpanFromContext(c.cfg) - indexes, err = c.Collection.Indexes() - span.Finish(tracer.WithError(err)) - return indexes, err -} - -// Insert invokes and traces Collectin.Insert -func (c *Collection) Insert(docs ...interface{}) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.Insert(docs...) - span.Finish(tracer.WithError(err)) - return err -} - -// Find invokes and traces Collection.Find -func (c *Collection) Find(query interface{}) *Query { - return &Query{ - Query: c.Collection.Find(query), - cfg: c.cfg, - } -} - -// FindId invokes and traces Collection.FindId -func (c *Collection) FindId(id interface{}) *Query { // nolint - return &Query{ - Query: c.Collection.FindId(id), - cfg: c.cfg, - } -} - -// Count invokes and traces Collection.Count -func (c *Collection) Count() (n int, err error) { - span := newChildSpanFromContext(c.cfg) - n, err = c.Collection.Count() - span.Finish(tracer.WithError(err)) - return n, err -} - -// Bulk creates a trace ready wrapper around Collection.Bulk -func (c *Collection) Bulk() *Bulk { - return &Bulk{ - Bulk: c.Collection.Bulk(), - cfg: c.cfg, - } -} - -// NewIter invokes and traces Collection.Iter -func (c *Collection) NewIter(session *mgo.Session, firstBatch []bson.Raw, cursorId int64, err error) *Iter { // nolint - return &Iter{ - Iter: c.Collection.NewIter(session, firstBatch, cursorId, err), - cfg: c.cfg, - } -} - -// Pipe invokes and traces Collection.Pipe -func (c *Collection) Pipe(pipeline interface{}) *Pipe { - return &Pipe{ - Pipe: c.Collection.Pipe(pipeline), - cfg: c.cfg, - } -} - -// Update invokes and traces Collection.Update -func (c *Collection) Update(selector interface{}, update interface{}) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.Update(selector, update) - span.Finish(tracer.WithError(err)) - return err -} - -// UpdateId invokes and traces Collection.UpdateId -func (c *Collection) UpdateId(id interface{}, update interface{}) error { // nolint - span := newChildSpanFromContext(c.cfg) - err := c.Collection.UpdateId(id, update) - span.Finish(tracer.WithError(err)) - return err -} - -// UpdateAll invokes and traces Collection.UpdateAll -func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) { - span := newChildSpanFromContext(c.cfg) - info, err = c.Collection.UpdateAll(selector, update) - span.Finish(tracer.WithError(err)) - return info, err -} - -// Upsert invokes and traces Collection.Upsert -func (c *Collection) Upsert(selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) { - span := newChildSpanFromContext(c.cfg) - info, err = c.Collection.Upsert(selector, update) - span.Finish(tracer.WithError(err)) - return info, err -} - -// UpsertId invokes and traces Collection.UpsertId -func (c *Collection) UpsertId(id interface{}, update interface{}) (info *mgo.ChangeInfo, err error) { // nolint - span := newChildSpanFromContext(c.cfg) - info, err = c.Collection.UpsertId(id, update) - span.Finish(tracer.WithError(err)) - return info, err -} - -// Remove invokes and traces Collection.Remove -func (c *Collection) Remove(selector interface{}) error { - span := newChildSpanFromContext(c.cfg) - err := c.Collection.Remove(selector) - span.Finish(tracer.WithError(err)) - return err -} - -// RemoveId invokes and traces Collection.RemoveId -func (c *Collection) RemoveId(id interface{}) error { // nolint - span := newChildSpanFromContext(c.cfg) - err := c.Collection.RemoveId(id) - span.Finish(tracer.WithError(err)) - return err -} - -// RemoveAll invokes and traces Collection.RemoveAll -func (c *Collection) RemoveAll(selector interface{}) (info *mgo.ChangeInfo, err error) { - span := newChildSpanFromContext(c.cfg) - info, err = c.Collection.RemoveAll(selector) - span.Finish(tracer.WithError(err)) - return info, err -} - -// Repair invokes and traces Collection.Repair -func (c *Collection) Repair() *Iter { - span := newChildSpanFromContext(c.cfg) - iter := c.Collection.Repair() - span.Finish() - return &Iter{ - Iter: iter, - cfg: c.cfg, - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo.go deleted file mode 100644 index 27fb6f93..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo.go +++ /dev/null @@ -1,144 +0,0 @@ -// Package mgo provides functions and types which allow tracing of the MGO MongoDB client (https://github.com/globalsign/mgo) -package mgo // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo" - -import ( - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/globalsign/mgo" -) - -// Dial opens a connection to a MongoDB server and configures it -// for tracing. -func Dial(url string, opts ...DialOption) (*Session, error) { - session, err := mgo.Dial(url) - s := &Session{Session: session} - - defaults(&s.cfg) - for _, fn := range opts { - fn(&s.cfg) - } - - // Record metadata so that it can be added to recorded traces - s.cfg.tags["hosts"] = strings.Join(session.LiveServers(), ", ") - info, _ := session.BuildInfo() - s.cfg.tags["mgo_version"] = info.Version - - return s, err -} - -// Session is an mgo.Session instance that will be traced. -type Session struct { - *mgo.Session - cfg mongoConfig -} - -func newChildSpanFromContext(config mongoConfig) ddtrace.Span { - span, _ := tracer.StartSpanFromContext( - config.ctx, - "mongodb.query", - tracer.SpanType(ext.SpanTypeMongoDB), - tracer.ServiceName(config.serviceName), - tracer.ResourceName("mongodb.query")) - - for key, value := range config.tags { - span.SetTag(key, value) - } - - return span -} - -// Run invokes and traces Session.Run -func (s *Session) Run(cmd interface{}, result interface{}) (err error) { - span := newChildSpanFromContext(s.cfg) - err = s.Session.Run(cmd, result) - span.Finish(tracer.WithError(err)) - return -} - -// Database is an mgo.Database along with the data necessary for tracing. -type Database struct { - *mgo.Database - cfg mongoConfig -} - -// DB returns a new database for this Session. -func (s *Session) DB(name string) *Database { - dbCfg := mongoConfig{ - ctx: s.cfg.ctx, - serviceName: s.cfg.serviceName, - tags: s.cfg.tags, - } - - dbCfg.tags["database"] = name - return &Database{ - Database: s.Session.DB(name), - cfg: dbCfg, - } -} - -// C returns a new Collection from this Database. -func (db *Database) C(name string) *Collection { - return &Collection{ - Collection: db.Database.C(name), - cfg: db.cfg, - } -} - -// Iter is an mgo.Iter instance that will be traced. -type Iter struct { - *mgo.Iter - - cfg mongoConfig -} - -// Next invokes and traces Iter.Next -func (iter *Iter) Next(result interface{}) bool { - span := newChildSpanFromContext(iter.cfg) - r := iter.Iter.Next(result) - span.Finish() - return r -} - -// For invokes and traces Iter.For -func (iter *Iter) For(result interface{}, f func() error) (err error) { - span := newChildSpanFromContext(iter.cfg) - err = iter.Iter.For(result, f) - span.Finish(tracer.WithError(err)) - return err -} - -// All invokes and traces Iter.All -func (iter *Iter) All(result interface{}) (err error) { - span := newChildSpanFromContext(iter.cfg) - err = iter.Iter.All(result) - span.Finish(tracer.WithError(err)) - return err -} - -// Close invokes and traces Iter.Close -func (iter *Iter) Close() (err error) { - span := newChildSpanFromContext(iter.cfg) - err = iter.Iter.Close() - span.Finish(tracer.WithError(err)) - return err -} - -// Bulk is an mgo.Bulk instance that will be traced. -type Bulk struct { - *mgo.Bulk - - cfg mongoConfig -} - -// Run invokes and traces Bulk.Run -func (b *Bulk) Run() (result *mgo.BulkResult, err error) { - span := newChildSpanFromContext(b.cfg) - result, err = b.Bulk.Run() - span.Finish(tracer.WithError(err)) - - return result, err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo_test.go deleted file mode 100644 index 4bac5404..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/mgo_test.go +++ /dev/null @@ -1,354 +0,0 @@ -package mgo - -import ( - "context" - "fmt" - "os" - "testing" - - "github.com/globalsign/mgo" - "github.com/globalsign/mgo/bson" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - os.Exit(m.Run()) -} - -func testMongoCollectionCommand(assert *assert.Assertions, command func(*Collection)) []mocktracer.Span { - mt := mocktracer.Start() - defer mt.Stop() - - parentSpan, ctx := tracer.StartSpanFromContext( - context.Background(), - "mgo-unittest", - tracer.SpanType("app"), - tracer.ResourceName("insert-test"), - ) - - session, err := Dial("localhost:27017", WithServiceName("unit-tests"), WithContext(ctx)) - defer session.Close() - - assert.NotNil(session) - assert.Nil(err) - - db := session.DB("my_db") - collection := db.C("MyCollection") - - command(collection) - - parentSpan.Finish() - - spans := mt.FinishedSpans() - return spans -} - -func TestCollection_Insert(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(2, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) -} - -func TestCollection_Update(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.Update(entity, entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(3, len(spans)) - assert.Equal("mongodb.query", spans[1].OperationName()) -} - -func TestCollection_UpdateId(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - var r bson.D - collection.Find(entity).Iter().Next(&r) - collection.UpdateId(r.Map()["_id"], entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(5, len(spans)) - assert.Equal("mongodb.query", spans[3].OperationName()) -} - -func TestCollection_Upsert(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.Upsert(entity, entity) - var r bson.D - collection.Find(entity).Iter().Next(&r) - collection.UpsertId(r.Map()["_id"], entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(6, len(spans)) - assert.Equal("mongodb.query", spans[1].OperationName()) - assert.Equal("mongodb.query", spans[4].OperationName()) -} - -func TestCollection_UpdateAll(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.UpdateAll(entity, entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(3, len(spans)) - assert.Equal("mongodb.query", spans[1].OperationName()) -} - -func TestCollection_FindId(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - var r bson.D - collection.Find(entity).Iter().Next(&r) - var r2 bson.D - collection.FindId(r.Map()["_id"]).Iter().Next(&r2) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(6, len(spans)) -} - -func TestCollection_Remove(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.Remove(entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(3, len(spans)) - assert.Equal("mongodb.query", spans[1].OperationName()) -} - -func TestCollection_RemoveId(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - removeByID := func(collection *Collection) { - collection.Insert(entity) - query := collection.Find(entity) - iter := query.Iter() - var r bson.D - iter.Next(&r) - id := r.Map()["_id"] - err := collection.RemoveId(id) - assert.NoError(err) - } - - spans := testMongoCollectionCommand(assert, removeByID) - assert.Equal(5, len(spans)) - assert.Equal("mongodb.query", spans[3].OperationName()) -} - -func TestCollection_RemoveAll(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.RemoveAll(entity) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(3, len(spans)) - assert.Equal("mongodb.query", spans[1].OperationName()) -} - -func TestCollection_DropCollection(t *testing.T) { - assert := assert.New(t) - - insert := func(collection *Collection) { - collection.DropCollection() - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(2, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) -} - -func TestCollection_Create(t *testing.T) { - assert := assert.New(t) - - insert := func(collection *Collection) { - collection.Create(&mgo.CollectionInfo{}) - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(2, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) -} - -func TestCollection_Count(t *testing.T) { - assert := assert.New(t) - - insert := func(collection *Collection) { - collection.Count() - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(2, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) -} - -func TestCollection_IndexCommands(t *testing.T) { - assert := assert.New(t) - - indexTest := func(collection *Collection) { - indexes, _ := collection.Indexes() - collection.DropIndex("_id_") - collection.DropIndexName("_id_") - collection.EnsureIndex(indexes[0]) - collection.EnsureIndexKey("_id_") - } - - spans := testMongoCollectionCommand(assert, indexTest) - assert.Equal(6, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) - assert.Equal("mongodb.query", spans[1].OperationName()) - assert.Equal("mongodb.query", spans[2].OperationName()) - assert.Equal("mongodb.query", spans[3].OperationName()) - assert.Equal("mongodb.query", spans[4].OperationName()) - assert.Equal("mgo-unittest", spans[5].OperationName()) -} - -func TestCollection_FindAndIter(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - collection.Insert(entity) - collection.Insert(entity) - collection.Insert(entity) - - query := collection.Find(nil) - iter := query.Iter() - var r bson.D - iter.Next(&r) - var all []bson.D - iter.All(&all) - iter.Close() - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(8, len(spans)) - assert.Equal("mongodb.query", spans[3].OperationName()) - assert.Equal("mongodb.query", spans[4].OperationName()) - assert.Equal("mongodb.query", spans[5].OperationName()) - assert.Equal("mongodb.query", spans[6].OperationName()) -} - -func TestCollection_Bulk(t *testing.T) { - assert := assert.New(t) - - entity := bson.D{ - bson.DocElem{ - Name: "entity", - Value: bson.DocElem{ - Name: "index", - Value: 0}}} - - insert := func(collection *Collection) { - bulk := collection.Bulk() - bulk.Insert(entity) - bulk.Run() - } - - spans := testMongoCollectionCommand(assert, insert) - assert.Equal(2, len(spans)) - assert.Equal("mongodb.query", spans[0].OperationName()) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/option.go deleted file mode 100644 index a23799ea..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/option.go +++ /dev/null @@ -1,32 +0,0 @@ -package mgo - -import "context" - -type mongoConfig struct { - ctx context.Context - serviceName string - tags map[string]string -} - -func defaults(cfg *mongoConfig) { - cfg.serviceName = "mongodb" - cfg.ctx = context.Background() - cfg.tags = make(map[string]string) -} - -// DialOption represents an option that can be passed to Dial -type DialOption func(*mongoConfig) - -// WithServiceName sets the service name for a given MongoDB context. -func WithServiceName(name string) DialOption { - return func(cfg *mongoConfig) { - cfg.serviceName = name - } -} - -// WithContext sets the context. -func WithContext(ctx context.Context) DialOption { - return func(cfg *mongoConfig) { - cfg.ctx = ctx - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/pipe.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/pipe.go deleted file mode 100644 index 0c384e96..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/pipe.go +++ /dev/null @@ -1,60 +0,0 @@ -package mgo - -import ( - "github.com/globalsign/mgo" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// Pipe is an mgo.Pipe instance along with the data necessary for tracing. -type Pipe struct { - *mgo.Pipe - cfg mongoConfig -} - -// Iter invokes and traces Pipe.Iter -func (p *Pipe) Iter() *Iter { - span := newChildSpanFromContext(p.cfg) - iter := p.Pipe.Iter() - span.Finish() - return &Iter{ - Iter: iter, - cfg: p.cfg, - } -} - -// All invokes and traces Pipe.All -func (p *Pipe) All(result interface{}) error { - return p.Iter().All(result) -} - -// One invokes and traces Pipe.One -func (p *Pipe) One(result interface{}) (err error) { - span := newChildSpanFromContext(p.cfg) - defer span.Finish(tracer.WithError(err)) - err = p.Pipe.One(result) - return -} - -// AllowDiskUse invokes and traces Pipe.AllowDiskUse -func (p *Pipe) AllowDiskUse() *Pipe { - return &Pipe{ - Pipe: p.Pipe.AllowDiskUse(), - cfg: p.cfg, - } -} - -// Batch invokes and traces Pipe.Batch -func (p *Pipe) Batch(n int) *Pipe { - return &Pipe{ - Pipe: p.Pipe.Batch(n), - cfg: p.cfg, - } -} - -// Explain invokes and traces Pipe.Explain -func (p *Pipe) Explain(result interface{}) (err error) { - span := newChildSpanFromContext(p.cfg) - defer span.Finish(tracer.WithError(err)) - err = p.Pipe.Explain(result) - return -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/query.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/query.go deleted file mode 100644 index 58ff85ff..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo/query.go +++ /dev/null @@ -1,183 +0,0 @@ -package mgo - -import ( - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/globalsign/mgo" -) - -// Query is an mgo.Query instance along with the data necessary for tracing. -type Query struct { - *mgo.Query - cfg mongoConfig -} - -// Iter invokes and traces Query.Iter -func (q *Query) Iter() *Iter { - span := newChildSpanFromContext(q.cfg) - iter := q.Query.Iter() - span.Finish() - return &Iter{ - Iter: iter, - cfg: q.cfg, - } -} - -// All invokes and traces Query.All -func (q *Query) All(result interface{}) error { - span := newChildSpanFromContext(q.cfg) - err := q.All(result) - span.Finish(tracer.WithError(err)) - return err -} - -// Apply invokes and traces Query.Apply -func (q *Query) Apply(change mgo.Change, result interface{}) (info *mgo.ChangeInfo, err error) { - span := newChildSpanFromContext(q.cfg) - info, err = q.Apply(change, result) - span.Finish(tracer.WithError(err)) - return info, err -} - -// Batch invokes and traces Query.Batch -func (q *Query) Batch(n int) *Query { - return &Query{ - Query: q.Query.Batch(n), - cfg: q.cfg, - } -} - -// Collation invokes and traces Query.Collation -func (q *Query) Collation(collation *mgo.Collation) *Query { - return &Query{ - Query: q.Query.Collation(collation), - cfg: q.cfg, - } -} - -// Comment invokes and traces Query.Comment -func (q *Query) Comment(comment string) *Query { - return &Query{ - Query: q.Query.Comment(comment), - cfg: q.cfg, - } -} - -// Count invokes and traces Query.Count -func (q *Query) Count() (n int, err error) { - span := newChildSpanFromContext(q.cfg) - n, err = q.Count() - span.Finish(tracer.WithError(err)) - return n, err -} - -// Distinct invokes and traces Query.Distinct -func (q *Query) Distinct(key string, result interface{}) error { - span := newChildSpanFromContext(q.cfg) - err := q.Distinct(key, result) - span.Finish(tracer.WithError(err)) - return err -} - -// Explain invokes and traces Query.Explain -func (q *Query) Explain(result interface{}) error { - span := newChildSpanFromContext(q.cfg) - err := q.Explain(result) - span.Finish(tracer.WithError(err)) - return err -} - -// For invokes and traces Query.For -func (q *Query) For(result interface{}, f func() error) error { - span := newChildSpanFromContext(q.cfg) - err := q.For(result, f) - span.Finish(tracer.WithError(err)) - return err -} - -// MapReduce invokes and traces Query.MapReduce -func (q *Query) MapReduce(job *mgo.MapReduce, result interface{}) (info *mgo.MapReduceInfo, err error) { - span := newChildSpanFromContext(q.cfg) - info, err = q.MapReduce(job, result) - span.Finish(tracer.WithError(err)) - return info, err -} - -// One invokes and traces Query.One -func (q *Query) One(result interface{}) error { - span := newChildSpanFromContext(q.cfg) - err := q.One(result) - span.Finish(tracer.WithError(err)) - return err -} - -// Prefetch invokes Query.Prefetch and configures the -// returned *Query for tracing. -func (q *Query) Prefetch(p float64) *Query { - return &Query{ - Query: q.Query.Prefetch(p), - cfg: q.cfg, - } -} - -// Select invokes Query.Select and configures the -// returned *Query for tracing. -func (q *Query) Select(selector interface{}) *Query { - return &Query{ - Query: q.Query.Select(selector), - cfg: q.cfg, - } -} - -// SetMaxScan invokes and traces Query.SetMaxScan -func (q *Query) SetMaxScan(n int) *Query { - return &Query{ - Query: q.Query.SetMaxScan(n), - cfg: q.cfg, - } -} - -// SetMaxTime invokes and traces Query.SetMaxTime -func (q *Query) SetMaxTime(d time.Duration) *Query { - return &Query{ - Query: q.Query.SetMaxTime(d), - cfg: q.cfg, - } -} - -// Skip invokes and traces Query.Skip -func (q *Query) Skip(n int) *Query { - return &Query{ - Query: q.Query.Skip(n), - cfg: q.cfg, - } -} - -// Snapshot invokes and traces Query.Snapshot -func (q *Query) Snapshot() *Query { - return &Query{ - Query: q.Query.Snapshot(), - cfg: q.cfg, - } -} - -// Sort invokes and traces Query.Sort -func (q *Query) Sort(fields ...string) *Query { - return &Query{ - Query: q.Query.Sort(fields...), - cfg: q.cfg, - } -} - -// Tail invokes and traces Query.Tail -func (q *Query) Tail(timeout time.Duration) *Iter { - span := newChildSpanFromContext(q.cfg) - iter := q.Query.Tail(timeout) - span.Finish() - return &Iter{ - Iter: iter, - cfg: q.cfg, - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/example_test.go deleted file mode 100644 index d4ef1212..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/example_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package redis_test - -import ( - "context" - "time" - - "github.com/go-redis/redis" - redistrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// To start tracing Redis, simply create a new client using the library and continue -// using as you normally would. -func Example() { - // create a new Client - opts := &redis.Options{Addr: "127.0.0.1", Password: "", DB: 0} - c := redistrace.NewClient(opts) - - // any action emits a span - c.Set("test_key", "test_value", 0) - - // optionally, create a new root span - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.SpanType(ext.SpanTypeRedis), - tracer.ServiceName("web"), - tracer.ResourceName("/home"), - ) - - // set the context on the client - c = c.WithContext(ctx) - - // commit further commands, which will inherit from the parent in the context. - c.Set("food", "cheese", 0) - root.Finish() -} - -// You can also trace Redis Pipelines. Simply use as usual and the traces will be -// automatically picked up by the underlying implementation. -func Example_pipeliner() { - // create a client - opts := &redis.Options{Addr: "127.0.0.1", Password: "", DB: 0} - c := redistrace.NewClient(opts, redistrace.WithServiceName("my-redis-service")) - - // open the pipeline - pipe := c.Pipeline() - - // submit some commands - pipe.Incr("pipeline_counter") - pipe.Expire("pipeline_counter", time.Hour) - - // execute with trace - pipe.Exec() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/option.go deleted file mode 100644 index 711dbcde..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package redis // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis" - -type clientConfig struct{ serviceName string } - -// ClientOption represents an option that can be used to create or wrap a client. -type ClientOption func(*clientConfig) - -func defaults(cfg *clientConfig) { - cfg.serviceName = "redis.client" -} - -// WithServiceName sets the given service name for the client. -func WithServiceName(name string) ClientOption { - return func(cfg *clientConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis.go deleted file mode 100644 index 722f7198..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis.go +++ /dev/null @@ -1,176 +0,0 @@ -// Package redis provides tracing functions for tracing the go-redis/redis package (https://github.com/go-redis/redis). -package redis - -import ( - "bytes" - "context" - "net" - "strconv" - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/go-redis/redis" -) - -// Client is used to trace requests to a redis server. -type Client struct { - *redis.Client - *params -} - -var _ redis.Cmdable = (*Client)(nil) - -// Pipeliner is used to trace pipelines executed on a Redis server. -type Pipeliner struct { - redis.Pipeliner - *params -} - -var _ redis.Pipeliner = (*Pipeliner)(nil) - -// params holds the tracer and a set of parameters which are recorded with every trace. -type params struct { - host string - port string - db string - config *clientConfig -} - -// NewClient returns a new Client that is traced with the default tracer under -// the service name "redis". -func NewClient(opt *redis.Options, opts ...ClientOption) *Client { - return WrapClient(redis.NewClient(opt), opts...) -} - -// WrapClient wraps a given redis.Client with a tracer under the given service name. -func WrapClient(c *redis.Client, opts ...ClientOption) *Client { - cfg := new(clientConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - opt := c.Options() - host, port, err := net.SplitHostPort(opt.Addr) - if err != nil { - host = opt.Addr - port = "6379" - } - params := ¶ms{ - host: host, - port: port, - db: strconv.Itoa(opt.DB), - config: cfg, - } - tc := &Client{c, params} - tc.Client.WrapProcess(createWrapperFromClient(tc)) - return tc -} - -// Pipeline creates a Pipeline from a Client -func (c *Client) Pipeline() redis.Pipeliner { - return &Pipeliner{c.Client.Pipeline(), c.params} -} - -// ExecWithContext calls Pipeline.Exec(). It ensures that the resulting Redis calls -// are traced, and that emitted spans are children of the given Context. -func (c *Pipeliner) ExecWithContext(ctx context.Context) ([]redis.Cmder, error) { - return c.execWithContext(ctx) -} - -// Exec calls Pipeline.Exec() ensuring that the resulting Redis calls are traced. -func (c *Pipeliner) Exec() ([]redis.Cmder, error) { - return c.execWithContext(context.Background()) -} - -func (c *Pipeliner) execWithContext(ctx context.Context) ([]redis.Cmder, error) { - p := c.params - span, _ := tracer.StartSpanFromContext(ctx, "redis.command", - tracer.SpanType(ext.SpanTypeRedis), - tracer.ServiceName(p.config.serviceName), - tracer.ResourceName("redis"), - tracer.Tag(ext.TargetHost, p.host), - tracer.Tag(ext.TargetPort, p.port), - tracer.Tag("out.db", p.db), - ) - cmds, err := c.Pipeliner.Exec() - span.SetTag(ext.ResourceName, commandsToString(cmds)) - span.SetTag("redis.pipeline_length", strconv.Itoa(len(cmds))) - var opts []ddtrace.FinishOption - if err != redis.Nil { - opts = append(opts, tracer.WithError(err)) - } - span.Finish(opts...) - - return cmds, err -} - -// commandsToString returns a string representation of a slice of redis Commands, separated by newlines. -func commandsToString(cmds []redis.Cmder) string { - var b bytes.Buffer - for _, cmd := range cmds { - b.WriteString(cmderToString(cmd)) - b.WriteString("\n") - } - return b.String() -} - -// WithContext sets a context on a Client. Use it to ensure that emitted spans have the correct parent. -func (c *Client) WithContext(ctx context.Context) *Client { - c.Client = c.Client.WithContext(ctx) - return c -} - -// createWrapperFromClient returns a new createWrapper function which wraps the processor with tracing -// information obtained from the provided Client. To understand this functionality better see the -// documentation for the github.com/go-redis/redis.(*baseClient).WrapProcess function. -func createWrapperFromClient(tc *Client) func(oldProcess func(cmd redis.Cmder) error) func(cmd redis.Cmder) error { - return func(oldProcess func(cmd redis.Cmder) error) func(cmd redis.Cmder) error { - return func(cmd redis.Cmder) error { - ctx := tc.Client.Context() - raw := cmderToString(cmd) - parts := strings.Split(raw, " ") - length := len(parts) - 1 - p := tc.params - span, _ := tracer.StartSpanFromContext(ctx, "redis.command", - tracer.SpanType(ext.SpanTypeRedis), - tracer.ServiceName(p.config.serviceName), - tracer.ResourceName(parts[0]), - tracer.Tag(ext.TargetHost, p.host), - tracer.Tag(ext.TargetPort, p.port), - tracer.Tag("out.db", p.db), - tracer.Tag("redis.raw_command", raw), - tracer.Tag("redis.args_length", strconv.Itoa(length)), - ) - err := oldProcess(cmd) - var opts []ddtrace.FinishOption - if err != redis.Nil { - opts = append(opts, tracer.WithError(err)) - } - span.Finish(opts...) - return err - } - } -} - -func cmderToString(cmd redis.Cmder) string { - // We want to support multiple versions of the go-redis library. In - // older versions Cmder implements the Stringer interface, while in - // newer versions that was removed, and this String method which - // sometimes returns an error is used instead. By doing a type assertion - // we can support both versions. - if s, ok := cmd.(interface{ String() string }); ok { - return s.String() - } - - if s, ok := cmd.(interface{ String() (string, error) }); ok { - str, err := s.String() - if err == nil { - return str - } - } - - return "" -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis_test.go deleted file mode 100644 index 19d40270..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis/redis_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package redis - -import ( - "context" - "fmt" - "os" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/go-redis/redis" - "github.com/stretchr/testify/assert" -) - -const debug = false - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - os.Exit(m.Run()) -} - -func TestClient(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6379"} - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - client := NewClient(opts, WithServiceName("my-redis")) - client.Set("test_key", "test_value", 0) - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal("redis.command", span.OperationName()) - assert.Equal(ext.SpanTypeRedis, span.Tag(ext.SpanType)) - assert.Equal("my-redis", span.Tag(ext.ServiceName)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("set test_key test_value: ", span.Tag("redis.raw_command")) - assert.Equal("3", span.Tag("redis.args_length")) -} - -func TestPipeline(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6379"} - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - client := NewClient(opts, WithServiceName("my-redis")) - pipeline := client.Pipeline() - pipeline.Expire("pipeline_counter", time.Hour) - - // Exec with context test - pipeline.(*Pipeliner).ExecWithContext(context.Background()) - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal("redis.command", span.OperationName()) - assert.Equal(ext.SpanTypeRedis, span.Tag(ext.SpanType)) - assert.Equal("my-redis", span.Tag(ext.ServiceName)) - assert.Equal("expire pipeline_counter 3600: false\n", span.Tag(ext.ResourceName)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("1", span.Tag("redis.pipeline_length")) - - mt.Reset() - pipeline.Expire("pipeline_counter", time.Hour) - pipeline.Expire("pipeline_counter_1", time.Minute) - - // Rewriting Exec - pipeline.Exec() - - spans = mt.FinishedSpans() - assert.Len(spans, 1) - - span = spans[0] - assert.Equal("redis.command", span.OperationName()) - assert.Equal(ext.SpanTypeRedis, span.Tag(ext.SpanType)) - assert.Equal("my-redis", span.Tag(ext.ServiceName)) - assert.Equal("expire pipeline_counter 3600: false\nexpire pipeline_counter_1 60: false\n", span.Tag(ext.ResourceName)) - assert.Equal("2", span.Tag("redis.pipeline_length")) -} - -func TestChildSpan(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6379"} - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // Parent span - client := NewClient(opts, WithServiceName("my-redis")) - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.span") - client = client.WithContext(ctx) - client.Set("test_key", "test_value", 0) - root.Finish() - - spans := mt.FinishedSpans() - assert.Len(spans, 2) - - var child, parent mocktracer.Span - for _, s := range spans { - // order of traces in buffer is not garanteed - switch s.OperationName() { - case "redis.command": - child = s - case "parent.span": - parent = s - } - } - assert.NotNil(parent) - assert.NotNil(child) - - assert.Equal(child.ParentID(), parent.SpanID()) - assert.Equal(child.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(child.Tag(ext.TargetPort), "6379") -} - -func TestMultipleCommands(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6379"} - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - client := NewClient(opts, WithServiceName("my-redis")) - client.Set("test_key", "test_value", 0) - client.Get("test_key") - client.Incr("int_key") - client.ClientList() - - spans := mt.FinishedSpans() - assert.Len(spans, 4) - - // Checking all commands were recorded - var commands [4]string - for i := 0; i < 4; i++ { - commands[i] = spans[i].Tag("redis.raw_command").(string) - } - assert.Contains(commands, "set test_key test_value: ") - assert.Contains(commands, "get test_key: ") - assert.Contains(commands, "incr int_key: 0") - assert.Contains(commands, "client list: ") -} - -func TestError(t *testing.T) { - t.Run("wrong-port", func(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6378"} // wrong port - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - client := NewClient(opts, WithServiceName("my-redis")) - _, err := client.Get("key").Result() - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - - assert.Equal("redis.command", span.OperationName()) - assert.NotNil(err) - assert.Equal(err, span.Tag(ext.Error)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6378", span.Tag(ext.TargetPort)) - assert.Equal("get key: ", span.Tag("redis.raw_command")) - }) - - t.Run("nil", func(t *testing.T) { - opts := &redis.Options{Addr: "127.0.0.1:6379"} - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - client := NewClient(opts, WithServiceName("my-redis")) - _, err := client.Get("non_existent_key").Result() - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - - assert.Equal(redis.Nil, err) - assert.Equal("redis.command", span.OperationName()) - assert.Empty(span.Tag(ext.Error)) - assert.Equal("127.0.0.1", span.Tag(ext.TargetHost)) - assert.Equal("6379", span.Tag(ext.TargetPort)) - assert.Equal("get non_existent_key: ", span.Tag("redis.raw_command")) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/example_test.go deleted file mode 100644 index 8688c586..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/example_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package gocql_test - -import ( - "context" - - "github.com/gocql/gocql" - gocqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// To trace Cassandra commands, use our query wrapper WrapQuery. -func Example() { - // Initialise a Cassandra session as usual, create a query. - cluster := gocql.NewCluster("127.0.0.1") - session, _ := cluster.CreateSession() - query := session.Query("CREATE KEYSPACE if not exists trace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor': 1}") - - // Use context to pass information down the call chain - _, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.SpanType(ext.SpanTypeCassandra), - tracer.ServiceName("web"), - tracer.ResourceName("/home"), - ) - - // Wrap the query to trace it and pass the context for inheritance - tracedQuery := gocqltrace.WrapQuery(query, gocqltrace.WithServiceName("ServiceName")) - tracedQuery.WithContext(ctx) - - // Execute your query as usual - tracedQuery.Exec() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql.go deleted file mode 100644 index cfa81ab4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql.go +++ /dev/null @@ -1,150 +0,0 @@ -// Package gocql provides functions to trace the gocql/gocql package (https://github.com/gocql/gocql). -package gocql // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql" - -import ( - "context" - "fmt" - "strconv" - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gocql/gocql" -) - -// Query inherits from gocql.Query, it keeps the tracer and the context. -type Query struct { - *gocql.Query - *params - traceContext context.Context -} - -// Iter inherits from gocql.Iter and contains a span. -type Iter struct { - *gocql.Iter - span ddtrace.Span -} - -// params containes fields and metadata useful for command tracing -type params struct { - config *queryConfig - keyspace string - paginated bool -} - -// WrapQuery wraps a gocql.Query into a traced Query under the given service name. -// Note that the returned Query structure embeds the original gocql.Query structure. -// This means that any method returning the query for chaining that is not part -// of this package's Query structure should be called before WrapQuery, otherwise -// the tracing context could be lost. -// -// To be more specific: it is ok (and recommended) to use and chain the return value -// of `WithContext` and `PageState` but not that of `Consistency`, `Trace`, -// `Observer`, etc. -func WrapQuery(q *gocql.Query, opts ...WrapOption) *Query { - cfg := new(queryConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - if cfg.resourceName == "" { - q := `"` + strings.SplitN(q.String(), "\"", 3)[1] + `"` - q, err := strconv.Unquote(q) - if err != nil { - // avoid having an empty resource as it will cause the trace - // to be dropped. - q = "_" - } - cfg.resourceName = q - } - tq := &Query{q, ¶ms{config: cfg}, context.Background()} - return tq -} - -// WithContext adds the specified context to the traced Query structure. -func (tq *Query) WithContext(ctx context.Context) *Query { - tq.traceContext = ctx - tq.Query.WithContext(ctx) - return tq -} - -// PageState rewrites the original function so that spans are aware of the change. -func (tq *Query) PageState(state []byte) *Query { - tq.params.paginated = true - tq.Query = tq.Query.PageState(state) - return tq -} - -// NewChildSpan creates a new span from the params and the context. -func (tq *Query) newChildSpan(ctx context.Context) ddtrace.Span { - p := tq.params - span, _ := tracer.StartSpanFromContext(ctx, ext.CassandraQuery, - tracer.SpanType(ext.SpanTypeCassandra), - tracer.ServiceName(p.config.serviceName), - tracer.ResourceName(p.config.resourceName), - tracer.Tag(ext.CassandraPaginated, fmt.Sprintf("%t", p.paginated)), - tracer.Tag(ext.CassandraKeyspace, p.keyspace), - ) - return span -} - -// Exec is rewritten so that it passes by our custom Iter -func (tq *Query) Exec() error { - return tq.Iter().Close() -} - -// MapScan wraps in a span query.MapScan call. -func (tq *Query) MapScan(m map[string]interface{}) error { - span := tq.newChildSpan(tq.traceContext) - err := tq.Query.MapScan(m) - span.Finish(tracer.WithError(err)) - return err -} - -// Scan wraps in a span query.Scan call. -func (tq *Query) Scan(dest ...interface{}) error { - span := tq.newChildSpan(tq.traceContext) - err := tq.Query.Scan(dest...) - span.Finish(tracer.WithError(err)) - return err -} - -// ScanCAS wraps in a span query.ScanCAS call. -func (tq *Query) ScanCAS(dest ...interface{}) (applied bool, err error) { - span := tq.newChildSpan(tq.traceContext) - applied, err = tq.Query.ScanCAS(dest...) - span.Finish(tracer.WithError(err)) - return applied, err -} - -// Iter starts a new span at query.Iter call. -func (tq *Query) Iter() *Iter { - span := tq.newChildSpan(tq.traceContext) - iter := tq.Query.Iter() - span.SetTag(ext.CassandraRowCount, strconv.Itoa(iter.NumRows())) - span.SetTag(ext.CassandraConsistencyLevel, strconv.Itoa(int(tq.GetConsistency()))) - - columns := iter.Columns() - if len(columns) > 0 { - span.SetTag(ext.CassandraKeyspace, columns[0].Keyspace) - } - tIter := &Iter{iter, span} - if tIter.Host() != nil { - tIter.span.SetTag(ext.TargetHost, tIter.Iter.Host().HostID()) - tIter.span.SetTag(ext.TargetPort, strconv.Itoa(tIter.Iter.Host().Port())) - tIter.span.SetTag(ext.CassandraCluster, tIter.Iter.Host().DataCenter()) - } - return tIter -} - -// Close closes the Iter and finish the span created on Iter call. -func (tIter *Iter) Close() error { - err := tIter.Iter.Close() - if err != nil { - tIter.span.SetTag(ext.Error, err) - } - tIter.span.Finish() - return err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql_test.go deleted file mode 100644 index b04987b3..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/gocql_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package gocql - -import ( - "context" - "fmt" - "log" - "os" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gocql/gocql" - "github.com/stretchr/testify/assert" -) - -const ( - debug = false - cassandraHost = "127.0.0.1:9042" -) - -func newCassandraCluster() *gocql.ClusterConfig { - cluster := gocql.NewCluster(cassandraHost) - // the InitialHostLookup must be disabled in newer versions of - // gocql otherwise "no connections were made when creating the session" - // error is returned for Cassandra misconfiguration (that we don't need - // since we're testing another behavior and not the client). - // Check: https://github.com/gocql/gocql/issues/946 - cluster.DisableInitialHostLookup = true - return cluster -} - -// TestMain sets up the Keyspace and table if they do not exist -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - cluster := newCassandraCluster() - session, err := cluster.CreateSession() - if err != nil { - log.Fatalf("%v\n", err) - } - // Ensures test keyspace and table person exists. - session.Query("CREATE KEYSPACE if not exists trace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor': 1}").Exec() - session.Query("CREATE TABLE if not exists trace.person (name text PRIMARY KEY, age int, description text)").Exec() - session.Query("INSERT INTO trace.person (name, age, description) VALUES ('Cassandra', 100, 'A cruel mistress')").Exec() - - m.Run() -} - -func TestErrorWrapper(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - cluster := newCassandraCluster() - session, err := cluster.CreateSession() - assert.Nil(err) - q := session.Query("CREATE KEYSPACE trace WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };") - iter := WrapQuery(q, WithServiceName("ServiceName"), WithResourceName("CREATE KEYSPACE")).Iter() - err = iter.Close() - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - span := spans[0] - - assert.Equal(span.Tag(ext.Error).(error), err) - assert.Equal(span.OperationName(), ext.CassandraQuery) - assert.Equal(span.Tag(ext.ResourceName), "CREATE KEYSPACE") - assert.Equal(span.Tag(ext.ServiceName), "ServiceName") - assert.Equal(span.Tag(ext.CassandraConsistencyLevel), "4") - assert.Equal(span.Tag(ext.CassandraPaginated), "false") - - if iter.Host() != nil { - assert.Equal(span.Tag(ext.TargetPort), "9042") - assert.Equal(span.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(span.Tag(ext.CassandraCluster), "datacenter1") - } -} - -func TestChildWrapperSpan(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // Parent span - parentSpan, ctx := tracer.StartSpanFromContext(context.Background(), "parentSpan") - cluster := newCassandraCluster() - session, err := cluster.CreateSession() - assert.Nil(err) - q := session.Query("SELECT * from trace.person") - tq := WrapQuery(q, WithServiceName("TestServiceName")) - iter := tq.WithContext(ctx).Iter() - iter.Close() - parentSpan.Finish() - - spans := mt.FinishedSpans() - assert.Len(spans, 2) - - var childSpan, pSpan mocktracer.Span - if spans[0].ParentID() == spans[1].SpanID() { - childSpan = spans[0] - pSpan = spans[1] - } else { - childSpan = spans[1] - pSpan = spans[0] - } - assert.Equal(pSpan.OperationName(), "parentSpan") - assert.Equal(childSpan.ParentID(), pSpan.SpanID()) - assert.Equal(childSpan.OperationName(), ext.CassandraQuery) - assert.Equal(childSpan.Tag(ext.ResourceName), "SELECT * from trace.person") - assert.Equal(childSpan.Tag(ext.CassandraKeyspace), "trace") - if iter.Host() != nil { - assert.Equal(childSpan.Tag(ext.TargetPort), "9042") - assert.Equal(childSpan.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(childSpan.Tag(ext.CassandraCluster), "datacenter1") - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/option.go deleted file mode 100644 index 23bafae0..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql/option.go +++ /dev/null @@ -1,29 +0,0 @@ -package gocql - -type queryConfig struct{ serviceName, resourceName string } - -// WrapOption represents an option that can be passed to WrapQuery. -type WrapOption func(*queryConfig) - -func defaults(cfg *queryConfig) { - cfg.serviceName = "gocql.query" -} - -// WithServiceName sets the given service name for the returned query. -func WithServiceName(name string) WrapOption { - return func(cfg *queryConfig) { - cfg.serviceName = name - } -} - -// WithResourceName sets a custom resource name to be used with the traced query. -// By default, the query statement is extracted automatically. This method should -// be used when a different resource name is desired or in performance critical -// environments. The gocql library returns the query statement using an fmt.Sprintf -// call, which can be costly when called repeatedly. Using WithResourceName will -// avoid that call. Under normal circumstances, it is safe to rely on the default. -func WithResourceName(name string) WrapOption { - return func(cfg *queryConfig) { - cfg.resourceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api.go deleted file mode 100644 index 1a660461..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api.go +++ /dev/null @@ -1,50 +0,0 @@ -// Package api provides functions to trace the google.golang.org/api package. -package api // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api" - -//go:generate go run make_endpoints.go - -import ( - "net/http" - - "golang.org/x/oauth2/google" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal" - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -// apiEndpoints are all of the defined endpoints for the Google API; it is populated -// by "go generate". -var apiEndpoints *internal.Tree - -// NewClient creates a new oauth http client suitable for use with the google -// APIs with all requests traced automatically. -func NewClient(options ...Option) (*http.Client, error) { - cfg := newConfig(options...) - client, err := google.DefaultClient(cfg.ctx, cfg.scopes...) - if err != nil { - return nil, err - } - client.Transport = WrapRoundTripper(client.Transport, options...) - return client, nil -} - -// WrapRoundTripper wraps a RoundTripper intended for interfacing with -// Google APIs and traces all requests. -func WrapRoundTripper(transport http.RoundTripper, options ...Option) http.RoundTripper { - cfg := newConfig(options...) - return httptrace.WrapRoundTripper(transport, - httptrace.WithBefore(func(req *http.Request, span ddtrace.Span) { - e, ok := apiEndpoints.Get(req.URL.Hostname(), req.Method, req.URL.Path) - if ok { - span.SetTag(ext.ServiceName, e.ServiceName) - span.SetTag(ext.ResourceName, e.ResourceName) - } else { - span.SetTag(ext.ServiceName, "google") - span.SetTag(ext.ResourceName, req.Method+" "+req.URL.Hostname()) - } - if cfg.serviceName != "" { - span.SetTag(ext.ServiceName, cfg.serviceName) - } - })) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api_test.go deleted file mode 100644 index 7eccd6e2..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/api_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package api - -import ( - "io/ioutil" - "net/http" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - books "google.golang.org/api/books/v1" - civicinfo "google.golang.org/api/civicinfo/v2" - urlshortener "google.golang.org/api/urlshortener/v1" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -type roundTripperFunc func(*http.Request) (*http.Response, error) - -func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { - return f(req) -} - -var badRequestTransport roundTripperFunc = func(req *http.Request) (*http.Response, error) { - res := &http.Response{ - Header: make(http.Header), - Request: req, - StatusCode: http.StatusBadRequest, - Body: ioutil.NopCloser(strings.NewReader("")), - } - return res, nil -} - -func TestBooks(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - svc, err := books.New(&http.Client{ - Transport: WrapRoundTripper(badRequestTransport), - }) - assert.NoError(t, err) - svc.Bookshelves. - List("montana.banana"). - Do() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - - s0 := spans[0] - assert.Equal(t, "http.request", s0.OperationName()) - assert.Equal(t, "http", s0.Tag(ext.SpanType)) - assert.Equal(t, "google.books", s0.Tag(ext.ServiceName)) - assert.Equal(t, "books.bookshelves.list", s0.Tag(ext.ResourceName)) - assert.Equal(t, "400", s0.Tag(ext.HTTPCode)) - assert.Equal(t, "GET", s0.Tag(ext.HTTPMethod)) - assert.Equal(t, "/books/v1/users/montana.banana/bookshelves", s0.Tag(ext.HTTPURL)) -} - -func TestCivicInfo(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - svc, err := civicinfo.New(&http.Client{ - Transport: WrapRoundTripper(badRequestTransport), - }) - assert.NoError(t, err) - svc.Representatives. - RepresentativeInfoByAddress(&civicinfo.RepresentativeInfoRequest{}). - Do() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - - s0 := spans[0] - assert.Equal(t, "http.request", s0.OperationName()) - assert.Equal(t, "http", s0.Tag(ext.SpanType)) - assert.Equal(t, "google.civicinfo", s0.Tag(ext.ServiceName)) - assert.Equal(t, "civicinfo.representatives.representativeInfoByAddress", s0.Tag(ext.ResourceName)) - assert.Equal(t, "400", s0.Tag(ext.HTTPCode)) - assert.Equal(t, "GET", s0.Tag(ext.HTTPMethod)) - assert.Equal(t, "/civicinfo/v2/representatives", s0.Tag(ext.HTTPURL)) -} - -func TestURLShortener(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - svc, err := urlshortener.New(&http.Client{ - Transport: WrapRoundTripper(badRequestTransport), - }) - assert.NoError(t, err) - svc.Url. - List(). - Do() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - - s0 := spans[0] - assert.Equal(t, "http.request", s0.OperationName()) - assert.Equal(t, "http", s0.Tag(ext.SpanType)) - assert.Equal(t, "google.urlshortener", s0.Tag(ext.ServiceName)) - assert.Equal(t, "urlshortener.url.list", s0.Tag(ext.ResourceName)) - assert.Equal(t, "400", s0.Tag(ext.HTTPCode)) - assert.Equal(t, "GET", s0.Tag(ext.HTTPMethod)) - assert.Equal(t, "/urlshortener/v1/url/history", s0.Tag(ext.HTTPURL)) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/endpoints_gen.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/endpoints_gen.go deleted file mode 100644 index 5122c418..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/endpoints_gen.go +++ /dev/null @@ -1,6238 +0,0 @@ -// Code generated by make_endpoints.go DO NOT EDIT - -package api - -import ( - "regexp" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal" -) - -func init() { - apiEndpoints = internal.NewTree([]internal.Endpoint{ - {Hostname: "", HTTPMethod: "GET", PathTemplate: "/accounts/{accountId}/reports", PathMatcher: regexp.MustCompile(`^(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.repeated", ResourceName: "adsense.accounts.reports.generate"}, - {Hostname: "", HTTPMethod: "GET", PathTemplate: "/map", PathMatcher: regexp.MustCompile(`^(/map)$`), ServiceName: "google.additionalprops", ResourceName: "mapofstrings.getMap"}, - {Hostname: "", HTTPMethod: "GET", PathTemplate: "/map", PathMatcher: regexp.MustCompile(`^(/map)$`), ServiceName: "google.additionalprops", ResourceName: "mapofstrings.getMap"}, - {Hostname: "", HTTPMethod: "GET", PathTemplate: "/reports", PathMatcher: regexp.MustCompile(`^(/reports)$`), ServiceName: "google.paramrename", ResourceName: "youtubeAnalytics.reports.query"}, - {Hostname: "", HTTPMethod: "GET", PathTemplate: "/{project}/metricDescriptors", PathMatcher: regexp.MustCompile(`^(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors)$`), ServiceName: "google.getwithoutbody", ResourceName: "getwithoutbody.metricDescriptors.list"}, - {Hostname: "", HTTPMethod: "POST", PathTemplate: "/calendars/{calendarId}/events/{eventId}/move", PathMatcher: regexp.MustCompile(`^(/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/move)$`), ServiceName: "google.paramrename", ResourceName: "calendar.events.move"}, - {Hostname: "abusiveexperiencereport.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/sites/{sitesId}", PathMatcher: regexp.MustCompile(`^(/v1/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.abusiveexperiencereport", ResourceName: "abusiveexperiencereport.sites.get"}, - {Hostname: "abusiveexperiencereport.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/violatingSites", PathMatcher: regexp.MustCompile(`^(/v1/violatingSites)$`), ServiceName: "google.abusiveexperiencereport", ResourceName: "abusiveexperiencereport.violatingSites.list"}, - {Hostname: "acceleratedmobilepageurl.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/ampUrls:batchGet", PathMatcher: regexp.MustCompile(`^(/v1/ampUrls:batchGet)$`), ServiceName: "google.acceleratedmobilepageurl", ResourceName: "acceleratedmobilepageurl.ampUrls.batchGet"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.delete"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.delete"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invitations)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.invitations.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations/{invitationId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.invitations.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/users", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.users.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.users.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/creatives", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dealAssociations)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.dealAssociations.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/bidMetrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidMetrics)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.bidMetrics.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/bidResponseErrors", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidResponseErrors)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.bidResponseErrors.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/bidResponsesWithoutBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidResponsesWithoutBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.bidResponsesWithoutBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/filteredBidRequests", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBidRequests)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.filteredBidRequests.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/filteredBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.filteredBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/filteredBids/{creativeStatusId}/creatives", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.filteredBids.creatives.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/filteredBids/{creativeStatusId}/details", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.filteredBids.details.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/impressionMetrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/impressionMetrics)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.impressionMetrics.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/losingBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/losingBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.losingBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets/{filterSetsId}/nonBillableWinningBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nonBillableWinningBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.nonBillableWinningBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.get"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/bidMetrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidMetrics)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.bidMetrics.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/bidResponseErrors", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidResponseErrors)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.bidResponseErrors.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/bidResponsesWithoutBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bidResponsesWithoutBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.bidResponsesWithoutBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/filteredBidRequests", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBidRequests)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.filteredBidRequests.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/filteredBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.filteredBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/filteredBids/{creativeStatusId}/creatives", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.filteredBids.creatives.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/filteredBids/{creativeStatusId}/details", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filteredBids/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.filteredBids.details.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/impressionMetrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/impressionMetrics)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.impressionMetrics.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/losingBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/losingBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.losingBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets/{filterSetsId}/nonBillableWinningBids", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nonBillableWinningBids)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.nonBillableWinningBids.list"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/clients", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.create"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invitations)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.invitations.create"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/creatives", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.create"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dealAssociations:add)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.dealAssociations.add"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dealAssociations:remove)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.dealAssociations.remove"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:stopWatching)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.stopWatching"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}:watch", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:watch)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.watch"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/bidders/{biddersId}/accounts/{accountsId}/filterSets", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.accounts.filterSets.create"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/bidders/{biddersId}/filterSets", PathMatcher: regexp.MustCompile(`^(/v2beta1/bidders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filterSets)$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.bidders.filterSets.create"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.update"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.clients.users.update"}, - {Hostname: "adexchangebuyer.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2beta1/accounts/{accountId}/creatives/{creativeId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer2", ResourceName: "adexchangebuyer2.accounts.creatives.update"}, - {Hostname: "adexperiencereport.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/sites/{sitesId}", PathMatcher: regexp.MustCompile(`^(/v1/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexperiencereport", ResourceName: "adexperiencereport.sites.get"}, - {Hostname: "adexperiencereport.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/violatingSites", PathMatcher: regexp.MustCompile(`^(/v1/violatingSites)$`), ServiceName: "google.adexperiencereport", ResourceName: "adexperiencereport.violatingSites.list"}, - {Hostname: "analyticsreporting.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/reports:batchGet", PathMatcher: regexp.MustCompile(`^(/v4/reports:batchGet)$`), ServiceName: "google.analyticsreporting", ResourceName: "analyticsreporting.reports.batchGet"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/customers/{customersId}/configurations/{configurationsId}", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.configurations.delete"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers", PathMatcher: regexp.MustCompile(`^(/v1/customers)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.list"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers/{customersId}/configurations", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configurations)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.configurations.list"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers/{customersId}/configurations/{configurationsId}", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.configurations.get"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers/{customersId}/devices", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.devices.list"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers/{customersId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.devices.get"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/customers/{customersId}/dpcs", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dpcs)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.dpcs.list"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.operations.get"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/partners/{partnersId}/customers", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customers)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.customers.list"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/partners/{partnersId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.get"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/customers/{customersId}/configurations/{configurationsId}", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.configurations.patch"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/customers/{customersId}/configurations", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configurations)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.configurations.create"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/customers/{customersId}/devices:applyConfiguration", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:applyConfiguration)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.devices.applyConfiguration"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/customers/{customersId}/devices:removeConfiguration", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:removeConfiguration)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.devices.removeConfiguration"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/customers/{customersId}/devices:unclaim", PathMatcher: regexp.MustCompile(`^(/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:unclaim)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.customers.devices.unclaim"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/customers", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customers)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.customers.create"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices/{devicesId}/metadata", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metadata)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.metadata"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:claim", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:claim)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.claim"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:claimAsync", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:claimAsync)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.claimAsync"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:findByIdentifier", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:findByIdentifier)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.findByIdentifier"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:findByOwner", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:findByOwner)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.findByOwner"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:unclaim", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:unclaim)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.unclaim"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:unclaimAsync", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:unclaimAsync)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.unclaimAsync"}, - {Hostname: "androiddeviceprovisioning.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/partners/{partnersId}/devices:updateMetadataAsync", PathMatcher: regexp.MustCompile(`^(/v1/partners/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices:updateMetadataAsync)$`), ServiceName: "google.androiddeviceprovisioning", ResourceName: "androiddeviceprovisioning.partners.devices.updateMetadataAsync"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.delete"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.operations.delete"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/enterprises/{enterprisesId}/enrollmentTokens/{enrollmentTokensId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enrollmentTokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.enrollmentTokens.delete"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/enterprises/{enterprisesId}/policies/{policiesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/policies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.policies.delete"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.get"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/applications/{applicationsId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.applications.get"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/devices", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.list"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.get"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.operations.list"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.operations.get"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/policies", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/policies)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.policies.list"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/enterprises/{enterprisesId}/policies/{policiesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/policies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.policies.get"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/enterprises/{enterprisesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.patch"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.patch"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/enterprises/{enterprisesId}/policies/{policiesId}", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/policies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.policies.patch"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/enterprises", PathMatcher: regexp.MustCompile(`^(/v1/enterprises)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.create"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.operations.cancel"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/enterprises/{enterprisesId}/devices/{devicesId}:issueCommand", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:issueCommand)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.devices.issueCommand"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/enterprises/{enterprisesId}/enrollmentTokens", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enrollmentTokens)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.enrollmentTokens.create"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/enterprises/{enterprisesId}/webTokens", PathMatcher: regexp.MustCompile(`^(/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webTokens)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.enterprises.webTokens.create"}, - {Hostname: "androidmanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/signupUrls", PathMatcher: regexp.MustCompile(`^(/v1/signupUrls)$`), ServiceName: "google.androidmanagement", ResourceName: "androidmanagement.signupUrls.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.instances.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.delete"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/authorizedDomains", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedDomains)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedDomains.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/authorizedDomains", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedDomains)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedDomains.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/authorizedDomains", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedDomains)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedDomains.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.instances.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.instances.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta4/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.locations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.operations.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.list"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.get"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}/domainMappings/{domainMappingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules/{ingressRulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta4/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta5/apps/{appsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.patch"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps", PathMatcher: regexp.MustCompile(`^(/v1/apps)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/firewall/ingressRules:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules:batchUpdate)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.batchUpdate"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:debug)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.debug"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:debug)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.debug"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}:repair", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:repair)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.repair"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/apps/{appsId}:repair", PathMatcher: regexp.MustCompile(`^(/v1/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:repair)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.repair"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1alpha/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps", PathMatcher: regexp.MustCompile(`^(/v1beta/apps)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/authorizedCertificates", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedCertificates)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.authorizedCertificates.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/domainMappings", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainMappings)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.domainMappings.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/firewall/ingressRules:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/firewall/ingressRules:batchUpdate)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.firewall.ingressRules.batchUpdate"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:debug)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.debug"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/apps/{appsId}:repair", PathMatcher: regexp.MustCompile(`^(/v1beta/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:repair)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.repair"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta4/apps", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}/instances/{instancesId}:debug", PathMatcher: regexp.MustCompile(`^(/v1beta4/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:debug)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.modules.versions.instances.debug"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta5/apps", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.create"}, - {Hostname: "appengine.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug", PathMatcher: regexp.MustCompile(`^(/v1beta5/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:debug)$`), ServiceName: "google.appengine", ResourceName: "appengine.apps.services.versions.instances.debug"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.delete"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.runs.delete"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.delete"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.runs.delete"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/dataSources", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.dataSources.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/dataSources/{dataSourcesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.dataSources.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/dataSources", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.dataSources.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.dataSources.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.runs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.runs.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferLogs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.runs.transferLogs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/transferConfigs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.runs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.runs.get"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/runs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferLogs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.runs.transferLogs.list"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.patch"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.patch"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/dataSources/{dataSourcesId}:checkValidCreds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:checkValidCreds)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.dataSources.checkValidCreds"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}:checkValidCreds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:checkValidCreds)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.dataSources.checkValidCreds"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.create"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}:scheduleRuns", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:scheduleRuns)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.locations.transferConfigs.scheduleRuns"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/transferConfigs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.create"}, - {Hostname: "bigquerydatatransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/transferConfigs/{transferConfigsId}:scheduleRuns", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/transferConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:scheduleRuns)$`), ServiceName: "google.bigquerydatatransfer", ResourceName: "bigquerydatatransfer.projects.transferConfigs.scheduleRuns"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/spaces/{spacesId}/messages/{messagesId}", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.chat", ResourceName: "chat.spaces.messages.delete"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/spaces", PathMatcher: regexp.MustCompile(`^(/v1/spaces)$`), ServiceName: "google.chat", ResourceName: "chat.spaces.list"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/spaces/{spacesId}", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.chat", ResourceName: "chat.spaces.get"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/spaces/{spacesId}/members", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members)$`), ServiceName: "google.chat", ResourceName: "chat.spaces.members.list"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/spaces/{spacesId}/members/{membersId}", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.chat", ResourceName: "chat.spaces.members.get"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/spaces/{spacesId}/messages/{messagesId}", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.chat", ResourceName: "chat.spaces.messages.get"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/spaces/{spacesId}/messages", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages)$`), ServiceName: "google.chat", ResourceName: "chat.spaces.messages.create"}, - {Hostname: "chat.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/spaces/{spacesId}/messages/{messagesId}", PathMatcher: regexp.MustCompile(`^(/v1/spaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.chat", ResourceName: "chat.spaces.messages.update"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{courseId}/aliases/{alias}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.aliases.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{courseId}/announcements/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{courseId}/courseWork/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{courseId}/students/{userId}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/students/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.students.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{courseId}/teachers/{userId}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/teachers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.teachers.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/courses/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/invitations/{id}", PathMatcher: regexp.MustCompile(`^(/v1/invitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.invitations.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/registrations/{registrationId}", PathMatcher: regexp.MustCompile(`^(/v1/registrations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.registrations.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/userProfiles/{studentId}/guardians/{guardianId}", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardians/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardians.delete"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses", PathMatcher: regexp.MustCompile(`^(/v1/courses)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/aliases", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.aliases.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/announcements", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/announcements/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/courseWork", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/courseWork/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/students", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/students)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.students.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/students/{userId}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/students/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.students.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/teachers", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/teachers)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.teachers.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{courseId}/teachers/{userId}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/teachers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.teachers.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/courses/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/invitations", PathMatcher: regexp.MustCompile(`^(/v1/invitations)$`), ServiceName: "google.classroom", ResourceName: "classroom.invitations.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/invitations/{id}", PathMatcher: regexp.MustCompile(`^(/v1/invitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.invitations.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/userProfiles/{studentId}/guardianInvitations", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardianInvitations)$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardianInvitations.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/userProfiles/{studentId}/guardianInvitations/{invitationId}", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardianInvitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardianInvitations.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/userProfiles/{studentId}/guardians", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardians)$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardians.list"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/userProfiles/{studentId}/guardians/{guardianId}", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardians/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardians.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/userProfiles/{userId}", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.get"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/courses/{courseId}/announcements/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.patch"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.patch"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/courses/{courseId}/courseWork/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.patch"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/courses/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.patch"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/userProfiles/{studentId}/guardianInvitations/{invitationId}", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardianInvitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardianInvitations.patch"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses", PathMatcher: regexp.MustCompile(`^(/v1/courses)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/aliases", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.aliases.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/announcements", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/announcements/{id}:modifyAssignees", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/announcements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyAssignees)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.announcements.modifyAssignees"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:modifyAttachments", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyAttachments)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.modifyAttachments"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reclaim)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.reclaim"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:return)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.return"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/studentSubmissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:turnIn)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.studentSubmissions.turnIn"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/courseWork/{id}:modifyAssignees", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/courseWork/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyAssignees)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.courseWork.modifyAssignees"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/students", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/students)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.students.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/courses/{courseId}/teachers", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/teachers)$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.teachers.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/invitations", PathMatcher: regexp.MustCompile(`^(/v1/invitations)$`), ServiceName: "google.classroom", ResourceName: "classroom.invitations.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/invitations/{id}:accept", PathMatcher: regexp.MustCompile(`^(/v1/invitations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:accept)$`), ServiceName: "google.classroom", ResourceName: "classroom.invitations.accept"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/registrations", PathMatcher: regexp.MustCompile(`^(/v1/registrations)$`), ServiceName: "google.classroom", ResourceName: "classroom.registrations.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/userProfiles/{studentId}/guardianInvitations", PathMatcher: regexp.MustCompile(`^(/v1/userProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/guardianInvitations)$`), ServiceName: "google.classroom", ResourceName: "classroom.userProfiles.guardianInvitations.create"}, - {Hostname: "classroom.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/courses/{id}", PathMatcher: regexp.MustCompile(`^(/v1/courses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.classroom", ResourceName: "classroom.courses.update"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/billingAccounts", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.list"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/billingAccounts/{billingAccountsId}", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.get"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/billingAccounts/{billingAccountsId}/projects", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.projects.list"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/billingAccounts/{billingAccountsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.getIamPolicy"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/billingInfo", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/billingInfo)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.projects.getBillingInfo"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services", PathMatcher: regexp.MustCompile(`^(/v1/services)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.services.list"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{servicesId}/skus", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/skus)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.services.skus.list"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/billingAccounts/{billingAccountsId}", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.patch"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/billingAccounts", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.create"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/billingAccounts/{billingAccountsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.setIamPolicy"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/billingAccounts/{billingAccountsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.billingAccounts.testIamPermissions"}, - {Hostname: "cloudbilling.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/billingInfo", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/billingInfo)$`), ServiceName: "google.cloudbilling", ResourceName: "cloudbilling.projects.updateBillingInfo"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.delete"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.operations.list"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.operations.get"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/builds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/builds)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.builds.list"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/builds/{id}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/builds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.builds.get"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/triggers", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.list"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.get"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.patch"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.operations.cancel"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/builds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/builds)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.builds.create"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/builds/{id}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/builds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.builds.cancel"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/builds/{id}:retry", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/builds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:retry)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.builds.retry"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/triggers", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.create"}, - {Hostname: "cloudbuild.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/triggers/{triggerId}:run", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:run)$`), ServiceName: "google.cloudbuild", ResourceName: "cloudbuild.projects.triggers.run"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}", PathMatcher: regexp.MustCompile(`^(/v2/debugger/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.debugger.debuggees.breakpoints.delete"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/controller/debuggees/{debuggeeId}/breakpoints", PathMatcher: regexp.MustCompile(`^(/v2/controller/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints)$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.controller.debuggees.breakpoints.list"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/debugger/debuggees", PathMatcher: regexp.MustCompile(`^(/v2/debugger/debuggees)$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.debugger.debuggees.list"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/debugger/debuggees/{debuggeeId}/breakpoints", PathMatcher: regexp.MustCompile(`^(/v2/debugger/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints)$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.debugger.debuggees.breakpoints.list"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}", PathMatcher: regexp.MustCompile(`^(/v2/debugger/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.debugger.debuggees.breakpoints.get"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/controller/debuggees/register", PathMatcher: regexp.MustCompile(`^(/v2/controller/debuggees/register)$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.controller.debuggees.register"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/debugger/debuggees/{debuggeeId}/breakpoints/set", PathMatcher: regexp.MustCompile(`^(/v2/debugger/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints/set)$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.debugger.debuggees.breakpoints.set"}, - {Hostname: "clouddebugger.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/controller/debuggees/{debuggeeId}/breakpoints/{id}", PathMatcher: regexp.MustCompile(`^(/v2/controller/debuggees/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/breakpoints/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouddebugger", ResourceName: "clouddebugger.controller.debuggees.breakpoints.update"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/events", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events)$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.deleteEvents"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/events", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events)$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.events.list"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/groupStats", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groupStats)$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.groupStats.list"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/groups/{groupsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.groups.get"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/events:report", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events:report)$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.events.report"}, - {Hostname: "clouderrorreporting.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/groups/{groupsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouderrorreporting", ResourceName: "clouderrorreporting.projects.groups.update"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.delete"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.delete"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.operations.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.operations.get"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.get"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/operations", PathMatcher: regexp.MustCompile(`^(/v1beta2/operations)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.operations.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.operations.get"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.list"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.get"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.patch"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.create"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:call)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.call"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:generateDownloadUrl", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:generateDownloadUrl)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.generateDownloadUrl"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/functions:generateUploadUrl", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions:generateUploadUrl)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.generateUploadUrl"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.create"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:call)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.call"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:generateDownloadUrl", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:generateDownloadUrl)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.generateDownloadUrl"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions:generateUploadUrl", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions:generateUploadUrl)$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.generateUploadUrl"}, - {Hostname: "cloudfunctions.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/functions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudfunctions", ResourceName: "cloudfunctions.projects.locations.functions.update"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.delete"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.delete"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.delete"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.delete"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.delete"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.get"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.get"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/configVersions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configVersions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.configVersions.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/states", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/states)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.states.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.get"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}/configVersions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configVersions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.configVersions.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}/states", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/states)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.states.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.get"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.get"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/configVersions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configVersions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.configVersions.list"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.patch"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.patch"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.patch"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.patch"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.patch"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.create"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.create"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:modifyCloudToDeviceConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyCloudToDeviceConfig)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.modifyCloudToDeviceConfig"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices/{devicesId}:modifyCloudToDeviceConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyCloudToDeviceConfig)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.devices.modifyCloudToDeviceConfig"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.getIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.setIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.groups.testIamPermissions"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.getIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.setIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.testIamPermissions"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.create"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.create"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:modifyCloudToDeviceConfig", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyCloudToDeviceConfig)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.devices.modifyCloudToDeviceConfig"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.getIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.setIamPolicy"}, - {Hostname: "cloudiot.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/registries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudiot", ResourceName: "cloudiot.projects.locations.registries.testIamPermissions"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.list"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.get"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.list"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.get"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.list"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.get"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.list"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.get"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.getIamPolicy"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.getIamPolicy"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.patch"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.patch"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.create"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.create"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.create"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:destroy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:destroy)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.destroy"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:restore", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeyVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:restore)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.restore"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:decrypt", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:decrypt)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.decrypt"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:encrypt", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:encrypt)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.encrypt"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.setIamPolicy"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.testIamPermissions"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:updatePrimaryVersion", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cryptoKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:updatePrimaryVersion)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.cryptoKeys.updatePrimaryVersion"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.setIamPolicy"}, - {Hostname: "cloudkms.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keyRings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudkms", ResourceName: "cloudkms.projects.locations.keyRings.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/liens/{liensId}", PathMatcher: regexp.MustCompile(`^(/v1/liens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.liens.delete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.delete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.delete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.delete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.delete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/liens", PathMatcher: regexp.MustCompile(`^(/v1/liens)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.liens.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.operations.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/organizations/{organizationsId}", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects", PathMatcher: regexp.MustCompile(`^(/v1/projects)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects", PathMatcher: regexp.MustCompile(`^(/v1/projects)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/{+name}", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.operations.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/organizations", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/organizations/{organizationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders", PathMatcher: regexp.MustCompile(`^(/v2/folders)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/folders", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.list"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.get"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.patch"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/folders/{foldersId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.patch"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:clearOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:clearOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.clearOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:getEffectiveOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getEffectiveOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.getEffectiveOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:getOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.getOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:listAvailableOrgPolicyConstraints", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listAvailableOrgPolicyConstraints)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.listAvailableOrgPolicyConstraints"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:listOrgPolicies", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listOrgPolicies)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.listOrgPolicies"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/folders/{foldersId}:setOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.setOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/liens", PathMatcher: regexp.MustCompile(`^(/v1/liens)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.liens.create"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:clearOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:clearOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.clearOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:getEffectiveOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getEffectiveOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.getEffectiveOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:getOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.getOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:listAvailableOrgPolicyConstraints", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listAvailableOrgPolicyConstraints)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:listOrgPolicies", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listOrgPolicies)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.listOrgPolicies"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:setOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.setOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations:search", PathMatcher: regexp.MustCompile(`^(/v1/organizations:search)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.search"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations:search", PathMatcher: regexp.MustCompile(`^(/v1/organizations:search)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.search"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects", PathMatcher: regexp.MustCompile(`^(/v1/projects)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.create"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:getAncestry", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getAncestry)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getAncestry"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.undelete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:clearOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:clearOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.clearOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:getEffectiveOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getEffectiveOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getEffectiveOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:getOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:listAvailableOrgPolicyConstraints", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listAvailableOrgPolicyConstraints)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.listAvailableOrgPolicyConstraints"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:listOrgPolicies", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listOrgPolicies)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.listOrgPolicies"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:setOrgPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setOrgPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.setOrgPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{resource}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{resource}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{resource}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/organizations/{organizationsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/organizations/{organizationsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/organizations/{organizationsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.create"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}:getAncestry", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getAncestry)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getAncestry"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.undelete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{resource}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{resource}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{resource}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders", PathMatcher: regexp.MustCompile(`^(/v2/folders)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.create"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}:move", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:move)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.move"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}:undelete", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.undelete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders:search", PathMatcher: regexp.MustCompile(`^(/v2/folders:search)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.search"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.create"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders/{foldersId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.getIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders/{foldersId}:move", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:move)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.move"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders/{foldersId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.setIamPolicy"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders/{foldersId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.testIamPermissions"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders/{foldersId}:undelete", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.undelete"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/folders:search", PathMatcher: regexp.MustCompile(`^(/v2beta1/folders:search)$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.folders.search"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.update"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/organizations/{organizationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.organizations.update"}, - {Hostname: "cloudresourcemanager.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudresourcemanager", ResourceName: "cloudresourcemanager.projects.update"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.operations.delete"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/users/{usersId}/environments/{environmentsId}/publicKeys/{publicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.users.environments.publicKeys.delete"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.operations.list"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.operations.get"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/users/{usersId}/environments/{environmentsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.users.environments.get"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha1/users/{usersId}/environments/{environmentsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.users.environments.patch"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.operations.cancel"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/users/{usersId}/environments/{environmentsId}/publicKeys", PathMatcher: regexp.MustCompile(`^(/v1alpha1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publicKeys)$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.users.environments.publicKeys.create"}, - {Hostname: "cloudshell.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/users/{usersId}/environments/{environmentsId}:start", PathMatcher: regexp.MustCompile(`^(/v1alpha1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:start)$`), ServiceName: "google.cloudshell", ResourceName: "cloudshell.users.environments.start"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.delete"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.delete"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.list"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.get"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.list"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.get"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.list"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.get"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.patch"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.create"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.create"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}:acknowledge", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:acknowledge)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.acknowledge"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}:cancelLease", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancelLease)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.cancelLease"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}:renewLease", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:renewLease)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.renewLease"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks/{tasksId}:run", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:run)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.run"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}/tasks:lease", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks:lease)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.tasks.lease"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.getIamPolicy"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:pause", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:pause)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.pause"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:purge", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:purge)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.purge"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:resume", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:resume)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.resume"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.setIamPolicy"}, - {Hostname: "cloudtasks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/locations/{locationsId}/queues/{queuesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.cloudtasks", ResourceName: "cloudtasks.projects.locations.queues.testIamPermissions"}, - {Hostname: "cloudtrace.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/traces", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces)$`), ServiceName: "google.cloudtrace", ResourceName: "cloudtrace.projects.traces.list"}, - {Hostname: "cloudtrace.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/traces/{traceId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtrace", ResourceName: "cloudtrace.projects.traces.get"}, - {Hostname: "cloudtrace.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectId}/traces", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces)$`), ServiceName: "google.cloudtrace", ResourceName: "cloudtrace.projects.patchTraces"}, - {Hostname: "cloudtrace.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/traces/{tracesId}/spans/{spansId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/spans/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudtrace", ResourceName: "cloudtrace.projects.traces.spans.createSpan"}, - {Hostname: "cloudtrace.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/traces:batchWrite", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces:batchWrite)$`), ServiceName: "google.cloudtrace", ResourceName: "cloudtrace.projects.traces.batchWrite"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/environments/{environmentsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.environments.delete"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.operations.delete"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/environments", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.environments.list"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/environments/{environmentsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.environments.get"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.operations.list"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.operations.get"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/environments/{environmentsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.environments.patch"}, - {Hostname: "composer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/environments", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.composer", ResourceName: "composer.projects.locations.environments.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.delete"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/operations/{operationId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/serverconfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serverconfig)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.getServerconfig"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/serverConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serverConfig)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.getServerConfig"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/operations/{operationId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/serverconfig", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serverconfig)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.getServerconfig"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/aggregated/usableSubnetworks", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/usableSubnetworks)$`), ServiceName: "google.container", ResourceName: "container.projects.aggregated.usableSubnetworks.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.list"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.get"}, - {Hostname: "container.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/serverConfig", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serverConfig)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.getServerConfig"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/addons", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addons)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.addons"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/legacyAbac", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/legacyAbac)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.legacyAbac"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.locations"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/logging", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logging)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.logging"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/master", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/master)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.master"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/monitoring", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/monitoring)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.monitoring"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/autoscaling", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscaling)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.autoscaling"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/setManagement", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setManagement)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.setManagement"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/setSize", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSize)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.setSize"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/update", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/update)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.rollback"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/resourceLabels", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceLabels)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.resourceLabels"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:completeIpRotation", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:completeIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.completeIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setMaintenancePolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMaintenancePolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setMaintenancePolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setMasterAuth", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMasterAuth)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setMasterAuth"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setNetworkPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setNetworkPolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setNetworkPolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:startIpRotation", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:startIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.startIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/operations/{operationId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.cancel"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.rollback"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setAutoscaling", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setAutoscaling)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setAutoscaling"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setManagement", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setManagement)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setManagement"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setSize", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setSize)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setSize"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:completeIpRotation", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:completeIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.completeIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setAddons", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setAddons)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setAddons"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLegacyAbac", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLegacyAbac)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLegacyAbac"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLocations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLocations)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLocations"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLogging", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLogging)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLogging"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMaintenancePolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMaintenancePolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMaintenancePolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMasterAuth", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMasterAuth)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMasterAuth"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMonitoring", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMonitoring)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMonitoring"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setNetworkPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setNetworkPolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setNetworkPolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setResourceLabels", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setResourceLabels)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setResourceLabels"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:startIpRotation", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:startIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.startIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:updateMaster", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:updateMaster)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.updateMaster"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.cancel"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/addons", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addons)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.addons"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/legacyAbac", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/legacyAbac)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.legacyAbac"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.locations"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/logging", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logging)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.logging"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/master", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/master)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.master"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/monitoring", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/monitoring)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.monitoring"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/autoscaling", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscaling)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.autoscaling"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/setManagement", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setManagement)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.setManagement"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/setSize", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSize)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.setSize"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/update", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/update)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.nodePools.rollback"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/resourceLabels", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceLabels)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.resourceLabels"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:completeIpRotation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:completeIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.completeIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setMaintenancePolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMaintenancePolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setMaintenancePolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setMasterAuth", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMasterAuth)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setMasterAuth"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:setNetworkPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setNetworkPolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.setNetworkPolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}:startIpRotation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:startIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.startIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/operations/{operationId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.container", ResourceName: "container.projects.zones.operations.cancel"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.create"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.rollback"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setAutoscaling", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setAutoscaling)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setAutoscaling"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setManagement", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setManagement)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setManagement"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}:setSize", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setSize)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.setSize"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:completeIpRotation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:completeIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.completeIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setAddons", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setAddons)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setAddons"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLegacyAbac", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLegacyAbac)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLegacyAbac"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLocations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLocations)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLocations"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setLogging", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setLogging)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setLogging"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMaintenancePolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMaintenancePolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMaintenancePolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMasterAuth", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMasterAuth)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMasterAuth"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setMonitoring", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setMonitoring)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setMonitoring"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setNetworkPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setNetworkPolicy)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setNetworkPolicy"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:setResourceLabels", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setResourceLabels)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.setResourceLabels"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:startIpRotation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:startIpRotation)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.startIpRotation"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}:updateMaster", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:updateMaster)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.updateMaster"}, - {Hostname: "container.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.container", ResourceName: "container.projects.locations.operations.cancel"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectId}/zones/{zone}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.zones.clusters.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.update"}, - {Hostname: "container.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/clusters/{clustersId}/nodePools/{nodePoolsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodePools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.container", ResourceName: "container.projects.locations.clusters.nodePools.update"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/jobs", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.list"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.get"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/messages", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.messages.list"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/metrics", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.getMetrics"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/jobs:aggregated", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:aggregated)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.aggregated"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.list"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.get"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.messages.list"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.getMetrics"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/templates:get", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates:get)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.templates.get"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1b3/projects/{projectId}/templates:get", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates:get)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.templates.get"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/WorkerMessages", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/WorkerMessages)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.workerMessages"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/jobs", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.create"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/debug/getConfig)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.debug.getConfig"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/debug/sendCapture", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/debug/sendCapture)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.debug.sendCapture"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workItems:lease)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.workItems.lease"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workItems:reportStatus)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.workItems.reportStatus"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/WorkerMessages", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/WorkerMessages)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.workerMessages"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.create"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/debug/getConfig", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/debug/getConfig)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.debug.getConfig"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/debug/sendCapture", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/debug/sendCapture)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.debug.sendCapture"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workItems:lease)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.workItems.lease"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workItems:reportStatus)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.workItems.reportStatus"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/templates", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.templates.create"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/templates:launch", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates:launch)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.templates.launch"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/templates", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.templates.create"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1b3/projects/{projectId}/templates:launch", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates:launch)$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.templates.launch"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1b3/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.jobs.update"}, - {Hostname: "dataflow.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1b3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataflow", ResourceName: "dataflow.projects.locations.jobs.update"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectId}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.delete"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/regions/{regionsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/operations", PathMatcher: regexp.MustCompile(`^(/v1alpha1/operations)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/jobs", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.getIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/clusters/{clustersId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.getIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/jobs/{jobsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.getIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.getIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.get"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.getIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectId}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters/{clusterName}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.patch"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:diagnose)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.diagnose"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/regions/{region}/jobs:submit", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:submit)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.submit"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1alpha1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs:list", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:list)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.list"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectId}/regions/{region}/jobs:submit", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:submit)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.submit"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.operations.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/clusters/{clusterName}:diagnose", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:diagnose)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.clusters.diagnose"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/jobs/{jobId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}/jobs:submit", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:submit)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.jobs.submit"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:diagnose)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.diagnose"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectId}/regions/{region}/jobs:submit", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs:submit)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.submit"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}:instantiate", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:instantiate)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.instantiate"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.setIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.testIamPermissions"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates:instantiateInline", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates:instantiateInline)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.instantiateInline"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/clusters/{clustersId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.setIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/clusters/{clustersId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.clusters.testIamPermissions"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/jobs/{jobsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.setIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/jobs/{jobsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.jobs.testIamPermissions"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.cancel"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.setIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.operations.testIamPermissions"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.create"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}:instantiate", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:instantiate)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.instantiate"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.setIamPolicy"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.testIamPermissions"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates:instantiateInline", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates:instantiateInline)$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.instantiateInline"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta2/projects/{projectsId}/locations/{locationsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.locations.workflowTemplates.update"}, - {Hostname: "dataproc.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta2/projects/{projectsId}/regions/{regionsId}/workflowTemplates/{workflowTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/workflowTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dataproc", ResourceName: "dataproc.projects.regions.workflowTemplates.update"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.operations.delete"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.operations.list"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.operations.get"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:allocateIds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:allocateIds)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.allocateIds"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:beginTransaction", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:beginTransaction)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.beginTransaction"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:commit", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:commit)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.commit"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:export", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:export)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.export"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:import", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:import)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.import"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:lookup", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:lookup)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.lookup"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:reserveIds", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reserveIds)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.reserveIds"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.rollback"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}:runQuery", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:runQuery)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.runQuery"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.operations.cancel"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}:export", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:export)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.export"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectId}:import", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:import)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.import"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:allocateIds", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:allocateIds)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.allocateIds"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:beginTransaction", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:beginTransaction)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.beginTransaction"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:commit", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:commit)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.commit"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:lookup", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:lookup)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.lookup"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:reserveIds", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reserveIds)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.reserveIds"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.rollback"}, - {Hostname: "datastore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectId}:runQuery", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:runQuery)$`), ServiceName: "google.datastore", ResourceName: "datastore.projects.runQuery"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.deleteContexts"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.deleteContexts"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.contexts.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.entityTypes.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.deleteContexts"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.delete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.getAgent"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/intents", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/agent:search", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:search)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.search"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.operations.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.getAgent"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.contexts.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.contexts.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.entityTypes.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.entityTypes.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.list"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/agent:search", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:search)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.search"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.operations.get"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.contexts.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.entityTypes.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents/{intentsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts/{contextsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes/{entityTypesId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.patch"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchCreate", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchCreate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchCreate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/entityTypes:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/intents", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/intents:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/intents:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent/sessions/{sessionsId}:detectIntent", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:detectIntent)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.detectIntent"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent:export", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:export)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.export"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent:import", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:import)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.import"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent:restore", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:restore)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.restore"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/agent:train", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:train)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.train"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchCreate", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchCreate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchCreate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes/{entityTypesId}/entities:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.entities.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/entityTypes:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/entityTypes:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.entityTypes.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.contexts.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.entityTypes.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/environments/{environmentsId}/users/{usersId}/sessions/{sessionsId}:detectIntent", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:detectIntent)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.environments.users.sessions.detectIntent"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents:batchDelete)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.batchDelete"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/intents:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/intents:batchUpdate)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.intents.batchUpdate"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/contexts", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contexts)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.contexts.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}/entityTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityTypes)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.entityTypes.create"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent/sessions/{sessionsId}:detectIntent", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:detectIntent)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.sessions.detectIntent"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent:export", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:export)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.export"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent:import", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:import)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.import"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent:restore", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:restore)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.restore"}, - {Hostname: "dialogflow.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/agent:train", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/agent:train)$`), ServiceName: "google.dialogflow", ResourceName: "dialogflow.projects.agent.train"}, - {Hostname: "digitalassetlinks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/assetlinks:check", PathMatcher: regexp.MustCompile(`^(/v1/assetlinks:check)$`), ServiceName: "google.digitalassetlinks", ResourceName: "digitalassetlinks.assetlinks.check"}, - {Hostname: "digitalassetlinks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/statements:list", PathMatcher: regexp.MustCompile(`^(/v1/statements:list)$`), ServiceName: "google.digitalassetlinks", ResourceName: "digitalassetlinks.statements.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/dlpJobs/{dlpJobsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/inspect/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.operations.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/riskAnalysis/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/riskAnalysis/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.riskAnalysis.operations.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/dlpJobs/{dlpJobsId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.delete"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/infoTypes", PathMatcher: regexp.MustCompile(`^(/v2/infoTypes)$`), ServiceName: "google.dlp", ResourceName: "dlp.infoTypes.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/dlpJobs", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/dlpJobs/{dlpJobsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/jobTriggers", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/inspect/operations", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/operations)$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.operations.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/inspect/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.operations.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/inspect/results/{resultsId}/findings", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/results/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/findings)$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.results.findings.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/riskAnalysis/operations", PathMatcher: regexp.MustCompile(`^(/v2beta1/riskAnalysis/operations)$`), ServiceName: "google.dlp", ResourceName: "dlp.riskAnalysis.operations.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/riskAnalysis/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/riskAnalysis/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.riskAnalysis.operations.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/rootCategories", PathMatcher: regexp.MustCompile(`^(/v2beta1/rootCategories)$`), ServiceName: "google.dlp", ResourceName: "dlp.rootCategories.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/rootCategories/{rootCategoriesId}/infoTypes", PathMatcher: regexp.MustCompile(`^(/v2beta1/rootCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/infoTypes)$`), ServiceName: "google.dlp", ResourceName: "dlp.rootCategories.infoTypes.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/infoTypes", PathMatcher: regexp.MustCompile(`^(/v2beta2/infoTypes)$`), ServiceName: "google.dlp", ResourceName: "dlp.infoTypes.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/organizations/{organizationsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/organizations/{organizationsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/dlpJobs", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/dlpJobs/{dlpJobsId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/jobTriggers", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.list"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.get"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/organizations/{organizationsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/organizations/{organizationsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/projects/{projectsId}/deidentifyTemplates/{deidentifyTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/projects/{projectsId}/inspectTemplates/{inspectTemplatesId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2beta2/projects/{projectsId}/jobTriggers/{jobTriggersId}", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.patch"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/organizations/{organizationsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/organizations/{organizationsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/content:deidentify", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:deidentify)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.deidentify"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/content:inspect", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:inspect)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.inspect"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/content:reidentify", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:reidentify)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.reidentify"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/dlpJobs", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/dlpJobs/{dlpJobsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.cancel"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/image:redact", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/image:redact)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.image.redact"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/jobTriggers", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/content:deidentify", PathMatcher: regexp.MustCompile(`^(/v2beta1/content:deidentify)$`), ServiceName: "google.dlp", ResourceName: "dlp.content.deidentify"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/content:inspect", PathMatcher: regexp.MustCompile(`^(/v2beta1/content:inspect)$`), ServiceName: "google.dlp", ResourceName: "dlp.content.inspect"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/content:redact", PathMatcher: regexp.MustCompile(`^(/v2beta1/content:redact)$`), ServiceName: "google.dlp", ResourceName: "dlp.content.redact"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/dataSource:analyze", PathMatcher: regexp.MustCompile(`^(/v2beta1/dataSource:analyze)$`), ServiceName: "google.dlp", ResourceName: "dlp.dataSource.analyze"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/inspect/operations", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/operations)$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.operations.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/inspect/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v2beta1/inspect/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dlp", ResourceName: "dlp.inspect.operations.cancel"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/riskAnalysis/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v2beta1/riskAnalysis/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dlp", ResourceName: "dlp.riskAnalysis.operations.cancel"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/organizations/{organizationsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.deidentifyTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/organizations/{organizationsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.organizations.inspectTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/content:deidentify", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:deidentify)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.deidentify"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/content:inspect", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:inspect)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.inspect"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/content:reidentify", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content:reidentify)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.content.reidentify"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/dataSource:analyze", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSource:analyze)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dataSource.analyze"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/dataSource:inspect", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSource:inspect)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dataSource.inspect"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/deidentifyTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deidentifyTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.deidentifyTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/dlpJobs/{dlpJobsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dlpJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.dlpJobs.cancel"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/image:redact", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/image:redact)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.image.redact"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/inspectTemplates", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inspectTemplates)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.inspectTemplates.create"}, - {Hostname: "dlp.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta2/projects/{projectsId}/jobTriggers", PathMatcher: regexp.MustCompile(`^(/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobTriggers)$`), ServiceName: "google.dlp", ResourceName: "dlp.projects.jobTriggers.create"}, - {Hostname: "firebasedynamiclinks.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/{dynamicLink}/linkStats", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/linkStats)$`), ServiceName: "google.firebasedynamiclinks", ResourceName: "firebasedynamiclinks.getLinkStats"}, - {Hostname: "firebasedynamiclinks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/installAttribution", PathMatcher: regexp.MustCompile(`^(/v1/installAttribution)$`), ServiceName: "google.firebasedynamiclinks", ResourceName: "firebasedynamiclinks.installAttribution"}, - {Hostname: "firebasedynamiclinks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/managedShortLinks:create", PathMatcher: regexp.MustCompile(`^(/v1/managedShortLinks:create)$`), ServiceName: "google.firebasedynamiclinks", ResourceName: "firebasedynamiclinks.managedShortLinks.create"}, - {Hostname: "firebasedynamiclinks.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/shortLinks", PathMatcher: regexp.MustCompile(`^(/v1/shortLinks)$`), ServiceName: "google.firebasedynamiclinks", ResourceName: "firebasedynamiclinks.shortLinks.create"}, - {Hostname: "firebaseremoteconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/remoteConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remoteConfig)$`), ServiceName: "google.firebaseremoteconfig", ResourceName: "firebaseremoteconfig.projects.getRemoteConfig"}, - {Hostname: "firebaseremoteconfig.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/remoteConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remoteConfig)$`), ServiceName: "google.firebaseremoteconfig", ResourceName: "firebaseremoteconfig.projects.updateRemoteConfig"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/releases/{releasesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.delete"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/rulesets/{rulesetsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rulesets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.rulesets.delete"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/releases", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.list"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/releases/{releasesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.get"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/releases/{releasesId}:getExecutable", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getExecutable)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.getExecutable"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/rulesets", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rulesets)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.rulesets.list"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/rulesets/{rulesetsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rulesets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.rulesets.get"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/releases/{releasesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.patch"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/releases", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/releases)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.releases.create"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/rulesets", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rulesets)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.rulesets.create"}, - {Hostname: "firebaserules.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:test", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:test)$`), ServiceName: "google.firebaserules", ResourceName: "firebaserules.projects.test"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.delete"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/indexes/{indexesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/indexes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.indexes.delete"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.get"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}/{collectionId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.list"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/indexes", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/indexes)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.indexes.list"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/indexes/{indexesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/indexes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.indexes.get"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.patch"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{collectionId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.createDocument"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:listCollectionIds", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listCollectionIds)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.listCollectionIds"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:runQuery", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:runQuery)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.runQuery"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:batchGet", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:batchGet)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.batchGet"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:beginTransaction", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:beginTransaction)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.beginTransaction"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:commit", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:commit)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.commit"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:listen", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:listen)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.listen"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:rollback", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:rollback)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.rollback"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/documents:write", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/documents:write)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.documents.write"}, - {Hostname: "firestore.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/databases/{databasesId}/indexes", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/indexes)$`), ServiceName: "google.firestore", ResourceName: "firestore.projects.databases.indexes.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/v1/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/annotationsets/{annotationSetId}", PathMatcher: regexp.MustCompile(`^(/v1/annotationsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotationsets.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/callsets/{callSetId}", PathMatcher: regexp.MustCompile(`^(/v1/callsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.callsets.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/readgroupsets/{readGroupSetId}", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/variants/{variantId}", PathMatcher: regexp.MustCompile(`^(/v1/variants/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/variantsets/{variantSetId}", PathMatcher: regexp.MustCompile(`^(/v1/variantsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha2/pipelines/{pipelineId}", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.delete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/v1/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/annotationsets/{annotationSetId}", PathMatcher: regexp.MustCompile(`^(/v1/annotationsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotationsets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/callsets/{callSetId}", PathMatcher: regexp.MustCompile(`^(/v1/callsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.callsets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/datasets", PathMatcher: regexp.MustCompile(`^(/v1/datasets)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/readgroupsets/{readGroupSetId}", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/readgroupsets/{readGroupSetId}/coveragebuckets", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/coveragebuckets)$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.coveragebuckets.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/references/{referenceId}", PathMatcher: regexp.MustCompile(`^(/v1/references/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.references.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/references/{referenceId}/bases", PathMatcher: regexp.MustCompile(`^(/v1/references/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bases)$`), ServiceName: "google.genomics", ResourceName: "genomics.references.bases.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/referencesets/{referenceSetId}", PathMatcher: regexp.MustCompile(`^(/v1/referencesets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.referencesets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/variants/{variantId}", PathMatcher: regexp.MustCompile(`^(/v1/variants/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/variantsets/{variantSetId}", PathMatcher: regexp.MustCompile(`^(/v1/variantsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha2/operations", PathMatcher: regexp.MustCompile(`^(/v1alpha2/operations)$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha2/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha2/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha2/pipelines", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha2/pipelines/{pipelineId}", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha2/pipelines:getControllerConfig", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines:getControllerConfig)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.getControllerConfig"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2alpha1/projects/{projectsId}/operations", PathMatcher: regexp.MustCompile(`^(/v2alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.genomics", ResourceName: "genomics.projects.operations.list"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2alpha1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v2alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.projects.operations.get"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/callsets/{callSetId}", PathMatcher: regexp.MustCompile(`^(/v1/callsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.callsets.patch"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.patch"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/readgroupsets/{readGroupSetId}", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.patch"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/variants/{variantId}", PathMatcher: regexp.MustCompile(`^(/v1/variants/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.patch"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/variantsets/{variantSetId}", PathMatcher: regexp.MustCompile(`^(/v1/variantsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.patch"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/annotations", PathMatcher: regexp.MustCompile(`^(/v1/annotations)$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/annotations/search", PathMatcher: regexp.MustCompile(`^(/v1/annotations/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/annotations:batchCreate", PathMatcher: regexp.MustCompile(`^(/v1/annotations:batchCreate)$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.batchCreate"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/annotationsets", PathMatcher: regexp.MustCompile(`^(/v1/annotationsets)$`), ServiceName: "google.genomics", ResourceName: "genomics.annotationsets.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/annotationsets/search", PathMatcher: regexp.MustCompile(`^(/v1/annotationsets/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.annotationsets.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/callsets", PathMatcher: regexp.MustCompile(`^(/v1/callsets)$`), ServiceName: "google.genomics", ResourceName: "genomics.callsets.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/callsets/search", PathMatcher: regexp.MustCompile(`^(/v1/callsets/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.callsets.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/datasets", PathMatcher: regexp.MustCompile(`^(/v1/datasets)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/datasets/{datasetId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.undelete"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/datasets/{datasetsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.getIamPolicy"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/datasets/{datasetsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.setIamPolicy"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/datasets/{datasetsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.genomics", ResourceName: "genomics.datasets.testIamPermissions"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.cancel"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/readgroupsets/search", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/readgroupsets/{readGroupSetId}:export", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:export)$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.export"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/readgroupsets:import", PathMatcher: regexp.MustCompile(`^(/v1/readgroupsets:import)$`), ServiceName: "google.genomics", ResourceName: "genomics.readgroupsets.import"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/reads/search", PathMatcher: regexp.MustCompile(`^(/v1/reads/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.reads.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/references/search", PathMatcher: regexp.MustCompile(`^(/v1/references/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.references.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/referencesets/search", PathMatcher: regexp.MustCompile(`^(/v1/referencesets/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.referencesets.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variants", PathMatcher: regexp.MustCompile(`^(/v1/variants)$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variants/search", PathMatcher: regexp.MustCompile(`^(/v1/variants/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variants:import", PathMatcher: regexp.MustCompile(`^(/v1/variants:import)$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.import"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variants:merge", PathMatcher: regexp.MustCompile(`^(/v1/variants:merge)$`), ServiceName: "google.genomics", ResourceName: "genomics.variants.merge"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variantsets", PathMatcher: regexp.MustCompile(`^(/v1/variantsets)$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variantsets/search", PathMatcher: regexp.MustCompile(`^(/v1/variantsets/search)$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.search"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/variantsets/{variantSetId}:export", PathMatcher: regexp.MustCompile(`^(/v1/variantsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:export)$`), ServiceName: "google.genomics", ResourceName: "genomics.variantsets.export"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha2/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1alpha2/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.genomics", ResourceName: "genomics.operations.cancel"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha2/pipelines", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.create"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha2/pipelines:run", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines:run)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.run"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2alpha1/pipelines:run", PathMatcher: regexp.MustCompile(`^(/v2alpha1/pipelines:run)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.run"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2alpha1/projects/{projectsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v2alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.genomics", ResourceName: "genomics.projects.operations.cancel"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2alpha1/workers/{id}:checkIn", PathMatcher: regexp.MustCompile(`^(/v2alpha1/workers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:checkIn)$`), ServiceName: "google.genomics", ResourceName: "genomics.workers.checkIn"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/v1/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotations.update"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/annotationsets/{annotationSetId}", PathMatcher: regexp.MustCompile(`^(/v1/annotationsets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.genomics", ResourceName: "genomics.annotationsets.update"}, - {Hostname: "genomics.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1alpha2/pipelines:setOperationStatus", PathMatcher: regexp.MustCompile(`^(/v1alpha2/pipelines:setOperationStatus)$`), ServiceName: "google.genomics", ResourceName: "genomics.pipelines.setOperationStatus"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/organizations/{organizationsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.delete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.delete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.delete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys/{keysId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.keys.delete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/organizations/{organizationsId}/roles", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.list"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/organizations/{organizationsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.get"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/roles", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.list"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.get"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.list"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.get"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keys)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.keys.list"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys/{keysId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.keys.get"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/roles", PathMatcher: regexp.MustCompile(`^(/v1/roles)$`), ServiceName: "google.iam", ResourceName: "iam.roles.list"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.roles.get"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/organizations/{organizationsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.patch"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/roles/{rolesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.patch"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/iamPolicies:queryAuditableServices", PathMatcher: regexp.MustCompile(`^(/v1/iamPolicies:queryAuditableServices)$`), ServiceName: "google.iam", ResourceName: "iam.iamPolicies.queryAuditableServices"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}/roles", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.create"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/organizations/{organizationsId}/roles/{rolesId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.iam", ResourceName: "iam.organizations.roles.undelete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/permissions:queryTestablePermissions", PathMatcher: regexp.MustCompile(`^(/v1/permissions:queryTestablePermissions)$`), ServiceName: "google.iam", ResourceName: "iam.permissions.queryTestablePermissions"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/roles", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.create"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/roles/{rolesId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.iam", ResourceName: "iam.projects.roles.undelete"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.create"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/keys)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.keys.create"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.getIamPolicy"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.setIamPolicy"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signBlob", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:signBlob)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.signBlob"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signJwt", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:signJwt)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.signJwt"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.testIamPermissions"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/roles:queryGrantableRoles", PathMatcher: regexp.MustCompile(`^(/v1/roles:queryGrantableRoles)$`), ServiceName: "google.iam", ResourceName: "iam.roles.queryGrantableRoles"}, - {Hostname: "iam.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.iam", ResourceName: "iam.projects.serviceAccounts.update"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/companies/{companiesId}", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.delete"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/jobs/{jobsId}", PathMatcher: regexp.MustCompile(`^(/v2/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.delete"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/companies", PathMatcher: regexp.MustCompile(`^(/v2/companies)$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.list"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/companies/{companiesId}", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.get"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/companies/{companiesId}/jobs", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.jobs.list"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/jobs", PathMatcher: regexp.MustCompile(`^(/v2/jobs)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.list"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/jobs/{jobsId}", PathMatcher: regexp.MustCompile(`^(/v2/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.get"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2:complete", PathMatcher: regexp.MustCompile(`^(/v2:complete)$`), ServiceName: "google.jobs", ResourceName: "jobs.complete"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/companies/{companiesId}", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.patch"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/jobs/{jobsId}", PathMatcher: regexp.MustCompile(`^(/v2/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.patch"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/companies", PathMatcher: regexp.MustCompile(`^(/v2/companies)$`), ServiceName: "google.jobs", ResourceName: "jobs.companies.create"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs", PathMatcher: regexp.MustCompile(`^(/v2/jobs)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.create"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs:batchDelete", PathMatcher: regexp.MustCompile(`^(/v2/jobs:batchDelete)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.batchDelete"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs:deleteByFilter", PathMatcher: regexp.MustCompile(`^(/v2/jobs:deleteByFilter)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.deleteByFilter"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs:histogram", PathMatcher: regexp.MustCompile(`^(/v2/jobs:histogram)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.histogram"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs:search", PathMatcher: regexp.MustCompile(`^(/v2/jobs:search)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.search"}, - {Hostname: "jobs.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/jobs:searchForAlert", PathMatcher: regexp.MustCompile(`^(/v2/jobs:searchForAlert)$`), ServiceName: "google.jobs", ResourceName: "jobs.jobs.searchForAlert"}, - {Hostname: "kgsearch.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/entities:search", PathMatcher: regexp.MustCompile(`^(/v1/entities:search)$`), ServiceName: "google.kgsearch", ResourceName: "kgsearch.entities.search"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:analyzeEntities", PathMatcher: regexp.MustCompile(`^(/v1/documents:analyzeEntities)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeEntities"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:analyzeEntitySentiment", PathMatcher: regexp.MustCompile(`^(/v1/documents:analyzeEntitySentiment)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeEntitySentiment"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:analyzeSentiment", PathMatcher: regexp.MustCompile(`^(/v1/documents:analyzeSentiment)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSentiment"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:analyzeSyntax", PathMatcher: regexp.MustCompile(`^(/v1/documents:analyzeSyntax)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSyntax"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:annotateText", PathMatcher: regexp.MustCompile(`^(/v1/documents:annotateText)$`), ServiceName: "google.language", ResourceName: "language.documents.annotateText"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/documents:classifyText", PathMatcher: regexp.MustCompile(`^(/v1/documents:classifyText)$`), ServiceName: "google.language", ResourceName: "language.documents.classifyText"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/documents:analyzeEntities", PathMatcher: regexp.MustCompile(`^(/v1beta1/documents:analyzeEntities)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeEntities"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/documents:analyzeSentiment", PathMatcher: regexp.MustCompile(`^(/v1beta1/documents:analyzeSentiment)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSentiment"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/documents:analyzeSyntax", PathMatcher: regexp.MustCompile(`^(/v1beta1/documents:analyzeSyntax)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSyntax"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/documents:annotateText", PathMatcher: regexp.MustCompile(`^(/v1beta1/documents:annotateText)$`), ServiceName: "google.language", ResourceName: "language.documents.annotateText"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:analyzeEntities", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:analyzeEntities)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeEntities"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:analyzeEntitySentiment", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:analyzeEntitySentiment)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeEntitySentiment"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:analyzeSentiment", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:analyzeSentiment)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSentiment"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:analyzeSyntax", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:analyzeSyntax)$`), ServiceName: "google.language", ResourceName: "language.documents.analyzeSyntax"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:annotateText", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:annotateText)$`), ServiceName: "google.language", ResourceName: "language.documents.annotateText"}, - {Hostname: "language.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/documents:classifyText", PathMatcher: regexp.MustCompile(`^(/v1beta2/documents:classifyText)$`), ServiceName: "google.language", ResourceName: "language.documents.classifyText"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.exclusions.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/folders/{foldersId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.exclusions.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/folders/{foldersId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/folders/{foldersId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/organizations/{organizationsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.exclusions.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/organizations/{organizationsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/organizations/{organizationsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.exclusions.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.exclusions.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/{v2Id}/{v2Id1}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/{v2Id}/{v2Id1}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/billingAccounts/{billingAccountsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/organizations/{organizationsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/logs/{logsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2beta1/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.delete"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logServices", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/indexes", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/indexes)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.indexes.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logs", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.exclusions.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.exclusions.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.folders.exclusions.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.exclusions.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}/logs", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.folders.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/folders/{foldersId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/monitoredResourceDescriptors", PathMatcher: regexp.MustCompile(`^(/v2/monitoredResourceDescriptors)$`), ServiceName: "google.logging", ResourceName: "logging.monitoredResourceDescriptors.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.exclusions.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.exclusions.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/organizations/{organizationsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.projects.exclusions.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.exclusions.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/metrics", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/{v2Id}/{v2Id1}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.exclusions.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.exclusions.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/{v2Id}/{v2Id1}/logs", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/{v2Id}/{v2Id1}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/{v2Id}/{v2Id1}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/billingAccounts/{billingAccountsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2beta1/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/monitoredResourceDescriptors", PathMatcher: regexp.MustCompile(`^(/v2beta1/monitoredResourceDescriptors)$`), ServiceName: "google.logging", ResourceName: "logging.monitoredResourceDescriptors.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/organizations/{organizationsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2beta1/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/logs", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/metrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2beta1/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.get"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.exclusions.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/folders/{foldersId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.exclusions.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/folders/{foldersId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/organizations/{organizationsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.exclusions.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/organizations/{organizationsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.exclusions.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.exclusions.patch"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/entries:write", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entries:write)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.entries.write"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.exclusions.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/entries:list", PathMatcher: regexp.MustCompile(`^(/v2/entries:list)$`), ServiceName: "google.logging", ResourceName: "logging.entries.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/entries:write", PathMatcher: regexp.MustCompile(`^(/v2/entries:write)$`), ServiceName: "google.logging", ResourceName: "logging.entries.write"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.folders.exclusions.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/folders/{foldersId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/organizations/{organizationsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.exclusions.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/organizations/{organizationsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.projects.exclusions.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/metrics", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/{v2Id}/{v2Id1}/exclusions", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/exclusions)$`), ServiceName: "google.logging", ResourceName: "logging.exclusions.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/{v2Id}/{v2Id1}/sinks", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/entries:list", PathMatcher: regexp.MustCompile(`^(/v2beta1/entries:list)$`), ServiceName: "google.logging", ResourceName: "logging.entries.list"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/entries:write", PathMatcher: regexp.MustCompile(`^(/v2beta1/entries:write)$`), ServiceName: "google.logging", ResourceName: "logging.entries.write"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/metrics", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2beta1/projects/{projectsId}/sinks", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks)$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.create"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logServices.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/logs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.logs.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/billingAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.billingAccounts.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/folders/{foldersId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.folders.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/organizations/{organizationsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/organizations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.organizations.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/{v2Id}/{v2Id1}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.sinks.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2beta1/projects/{projectsId}/metrics/{metricsId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.metrics.update"}, - {Hostname: "logging.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2beta1/projects/{projectsId}/sinks/{sinksId}", PathMatcher: regexp.MustCompile(`^(/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.logging", ResourceName: "logging.projects.sinks.update"}, - {Hostname: "manufacturers.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/accounts/{accountsId}/products/{productsId}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.manufacturers", ResourceName: "manufacturers.accounts.products.delete"}, - {Hostname: "manufacturers.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountsId}/products", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products)$`), ServiceName: "google.manufacturers", ResourceName: "manufacturers.accounts.products.list"}, - {Hostname: "manufacturers.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountsId}/products/{productsId}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.manufacturers", ResourceName: "manufacturers.accounts.products.get"}, - {Hostname: "manufacturers.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/accounts/{accountsId}/products/{productsId}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.manufacturers", ResourceName: "manufacturers.accounts.products.update"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.delete"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.delete"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.operations.delete"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/jobs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.list"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/jobs/{jobsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.get"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/jobs/{jobsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.getIamPolicy"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.ml", ResourceName: "ml.projects.locations.list"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.locations.get"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/models", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.list"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.get"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.list"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.get"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.getIamPolicy"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.ml", ResourceName: "ml.projects.operations.list"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.operations.get"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}:getConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getConfig)$`), ServiceName: "google.ml", ResourceName: "ml.projects.getConfig"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.patch"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.patch"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/jobs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.create"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/jobs/{jobsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.cancel"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/jobs/{jobsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.setIamPolicy"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/jobs/{jobsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.ml", ResourceName: "ml.projects.jobs.testIamPermissions"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/models", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.create"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.create"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}:setDefault", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setDefault)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.versions.setDefault"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.setIamPolicy"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/models/{modelsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/models/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.ml", ResourceName: "ml.projects.models.testIamPermissions"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.ml", ResourceName: "ml.projects.operations.cancel"}, - {Hostname: "ml.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}:predict", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:predict)$`), ServiceName: "google.ml", ResourceName: "ml.projects.predict"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v3/projects/{projectsId}/alertPolicies/{alertPoliciesId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alertPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.alertPolicies.delete"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v3/projects/{projectsId}/groups/{groupsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.delete"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.metricDescriptors.delete"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.delete"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v3/projects/{projectsId}/uptimeCheckConfigs/{uptimeCheckConfigsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uptimeCheckConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.uptimeCheckConfigs.delete"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/alertPolicies", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alertPolicies)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.alertPolicies.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/alertPolicies/{alertPoliciesId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alertPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.alertPolicies.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/groups", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/groups/{groupsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/groups/{groupsId}/members", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.members.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/metricDescriptors", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.metricDescriptors.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.metricDescriptors.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/monitoredResourceDescriptors", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/monitoredResourceDescriptors)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.monitoredResourceDescriptors.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/monitoredResourceDescriptors/{monitoredResourceDescriptorsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/monitoredResourceDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.monitoredResourceDescriptors.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/notificationChannelDescriptors", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannelDescriptors)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannelDescriptors.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/notificationChannelDescriptors/{notificationChannelDescriptorsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannelDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannelDescriptors.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/notificationChannels", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/timeSeries", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/timeSeries)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.timeSeries.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/uptimeCheckConfigs", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uptimeCheckConfigs)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.uptimeCheckConfigs.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/projects/{projectsId}/uptimeCheckConfigs/{uptimeCheckConfigsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uptimeCheckConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.uptimeCheckConfigs.get"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v3/uptimeCheckIps", PathMatcher: regexp.MustCompile(`^(/v3/uptimeCheckIps)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.uptimeCheckIps.list"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v3/projects/{projectsId}/alertPolicies/{alertPoliciesId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alertPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.alertPolicies.patch"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.patch"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v3/projects/{projectsId}/uptimeCheckConfigs/{uptimeCheckConfigsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uptimeCheckConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.uptimeCheckConfigs.patch"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/alertPolicies", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alertPolicies)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.alertPolicies.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/collectdTimeSeries", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/collectdTimeSeries)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.collectdTimeSeries.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/groups", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/metricDescriptors", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.metricDescriptors.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/notificationChannels", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}:getVerificationCode", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getVerificationCode)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.getVerificationCode"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}:sendVerificationCode", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:sendVerificationCode)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.sendVerificationCode"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/notificationChannels/{notificationChannelsId}:verify", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationChannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:verify)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.notificationChannels.verify"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/timeSeries", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/timeSeries)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.timeSeries.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v3/projects/{projectsId}/uptimeCheckConfigs", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uptimeCheckConfigs)$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.uptimeCheckConfigs.create"}, - {Hostname: "monitoring.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v3/projects/{projectsId}/groups/{groupsId}", PathMatcher: regexp.MustCompile(`^(/v3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.monitoring", ResourceName: "monitoring.projects.groups.update"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/users/{usersId}/projects/{projectsId}", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.projects.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha/users/{usersId}/projects/{projectsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.projects.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/users/{usersId}/projects/{projectsId}", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.projects.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.delete"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/users/{usersId}/loginProfile", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/loginProfile)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.getLoginProfile"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.get"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/users/{usersId}/loginProfile", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/loginProfile)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.getLoginProfile"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.get"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/users/{usersId}/loginProfile", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/loginProfile)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.getLoginProfile"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.get"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.patch"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.patch"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta/users/{usersId}/sshPublicKeys/{sshPublicKeysId}", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sshPublicKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.sshPublicKeys.patch"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/users/{usersId}:importSshPublicKey", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:importSshPublicKey)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.importSshPublicKey"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/users/{usersId}:importSshPublicKey", PathMatcher: regexp.MustCompile(`^(/v1alpha/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:importSshPublicKey)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.importSshPublicKey"}, - {Hostname: "oslogin.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta/users/{usersId}:importSshPublicKey", PathMatcher: regexp.MustCompile(`^(/v1beta/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:importSshPublicKey)$`), ServiceName: "google.oslogin", ResourceName: "oslogin.users.importSshPublicKey"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/users/{userId}/companyRelation", PathMatcher: regexp.MustCompile(`^(/v2/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/companyRelation)$`), ServiceName: "google.partners", ResourceName: "partners.users.deleteCompanyRelation"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/analytics", PathMatcher: regexp.MustCompile(`^(/v2/analytics)$`), ServiceName: "google.partners", ResourceName: "partners.analytics.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/companies", PathMatcher: regexp.MustCompile(`^(/v2/companies)$`), ServiceName: "google.partners", ResourceName: "partners.companies.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/companies/{companyId}", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.partners", ResourceName: "partners.companies.get"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/leads", PathMatcher: regexp.MustCompile(`^(/v2/leads)$`), ServiceName: "google.partners", ResourceName: "partners.leads.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/offers", PathMatcher: regexp.MustCompile(`^(/v2/offers)$`), ServiceName: "google.partners", ResourceName: "partners.offers.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/offers/history", PathMatcher: regexp.MustCompile(`^(/v2/offers/history)$`), ServiceName: "google.partners", ResourceName: "partners.offers.history.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/partnersstatus", PathMatcher: regexp.MustCompile(`^(/v2/partnersstatus)$`), ServiceName: "google.partners", ResourceName: "partners.getPartnersstatus"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/userStates", PathMatcher: regexp.MustCompile(`^(/v2/userStates)$`), ServiceName: "google.partners", ResourceName: "partners.userStates.list"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/users/{userId}", PathMatcher: regexp.MustCompile(`^(/v2/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.partners", ResourceName: "partners.users.get"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/companies", PathMatcher: regexp.MustCompile(`^(/v2/companies)$`), ServiceName: "google.partners", ResourceName: "partners.updateCompanies"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/leads", PathMatcher: regexp.MustCompile(`^(/v2/leads)$`), ServiceName: "google.partners", ResourceName: "partners.updateLeads"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v2/users/profile", PathMatcher: regexp.MustCompile(`^(/v2/users/profile)$`), ServiceName: "google.partners", ResourceName: "partners.users.updateProfile"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/clientMessages:log", PathMatcher: regexp.MustCompile(`^(/v2/clientMessages:log)$`), ServiceName: "google.partners", ResourceName: "partners.clientMessages.log"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/companies/{companyId}/leads", PathMatcher: regexp.MustCompile(`^(/v2/companies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leads)$`), ServiceName: "google.partners", ResourceName: "partners.companies.leads.create"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/userEvents:log", PathMatcher: regexp.MustCompile(`^(/v2/userEvents:log)$`), ServiceName: "google.partners", ResourceName: "partners.userEvents.log"}, - {Hostname: "partners.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/users/{userId}/companyRelation", PathMatcher: regexp.MustCompile(`^(/v2/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/companyRelation)$`), ServiceName: "google.partners", ResourceName: "partners.users.createCompanyRelation"}, - {Hostname: "people.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/contactGroups/{contactGroupsId}", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.people", ResourceName: "people.contactGroups.delete"}, - {Hostname: "people.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/people/{peopleId}:deleteContact", PathMatcher: regexp.MustCompile(`^(/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:deleteContact)$`), ServiceName: "google.people", ResourceName: "people.people.deleteContact"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/contactGroups", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups)$`), ServiceName: "google.people", ResourceName: "people.contactGroups.list"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/contactGroups/{contactGroupsId}", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.people", ResourceName: "people.contactGroups.get"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/contactGroups:batchGet", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups:batchGet)$`), ServiceName: "google.people", ResourceName: "people.contactGroups.batchGet"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/people/{peopleId}", PathMatcher: regexp.MustCompile(`^(/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.people", ResourceName: "people.people.get"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/people/{peopleId}/connections", PathMatcher: regexp.MustCompile(`^(/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connections)$`), ServiceName: "google.people", ResourceName: "people.people.connections.list"}, - {Hostname: "people.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/people:batchGet", PathMatcher: regexp.MustCompile(`^(/v1/people:batchGet)$`), ServiceName: "google.people", ResourceName: "people.people.getBatchGet"}, - {Hostname: "people.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/people/{peopleId}:updateContact", PathMatcher: regexp.MustCompile(`^(/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:updateContact)$`), ServiceName: "google.people", ResourceName: "people.people.updateContact"}, - {Hostname: "people.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/contactGroups", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups)$`), ServiceName: "google.people", ResourceName: "people.contactGroups.create"}, - {Hostname: "people.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/contactGroups/{contactGroupsId}/members:modify", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members:modify)$`), ServiceName: "google.people", ResourceName: "people.contactGroups.members.modify"}, - {Hostname: "people.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/people:createContact", PathMatcher: regexp.MustCompile(`^(/v1/people:createContact)$`), ServiceName: "google.people", ResourceName: "people.people.createContact"}, - {Hostname: "people.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/contactGroups/{contactGroupsId}", PathMatcher: regexp.MustCompile(`^(/v1/contactGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.people", ResourceName: "people.contactGroups.update"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/albums", PathMatcher: regexp.MustCompile(`^(/v1/albums)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.albums.list"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/albums/{albumsId}", PathMatcher: regexp.MustCompile(`^(/v1/albums/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.albums.get"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/mediaItems/{mediaItemsId}", PathMatcher: regexp.MustCompile(`^(/v1/mediaItems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.mediaItems.get"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/sharedAlbums", PathMatcher: regexp.MustCompile(`^(/v1/sharedAlbums)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.sharedAlbums.list"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/albums", PathMatcher: regexp.MustCompile(`^(/v1/albums)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.albums.create"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/albums/{albumsId}:addEnrichment", PathMatcher: regexp.MustCompile(`^(/v1/albums/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:addEnrichment)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.albums.addEnrichment"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/albums/{albumsId}:share", PathMatcher: regexp.MustCompile(`^(/v1/albums/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:share)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.albums.share"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/mediaItems:batchCreate", PathMatcher: regexp.MustCompile(`^(/v1/mediaItems:batchCreate)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.mediaItems.batchCreate"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/mediaItems:search", PathMatcher: regexp.MustCompile(`^(/v1/mediaItems:search)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.mediaItems.search"}, - {Hostname: "photoslibrary.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/sharedAlbums:join", PathMatcher: regexp.MustCompile(`^(/v1/sharedAlbums:join)$`), ServiceName: "google.photoslibrary", ResourceName: "photoslibrary.sharedAlbums.join"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/avails", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/avails)$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.avails.list"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/avails/{availId}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/avails/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.avails.get"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/orders", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.orders.list"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/orders/{orderId}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.orders.get"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/storeInfos", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeInfos)$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.storeInfos.list"}, - {Hostname: "playmoviespartner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/accounts/{accountId}/storeInfos/{videoId}/country/{country}", PathMatcher: regexp.MustCompile(`^(/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeInfos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/country/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.playmoviespartner", ResourceName: "playmoviespartner.accounts.storeInfos.country.get"}, - {Hostname: "poly.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/assets", PathMatcher: regexp.MustCompile(`^(/v1/assets)$`), ServiceName: "google.poly", ResourceName: "poly.assets.list"}, - {Hostname: "poly.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/assets/{assetsId}", PathMatcher: regexp.MustCompile(`^(/v1/assets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.poly", ResourceName: "poly.assets.get"}, - {Hostname: "poly.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/users/{usersId}/assets", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/assets)$`), ServiceName: "google.poly", ResourceName: "poly.users.assets.list"}, - {Hostname: "poly.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/users/{usersId}/likedassets", PathMatcher: regexp.MustCompile(`^(/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/likedassets)$`), ServiceName: "google.poly", ResourceName: "poly.users.likedassets.list"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/beacons/{beaconsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.delete"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/beacons/{beaconsId}/attachments/{attachmentsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.attachments.delete"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/beacons", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.list"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/beacons/{beaconsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.get"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/beacons/{beaconsId}/attachments", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.attachments.list"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/beacons/{beaconsId}/diagnostics", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diagnostics)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.diagnostics.list"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/eidparams", PathMatcher: regexp.MustCompile(`^(/v1beta1/eidparams)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.getEidparams"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/namespaces", PathMatcher: regexp.MustCompile(`^(/v1beta1/namespaces)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.namespaces.list"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beaconinfo:getforobserved", PathMatcher: regexp.MustCompile(`^(/v1beta1/beaconinfo:getforobserved)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beaconinfo.getforobserved"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons/{beaconsId}/attachments", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.attachments.create"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons/{beaconsId}/attachments:batchDelete", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments:batchDelete)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.attachments.batchDelete"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons/{beaconsId}:activate", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:activate)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.activate"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons/{beaconsId}:deactivate", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:deactivate)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.deactivate"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons/{beaconsId}:decommission", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:decommission)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.decommission"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/beacons:register", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons:register)$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.register"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/beacons/{beaconsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/beacons/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.beacons.update"}, - {Hostname: "proximitybeacon.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/namespaces/{namespacesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/namespaces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.proximitybeacon", ResourceName: "proximitybeacon.namespaces.update"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1a/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1a/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.delete"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/snapshots", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.getIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.getIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/topics", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}/snapshots", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.snapshots.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.subscriptions.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.getIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1a/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1a/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1a/topics", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1a/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.getIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/topics", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.get"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.subscriptions.list"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.getIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.patch"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.patch"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.setIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.testIamPermissions"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:acknowledge)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.acknowledge"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyAckDeadline)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.modifyAckDeadline"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyPushConfig", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyPushConfig)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.modifyPushConfig"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:pull", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:pull)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.pull"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:seek", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:seek)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.seek"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.setIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.testIamPermissions"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}:publish", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:publish)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.publish"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.setIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.testIamPermissions"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions/acknowledge", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/acknowledge)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.acknowledge"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions/modifyAckDeadline", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/modifyAckDeadline)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.modifyAckDeadline"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions/modifyPushConfig", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/modifyPushConfig)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.modifyPushConfig"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions/pull", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/pull)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.pull"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/subscriptions/pullBatch", PathMatcher: regexp.MustCompile(`^(/v1beta1a/subscriptions/pullBatch)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.subscriptions.pullBatch"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/topics", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/topics/publish", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics/publish)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.publish"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1a/topics/publishBatch", PathMatcher: regexp.MustCompile(`^(/v1beta1a/topics/publishBatch)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.topics.publishBatch"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:acknowledge)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.acknowledge"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyAckDeadline)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.modifyAckDeadline"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyPushConfig", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:modifyPushConfig)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.modifyPushConfig"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:pull", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:pull)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.pull"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.setIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.testIamPermissions"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}:publish", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:publish)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.publish"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.setIamPolicy"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.testIamPermissions"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/snapshots/{snapshotsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.snapshots.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.subscriptions.create"}, - {Hostname: "pubsub.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta2/projects/{projectsId}/topics/{topicsId}", PathMatcher: regexp.MustCompile(`^(/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/topics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.pubsub", ResourceName: "pubsub.projects.topics.create"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.instances.delete"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.list"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.get"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.instances.list"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.instances.get"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.operations.list"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.operations.get"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.instances.patch"}, - {Hostname: "redis.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/locations/{locationsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.redis", ResourceName: "redis.projects.locations.instances.create"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.operations.delete"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.delete"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.delete"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/waiters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.waiters.delete"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.operations.list"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.list"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.get"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.operations.get"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.list"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.get"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/waiters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/waiters)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.waiters.list"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/waiters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.waiters.get"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.getIamPolicy"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.operations.cancel"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.create"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.operations.testIamPermissions"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.create"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.testIamPermissions"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}:watch", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:watch)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.watch"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/waiters", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/waiters)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.waiters.create"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/waiters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.waiters.testIamPermissions"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.setIamPolicy"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.testIamPermissions"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.update"}, - {Hostname: "runtimeconfig.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.runtimeconfig", ResourceName: "runtimeconfig.projects.configs.variables.update"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/encodedFullHashes/{encodedRequest}", PathMatcher: regexp.MustCompile(`^(/v4/encodedFullHashes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.encodedFullHashes.get"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/encodedUpdates/{encodedRequest}", PathMatcher: regexp.MustCompile(`^(/v4/encodedUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.encodedUpdates.get"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/threatLists", PathMatcher: regexp.MustCompile(`^(/v4/threatLists)$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.threatLists.list"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/fullHashes:find", PathMatcher: regexp.MustCompile(`^(/v4/fullHashes:find)$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.fullHashes.find"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/threatHits", PathMatcher: regexp.MustCompile(`^(/v4/threatHits)$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.threatHits.create"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/threatListUpdates:fetch", PathMatcher: regexp.MustCompile(`^(/v4/threatListUpdates:fetch)$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.threatListUpdates.fetch"}, - {Hostname: "safebrowsing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/threatMatches:find", PathMatcher: regexp.MustCompile(`^(/v4/threatMatches:find)$`), ServiceName: "google.safebrowsing", ResourceName: "safebrowsing.threatMatches.find"}, - {Hostname: "script.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{scriptId}/deployments/{deploymentId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.script", ResourceName: "script.projects.deployments.delete"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/processes", PathMatcher: regexp.MustCompile(`^(/v1/processes)$`), ServiceName: "google.script", ResourceName: "script.processes.list"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/processes:listScriptProcesses", PathMatcher: regexp.MustCompile(`^(/v1/processes:listScriptProcesses)$`), ServiceName: "google.script", ResourceName: "script.processes.listScriptProcesses"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.script", ResourceName: "script.projects.get"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/content", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content)$`), ServiceName: "google.script", ResourceName: "script.projects.getContent"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/deployments", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deployments)$`), ServiceName: "google.script", ResourceName: "script.projects.deployments.list"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/deployments/{deploymentId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.script", ResourceName: "script.projects.deployments.get"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/metrics", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metrics)$`), ServiceName: "google.script", ResourceName: "script.projects.getMetrics"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.script", ResourceName: "script.projects.versions.list"}, - {Hostname: "script.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{scriptId}/versions/{versionNumber}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.script", ResourceName: "script.projects.versions.get"}, - {Hostname: "script.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects", PathMatcher: regexp.MustCompile(`^(/v1/projects)$`), ServiceName: "google.script", ResourceName: "script.projects.create"}, - {Hostname: "script.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{scriptId}/deployments", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deployments)$`), ServiceName: "google.script", ResourceName: "script.projects.deployments.create"}, - {Hostname: "script.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{scriptId}/versions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.script", ResourceName: "script.projects.versions.create"}, - {Hostname: "script.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/scripts/{scriptId}:run", PathMatcher: regexp.MustCompile(`^(/v1/scripts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:run)$`), ServiceName: "google.script", ResourceName: "script.scripts.run"}, - {Hostname: "script.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{scriptId}/content", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/content)$`), ServiceName: "google.script", ResourceName: "script.projects.updateContent"}, - {Hostname: "script.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/projects/{scriptId}/deployments/{deploymentId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.script", ResourceName: "script.projects.deployments.update"}, - {Hostname: "searchconsole.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/urlTestingTools/mobileFriendlyTest:run", PathMatcher: regexp.MustCompile(`^(/v1/urlTestingTools/mobileFriendlyTest:run)$`), ServiceName: "google.searchconsole", ResourceName: "searchconsole.urlTestingTools.mobileFriendlyTest.run"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{instanceId}/service_bindings/{bindingId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.delete"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.delete"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.delete"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.delete"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.delete"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/{v1Id}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.getIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}/service_bindings", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.service_bindings.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/service_instances", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_instances)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.service_instances.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/catalog", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/catalog)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.catalog.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/{v1alpha1Id}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1alpha1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.getIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/instances", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}/bindings", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bindings)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.bindings.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}/bindings/{bindingsId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.bindings.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/instances/{instancesId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.instances.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/catalog", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/catalog)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.catalog.list"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.get"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}/last_operation", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/last_operation)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.getLast_operation"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/{v1beta1Id}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.getIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.patch"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.patch"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/{v1Id}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.setIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/{v1Id}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.testIamPermissions"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/{v1alpha1Id}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1alpha1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.setIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/{v1alpha1Id}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1alpha1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.testIamPermissions"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/projects/{projectsId}/brokers", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.create"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/{v1beta1Id}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.setIamPolicy"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/{v1beta1Id}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.testIamPermissions"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.create"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1alpha1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.create"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.create"}, - {Hostname: "servicebroker.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1beta1/projects/{projectsId}/brokers/{brokersId}/v2/service_instances/{service_instancesId}/service_bindings/{service_bindingsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/brokers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/v2/service_instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/service_bindings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicebroker", ResourceName: "servicebroker.projects.brokers.v2.service_instances.service_bindings.create"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.operations.delete"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tenancyUnits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.tenancyUnits.delete"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.operations.list"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.operations.get"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tenancyUnits)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.tenancyUnits.list"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{servicesId}:search", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:search)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.search"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.operations.cancel"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tenancyUnits)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.tenancyUnits.create"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:addProject", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tenancyUnits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:addProject)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.tenancyUnits.addProject"}, - {Hostname: "serviceconsumermanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:removeProject", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tenancyUnits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:removeProject)$`), ServiceName: "google.serviceconsumermanagement", ResourceName: "serviceconsumermanagement.services.tenancyUnits.removeProject"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:allocateQuota", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:allocateQuota)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.allocateQuota"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:check", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:check)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.check"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:endReconciliation", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:endReconciliation)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.endReconciliation"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:releaseQuota", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:releaseQuota)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.releaseQuota"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:report", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:report)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.report"}, - {Hostname: "servicecontrol.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:startReconciliation", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:startReconciliation)$`), ServiceName: "google.servicecontrol", ResourceName: "servicecontrol.services.startReconciliation"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/services/{serviceName}", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.delete"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.operations.list"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.operations.get"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services", PathMatcher: regexp.MustCompile(`^(/v1/services)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.list"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.get"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}/config", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/config)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.getConfig"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}/configs", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.configs.list"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}/configs/{configId}", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.configs.get"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}/rollouts", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollouts)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.rollouts.list"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services/{serviceName}/rollouts/{rolloutId}", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollouts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.rollouts.get"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services", PathMatcher: regexp.MustCompile(`^(/v1/services)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.create"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}/configs", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.configs.create"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}/configs:submit", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/configs:submit)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.configs.submit"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}/rollouts", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollouts)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.rollouts.create"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:disable", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:disable)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.disable"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:enable", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:enable)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.enable"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{serviceName}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.undelete"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/consumers/{consumersId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/consumers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.consumers.getIamPolicy"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/consumers/{consumersId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/consumers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.consumers.setIamPolicy"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}/consumers/{consumersId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/consumers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.consumers.testIamPermissions"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.getIamPolicy"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.setIamPolicy"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services/{servicesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.testIamPermissions"}, - {Hostname: "servicemanagement.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/services:generateConfigReport", PathMatcher: regexp.MustCompile(`^(/v1/services:generateConfigReport)$`), ServiceName: "google.servicemanagement", ResourceName: "servicemanagement.services.generateConfigReport"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.delete"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.list"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.get"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services:search", PathMatcher: regexp.MustCompile(`^(/v1/services:search)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.search"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/{v1Id}/{v1Id1}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.get"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/{v1Id}/{v1Id1}/services:enabled", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services:enabled)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.listEnabled"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/operations", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.list"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.get"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/{v1beta1Id}/{v1beta1Id1}/services", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.list"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/{v1beta1Id}/{v1beta1Id1}/services/{servicesId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.get"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.operations.cancel"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/{v1Id}/{v1Id1}/services/{servicesId}:disable", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:disable)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.disable"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/{v1Id}/{v1Id1}/services/{servicesId}:enable", PathMatcher: regexp.MustCompile(`^(/v1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:enable)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.enable"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/{v1beta1Id}/{v1beta1Id1}/services/{servicesId}:disable", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:disable)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.disable"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/{v1beta1Id}/{v1beta1Id1}/services/{servicesId}:enable", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:enable)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.enable"}, - {Hostname: "serviceusage.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/{v1beta1Id}/{v1beta1Id1}/services:batchEnable", PathMatcher: regexp.MustCompile(`^(/v1beta1/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services:batchEnable)$`), ServiceName: "google.serviceusage", ResourceName: "serviceusage.services.batchEnable"}, - {Hostname: "serviceuser.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/services", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services)$`), ServiceName: "google.serviceuser", ResourceName: "serviceuser.projects.services.list"}, - {Hostname: "serviceuser.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/services:search", PathMatcher: regexp.MustCompile(`^(/v1/services:search)$`), ServiceName: "google.serviceuser", ResourceName: "serviceuser.services.search"}, - {Hostname: "serviceuser.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/services/{servicesId}:disable", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:disable)$`), ServiceName: "google.serviceuser", ResourceName: "serviceuser.projects.services.disable"}, - {Hostname: "serviceuser.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/services/{servicesId}:enable", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/services/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:enable)$`), ServiceName: "google.serviceuser", ResourceName: "serviceuser.projects.services.enable"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/spreadsheets/{spreadsheetId}", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.get"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/developerMetadata/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.developerMetadata.get"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values/{range}", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.get"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchGet", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchGet)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchGet"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.create"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/developerMetadata:search", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/developerMetadata:search)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.developerMetadata.search"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:copyTo)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.sheets.copyTo"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values/{range}:append", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:append)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.append"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values/{range}:clear", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:clear)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.clear"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchClear", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchClear)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchClear"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchClearByDataFilter)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchClearByDataFilter"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchGetByDataFilter)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchGetByDataFilter"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchUpdate)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchUpdate"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values:batchUpdateByDataFilter)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.batchUpdateByDataFilter"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:batchUpdate)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.batchUpdate"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v4/spreadsheets/{spreadsheetId}:getByDataFilter", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getByDataFilter)$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.getByDataFilter"}, - {Hostname: "sheets.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v4/spreadsheets/{spreadsheetId}/values/{range}", PathMatcher: regexp.MustCompile(`^(/v4/spreadsheets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/values/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sheets", ResourceName: "sheets.spreadsheets.values.update"}, - {Hostname: "slides.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/presentations/{presentationId}/pages/{pageObjectId}", PathMatcher: regexp.MustCompile(`^(/v1/presentations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.slides", ResourceName: "slides.presentations.pages.get"}, - {Hostname: "slides.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail", PathMatcher: regexp.MustCompile(`^(/v1/presentations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/thumbnail)$`), ServiceName: "google.slides", ResourceName: "slides.presentations.pages.getThumbnail"}, - {Hostname: "slides.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/presentations/{presentationsId}", PathMatcher: regexp.MustCompile(`^(/v1/presentations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.slides", ResourceName: "slides.presentations.get"}, - {Hostname: "slides.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/presentations", PathMatcher: regexp.MustCompile(`^(/v1/presentations)$`), ServiceName: "google.slides", ResourceName: "slides.presentations.create"}, - {Hostname: "slides.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/presentations/{presentationId}:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v1/presentations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:batchUpdate)$`), ServiceName: "google.slides", ResourceName: "slides.presentations.batchUpdate"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.delete"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/config", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/config)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.getConfig"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/repos", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.list"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.get"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.getIamPolicy"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/config", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/config)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.updateConfig"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.patch"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/repos", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.create"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.setIamPolicy"}, - {Hostname: "sourcerepo.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/repos/{reposId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/repos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.sourcerepo", ResourceName: "sourcerepo.projects.repos.testIamPermissions"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.delete"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.dropDatabase"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.operations.delete"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.delete"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.operations.delete"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instanceConfigs", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceConfigs)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instanceConfigs.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instanceConfigs/{instanceConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instanceConfigs.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ddl)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.getDdl"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.operations.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.operations.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.operations.list"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.operations.get"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.patch"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ddl)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.updateDdl"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.create"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.create"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.operations.cancel"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.create"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:beginTransaction", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:beginTransaction)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.beginTransaction"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:commit", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:commit)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.commit"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeSql", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:executeSql)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.executeSql"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeStreamingSql", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:executeStreamingSql)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.executeStreamingSql"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:partitionQuery", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:partitionQuery)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.partitionQuery"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:partitionRead", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:partitionRead)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.partitionRead"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:read", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:read)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.read"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:rollback", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:rollback)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.rollback"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:streamingRead", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:streamingRead)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.sessions.streamingRead"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.getIamPolicy"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.setIamPolicy"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.databases.testIamPermissions"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.operations.cancel"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}:getIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:getIamPolicy)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.getIamPolicy"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}:setIamPolicy", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:setIamPolicy)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.setIamPolicy"}, - {Hostname: "spanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/instances/{instancesId}:testIamPermissions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:testIamPermissions)$`), ServiceName: "google.spanner", ResourceName: "spanner.projects.instances.testIamPermissions"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.speech", ResourceName: "speech.operations.get"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1beta1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.speech", ResourceName: "speech.operations.get"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/speech:longrunningrecognize", PathMatcher: regexp.MustCompile(`^(/v1/speech:longrunningrecognize)$`), ServiceName: "google.speech", ResourceName: "speech.speech.longrunningrecognize"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/speech:recognize", PathMatcher: regexp.MustCompile(`^(/v1/speech:recognize)$`), ServiceName: "google.speech", ResourceName: "speech.speech.recognize"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/speech:asyncrecognize", PathMatcher: regexp.MustCompile(`^(/v1beta1/speech:asyncrecognize)$`), ServiceName: "google.speech", ResourceName: "speech.speech.asyncrecognize"}, - {Hostname: "speech.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/speech:syncrecognize", PathMatcher: regexp.MustCompile(`^(/v1beta1/speech:syncrecognize)$`), ServiceName: "google.speech", ResourceName: "speech.speech.syncrecognize"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/transferOperations/{transferOperationsId}", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.delete"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/googleServiceAccounts/{projectId}", PathMatcher: regexp.MustCompile(`^(/v1/googleServiceAccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.googleServiceAccounts.get"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/transferJobs", PathMatcher: regexp.MustCompile(`^(/v1/transferJobs)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferJobs.list"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/transferJobs/{transferJobsId}", PathMatcher: regexp.MustCompile(`^(/v1/transferJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferJobs.get"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/transferOperations", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.list"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/transferOperations/{transferOperationsId}", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.get"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1/transferJobs/{transferJobsId}", PathMatcher: regexp.MustCompile(`^(/v1/transferJobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferJobs.patch"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/transferJobs", PathMatcher: regexp.MustCompile(`^(/v1/transferJobs)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferJobs.create"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/transferOperations/{transferOperationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.cancel"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/transferOperations/{transferOperationsId}:pause", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:pause)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.pause"}, - {Hostname: "storagetransfer.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/transferOperations/{transferOperationsId}:resume", PathMatcher: regexp.MustCompile(`^(/v1/transferOperations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:resume)$`), ServiceName: "google.storagetransfer", ResourceName: "storagetransfer.transferOperations.resume"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/photo/{photoId}", PathMatcher: regexp.MustCompile(`^(/v1/photo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photo.delete"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/photo/{photoId}", PathMatcher: regexp.MustCompile(`^(/v1/photo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photo.get"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/photos", PathMatcher: regexp.MustCompile(`^(/v1/photos)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photos.list"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/photos:batchGet", PathMatcher: regexp.MustCompile(`^(/v1/photos:batchGet)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photos.batchGet"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/photo", PathMatcher: regexp.MustCompile(`^(/v1/photo)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photo.create"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/photo:startUpload", PathMatcher: regexp.MustCompile(`^(/v1/photo:startUpload)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photo.startUpload"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/photos:batchDelete", PathMatcher: regexp.MustCompile(`^(/v1/photos:batchDelete)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photos.batchDelete"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/photos:batchUpdate", PathMatcher: regexp.MustCompile(`^(/v1/photos:batchUpdate)$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photos.batchUpdate"}, - {Hostname: "streetviewpublish.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/photo/{id}", PathMatcher: regexp.MustCompile(`^(/v1/photo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.streetviewpublish", ResourceName: "streetviewpublish.photo.update"}, - {Hostname: "testing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectId}/testMatrices/{testMatrixId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testMatrices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.testing", ResourceName: "testing.projects.testMatrices.get"}, - {Hostname: "testing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/testEnvironmentCatalog/{environmentType}", PathMatcher: regexp.MustCompile(`^(/v1/testEnvironmentCatalog/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.testing", ResourceName: "testing.testEnvironmentCatalog.get"}, - {Hostname: "testing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/applicationDetailService/getApkDetails", PathMatcher: regexp.MustCompile(`^(/v1/applicationDetailService/getApkDetails)$`), ServiceName: "google.testing", ResourceName: "testing.applicationDetailService.getApkDetails"}, - {Hostname: "testing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/testMatrices", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testMatrices)$`), ServiceName: "google.testing", ResourceName: "testing.projects.testMatrices.create"}, - {Hostname: "testing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectId}/testMatrices/{testMatrixId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testMatrices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.testing", ResourceName: "testing.projects.testMatrices.cancel"}, - {Hostname: "texttospeech.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1beta1/voices", PathMatcher: regexp.MustCompile(`^(/v1beta1/voices)$`), ServiceName: "google.texttospeech", ResourceName: "texttospeech.voices.list"}, - {Hostname: "texttospeech.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/text:synthesize", PathMatcher: regexp.MustCompile(`^(/v1beta1/text:synthesize)$`), ServiceName: "google.texttospeech", ResourceName: "texttospeech.text.synthesize"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.delete"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.delete"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.delete"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.delete"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.acceleratorTypes.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/acceleratorTypes/{acceleratorTypesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.acceleratorTypes.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/tensorflowVersions", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tensorflowVersions)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.tensorflowVersions.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/tensorflowVersions/{tensorflowVersionsId}", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tensorflowVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.tensorflowVersions.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.acceleratorTypes.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/acceleratorTypes/{acceleratorTypesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.acceleratorTypes.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/operations", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/tensorflowVersions", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tensorflowVersions)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.tensorflowVersions.list"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/tensorflowVersions/{tensorflowVersionsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tensorflowVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.tensorflowVersions.get"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.create"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:reimage", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reimage)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.reimage"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:reset", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reset)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.reset"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:start", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:start)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.start"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:stop", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:stop)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.stop"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.cancel"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.create"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:reimage", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reimage)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.reimage"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:reset", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reset)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.reset"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:start", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:start)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.start"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/nodes/{nodesId}:stop", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:stop)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.nodes.stop"}, - {Hostname: "tpu.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1alpha1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.tpu", ResourceName: "tpu.projects.locations.operations.cancel"}, - {Hostname: "tracing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/traces", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces)$`), ServiceName: "google.tracing", ResourceName: "tracing.projects.traces.list"}, - {Hostname: "tracing.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/projects/{projectsId}/traces/{tracesId}:listSpans", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:listSpans)$`), ServiceName: "google.tracing", ResourceName: "tracing.projects.traces.listSpans"}, - {Hostname: "tracing.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/projects/{projectsId}/traces:batchWrite", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces:batchWrite)$`), ServiceName: "google.tracing", ResourceName: "tracing.projects.traces.batchWrite"}, - {Hostname: "tracing.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/projects/{projectsId}/traces/{tracesId}/spans/{spansId}", PathMatcher: regexp.MustCompile(`^(/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/traces/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/spans/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tracing", ResourceName: "tracing.projects.traces.spans.create"}, - {Hostname: "translation.googleapis.com", HTTPMethod: "GET", PathTemplate: "/language/translate/v2", PathMatcher: regexp.MustCompile(`^(/language/translate/v2)$`), ServiceName: "google.translate", ResourceName: "language.translations.list"}, - {Hostname: "translation.googleapis.com", HTTPMethod: "GET", PathTemplate: "/language/translate/v2/detect", PathMatcher: regexp.MustCompile(`^(/language/translate/v2/detect)$`), ServiceName: "google.translate", ResourceName: "language.detections.list"}, - {Hostname: "translation.googleapis.com", HTTPMethod: "GET", PathTemplate: "/language/translate/v2/languages", PathMatcher: regexp.MustCompile(`^(/language/translate/v2/languages)$`), ServiceName: "google.translate", ResourceName: "language.languages.list"}, - {Hostname: "translation.googleapis.com", HTTPMethod: "POST", PathTemplate: "/language/translate/v2", PathMatcher: regexp.MustCompile(`^(/language/translate/v2)$`), ServiceName: "google.translate", ResourceName: "language.translations.translate"}, - {Hostname: "translation.googleapis.com", HTTPMethod: "POST", PathTemplate: "/language/translate/v2/detect", PathMatcher: regexp.MustCompile(`^(/language/translate/v2/detect)$`), ServiceName: "google.translate", ResourceName: "language.detections.detect"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/matters/{matterId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.delete"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.delete"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.accounts.delete"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/matters", PathMatcher: regexp.MustCompile(`^(/v1/matters)$`), ServiceName: "google.vault", ResourceName: "vault.matters.list"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/matters/{matterId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.get"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/matters/{matterId}/holds", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds)$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.list"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.get"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}/accounts", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.accounts.list"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters", PathMatcher: regexp.MustCompile(`^(/v1/matters)$`), ServiceName: "google.vault", ResourceName: "vault.matters.create"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}/holds", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds)$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.create"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}/accounts", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.accounts.create"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}:addPermissions", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:addPermissions)$`), ServiceName: "google.vault", ResourceName: "vault.matters.addPermissions"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}:close", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:close)$`), ServiceName: "google.vault", ResourceName: "vault.matters.close"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}:removePermissions", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:removePermissions)$`), ServiceName: "google.vault", ResourceName: "vault.matters.removePermissions"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}:reopen", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reopen)$`), ServiceName: "google.vault", ResourceName: "vault.matters.reopen"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/matters/{matterId}:undelete", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.vault", ResourceName: "vault.matters.undelete"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/matters/{matterId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.update"}, - {Hostname: "vault.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v1/matters/{matterId}/holds/{holdId}", PathMatcher: regexp.MustCompile(`^(/v1/matters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/holds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vault", ResourceName: "vault.matters.holds.update"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.operations.delete"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.operations.list"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.operations.get"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.operations.cancel"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/videos:annotate", PathMatcher: regexp.MustCompile(`^(/v1/videos:annotate)$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.videos.annotate"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta1/videos:annotate", PathMatcher: regexp.MustCompile(`^(/v1beta1/videos:annotate)$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.videos.annotate"}, - {Hostname: "videointelligence.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1beta2/videos:annotate", PathMatcher: regexp.MustCompile(`^(/v1beta2/videos:annotate)$`), ServiceName: "google.videointelligence", ResourceName: "videointelligence.videos.annotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vision", ResourceName: "vision.operations.delete"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/locations/{locationsId}/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vision", ResourceName: "vision.locations.operations.get"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations", PathMatcher: regexp.MustCompile(`^(/v1/operations)$`), ServiceName: "google.vision", ResourceName: "vision.operations.list"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/operations/{operationsId}", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.vision", ResourceName: "vision.operations.get"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/files:asyncBatchAnnotate", PathMatcher: regexp.MustCompile(`^(/v1/files:asyncBatchAnnotate)$`), ServiceName: "google.vision", ResourceName: "vision.files.asyncBatchAnnotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/images:annotate", PathMatcher: regexp.MustCompile(`^(/v1/images:annotate)$`), ServiceName: "google.vision", ResourceName: "vision.images.annotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/operations/{operationsId}:cancel", PathMatcher: regexp.MustCompile(`^(/v1/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.vision", ResourceName: "vision.operations.cancel"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1p1beta1/files:asyncBatchAnnotate", PathMatcher: regexp.MustCompile(`^(/v1p1beta1/files:asyncBatchAnnotate)$`), ServiceName: "google.vision", ResourceName: "vision.files.asyncBatchAnnotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1p1beta1/images:annotate", PathMatcher: regexp.MustCompile(`^(/v1p1beta1/images:annotate)$`), ServiceName: "google.vision", ResourceName: "vision.images.annotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1p2beta1/files:asyncBatchAnnotate", PathMatcher: regexp.MustCompile(`^(/v1p2beta1/files:asyncBatchAnnotate)$`), ServiceName: "google.vision", ResourceName: "vision.files.asyncBatchAnnotate"}, - {Hostname: "vision.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1p2beta1/images:annotate", PathMatcher: regexp.MustCompile(`^(/v1p2beta1/images:annotate)$`), ServiceName: "google.vision", ResourceName: "vision.images.annotate"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.delete"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.list"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.get"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.list"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.get"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}/crawledUrls", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/crawledUrls)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.crawledUrls.list"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}/findingTypeStats", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/findingTypeStats)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.findingTypeStats.list"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}/findings", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/findings)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.findings.list"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}/findings/{findingsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/findings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.findings.get"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.patch"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.create"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}/scanRuns/{scanRunsId}:stop", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:stop)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.scanRuns.stop"}, - {Hostname: "websecurityscanner.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1alpha/projects/{projectsId}/scanConfigs/{scanConfigsId}:start", PathMatcher: regexp.MustCompile(`^(/v1alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scanConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:start)$`), ServiceName: "google.websecurityscanner", ResourceName: "websecurityscanner.projects.scanConfigs.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/mobile/{resourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/mobile/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.mobiledevices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits{/orgUnitPath*}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)(?:/((?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*)(?:/(?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))*))?$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas/{schemaKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.schemas.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/domainaliases/{domainAliasName}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainaliases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.domainAliases.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/domains/{domainName}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domains/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.domains.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/notifications/{notificationId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.notifications.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings/{buildingId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars/{calendarResourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features/{featureKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/roleassignments/{roleAssignmentId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roleassignments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roleAssignments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/customer/{customer}/roles/{roleId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/groups/{groupKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/groups/{groupKey}/aliases/{alias}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.groups.aliases.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members/{memberKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.members.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/users/{userKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/users/{userKey}/aliases/{alias}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.users.aliases.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/users/{userKey}/asps/{codeId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/asps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.asps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/users/{userKey}/photos/thumbnail", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/photos/thumbnail)$`), ServiceName: "google.admin", ResourceName: "directory.users.photos.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/admin/directory/v1/users/{userKey}/tokens/{clientId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.tokens.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adsense/v1.4/accounts/{accountId}/alerts/{alertId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.alerts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adsense/v1.4/alerts/{alertId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/alerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.alerts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/urlchannels/{urlChannelId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.urlchannels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accountUserLinks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters/{filterId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webpropertyUserLinks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileUserLinks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unsampledReports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.unsampledReports.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys/{keyId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccountKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.serviceaccountkeys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/deviceAccess", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deviceAccess)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.revokeDeviceAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/installs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.installs.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForDevice/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsfordevice.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entitlements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.entitlements.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForUser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsforuser.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/token", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/token)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.revokeToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.deleteall"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.deleteall"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.deleteall"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.deleteall"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.deleteall"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/user/{userId}", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/user/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/appstate/v1/states/{stateKey}", PathMatcher: regexp.MustCompile(`^(/appstate/v1/states/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appstate", ResourceName: "appstate.states.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/books/v1/mylibrary/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.mylibrary.annotations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/calendar/v3/calendars/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl/{ruleId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.events.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/calendar/v3/users/me/calendarList/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/metricDescriptors/{metric}", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.metricDescriptors.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies/{resourcePolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways/{vpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts/{host}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.hosts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{networkEndpointGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/consumersurveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/content/v2/{merchantId}/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/content/v2/{merchantId}/datafeeds/{datafeedId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.datafeeds.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/store/{storeCode}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/store/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.pos.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/content/v2/{merchantId}/products/{productId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.products.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/dynamicTargetingKeys/{objectId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/dynamicTargetingKeys/{objectId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/dynamicTargetingKeys/{objectId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/dynamicTargetingKeys/{objectId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/doubleclickbidmanager/v1/query/{queryId}", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/query/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.queries.deletequery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/trash", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/trash)$`), ServiceName: "google.drive", ResourceName: "drive.files.emptyTrash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/parents/{parentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/parents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.parents.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/properties/{propertyKey}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.properties.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/files/{folderId}/children/{childId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/children/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.children.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v2/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/trash", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/trash)$`), ServiceName: "google.drive", ResourceName: "drive.files.emptyTrash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/drive/v3/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.datasets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fitness/v1/users/{userId}/sessions/{sessionId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.sessions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v1/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v1/tables/{tableId}/tasks/{taskId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v2/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v2/tables/{tableId}/tasks/{taskId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/games/v1configuration/achievements/{achievementId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/games/v1configuration/leaderboards/{leaderboardId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/games/v1management/applications/{applicationId}/players/hidden/{playerId}", PathMatcher: regexp.MustCompile(`^(/games/v1management/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/players/hidden/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.players.unhide"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/drafts/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/labels/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/messages/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/settings/filters/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.filters.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/forwardingAddresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.forwardingAddresses.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/smimeInfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.smimeInfo.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/gmail/v1/users/{userId}/threads/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/mirror/v1/contacts/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/mirror/v1/subscriptions/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.subscriptions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/mirror/v1/timeline/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/mirror/v1/timeline/{itemId}/attachments/{attachmentId}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.attachments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/plusDomains/v1/circles/{circleId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.remove"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/plusDomains/v1/circles/{circleId}/people", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.removePeople"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/prediction/v1.2/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.2/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/prediction/v1.3/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/prediction/v1.4/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/prediction/v1.5/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews/{resourceViewName}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews/{resourceViewName}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/siteVerification/v1/webResource/{id}", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/backupRuns/{id}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases/{database}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/users", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.sqladmin", ResourceName: "sql.users.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}/notificationConfigs/{notification}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.notifications.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta2/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta2/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/surveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments/{environmentId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders/{folderId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/tags/{tagId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.tags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.triggers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/variables/{variableId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.variables.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v1/accounts/{accountId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.permissions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.built_in_variables.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.proposal.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.user_permissions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/taskqueue/v1beta1/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/tasks/v1/users/@me/lists/{tasklist}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/webmasters/v3/sites/{siteUrl}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sites.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sitemaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sitemaps.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/webmasters/v3/sites/{siteUrl}/urlCrawlErrorsSamples/{url}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlCrawlErrorsSamples/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.urlcrawlerrorssamples.markAsFixed"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/analytics/v1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/analytics/v1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/analytics/v1beta1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/analytics/v1beta1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/captions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/captions)$`), ServiceName: "google.youtube", ResourceName: "youtube.captions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/channelSections", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channelSections)$`), ServiceName: "google.youtube", ResourceName: "youtube.channelSections.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/comments", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/liveBroadcasts", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/liveChat/bans", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/bans)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatBans.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/liveChat/messages", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/messages)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatMessages.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/liveChat/moderators", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/moderators)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatModerators.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/liveStreams", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveStreams)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveStreams.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/playlistItems", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlistItems)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlistItems.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/playlists", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlists)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlists.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/subscriptions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/subscriptions)$`), ServiceName: "google.youtube", ResourceName: "youtube.subscriptions.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/youtube/v3/videos", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.2/accounts", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/accounts)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.2/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.2/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.2/creatives/{accountId}/{buyerCreativeId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/accounts", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/accounts)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/billinginfo", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/billinginfo)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.billingInfo.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/billinginfo/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.billingInfo.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/creatives/{accountId}/{buyerCreativeId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/directdeals", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/directdeals)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.directDeals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/directdeals/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/directdeals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.directDeals.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/performancereport", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/performancereport)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.performanceReport.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/accounts", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/accounts)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/billinginfo", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/billinginfo)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.billingInfo.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/billinginfo/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.billingInfo.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/creatives/{accountId}/{buyerCreativeId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/creatives/{accountId}/{buyerCreativeId}/listDeals", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listDeals)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.listDeals"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/performancereport", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/performancereport)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.performanceReport.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/products/search", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/products/search)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.products.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/products/{productId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.products.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/proposals/search", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/search)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/deals", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deals)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacedeals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/notes", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notes)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacenotes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangebuyer/v1.4/publisher/{accountId}/profiles", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/publisher/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pubprofiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/alerts", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/alerts)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/metadata/dimensions", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/metadata/dimensions)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.metadata.dimensions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/metadata/metrics", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/metadata/metrics)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.metadata.metrics.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/preferreddeals", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/preferreddeals)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.preferreddeals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/preferreddeals/{dealId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/preferreddeals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.preferreddeals.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/reports", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/reports)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/reports/saved", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/reports/saved)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1.1/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1\.1/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/reports", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/reports)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/reports/saved", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/reports/saved)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v1/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v1/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/adclients", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/alerts", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alerts)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/metadata/dimensions", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metadata/dimensions)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.metadata.dimensions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/metadata/metrics", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metadata/metrics)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.metadata.metrics.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/preferreddeals", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/preferreddeals)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.preferreddeals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/preferreddeals/{dealId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/preferreddeals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.preferreddeals.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/reports", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/reports/saved", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/saved)$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adexchangeseller/v2.0/accounts/{accountId}/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adexchangeseller/v2\.0/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangeseller", ResourceName: "adexchangeseller.accounts.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/datatransfer/v1/applications", PathMatcher: regexp.MustCompile(`^(/admin/datatransfer/v1/applications)$`), ServiceName: "google.admin", ResourceName: "datatransfer.applications.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/datatransfer/v1/applications/{applicationId}", PathMatcher: regexp.MustCompile(`^(/admin/datatransfer/v1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "datatransfer.applications.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/datatransfer/v1/transfers", PathMatcher: regexp.MustCompile(`^(/admin/datatransfer/v1/transfers)$`), ServiceName: "google.admin", ResourceName: "datatransfer.transfers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/datatransfer/v1/transfers/{dataTransferId}", PathMatcher: regexp.MustCompile(`^(/admin/datatransfer/v1/transfers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "datatransfer.transfers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos)$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos/{deviceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/mobile", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/mobile)$`), ServiceName: "google.admin", ResourceName: "directory.mobiledevices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/mobile/{resourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/mobile/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.mobiledevices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits{/orgUnitPath*}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)(?:/((?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*)(?:/(?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))*))?$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas)$`), ServiceName: "google.admin", ResourceName: "directory.schemas.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas/{schemaKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.schemas.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/domainaliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainaliases)$`), ServiceName: "google.admin", ResourceName: "directory.domainAliases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/domainaliases/{domainAliasName}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainaliases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.domainAliases.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/domains", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domains)$`), ServiceName: "google.admin", ResourceName: "directory.domains.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/domains/{domainName}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domains/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.domains.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/notifications", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifications)$`), ServiceName: "google.admin", ResourceName: "directory.notifications.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/notifications/{notificationId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.notifications.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings)$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings/{buildingId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars)$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars/{calendarResourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features)$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features/{featureKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/roleassignments", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roleassignments)$`), ServiceName: "google.admin", ResourceName: "directory.roleAssignments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/roleassignments/{roleAssignmentId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roleassignments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roleAssignments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/roles", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.admin", ResourceName: "directory.roles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/roles/ALL/privileges", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/ALL/privileges)$`), ServiceName: "google.admin", ResourceName: "directory.privileges.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customer/{customer}/roles/{roleId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/customers/{customerKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.customers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups)$`), ServiceName: "google.admin", ResourceName: "directory.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups/{groupKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups/{groupKey}/aliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.admin", ResourceName: "directory.groups.aliases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups/{groupKey}/hasMember/{memberKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hasMember/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.members.hasMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members)$`), ServiceName: "google.admin", ResourceName: "directory.members.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members/{memberKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.members.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/resolvedappaccesssettings", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/resolvedappaccesssettings)$`), ServiceName: "google.admin", ResourceName: "directory.resolvedAppAccessSettings.GetSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/trustedapps", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/trustedapps)$`), ServiceName: "google.admin", ResourceName: "directory.resolvedAppAccessSettings.ListTrustedApps"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users)$`), ServiceName: "google.admin", ResourceName: "directory.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/aliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.admin", ResourceName: "directory.users.aliases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/asps", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/asps)$`), ServiceName: "google.admin", ResourceName: "directory.asps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/asps/{codeId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/asps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.asps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/photos/thumbnail", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/photos/thumbnail)$`), ServiceName: "google.admin", ResourceName: "directory.users.photos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/tokens", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens)$`), ServiceName: "google.admin", ResourceName: "directory.tokens.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/tokens/{clientId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.tokens.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/directory/v1/users/{userKey}/verificationCodes", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/verificationCodes)$`), ServiceName: "google.admin", ResourceName: "directory.verificationCodes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/reports/v1/activity/users/{userKey}/applications/{applicationName}", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1/activity/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "reports.activities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/reports/v1/usage/dates/{date}", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1/usage/dates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "reports.customerUsageReports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/reports/v1/usage/users/{userKey}/dates/{date}", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1/usage/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "reports.userUsageReport.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/admin/reports/v1/usage/{entityType}/{entityKey}/dates/{date}", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1/usage/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "reports.entityUsageReports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adcode)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.getAdCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/alerts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alerts)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/reports", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/reports/saved", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/saved)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/savedadstyles", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/savedadstyles)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.savedadstyles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/accounts/{accountId}/savedadstyles/{savedAdStyleId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/savedadstyles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.savedadstyles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients)$`), ServiceName: "google.adsense", ResourceName: "adsense.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/adunits/{adUnitId}/adcode", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adcode)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.getAdCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/alerts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/alerts)$`), ServiceName: "google.adsense", ResourceName: "adsense.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/metadata/dimensions", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/metadata/dimensions)$`), ServiceName: "google.adsense", ResourceName: "adsense.metadata.dimensions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/metadata/metrics", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/metadata/metrics)$`), ServiceName: "google.adsense", ResourceName: "adsense.metadata.metrics.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/reports", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/reports)$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/reports/saved", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/reports/saved)$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/savedadstyles", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/savedadstyles)$`), ServiceName: "google.adsense", ResourceName: "adsense.savedadstyles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.3/savedadstyles/{savedAdStyleId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.3/savedadstyles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.savedadstyles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adcode)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.getAdCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/alerts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/alerts)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/payments", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/payments)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.payments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/reports", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/reports/saved", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/saved)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/savedadstyles", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/savedadstyles)$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.savedadstyles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/accounts/{accountId}/savedadstyles/{savedAdStyleId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/savedadstyles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.accounts.savedadstyles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients)$`), ServiceName: "google.adsense", ResourceName: "adsense.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/adunits/{adUnitId}/adcode", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adcode)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.getAdCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/adunits/{adUnitId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.adunits.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/customchannels/{customChannelId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsense", ResourceName: "adsense.customchannels.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsense", ResourceName: "adsense.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/alerts", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/alerts)$`), ServiceName: "google.adsense", ResourceName: "adsense.alerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/metadata/dimensions", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/metadata/dimensions)$`), ServiceName: "google.adsense", ResourceName: "adsense.metadata.dimensions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/metadata/metrics", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/metadata/metrics)$`), ServiceName: "google.adsense", ResourceName: "adsense.metadata.metrics.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/payments", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/payments)$`), ServiceName: "google.adsense", ResourceName: "adsense.payments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/reports", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/reports)$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/reports/saved", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/reports/saved)$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.saved.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/reports/{savedReportId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.reports.saved.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/savedadstyles", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/savedadstyles)$`), ServiceName: "google.adsense", ResourceName: "adsense.savedadstyles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsense/v1.4/savedadstyles/{savedAdStyleId}", PathMatcher: regexp.MustCompile(`^(/adsense/v1\.4/savedadstyles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsense", ResourceName: "adsense.savedadstyles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adclients.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adcode)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.getAdCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/reports", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/adclients", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.adclients.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.adclients.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels/{customChannelId}", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.urlchannels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/associationsessions/start", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/associationsessions/start)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.associationsessions.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/associationsessions/verify", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/associationsessions/verify)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.associationsessions.verify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/adsensehost/v4.1/reports", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/reports)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/data", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/data)$`), ServiceName: "google.analytics", ResourceName: "analytics.data.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/management/accounts", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/management/accounts)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/management/accounts/{accountId}/webproperties", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v2.4/management/segments", PathMatcher: regexp.MustCompile(`^(/analytics/v2\.4/management/segments)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.segments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/data/ga", PathMatcher: regexp.MustCompile(`^(/analytics/v3/data/ga)$`), ServiceName: "google.analytics", ResourceName: "analytics.data.ga.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/data/mcf", PathMatcher: regexp.MustCompile(`^(/analytics/v3/data/mcf)$`), ServiceName: "google.analytics", ResourceName: "analytics.data.mcf.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/data/realtime", PathMatcher: regexp.MustCompile(`^(/analytics/v3/data/realtime)$`), ServiceName: "google.analytics", ResourceName: "analytics.data.realtime.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accountSummaries", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accountSummaries)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accountSummaries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accountUserLinks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters/{filterId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDataSources)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDataSources.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uploads)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.uploads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uploads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.uploads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDimensions)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDimensions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDimensions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDimensions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customMetrics)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customMetrics.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customMetrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customMetrics.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webpropertyUserLinks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileUserLinks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unsampledReports)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.unsampledReports.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unsampledReports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.unsampledReports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/management/segments", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/segments)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.segments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/analytics/v3/metadata/{reportType}/columns", PathMatcher: regexp.MustCompile(`^(/analytics/v3/metadata/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns)$`), ServiceName: "google.analytics", ResourceName: "analytics.metadata.columns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/androidDevicePolicyConfig", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/androidDevicePolicyConfig)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.getAndroidDevicePolicyConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groupLicenses)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.grouplicenses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groupLicenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.grouplicenses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}/users", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/groupLicenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.grouplicenseusers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/appRestrictionsSchema", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/appRestrictionsSchema)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.getAppRestrictionsSchema"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/managedConfigurationsSettings", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsSettings)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationssettings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/permissions", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.getPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/serviceAccount", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccount)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.getServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccountKeys)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.serviceaccountkeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.getStoreLayout"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/availableProductSet)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.getAvailableProductSet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/installs)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.installs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/installs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.installs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForDevice)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsfordevice.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForDevice/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsfordevice.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/state)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.getState"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entitlements)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.entitlements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entitlements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.entitlements.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForUser)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsforuser.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForUser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsforuser.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidenterprise/v1/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.permissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v1.1/applications/{packageName}/inapp/{productId}/purchases/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v1\.1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inapp/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inapppurchases.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v1.1/applications/{packageName}/subscriptions/{subscriptionId}/purchases/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v1\.1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v1/applications/{packageName}/subscriptions/{subscriptionId}/purchases/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/bundles", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bundles)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.bundles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/tracks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/products/{productId}/tokens/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.products.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/voidedpurchases", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/voidedpurchases)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.voidedpurchases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/reviews", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v2/applications/{packageName}/reviews/{reviewId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bundles)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.bundles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.products.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/voidedpurchases", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/voidedpurchases)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.voidedpurchases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/reviews", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/user/{userId}", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/user/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/users", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.listForProductAndSku"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/licensing/v1/product/{productId}/users", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.listForProduct"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/reseller/v1/customers/{customerId}", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.reseller", ResourceName: "reseller.customers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/reseller/v1/resellernotify/getwatchdetails", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/resellernotify/getwatchdetails)$`), ServiceName: "google.reseller", ResourceName: "reseller.resellernotify.getwatchdetails"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/apps/reseller/v1/subscriptions", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/subscriptions)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/appsactivity/v1/activities", PathMatcher: regexp.MustCompile(`^(/appsactivity/v1/activities)$`), ServiceName: "google.appsactivity", ResourceName: "appsactivity.activities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/appstate/v1/states", PathMatcher: regexp.MustCompile(`^(/appstate/v1/states)$`), ServiceName: "google.appstate", ResourceName: "appstate.states.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/appstate/v1/states/{stateKey}", PathMatcher: regexp.MustCompile(`^(/appstate/v1/states/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appstate", ResourceName: "appstate.states.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.projects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/data)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tabledata.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/jobs", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/queries/{jobId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.getQueryResults"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/bigquery/v2/projects/{projectId}/serviceAccount", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccount)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.projects.getServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/pages", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/posts/{postId}/comments", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/blogs/{blogId}/posts/{postId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/blogger/v2/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/users/{userId}", PathMatcher: regexp.MustCompile(`^(/blogger/v2/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v2/users/{userId}/blogs", PathMatcher: regexp.MustCompile(`^(/blogger/v2/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs)$`), ServiceName: "google.blogger", ResourceName: "blogger.users.blogs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/byurl", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/byurl)$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.getByUrl"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/byurl", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/byurl)$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.getByUrl"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/comments", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.listByBlog"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/comments", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.listByBlog"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pages", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pages", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pageviews", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pageviews)$`), ServiceName: "google.blogger", ResourceName: "blogger.pageViews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/pageviews", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pageviews)$`), ServiceName: "google.blogger", ResourceName: "blogger.pageViews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/bypath", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/bypath)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.getByPath"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/bypath", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/bypath)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.getByPath"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/search", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/search)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/search", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/search)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs)$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.listByUser"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs)$`), ServiceName: "google.blogger", ResourceName: "blogger.blogs.listByUser"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.blogUserInfos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.blogUserInfos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.postUserInfos.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.postUserInfos.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.postUserInfos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/blogger/v3/users/{userId}/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.postUserInfos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/dictionary/listOfflineMetadata", PathMatcher: regexp.MustCompile(`^(/books/v1/dictionary/listOfflineMetadata)$`), ServiceName: "google.books", ResourceName: "books.dictionary.listOfflineMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/familysharing/getFamilyInfo", PathMatcher: regexp.MustCompile(`^(/books/v1/familysharing/getFamilyInfo)$`), ServiceName: "google.books", ResourceName: "books.familysharing.getFamilyInfo"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/myconfig/getUserSettings", PathMatcher: regexp.MustCompile(`^(/books/v1/myconfig/getUserSettings)$`), ServiceName: "google.books", ResourceName: "books.myconfig.getUserSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/mylibrary/annotations", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/annotations)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.annotations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/mylibrary/bookshelves", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}/volumes", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/volumes)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.volumes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/mylibrary/readingpositions/{volumeId}", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/readingpositions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.mylibrary.readingpositions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/notification/get", PathMatcher: regexp.MustCompile(`^(/books/v1/notification/get)$`), ServiceName: "google.books", ResourceName: "books.notification.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/onboarding/listCategories", PathMatcher: regexp.MustCompile(`^(/books/v1/onboarding/listCategories)$`), ServiceName: "google.books", ResourceName: "books.onboarding.listCategories"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/onboarding/listCategoryVolumes", PathMatcher: regexp.MustCompile(`^(/books/v1/onboarding/listCategoryVolumes)$`), ServiceName: "google.books", ResourceName: "books.onboarding.listCategoryVolumes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/personalizedstream/get", PathMatcher: regexp.MustCompile(`^(/books/v1/personalizedstream/get)$`), ServiceName: "google.books", ResourceName: "books.personalizedstream.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/promooffer/get", PathMatcher: regexp.MustCompile(`^(/books/v1/promooffer/get)$`), ServiceName: "google.books", ResourceName: "books.promooffer.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/series/get", PathMatcher: regexp.MustCompile(`^(/books/v1/series/get)$`), ServiceName: "google.books", ResourceName: "books.series.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/series/membership/get", PathMatcher: regexp.MustCompile(`^(/books/v1/series/membership/get)$`), ServiceName: "google.books", ResourceName: "books.series.membership.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/users/{userId}/bookshelves", PathMatcher: regexp.MustCompile(`^(/books/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bookshelves)$`), ServiceName: "google.books", ResourceName: "books.bookshelves.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/users/{userId}/bookshelves/{shelf}", PathMatcher: regexp.MustCompile(`^(/books/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.bookshelves.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/users/{userId}/bookshelves/{shelf}/volumes", PathMatcher: regexp.MustCompile(`^(/books/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/volumes)$`), ServiceName: "google.books", ResourceName: "books.bookshelves.volumes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes)$`), ServiceName: "google.books", ResourceName: "books.volumes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/mybooks", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/mybooks)$`), ServiceName: "google.books", ResourceName: "books.volumes.mybooks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/recommended", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/recommended)$`), ServiceName: "google.books", ResourceName: "books.volumes.recommended.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/useruploaded", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/useruploaded)$`), ServiceName: "google.books", ResourceName: "books.volumes.useruploaded.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.volumes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/associated", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/associated)$`), ServiceName: "google.books", ResourceName: "books.volumes.associated.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layers/{layerId}", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.layers.volumeAnnotations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layers/{layerId}/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.layers.volumeAnnotations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layers/{layerId}/data", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/data)$`), ServiceName: "google.books", ResourceName: "books.layers.annotationData.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layers/{layerId}/data/{annotationDataId}", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/data/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.layers.annotationData.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layersummary", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layersummary)$`), ServiceName: "google.books", ResourceName: "books.layers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/books/v1/volumes/{volumeId}/layersummary/{summaryId}", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/layersummary/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.layers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl/{ruleId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}/events", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.events.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}/instances", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.instances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/colors", PathMatcher: regexp.MustCompile(`^(/calendar/v3/colors)$`), ServiceName: "google.calendar", ResourceName: "calendar.colors.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/users/me/calendarList", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList)$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/users/me/calendarList/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/users/me/settings", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/settings)$`), ServiceName: "google.calendar", ResourceName: "calendar.settings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/calendar/v3/users/me/settings/{setting}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/settings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.settings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/civicinfo/v2/divisions", PathMatcher: regexp.MustCompile(`^(/civicinfo/v2/divisions)$`), ServiceName: "google.civicinfo", ResourceName: "civicinfo.divisions.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/civicinfo/v2/elections", PathMatcher: regexp.MustCompile(`^(/civicinfo/v2/elections)$`), ServiceName: "google.civicinfo", ResourceName: "civicinfo.elections.electionQuery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/civicinfo/v2/representatives", PathMatcher: regexp.MustCompile(`^(/civicinfo/v2/representatives)$`), ServiceName: "google.civicinfo", ResourceName: "civicinfo.representatives.representativeInfoByAddress"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/civicinfo/v2/representatives/{ocdId}", PathMatcher: regexp.MustCompile(`^(/civicinfo/v2/representatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.civicinfo", ResourceName: "civicinfo.representatives.representativeInfoByDivision"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/civicinfo/v2/voterinfo", PathMatcher: regexp.MustCompile(`^(/civicinfo/v2/voterinfo)$`), ServiceName: "google.civicinfo", ResourceName: "civicinfo.elections.voterInfoQuery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/metricDescriptors", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors)$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.metricDescriptors.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/timeseries/{metric}", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/timeseries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.timeseries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/timeseriesDescriptors/{metric}", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/timeseriesDescriptors/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.timeseriesDescriptors.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups/{groupName}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.globalAccountsOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/addresses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/commitments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/disks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/hostTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/hostTypes)$`), ServiceName: "google.compute", ResourceName: "compute.hostTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/hosts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/hosts)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/instances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/networkEndpointGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/networkEndpointGroups)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/nodeTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeTypes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/operations", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/resourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/resourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/routers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/subnetworks/listUsable", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/subnetworks/listUsable)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.listUsable"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/vpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/vpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/aggregated/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/getXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/getXpnResources", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnResources)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/images/family/{family}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/family/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.getFromFamily"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/images/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.images.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/interconnectLocations", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/interconnectLocations/{interconnectLocation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/licenseCodes/{licenseCode}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/licenseCodes/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/licenses/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}/listIpOwners", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listIpOwners)$`), ServiceName: "google.compute", ResourceName: "compute.networks.listIpOwners"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/listPreconfiguredExpressionSets", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/listPreconfiguredExpressionSets)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.listPreconfiguredExpressionSets"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}/getRule", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.getRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies/listAvailableFeatures", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/listAvailableFeatures)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.listAvailableFeatures"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.compute", ResourceName: "compute.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/commitments/{commitment}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/operations", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies/{resourcePolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}/getRouterStatus", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getRouterStatus)$`), ServiceName: "google.compute", ResourceName: "compute.routers.getRouterStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways/{vpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones)$`), ServiceName: "google.compute", ResourceName: "compute.zones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/acceleratorTypes/{acceleratorType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.disks.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hostTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hostTypes)$`), ServiceName: "google.compute", ResourceName: "compute.hostTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hostTypes/{hostType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hostTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.hostTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts/{host}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.hosts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/getGuestAttributes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getGuestAttributes)$`), ServiceName: "google.compute", ResourceName: "compute.instances.getGuestAttributes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/referrers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/referrers)$`), ServiceName: "google.compute", ResourceName: "compute.instances.listReferrers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/serialPort", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serialPort)$`), ServiceName: "google.compute", ResourceName: "compute.instances.getSerialPortOutput"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.instances.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/machineTypes/{machineType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{networkEndpointGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeTypes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTypes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeTypes/{nodeType}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/addresses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/commitments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/disks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/instances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/nodeTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/nodeTypes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/operations", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/routers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/subnetworks/listUsable", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/subnetworks/listUsable)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.listUsable"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/aggregated/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/getXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/getXpnResources", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnResources)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/images/family/{family}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/family/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.getFromFamily"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/interconnectLocations", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/interconnectLocations/{interconnectLocation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/licenseCodes/{licenseCode}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}/getRule", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.getRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/snapshots", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies/listAvailableFeatures", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/listAvailableFeatures)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.listAvailableFeatures"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.compute", ResourceName: "compute.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/commitments/{commitment}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates/{nodeTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/operations", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}/getRouterStatus", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getRouterStatus)$`), ServiceName: "google.compute", ResourceName: "compute.routers.getRouterStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones)$`), ServiceName: "google.compute", ResourceName: "compute.zones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/acceleratorTypes/{acceleratorType}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/referrers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/referrers)$`), ServiceName: "google.compute", ResourceName: "compute.instances.listReferrers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/serialPort", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serialPort)$`), ServiceName: "google.compute", ResourceName: "compute.instances.getSerialPortOutput"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/machineTypes/{machineType}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeTypes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTypes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeTypes/{nodeType}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.nodeTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/addresses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/commitments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/disks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/instances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/operations", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/routers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/aggregated/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aggregated/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.aggregatedList"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/getXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/getXpnResources", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getXpnResources)$`), ServiceName: "google.compute", ResourceName: "compute.projects.getXpnResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/images/family/{family}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/family/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.getFromFamily"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/images/{image}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.images.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/instanceTemplates/{instanceTemplate}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/interconnectLocations", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/interconnectLocations/{interconnectLocation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/licenseCodes/{licenseCode}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/licenses/{license}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.licenses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/routes/{route}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/snapshots", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/snapshots/{snapshot}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/sslCertificates/{sslCertificate}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies/listAvailableFeatures", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/listAvailableFeatures)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.listAvailableFeatures"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpProxies/{targetHttpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies/{targetTcpProxy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.compute", ResourceName: "compute.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/addresses/{address}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.addresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/commitments/{commitment}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDiskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/operations", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}/getRouterStatus", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getRouterStatus)$`), ServiceName: "google.compute", ResourceName: "compute.routers.getRouterStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{vpnTunnel}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones)$`), ServiceName: "google.compute", ResourceName: "compute.zones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/acceleratorTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes)$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/acceleratorTypes/{acceleratorType}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acceleratorTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.acceleratorTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers/{autoscaler}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/diskTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes)$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/diskTypes/{diskType}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/diskTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.diskTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks/{disk}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.disks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/referrers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/referrers)$`), ServiceName: "google.compute", ResourceName: "compute.instances.listReferrers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/serialPort", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serialPort)$`), ServiceName: "google.compute", ResourceName: "compute.instances.getSerialPortOutput"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/machineTypes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes)$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/machineTypes/{machineType}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/machineTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.machineTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/targetInstances/{targetInstance}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/consumersurveys/v2/mobileAppPanels", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/mobileAppPanels)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.mobileapppanels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/consumersurveys/v2/mobileAppPanels/{panelId}", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/mobileAppPanels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.mobileapppanels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/consumersurveys/v2/surveys", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/consumersurveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/consumersurveys/v2/surveys/{surveyUrlId}/results", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/results)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.results.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/accounts/authinfo", PathMatcher: regexp.MustCompile(`^(/content/v2/accounts/authinfo)$`), ServiceName: "google.content", ResourceName: "content.accounts.authinfo"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accounts", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.content", ResourceName: "content.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accountstatuses", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountstatuses)$`), ServiceName: "google.content", ResourceName: "content.accountstatuses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accountstatuses/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountstatuses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accountstatuses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accounttax", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounttax)$`), ServiceName: "google.content", ResourceName: "content.accounttax.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/accounttax/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounttax/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounttax.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/datafeeds", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds)$`), ServiceName: "google.content", ResourceName: "content.datafeeds.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/datafeeds/{datafeedId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.datafeeds.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/datafeedstatuses", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeedstatuses)$`), ServiceName: "google.content", ResourceName: "content.datafeedstatuses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/datafeedstatuses/{datafeedId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeedstatuses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.datafeedstatuses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/liasettings", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings)$`), ServiceName: "google.content", ResourceName: "content.liasettings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.liasettings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}/accessiblegmbaccounts", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accessiblegmbaccounts)$`), ServiceName: "google.content", ResourceName: "content.liasettings.getaccessiblegmbaccounts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/orders", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.content", ResourceName: "content.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/ordersbymerchantid/{merchantOrderId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ordersbymerchantid/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.getbymerchantorderid"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/store", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/store)$`), ServiceName: "google.content", ResourceName: "content.pos.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/store/{storeCode}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/store/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.pos.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/products", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products)$`), ServiceName: "google.content", ResourceName: "content.products.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/products/{productId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.products.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/productstatuses", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/productstatuses)$`), ServiceName: "google.content", ResourceName: "content.productstatuses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/productstatuses/{productId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/productstatuses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.productstatuses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/shippingsettings", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shippingsettings)$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/shippingsettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shippingsettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/supportedCarriers", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/supportedCarriers)$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.getsupportedcarriers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/supportedHolidays", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/supportedHolidays)$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.getsupportedholidays"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2/{merchantId}/testordertemplates/{templateName}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testordertemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.gettestordertemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2sandbox/{merchantId}/orders", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.content", ResourceName: "content.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2sandbox/{merchantId}/ordersbymerchantid/{merchantOrderId}", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ordersbymerchantid/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.getbymerchantorderid"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/content/v2sandbox/{merchantId}/testordertemplates/{templateName}", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testordertemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.orders.gettestordertemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/customsearch/v1", PathMatcher: regexp.MustCompile(`^(/customsearch/v1)$`), ServiceName: "google.customsearch", ResourceName: "search.cse.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/customsearch/v1/siterestrict", PathMatcher: regexp.MustCompile(`^(/customsearch/v1/siterestrict)$`), ServiceName: "google.customsearch", ResourceName: "search.cse.siterestrict.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/manifests", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/manifests/{manifest}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/resources", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/resources/{resource}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.listTypes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.getType"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/manifests", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/manifests/{manifest}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/resources", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/resources/{resource}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/manifests", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/manifests/{manifest}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/manifests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.manifests.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/resources", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/resources/{resource}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.resources.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{resource}/getIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/operations", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.operations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.listTypes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.getType"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountActiveAdSummaries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountActiveAdSummaries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountPermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountPermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountPermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountPermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountUserProfiles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/ads/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertisers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/browsers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/browsers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.browsers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/changeLogs", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/changeLogs/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/cities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.cities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/connectionTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/connectionTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/countries", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/countries/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creatives/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/directorySiteContacts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/directorySiteContacts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/directorySites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivityGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightConfigurations/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/languages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/languages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.languages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/metros", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metros)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.metros.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/mobileCarriers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/mobileCarriers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/operatingSystemVersions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/operatingSystemVersions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/operatingSystems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/operatingSystems/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/platformTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/platformTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/postalCodes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/postalCodes/{code}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/inventoryItems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/orderDocuments", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/orders", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/projects/{projectId}/orders/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/regions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingListShares/{remarketingListId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sizes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/subaccounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetableRemarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetableRemarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetingTemplates/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRolePermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRolePermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRolePermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRolePermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/videoFormats", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/videoFormats/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountActiveAdSummaries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountActiveAdSummaries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountPermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountPermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountPermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountPermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountUserProfiles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/ads/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertisers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/browsers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/browsers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.browsers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/changeLogs", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/changeLogs/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/cities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.cities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/connectionTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/connectionTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/countries", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/countries/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creatives/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/directorySiteContacts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/directorySiteContacts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/directorySites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivityGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightConfigurations/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/languages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/languages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.languages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/metros", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metros)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.metros.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/mobileCarriers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/mobileCarriers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/operatingSystemVersions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/operatingSystemVersions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/operatingSystems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/operatingSystems/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/platformTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/platformTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/postalCodes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/postalCodes/{code}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/inventoryItems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/orderDocuments", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/orders", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/projects/{projectId}/orders/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/regions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingListShares/{remarketingListId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sizes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/subaccounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetableRemarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetableRemarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetingTemplates/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRolePermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRolePermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRolePermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRolePermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/videoFormats", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/videoFormats/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountActiveAdSummaries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountActiveAdSummaries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountPermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountPermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountPermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountPermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountUserProfiles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/ads/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserLandingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertisers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/browsers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/browsers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.browsers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/changeLogs", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/changeLogs/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/cities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.cities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/connectionTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/connectionTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/countries", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/countries/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creatives/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/directorySiteContacts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/directorySiteContacts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/directorySites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivityGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightConfigurations/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/languages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/languages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.languages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/metros", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metros)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.metros.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/mobileCarriers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/mobileCarriers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/operatingSystemVersions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/operatingSystemVersions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/operatingSystems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/operatingSystems/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/platformTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/platformTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/postalCodes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/postalCodes/{code}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/inventoryItems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/orderDocuments", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/orders", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/projects/{projectId}/orders/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/regions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingListShares/{remarketingListId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sizes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/subaccounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetableRemarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetableRemarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetingTemplates/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRolePermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRolePermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRolePermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRolePermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/videoFormats", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/videoFormats/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountActiveAdSummaries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountActiveAdSummaries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountPermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountPermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountPermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountPermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountPermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountPermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountUserProfiles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/ads/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserLandingPages/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertisers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/browsers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/browsers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.browsers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/changeLogs", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/changeLogs/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeLogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.changeLogs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/cities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.cities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/connectionTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/connectionTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/connectionTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.connectionTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/countries", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/countries/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/countries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.countries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creatives/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/directorySiteContacts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/directorySiteContacts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySiteContacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySiteContacts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/directorySites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivityGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightConfigurations/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/languages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/languages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.languages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/metros", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metros)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.metros.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/mobileApps", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileApps)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileApps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/mobileApps/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileApps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileApps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/mobileCarriers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/mobileCarriers/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/mobileCarriers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.mobileCarriers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/operatingSystemVersions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/operatingSystemVersions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystemVersions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystemVersions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/operatingSystems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/operatingSystems/{dartId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operatingSystems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.operatingSystems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/platformTypes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/platformTypes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/platformTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.platformTypes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/postalCodes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/postalCodes/{code}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/postalCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.postalCodes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/inventoryItems", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventoryItems/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.inventoryItems.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/orderDocuments", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderDocuments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orderDocuments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/orders", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/projects/{projectId}/orders/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.orders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/regions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.regions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingListShares/{remarketingListId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}/files", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sites/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sizes/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/subaccounts/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetableRemarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetableRemarketingLists/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetableRemarketingLists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetableRemarketingLists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetingTemplates/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRolePermissionGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRolePermissionGroups/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissionGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissionGroups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRolePermissions", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRolePermissions/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRolePermissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRolePermissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/videoFormats", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/videoFormats/{id}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/videoFormats/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.videoFormats.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/discovery/v1/apis", PathMatcher: regexp.MustCompile(`^(/discovery/v1/apis)$`), ServiceName: "google.discovery", ResourceName: "discovery.apis.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/discovery/v1/apis/{api}/{version}/rest", PathMatcher: regexp.MustCompile(`^(/discovery/v1/apis/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rest)$`), ServiceName: "google.discovery", ResourceName: "discovery.apis.getRest"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/changes/{changeId}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.changes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/dnsKeys", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys)$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/dnsKeys/{dnsKeyId}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/operations", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/rrsets", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rrsets)$`), ServiceName: "google.dns", ResourceName: "dns.resourceRecordSets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/changes/{changeId}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.changes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/dnsKeys", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys)$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/dnsKeys/{dnsKeyId}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/operations", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/rrsets", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rrsets)$`), ServiceName: "google.dns", ResourceName: "dns.resourceRecordSets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.projects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/changes/{changeId}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.changes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/dnsKeys", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys)$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/dnsKeys/{dnsKeyId}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dnsKeys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.dnsKeys.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/operations", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/rrsets", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rrsets)$`), ServiceName: "google.dns", ResourceName: "dns.resourceRecordSets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclickbidmanager/v1/queries", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/queries)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.queries.listqueries"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclickbidmanager/v1/queries/{queryId}/reports", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/queries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.reports.listreports"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclickbidmanager/v1/query/{queryId}", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/query/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.queries.getquery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclicksearch/v2/agency/{agencyId}/advertiser/{advertiserId}/engine/{engineAccountId}/conversion", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/agency/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/engine/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversion)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.conversion.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclicksearch/v2/agency/{agencyId}/advertiser/{advertiserId}/savedcolumns", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/agency/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/savedcolumns)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.savedColumns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclicksearch/v2/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.reports.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/doubleclicksearch/v2/reports/{reportId}/files/{reportFragment}", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.reports.getFile"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/about", PathMatcher: regexp.MustCompile(`^(/drive/v2/about)$`), ServiceName: "google.drive", ResourceName: "drive.about.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/apps", PathMatcher: regexp.MustCompile(`^(/drive/v2/apps)$`), ServiceName: "google.drive", ResourceName: "drive.apps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/apps/{appId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/apps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.apps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/changes", PathMatcher: regexp.MustCompile(`^(/drive/v2/changes)$`), ServiceName: "google.drive", ResourceName: "drive.changes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/changes/startPageToken", PathMatcher: regexp.MustCompile(`^(/drive/v2/changes/startPageToken)$`), ServiceName: "google.drive", ResourceName: "drive.changes.getStartPageToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/changes/{changeId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/changes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.changes.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files", PathMatcher: regexp.MustCompile(`^(/drive/v2/files)$`), ServiceName: "google.drive", ResourceName: "drive.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/generateIds", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/generateIds)$`), ServiceName: "google.drive", ResourceName: "drive.files.generateIds"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/comments", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.drive", ResourceName: "drive.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies)$`), ServiceName: "google.drive", ResourceName: "drive.replies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/export", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/export)$`), ServiceName: "google.drive", ResourceName: "drive.files.export"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/parents", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/parents)$`), ServiceName: "google.drive", ResourceName: "drive.parents.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/parents/{parentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/parents/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.parents.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/permissions", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.drive", ResourceName: "drive.permissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/properties", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties)$`), ServiceName: "google.drive", ResourceName: "drive.properties.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/properties/{propertyKey}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.properties.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/realtime", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/realtime)$`), ServiceName: "google.drive", ResourceName: "drive.realtime.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/revisions", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions)$`), ServiceName: "google.drive", ResourceName: "drive.revisions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{folderId}/children", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/children)$`), ServiceName: "google.drive", ResourceName: "drive.children.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/files/{folderId}/children/{childId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/children/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.children.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/permissionIds/{email}", PathMatcher: regexp.MustCompile(`^(/drive/v2/permissionIds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.getIdForEmail"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/teamdrives", PathMatcher: regexp.MustCompile(`^(/drive/v2/teamdrives)$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v2/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/about", PathMatcher: regexp.MustCompile(`^(/drive/v3/about)$`), ServiceName: "google.drive", ResourceName: "drive.about.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/changes", PathMatcher: regexp.MustCompile(`^(/drive/v3/changes)$`), ServiceName: "google.drive", ResourceName: "drive.changes.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/changes/startPageToken", PathMatcher: regexp.MustCompile(`^(/drive/v3/changes/startPageToken)$`), ServiceName: "google.drive", ResourceName: "drive.changes.getStartPageToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files", PathMatcher: regexp.MustCompile(`^(/drive/v3/files)$`), ServiceName: "google.drive", ResourceName: "drive.files.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/generateIds", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/generateIds)$`), ServiceName: "google.drive", ResourceName: "drive.files.generateIds"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/comments", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.drive", ResourceName: "drive.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}/replies", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies)$`), ServiceName: "google.drive", ResourceName: "drive.replies.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/export", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/export)$`), ServiceName: "google.drive", ResourceName: "drive.files.export"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/permissions", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.drive", ResourceName: "drive.permissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/revisions", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions)$`), ServiceName: "google.drive", ResourceName: "drive.revisions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/teamdrives", PathMatcher: regexp.MustCompile(`^(/drive/v3/teamdrives)$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/drive/v3/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fitness/v1/users/{userId}/dataSources", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources)$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}/dataPointChanges", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataPointChanges)$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.dataPointChanges.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.datasets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fitness/v1/users/{userId}/sessions", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions)$`), ServiceName: "google.fitness", ResourceName: "fitness.users.sessions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/query", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/query)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.query.sqlGet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/tasks", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/tasks/{taskId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/query", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/query)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.query.sqlGet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/tasks", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/tasks/{taskId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.task.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/achievements", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements)$`), ServiceName: "google.games", ResourceName: "games.achievementDefinitions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/applications/{applicationId}", PathMatcher: regexp.MustCompile(`^(/games/v1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.applications.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/applications/{applicationId}/verify", PathMatcher: regexp.MustCompile(`^(/games/v1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/verify)$`), ServiceName: "google.games", ResourceName: "games.applications.verify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/eventDefinitions", PathMatcher: regexp.MustCompile(`^(/games/v1/eventDefinitions)$`), ServiceName: "google.games", ResourceName: "games.events.listDefinitions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/events", PathMatcher: regexp.MustCompile(`^(/games/v1/events)$`), ServiceName: "google.games", ResourceName: "games.events.listByPlayer"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/leaderboards", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards)$`), ServiceName: "google.games", ResourceName: "games.leaderboards.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/leaderboards/{leaderboardId}", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.leaderboards.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/leaderboards/{leaderboardId}/scores/{collection}", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scores/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.scores.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/leaderboards/{leaderboardId}/window/{collection}", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/window/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.scores.listWindow"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/metagameConfig", PathMatcher: regexp.MustCompile(`^(/games/v1/metagameConfig)$`), ServiceName: "google.games", ResourceName: "games.metagame.getMetagameConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/me/players/{collection}", PathMatcher: regexp.MustCompile(`^(/games/v1/players/me/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.players.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.players.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}/achievements", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/achievements)$`), ServiceName: "google.games", ResourceName: "games.achievements.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}/categories/{collection}", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/categories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.metagame.listCategoriesByPlayer"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}/leaderboards/{leaderboardId}/scores/{timeSpan}", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scores/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.scores.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}/quests", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/quests)$`), ServiceName: "google.games", ResourceName: "games.quests.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/players/{playerId}/snapshots", PathMatcher: regexp.MustCompile(`^(/games/v1/players/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/snapshots)$`), ServiceName: "google.games", ResourceName: "games.snapshots.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/revisions/check", PathMatcher: regexp.MustCompile(`^(/games/v1/revisions/check)$`), ServiceName: "google.games", ResourceName: "games.revisions.check"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/rooms", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms)$`), ServiceName: "google.games", ResourceName: "games.rooms.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/rooms/{roomId}", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.rooms.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/snapshots/{snapshotId}", PathMatcher: regexp.MustCompile(`^(/games/v1/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.snapshots.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/turnbasedmatches", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/turnbasedmatches/sync", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/sync)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.sync"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1/turnbasedmatches/{matchId}", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1configuration/achievements/{achievementId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1configuration/applications/{applicationId}/achievements", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/achievements)$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1configuration/applications/{applicationId}/leaderboards", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leaderboards)$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1configuration/leaderboards/{leaderboardId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/games/v1management/applications/{applicationId}/players/hidden", PathMatcher: regexp.MustCompile(`^(/games/v1management/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/players/hidden)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.applications.listHidden"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/drafts", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/drafts/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/history", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/history)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.history.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/labels", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/labels/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/messages", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/messages/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.attachments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/profile", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profile)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.getProfile"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/autoForwarding", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/autoForwarding)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.getAutoForwarding"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/filters", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/filters)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.filters.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/filters/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.filters.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/forwardingAddresses", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/forwardingAddresses)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.forwardingAddresses.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/forwardingAddresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.forwardingAddresses.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/imap", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/imap)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.getImap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/pop", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/pop)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.getPop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/smimeInfo)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.smimeInfo.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/smimeInfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.smimeInfo.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/settings/vacation", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/vacation)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.getVacation"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/threads", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/gmail/v1/users/{userId}/threads/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/groups/v1/groups/{groupUniqueId}", PathMatcher: regexp.MustCompile(`^(/groups/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.groupssettings", ResourceName: "groupsSettings.groups.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/identitytoolkit/v3/relyingparty/getProjectConfig", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/getProjectConfig)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.getProjectConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/identitytoolkit/v3/relyingparty/getRecaptchaParam", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/getRecaptchaParam)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.getRecaptchaParam"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/identitytoolkit/v3/relyingparty/publicKeys", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/publicKeys)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.getPublicKeys"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/contacts", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts)$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/contacts/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/locations", PathMatcher: regexp.MustCompile(`^(/mirror/v1/locations)$`), ServiceName: "google.mirror", ResourceName: "mirror.locations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/locations/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/locations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.locations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/settings/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/settings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.settings.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/subscriptions", PathMatcher: regexp.MustCompile(`^(/mirror/v1/subscriptions)$`), ServiceName: "google.mirror", ResourceName: "mirror.subscriptions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/timeline", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline)$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/timeline/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/timeline/{itemId}/attachments", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments)$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.attachments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/mirror/v1/timeline/{itemId}/attachments/{attachmentId}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.attachments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/oauth2/v1/userinfo", PathMatcher: regexp.MustCompile(`^(/oauth2/v1/userinfo)$`), ServiceName: "google.oauth2", ResourceName: "oauth2.userinfo.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/oauth2/v2/userinfo", PathMatcher: regexp.MustCompile(`^(/oauth2/v2/userinfo)$`), ServiceName: "google.oauth2", ResourceName: "oauth2.userinfo.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/pagespeedonline/v1/runPagespeed", PathMatcher: regexp.MustCompile(`^(/pagespeedonline/v1/runPagespeed)$`), ServiceName: "google.pagespeedonline", ResourceName: "pagespeedonline.pagespeedapi.runpagespeed"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/pagespeedonline/v2/runPagespeed", PathMatcher: regexp.MustCompile(`^(/pagespeedonline/v2/runPagespeed)$`), ServiceName: "google.pagespeedonline", ResourceName: "pagespeedonline.pagespeedapi.runpagespeed"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/pagespeedonline/v4/runPagespeed", PathMatcher: regexp.MustCompile(`^(/pagespeedonline/v4/runPagespeed)$`), ServiceName: "google.pagespeedonline", ResourceName: "pagespeedonline.pagespeedapi.runpagespeed"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/activities", PathMatcher: regexp.MustCompile(`^(/plus/v1/activities)$`), ServiceName: "google.plus", ResourceName: "plus.activities.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/activities/{activityId}", PathMatcher: regexp.MustCompile(`^(/plus/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.activities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/activities/{activityId}/comments", PathMatcher: regexp.MustCompile(`^(/plus/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.plus", ResourceName: "plus.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/activities/{activityId}/people/{collection}", PathMatcher: regexp.MustCompile(`^(/plus/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.people.listByActivity"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/plus/v1/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/people", PathMatcher: regexp.MustCompile(`^(/plus/v1/people)$`), ServiceName: "google.plus", ResourceName: "plus.people.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/people/{userId}", PathMatcher: regexp.MustCompile(`^(/plus/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.people.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/people/{userId}/activities/{collection}", PathMatcher: regexp.MustCompile(`^(/plus/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.activities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plus/v1/people/{userId}/people/{collection}", PathMatcher: regexp.MustCompile(`^(/plus/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plus", ResourceName: "plus.people.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/activities/{activityId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.activities.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/activities/{activityId}/comments", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/activities/{activityId}/people/{collection}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.people.listByActivity"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/circles/{circleId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/circles/{circleId}/people", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.people.listByCircle"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.comments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/people/{userId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.people.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/people/{userId}/activities/{collection}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.activities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/people/{userId}/audiences", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/audiences)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.audiences.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/people/{userId}/circles", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/circles)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/plusDomains/v1/people/{userId}/people/{collection}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.people.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.2/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.2/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.3/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.4/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.5/trainedmodels/list", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/list)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.5/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.5/trainedmodels/{id}/analyze", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/analyze)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.analyze"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/list", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/list)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/{id}/analyze", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/analyze)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.analyze"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/replicas", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replicas)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.replicas.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/replicas/{replicaName}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replicas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.replicas.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/instanceUpdates", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceUpdates)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.listInstanceUpdates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews/{resourceViewName}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews/{resourceViewName}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/operations", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneOperations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneOperations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}/resources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.listResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/siteVerification/v1/webResource", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource)$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/siteVerification/v1/webResource/{id}", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/flags", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/flags)$`), ServiceName: "google.sqladmin", ResourceName: "sql.flags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/backupRuns", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns)$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/operations", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.sqladmin", ResourceName: "sql.operations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.operations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/sslCerts", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts)$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta3/projects/{project}/tiers", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tiers)$`), ServiceName: "google.sqladmin", ResourceName: "sql.tiers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/flags", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/flags)$`), ServiceName: "google.sqladmin", ResourceName: "sql.flags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/backupRuns", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns)$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/backupRuns/{id}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases)$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases/{database}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/listServerCas", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listServerCas)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.listServerCas"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/sslCerts", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts)$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/users", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.sqladmin", ResourceName: "sql.users.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/operations", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations)$`), ServiceName: "google.sqladmin", ResourceName: "sql.operations.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/operations/{operation}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.operations.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/sql/v1beta4/projects/{project}/tiers", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tiers)$`), ServiceName: "google.sqladmin", ResourceName: "sql.tiers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b", PathMatcher: regexp.MustCompile(`^(/storage/v1/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl)$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/iam", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/iam/testPermissions", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam/testPermissions)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/notificationConfigs", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationConfigs)$`), ServiceName: "google.storage", ResourceName: "storage.notifications.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/notificationConfigs/{notification}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationConfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.notifications.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/iam", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam)$`), ServiceName: "google.storage", ResourceName: "storage.objects.getIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/iam/testPermissions", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam/testPermissions)$`), ServiceName: "google.storage", ResourceName: "storage.objects.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1/projects/{projectId}/serviceAccount", PathMatcher: regexp.MustCompile(`^(/storage/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccount)$`), ServiceName: "google.storage", ResourceName: "storage.projects.serviceAccount.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl)$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/surveys/v2/surveys", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys)$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/surveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/surveys/v2/surveys/{surveyUrlId}/results", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/results)$`), ServiceName: "google.surveys", ResourceName: "surveys.results.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments/{environmentId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders/{folderId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders/{folderId}/entities", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entities)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.entities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/tags", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tags)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.tags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/tags/{tagId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.tags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/triggers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.triggers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.triggers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.variables.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/variables/{variableId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.variables.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/permissions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.permissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v1/accounts/{accountId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.permissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/accounts", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/accounts)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/built_in_variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/built_in_variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.built_in_variables.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/containers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/containers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/environments", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/folders", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/folders)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/tags", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/tags)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/triggers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/user_permissions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/user_permissions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.user_permissions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/version_headers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/version_headers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.version_headers.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/version_headers:latest", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/version_headers:latest)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.version_headers.latest"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/versions:live", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/versions:live)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.live"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+parent}/workspaces", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/workspaces)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.getProposal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.user_permissions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tagmanager/v2/{+path}/status", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/status)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.getStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta1/projects/{project}/taskqueues/{taskqueue}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.taskqueues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta1/projects/{project}/taskqueues/{taskqueue}/tasks", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta1/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.taskqueues.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tasks/v1/users/@me/lists", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/tasks/v1/users/@me/lists/{tasklist}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/clusters", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.clusters.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.clusters.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfMetricsSummary", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfMetricsSummary)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.getPerfMetricsSummary"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}/samples", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/samples)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.samples.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/thumbnails", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/thumbnails)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.thumbnails.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/settings", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.getSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/clusters", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.clusters.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.clusters.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfMetricsSummary", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfMetricsSummary)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.getPerfMetricsSummary"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}/samples", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/samples)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.samples.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/thumbnails", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/thumbnails)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.thumbnails.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/settings", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.getSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/urlshortener/v1/url", PathMatcher: regexp.MustCompile(`^(/urlshortener/v1/url)$`), ServiceName: "google.urlshortener", ResourceName: "urlshortener.url.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/urlshortener/v1/url/history", PathMatcher: regexp.MustCompile(`^(/urlshortener/v1/url/history)$`), ServiceName: "google.urlshortener", ResourceName: "urlshortener.url.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/userinfo/v2/me", PathMatcher: regexp.MustCompile(`^(/userinfo/v2/me)$`), ServiceName: "google.oauth2", ResourceName: "oauth2.userinfo.v2.me.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/userinfo/v2/me", PathMatcher: regexp.MustCompile(`^(/userinfo/v2/me)$`), ServiceName: "google.oauth2", ResourceName: "oauth2.userinfo.v2.me.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webfonts/v1/webfonts", PathMatcher: regexp.MustCompile(`^(/webfonts/v1/webfonts)$`), ServiceName: "google.webfonts", ResourceName: "webfonts.webfonts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites)$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sites.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sites.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}/sitemaps", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sitemaps)$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sitemaps.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sitemaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sitemaps.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}/urlCrawlErrorsCounts/query", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlCrawlErrorsCounts/query)$`), ServiceName: "google.webmasters", ResourceName: "webmasters.urlcrawlerrorscounts.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}/urlCrawlErrorsSamples", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlCrawlErrorsSamples)$`), ServiceName: "google.webmasters", ResourceName: "webmasters.urlcrawlerrorssamples.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/webmasters/v3/sites/{siteUrl}/urlCrawlErrorsSamples/{url}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlCrawlErrorsSamples/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.urlcrawlerrorssamples.get"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1/reports", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/reports)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.reports.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1beta1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1beta1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/analytics/v1beta1/reports", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/reports)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.reports.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/activities", PathMatcher: regexp.MustCompile(`^(/youtube/v3/activities)$`), ServiceName: "google.youtube", ResourceName: "youtube.activities.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/captions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/captions)$`), ServiceName: "google.youtube", ResourceName: "youtube.captions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/captions/{id}", PathMatcher: regexp.MustCompile(`^(/youtube/v3/captions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.youtube", ResourceName: "youtube.captions.download"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/channelSections", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channelSections)$`), ServiceName: "google.youtube", ResourceName: "youtube.channelSections.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/channels", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channels)$`), ServiceName: "google.youtube", ResourceName: "youtube.channels.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/commentThreads", PathMatcher: regexp.MustCompile(`^(/youtube/v3/commentThreads)$`), ServiceName: "google.youtube", ResourceName: "youtube.commentThreads.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/comments", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/guideCategories", PathMatcher: regexp.MustCompile(`^(/youtube/v3/guideCategories)$`), ServiceName: "google.youtube", ResourceName: "youtube.guideCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/i18nLanguages", PathMatcher: regexp.MustCompile(`^(/youtube/v3/i18nLanguages)$`), ServiceName: "google.youtube", ResourceName: "youtube.i18nLanguages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/i18nRegions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/i18nRegions)$`), ServiceName: "google.youtube", ResourceName: "youtube.i18nRegions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/liveBroadcasts", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/liveChat/messages", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/messages)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatMessages.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/liveChat/moderators", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/moderators)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatModerators.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/liveStreams", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveStreams)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveStreams.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/playlistItems", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlistItems)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlistItems.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/playlists", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlists)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlists.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/search", PathMatcher: regexp.MustCompile(`^(/youtube/v3/search)$`), ServiceName: "google.youtube", ResourceName: "youtube.search.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/sponsors", PathMatcher: regexp.MustCompile(`^(/youtube/v3/sponsors)$`), ServiceName: "google.youtube", ResourceName: "youtube.sponsors.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/subscriptions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/subscriptions)$`), ServiceName: "google.youtube", ResourceName: "youtube.subscriptions.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/superChatEvents", PathMatcher: regexp.MustCompile(`^(/youtube/v3/superChatEvents)$`), ServiceName: "google.youtube", ResourceName: "youtube.superChatEvents.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/videoAbuseReportReasons", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videoAbuseReportReasons)$`), ServiceName: "google.youtube", ResourceName: "youtube.videoAbuseReportReasons.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/videoCategories", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videoCategories)$`), ServiceName: "google.youtube", ResourceName: "youtube.videoCategories.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/videos", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.list"}, - {Hostname: "www.googleapis.com", HTTPMethod: "GET", PathTemplate: "/youtube/v3/videos/getRating", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos/getRating)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.getRating"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.2/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.3/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.3/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.4/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.4/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/{revisionNumber}/{updateAction}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos/{deviceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits{/orgUnitPath*}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)(?:/((?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*)(?:/(?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))*))?$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas/{schemaKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.schemas.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customer}/notifications/{notificationId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.notifications.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings/{buildingId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars/{calendarResourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features/{featureKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customer/{customer}/roles/{roleId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/customers/{customerKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.customers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/groups/{groupKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.groups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members/{memberKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.members.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/users/{userKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.users.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/admin/directory/v1/users/{userKey}/photos/thumbnail", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/photos/thumbnail)$`), ServiceName: "google.admin", ResourceName: "directory.users.photos.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters/{filterId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDimensions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDimensions.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customMetrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customMetrics.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/installs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.installs.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForDevice/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsfordevice.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entitlements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.entitlements.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForUser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsforuser.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/user/{userId}", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/user/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/apps/reseller/v1/customers/{customerId}", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.reseller", ResourceName: "reseller.customers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/calendar/v3/calendars/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl/{ruleId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.events.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/calendar/v3/users/me/calendarList/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setShieldedVmIntegrityPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setShieldedVmIntegrityPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setShieldedVmIntegrityPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateNetworkInterface)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateNetworkInterface"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/updateShieldedVmConfig", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateShieldedVmConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateShieldedVmConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setShieldedVmIntegrityPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setShieldedVmIntegrityPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setShieldedVmIntegrityPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateNetworkInterface)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateNetworkInterface"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/updateShieldedVmConfig", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateShieldedVmConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateShieldedVmConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/interconnects/{interconnect}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.networks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies/{sslPolicy}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{interconnectAttachment}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateNetworkInterface)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateNetworkInterface"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/content/v2/{merchantId}/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/content/v2/{merchantId}/accounttax/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounttax/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounttax.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/content/v2/{merchantId}/datafeeds/{datafeedId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.datafeeds.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.liasettings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/content/v2/{merchantId}/shippingsettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shippingsettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/doubleclicksearch/v2/conversion", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/conversion)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.conversion.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}/properties/{propertyKey}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.properties.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v2/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/drive/v3/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v3/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.datasets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v1/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v2/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/games/v1configuration/achievements/{achievementId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/games/v1configuration/leaderboards/{leaderboardId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/gmail/v1/users/{userId}/labels/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/groups/v1/groups/{groupUniqueId}", PathMatcher: regexp.MustCompile(`^(/groups/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.groupssettings", ResourceName: "groupsSettings.groups.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/mirror/v1/contacts/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/mirror/v1/timeline/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/plusDomains/v1/circles/{circleId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/siteVerification/v1/webResource/{id}", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases/{database}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta2/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta2/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments/{environmentId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/tasks/v1/users/@me/lists/{tasklist}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PATCH", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.patch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.2/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.3/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/creatives", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/creatives/{accountId}/{buyerCreativeId}/addDeal/{dealId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addDeal/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.addDeal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/creatives/{accountId}/{buyerCreativeId}/removeDeal/{dealId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/creatives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeDeal/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.creatives.removeDeal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/privateauction/{privateAuctionId}/updateproposal", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/privateauction/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateproposal)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplaceprivateauction.updateproposal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/insert", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/insert)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/deals/delete", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deals/delete)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacedeals.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/deals/insert", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deals/insert)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacedeals.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/deals/update", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deals/update)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacedeals.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/notes/insert", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notes/insert)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.marketplacenotes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/setupcomplete", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setupcomplete)$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.setupcomplete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/datatransfer/v1/transfers", PathMatcher: regexp.MustCompile(`^(/admin/datatransfer/v1/transfers)$`), ServiceName: "google.admin", ResourceName: "datatransfer.transfers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1//admin/directory_v1/channels/stop", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1//admin/directory_v1/channels/stop)$`), ServiceName: "google.admin", ResourceName: "admin.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos/moveDevicesToOu", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos/moveDevicesToOu)$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.moveDevicesToOu"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos/{resourceId}/action", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/action)$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.action"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/mobile/{resourceId}/action", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/mobile/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/action)$`), ServiceName: "google.admin", ResourceName: "directory.mobiledevices.action"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas)$`), ServiceName: "google.admin", ResourceName: "directory.schemas.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/domainaliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domainaliases)$`), ServiceName: "google.admin", ResourceName: "directory.domainAliases.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/domains", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/domains)$`), ServiceName: "google.admin", ResourceName: "directory.domains.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings)$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars)$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features)$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features/{oldName}/rename", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rename)$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.rename"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/roleassignments", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roleassignments)$`), ServiceName: "google.admin", ResourceName: "directory.roleAssignments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/customer/{customer}/roles", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles)$`), ServiceName: "google.admin", ResourceName: "directory.roles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/groups", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups)$`), ServiceName: "google.admin", ResourceName: "directory.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/groups/{groupKey}/aliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.admin", ResourceName: "directory.groups.aliases.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members)$`), ServiceName: "google.admin", ResourceName: "directory.members.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users)$`), ServiceName: "google.admin", ResourceName: "directory.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/watch", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/watch)$`), ServiceName: "google.admin", ResourceName: "directory.users.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/aliases", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases)$`), ServiceName: "google.admin", ResourceName: "directory.users.aliases.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/aliases/watch", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/aliases/watch)$`), ServiceName: "google.admin", ResourceName: "directory.users.aliases.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/makeAdmin", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/makeAdmin)$`), ServiceName: "google.admin", ResourceName: "directory.users.makeAdmin"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/undelete", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/undelete)$`), ServiceName: "google.admin", ResourceName: "directory.users.undelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/verificationCodes/generate", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/verificationCodes/generate)$`), ServiceName: "google.admin", ResourceName: "directory.verificationCodes.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/directory/v1/users/{userKey}/verificationCodes/invalidate", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/verificationCodes/invalidate)$`), ServiceName: "google.admin", ResourceName: "directory.verificationCodes.invalidate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/reports/v1//admin/reports_v1/channels/stop", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1//admin/reports_v1/channels/stop)$`), ServiceName: "google.admin", ResourceName: "admin.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/admin/reports/v1/activity/users/{userKey}/applications/{applicationName}/watch", PathMatcher: regexp.MustCompile(`^(/admin/reports/v1/activity/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/watch)$`), ServiceName: "google.admin", ResourceName: "reports.activities.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/urlchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.urlchannels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accountUserLinks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteUploadData)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.uploads.deleteUploadData"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/uploads)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.uploads.uploadData"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDimensions)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDimensions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customMetrics)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customMetrics.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webpropertyUserLinks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileUserLinks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unsampledReports)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.unsampledReports.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences)$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/provisioning/createAccountTicket", PathMatcher: regexp.MustCompile(`^(/analytics/v3/provisioning/createAccountTicket)$`), ServiceName: "google.analytics", ResourceName: "analytics.provisioning.createAccountTicket"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/provisioning/createAccountTree", PathMatcher: regexp.MustCompile(`^(/analytics/v3/provisioning/createAccountTree)$`), ServiceName: "google.analytics", ResourceName: "analytics.provisioning.createAccountTree"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/analytics/v3/userDeletion/userDeletionRequests:upsert", PathMatcher: regexp.MustCompile(`^(/analytics/v3/userDeletion/userDeletionRequests:upsert)$`), ServiceName: "google.analytics", ResourceName: "analytics.userDeletion.userDeletionRequest.upsert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/acknowledgeNotificationSet", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/acknowledgeNotificationSet)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.acknowledgeNotificationSet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/completeSignup", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/completeSignup)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.completeSignup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/enroll", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/enroll)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.enroll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/pullNotificationSet", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/pullNotificationSet)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.pullNotificationSet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/signupUrl", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/signupUrl)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.generateSignupUrl"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/createWebToken", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createWebToken)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.createWebToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/approve", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/approve)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.approve"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/generateApprovalUrl)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.generateApprovalUrl"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/unapprove", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unapprove)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.products.unapprove"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/sendTestPushNotification", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sendTestPushNotification)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.sendTestPushNotification"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/serviceAccountKeys)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.serviceaccountkeys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/unenroll", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unenroll)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.unenroll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/authenticationToken", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authenticationToken)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.generateAuthenticationToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/token", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/token)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.generateToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v1.1/applications/{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v1\.1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v1/applications/{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v1/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/externallyHosted", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/externallyHosted)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.addexternallyhosted"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deobfuscationFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.deobfuscationfiles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/bundles", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bundles)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.bundles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}:commit", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:commit)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.commit"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}:validate", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:validate)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/orders/{orderId}:refund", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:refund)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.orders.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:defer", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:defer)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.defer"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:refund", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:refund)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:revoke", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:revoke)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.revoke"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v2/applications/{packageName}/reviews/{reviewId}:reply", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reply)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.reply"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/externallyHosted", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/externallyHosted)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apks.addexternallyhosted"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deobfuscationFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.deobfuscationfiles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/bundles)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.bundles.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.images.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}:commit", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:commit)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.commit"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}:validate", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:validate)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:refund)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.orders.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:cancel)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:defer", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:defer)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.defer"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:refund", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:refund)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:revoke", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/purchases/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tokens/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:revoke)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.purchases.subscriptions.revoke"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reviews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:reply)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.reviews.reply"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/user", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/user)$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers)$`), ServiceName: "google.reseller", ResourceName: "reseller.customers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/activate", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/activate)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.activate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/changePlan", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changePlan)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.changePlan"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeRenewalSettings)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.changeRenewalSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/changeSeats", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changeSeats)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.changeSeats"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/startPaidService", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/startPaidService)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.startPaidService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/customers/{customerId}/subscriptions/{subscriptionId}/suspend", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/suspend)$`), ServiceName: "google.reseller", ResourceName: "reseller.subscriptions.suspend"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/resellernotify/register", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/resellernotify/register)$`), ServiceName: "google.reseller", ResourceName: "reseller.resellernotify.register"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/apps/reseller/v1/resellernotify/unregister", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/resellernotify/unregister)$`), ServiceName: "google.reseller", ResourceName: "reseller.resellernotify.unregister"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/appstate/v1/states/{stateKey}/clear", PathMatcher: regexp.MustCompile(`^(/appstate/v1/states/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clear)$`), ServiceName: "google.appstate", ResourceName: "appstate.states.clear"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/insertAll)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tabledata.insertAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/jobs", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/jobs/{jobId}/cancel", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/bigquery/v2/projects/{projectId}/queries", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/queries)$`), ServiceName: "google.bigquery", ResourceName: "bigquery.jobs.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/pages", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/pages", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}/publish", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publish)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.publish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}/revert", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revert)$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/approve)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.approve"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/approve)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.approve"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removecontent)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.removeContent"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removecontent)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.removeContent"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/spam)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.markAsSpam"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/spam)$`), ServiceName: "google.blogger", ResourceName: "blogger.comments.markAsSpam"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/publish", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publish)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.publish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/publish", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publish)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.publish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/revert", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revert)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}/revert", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revert)$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/cloudloading/addBook", PathMatcher: regexp.MustCompile(`^(/books/v1/cloudloading/addBook)$`), ServiceName: "google.books", ResourceName: "books.cloudloading.addBook"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/cloudloading/deleteBook", PathMatcher: regexp.MustCompile(`^(/books/v1/cloudloading/deleteBook)$`), ServiceName: "google.books", ResourceName: "books.cloudloading.deleteBook"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/cloudloading/updateBook", PathMatcher: regexp.MustCompile(`^(/books/v1/cloudloading/updateBook)$`), ServiceName: "google.books", ResourceName: "books.cloudloading.updateBook"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/familysharing/share", PathMatcher: regexp.MustCompile(`^(/books/v1/familysharing/share)$`), ServiceName: "google.books", ResourceName: "books.familysharing.share"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/familysharing/unshare", PathMatcher: regexp.MustCompile(`^(/books/v1/familysharing/unshare)$`), ServiceName: "google.books", ResourceName: "books.familysharing.unshare"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/myconfig/releaseDownloadAccess", PathMatcher: regexp.MustCompile(`^(/books/v1/myconfig/releaseDownloadAccess)$`), ServiceName: "google.books", ResourceName: "books.myconfig.releaseDownloadAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/myconfig/requestAccess", PathMatcher: regexp.MustCompile(`^(/books/v1/myconfig/requestAccess)$`), ServiceName: "google.books", ResourceName: "books.myconfig.requestAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/myconfig/syncVolumeLicenses", PathMatcher: regexp.MustCompile(`^(/books/v1/myconfig/syncVolumeLicenses)$`), ServiceName: "google.books", ResourceName: "books.myconfig.syncVolumeLicenses"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/myconfig/updateUserSettings", PathMatcher: regexp.MustCompile(`^(/books/v1/myconfig/updateUserSettings)$`), ServiceName: "google.books", ResourceName: "books.myconfig.updateUserSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/annotations", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/annotations)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.annotations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/annotations/summary", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/annotations/summary)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.annotations.summary"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}/addVolume", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addVolume)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.addVolume"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}/clearVolumes", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clearVolumes)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.clearVolumes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}/moveVolume", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveVolume)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.moveVolume"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/bookshelves/{shelf}/removeVolume", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/bookshelves/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeVolume)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.bookshelves.removeVolume"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/mylibrary/readingpositions/{volumeId}/setPosition", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/readingpositions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setPosition)$`), ServiceName: "google.books", ResourceName: "books.mylibrary.readingpositions.setPosition"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/promooffer/accept", PathMatcher: regexp.MustCompile(`^(/books/v1/promooffer/accept)$`), ServiceName: "google.books", ResourceName: "books.promooffer.accept"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/promooffer/dismiss", PathMatcher: regexp.MustCompile(`^(/books/v1/promooffer/dismiss)$`), ServiceName: "google.books", ResourceName: "books.promooffer.dismiss"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/books/v1/volumes/recommended/rate", PathMatcher: regexp.MustCompile(`^(/books/v1/volumes/recommended/rate)$`), ServiceName: "google.books", ResourceName: "books.volumes.recommended.rate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars)$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl/watch", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/watch)$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/clear", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clear)$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.clear"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/events", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/import", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/import)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.import"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/quickAdd", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/quickAdd)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.quickAdd"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/watch", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/watch)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}/move", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/move)$`), ServiceName: "google.calendar", ResourceName: "calendar.events.move"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/channels/stop", PathMatcher: regexp.MustCompile(`^(/calendar/v3/channels/stop)$`), ServiceName: "google.calendar", ResourceName: "calendar.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/freeBusy", PathMatcher: regexp.MustCompile(`^(/calendar/v3/freeBusy)$`), ServiceName: "google.calendar", ResourceName: "calendar.freebusy.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/users/me/calendarList", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList)$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/users/me/calendarList/watch", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList/watch)$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/calendar/v3/users/me/settings/watch", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/settings/watch)$`), ServiceName: "google.calendar", ResourceName: "calendar.settings.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/metricDescriptors", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/metricDescriptors)$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.metricDescriptors.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/cloudmonitoring/v2beta2/projects/{project}/timeseries:write", PathMatcher: regexp.MustCompile(`^(/cloudmonitoring/v2beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/timeseries:write)$`), ServiceName: "google.cloudmonitoring", ResourceName: "cloudmonitoring.timeseries.write"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{groupName}/addMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.addMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{groupName}/removeMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.removeMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/groups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{user}/addPublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.addPublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/global/users/{user}/removePublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.removePublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/zones/{zone}/authorizedKeysView/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedKeysView/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getAuthorizedKeysView"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/alpha/projects/{project}/zones/{zone}/linuxAccountViews", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/linuxAccountViews)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getLinuxAccountViews"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups/{groupName}/addMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.addMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/groups/{groupName}/removeMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.removeMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users/{user}/addPublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.addPublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/global/users/{user}/removePublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.removePublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/zones/{zone}/authorizedKeysView/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedKeysView/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getAuthorizedKeysView"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/beta/projects/{project}/zones/{zone}/linuxAccountViews", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/linuxAccountViews)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getLinuxAccountViews"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{groupName}/addMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.addMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{groupName}/removeMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.removeMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/groups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{user}/addPublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.addPublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/global/users/{user}/removePublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.removePublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/zones/{zone}/authorizedKeysView/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedKeysView/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getAuthorizedKeysView"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_alpha/projects/{project}/zones/{zone}/linuxAccountViews", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/linuxAccountViews)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getLinuxAccountViews"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups/{groupName}/addMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.addMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/groups/{groupName}/removeMember", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeMember)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.groups.removeMember"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users/{user}/addPublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.addPublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/global/users/{user}/removePublicKey", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePublicKey)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.users.removePublicKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/zones/{zone}/authorizedKeysView/{user}", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/authorizedKeysView/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getAuthorizedKeysView"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/clouduseraccounts/vm_beta/projects/{project}/zones/{zone}/linuxAccountViews", PathMatcher: regexp.MustCompile(`^(/clouduseraccounts/vm_beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/linuxAccountViews)$`), ServiceName: "google.clouduseraccounts", ResourceName: "clouduseraccounts.linux.getLinuxAccountViews"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/disableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/disableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/enableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/enableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/addresses/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/addresses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}/addSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.addSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}/deleteSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.deleteSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}/addSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.addSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}/deleteSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.deleteSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}/setSecurityPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSecurityPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.setSecurityPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/forwardingRules/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/images/{image}/deprecate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deprecate)$`), ServiceName: "google.compute", ResourceName: "compute.images.deprecate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/images/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.images.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/images/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.images.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/images/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.images.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/instanceTemplates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/interconnectLocations/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnectLocations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectLocations.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/interconnects/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/licenseCodes/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/licenseCodes/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/licenses/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/licenses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}/addPeering", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.addPeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}/removePeering", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.removePeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{network}/switchToCustomMode", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/switchToCustomMode)$`), ServiceName: "google.compute", ResourceName: "compute.networks.switchToCustomMode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/networks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.networks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/operations/{operation}/wait", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/wait)$`), ServiceName: "google.compute", ResourceName: "compute.globalOperations.wait"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/routes/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.routes.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}/addRule", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.addRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}/patchRule", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/patchRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.patchRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/securityPolicies/{securityPolicy}/removeRule", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.removeRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/snapshots/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/sslCertificates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/sslPolicies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setQuicOverride", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setQuicOverride)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setQuicOverride"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}/invalidateCache", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invalidateCache)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.invalidateCache"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}/validate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/validate)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/listXpnHosts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listXpnHosts)$`), ServiceName: "google.compute", ResourceName: "compute.projects.listXpnHosts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/moveDisk", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveDisk)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/moveInstance", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveInstance)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/addresses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/commitments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/disks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/forwardingRules/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/applyUpdatesToInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/applyUpdatesToInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.applyUpdatesToInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/deletePerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deletePerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.deletePerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listPerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listPerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.listPerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setAutoHealingPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setAutoHealingPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setAutoHealingPolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/updatePerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updatePerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.updatePerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/interconnectAttachments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/nodeTemplates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/operations/{operation}/wait", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/wait)$`), ServiceName: "google.compute", ResourceName: "compute.regionOperations.wait"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/resourcePolicies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourcePolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.resourcePolicies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.routers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}/preview", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/preview)$`), ServiceName: "google.compute", ResourceName: "compute.routers.preview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expandIpCidrRange)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.expandIpCidrRange"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setPrivateIpGoogleAccess)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.setPrivateIpGoogleAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetHttpProxies/{targetHttpProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.regionTargetHttpProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/addInstance", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/removeInstance", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetPools/{targetPool}/setBackup", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackup)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.setBackup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/targetVpnGateways/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{urlMap}/validate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/validate)$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnGateways/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.vpnGateways.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/vpnTunnels/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/setCommonInstanceMetadata", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setCommonInstanceMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setCommonInstanceMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/setDefaultNetworkTier", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDefaultNetworkTier)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setDefaultNetworkTier"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/setDefaultServiceAccount", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDefaultServiceAccount)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setDefaultServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/setUsageExportBucket", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUsageExportBucket)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setUsageExportBucket"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/targetHttpProxies/{targetHttpProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}/addResourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addResourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.disks.addResourcePolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.disks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}/removeResourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeResourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.disks.removeResourcePolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.disks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.disks.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.disks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/disks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.disks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/hosts/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hosts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.hosts.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/applyUpdatesToInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/applyUpdatesToInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.applyUpdatesToInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deletePerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deletePerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.deletePerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listPerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listPerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.listPerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resizeAdvanced", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resizeAdvanced)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.resizeAdvanced"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setAutoHealingPolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setAutoHealingPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setAutoHealingPolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/updatePerInstanceConfigs", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updatePerInstanceConfigs)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.updatePerInstanceConfigs"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/addInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.addInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/removeInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.removeInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/addAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.addAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/addResourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addResourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.instances.addResourcePolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/attachDisk", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.attachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.deleteAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/detachDisk", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/detachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.detachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/removeResourcePolicies", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeResourcePolicies)$`), ServiceName: "google.compute", ResourceName: "compute.instances.removeResourcePolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/reset", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.compute", ResourceName: "compute.instances.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/resume", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resume)$`), ServiceName: "google.compute", ResourceName: "compute.instances.resume"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDiskAutoDelete)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDiskAutoDelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineResources)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setMachineType", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineType)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineType"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setMetadata", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMinCpuPlatform)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMinCpuPlatform"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setScheduling", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setScheduling)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setScheduling"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setServiceAccount)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/setTags", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTags)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setTags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/simulateMaintenanceEvent)$`), ServiceName: "google.compute", ResourceName: "compute.instances.simulateMaintenanceEvent"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/start", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/start)$`), ServiceName: "google.compute", ResourceName: "compute.instances.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/startWithEncryptionKey)$`), ServiceName: "google.compute", ResourceName: "compute.instances.startWithEncryptionKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/stop", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.compute", ResourceName: "compute.instances.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/suspend", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/suspend)$`), ServiceName: "google.compute", ResourceName: "compute.instances.suspend"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDeletionProtection)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDeletionProtection"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instances/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instances.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{networkEndpointGroup}/attachNetworkEndpoints", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachNetworkEndpoints)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.attachNetworkEndpoints"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{networkEndpointGroup}/detachNetworkEndpoints", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/detachNetworkEndpoints)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.detachNetworkEndpoints"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{networkEndpointGroup}/listNetworkEndpoints", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listNetworkEndpoints)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.listNetworkEndpoints"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/networkEndpointGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/networkEndpointGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.networkEndpointGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/addNodes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addNodes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.addNodes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/deleteNodes", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteNodes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.deleteNodes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/setNodeTemplate", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNodeTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.setNodeTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/nodeGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/operations/{operation}/wait", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/operations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/wait)$`), ServiceName: "google.compute", ResourceName: "compute.zoneOperations.wait"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/targetInstances/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/disableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/disableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/enableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/enableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/addresses/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/addresses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}/addSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.addSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}/deleteSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.deleteSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}/addSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.addSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}/deleteSignedUrlKey", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteSignedUrlKey)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.deleteSignedUrlKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}/setSecurityPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSecurityPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.setSecurityPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/firewalls/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/forwardingRules/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/images/{image}/deprecate", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deprecate)$`), ServiceName: "google.compute", ResourceName: "compute.images.deprecate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/images/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.images.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/images/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.images.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/instanceTemplates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/interconnects/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/interconnects/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}/addPeering", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.addPeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}/removePeering", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.removePeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/networks/{network}/switchToCustomMode", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/switchToCustomMode)$`), ServiceName: "google.compute", ResourceName: "compute.networks.switchToCustomMode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/networks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.networks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/routes/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.routes.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}/addRule", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.addRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}/patchRule", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/patchRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.patchRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/securityPolicies/{securityPolicy}/removeRule", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/securityPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeRule)$`), ServiceName: "google.compute", ResourceName: "compute.securityPolicies.removeRule"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/snapshots/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/snapshots/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/sslCertificates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/sslPolicies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setQuicOverride", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setQuicOverride)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setQuicOverride"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}/invalidateCache", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invalidateCache)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.invalidateCache"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}/validate", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/validate)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/listXpnHosts", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listXpnHosts)$`), ServiceName: "google.compute", ResourceName: "compute.projects.listXpnHosts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/moveDisk", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveDisk)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/moveInstance", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveInstance)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/addresses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/disks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/forwardingRules/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setAutoHealingPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setAutoHealingPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setAutoHealingPolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/interconnectAttachments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/nodeTemplates/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeTemplates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.nodeTemplates.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.routers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}/preview", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/preview)$`), ServiceName: "google.compute", ResourceName: "compute.routers.preview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expandIpCidrRange)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.expandIpCidrRange"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setPrivateIpGoogleAccess)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.setPrivateIpGoogleAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/addInstance", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/removeInstance", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetPools/{targetPool}/setBackup", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackup)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.setBackup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/targetVpnGateways/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/vpnTunnels/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/setCommonInstanceMetadata", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setCommonInstanceMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setCommonInstanceMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/setDefaultNetworkTier", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDefaultNetworkTier)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setDefaultNetworkTier"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/setUsageExportBucket", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUsageExportBucket)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setUsageExportBucket"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/targetHttpProxies/{targetHttpProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.disks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.disks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.disks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/disks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.disks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resizeAdvanced", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resizeAdvanced)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.resizeAdvanced"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setAutoHealingPolicies", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setAutoHealingPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setAutoHealingPolicies"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/addInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.addInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/removeInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.removeInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/addAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.addAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/attachDisk", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.attachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.deleteAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/detachDisk", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/detachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.detachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/reset", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.compute", ResourceName: "compute.instances.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDiskAutoDelete)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDiskAutoDelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineResources)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setMachineType", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineType)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineType"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setMetadata", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMinCpuPlatform)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMinCpuPlatform"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setScheduling", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setScheduling)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setScheduling"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setServiceAccount)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/setTags", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTags)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setTags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/simulateMaintenanceEvent)$`), ServiceName: "google.compute", ResourceName: "compute.instances.simulateMaintenanceEvent"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/start", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/start)$`), ServiceName: "google.compute", ResourceName: "compute.instances.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/startWithEncryptionKey)$`), ServiceName: "google.compute", ResourceName: "compute.instances.startWithEncryptionKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/stop", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.compute", ResourceName: "compute.instances.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDeletionProtection)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDeletionProtection"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instances/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.instances.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/addNodes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addNodes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.addNodes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/deleteNodes", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteNodes)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.deleteNodes"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{nodeGroup}/setNodeTemplate", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNodeTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.setNodeTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/nodeGroups/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/nodeGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.nodeGroups.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/targetInstances/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/disableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/disableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.disableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/enableXpnHost", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnHost)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnHost"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/enableXpnResource", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/enableXpnResource)$`), ServiceName: "google.compute", ResourceName: "compute.projects.enableXpnResource"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/addresses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.globalAddresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets)$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/firewalls", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls)$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.globalForwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks)$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/images", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images)$`), ServiceName: "google.compute", ResourceName: "compute.images.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/images/{image}/deprecate", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deprecate)$`), ServiceName: "google.compute", ResourceName: "compute.images.deprecate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/images/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.images.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/instanceTemplates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/instanceTemplates)$`), ServiceName: "google.compute", ResourceName: "compute.instanceTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/interconnects", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/interconnects)$`), ServiceName: "google.compute", ResourceName: "compute.interconnects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/licenseCodes/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenseCodes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.licenseCodes.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/licenses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/licenses/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/licenses/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.licenses.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/networks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks)$`), ServiceName: "google.compute", ResourceName: "compute.networks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}/addPeering", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addPeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.addPeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}/removePeering", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removePeering)$`), ServiceName: "google.compute", ResourceName: "compute.networks.removePeering"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/networks/{network}/switchToCustomMode", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/networks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/switchToCustomMode)$`), ServiceName: "google.compute", ResourceName: "compute.networks.switchToCustomMode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/routes", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/routes)$`), ServiceName: "google.compute", ResourceName: "compute.routes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/snapshots/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/snapshots/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.snapshots.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/sslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.sslCertificates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/sslPolicies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/sslPolicies)$`), ServiceName: "google.compute", ResourceName: "compute.sslPolicies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setQuicOverride", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setQuicOverride)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setQuicOverride"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetHttpsProxies/{targetHttpsProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetSslProxies/{targetSslProxy}/setSslPolicy", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetSslProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslPolicy)$`), ServiceName: "google.compute", ResourceName: "compute.targetSslProxies.setSslPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setBackendService", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackendService)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setBackendService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/targetTcpProxies/{targetTcpProxy}/setProxyHeader", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/targetTcpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setProxyHeader)$`), ServiceName: "google.compute", ResourceName: "compute.targetTcpProxies.setProxyHeader"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}/invalidateCache", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/invalidateCache)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.invalidateCache"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}/validate", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/validate)$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.validate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/listXpnHosts", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listXpnHosts)$`), ServiceName: "google.compute", ResourceName: "compute.projects.listXpnHosts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/moveDisk", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveDisk)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/moveInstance", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/moveInstance)$`), ServiceName: "google.compute", ResourceName: "compute.projects.moveInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/addresses", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addresses)$`), ServiceName: "google.compute", ResourceName: "compute.addresses.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/commitments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/commitments)$`), ServiceName: "google.compute", ResourceName: "compute.regionCommitments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/disks/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.compute", ResourceName: "compute.regionDisks.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/forwardingRules", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/forwardingRules/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTarget)$`), ServiceName: "google.compute", ResourceName: "compute.forwardingRules.setTarget"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/interconnectAttachments)$`), ServiceName: "google.compute", ResourceName: "compute.interconnectAttachments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers)$`), ServiceName: "google.compute", ResourceName: "compute.routers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}/preview", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/preview)$`), ServiceName: "google.compute", ResourceName: "compute.routers.preview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expandIpCidrRange)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.expandIpCidrRange"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subnetworks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setPrivateIpGoogleAccess)$`), ServiceName: "google.compute", ResourceName: "compute.subnetworks.setPrivateIpGoogleAccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/addInstance", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.addInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/getHealth", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getHealth)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.getHealth"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeHealthCheck)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeHealthCheck"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/removeInstance", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstance)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.removeInstance"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetPools/{targetPool}/setBackup", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetPools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setBackup)$`), ServiceName: "google.compute", ResourceName: "compute.targetPools.setBackup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/targetVpnGateways", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetVpnGateways)$`), ServiceName: "google.compute", ResourceName: "compute.targetVpnGateways.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/vpnTunnels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/vpnTunnels)$`), ServiceName: "google.compute", ResourceName: "compute.vpnTunnels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/setCommonInstanceMetadata", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setCommonInstanceMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setCommonInstanceMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/setUsageExportBucket", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUsageExportBucket)$`), ServiceName: "google.compute", ResourceName: "compute.projects.setUsageExportBucket"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/targetHttpProxies/{targetHttpProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setSslCertificates)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setSslCertificates"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetHttpsProxies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setUrlMap)$`), ServiceName: "google.compute", ResourceName: "compute.targetHttpsProxies.setUrlMap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks)$`), ServiceName: "google.compute", ResourceName: "compute.disks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createSnapshot)$`), ServiceName: "google.compute", ResourceName: "compute.disks.createSnapshot"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/resize", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.disks.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/disks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.disks.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listManagedInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.listManagedInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/addInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.addInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/listInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.listInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/removeInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeInstances)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.removeInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instanceGroup}/setNamedPorts", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setNamedPorts)$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroups.setNamedPorts"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.compute", ResourceName: "compute.instances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/addAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.addAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/attachDisk", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.attachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.deleteAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/detachDisk", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/detachDisk)$`), ServiceName: "google.compute", ResourceName: "compute.instances.detachDisk"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/reset", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.compute", ResourceName: "compute.instances.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDiskAutoDelete)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDiskAutoDelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setLabels", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLabels)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setLabels"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineResources)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineType", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMachineType)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMachineType"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMetadata", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMetadata)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setMinCpuPlatform)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setMinCpuPlatform"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setScheduling", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setScheduling)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setScheduling"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setServiceAccount)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setServiceAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setTags", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTags)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setTags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/start", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/start)$`), ServiceName: "google.compute", ResourceName: "compute.instances.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/startWithEncryptionKey)$`), ServiceName: "google.compute", ResourceName: "compute.instances.startWithEncryptionKey"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/stop", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.compute", ResourceName: "compute.instances.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateAccessConfig)$`), ServiceName: "google.compute", ResourceName: "compute.instances.updateAccessConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDeletionProtection)$`), ServiceName: "google.compute", ResourceName: "compute.instances.setDeletionProtection"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/targetInstances", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetInstances)$`), ServiceName: "google.compute", ResourceName: "compute.targetInstances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/consumersurveys/v2/surveys", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/consumersurveys/v2/surveys/{resourceId}/start", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/start)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/consumersurveys/v2/surveys/{resourceId}/stop", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/accounts/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/accounts/batch)$`), ServiceName: "google.content", ResourceName: "content.accounts.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/accountstatuses/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/accountstatuses/batch)$`), ServiceName: "google.content", ResourceName: "content.accountstatuses.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/accounttax/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/accounttax/batch)$`), ServiceName: "google.content", ResourceName: "content.accounttax.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/datafeeds/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/datafeeds/batch)$`), ServiceName: "google.content", ResourceName: "content.datafeeds.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/datafeedstatuses/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/datafeedstatuses/batch)$`), ServiceName: "google.content", ResourceName: "content.datafeedstatuses.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/inventory/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/inventory/batch)$`), ServiceName: "google.content", ResourceName: "content.inventory.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/liasettings/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/liasettings/batch)$`), ServiceName: "google.content", ResourceName: "content.liasettings.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/orders/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/orders/batch)$`), ServiceName: "google.content", ResourceName: "content.orders.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/pos/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/pos/batch)$`), ServiceName: "google.content", ResourceName: "content.pos.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/products/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/products/batch)$`), ServiceName: "google.content", ResourceName: "content.products.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/productstatuses/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/productstatuses/batch)$`), ServiceName: "google.content", ResourceName: "content.productstatuses.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/shippingsettings/batch", PathMatcher: regexp.MustCompile(`^(/content/v2/shippingsettings/batch)$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/accounts", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.content", ResourceName: "content.accounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/accounts/{accountId}/claimwebsite", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/claimwebsite)$`), ServiceName: "google.content", ResourceName: "content.accounts.claimwebsite"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/datafeeds", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds)$`), ServiceName: "google.content", ResourceName: "content.datafeeds.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/datafeeds/{datafeedId}/fetchNow", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/fetchNow)$`), ServiceName: "google.content", ResourceName: "content.datafeeds.fetchnow"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/inventory/{storeCode}/products/{productId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventory/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.inventory.set"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}/requestgmbaccess", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/requestgmbaccess)$`), ServiceName: "google.content", ResourceName: "content.liasettings.requestgmbaccess"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}/requestinventoryverification/{country}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/requestinventoryverification/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.liasettings.requestinventoryverification"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}/setinventoryverificationcontact", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setinventoryverificationcontact)$`), ServiceName: "google.content", ResourceName: "content.liasettings.setinventoryverificationcontact"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderinvoices/{orderId}/createChargeInvoice", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderinvoices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createChargeInvoice)$`), ServiceName: "google.content", ResourceName: "content.orderinvoices.createchargeinvoice"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderinvoices/{orderId}/createRefundInvoice", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderinvoices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createRefundInvoice)$`), ServiceName: "google.content", ResourceName: "content.orderinvoices.createrefundinvoice"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderpayments/{orderId}/notifyAuthApproved", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyAuthApproved)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyauthapproved"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderpayments/{orderId}/notifyAuthDeclined", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyAuthDeclined)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyauthdeclined"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderpayments/{orderId}/notifyCharge", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyCharge)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifycharge"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orderpayments/{orderId}/notifyRefund", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyRefund)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyrefund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/acknowledge", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acknowledge)$`), ServiceName: "google.content", ResourceName: "content.orders.acknowledge"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/cancel", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.content", ResourceName: "content.orders.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/cancelLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancelLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.cancellineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/inStoreRefundLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inStoreRefundLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.instorerefundlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/refund", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/refund)$`), ServiceName: "google.content", ResourceName: "content.orders.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/rejectReturnLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rejectReturnLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.rejectreturnlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/returnLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/returnLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.returnlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/returnRefundLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/returnRefundLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.returnrefundlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/setLineItemMetadata", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLineItemMetadata)$`), ServiceName: "google.content", ResourceName: "content.orders.setlineitemmetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/shipLineItems", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shipLineItems)$`), ServiceName: "google.content", ResourceName: "content.orders.shiplineitems"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/updateLineItemShippingDetails", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateLineItemShippingDetails)$`), ServiceName: "google.content", ResourceName: "content.orders.updatelineitemshippingdetails"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/updateMerchantOrderId", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateMerchantOrderId)$`), ServiceName: "google.content", ResourceName: "content.orders.updatemerchantorderid"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/orders/{orderId}/updateShipment", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateShipment)$`), ServiceName: "google.content", ResourceName: "content.orders.updateshipment"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/inventory", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inventory)$`), ServiceName: "google.content", ResourceName: "content.pos.inventory"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/sale", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sale)$`), ServiceName: "google.content", ResourceName: "content.pos.sale"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/pos/{targetMerchantId}/store", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/store)$`), ServiceName: "google.content", ResourceName: "content.pos.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/products", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/products)$`), ServiceName: "google.content", ResourceName: "content.products.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/testorders", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testorders)$`), ServiceName: "google.content", ResourceName: "content.orders.createtestorder"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2/{merchantId}/testorders/{orderId}/advance", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testorders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advance)$`), ServiceName: "google.content", ResourceName: "content.orders.advancetestorder"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/orders/batch", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/orders/batch)$`), ServiceName: "google.content", ResourceName: "content.orders.custombatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderinvoices/{orderId}/createChargeInvoice", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderinvoices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createChargeInvoice)$`), ServiceName: "google.content", ResourceName: "content.orderinvoices.createchargeinvoice"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderinvoices/{orderId}/createRefundInvoice", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderinvoices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createRefundInvoice)$`), ServiceName: "google.content", ResourceName: "content.orderinvoices.createrefundinvoice"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderpayments/{orderId}/notifyAuthApproved", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyAuthApproved)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyauthapproved"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderpayments/{orderId}/notifyAuthDeclined", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyAuthDeclined)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyauthdeclined"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderpayments/{orderId}/notifyCharge", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyCharge)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifycharge"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orderpayments/{orderId}/notifyRefund", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orderpayments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifyRefund)$`), ServiceName: "google.content", ResourceName: "content.orderpayments.notifyrefund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/acknowledge", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acknowledge)$`), ServiceName: "google.content", ResourceName: "content.orders.acknowledge"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/cancel", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.content", ResourceName: "content.orders.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/cancelLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancelLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.cancellineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/inStoreRefundLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inStoreRefundLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.instorerefundlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/refund", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/refund)$`), ServiceName: "google.content", ResourceName: "content.orders.refund"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/rejectReturnLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rejectReturnLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.rejectreturnlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/returnLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/returnLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.returnlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/returnRefundLineItem", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/returnRefundLineItem)$`), ServiceName: "google.content", ResourceName: "content.orders.returnrefundlineitem"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/setLineItemMetadata", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setLineItemMetadata)$`), ServiceName: "google.content", ResourceName: "content.orders.setlineitemmetadata"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/shipLineItems", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shipLineItems)$`), ServiceName: "google.content", ResourceName: "content.orders.shiplineitems"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/updateLineItemShippingDetails", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateLineItemShippingDetails)$`), ServiceName: "google.content", ResourceName: "content.orders.updatelineitemshippingdetails"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/updateMerchantOrderId", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateMerchantOrderId)$`), ServiceName: "google.content", ResourceName: "content.orders.updatemerchantorderid"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/orders/{orderId}/updateShipment", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateShipment)$`), ServiceName: "google.content", ResourceName: "content.orders.updateshipment"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/testorders", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testorders)$`), ServiceName: "google.content", ResourceName: "content.orders.createtestorder"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/content/v2sandbox/{merchantId}/testorders/{orderId}/advance", PathMatcher: regexp.MustCompile(`^(/content/v2sandbox/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testorders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advance)$`), ServiceName: "google.content", ResourceName: "content.orders.advancetestorder"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/cancelPreview", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancelPreview)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.cancelPreview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}/stop", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/cancelPreview", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancelPreview)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.cancelPreview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}/stop", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/cancelPreview", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancelPreview)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.cancelPreview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}/stop", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{resource}/setIamPolicy", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setIamPolicy)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{resource}/testIamPermissions", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testIamPermissions)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.testIamPermissions"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders)$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/conversions/batchinsert", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchinsert)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchinsert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeAssets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/dimensionvalues/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dimensionvalues/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dimensionValues.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities/generatetag", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/generatetag)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.generatetag"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements/generatetags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/generatetags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.generatetags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/compatiblefields/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/compatiblefields/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.compatibleFields.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}/run", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/run)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.run"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/conversions/batchinsert", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchinsert)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchinsert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/conversions/batchupdate", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchupdate)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchupdate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeAssets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/dimensionvalues/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dimensionvalues/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dimensionValues.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities/generatetag", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/generatetag)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.generatetag"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements/generatetags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/generatetags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.generatetags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/compatiblefields/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/compatiblefields/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.compatibleFields.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}/run", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/run)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.run"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/conversions/batchinsert", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchinsert)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchinsert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/conversions/batchupdate", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchupdate)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchupdate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeAssets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/dimensionvalues/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dimensionvalues/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dimensionValues.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities/generatetag", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/generatetag)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.generatetag"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements/generatetags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/generatetags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.generatetags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/compatiblefields/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/compatiblefields/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.compatibleFields.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}/run", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/run)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.run"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaignCreativeAssociations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaignCreativeAssociations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/conversions/batchinsert", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchinsert)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchinsert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/conversions/batchupdate", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/conversions/batchupdate)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.conversions.batchupdate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeAssets)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeAssets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/dimensionvalues/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dimensionvalues/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dimensionValues.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/directorySites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/directorySites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.directorySites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/dynamicTargetingKeys", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dynamicTargetingKeys)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.dynamicTargetingKeys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities/generatetag", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities/generatetag)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.generatetag"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements/generatetags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements/generatetags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.generatetags"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/compatiblefields/query", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/compatiblefields/query)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.compatibleFields.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}/run", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/run)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.run"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sizes", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sizes)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sizes.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v1/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones)$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}/changes", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/changes)$`), ServiceName: "google.dns", ResourceName: "dns.changes.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclickbidmanager/v1/lineitems/downloadlineitems", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/lineitems/downloadlineitems)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.lineitems.downloadlineitems"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclickbidmanager/v1/lineitems/uploadlineitems", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/lineitems/uploadlineitems)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.lineitems.uploadlineitems"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclickbidmanager/v1/query", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/query)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.queries.createquery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclickbidmanager/v1/query/{queryId}", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/query/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.queries.runquery"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclickbidmanager/v1/sdf/download", PathMatcher: regexp.MustCompile(`^(/doubleclickbidmanager/v1/sdf/download)$`), ServiceName: "google.doubleclickbidmanager", ResourceName: "doubleclickbidmanager.sdf.download"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclicksearch/v2/conversion", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/conversion)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.conversion.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclicksearch/v2/conversion/updateAvailability", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/conversion/updateAvailability)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.conversion.updateAvailability"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclicksearch/v2/reports", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/reports)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.reports.request"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/doubleclicksearch/v2/reports/generate", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/reports/generate)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.reports.generate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/changes/watch", PathMatcher: regexp.MustCompile(`^(/drive/v2/changes/watch)$`), ServiceName: "google.drive", ResourceName: "drive.changes.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/channels/stop", PathMatcher: regexp.MustCompile(`^(/drive/v2/channels/stop)$`), ServiceName: "google.drive", ResourceName: "drive.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files", PathMatcher: regexp.MustCompile(`^(/drive/v2/files)$`), ServiceName: "google.drive", ResourceName: "drive.files.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/comments", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.drive", ResourceName: "drive.comments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies)$`), ServiceName: "google.drive", ResourceName: "drive.replies.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/copy", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copy)$`), ServiceName: "google.drive", ResourceName: "drive.files.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/parents", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/parents)$`), ServiceName: "google.drive", ResourceName: "drive.parents.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/permissions", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.drive", ResourceName: "drive.permissions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/properties", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties)$`), ServiceName: "google.drive", ResourceName: "drive.properties.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/touch", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/touch)$`), ServiceName: "google.drive", ResourceName: "drive.files.touch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/trash", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trash)$`), ServiceName: "google.drive", ResourceName: "drive.files.trash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/untrash", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/untrash)$`), ServiceName: "google.drive", ResourceName: "drive.files.untrash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{fileId}/watch", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/watch)$`), ServiceName: "google.drive", ResourceName: "drive.files.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/files/{folderId}/children", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/children)$`), ServiceName: "google.drive", ResourceName: "drive.children.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v2/teamdrives", PathMatcher: regexp.MustCompile(`^(/drive/v2/teamdrives)$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/changes/watch", PathMatcher: regexp.MustCompile(`^(/drive/v3/changes/watch)$`), ServiceName: "google.drive", ResourceName: "drive.changes.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/channels/stop", PathMatcher: regexp.MustCompile(`^(/drive/v3/channels/stop)$`), ServiceName: "google.drive", ResourceName: "drive.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files", PathMatcher: regexp.MustCompile(`^(/drive/v3/files)$`), ServiceName: "google.drive", ResourceName: "drive.files.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files/{fileId}/comments", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.drive", ResourceName: "drive.comments.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files/{fileId}/comments/{commentId}/replies", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies)$`), ServiceName: "google.drive", ResourceName: "drive.replies.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files/{fileId}/copy", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copy)$`), ServiceName: "google.drive", ResourceName: "drive.files.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files/{fileId}/permissions", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.drive", ResourceName: "drive.permissions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/files/{fileId}/watch", PathMatcher: regexp.MustCompile(`^(/drive/v3/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/watch)$`), ServiceName: "google.drive", ResourceName: "drive.files.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/drive/v3/teamdrives", PathMatcher: regexp.MustCompile(`^(/drive/v3/teamdrives)$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fitness/v1/users/{userId}/dataSources", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources)$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fitness/v1/users/{userId}/dataset:aggregate", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataset:aggregate)$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataset.aggregate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/query", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/query)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.query.sql"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/import", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/import)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.importTable"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/{tableId}/copy", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copy)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/{tableId}/import", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/import)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.importRows"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/query", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/query)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.query.sql"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/import", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/import)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.importTable"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/copy", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copy)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/import", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/import)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.importRows"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/refetch", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/refetch)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.refetchSheet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/replace", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replace)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.replaceRows"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates)$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/achievements/updateMultiple", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements/updateMultiple)$`), ServiceName: "google.games", ResourceName: "games.achievements.updateMultiple"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/achievements/{achievementId}/increment", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/increment)$`), ServiceName: "google.games", ResourceName: "games.achievements.increment"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/achievements/{achievementId}/reveal", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reveal)$`), ServiceName: "google.games", ResourceName: "games.achievements.reveal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/achievements/{achievementId}/setStepsAtLeast", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setStepsAtLeast)$`), ServiceName: "google.games", ResourceName: "games.achievements.setStepsAtLeast"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/achievements/{achievementId}/unlock", PathMatcher: regexp.MustCompile(`^(/games/v1/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/unlock)$`), ServiceName: "google.games", ResourceName: "games.achievements.unlock"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/applications/played", PathMatcher: regexp.MustCompile(`^(/games/v1/applications/played)$`), ServiceName: "google.games", ResourceName: "games.applications.played"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/events", PathMatcher: regexp.MustCompile(`^(/games/v1/events)$`), ServiceName: "google.games", ResourceName: "games.events.record"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/leaderboards/scores", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards/scores)$`), ServiceName: "google.games", ResourceName: "games.scores.submitMultiple"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/leaderboards/{leaderboardId}/scores", PathMatcher: regexp.MustCompile(`^(/games/v1/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scores)$`), ServiceName: "google.games", ResourceName: "games.scores.submit"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/pushtokens/remove", PathMatcher: regexp.MustCompile(`^(/games/v1/pushtokens/remove)$`), ServiceName: "google.games", ResourceName: "games.pushtokens.remove"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/quests/{questId}/accept", PathMatcher: regexp.MustCompile(`^(/games/v1/quests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accept)$`), ServiceName: "google.games", ResourceName: "games.quests.accept"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/create", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/create)$`), ServiceName: "google.games", ResourceName: "games.rooms.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/{roomId}/decline", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/decline)$`), ServiceName: "google.games", ResourceName: "games.rooms.decline"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/{roomId}/dismiss", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dismiss)$`), ServiceName: "google.games", ResourceName: "games.rooms.dismiss"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/{roomId}/join", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/join)$`), ServiceName: "google.games", ResourceName: "games.rooms.join"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/{roomId}/leave", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leave)$`), ServiceName: "google.games", ResourceName: "games.rooms.leave"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/rooms/{roomId}/reportstatus", PathMatcher: regexp.MustCompile(`^(/games/v1/rooms/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reportstatus)$`), ServiceName: "google.games", ResourceName: "games.rooms.reportStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/turnbasedmatches/create", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/create)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/rematch", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rematch)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.rematch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1configuration/applications/{applicationId}/achievements", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/achievements)$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1configuration/applications/{applicationId}/leaderboards", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leaderboards)$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1configuration/images/{resourceId}/imageType/{imageType}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/images/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/imageType/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.imageConfigurations.upload"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/achievements/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/achievements/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.achievements.resetAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/achievements/resetAllForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/achievements/resetAllForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.achievements.resetAllForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/achievements/resetMultipleForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/achievements/resetMultipleForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.achievements.resetMultipleForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/achievements/{achievementId}/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.achievements.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/achievements/{achievementId}/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.achievements.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/applications/{applicationId}/players/hidden/{playerId}", PathMatcher: regexp.MustCompile(`^(/games/v1management/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/players/hidden/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.players.hide"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/events/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/events/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.events.resetAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/events/resetAllForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/events/resetAllForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.events.resetAllForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/events/resetMultipleForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/events/resetMultipleForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.events.resetMultipleForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/events/{eventId}/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.events.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/events/{eventId}/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.events.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/leaderboards/{leaderboardId}/scores/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scores/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.scores.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/leaderboards/{leaderboardId}/scores/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/scores/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.scores.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/quests/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/quests/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.quests.resetAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/quests/resetAllForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/quests/resetAllForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.quests.resetAllForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/quests/resetMultipleForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/quests/resetMultipleForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.quests.resetMultipleForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/quests/{questId}/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/quests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.quests.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/quests/{questId}/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/quests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.quests.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/rooms/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/rooms/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.rooms.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/rooms/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/rooms/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.rooms.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/scores/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/scores/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.scores.resetAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/scores/resetAllForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/scores/resetAllForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.scores.resetAllForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/scores/resetMultipleForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/scores/resetMultipleForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.scores.resetMultipleForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/turnbasedmatches/reset", PathMatcher: regexp.MustCompile(`^(/games/v1management/turnbasedmatches/reset)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.turnBasedMatches.reset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/games/v1management/turnbasedmatches/resetForAllPlayers", PathMatcher: regexp.MustCompile(`^(/games/v1management/turnbasedmatches/resetForAllPlayers)$`), ServiceName: "google.gamesManagement", ResourceName: "gamesManagement.turnBasedMatches.resetForAllPlayers"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/drafts", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/drafts/send", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts/send)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.send"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/labels", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/batchDelete", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/batchDelete)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.batchDelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/batchModify", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/batchModify)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.batchModify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/import", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/import)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.import"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/send", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/send)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.send"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/{id}/modify", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modify)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.modify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/{id}/trash", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trash)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.trash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/messages/{id}/untrash", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/messages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/untrash)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.messages.untrash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/filters", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/filters)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.filters.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/forwardingAddresses", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/forwardingAddresses)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.forwardingAddresses.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/smimeInfo)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.smimeInfo.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/smimeInfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setDefault)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.smimeInfo.setDefault"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/verify)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.verify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/stop", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/threads/{id}/modify", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/modify)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.modify"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/threads/{id}/trash", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trash)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.trash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/threads/{id}/untrash", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/threads/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/untrash)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.threads.untrash"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/gmail/v1/users/{userId}/watch", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/watch)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.watch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/groups/v1/groups/{groupId}/archive", PathMatcher: regexp.MustCompile(`^(/groups/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/archive)$`), ServiceName: "google.groupsmigration", ResourceName: "groupsmigration.archive.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/createAuthUri", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/createAuthUri)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.createAuthUri"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/deleteAccount", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/deleteAccount)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.deleteAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/downloadAccount", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/downloadAccount)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.downloadAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/emailLinkSignin", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/emailLinkSignin)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.emailLinkSignin"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/getAccountInfo", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/getAccountInfo)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.getAccountInfo"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/getOobConfirmationCode", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/getOobConfirmationCode)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.getOobConfirmationCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/resetPassword", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/resetPassword)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.resetPassword"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/sendVerificationCode", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/sendVerificationCode)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.sendVerificationCode"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/setAccountInfo", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/setAccountInfo)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.setAccountInfo"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/setProjectConfig", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/setProjectConfig)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.setProjectConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/signOutUser", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/signOutUser)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.signOutUser"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/signupNewUser", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/signupNewUser)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.signupNewUser"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/uploadAccount", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/uploadAccount)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.uploadAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/verifyAssertion", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/verifyAssertion)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.verifyAssertion"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/verifyCustomToken", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/verifyCustomToken)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.verifyCustomToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/verifyPassword", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/verifyPassword)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.verifyPassword"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/identitytoolkit/v3/relyingparty/verifyPhoneNumber", PathMatcher: regexp.MustCompile(`^(/identitytoolkit/v3/relyingparty/verifyPhoneNumber)$`), ServiceName: "google.identitytoolkit", ResourceName: "identitytoolkit.relyingparty.verifyPhoneNumber"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/mirror/v1/accounts/{userToken}/{accountType}/{accountName}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.accounts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/mirror/v1/contacts", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts)$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/mirror/v1/subscriptions", PathMatcher: regexp.MustCompile(`^(/mirror/v1/subscriptions)$`), ServiceName: "google.mirror", ResourceName: "mirror.subscriptions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/mirror/v1/timeline", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline)$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/mirror/v1/timeline/{itemId}/attachments", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/attachments)$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.attachments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/playcustomapp/v1/accounts/{account}/customApps", PathMatcher: regexp.MustCompile(`^(/playcustomapp/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customApps)$`), ServiceName: "google.playcustomapp", ResourceName: "playcustomapp.accounts.customApps.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/plusDomains/v1/activities/{activityId}/comments", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/activities/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.comments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/plusDomains/v1/people/{userId}/activities", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/activities)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.activities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/plusDomains/v1/people/{userId}/circles", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/circles)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/plusDomains/v1/people/{userId}/media/{collection}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/people/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/media/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.media.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.2/hostedmodels/{hostedModelName}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.2/hostedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.hostedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.2/training", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.2/training)$`), ServiceName: "google.prediction", ResourceName: "prediction.training.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.3/hostedmodels/{hostedModelName}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/hostedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.hostedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.3/training", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/training)$`), ServiceName: "google.prediction", ResourceName: "prediction.training.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.3/training/{data}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.training.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.4/hostedmodels/{hostedModelName}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/hostedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.hostedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.4/trainedmodels", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/trainedmodels)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.4/trainedmodels/{id}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.5/hostedmodels/{hostedModelName}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/hostedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.hostedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.5/trainedmodels", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.5/trainedmodels/{id}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.6/projects/{project}/hostedmodels/{hostedModelName}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/hostedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.hostedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/{id}/predict", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/predict)$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.predict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/qpxExpress/v1/trips/search", PathMatcher: regexp.MustCompile(`^(/qpxExpress/v1/trips/search)$`), ServiceName: "google.qpxExpress", ResourceName: "qpxExpress.trips.search"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/replicas/{replicaName}", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replicas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.replicapool", ResourceName: "replicapool.replicas.delete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/replicas/{replicaName}/restart", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replicas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restart)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.replicas.restart"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/resize", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta1/projects/{projectName}/zones/{zone}/pools/{poolName}/updateTemplate", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pools/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/updateTemplate)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.pools.updatetemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/abandonInstances)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.abandonInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/deleteInstances)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.deleteInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/recreateInstances)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.recreateInstances"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resize)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.resize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setInstanceTemplate", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setInstanceTemplate)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.setInstanceTemplate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapool/v1beta2/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools", PathMatcher: regexp.MustCompile(`^(/replicapool/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setTargetPools)$`), ServiceName: "google.replicapool", ResourceName: "replicapool.instanceGroupManagers.setTargetPools"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/cancel", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/pause", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pause)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.pause"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/resume", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resume)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.resume"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/replicapoolupdater/v1beta1/projects/{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/rollback", PathMatcher: regexp.MustCompile(`^(/replicapoolupdater/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollingUpdates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rollback)$`), ServiceName: "google.replicapoolupdater", ResourceName: "replicapoolupdater.rollingUpdates.rollback"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews/{resourceViewName}/addResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.addresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews/{resourceViewName}/removeResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.removeresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/regions/{region}/resourceViews/{resourceViewName}/resources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.regionViews.listresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews/{resourceViewName}/addResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.addresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews/{resourceViewName}/removeResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.removeresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta1/projects/{projectName}/zones/{zone}/resourceViews/{resourceViewName}/resources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.listresources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}/addResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.addResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}/getService", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/getService)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.getService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}/removeResources", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/removeResources)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.removeResources"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/resourceviews/v1beta2/projects/{project}/zones/{zone}/resourceViews/{resourceView}/setService", PathMatcher: regexp.MustCompile(`^(/resourceviews/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resourceViews/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setService)$`), ServiceName: "google.resourceviews", ResourceName: "resourceviews.zoneViews.setService"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/siteVerification/v1/token", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/token)$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.getToken"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/siteVerification/v1/webResource", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource)$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/getSpectrum", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/getSpectrum)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.getSpectrum"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/getSpectrumBatch", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/getSpectrumBatch)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.getSpectrumBatch"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/init", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/init)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.init"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/notifySpectrumUse", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/notifySpectrumUse)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.notifySpectrumUse"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/register", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/register)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.register"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/spectrum/v1explorer/paws/verifyDevice", PathMatcher: regexp.MustCompile(`^(/spectrum/v1explorer/paws/verifyDevice)$`), ServiceName: "google.spectrum", ResourceName: "spectrum.paws.verifyDevice"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/clone", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/clone)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.clone"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/export", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/export)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.export"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/import", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/import)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.import"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/promoteReplica", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/promoteReplica)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.promoteReplica"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/resetSslConfig", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resetSslConfig)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.resetSslConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/restart", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restart)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.restart"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/restoreBackup", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restoreBackup)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.restoreBackup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/setRootPassword", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/setRootPassword)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.setRootPassword"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}/sslCerts", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts)$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/addServerCa", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/addServerCa)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.addServerCa"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/backupRuns", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backupRuns)$`), ServiceName: "google.sqladmin", ResourceName: "sql.backupRuns.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/clone", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clone)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.clone"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/createEphemeral", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/createEphemeral)$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.createEphemeral"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases)$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/demoteMaster", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/demoteMaster)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.demoteMaster"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/export", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/export)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.export"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/failover", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/failover)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.failover"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/import", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/import)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.import"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/promoteReplica", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/promoteReplica)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.promoteReplica"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/resetSslConfig", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resetSslConfig)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.resetSslConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/restart", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restart)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.restart"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/restoreBackup", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restoreBackup)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.restoreBackup"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/rotateServerCa", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rotateServerCa)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.rotateServerCa"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/sslCerts", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sslCerts)$`), ServiceName: "google.sqladmin", ResourceName: "sql.sslCerts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/startReplica", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/startReplica)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.startReplica"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/stopReplica", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stopReplica)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.stopReplica"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/truncateLog", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/truncateLog)$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.truncateLog"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/users", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.sqladmin", ResourceName: "sql.users.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b", PathMatcher: regexp.MustCompile(`^(/storage/v1/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl)$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/lockRetentionPolicy", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/lockRetentionPolicy)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.lockRetentionPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/notificationConfigs", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notificationConfigs)$`), ServiceName: "google.storage", ResourceName: "storage.notifications.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/o/watch", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/watch)$`), ServiceName: "google.storage", ResourceName: "storage.objects.watchAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{destinationBucket}/o/{destinationObject}/compose", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/compose)$`), ServiceName: "google.storage", ResourceName: "storage.objects.compose"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copyTo/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/rewriteTo/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.rewrite"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1/channels/stop", PathMatcher: regexp.MustCompile(`^(/storage/v1/channels/stop)$`), ServiceName: "google.storage", ResourceName: "storage.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta1/b", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta1/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta1/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{bucket}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl)$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{bucket}/o", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o)$`), ServiceName: "google.storage", ResourceName: "storage.objects.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{bucket}/o/watch", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/watch)$`), ServiceName: "google.storage", ResourceName: "storage.objects.watchAll"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl)$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{destinationBucket}/o/{destinationObject}/compose", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/compose)$`), ServiceName: "google.storage", ResourceName: "storage.objects.compose"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/copyTo/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.copy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/storage/v1beta2/channels/stop", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/channels/stop)$`), ServiceName: "google.storage", ResourceName: "storage.channels.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/surveys/v2/surveys", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys)$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/surveys/v2/surveys/{resourceId}/start", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/start)$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.start"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/surveys/v2/surveys/{resourceId}/stop", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/stop)$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.stop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/tags", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tags)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.tags.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/triggers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.triggers.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.variables.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/publish", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/publish)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.publish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/restore", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/restore)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.restore"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/undelete", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/undelete)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.undelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v1/accounts/{accountId}/permissions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.permissions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/built_in_variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/built_in_variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.built_in_variables.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/containers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/containers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/environments", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/environments)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/folders", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/folders)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/proposal", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/proposal)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.proposal.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/tags", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/tags)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/triggers", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/user_permissions", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/user_permissions)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.user_permissions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/variables", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/variables)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+parent}/workspaces", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/workspaces)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}/built_in_variables:revert", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(/built_in_variables:revert)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.built_in_variables.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:create_version", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:create_version)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.create_version"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:entities", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:entities)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.entities"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:move_entities_to_folder", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:move_entities_to_folder)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.move_entities_to_folder"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:publish", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:publish)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.publish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:quick_preview", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:quick_preview)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.quick_preview"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:reauthorize", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:reauthorize)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.reauthorize"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:resolve_conflict", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:resolve_conflict)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.resolve_conflict"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:revert", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:revert)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:revert", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:revert)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:revert", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:revert)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:revert", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:revert)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.revert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:set_latest", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:set_latest)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.set_latest"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:sync", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:sync)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.sync"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tagmanager/v2/{+path}:undelete", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?(:undelete)$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.undelete"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/taskqueue/v1beta1/projects/{project}/taskqueues/{taskqueue}/tasks/lease", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/lease)$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.lease"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks/lease", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/lease)$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.lease"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/taskqueue/v1beta2/projects/{project}/taskqueues/{taskqueue}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/taskqueue/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/taskqueues/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.taskqueue", ResourceName: "taskqueue.tasks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tasks/v1/lists/{tasklist}/clear", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clear)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.clear"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks/{task}/move", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/move)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.move"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/tasks/v1/users/@me/lists", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists)$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfMetricsSummary", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfMetricsSummary)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfMetricsSummary.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}/samples:batchCreate", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/samples:batchCreate)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.samples.batchCreate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}:publishXunitXmlFiles", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:publishXunitXmlFiles)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.publishXunitXmlFiles"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3/projects/{projectId}:initializeSettings", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:initializeSettings)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.initializeSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfMetricsSummary", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfMetricsSummary)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfMetricsSummary.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.create"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}/perfSampleSeries/{sampleSeriesId}/samples:batchCreate", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/perfSampleSeries/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/samples:batchCreate)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.perfSampleSeries.samples.batchCreate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}/histories/{historyId}/executions/{executionId}/steps/{stepId}:publishXunitXmlFiles", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/histories/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/executions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/steps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:publishXunitXmlFiles)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.histories.executions.steps.publishXunitXmlFiles"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/toolresults/v1beta3firstparty/projects/{projectId}:initializeSettings", PathMatcher: regexp.MustCompile(`^(/toolresults/v1beta3firstparty/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(:initializeSettings)$`), ServiceName: "google.toolresults", ResourceName: "toolresults.projects.initializeSettings"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/urlshortener/v1/url", PathMatcher: regexp.MustCompile(`^(/urlshortener/v1/url)$`), ServiceName: "google.urlshortener", ResourceName: "urlshortener.url.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/webmasters/v3/sites/{siteUrl}/searchAnalytics/query", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/searchAnalytics/query)$`), ServiceName: "google.webmasters", ResourceName: "webmasters.searchanalytics.query"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/analytics/v1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/analytics/v1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/analytics/v1beta1/groupItems", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/analytics/v1beta1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/activities", PathMatcher: regexp.MustCompile(`^(/youtube/v3/activities)$`), ServiceName: "google.youtube", ResourceName: "youtube.activities.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/captions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/captions)$`), ServiceName: "google.youtube", ResourceName: "youtube.captions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/channelBanners/insert", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channelBanners/insert)$`), ServiceName: "google.youtube", ResourceName: "youtube.channelBanners.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/channelSections", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channelSections)$`), ServiceName: "google.youtube", ResourceName: "youtube.channelSections.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/commentThreads", PathMatcher: regexp.MustCompile(`^(/youtube/v3/commentThreads)$`), ServiceName: "google.youtube", ResourceName: "youtube.commentThreads.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/comments", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/comments/markAsSpam", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments/markAsSpam)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.markAsSpam"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/comments/setModerationStatus", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments/setModerationStatus)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.setModerationStatus"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveBroadcasts", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveBroadcasts/bind", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts/bind)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.bind"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveBroadcasts/control", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts/control)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.control"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveBroadcasts/transition", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts/transition)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.transition"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveChat/bans", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/bans)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatBans.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveChat/messages", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/messages)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatMessages.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveChat/moderators", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveChat/moderators)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveChatModerators.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/liveStreams", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveStreams)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveStreams.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/playlistItems", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlistItems)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlistItems.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/playlists", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlists)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlists.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/subscriptions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/subscriptions)$`), ServiceName: "google.youtube", ResourceName: "youtube.subscriptions.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/thumbnails/set", PathMatcher: regexp.MustCompile(`^(/youtube/v3/thumbnails/set)$`), ServiceName: "google.youtube", ResourceName: "youtube.thumbnails.set"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/videos", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.insert"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/videos/rate", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos/rate)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.rate"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/videos/reportAbuse", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos/reportAbuse)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.reportAbuse"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/watermarks/set", PathMatcher: regexp.MustCompile(`^(/youtube/v3/watermarks/set)$`), ServiceName: "google.youtube", ResourceName: "youtube.watermarks.set"}, - {Hostname: "www.googleapis.com", HTTPMethod: "POST", PathTemplate: "/youtube/v3/watermarks/unset", PathMatcher: regexp.MustCompile(`^(/youtube/v3/watermarks/unset)$`), ServiceName: "google.youtube", ResourceName: "youtube.watermarks.unset"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.2/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.2/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.3/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.3/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.3/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.3/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.4/accounts/{id}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.4/billinginfo/{accountId}/{billingId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/billinginfo/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.budget.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.4/pretargetingconfigs/{accountId}/{configId}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/pretargetingconfigs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.pretargetingConfig.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adexchangebuyer/v1.4/proposals/{proposalId}/{revisionNumber}/{updateAction}", PathMatcher: regexp.MustCompile(`^(/adexchangebuyer/v1\.4/proposals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.adexchangebuyer", ResourceName: "adexchangebuyer.proposals.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customerId}/devices/chromeos/{deviceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/chromeos/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.chromeosdevices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customerId}/orgunits{/orgUnitPath*}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/orgunits)(?:/((?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*)(?:/(?:(?:[\x2c\x3d\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))*))?$`), ServiceName: "google.admin", ResourceName: "directory.orgunits.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customerId}/schemas/{schemaKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/schemas/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.schemas.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customer}/notifications/{notificationId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/notifications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.notifications.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/buildings/{buildingId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/buildings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.buildings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/calendars/{calendarResourceId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.calendars.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customer}/resources/features/{featureKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/resources/features/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.resources.features.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customer/{customer}/roles/{roleId}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customer/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/roles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.roles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/customers/{customerKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.customers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/groups/{groupKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.groups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/groups/{groupKey}/members/{memberKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/members/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.members.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/users/{userKey}", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.admin", ResourceName: "directory.users.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/admin/directory/v1/users/{userKey}/photos/thumbnail", PathMatcher: regexp.MustCompile(`^(/admin/directory/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/photos/thumbnail)$`), ServiceName: "google.admin", ResourceName: "directory.users.photos.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adsensehost/v4.1/accounts/{accountId}/adclients/{adClientId}/adunits", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/adunits)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.accounts.adunits.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/adsensehost/v4.1/adclients/{adClientId}/customchannels", PathMatcher: regexp.MustCompile(`^(/adsensehost/v4\.1/adclients/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customchannels)$`), ServiceName: "google.adsensehost", ResourceName: "adsensehost.customchannels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.accountUserLinks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/filters/{filterId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/filters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.filters.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webproperties.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customDimensions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customDimensions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/customMetrics/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.customMetrics.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityAdWordsLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webPropertyAdWordsLinks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.webpropertyUserLinks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entityUserLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileUserLinks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/experiments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.experiments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/goals/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.goals.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/profileFilterLinks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.profileFilterLinks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}", PathMatcher: regexp.MustCompile(`^(/analytics/v3/management/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/webproperties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingAudiences/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.analytics", ResourceName: "analytics.management.remarketingAudience.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/account", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/account)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.setAccount"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/androidDevicePolicyConfig", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/androidDevicePolicyConfig)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.setAndroidDevicePolicyConfig"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.enterprises.setStoreLayout"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutpages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/storeLayout/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/clusters/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.storelayoutclusters.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/availableProductSet)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.users.setAvailableProductSet"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/installs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.installs.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForDevice/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsfordevice.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/devices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/state)$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.devices.setState"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/entitlements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.entitlements.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}", PathMatcher: regexp.MustCompile(`^(/androidenterprise/v1/enterprises/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedConfigurationsForUser/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidenterprise", ResourceName: "androidenterprise.managedconfigurationsforuser.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.apklistings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v2/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v2/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/apks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/expansionFiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.expansionfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/details", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/details)$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.details.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/listings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.listings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/testers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.testers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/edits/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tracks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.edits.tracks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}", PathMatcher: regexp.MustCompile(`^(/androidpublisher/v3/applications/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/inappproducts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.androidpublisher", ResourceName: "androidpublisher.inappproducts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/apps/licensing/v1/product/{productId}/sku/{skuId}/user/{userId}", PathMatcher: regexp.MustCompile(`^(/apps/licensing/v1/product/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sku/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/user/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.licensing", ResourceName: "licensing.licenseAssignments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/apps/reseller/v1/customers/{customerId}", PathMatcher: regexp.MustCompile(`^(/apps/reseller/v1/customers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.reseller", ResourceName: "reseller.customers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/appstate/v1/states/{stateKey}", PathMatcher: regexp.MustCompile(`^(/appstate/v1/states/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.appstate", ResourceName: "appstate.states.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.datasets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/bigquery/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datasets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.bigquery", ResourceName: "bigquery.tables.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/pages/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.pages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/blogger/v3/blogs/{blogId}/posts/{postId}", PathMatcher: regexp.MustCompile(`^(/blogger/v3/blogs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/posts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.blogger", ResourceName: "blogger.posts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/books/v1/mylibrary/annotations/{annotationId}", PathMatcher: regexp.MustCompile(`^(/books/v1/mylibrary/annotations/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.books", ResourceName: "books.mylibrary.annotations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/calendar/v3/calendars/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendars.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/calendar/v3/calendars/{calendarId}/acl/{ruleId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.acl.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/calendar/v3/calendars/{calendarId}/events/{eventId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/calendars/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/events/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.events.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/calendar/v3/users/me/calendarList/{calendarId}", PathMatcher: regexp.MustCompile(`^(/calendar/v3/users/me/calendarList/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.calendar", ResourceName: "calendar.calendarList.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/regions/{region}/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionUrlMaps.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/alpha/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionInstanceGroupManagers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/beta/projects/{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}", PathMatcher: regexp.MustCompile(`^(/compute/beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instanceGroupManagers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.instanceGroupManagers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/backendBuckets/{backendBucket}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendBuckets/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendBuckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.backendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/firewalls/{firewall}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/firewalls/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.firewalls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/healthChecks/{healthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/healthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.healthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/httpHealthChecks/{httpHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/httpsHealthChecks/{httpsHealthCheck}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/httpsHealthChecks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.httpsHealthChecks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/global/urlMaps/{urlMap}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/urlMaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.urlMaps.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.regionAutoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/backendServices/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.regionBackendServices.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/regions/{region}/routers/{router}", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/regions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/routers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.compute", ResourceName: "compute.routers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/compute/v1/projects/{project}/zones/{zone}/autoscalers", PathMatcher: regexp.MustCompile(`^(/compute/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/zones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/autoscalers)$`), ServiceName: "google.compute", ResourceName: "compute.autoscalers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/consumersurveys/v2/mobileAppPanels/{panelId}", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/mobileAppPanels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.mobileapppanels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/consumersurveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/consumersurveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.consumersurveys", ResourceName: "consumersurveys.surveys.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/content/v2/{merchantId}/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/content/v2/{merchantId}/accounttax/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounttax/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.accounttax.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/content/v2/{merchantId}/datafeeds/{datafeedId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/datafeeds/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.datafeeds.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/content/v2/{merchantId}/liasettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/liasettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.liasettings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/content/v2/{merchantId}/shippingsettings/{accountId}", PathMatcher: regexp.MustCompile(`^(/content/v2/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/shippingsettings/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.content", ResourceName: "content.shippingsettings.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/alpha/projects/{project}/global/types/{type}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/alpha/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/types/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.types.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/v2/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/compositeTypes/{compositeType}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/compositeTypes/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.compositeTypes.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/deployments/{deployment}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/deployments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.deployments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/deploymentmanager/v2beta/projects/{project}/global/typeProviders/{typeProvider}", PathMatcher: regexp.MustCompile(`^(/deploymentmanager/v2beta/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/global/typeProviders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.deploymentmanager", ResourceName: "deploymentmanager.typeProviders.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.7/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.7/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/campaigns/{campaignId}/landingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/landingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.landingPages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v2.8/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v2\.8/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.0/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.0/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accountUserProfiles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accountUserProfiles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accountUserProfiles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/accounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/accounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/ads", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/ads)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.ads.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertiserLandingPages", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertiserLandingPages)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertiserLandingPages.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/advertisers", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/advertisers)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.advertisers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/campaigns", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/campaigns)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.campaigns.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/contentCategories", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/contentCategories)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.contentCategories.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFields.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFields/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeFieldValues)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeFieldValues.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creativeGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creativeGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creativeGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/creatives", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/creatives)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.creatives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/eventTags", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/eventTags)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.eventTags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivities", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivities)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivities.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightActivityGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightActivityGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightActivityGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/floodlightConfigurations", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/floodlightConfigurations)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.floodlightConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementGroups", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementGroups)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementGroups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placementStrategies", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placementStrategies)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placementStrategies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/placements", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/placements)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.placements.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingListShares", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingListShares)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingListShares.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/remarketingLists", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/remarketingLists)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.remarketingLists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.reports.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/sites", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sites)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.sites.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/subaccounts", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/subaccounts)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.subaccounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/targetingTemplates", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/targetingTemplates)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.targetingTemplates.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dfareporting/v3.1/userprofiles/{profileId}/userRoles", PathMatcher: regexp.MustCompile(`^(/dfareporting/v3\.1/userprofiles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/userRoles)$`), ServiceName: "google.dfareporting", ResourceName: "dfareporting.userRoles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dns/v1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dns/v1beta2/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v1beta2/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/dns/v2beta1/projects/{project}/managedZones/{managedZone}", PathMatcher: regexp.MustCompile(`^(/dns/v2beta1/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/managedZones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.dns", ResourceName: "dns.managedZones.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/doubleclicksearch/v2/conversion", PathMatcher: regexp.MustCompile(`^(/doubleclicksearch/v2/conversion)$`), ServiceName: "google.doubleclicksearch", ResourceName: "doubleclicksearch.conversion.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.files.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.comments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/comments/{commentId}/replies/{replyId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/comments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/replies/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.replies.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.permissions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/properties/{propertyKey}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/properties/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.properties.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/realtime", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/realtime)$`), ServiceName: "google.drive", ResourceName: "drive.realtime.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/files/{fileId}/revisions/{revisionId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/files/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/revisions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.revisions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/drive/v2/teamdrives/{teamDriveId}", PathMatcher: regexp.MustCompile(`^(/drive/v2/teamdrives/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.drive", ResourceName: "drive.teamdrives.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fitness/v1/users/{userId}/dataSources/{dataSourceId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dataSources/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.dataSources.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fitness/v1/users/{userId}/sessions/{sessionId}", PathMatcher: regexp.MustCompile(`^(/fitness/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sessions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fitness", ResourceName: "fitness.users.sessions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v1/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v1/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v1/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v1/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v1/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v2/tables/{tableId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.table.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v2/tables/{tableId}/columns/{columnId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/columns/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.column.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v2/tables/{tableId}/styles/{styleId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/styles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.style.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/fusiontables/v2/tables/{tableId}/templates/{templateId}", PathMatcher: regexp.MustCompile(`^(/fusiontables/v2/tables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/templates/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.fusiontables", ResourceName: "fusiontables.template.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/pushtokens", PathMatcher: regexp.MustCompile(`^(/games/v1/pushtokens)$`), ServiceName: "google.games", ResourceName: "games.pushtokens.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/quests/{questId}/milestones/{milestoneId}/claim", PathMatcher: regexp.MustCompile(`^(/games/v1/quests/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/milestones/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/claim)$`), ServiceName: "google.games", ResourceName: "games.questMilestones.claim"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/cancel", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/cancel)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.cancel"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/decline", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/decline)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.decline"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/dismiss", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/dismiss)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.dismiss"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/finish", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/finish)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.finish"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/join", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/join)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.join"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/leave", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leave)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.leave"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/leaveTurn", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/leaveTurn)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.leaveTurn"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1/turnbasedmatches/{matchId}/turn", PathMatcher: regexp.MustCompile(`^(/games/v1/turnbasedmatches/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/turn)$`), ServiceName: "google.games", ResourceName: "games.turnBasedMatches.takeTurn"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1configuration/achievements/{achievementId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/achievements/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.achievementConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/games/v1configuration/leaderboards/{leaderboardId}", PathMatcher: regexp.MustCompile(`^(/games/v1configuration/leaderboards/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gamesConfiguration", ResourceName: "gamesConfiguration.leaderboardConfigurations.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/drafts/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/drafts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.drafts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/labels/{id}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/labels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.labels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/settings/autoForwarding", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/autoForwarding)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.updateAutoForwarding"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/settings/imap", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/imap)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.updateImap"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/settings/pop", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/pop)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.updatePop"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/sendAs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.sendAs.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/gmail/v1/users/{userId}/settings/vacation", PathMatcher: regexp.MustCompile(`^(/gmail/v1/users/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/settings/vacation)$`), ServiceName: "google.gmail", ResourceName: "gmail.users.settings.updateVacation"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/groups/v1/groups/{groupUniqueId}", PathMatcher: regexp.MustCompile(`^(/groups/v1/groups/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.groupssettings", ResourceName: "groupsSettings.groups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/mirror/v1/contacts/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/contacts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.contacts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/mirror/v1/subscriptions/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/subscriptions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.subscriptions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/mirror/v1/timeline/{id}", PathMatcher: regexp.MustCompile(`^(/mirror/v1/timeline/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.mirror", ResourceName: "mirror.timeline.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/plusDomains/v1/circles/{circleId}", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/plusDomains/v1/circles/{circleId}/people", PathMatcher: regexp.MustCompile(`^(/plusDomains/v1/circles/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/people)$`), ServiceName: "google.plusDomains", ResourceName: "plusDomains.circles.addPeople"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/prediction/v1.2/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.2/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/prediction/v1.3/training/{data}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.3/training/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.training.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/prediction/v1.4/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.4/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/prediction/v1.5/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.5/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/prediction/v1.6/projects/{project}/trainedmodels/{id}", PathMatcher: regexp.MustCompile(`^(/prediction/v1\.6/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/trainedmodels/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.prediction", ResourceName: "prediction.trainedmodels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/siteVerification/v1/webResource/{id}", PathMatcher: regexp.MustCompile(`^(/siteVerification/v1/webResource/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.siteVerification", ResourceName: "siteVerification.webResource.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/sql/v1beta3/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta3/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.instances.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/databases/{database}", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/databases/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.sqladmin", ResourceName: "sql.databases.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/sql/v1beta4/projects/{project}/instances/{instance}/users", PathMatcher: regexp.MustCompile(`^(/sql/v1beta4/projects/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/instances/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/users)$`), ServiceName: "google.sqladmin", ResourceName: "sql.users.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/iam", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam)$`), ServiceName: "google.storage", ResourceName: "storage.buckets.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1/b/{bucket}/o/{object}/iam", PathMatcher: regexp.MustCompile(`^(/storage/v1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/iam)$`), ServiceName: "google.storage", ResourceName: "storage.objects.setIamPolicy"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta1/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta1/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta1/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta1/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta2/b/{bucket}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.buckets.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta2/b/{bucket}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.bucketAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta2/b/{bucket}/defaultObjectAcl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/defaultObjectAcl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.defaultObjectAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objects.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/storage/v1beta2/b/{bucket}/o/{object}/acl/{entity}", PathMatcher: regexp.MustCompile(`^(/storage/v1beta2/b/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/o/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/acl/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.storage", ResourceName: "storage.objectAccessControls.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/surveys/v2/surveys/{surveyUrlId}", PathMatcher: regexp.MustCompile(`^(/surveys/v2/surveys/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.surveys", ResourceName: "surveys.surveys.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/environments/{environmentId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/folders/{folderId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.folders.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/move_folders/{folderId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/move_folders/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.move_folders.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/reauthorize_environments/{environmentId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reauthorize_environments/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.reauthorize_environments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/tags/{tagId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tags/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.tags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/triggers/{triggerId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/triggers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.triggers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/variables/{variableId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/variables/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.variables.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/containers/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/versions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v1/accounts/{accountId}/permissions/{permissionId}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v1/accounts/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/permissions/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.permissions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.environments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.versions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.folders.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.tags.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.triggers.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.updateProposal"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.containers.workspaces.variables.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tagmanager/v2/{+path}", PathMatcher: regexp.MustCompile(`^(/tagmanager/v2/)((?:(?:[\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e\x21\x23\x24\x26-\x2c\x2f\x3a\x3b\x3d\x3f\x40\x5b\x5d]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tagmanager", ResourceName: "tagmanager.accounts.user_permissions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tasks/v1/lists/{tasklist}/tasks/{task}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/tasks/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasks.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/tasks/v1/users/@me/lists/{tasklist}", PathMatcher: regexp.MustCompile(`^(/tasks/v1/users/@me/lists/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.tasks", ResourceName: "tasks.tasklists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/webmasters/v3/sites/{siteUrl}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sites.add"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/webmasters/v3/sites/{siteUrl}/sitemaps/{feedpath}", PathMatcher: regexp.MustCompile(`^(/webmasters/v3/sites/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/sitemaps/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.webmasters", ResourceName: "webmasters.sitemaps.submit"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/analytics/v1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/analytics/v1beta1/groups", PathMatcher: regexp.MustCompile(`^(/youtube/analytics/v1beta1/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/captions", PathMatcher: regexp.MustCompile(`^(/youtube/v3/captions)$`), ServiceName: "google.youtube", ResourceName: "youtube.captions.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/channelSections", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channelSections)$`), ServiceName: "google.youtube", ResourceName: "youtube.channelSections.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/channels", PathMatcher: regexp.MustCompile(`^(/youtube/v3/channels)$`), ServiceName: "google.youtube", ResourceName: "youtube.channels.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/commentThreads", PathMatcher: regexp.MustCompile(`^(/youtube/v3/commentThreads)$`), ServiceName: "google.youtube", ResourceName: "youtube.commentThreads.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/comments", PathMatcher: regexp.MustCompile(`^(/youtube/v3/comments)$`), ServiceName: "google.youtube", ResourceName: "youtube.comments.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/liveBroadcasts", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveBroadcasts)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveBroadcasts.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/liveStreams", PathMatcher: regexp.MustCompile(`^(/youtube/v3/liveStreams)$`), ServiceName: "google.youtube", ResourceName: "youtube.liveStreams.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/playlistItems", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlistItems)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlistItems.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/playlists", PathMatcher: regexp.MustCompile(`^(/youtube/v3/playlists)$`), ServiceName: "google.youtube", ResourceName: "youtube.playlists.update"}, - {Hostname: "www.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/youtube/v3/videos", PathMatcher: regexp.MustCompile(`^(/youtube/v3/videos)$`), ServiceName: "google.youtube", ResourceName: "youtube.videos.update"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/groupItems", PathMatcher: regexp.MustCompile(`^(/v2/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.delete"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v2/groups", PathMatcher: regexp.MustCompile(`^(/v2/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.delete"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/groupItems", PathMatcher: regexp.MustCompile(`^(/v2/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.list"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/groups", PathMatcher: regexp.MustCompile(`^(/v2/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.list"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v2/reports", PathMatcher: regexp.MustCompile(`^(/v2/reports)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.reports.query"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/groupItems", PathMatcher: regexp.MustCompile(`^(/v2/groupItems)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groupItems.insert"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v2/groups", PathMatcher: regexp.MustCompile(`^(/v2/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.insert"}, - {Hostname: "youtubeanalytics.googleapis.com", HTTPMethod: "PUT", PathTemplate: "/v2/groups", PathMatcher: regexp.MustCompile(`^(/v2/groups)$`), ServiceName: "google.youtubeAnalytics", ResourceName: "youtubeAnalytics.groups.update"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "DELETE", PathTemplate: "/v1/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.delete"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/jobs", PathMatcher: regexp.MustCompile(`^(/v1/jobs)$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.list"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/jobs/{jobId}", PathMatcher: regexp.MustCompile(`^(/v1/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.get"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/jobs/{jobId}/reports", PathMatcher: regexp.MustCompile(`^(/v1/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports)$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.reports.list"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/jobs/{jobId}/reports/{reportId}", PathMatcher: regexp.MustCompile(`^(/v1/jobs/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?(/reports/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.reports.get"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/media/{mediaId}", PathMatcher: regexp.MustCompile(`^(/v1/media/)((?:(?:[\x2c\x2d\x2e\x30-\x39\x41-\x5a\x5f\x61-\x7a\x7e]|%[[:xdigit:]][[:xdigit:]])*))?$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.media.download"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "GET", PathTemplate: "/v1/reportTypes", PathMatcher: regexp.MustCompile(`^(/v1/reportTypes)$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.reportTypes.list"}, - {Hostname: "youtubereporting.googleapis.com", HTTPMethod: "POST", PathTemplate: "/v1/jobs", PathMatcher: regexp.MustCompile(`^(/v1/jobs)$`), ServiceName: "google.youtubereporting", ResourceName: "youtubereporting.jobs.create"}, - }...) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/example_test.go deleted file mode 100644 index c27a05cb..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/example_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package api_test - -import ( - "fmt" - - cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1" - apitrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api" -) - -func Example() { - // create an oauth2 client suitable for use with the google APIs - client, _ := apitrace.NewClient( - // set scopes like this, which will vary depending on the service - apitrace.WithScopes(cloudresourcemanager.CloudPlatformScope)) - svc, _ := cloudresourcemanager.New(client) - - // call google api methods as usual - res, _ := svc.Projects.List().Do() - for _, project := range res.Projects { - fmt.Println(project.Name) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree.go deleted file mode 100644 index c25f68f1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree.go +++ /dev/null @@ -1,121 +0,0 @@ -package internal - -import ( - "fmt" - "regexp" - "strings" -) - -type ( - // A Tree is a prefix tree for matching endpoints based on http requests. - Tree struct { - root *treeNode - } - // A treeNode is a node in the tree. Each node may have children based on - // path segments: - // - // "" -> - // "v1/" -> - // "users/" ... - // "blogs/" ... - // ... - treeNode struct { - Children map[string]*treeNode - Endpoints []Endpoint - } - // An Endpoint is an API endpoint associated with a (host, method, path) - Endpoint struct { - Hostname string - HTTPMethod string - PathTemplate string - PathMatcher *regexp.Regexp - - ServiceName string - ResourceName string - } -) - -// String returns a constructor without field names. -func (e Endpoint) String() string { - return fmt.Sprintf(`{Hostname: "%s", HTTPMethod: "%s", PathTemplate: "%s", PathMatcher: regexp.MustCompile(`+"`"+`%s`+"`"+`), ServiceName: "%s", ResourceName: "%s"}`, - e.Hostname, e.HTTPMethod, e.PathTemplate, e.PathMatcher.String(), e.ServiceName, e.ResourceName) -} - -// NewTree creates a new Tree. You can optionally pass endpoints to add to the -// tree. -func NewTree(es ...Endpoint) *Tree { - t := &Tree{root: newTreeNode()} - t.Add(es...) - return t -} - -// newTreeNode creates a new treeNode. -func newTreeNode() *treeNode { - return &treeNode{Children: map[string]*treeNode{}} -} - -// Add adds zero or more endpoints to the tree. -func (t *Tree) Add(es ...Endpoint) { - for _, e := range es { - prefix := e.PathTemplate - if idx := strings.IndexByte(prefix, '{'); idx >= 0 { - prefix = prefix[:idx] - } - path := strings.SplitAfter(prefix, "/") - if path[len(path)-1] == "" { - path = path[:len(path)-1] - } - - segments := append([]string{e.Hostname, e.HTTPMethod}, - path...) - t.root.add(segments, e) - } -} - -// Get attempts to find the endpoints associated with the given hostname, http -// http method and http path. It returns false if no endpoints matched. -func (t *Tree) Get(hostname string, httpMethod string, httpPath string) (Endpoint, bool) { - segments := append([]string{hostname, httpMethod}, - strings.SplitAfter(httpPath, "/")...) - endpoints := t.root.getLongestPrefixMatch(segments) - for _, e := range endpoints { - if e.PathMatcher.MatchString(httpPath) { - return e, true - } - } - return Endpoint{}, false -} - -// add adds an endpoint to the tree. -func (n *treeNode) add(segments []string, e Endpoint) { - if len(segments) > 0 { - child, ok := n.Children[segments[0]] - if !ok { - child = &treeNode{ - Children: map[string]*treeNode{}, - } - n.Children[segments[0]] = child - } - child.add(segments[1:], e) - return - } - n.Endpoints = append(n.Endpoints, e) -} - -// getLongestPrefixMatch gets the endpoints for the longest prefix which match -// the segments. -// -// For example: `/api/v1/users/1234` might return `/api/v1/users/` -// -func (n *treeNode) getLongestPrefixMatch(segments []string) []Endpoint { - if len(segments) > 0 { - child, ok := n.Children[segments[0]] - if ok { - Endpoints := child.getLongestPrefixMatch(segments[1:]) - if len(Endpoints) > 0 { - return Endpoints - } - } - } - return n.Endpoints -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree_test.go deleted file mode 100644 index b7f0bc01..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal/tree_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package internal - -import ( - "regexp" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestTree(t *testing.T) { - tr := NewTree([]Endpoint{ - { - Hostname: "www.googleapis.com", - HTTPMethod: "DELETE", - PathTemplate: "/blogger/v3/blogs/{blogId}/pages/{pageId}", - PathMatcher: regexp.MustCompile(`^/blogger/v3/blogs/[0-9]+/pages/[0-9]+$`), - ServiceName: "blogger", - ResourceName: "blogger.pages.delete", - }, - { - Hostname: "www.googleapis.com", - HTTPMethod: "GET", - PathTemplate: "/blogger/v3/blogs/{blogId}/pageviews", - PathMatcher: regexp.MustCompile(`^/blogger/v3/blogs/[0-9]+/pageviews$`), - ServiceName: "blogger", - ResourceName: "blogger.pageViews.get", - }, - }...) - - e, ok := tr.Get("www.googleapis.com", "DELETE", "/blogger/v3/blogs/1234/pages/5678") - assert.True(t, ok) - assert.Equal(t, "blogger", e.ServiceName) - assert.Equal(t, "blogger.pages.delete", e.ResourceName) - - e, ok = tr.Get("www.googleapis.com", "GET", "/blogger/v3/blogs/1234/pageviews") - assert.True(t, ok) - assert.Equal(t, "blogger", e.ServiceName) - assert.Equal(t, "blogger.pageViews.get", e.ResourceName) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/make_endpoints.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/make_endpoints.go deleted file mode 100644 index 48cb569f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/make_endpoints.go +++ /dev/null @@ -1,173 +0,0 @@ -// +build ignore - -// This program generates a tree of endpoints for span tagging based on the -// API definitions in github.com/google/google-api-go-client. - -package main - -import ( - "encoding/json" - "log" - "net/url" - "os" - "path/filepath" - "sort" - "strings" - "text/template" - - "github.com/yosida95/uritemplate" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal" -) - -type ( - APIDefinition struct { - ID string `json"id"` - Name string `json:"name"` - CanonicalName string `json:"canonicalName"` - BaseURL string `json:"baseUrl"` - BasePath string `json:"basePath"` - Resources map[string]*APIResource `json:"resources"` - RootURL string `json:"rootUrl"` - } - APIResource struct { - Methods map[string]*APIMethod `json:"methods"` - Resources map[string]*APIResource `json:"resources"` - } - APIMethod struct { - ID string `json"id"` - FlatPath string `json:"flatPath"` - Path string `json:"path"` - HTTPMethod string `json:"httpMethod"` - } -) - -var cnt int - -func main() { - var es []internal.Endpoint - - root := filepath.Join(os.Getenv("GOPATH"), "src", "google.golang.org", "api") - err := filepath.Walk(root, func(p string, fi os.FileInfo, err error) error { - if err != nil { - return err - } - - if fi.IsDir() { - return nil - } - - if filepath.Ext(p) == ".json" { - var def APIDefinition - f, err := os.Open(p) - if err != nil { - return err - } - defer f.Close() - - err = json.NewDecoder(f).Decode(&def) - if err != nil { - return err - } - - for _, resource := range def.Resources { - res, err := handleResource(&def, resource) - if err != nil { - return err - } - es = append(es, res...) - } - } - - return nil - }) - if err != nil { - log.Fatalln(err) - } - - f, err := os.Create("endpoints_gen.go") - if err != nil { - log.Fatalln(err) - } - defer f.Close() - - sort.Slice(es, func(i, j int) bool { - return es[i].String() < es[j].String() - }) - - template.Must(template.New("").Parse(tpl)).Execute(f, map[string]interface{}{ - "Endpoints": es, - }) -} - -func handleResource(def *APIDefinition, resource *APIResource) ([]internal.Endpoint, error) { - var es []internal.Endpoint - if resource.Methods != nil { - for _, method := range resource.Methods { - mes, err := handleMethod(def, resource, method) - if err != nil { - return nil, err - } - es = append(es, mes...) - } - } - if resource.Resources != nil { - for _, child := range resource.Resources { - res, err := handleResource(def, child) - if err != nil { - return nil, err - } - es = append(es, res...) - } - } - return es, nil -} - -func handleMethod(def *APIDefinition, resource *APIResource, method *APIMethod) ([]internal.Endpoint, error) { - u, err := url.Parse(def.RootURL) - if err != nil { - return nil, err - } - hostname := u.Hostname() - - path := method.FlatPath - if path == "" { - path = method.Path - } - path = def.BasePath + path - - if !strings.HasPrefix(path, "/") { - path = "/" + path - } - - uritpl, err := uritemplate.New(path) - if err != nil { - return nil, err - } - return []internal.Endpoint{{ - Hostname: hostname, - HTTPMethod: method.HTTPMethod, - PathTemplate: path, - PathMatcher: uritpl.Regexp(), - ServiceName: "google." + def.Name, - ResourceName: method.ID, - }}, nil -} - -var tpl = `// Code generated by make_endpoints.go DO NOT EDIT - -package api - -import ( - "regexp" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/internal" -) - -func init() { - apiEndpoints = internal.NewTree([]internal.Endpoint{ - {{- range .Endpoints }} - {{ . }}, - {{- end }} - }...) -} -` diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/option.go deleted file mode 100644 index 655f5cbe..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api/option.go +++ /dev/null @@ -1,45 +0,0 @@ -package api - -import "context" - -type config struct { - serviceName string - ctx context.Context - scopes []string -} - -func newConfig(options ...Option) *config { - cfg := &config{ - ctx: context.Background(), - } - for _, opt := range options { - opt(cfg) - } - return cfg -} - -// An Option customizes the config. -type Option func(*config) - -// WithContext sets the context in the config. This can be used to set span -// parents or pass a context through to the underlying client constructor. -func WithContext(ctx context.Context) Option { - return func(cfg *config) { - cfg.ctx = ctx - } -} - -// WithScopes sets the scopes used to create the oauth2 config for Google APIs. -func WithScopes(scopes ...string) Option { - return func(cfg *config) { - cfg.scopes = scopes - } -} - -// WithServiceName sets the service name in the config. The default service -// name is inferred from the API definitions based on the http request route. -func WithServiceName(serviceName string) Option { - return func(cfg *config) { - cfg.serviceName = serviceName - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/example_test.go deleted file mode 100644 index bf3390e7..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/example_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package grpc_test - -import ( - "log" - "net" - - grpctrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12" - - "google.golang.org/grpc" -) - -func Example_client() { - // Create the client interceptor using the grpc trace package. - i := grpctrace.UnaryClientInterceptor(grpctrace.WithServiceName("my-grpc-client")) - - // Dial in using the created interceptor... - conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithUnaryInterceptor(i)) - if err != nil { - log.Fatal(err) - } - defer conn.Close() - - // And continue using the connection as normal. -} - -func Example_server() { - // Create a listener for the server. - ln, err := net.Listen("tcp", ":50051") - if err != nil { - log.Fatal(err) - } - - // Create the unary server interceptor using the grpc trace package. - i := grpctrace.UnaryServerInterceptor(grpctrace.WithServiceName("my-grpc-client")) - - // Initialize the grpc server as normal, using the tracing interceptor. - s := grpc.NewServer(grpc.UnaryInterceptor(i)) - - // ... register your services - - // Start serving incoming connections. - if err := s.Serve(ln); err != nil { - log.Fatalf("failed to serve: %v", err) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.pb.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.pb.go deleted file mode 100644 index 3a7b7e6b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.pb.go +++ /dev/null @@ -1,163 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: fixtures_test.proto - -/* -Package grpc is a generated protocol buffer package. - -It is generated from these files: - fixtures_test.proto - -It has these top-level messages: - FixtureRequest - FixtureReply -*/ -package grpc - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -import ( - context "golang.org/x/net/context" - grpc1 "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// The request message containing the user's name. -type FixtureRequest struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *FixtureRequest) Reset() { *m = FixtureRequest{} } -func (m *FixtureRequest) String() string { return proto.CompactTextString(m) } -func (*FixtureRequest) ProtoMessage() {} -func (*FixtureRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *FixtureRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// The response message containing the greetings -type FixtureReply struct { - Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` -} - -func (m *FixtureReply) Reset() { *m = FixtureReply{} } -func (m *FixtureReply) String() string { return proto.CompactTextString(m) } -func (*FixtureReply) ProtoMessage() {} -func (*FixtureReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *FixtureReply) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -func init() { - proto.RegisterType((*FixtureRequest)(nil), "grpc.FixtureRequest") - proto.RegisterType((*FixtureReply)(nil), "grpc.FixtureReply") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc1.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc1.SupportPackageIsVersion4 - -// Client API for Fixture service - -type FixtureClient interface { - Ping(ctx context.Context, in *FixtureRequest, opts ...grpc1.CallOption) (*FixtureReply, error) -} - -type fixtureClient struct { - cc *grpc1.ClientConn -} - -func NewFixtureClient(cc *grpc1.ClientConn) FixtureClient { - return &fixtureClient{cc} -} - -func (c *fixtureClient) Ping(ctx context.Context, in *FixtureRequest, opts ...grpc1.CallOption) (*FixtureReply, error) { - out := new(FixtureReply) - err := grpc1.Invoke(ctx, "/grpc.Fixture/Ping", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for Fixture service - -type FixtureServer interface { - Ping(context.Context, *FixtureRequest) (*FixtureReply, error) -} - -func RegisterFixtureServer(s *grpc1.Server, srv FixtureServer) { - s.RegisterService(&_Fixture_serviceDesc, srv) -} - -func _Fixture_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) { - in := new(FixtureRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FixtureServer).Ping(ctx, in) - } - info := &grpc1.UnaryServerInfo{ - Server: srv, - FullMethod: "/grpc.Fixture/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FixtureServer).Ping(ctx, req.(*FixtureRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Fixture_serviceDesc = grpc1.ServiceDesc{ - ServiceName: "grpc.Fixture", - HandlerType: (*FixtureServer)(nil), - Methods: []grpc1.MethodDesc{ - { - MethodName: "Ping", - Handler: _Fixture_Ping_Handler, - }, - }, - Streams: []grpc1.StreamDesc{}, - Metadata: "fixtures_test.proto", -} - -func init() { proto.RegisterFile("fixtures_test.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 177 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4e, 0xcb, 0xac, 0x28, - 0x29, 0x2d, 0x4a, 0x2d, 0x8e, 0x2f, 0x49, 0x2d, 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, - 0x62, 0x49, 0x2f, 0x2a, 0x48, 0x56, 0x52, 0xe1, 0xe2, 0x73, 0x83, 0x48, 0x06, 0xa5, 0x16, 0x96, - 0xa6, 0x16, 0x97, 0x08, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, - 0x70, 0x06, 0x81, 0xd9, 0x4a, 0x1a, 0x5c, 0x3c, 0x70, 0x55, 0x05, 0x39, 0x95, 0x42, 0x12, 0x5c, - 0xec, 0xb9, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0x30, 0x65, 0x30, 0xae, 0x91, 0x2d, 0x17, 0x3b, 0x54, - 0xa5, 0x90, 0x11, 0x17, 0x4b, 0x40, 0x66, 0x5e, 0xba, 0x90, 0x88, 0x1e, 0xc8, 0x26, 0x3d, 0x54, - 0x6b, 0xa4, 0x84, 0xd0, 0x44, 0x0b, 0x72, 0x2a, 0x95, 0x18, 0x9c, 0x74, 0xb8, 0x24, 0x33, 0xf3, - 0x21, 0x32, 0xa9, 0x15, 0x89, 0xb9, 0x05, 0x39, 0xa9, 0xc5, 0x7a, 0x20, 0x37, 0x83, 0x44, 0x9c, - 0x78, 0x43, 0x52, 0x8b, 0x4b, 0xdc, 0x83, 0x02, 0x9c, 0x03, 0x40, 0x1e, 0x08, 0x60, 0x4c, 0x62, - 0x03, 0xfb, 0xc4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x18, 0x42, 0x90, 0x4d, 0xe0, 0x00, 0x00, - 0x00, -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.proto b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.proto deleted file mode 100644 index 15a8aa5c..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/fixtures_test.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto3"; - -option java_multiple_files = true; -option java_package = "io.grpc.examples.testgrpc"; -option java_outer_classname = "TestGRPCProto"; - -package grpc; - -service Fixture { - rpc Ping (FixtureRequest) returns (FixtureReply) {} -} - -// The request message containing the user's name. -message FixtureRequest { - string name = 1; -} - -// The response message containing the greetings -message FixtureReply { - string message = 1; -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc.go deleted file mode 100644 index 5314b08d..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc.go +++ /dev/null @@ -1,93 +0,0 @@ -//go:generate protoc -I . fixtures_test.proto --go_out=plugins=grpc:. - -// Package grpc provides functions to trace the google.golang.org/grpc package v1.2. -package grpc // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12" - -import ( - "net" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - context "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/peer" -) - -// UnaryServerInterceptor will trace requests to the given grpc server. -func UnaryServerInterceptor(opts ...InterceptorOption) grpc.UnaryServerInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - if cfg.serviceName == "" { - cfg.serviceName = "grpc.server" - } - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - span, ctx := startSpanFromContext(ctx, info.FullMethod, cfg.serviceName) - resp, err := handler(ctx, req) - span.Finish(tracer.WithError(err)) - return resp, err - } -} - -func startSpanFromContext(ctx context.Context, method, service string) (ddtrace.Span, context.Context) { - opts := []ddtrace.StartSpanOption{ - tracer.ServiceName(service), - tracer.ResourceName(method), - tracer.Tag(tagMethod, method), - tracer.SpanType(ext.AppTypeRPC), - } - md, _ := metadata.FromContext(ctx) // nil is ok - if sctx, err := tracer.Extract(grpcutil.MDCarrier(md)); err == nil { - opts = append(opts, tracer.ChildOf(sctx)) - } - return tracer.StartSpanFromContext(ctx, "grpc.server", opts...) -} - -// UnaryClientInterceptor will add tracing to a gprc client. -func UnaryClientInterceptor(opts ...InterceptorOption) grpc.UnaryClientInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - if cfg.serviceName == "" { - cfg.serviceName = "grpc.client" - } - return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - var ( - span ddtrace.Span - p peer.Peer - ) - span, ctx = tracer.StartSpanFromContext(ctx, "grpc.client", - tracer.Tag(tagMethod, method), - tracer.SpanType(ext.AppTypeRPC), - ) - md, ok := metadata.FromContext(ctx) - if !ok { - md = metadata.MD{} - } - _ = tracer.Inject(span.Context(), grpcutil.MDCarrier(md)) - ctx = metadata.NewContext(ctx, md) - opts = append(opts, grpc.Peer(&p)) - err := invoker(ctx, method, req, reply, cc, opts...) - if p.Addr != nil { - addr := p.Addr.String() - host, port, err := net.SplitHostPort(addr) - if err == nil { - if host != "" { - span.SetTag(ext.TargetHost, host) - } - span.SetTag(ext.TargetPort, port) - } - } - span.SetTag(tagCode, grpc.Code(err).String()) - span.Finish(tracer.WithError(err)) - return err - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc_test.go deleted file mode 100644 index a4527172..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/grpc_test.go +++ /dev/null @@ -1,203 +0,0 @@ -package grpc - -import ( - "fmt" - "net" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" - context "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" -) - -func TestClient(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - client := rig.client - - span, ctx := tracer.StartSpanFromContext(context.Background(), "a", tracer.ServiceName("b"), tracer.ResourceName("c")) - resp, err := client.Ping(ctx, &FixtureRequest{Name: "pass"}) - assert.Nil(err) - span.Finish() - assert.Equal(resp.Message, "passed") - - spans := mt.FinishedSpans() - assert.Len(spans, 3) - - var serverSpan, clientSpan, rootSpan mocktracer.Span - - for _, s := range spans { - // order of traces in buffer is not garanteed - switch s.OperationName() { - case "grpc.server": - serverSpan = s - case "grpc.client": - clientSpan = s - case "a": - rootSpan = s - } - } - - assert.NotNil(serverSpan) - assert.NotNil(clientSpan) - assert.NotNil(rootSpan) - - assert.Equal(clientSpan.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(clientSpan.Tag(ext.TargetPort), rig.port) - assert.Equal(clientSpan.Tag(tagCode), codes.OK.String()) - assert.Equal(clientSpan.TraceID(), rootSpan.TraceID()) - assert.Equal(serverSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(serverSpan.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.Equal(serverSpan.TraceID(), rootSpan.TraceID()) -} - -func TestChild(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(false) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - client := rig.client - resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "child"}) - assert.Nil(err) - assert.Equal(resp.Message, "child") - - spans := mt.FinishedSpans() - assert.Len(spans, 2) - - var serverSpan, clientSpan mocktracer.Span - - for _, s := range spans { - // order of traces in buffer is not garanteed - switch s.OperationName() { - case "grpc.server": - serverSpan = s - case "child": - clientSpan = s - } - } - - assert.NotNil(clientSpan) - assert.Nil(clientSpan.Tag(ext.Error)) - assert.Equal(clientSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(clientSpan.Tag(ext.ResourceName), "child") - assert.True(clientSpan.FinishTime().Sub(clientSpan.StartTime()) > 0) - - assert.NotNil(serverSpan) - assert.Nil(serverSpan.Tag(ext.Error)) - assert.Equal(serverSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(serverSpan.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.True(serverSpan.FinishTime().Sub(serverSpan.StartTime()) > 0) -} - -func TestPass(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(false) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - client := rig.client - resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "pass"}) - assert.Nil(err) - assert.Equal(resp.Message, "passed") - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - - s := spans[0] - assert.Nil(s.Tag(ext.Error)) - assert.Equal(s.OperationName(), "grpc.server") - assert.Equal(s.Tag(ext.ServiceName), "grpc") - assert.Equal(s.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.Equal(s.Tag(ext.SpanType), ext.AppTypeRPC) - assert.True(s.FinishTime().Sub(s.StartTime()) > 0) -} - -// fixtureServer a dummy implemenation of our grpc fixtureServer. -type fixtureServer struct{} - -func (s *fixtureServer) Ping(ctx context.Context, in *FixtureRequest) (*FixtureReply, error) { - switch { - case in.Name == "child": - span, _ := tracer.StartSpanFromContext(ctx, "child") - span.Finish() - return &FixtureReply{Message: "child"}, nil - case in.Name == "disabled": - if _, ok := tracer.SpanFromContext(ctx); ok { - panic("should be disabled") - } - return &FixtureReply{Message: "disabled"}, nil - } - return &FixtureReply{Message: "passed"}, nil -} - -// ensure it's a fixtureServer -var _ FixtureServer = &fixtureServer{} - -// rig contains all of the servers and connections we'd need for a -// grpc integration test -type rig struct { - server *grpc.Server - port string - listener net.Listener - conn *grpc.ClientConn - client FixtureClient -} - -func (r *rig) Close() { - r.server.Stop() - r.conn.Close() - r.listener.Close() -} - -func newRig(traceClient bool) (*rig, error) { - server := grpc.NewServer(grpc.UnaryInterceptor(UnaryServerInterceptor(WithServiceName("grpc")))) - - RegisterFixtureServer(server, new(fixtureServer)) - - li, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return nil, err - } - _, port, _ := net.SplitHostPort(li.Addr().String()) - // start our test fixtureServer. - go server.Serve(li) - - opts := []grpc.DialOption{grpc.WithInsecure()} - if traceClient { - opts = append(opts, grpc.WithUnaryInterceptor(UnaryClientInterceptor(WithServiceName("grpc")))) - } - conn, err := grpc.Dial(li.Addr().String(), opts...) - if err != nil { - return nil, fmt.Errorf("error dialing: %s", err) - } - return &rig{ - listener: li, - port: port, - server: server, - conn: conn, - client: NewFixtureClient(conn), - }, err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/option.go deleted file mode 100644 index 6fc609d5..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/option.go +++ /dev/null @@ -1,18 +0,0 @@ -package grpc - -type interceptorConfig struct{ serviceName string } - -// InterceptorOption represents an option that can be passed to the grpc unary -// client and server interceptors. -type InterceptorOption func(*interceptorConfig) - -func defaults(cfg *interceptorConfig) { - // cfg.serviceName default set in interceptor -} - -// WithServiceName sets the given service name for the intercepted client. -func WithServiceName(name string) InterceptorOption { - return func(cfg *interceptorConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/tags.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/tags.go deleted file mode 100644 index bbaf5c9e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12/tags.go +++ /dev/null @@ -1,7 +0,0 @@ -package grpc - -// Tags used for gRPC -const ( - tagMethod = "grpc.method" - tagCode = "grpc.code" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/client.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/client.go deleted file mode 100644 index b8ec84a7..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/client.go +++ /dev/null @@ -1,176 +0,0 @@ -package grpc - -import ( - "net" - - context "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/peer" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -type clientStream struct { - grpc.ClientStream - cfg *interceptorConfig - method string -} - -func (cs *clientStream) RecvMsg(m interface{}) (err error) { - if cs.cfg.traceStreamMessages { - span, _ := startSpanFromContext(cs.Context(), cs.method, "grpc.message", cs.cfg.clientServiceName()) - if p, ok := peer.FromContext(cs.Context()); ok { - setSpanTargetFromPeer(span, *p) - } - defer span.Finish(withStreamError(err)) - } - err = cs.ClientStream.RecvMsg(m) - return err -} - -func (cs *clientStream) SendMsg(m interface{}) (err error) { - if cs.cfg.traceStreamMessages { - span, _ := startSpanFromContext(cs.Context(), cs.method, "grpc.message", cs.cfg.clientServiceName()) - if p, ok := peer.FromContext(cs.Context()); ok { - setSpanTargetFromPeer(span, *p) - } - defer span.Finish(withStreamError(err)) - } - err = cs.ClientStream.SendMsg(m) - return err -} - -// StreamClientInterceptor returns a grpc.StreamClientInterceptor which will trace client -// streams using the given set of options. -func StreamClientInterceptor(opts ...InterceptorOption) grpc.StreamClientInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - var stream grpc.ClientStream - if cfg.traceStreamCalls { - span, err := doClientRequest(ctx, cfg, method, opts, - func(ctx context.Context, opts []grpc.CallOption) error { - var err error - stream, err = streamer(ctx, desc, cc, method, opts...) - return err - }) - if err != nil { - span.Finish(withStreamError(err)) - return nil, err - } - - // the Peer call option only works with unary calls, so for streams - // we need to set it via FromContext - if p, ok := peer.FromContext(stream.Context()); ok { - setSpanTargetFromPeer(span, *p) - } - - go func() { - <-stream.Context().Done() - span.Finish(withStreamError(stream.Context().Err())) - }() - } else { - // if call tracing is disabled, just call streamer, but still return - // a clientStream so that messages can be traced if enabled - - // it's possible there's already a span on the context even though - // we're not tracing calls, so inject it if it's there - ctx = injectSpanIntoContext(ctx) - - var err error - stream, err = streamer(ctx, desc, cc, method, opts...) - if err != nil { - return nil, err - } - } - return &clientStream{ - ClientStream: stream, - cfg: cfg, - method: method, - }, nil - } -} - -// UnaryClientInterceptor returns a grpc.UnaryClientInterceptor which will trace requests using -// the given set of options. -func UnaryClientInterceptor(opts ...InterceptorOption) grpc.UnaryClientInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - span, err := doClientRequest(ctx, cfg, method, opts, - func(ctx context.Context, opts []grpc.CallOption) error { - return invoker(ctx, method, req, reply, cc, opts...) - }) - span.Finish(tracer.WithError(err)) - return err - } -} - -// doClientRequest starts a new span and invokes the handler with the new context -// and options. The span should be finished by the caller. -func doClientRequest( - ctx context.Context, cfg *interceptorConfig, method string, opts []grpc.CallOption, - handler func(ctx context.Context, opts []grpc.CallOption) error, -) (ddtrace.Span, error) { - // inject the trace id into the metadata - span, ctx := startSpanFromContext(ctx, method, "grpc.client", cfg.clientServiceName()) - ctx = injectSpanIntoContext(ctx) - - // fill in the peer so we can add it to the tags - var p peer.Peer - opts = append(opts, grpc.Peer(&p)) - - err := handler(ctx, opts) - - setSpanTargetFromPeer(span, p) - - // set the code based on the error - span.SetTag(tagCode, grpc.Code(err).String()) - - return span, err -} - -// setSpanTargetFromPeer sets the target tags in a span based on the gRPC peer. -func setSpanTargetFromPeer(span ddtrace.Span, p peer.Peer) { - // if the peer was set, set the tags - if p.Addr != nil { - host, port, err := net.SplitHostPort(p.Addr.String()) - if err == nil { - if host != "" { - span.SetTag(ext.TargetHost, host) - } - span.SetTag(ext.TargetPort, port) - } - } -} - -// injectSpanIntoContext injects the span associated with a context as gRPC metadata -// if no span is associated with the context, just return the original context. -func injectSpanIntoContext(ctx context.Context) context.Context { - span, ok := tracer.SpanFromContext(ctx) - if !ok { - return ctx - } - md, ok := metadata.FromOutgoingContext(ctx) - if ok { - // we have to copy the metadata because its not safe to modify - md = md.Copy() - } else { - md = metadata.MD{} - } - if err := tracer.Inject(span.Context(), grpcutil.MDCarrier(md)); err != nil { - // in practice this error should never really happen - grpclog.Warningf("ddtrace: failed to inject the span context into the gRPC metadata: %v", err) - } - return metadata.NewOutgoingContext(ctx, md) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/example_test.go deleted file mode 100644 index bc0df68a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/example_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package grpc_test - -import ( - "log" - "net" - - grpctrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc" - - "google.golang.org/grpc" -) - -func Example_client() { - // Create the client interceptor using the grpc trace package. - si := grpctrace.StreamClientInterceptor(grpctrace.WithServiceName("my-grpc-client")) - ui := grpctrace.UnaryClientInterceptor(grpctrace.WithServiceName("my-grpc-client")) - - // Dial in using the created interceptor... - conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), - grpc.WithStreamInterceptor(si), grpc.WithUnaryInterceptor(ui)) - if err != nil { - log.Fatal(err) - } - defer conn.Close() - - // And continue using the connection as normal. -} - -func Example_server() { - // Create a listener for the server. - ln, err := net.Listen("tcp", ":50051") - if err != nil { - log.Fatal(err) - } - - // Create the server interceptor using the grpc trace package. - si := grpctrace.StreamServerInterceptor(grpctrace.WithServiceName("my-grpc-client")) - ui := grpctrace.UnaryServerInterceptor(grpctrace.WithServiceName("my-grpc-client")) - - // Initialize the grpc server as normal, using the tracing interceptor. - s := grpc.NewServer(grpc.StreamInterceptor(si), grpc.UnaryInterceptor(ui)) - - // ... register your services - - // Start serving incoming connections. - if err := s.Serve(ln); err != nil { - log.Fatalf("failed to serve: %v", err) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.pb.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.pb.go deleted file mode 100644 index abf28a01..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.pb.go +++ /dev/null @@ -1,230 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: fixtures_test.proto - -/* -Package grpc is a generated protocol buffer package. - -It is generated from these files: - fixtures_test.proto - -It has these top-level messages: - FixtureRequest - FixtureReply -*/ -package grpc - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -import ( - context "golang.org/x/net/context" - grpc1 "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// The request message containing the user's name. -type FixtureRequest struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *FixtureRequest) Reset() { *m = FixtureRequest{} } -func (m *FixtureRequest) String() string { return proto.CompactTextString(m) } -func (*FixtureRequest) ProtoMessage() {} -func (*FixtureRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *FixtureRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// The response message containing the greetings -type FixtureReply struct { - Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` -} - -func (m *FixtureReply) Reset() { *m = FixtureReply{} } -func (m *FixtureReply) String() string { return proto.CompactTextString(m) } -func (*FixtureReply) ProtoMessage() {} -func (*FixtureReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *FixtureReply) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -func init() { - proto.RegisterType((*FixtureRequest)(nil), "grpc.FixtureRequest") - proto.RegisterType((*FixtureReply)(nil), "grpc.FixtureReply") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc1.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc1.SupportPackageIsVersion4 - -// Client API for Fixture service - -type FixtureClient interface { - Ping(ctx context.Context, in *FixtureRequest, opts ...grpc1.CallOption) (*FixtureReply, error) - StreamPing(ctx context.Context, opts ...grpc1.CallOption) (Fixture_StreamPingClient, error) -} - -type fixtureClient struct { - cc *grpc1.ClientConn -} - -func NewFixtureClient(cc *grpc1.ClientConn) FixtureClient { - return &fixtureClient{cc} -} - -func (c *fixtureClient) Ping(ctx context.Context, in *FixtureRequest, opts ...grpc1.CallOption) (*FixtureReply, error) { - out := new(FixtureReply) - err := grpc1.Invoke(ctx, "/grpc.Fixture/Ping", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *fixtureClient) StreamPing(ctx context.Context, opts ...grpc1.CallOption) (Fixture_StreamPingClient, error) { - stream, err := grpc1.NewClientStream(ctx, &_Fixture_serviceDesc.Streams[0], c.cc, "/grpc.Fixture/StreamPing", opts...) - if err != nil { - return nil, err - } - x := &fixtureStreamPingClient{stream} - return x, nil -} - -type Fixture_StreamPingClient interface { - Send(*FixtureRequest) error - Recv() (*FixtureReply, error) - grpc1.ClientStream -} - -type fixtureStreamPingClient struct { - grpc1.ClientStream -} - -func (x *fixtureStreamPingClient) Send(m *FixtureRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *fixtureStreamPingClient) Recv() (*FixtureReply, error) { - m := new(FixtureReply) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// Server API for Fixture service - -type FixtureServer interface { - Ping(context.Context, *FixtureRequest) (*FixtureReply, error) - StreamPing(Fixture_StreamPingServer) error -} - -func RegisterFixtureServer(s *grpc1.Server, srv FixtureServer) { - s.RegisterService(&_Fixture_serviceDesc, srv) -} - -func _Fixture_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) { - in := new(FixtureRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FixtureServer).Ping(ctx, in) - } - info := &grpc1.UnaryServerInfo{ - Server: srv, - FullMethod: "/grpc.Fixture/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FixtureServer).Ping(ctx, req.(*FixtureRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Fixture_StreamPing_Handler(srv interface{}, stream grpc1.ServerStream) error { - return srv.(FixtureServer).StreamPing(&fixtureStreamPingServer{stream}) -} - -type Fixture_StreamPingServer interface { - Send(*FixtureReply) error - Recv() (*FixtureRequest, error) - grpc1.ServerStream -} - -type fixtureStreamPingServer struct { - grpc1.ServerStream -} - -func (x *fixtureStreamPingServer) Send(m *FixtureReply) error { - return x.ServerStream.SendMsg(m) -} - -func (x *fixtureStreamPingServer) Recv() (*FixtureRequest, error) { - m := new(FixtureRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _Fixture_serviceDesc = grpc1.ServiceDesc{ - ServiceName: "grpc.Fixture", - HandlerType: (*FixtureServer)(nil), - Methods: []grpc1.MethodDesc{ - { - MethodName: "Ping", - Handler: _Fixture_Ping_Handler, - }, - }, - Streams: []grpc1.StreamDesc{ - { - StreamName: "StreamPing", - Handler: _Fixture_StreamPing_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "fixtures_test.proto", -} - -func init() { proto.RegisterFile("fixtures_test.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 194 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4e, 0xcb, 0xac, 0x28, - 0x29, 0x2d, 0x4a, 0x2d, 0x8e, 0x2f, 0x49, 0x2d, 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, - 0x62, 0x49, 0x2f, 0x2a, 0x48, 0x56, 0x52, 0xe1, 0xe2, 0x73, 0x83, 0x48, 0x06, 0xa5, 0x16, 0x96, - 0xa6, 0x16, 0x97, 0x08, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, - 0x70, 0x06, 0x81, 0xd9, 0x4a, 0x1a, 0x5c, 0x3c, 0x70, 0x55, 0x05, 0x39, 0x95, 0x42, 0x12, 0x5c, - 0xec, 0xb9, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0x30, 0x65, 0x30, 0xae, 0x51, 0x35, 0x17, 0x3b, 0x54, - 0xa5, 0x90, 0x11, 0x17, 0x4b, 0x40, 0x66, 0x5e, 0xba, 0x90, 0x88, 0x1e, 0xc8, 0x26, 0x3d, 0x54, - 0x6b, 0xa4, 0x84, 0xd0, 0x44, 0x0b, 0x72, 0x2a, 0x95, 0x18, 0x84, 0x6c, 0xb8, 0xb8, 0x82, 0x4b, - 0x8a, 0x52, 0x13, 0x73, 0x49, 0xd5, 0xa9, 0xc1, 0x68, 0xc0, 0xe8, 0xa4, 0xc3, 0x25, 0x99, 0x99, - 0x0f, 0x91, 0x4d, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x03, 0xf9, 0x18, 0x24, 0xe2, - 0xc4, 0x1b, 0x92, 0x5a, 0x5c, 0xe2, 0x1e, 0x14, 0xe0, 0x1c, 0x00, 0xf2, 0x7e, 0x00, 0x63, 0x12, - 0x1b, 0x38, 0x1c, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xdd, 0xb5, 0x70, 0x1e, 0x01, - 0x00, 0x00, -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.proto b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.proto deleted file mode 100644 index 97f5fe6c..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/fixtures_test.proto +++ /dev/null @@ -1,22 +0,0 @@ -syntax = "proto3"; - -option java_multiple_files = true; -option java_package = "io.grpc.examples.testgrpc"; -option java_outer_classname = "TestGRPCProto"; - -package grpc; - -service Fixture { - rpc Ping (FixtureRequest) returns (FixtureReply) {} - rpc StreamPing(stream FixtureRequest) returns (stream FixtureReply) {} -} - -// The request message containing the user's name. -message FixtureRequest { - string name = 1; -} - -// The response message containing the greetings -message FixtureReply { - string message = 1; -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc.go deleted file mode 100644 index bb753df8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc.go +++ /dev/null @@ -1,41 +0,0 @@ -//go:generate protoc -I . fixtures_test.proto --go_out=plugins=grpc:. - -// Package grpc provides functions to trace the google.golang.org/grpc package v1.2. -package grpc // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc" - -import ( - "io" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - context "golang.org/x/net/context" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -func startSpanFromContext(ctx context.Context, method, operation, service string) (ddtrace.Span, context.Context) { - opts := []ddtrace.StartSpanOption{ - tracer.ServiceName(service), - tracer.ResourceName(method), - tracer.Tag(tagMethod, method), - tracer.SpanType(ext.AppTypeRPC), - } - md, _ := metadata.FromIncomingContext(ctx) // nil is ok - if sctx, err := tracer.Extract(grpcutil.MDCarrier(md)); err == nil { - opts = append(opts, tracer.ChildOf(sctx)) - } - return tracer.StartSpanFromContext(ctx, operation, opts...) -} - -// withStreamError returns a tracer.WithError finish option, disregarding OK, EOF and Canceled errors. -func withStreamError(err error) tracer.FinishOption { - errcode := status.Code(err) - if err == io.EOF || errcode == codes.Canceled || errcode == codes.OK || err == context.Canceled { - err = nil - } - return tracer.WithError(err) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc_test.go deleted file mode 100644 index f98eee41..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/grpc_test.go +++ /dev/null @@ -1,423 +0,0 @@ -package grpc - -import ( - "fmt" - "net" - "sync/atomic" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" - context "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/metadata" -) - -func TestClient(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - client := rig.client - - span, ctx := tracer.StartSpanFromContext(context.Background(), "a", tracer.ServiceName("b"), tracer.ResourceName("c")) - - resp, err := client.Ping(ctx, &FixtureRequest{Name: "pass"}) - assert.Nil(err) - span.Finish() - assert.Equal(resp.Message, "passed") - - spans := mt.FinishedSpans() - assert.Len(spans, 3) - - var serverSpan, clientSpan, rootSpan mocktracer.Span - - for _, s := range spans { - // order of traces in buffer is not garanteed - switch s.OperationName() { - case "grpc.server": - serverSpan = s - case "grpc.client": - clientSpan = s - case "a": - rootSpan = s - } - } - - assert.NotNil(serverSpan) - assert.NotNil(clientSpan) - assert.NotNil(rootSpan) - - assert.Equal(clientSpan.Tag(ext.TargetHost), "127.0.0.1") - assert.Equal(clientSpan.Tag(ext.TargetPort), rig.port) - assert.Equal(clientSpan.Tag(tagCode), codes.OK.String()) - assert.Equal(clientSpan.TraceID(), rootSpan.TraceID()) - assert.Equal(serverSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(serverSpan.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.Equal(serverSpan.TraceID(), rootSpan.TraceID()) - -} - -func TestStreaming(t *testing.T) { - // creates a stream, then sends/recvs two pings, then closes the stream - runPings := func(t *testing.T, ctx context.Context, client FixtureClient) { - stream, err := client.StreamPing(ctx) - assert.NoError(t, err) - - for i := 0; i < 2; i++ { - err = stream.Send(&FixtureRequest{Name: "pass"}) - assert.NoError(t, err) - - resp, err := stream.Recv() - assert.NoError(t, err) - assert.Equal(t, resp.Message, "passed") - } - stream.CloseSend() - // to flush the spans - stream.Recv() - } - - checkSpans := func(t *testing.T, rig *rig, spans []mocktracer.Span) { - var rootSpan mocktracer.Span - for _, span := range spans { - if span.OperationName() == "a" { - rootSpan = span - } - } - assert.NotNil(t, rootSpan) - - for _, span := range spans { - if span != rootSpan { - assert.Equal(t, rootSpan.TraceID(), span.TraceID(), - "expected span to to have its trace id set to the root trace id (%d): %v", - rootSpan.TraceID(), span) - assert.Equal(t, ext.AppTypeRPC, span.Tag(ext.SpanType), - "expected span type to be rpc in span: %v", - span) - assert.Equal(t, "grpc", span.Tag(ext.ServiceName), - "expected service name to be grpc in span: %v", - span) - } - - switch span.OperationName() { - case "grpc.client": - // code is only set for the call, not the send/recv messages - assert.Equal(t, codes.OK.String(), span.Tag(tagCode), - "expected grpc code to be set in span: %v", span) - assert.Equal(t, "127.0.0.1", span.Tag(ext.TargetHost), - "expected target host tag to be set in span: %v", span) - assert.Equal(t, rig.port, span.Tag(ext.TargetPort), - "expected target host port to be set in span: %v", span) - fallthrough - case "grpc.server", "grpc.message": - assert.Equal(t, "/grpc.Fixture/StreamPing", span.Tag(ext.ResourceName), - "expected resource name to be set in span: %v", span) - assert.Equal(t, "/grpc.Fixture/StreamPing", span.Tag(tagMethod), - "expected grpc method name to be set in span: %v", span) - } - } - } - - t.Run("All", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "a", - tracer.ServiceName("b"), - tracer.ResourceName("c")) - - runPings(t, ctx, rig.client) - - span.Finish() - - waitForSpans(mt, 13, 5*time.Second) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 13, - "expected 4 client messages + 4 server messages + 1 server call + 1 client call + 1 error from empty recv + 1 parent ctx, but got %v", - len(spans)) - checkSpans(t, rig, spans) - }) - - t.Run("CallsOnly", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true, WithStreamMessages(false)) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "a", - tracer.ServiceName("b"), - tracer.ResourceName("c")) - - runPings(t, ctx, rig.client) - - span.Finish() - - waitForSpans(mt, 3, 5*time.Second) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 3, - "expected 1 server call + 1 client call + 1 parent ctx, but got %v", - len(spans)) - checkSpans(t, rig, spans) - }) - - t.Run("MessagesOnly", func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true, WithStreamCalls(false)) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "a", - tracer.ServiceName("b"), - tracer.ResourceName("c")) - - runPings(t, ctx, rig.client) - - span.Finish() - - waitForSpans(mt, 11, 5*time.Second) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 11, - "expected 4 client messages + 4 server messages + 1 error from empty recv + 1 parent ctx, but got %v", - len(spans)) - checkSpans(t, rig, spans) - }) -} - -func TestChild(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(false) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - client := rig.client - resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "child"}) - assert.Nil(err) - assert.Equal(resp.Message, "child") - - spans := mt.FinishedSpans() - assert.Len(spans, 2) - - var serverSpan, clientSpan mocktracer.Span - - for _, s := range spans { - // order of traces in buffer is not garanteed - switch s.OperationName() { - case "grpc.server": - serverSpan = s - case "child": - clientSpan = s - } - } - - assert.NotNil(clientSpan) - assert.Nil(clientSpan.Tag(ext.Error)) - assert.Equal(clientSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(clientSpan.Tag(ext.ResourceName), "child") - assert.True(clientSpan.FinishTime().Sub(clientSpan.StartTime()) > 0) - - assert.NotNil(serverSpan) - assert.Nil(serverSpan.Tag(ext.Error)) - assert.Equal(serverSpan.Tag(ext.ServiceName), "grpc") - assert.Equal(serverSpan.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.True(serverSpan.FinishTime().Sub(serverSpan.StartTime()) > 0) -} - -func TestPass(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(false) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - client := rig.client - - resp, err := client.Ping(context.Background(), &FixtureRequest{Name: "pass"}) - assert.Nil(err) - assert.Equal(resp.Message, "passed") - - spans := mt.FinishedSpans() - assert.Len(spans, 1) - - s := spans[0] - assert.Nil(s.Tag(ext.Error)) - assert.Equal(s.OperationName(), "grpc.server") - assert.Equal(s.Tag(ext.ServiceName), "grpc") - assert.Equal(s.Tag(ext.ResourceName), "/grpc.Fixture/Ping") - assert.Equal(s.Tag(ext.SpanType), ext.AppTypeRPC) - assert.True(s.FinishTime().Sub(s.StartTime()) > 0) -} - -func TestPreservesMetadata(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - rig, err := newRig(true) - if err != nil { - t.Fatalf("error setting up rig: %s", err) - } - defer rig.Close() - - ctx := context.Background() - ctx = metadata.AppendToOutgoingContext(ctx, "test-key", "test-value") - span, ctx := tracer.StartSpanFromContext(ctx, "x", tracer.ServiceName("y"), tracer.ResourceName("z")) - rig.client.Ping(ctx, &FixtureRequest{Name: "pass"}) - span.Finish() - - md := rig.fixtureServer.lastRequestMetadata.Load().(metadata.MD) - assert.Equal(t, []string{"test-value"}, md.Get("test-key"), - "existing metadata should be preserved") -} - -// fixtureServer a dummy implemenation of our grpc fixtureServer. -type fixtureServer struct { - lastRequestMetadata atomic.Value -} - -func (s *fixtureServer) StreamPing(srv Fixture_StreamPingServer) error { - for { - msg, err := srv.Recv() - if err != nil { - return err - } - - reply, err := s.Ping(srv.Context(), msg) - if err != nil { - return err - } - - err = srv.Send(reply) - if err != nil { - return err - } - } -} - -func (s *fixtureServer) Ping(ctx context.Context, in *FixtureRequest) (*FixtureReply, error) { - if md, ok := metadata.FromIncomingContext(ctx); ok { - s.lastRequestMetadata.Store(md) - } - switch { - case in.Name == "child": - span, _ := tracer.StartSpanFromContext(ctx, "child") - span.Finish() - return &FixtureReply{Message: "child"}, nil - case in.Name == "disabled": - if _, ok := tracer.SpanFromContext(ctx); ok { - panic("should be disabled") - } - return &FixtureReply{Message: "disabled"}, nil - } - return &FixtureReply{Message: "passed"}, nil -} - -// ensure it's a fixtureServer -var _ FixtureServer = &fixtureServer{} - -// rig contains all of the servers and connections we'd need for a -// grpc integration test -type rig struct { - fixtureServer *fixtureServer - server *grpc.Server - port string - listener net.Listener - conn *grpc.ClientConn - client FixtureClient -} - -func (r *rig) Close() { - r.server.Stop() - r.conn.Close() - r.listener.Close() -} - -func newRig(traceClient bool, interceptorOpts ...InterceptorOption) (*rig, error) { - interceptorOpts = append([]InterceptorOption{WithServiceName("grpc")}, interceptorOpts...) - - server := grpc.NewServer( - grpc.UnaryInterceptor(UnaryServerInterceptor(interceptorOpts...)), - grpc.StreamInterceptor(StreamServerInterceptor(interceptorOpts...)), - ) - - fixtureServer := new(fixtureServer) - RegisterFixtureServer(server, fixtureServer) - - li, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return nil, err - } - _, port, _ := net.SplitHostPort(li.Addr().String()) - // start our test fixtureServer. - go server.Serve(li) - - opts := []grpc.DialOption{grpc.WithInsecure()} - if traceClient { - opts = append(opts, - grpc.WithUnaryInterceptor(UnaryClientInterceptor(interceptorOpts...)), - grpc.WithStreamInterceptor(StreamClientInterceptor(interceptorOpts...)), - ) - } - conn, err := grpc.Dial(li.Addr().String(), opts...) - if err != nil { - return nil, fmt.Errorf("error dialing: %s", err) - } - return &rig{ - fixtureServer: fixtureServer, - listener: li, - port: port, - server: server, - conn: conn, - client: NewFixtureClient(conn), - }, err -} - -// waitForSpans polls the mock tracer until the expected number of spans -// appears -func waitForSpans(mt mocktracer.Tracer, sz int, maxWait time.Duration) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() - - for len(mt.FinishedSpans()) < sz { - select { - case <-ctx.Done(): - return - default: - } - time.Sleep(time.Millisecond * 100) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/option.go deleted file mode 100644 index de4b8a4f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/option.go +++ /dev/null @@ -1,51 +0,0 @@ -package grpc - -type interceptorConfig struct { - serviceName string - traceStreamCalls, traceStreamMessages bool -} - -func (cfg *interceptorConfig) serverServiceName() string { - if cfg.serviceName == "" { - return "grpc.server" - } - return cfg.serviceName -} - -func (cfg *interceptorConfig) clientServiceName() string { - if cfg.serviceName == "" { - return "grpc.client" - } - return cfg.serviceName -} - -// InterceptorOption represents an option that can be passed to the grpc unary -// client and server interceptors. -type InterceptorOption func(*interceptorConfig) - -func defaults(cfg *interceptorConfig) { - // cfg.serviceName defaults are set in interceptors - cfg.traceStreamCalls = true - cfg.traceStreamMessages = true -} - -// WithServiceName sets the given service name for the intercepted client. -func WithServiceName(name string) InterceptorOption { - return func(cfg *interceptorConfig) { - cfg.serviceName = name - } -} - -// WithStreamCalls enables or disables tracing of streaming calls. -func WithStreamCalls(enabled bool) InterceptorOption { - return func(cfg *interceptorConfig) { - cfg.traceStreamCalls = enabled - } -} - -// WithStreamMessages enables or disables tracing of streaming messages. -func WithStreamMessages(enabled bool) InterceptorOption { - return func(cfg *interceptorConfig) { - cfg.traceStreamMessages = enabled - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/server.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/server.go deleted file mode 100644 index 0c9a249c..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/server.go +++ /dev/null @@ -1,93 +0,0 @@ -package grpc - -import ( - context "golang.org/x/net/context" - "google.golang.org/grpc" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -type serverStream struct { - grpc.ServerStream - cfg *interceptorConfig - method string - ctx context.Context -} - -// Context returns the ServerStream Context. -// -// One subtle difference between the server stream and the client stream is the -// order the contexts are created. In the client stream we pass the context to -// the streamer function, which means the ClientStream.Context() derives from -// the span context, so we want to return that. However with the ServerStream -// the span context derives from the ServerStream.Context, so we want to return -// the span context instead. -func (ss *serverStream) Context() context.Context { - return ss.ctx -} - -func (ss *serverStream) RecvMsg(m interface{}) (err error) { - if ss.cfg.traceStreamMessages { - span, _ := startSpanFromContext(ss.ctx, ss.method, "grpc.message", ss.cfg.serverServiceName()) - defer span.Finish(withStreamError(err)) - } - err = ss.ServerStream.RecvMsg(m) - return err -} - -func (ss *serverStream) SendMsg(m interface{}) (err error) { - if ss.cfg.traceStreamMessages { - span, _ := startSpanFromContext(ss.ctx, ss.method, "grpc.message", ss.cfg.serverServiceName()) - defer span.Finish(withStreamError(err)) - } - err = ss.ServerStream.SendMsg(m) - return err -} - -// StreamServerInterceptor will trace streaming requests to the given gRPC server. -func StreamServerInterceptor(opts ...InterceptorOption) grpc.StreamServerInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - if cfg.serviceName == "" { - cfg.serviceName = "grpc.server" - } - return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { - ctx := ss.Context() - - // if we've enabled call tracing, create a span - if cfg.traceStreamCalls { - var span ddtrace.Span - span, ctx = startSpanFromContext(ctx, info.FullMethod, "grpc.server", cfg.serviceName) - defer span.Finish(withStreamError(err)) - } - - // call the original handler with a new stream, which traces each send - // and recv if message tracing is enabled - err = handler(srv, &serverStream{ - ServerStream: ss, - cfg: cfg, - method: info.FullMethod, - ctx: ctx, - }) - - return err - } -} - -// UnaryServerInterceptor will trace requests to the given grpc server. -func UnaryServerInterceptor(opts ...InterceptorOption) grpc.UnaryServerInterceptor { - cfg := new(interceptorConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - span, ctx := startSpanFromContext(ctx, info.FullMethod, "grpc.server", cfg.serverServiceName()) - resp, err := handler(ctx, req) - span.Finish(tracer.WithError(err)) - return resp, err - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/tags.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/tags.go deleted file mode 100644 index bbaf5c9e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc/tags.go +++ /dev/null @@ -1,7 +0,0 @@ -package grpc - -// Tags used for gRPC -const ( - tagMethod = "grpc.method" - tagCode = "grpc.code" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier.go deleted file mode 100644 index 0f511507..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier.go +++ /dev/null @@ -1,44 +0,0 @@ -package grpcutil // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil" - -import ( - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "google.golang.org/grpc/metadata" -) - -// MDCarrier implements tracer.TextMapWriter and tracer.TextMapReader on top -// of gRPC's metadata, allowing it to be used as a span context carrier for -// distributed tracing. -type MDCarrier metadata.MD - -var _ tracer.TextMapWriter = (*MDCarrier)(nil) -var _ tracer.TextMapReader = (*MDCarrier)(nil) - -// Get will return the first entry in the metadata at the given key. -func (mdc MDCarrier) Get(key string) string { - if m := mdc[key]; len(m) > 0 { - return m[0] - } - return "" -} - -// Set will add the given value to the values found at key. Key will be lowercased to match -// the metadata implementation. -func (mdc MDCarrier) Set(key, val string) { - k := strings.ToLower(key) // as per google.golang.org/grpc/metadata/metadata.go - mdc[k] = append(mdc[k], val) -} - -// ForeachKey will iterate over all key/value pairs in the metadata. -func (mdc MDCarrier) ForeachKey(handler func(key, val string) error) error { - for k, vs := range mdc { - for _, v := range vs { - if err := handler(k, v); err != nil { - return err - } - } - } - return nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier_test.go deleted file mode 100644 index fba6797e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/internal/grpcutil/mdcarrier_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package grpcutil - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "google.golang.org/grpc/metadata" -) - -func TestMDCarrierSet(t *testing.T) { - assert := assert.New(t) - md := metadata.MD{} - mdc := MDCarrier(md) - - // add one item - mdc.Set("k1", "v1") - assert.Len(md, 1) - assert.Len(md["k1"], 1) - assert.Equal("v1", md["k1"][0]) - - // add a second value - mdc.Set("k1", "v2") - assert.Len(md, 1) - assert.Len(md["k1"], 2) - assert.Equal("v1", md["k1"][0]) - assert.Equal("v2", md["k1"][1]) - - // add a second item - mdc.Set("k2", "v21") - assert.Len(md, 2) - assert.Len(md["k2"], 1) - assert.Equal("v21", md["k2"][0]) -} - -func TestMDCarrierGet(t *testing.T) { - assert := assert.New(t) - md := metadata.Pairs("k1", "v1", "k2", "v2", "k2", "v22") - mdc := MDCarrier(md) - - assert.Equal("v1", mdc.Get("k1")) - assert.Equal("v2", mdc.Get("k2")) -} - -func TestMDCarrierForeachKey(t *testing.T) { - want := metadata.Pairs("k1", "v1", "k2", "v2", "k2", "v22") - got := metadata.MD{} - wantc := MDCarrier(want) - gotc := MDCarrier(got) - - err := wantc.ForeachKey(func(k, v string) error { - gotc.Set(k, v) - return nil - }) - - assert.Nil(t, err) - assert.Equal(t, want, got) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/example_test.go deleted file mode 100644 index 64e387a3..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/example_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package mux_test - -import ( - "net/http" - - muxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux" -) - -func handler(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Hello World!\n")) -} - -func Example() { - mux := muxtrace.NewRouter() - mux.HandleFunc("/", handler) - http.ListenAndServe(":8080", mux) -} - -func Example_withServiceName() { - mux := muxtrace.NewRouter(muxtrace.WithServiceName("mux.route")) - mux.HandleFunc("/", handler) - http.ListenAndServe(":8080", mux) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux.go deleted file mode 100644 index e12887f9..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux.go +++ /dev/null @@ -1,103 +0,0 @@ -// Package mux provides tracing functions for tracing the gorilla/mux package (https://github.com/gorilla/mux). -package mux // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux" - -import ( - "net/http" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/gorilla/mux" -) - -// Router registers routes to be matched and dispatches a handler. -type Router struct { - *mux.Router - config *routerConfig -} - -// StrictSlash defines the trailing slash behavior for new routes. The initial -// value is false. -// -// When true, if the route path is "/path/", accessing "/path" will perform a redirect -// to the former and vice versa. In other words, your application will always -// see the path as specified in the route. -// -// When false, if the route path is "/path", accessing "/path/" will not match -// this route and vice versa. -// -// The re-direct is a HTTP 301 (Moved Permanently). Note that when this is set for -// routes with a non-idempotent method (e.g. POST, PUT), the subsequent re-directed -// request will be made as a GET by most clients. Use middleware or client settings -// to modify this behaviour as needed. -// -// Special case: when a route sets a path prefix using the PathPrefix() method, -// strict slash is ignored for that route because the redirect behavior can't -// be determined from a prefix alone. However, any subrouters created from that -// route inherit the original StrictSlash setting. -func (r *Router) StrictSlash(value bool) *Router { - r.Router.StrictSlash(value) - return r -} - -// SkipClean defines the path cleaning behaviour for new routes. The initial -// value is false. Users should be careful about which routes are not cleaned -// -// When true, if the route path is "/path//to", it will remain with the double -// slash. This is helpful if you have a route like: /fetch/http://xkcd.com/534/ -// -// When false, the path will be cleaned, so /fetch/http://xkcd.com/534/ will -// become /fetch/http/xkcd.com/534 -func (r *Router) SkipClean(value bool) *Router { - r.Router.SkipClean(value) - return r -} - -// UseEncodedPath tells the router to match the encoded original path -// to the routes. -// For eg. "/path/foo%2Fbar/to" will match the path "/path/{var}/to". -// -// If not called, the router will match the unencoded path to the routes. -// For eg. "/path/foo%2Fbar/to" will match the path "/path/foo/bar/to" -func (r *Router) UseEncodedPath() *Router { - r.Router.UseEncodedPath() - return r -} - -// NewRouter returns a new router instance traced with the global tracer. -func NewRouter(opts ...RouterOption) *Router { - cfg := new(routerConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return &Router{ - Router: mux.NewRouter(), - config: cfg, - } -} - -// ServeHTTP dispatches the request to the handler -// whose pattern most closely matches the request URL. -// We only need to rewrite this function to be able to trace -// all the incoming requests to the underlying multiplexer -func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { - var ( - match mux.RouteMatch - spanopts []ddtrace.StartSpanOption - route = "unknown" - ) - // get the resource associated to this request - if r.Match(req, &match) && match.Route != nil { - if r, err := match.Route.GetPathTemplate(); err == nil { - route = r - } - if h, err := match.Route.GetHostTemplate(); err == nil { - spanopts = append(spanopts, tracer.Tag("mux.host", h)) - } - } - spanopts = append(spanopts, r.config.spanOpts...) - resource := req.Method + " " + route - httputil.TraceAndServe(r.Router, w, req, r.config.serviceName, resource, spanopts...) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux_test.go deleted file mode 100644 index cc8c0fd0..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/mux_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package mux - -import ( - "fmt" - "net/http" - "net/http/httptest" - "strconv" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" -) - -func TestHttpTracer(t *testing.T) { - for _, ht := range []struct { - code int - method string - url string - resourceName string - errorStr string - }{ - { - code: http.StatusOK, - method: "GET", - url: "/200", - resourceName: "GET /200", - }, - { - code: http.StatusNotFound, - method: "GET", - url: "/not_a_real_route", - resourceName: "GET unknown", - }, - { - code: http.StatusMethodNotAllowed, - method: "POST", - url: "/405", - resourceName: "POST unknown", - }, - { - code: http.StatusInternalServerError, - method: "GET", - url: "/500", - resourceName: "GET /500", - errorStr: "500: Internal Server Error", - }, - } { - t.Run(http.StatusText(ht.code), func(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - codeStr := strconv.Itoa(ht.code) - - // Send and verify a request - r := httptest.NewRequest(ht.method, ht.url, nil) - w := httptest.NewRecorder() - router().ServeHTTP(w, r) - assert.Equal(ht.code, w.Code) - assert.Equal(codeStr+"!\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal(codeStr, s.Tag(ext.HTTPCode)) - assert.Equal(ht.method, s.Tag(ext.HTTPMethod)) - assert.Equal(ht.url, s.Tag(ext.HTTPURL)) - assert.Equal(ht.resourceName, s.Tag(ext.ResourceName)) - if ht.errorStr != "" { - assert.Equal(ht.errorStr, s.Tag(ext.Error).(error).Error()) - } - }) - } -} - -func TestDomain(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - mux := NewRouter(WithServiceName("my-service")) - mux.Handle("/200", okHandler()).Host("localhost") - r := httptest.NewRequest("GET", "http://localhost/200", nil) - w := httptest.NewRecorder() - mux.ServeHTTP(w, r) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - assert.Equal("localhost", spans[0].Tag("mux.host")) -} - -func TestSpanOptions(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - mux := NewRouter(WithSpanOptions(tracer.Tag(ext.SamplingPriority, 2))) - mux.Handle("/200", okHandler()).Host("localhost") - r := httptest.NewRequest("GET", "http://localhost/200", nil) - w := httptest.NewRecorder() - mux.ServeHTTP(w, r) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - assert.Equal(2, spans[0].Tag(ext.SamplingPriority)) -} - -// TestImplementingMethods is a regression tests asserting that all the mux.Router methods -// returning the router will return the modified traced version of it and not the original -// router. -func TestImplementingMethods(t *testing.T) { - r := NewRouter() - _ = (*Router)(r.StrictSlash(false)) - _ = (*Router)(r.SkipClean(false)) - _ = (*Router)(r.UseEncodedPath()) -} - -func router() http.Handler { - mux := NewRouter(WithServiceName("my-service")) - mux.Handle("/200", okHandler()) - mux.Handle("/500", errorHandler(http.StatusInternalServerError)) - mux.Handle("/405", okHandler()).Methods("GET") - mux.NotFoundHandler = errorHandler(http.StatusNotFound) - mux.MethodNotAllowedHandler = errorHandler(http.StatusMethodNotAllowed) - return mux -} - -func errorHandler(code int) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - http.Error(w, fmt.Sprintf("%d!", code), code) - }) -} - -func okHandler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("200!\n")) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/option.go deleted file mode 100644 index 0b96d26f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux/option.go +++ /dev/null @@ -1,30 +0,0 @@ -package mux - -import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - -type routerConfig struct { - serviceName string - spanOpts []ddtrace.StartSpanOption // additional span options to be applied -} - -// RouterOption represents an option that can be passed to NewRouter. -type RouterOption func(*routerConfig) - -func defaults(cfg *routerConfig) { - cfg.serviceName = "mux.router" -} - -// WithServiceName sets the given service name for the router. -func WithServiceName(name string) RouterOption { - return func(cfg *routerConfig) { - cfg.serviceName = name - } -} - -// WithSpanOptions applies the given set of options to the spans started -// by the router. -func WithSpanOptions(opts ...ddtrace.StartSpanOption) RouterOption { - return func(cfg *routerConfig) { - cfg.spanOpts = opts - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/example_test.go deleted file mode 100644 index 0480e1d3..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/example_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package graphql_test - -import ( - "log" - "net/http" - - graphql "github.com/graph-gophers/graphql-go" - "github.com/graph-gophers/graphql-go/relay" - graphqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go" -) - -type resolver struct{} - -func (*resolver) Hello() string { return "Hello, world!" } - -func Example() { - s := ` - schema { - query: Query - } - type Query { - hello: String! - } - ` - schema := graphql.MustParseSchema(s, new(resolver), - graphql.Tracer(graphqltrace.NewTracer())) - http.Handle("/query", &relay.Handler{Schema: schema}) - log.Fatal(http.ListenAndServe(":8080", nil)) - - // then: - // $ curl -XPOST -d '{"query": "{ hello }"}' localhost:8080/query -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql.go deleted file mode 100644 index 30f4a3f2..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql.go +++ /dev/null @@ -1,81 +0,0 @@ -// Package graphql provides functions to trace the graph-gophers/graphql-go package (https://github.com/graph-gophers/graphql-go). -// -// We use the tracing mechanism available in the -// https://godoc.org/github.com/graph-gophers/graphql-go/trace subpackage. -// Create a new Tracer with `NewTracer` and pass it as an additional option to -// `MustParseSchema`. -package graphql // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go" - -import ( - "context" - "fmt" - - "github.com/graph-gophers/graphql-go/errors" - "github.com/graph-gophers/graphql-go/introspection" - "github.com/graph-gophers/graphql-go/trace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -const ( - tagGraphqlField = "graphql.field" - tagGraphqlQuery = "graphql.query" - tagGraphqlType = "graphql.type" -) - -// A Tracer implements the graphql-go/trace.Tracer interface by sending traces -// to the Datadog tracer. -type Tracer struct { - cfg *config -} - -var _ trace.Tracer = (*Tracer)(nil) - -// TraceQuery traces a GraphQL query. -func (t *Tracer) TraceQuery(ctx context.Context, queryString string, operationName string, variables map[string]interface{}, varTypes map[string]*introspection.Type) (context.Context, trace.TraceQueryFinishFunc) { - span, ctx := tracer.StartSpanFromContext(ctx, "graphql.request", - tracer.ServiceName(t.cfg.serviceName), - tracer.Tag(tagGraphqlQuery, queryString), - ) - - return ctx, func(errs []*errors.QueryError) { - var err error - switch n := len(errs); n { - case 0: - // err = nil - case 1: - err = errs[0] - default: - err = fmt.Errorf("%s (and %d more errors)", errs[0], n-1) - } - span.Finish(tracer.WithError(err)) - } -} - -// TraceField traces a GraphQL field access. -func (t *Tracer) TraceField(ctx context.Context, label string, typeName string, fieldName string, trivial bool, args map[string]interface{}) (context.Context, trace.TraceFieldFinishFunc) { - span, ctx := tracer.StartSpanFromContext(ctx, "graphql.field", - tracer.ServiceName(t.cfg.serviceName), - tracer.Tag(tagGraphqlField, fieldName), - tracer.Tag(tagGraphqlType, typeName), - ) - return ctx, func(err *errors.QueryError) { - // must explicitly check for nil, see issue golang/go#22729 - if err != nil { - span.Finish(tracer.WithError(err)) - } else { - span.Finish() - } - } -} - -// NewTracer creates a new Tracer. -func NewTracer(opts ...Option) trace.Tracer { - cfg := new(config) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - return &Tracer{ - cfg: cfg, - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql_test.go deleted file mode 100644 index 8d9580aa..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/graphql_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package graphql - -import ( - "net/http" - "net/http/httptest" - "strings" - "testing" - - graphql "github.com/graph-gophers/graphql-go" - "github.com/graph-gophers/graphql-go/relay" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -type testResolver struct{} - -func (*testResolver) Hello() string { return "Hello, world!" } - -func Test(t *testing.T) { - s := ` - schema { - query: Query - } - type Query { - hello: String! - } - ` - schema := graphql.MustParseSchema(s, new(testResolver), - graphql.Tracer(NewTracer(WithServiceName("test-graphql-service")))) - srv := httptest.NewServer(&relay.Handler{Schema: schema}) - defer srv.Close() - - mt := mocktracer.Start() - defer mt.Stop() - - http.Post(srv.URL, "application/json", strings.NewReader(`{ - "query": "{ hello }" - }`)) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[1].TraceID(), spans[0].TraceID()) - - { - s := spans[0] - assert.Equal(t, "hello", s.Tag(tagGraphqlField)) - assert.Nil(t, s.Tag(ext.Error)) - assert.Equal(t, "test-graphql-service", s.Tag(ext.ServiceName)) - assert.Equal(t, "Query", s.Tag(tagGraphqlType)) - assert.Equal(t, "graphql.field", s.OperationName()) - assert.Equal(t, "graphql.field", s.Tag(ext.ResourceName)) - } - - { - s := spans[1] - assert.Equal(t, "{ hello }", s.Tag(tagGraphqlQuery)) - assert.Nil(t, s.Tag(ext.Error)) - assert.Equal(t, "test-graphql-service", s.Tag(ext.ServiceName)) - assert.Equal(t, "graphql.request", s.OperationName()) - assert.Equal(t, "graphql.request", s.Tag(ext.ResourceName)) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/option.go deleted file mode 100644 index c7cb15bf..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package graphql - -type config struct{ serviceName string } - -// Option represents an option that can be used customize the Tracer. -type Option func(*config) - -func defaults(cfg *config) { - cfg.serviceName = "graphql.server" -} - -// WithServiceName sets the given service name for the client. -func WithServiceName(name string) Option { - return func(cfg *config) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/make_responsewriter.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/make_responsewriter.go deleted file mode 100644 index ae0482d0..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/make_responsewriter.go +++ /dev/null @@ -1,68 +0,0 @@ -// +build ignore - -// This program generates wrapper implementations of http.ResponseWriter that -// also satisfy http.Flusher, http.Pusher, http.CloseNotifier and http.Hijacker, -// based on whether or not the passed in http.ResponseWriter also satisfies -// them. - -package main - -import ( - "os" - "text/template" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists" -) - -func main() { - interfaces := []string{"Flusher", "Pusher", "CloseNotifier", "Hijacker"} - var combos [][][]string - for pick := len(interfaces); pick > 0; pick-- { - combos = append(combos, lists.Combinations(interfaces, pick)) - } - template.Must(template.New("").Parse(tpl)).Execute(os.Stdout, map[string]interface{}{ - "Interfaces": interfaces, - "Combinations": combos, - }) -} - -var tpl = `// Code generated by make_responsewriter.go DO NOT EDIT - -package httputil - -import ( - "net/http" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -// wrapResponseWriter wraps an underlying http.ResponseWriter so that it can -// trace the http response codes. It also checks for various http interfaces -// (Flusher, Pusher, CloseNotifier, Hijacker) and if the underlying -// http.ResponseWriter implements them it generates an unnamed struct with the -// appropriate fields. -// -// This code is generated because we have to account for all the permutations -// of the interfaces. -func wrapResponseWriter(w http.ResponseWriter, span ddtrace.Span) http.ResponseWriter { -{{- range .Interfaces }} - h{{.}}, ok{{.}} := w.(http.{{.}}) -{{- end }} - - w = newResponseWriter(w, span) - switch { -{{- range .Combinations }} - {{- range . }} - case {{ range $i, $v := . }}{{ if gt $i 0 }} && {{ end }}ok{{ $v }}{{ end }}: - w = struct { - http.ResponseWriter - {{- range . }} - http.{{.}} - {{- end }} - } { w{{ range . }}, h{{.}}{{ end }} } - {{- end }} -{{- end }} - } - - return w -} -` diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace.go deleted file mode 100644 index 1f69d23f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace.go +++ /dev/null @@ -1,66 +0,0 @@ -package httputil // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil" - -//go:generate sh -c "go run make_responsewriter.go | gofmt > trace_gen.go" - -import ( - "fmt" - "net/http" - "strconv" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// TraceAndServe will apply tracing to the given http.Handler using the passed tracer under the given service and resource. -func TraceAndServe(h http.Handler, w http.ResponseWriter, r *http.Request, service, resource string, spanopts ...ddtrace.StartSpanOption) { - opts := append([]ddtrace.StartSpanOption{ - tracer.SpanType(ext.SpanTypeWeb), - tracer.ServiceName(service), - tracer.ResourceName(resource), - tracer.Tag(ext.HTTPMethod, r.Method), - tracer.Tag(ext.HTTPURL, r.URL.Path), - }, spanopts...) - if spanctx, err := tracer.Extract(tracer.HTTPHeadersCarrier(r.Header)); err == nil { - opts = append(opts, tracer.ChildOf(spanctx)) - } - span, ctx := tracer.StartSpanFromContext(r.Context(), "http.request", opts...) - defer span.Finish() - - w = wrapResponseWriter(w, span) - - h.ServeHTTP(w, r.WithContext(ctx)) -} - -// responseWriter is a small wrapper around an http response writer that will -// intercept and store the status of a request. -type responseWriter struct { - http.ResponseWriter - span ddtrace.Span - status int -} - -func newResponseWriter(w http.ResponseWriter, span ddtrace.Span) *responseWriter { - return &responseWriter{w, span, 0} -} - -// Write writes the data to the connection as part of an HTTP reply. -// We explicitely call WriteHeader with the 200 status code -// in order to get it reported into the span. -func (w *responseWriter) Write(b []byte) (int, error) { - if w.status == 0 { - w.WriteHeader(http.StatusOK) - } - return w.ResponseWriter.Write(b) -} - -// WriteHeader sends an HTTP response header with status code. -// It also sets the status code to the span. -func (w *responseWriter) WriteHeader(status int) { - w.ResponseWriter.WriteHeader(status) - w.status = status - w.span.SetTag(ext.HTTPCode, strconv.Itoa(status)) - if status >= 500 && status < 600 { - w.span.SetTag(ext.Error, fmt.Errorf("%d: %s", status, http.StatusText(status))) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_gen.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_gen.go deleted file mode 100644 index da5af82f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_gen.go +++ /dev/null @@ -1,121 +0,0 @@ -// Code generated by make_responsewriter.go DO NOT EDIT - -package httputil - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "net/http" -) - -// wrapResponseWriter wraps an underlying http.ResponseWriter so that it can -// trace the http response codes. It also checks for various http interfaces -// (Flusher, Pusher, CloseNotifier, Hijacker) and if the underlying -// http.ResponseWriter implements them it generates an unnamed struct with the -// appropriate fields. -// -// This code is generated because we have to account for all the permutations -// of the interfaces. -func wrapResponseWriter(w http.ResponseWriter, span ddtrace.Span) http.ResponseWriter { - hFlusher, okFlusher := w.(http.Flusher) - hPusher, okPusher := w.(http.Pusher) - hCloseNotifier, okCloseNotifier := w.(http.CloseNotifier) - hHijacker, okHijacker := w.(http.Hijacker) - - w = newResponseWriter(w, span) - switch { - case okFlusher && okPusher && okCloseNotifier && okHijacker: - w = struct { - http.ResponseWriter - http.Flusher - http.Pusher - http.CloseNotifier - http.Hijacker - }{w, hFlusher, hPusher, hCloseNotifier, hHijacker} - case okFlusher && okPusher && okCloseNotifier: - w = struct { - http.ResponseWriter - http.Flusher - http.Pusher - http.CloseNotifier - }{w, hFlusher, hPusher, hCloseNotifier} - case okFlusher && okPusher && okHijacker: - w = struct { - http.ResponseWriter - http.Flusher - http.Pusher - http.Hijacker - }{w, hFlusher, hPusher, hHijacker} - case okFlusher && okCloseNotifier && okHijacker: - w = struct { - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - }{w, hFlusher, hCloseNotifier, hHijacker} - case okPusher && okCloseNotifier && okHijacker: - w = struct { - http.ResponseWriter - http.Pusher - http.CloseNotifier - http.Hijacker - }{w, hPusher, hCloseNotifier, hHijacker} - case okFlusher && okPusher: - w = struct { - http.ResponseWriter - http.Flusher - http.Pusher - }{w, hFlusher, hPusher} - case okFlusher && okCloseNotifier: - w = struct { - http.ResponseWriter - http.Flusher - http.CloseNotifier - }{w, hFlusher, hCloseNotifier} - case okFlusher && okHijacker: - w = struct { - http.ResponseWriter - http.Flusher - http.Hijacker - }{w, hFlusher, hHijacker} - case okPusher && okCloseNotifier: - w = struct { - http.ResponseWriter - http.Pusher - http.CloseNotifier - }{w, hPusher, hCloseNotifier} - case okPusher && okHijacker: - w = struct { - http.ResponseWriter - http.Pusher - http.Hijacker - }{w, hPusher, hHijacker} - case okCloseNotifier && okHijacker: - w = struct { - http.ResponseWriter - http.CloseNotifier - http.Hijacker - }{w, hCloseNotifier, hHijacker} - case okFlusher: - w = struct { - http.ResponseWriter - http.Flusher - }{w, hFlusher} - case okPusher: - w = struct { - http.ResponseWriter - http.Pusher - }{w, hPusher} - case okCloseNotifier: - w = struct { - http.ResponseWriter - http.CloseNotifier - }{w, hCloseNotifier} - case okHijacker: - w = struct { - http.ResponseWriter - http.Hijacker - }{w, hHijacker} - } - - return w -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_test.go deleted file mode 100644 index 018b1fb5..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil/trace_test.go +++ /dev/null @@ -1,160 +0,0 @@ -package httputil - -import ( - "fmt" - "io/ioutil" - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestTraceAndServe(t *testing.T) { - t.Run("regular", func(t *testing.T) { - mt := mocktracer.Start() - assert := assert.New(t) - defer mt.Stop() - - called := false - w := httptest.NewRecorder() - r, err := http.NewRequest("GET", "/", nil) - assert.NoError(err) - handler := func(w http.ResponseWriter, r *http.Request) { - _, ok := w.(http.Hijacker) - assert.False(ok) - http.Error(w, "some error", http.StatusServiceUnavailable) - called = true - } - TraceAndServe(http.HandlerFunc(handler), w, r, "service", "resource") - spans := mt.FinishedSpans() - span := spans[0] - - assert.True(called) - assert.Len(spans, 1) - assert.Equal(ext.SpanTypeWeb, span.Tag(ext.SpanType)) - assert.Equal("service", span.Tag(ext.ServiceName)) - assert.Equal("resource", span.Tag(ext.ResourceName)) - assert.Equal("GET", span.Tag(ext.HTTPMethod)) - assert.Equal("/", span.Tag(ext.HTTPURL)) - assert.Equal("503", span.Tag(ext.HTTPCode)) - assert.Equal("503: Service Unavailable", span.Tag(ext.Error).(error).Error()) - }) - - t.Run("Hijacker,Flusher,CloseNotifier", func(t *testing.T) { - assert := assert.New(t) - called := false - handler := func(w http.ResponseWriter, r *http.Request) { - _, ok := w.(http.Hijacker) - assert.True(ok, "ResponseWriter should implement http.Hijacker") - _, ok = w.(http.Flusher) - assert.True(ok, "ResponseWriter should implement http.Flusher") - _, ok = w.(http.CloseNotifier) - assert.True(ok, "ResponseWriter should implement http.CloseNotifier") - fmt.Fprintln(w, "Hello, world!") - called = true - } - srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - TraceAndServe(http.HandlerFunc(handler), w, r, "service", "resource") - })) - defer srv.Close() - - res, err := http.Get(srv.URL) - assert.NoError(err) - slurp, err := ioutil.ReadAll(res.Body) - res.Body.Close() - assert.True(called) - assert.NoError(err) - assert.Equal("Hello, world!\n", string(slurp)) - }) - - // there doesn't appear to be an easy way to test http.Pusher support via an http request - // so we'll just confirm wrapResponseWriter preserves it - t.Run("Pusher", func(t *testing.T) { - var i struct { - http.ResponseWriter - http.Pusher - } - var w http.ResponseWriter = i - _, ok := w.(http.ResponseWriter) - assert.True(t, ok) - _, ok = w.(http.Pusher) - assert.True(t, ok) - - w = wrapResponseWriter(w, nil) - _, ok = w.(http.ResponseWriter) - assert.True(t, ok) - _, ok = w.(http.Pusher) - assert.True(t, ok) - }) - - t.Run("distributed", func(t *testing.T) { - mt := mocktracer.Start() - assert := assert.New(t) - defer mt.Stop() - - called := false - handler := func(w http.ResponseWriter, r *http.Request) { - called = true - } - - // create a request with a span injected into its headers - parent := tracer.StartSpan("parent") - parent.Finish() // finish it so the mocktracer can catch it - r, err := http.NewRequest("GET", "/", nil) - assert.NoError(err) - carrier := tracer.HTTPHeadersCarrier(r.Header) - err = tracer.Inject(parent.Context(), carrier) - assert.NoError(err) - w := httptest.NewRecorder() - - TraceAndServe(http.HandlerFunc(handler), w, r, "service", "resource") - - var p, c mocktracer.Span - spans := mt.FinishedSpans() - assert.Len(spans, 2) - if spans[0].OperationName() == "parent" { - p, c = spans[0], spans[1] - } else { - p, c = spans[1], spans[0] - } - assert.True(called) - assert.Equal(c.ParentID(), p.SpanID()) - }) - - t.Run("context", func(t *testing.T) { - mt := mocktracer.Start() - assert := assert.New(t) - defer mt.Stop() - - called := false - handler := func(w http.ResponseWriter, r *http.Request) { - called = true - } - - // create a request with a span in its context - parent := tracer.StartSpan("parent") - parent.Finish() // finish it so the mocktracer can catch it - r, err := http.NewRequest("GET", "/", nil) - assert.NoError(err) - r = r.WithContext(tracer.ContextWithSpan(r.Context(), parent)) - w := httptest.NewRecorder() - - TraceAndServe(http.HandlerFunc(handler), w, r, "service", "resource") - - var p, c mocktracer.Span - spans := mt.FinishedSpans() - assert.Len(spans, 2) - if spans[0].OperationName() == "parent" { - p, c = spans[0], spans[1] - } else { - p, c = spans[1], spans[0] - } - assert.True(called) - assert.Equal(c.ParentID(), p.SpanID()) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations.go deleted file mode 100644 index d91c6bbf..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations.go +++ /dev/null @@ -1,39 +0,0 @@ -package lists - -// Combinations returns all possible unique selections of size `pick` of a list -// of strings for which order does not matter -// -// an example: -// -// Combinations([cat, dog, bird], 2): -// [cat] -> Combinations([dog, bird], 1) -// [cat, dog] -// [cat, bird] -// [dog] -> Combinations([bird], 1) -// [dog, bird] -// [bird] -> Combinations([], 0) -// n/a -// -func Combinations(list []string, pick int) (all [][]string) { - switch pick { - case 0: - // nothing to do - case 1: - for i := range list { - all = append(all, list[i:i+1]) - } - default: - // we recursively find combinations by taking each item in the list - // and then finding the combinations at (pick-1) for the remaining - // items in the list - // the reason we start at [i+1:], is because the order of the items in - // the list doesn't matter, so this will remove all the duplicates we - // would get otherwise - for i := range list { - for _, next := range Combinations(list[i+1:], pick-1) { - all = append(all, append([]string{list[i]}, next...)) - } - } - } - return all -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations_test.go deleted file mode 100644 index b4b0a549..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/lists/combinations_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package lists - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestCombinations(t *testing.T) { - { - combos := Combinations([]string{"cat", "dog", "bird", "mouse"}, 3) - assert.Equal(t, [][]string{ - {"cat", "dog", "bird"}, - {"cat", "dog", "mouse"}, - {"cat", "bird", "mouse"}, - {"dog", "bird", "mouse"}, - }, combos) - } - { - combos := Combinations([]string{"cat", "dog", "bird", "mouse"}, 2) - assert.Equal(t, [][]string{ - {"cat", "dog"}, - {"cat", "bird"}, - {"cat", "mouse"}, - {"dog", "bird"}, - {"dog", "mouse"}, - {"bird", "mouse"}, - }, combos) - } - { - combos := Combinations([]string{"cat", "dog", "bird", "mouse"}, 1) - assert.Equal(t, [][]string{ - {"cat"}, - {"dog"}, - {"bird"}, - {"mouse"}, - }, combos) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest/sqltest.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest/sqltest.go deleted file mode 100644 index c37638fc..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest/sqltest.go +++ /dev/null @@ -1,216 +0,0 @@ -package sqltest // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest" - -import ( - "context" - "database/sql" - "fmt" - "log" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" -) - -// Prepare sets up a table with the given name in both the MySQL and Postgres databases and returns -// a teardown function which will drop it. -func Prepare(tableName string) func() { - queryDrop := fmt.Sprintf("DROP TABLE IF EXISTS %s", tableName) - queryCreate := fmt.Sprintf("CREATE TABLE %s (id integer NOT NULL DEFAULT '0', name text)", tableName) - mysql, err := sql.Open("mysql", "test:test@tcp(127.0.0.1:3306)/test") - defer mysql.Close() - if err != nil { - log.Fatal(err) - } - mysql.Exec(queryDrop) - mysql.Exec(queryCreate) - postgres, err := sql.Open("postgres", "postgres://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable") - defer postgres.Close() - if err != nil { - log.Fatal(err) - } - postgres.Exec(queryDrop) - postgres.Exec(queryCreate) - return func() { - mysql.Exec(queryDrop) - postgres.Exec(queryDrop) - } -} - -// RunAll applies a sequence of unit tests to check the correct tracing of sql features. -func RunAll(t *testing.T, cfg *Config) { - cfg.mockTracer = mocktracer.Start() - defer cfg.mockTracer.Stop() - - for name, test := range map[string]func(*Config) func(*testing.T){ - "Ping": testPing, - "Query": testQuery, - "Statement": testStatement, - "BeginRollback": testBeginRollback, - "Exec": testExec, - } { - t.Run(name, test(cfg)) - } -} - -func testPing(cfg *Config) func(*testing.T) { - return func(t *testing.T) { - cfg.mockTracer.Reset() - assert := assert.New(t) - err := cfg.DB.Ping() - assert.Nil(err) - spans := cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - } -} - -func testQuery(cfg *Config) func(*testing.T) { - query := fmt.Sprintf("SELECT id, name FROM %s LIMIT 5", cfg.TableName) - return func(t *testing.T) { - cfg.mockTracer.Reset() - assert := assert.New(t) - rows, err := cfg.DB.Query(query) - defer rows.Close() - assert.Nil(err) - - spans := cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - } -} - -func testStatement(cfg *Config) func(*testing.T) { - query := "INSERT INTO %s(name) VALUES(%s)" - switch cfg.DriverName { - case "postgres": - query = fmt.Sprintf(query, cfg.TableName, "$1") - case "mysql": - query = fmt.Sprintf(query, cfg.TableName, "?") - } - return func(t *testing.T) { - cfg.mockTracer.Reset() - assert := assert.New(t) - stmt, err := cfg.DB.Prepare(query) - assert.Equal(nil, err) - - spans := cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - - cfg.mockTracer.Reset() - _, err2 := stmt.Exec("New York") - assert.Equal(nil, err2) - - spans = cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - span = spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - } -} - -func testBeginRollback(cfg *Config) func(*testing.T) { - return func(t *testing.T) { - cfg.mockTracer.Reset() - assert := assert.New(t) - - tx, err := cfg.DB.Begin() - assert.Equal(nil, err) - - spans := cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - - span := spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - - cfg.mockTracer.Reset() - err = tx.Rollback() - assert.Equal(nil, err) - - spans = cfg.mockTracer.FinishedSpans() - assert.Len(spans, 1) - span = spans[0] - assert.Equal(cfg.ExpectName, span.OperationName()) - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - } -} - -func testExec(cfg *Config) func(*testing.T) { - return func(t *testing.T) { - assert := assert.New(t) - query := fmt.Sprintf("INSERT INTO %s(name) VALUES('New York')", cfg.TableName) - - parent, ctx := tracer.StartSpanFromContext(context.Background(), "test.parent", - tracer.ServiceName("test"), - tracer.ResourceName("parent"), - ) - - cfg.mockTracer.Reset() - tx, err := cfg.DB.BeginTx(ctx, nil) - assert.Equal(nil, err) - _, err = tx.ExecContext(ctx, query) - assert.Equal(nil, err) - err = tx.Commit() - assert.Equal(nil, err) - - parent.Finish() // flush children - - spans := cfg.mockTracer.FinishedSpans() - assert.Len(spans, 4) - - var span mocktracer.Span - for _, s := range spans { - if s.OperationName() == cfg.ExpectName && s.Tag(ext.ResourceName) == query { - span = s - } - } - assert.NotNil(span, "span not found") - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - for _, s := range spans { - if s.OperationName() == cfg.ExpectName && s.Tag(ext.ResourceName) == "Commit" { - span = s - } - } - assert.NotNil(span, "span not found") - for k, v := range cfg.ExpectTags { - assert.Equal(v, span.Tag(k), "Value mismatch on tag %s", k) - } - } -} - -// Config holds the test configuration. -type Config struct { - *sql.DB - mockTracer mocktracer.Tracer - DriverName string - TableName string - ExpectName string - ExpectTags map[string]interface{} -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/example_test.go deleted file mode 100644 index 6f6fcf54..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/example_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package gorm_test - -import ( - "log" - - "github.com/jinzhu/gorm" - "github.com/lib/pq" - - sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - gormtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm" -) - -func ExampleOpen() { - // Register augments the provided driver with tracing, enabling it to be loaded by gormtrace.Open. - sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithServiceName("my-service")) - - // Open the registered driver, allowing all uses of the returned *gorm.DB to be traced. - db, err := gormtrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable") - defer db.Close() - if err != nil { - log.Fatal(err) - } - - user := struct { - gorm.Model - Name string - }{} - - // All calls through gorm.DB are now traced. - db.Where("name = ?", "jinzhu").First(&user) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm.go deleted file mode 100644 index cca5e1d2..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm.go +++ /dev/null @@ -1,18 +0,0 @@ -// Package gorm provides helper functions for tracing the jinzhu/gorm package (https://github.com/jinzhu/gorm). -package gorm - -import ( - sqltraced "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - - "github.com/jinzhu/gorm" -) - -// Open opens a new (traced) database connection. The used dialect must be formerly registered -// using (gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql).Register. -func Open(dialect, source string) (*gorm.DB, error) { - db, err := sqltraced.Open(dialect, source) - if err != nil { - return nil, err - } - return gorm.Open(dialect, db) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm_test.go deleted file mode 100644 index f7da79cb..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm/gorm_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package gorm - -import ( - "fmt" - "log" - "os" - "testing" - - sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - - "github.com/go-sql-driver/mysql" - "github.com/lib/pq" -) - -// tableName holds the SQL table that these tests will be run against. It must be unique cross-repo. -const tableName = "testgorm" - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - defer sqltest.Prepare(tableName)() - os.Exit(m.Run()) -} - -func TestMySQL(t *testing.T) { - sqltrace.Register("mysql", &mysql.MySQLDriver{}, sqltrace.WithServiceName("mysql-test")) - db, err := Open("mysql", "test:test@tcp(127.0.0.1:3306)/test") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - testConfig := &sqltest.Config{ - DB: db.DB(), - DriverName: "mysql", - TableName: tableName, - ExpectName: "mysql.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "mysql-test", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "3306", - "db.user": "test", - "db.name": "test", - }, - } - sqltest.RunAll(t, testConfig) -} - -func TestPostgres(t *testing.T) { - sqltrace.Register("postgres", &pq.Driver{}) - db, err := Open("postgres", "postgres://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - testConfig := &sqltest.Config{ - DB: db.DB(), - DriverName: "postgres", - TableName: tableName, - ExpectName: "postgres.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "postgres.db", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "5432", - "db.user": "postgres", - "db.name": "postgres", - }, - } - sqltest.RunAll(t, testConfig) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/example_test.go deleted file mode 100644 index 7ae89540..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/example_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package sqlx_test - -import ( - "log" - - "github.com/jmoiron/sqlx" - "github.com/lib/pq" - - sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - sqlxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx" -) - -func ExampleOpen() { - // Register informs the sqlxtrace package of the driver that we will be using in our program. - // It uses a default service name, in the below case "postgres.db". To use a custom service - // name use RegisterWithServiceName. - sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithServiceName("my-service")) - db, err := sqlxtrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable") - if err != nil { - log.Fatal(err) - } - - // All calls through sqlx API will then be traced. - query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", []int{4, 6, 7}) - if err != nil { - log.Fatal(err) - } - query = db.Rebind(query) - rows, err := db.Queryx(query, args...) - if err != nil { - log.Fatal(err) - } - defer rows.Close() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql.go deleted file mode 100644 index 0341400e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql.go +++ /dev/null @@ -1,62 +0,0 @@ -// Package sqlx provides functions to trace the jmoiron/sqlx package (https://github.com/jmoiron/sqlx). -// To enable tracing, first use one of the "Register*" functions to register the sql driver that -// you will be using, then continue using the package as you normally would. -// -// For more information on registering and why this needs to happen, please check the -// github.com/DataDog/dd-trace-go/contrib/database/sql package. -// -package sqlx // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx" - -import ( - sqltraced "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - - "github.com/jmoiron/sqlx" -) - -// Open opens a new (traced) connection to the database using the given driver and source. -// Note that the driver must formerly be registered using database/sql integration's Register. -func Open(driverName, dataSourceName string) (*sqlx.DB, error) { - db, err := sqltraced.Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - return sqlx.NewDb(db, driverName), nil -} - -// MustOpen is the same as Open, but panics on error. -// To get tracing, the driver must be formerly registered using the database/sql integration's -// Register. -func MustOpen(driverName, dataSourceName string) (*sqlx.DB, error) { - db, err := sqltraced.Open(driverName, dataSourceName) - if err != nil { - panic(err) - } - return sqlx.NewDb(db, driverName), nil -} - -// Connect connects to the data source using the given driver. -// To get tracing, the driver must be formerly registered using the database/sql integration's -// Register. -func Connect(driverName, dataSourceName string) (*sqlx.DB, error) { - db, err := Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - err = db.Ping() - if err != nil { - db.Close() - return nil, err - } - return db, nil -} - -// MustConnect connects to a database and panics on error. -// To get tracing, the driver must be formerly registered using the database/sql integration's -// Register. -func MustConnect(driverName, dataSourceName string) *sqlx.DB { - db, err := Connect(driverName, dataSourceName) - if err != nil { - panic(err) - } - return db -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql_test.go deleted file mode 100644 index 9574b497..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx/sql_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package sqlx - -import ( - "fmt" - "log" - "os" - "testing" - - sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/sqltest" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - - "github.com/go-sql-driver/mysql" - "github.com/lib/pq" -) - -// tableName holds the SQL table that these tests will be run against. It must be unique cross-repo. -const tableName = "testsqlx" - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - defer sqltest.Prepare(tableName)() - os.Exit(m.Run()) -} - -func TestMySQL(t *testing.T) { - sqltrace.Register("mysql", &mysql.MySQLDriver{}, sqltrace.WithServiceName("mysql-test")) - dbx, err := Open("mysql", "test:test@tcp(127.0.0.1:3306)/test") - if err != nil { - log.Fatal(err) - } - defer dbx.Close() - - testConfig := &sqltest.Config{ - DB: dbx.DB, - DriverName: "mysql", - TableName: tableName, - ExpectName: "mysql.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "mysql-test", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "3306", - ext.DBUser: "test", - ext.DBName: "test", - }, - } - sqltest.RunAll(t, testConfig) -} - -func TestPostgres(t *testing.T) { - sqltrace.Register("postgres", &pq.Driver{}) - dbx, err := Open("postgres", "postgres://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable") - if err != nil { - log.Fatal(err) - } - defer dbx.Close() - - testConfig := &sqltest.Config{ - DB: dbx.DB, - DriverName: "postgres", - TableName: tableName, - ExpectName: "postgres.query", - ExpectTags: map[string]interface{}{ - ext.ServiceName: "postgres.db", - ext.SpanType: ext.SpanTypeSQL, - ext.TargetHost: "127.0.0.1", - ext.TargetPort: "5432", - ext.DBUser: "postgres", - ext.DBName: "postgres", - }, - } - sqltest.RunAll(t, testConfig) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/example_test.go deleted file mode 100644 index 42bf1760..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/example_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package httprouter_test - -import ( - "fmt" - "log" - "net/http" - - "github.com/julienschmidt/httprouter" - - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter" -) - -func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprint(w, "Welcome!\n") -} - -func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name")) -} - -func Example() { - router := httptrace.New() - router.GET("/", Index) - router.GET("/hello/:name", Hello) - - log.Fatal(http.ListenAndServe(":8080", router)) -} - -func Example_withServiceName() { - router := httptrace.New(httptrace.WithServiceName("http.router")) - router.GET("/", Index) - router.GET("/hello/:name", Hello) - - log.Fatal(http.ListenAndServe(":8080", router)) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter.go deleted file mode 100644 index a2902ea1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter.go +++ /dev/null @@ -1,39 +0,0 @@ -// Package httprouter provides functions to trace the julienschmidt/httprouter package (https://github.com/julienschmidt/httprouter). -package httprouter // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter" - -import ( - "net/http" - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil" - - "github.com/julienschmidt/httprouter" -) - -// Router is a traced version of httprouter.Router. -type Router struct { - *httprouter.Router - config *routerConfig -} - -// New returns a new router augmented with tracing. -func New(opts ...RouterOption) *Router { - cfg := new(routerConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return &Router{httprouter.New(), cfg} -} - -// ServeHTTP implements http.Handler. -func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { - // get the resource associated to this request - route := req.URL.Path - _, ps, _ := r.Router.Lookup(req.Method, route) - for _, param := range ps { - route = strings.Replace(route, param.Value, ":"+param.Key, 1) - } - resource := req.Method + " " + route - httputil.TraceAndServe(r.Router, w, req, r.config.serviceName, resource) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter_test.go deleted file mode 100644 index 24257451..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/httprouter_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package httprouter - -import ( - "net/http" - "net/http/httptest" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - - "github.com/julienschmidt/httprouter" - "github.com/stretchr/testify/assert" -) - -func TestHttpTracer200(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // Send and verify a 200 request - url := "/200" - r := httptest.NewRequest("GET", url, nil) - w := httptest.NewRecorder() - router().ServeHTTP(w, r) - assert.Equal(200, w.Code) - assert.Equal("OK\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal("GET "+url, s.Tag(ext.ResourceName)) - assert.Equal("200", s.Tag(ext.HTTPCode)) - assert.Equal("GET", s.Tag(ext.HTTPMethod)) - assert.Equal(url, s.Tag(ext.HTTPURL)) - assert.Equal(nil, s.Tag(ext.Error)) -} - -func TestHttpTracer500(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - // Send and verify a 500 request - url := "/500" - r := httptest.NewRequest("GET", url, nil) - w := httptest.NewRecorder() - router().ServeHTTP(w, r) - assert.Equal(500, w.Code) - assert.Equal("500!\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal("GET "+url, s.Tag(ext.ResourceName)) - assert.Equal("500", s.Tag(ext.HTTPCode)) - assert.Equal("GET", s.Tag(ext.HTTPMethod)) - assert.Equal(url, s.Tag(ext.HTTPURL)) - assert.Equal("500: Internal Server Error", s.Tag(ext.Error).(error).Error()) -} - -func router() http.Handler { - router := New(WithServiceName("my-service")) - router.GET("/200", handler200) - router.GET("/500", handler500) - return router -} - -func handler200(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - w.Write([]byte("OK\n")) -} - -func handler500(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - http.Error(w, "500!", http.StatusInternalServerError) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/option.go deleted file mode 100644 index d5683443..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter/option.go +++ /dev/null @@ -1,17 +0,0 @@ -package httprouter - -type routerConfig struct{ serviceName string } - -// RouterOption represents an option that can be passed to New. -type RouterOption func(*routerConfig) - -func defaults(cfg *routerConfig) { - cfg.serviceName = "http.router" -} - -// WithServiceName sets the given service name for the returned router. -func WithServiceName(name string) RouterOption { - return func(cfg *routerConfig) { - cfg.serviceName = name - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/example_test.go deleted file mode 100644 index 4a015d16..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/example_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package kubernetes_test - -import ( - "fmt" - - kubernetestrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - _ "k8s.io/client-go/plugin/pkg/client/auth/oidc" - "k8s.io/client-go/rest" -) - -func Example() { - cfg, err := rest.InClusterConfig() - if err != nil { - panic(err.Error()) - } - // Use this to trace all calls made to the Kubernetes API - cfg.WrapTransport = kubernetestrace.WrapRoundTripper - - client, err := kubernetes.NewForConfig(cfg) - if err != nil { - panic(err.Error()) - } - - pods, err := client.CoreV1().Pods("default").List(meta_v1.ListOptions{}) - if err != nil { - panic(err) - } - - fmt.Println(pods.Items) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes.go deleted file mode 100644 index 206f42b7..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes.go +++ /dev/null @@ -1,71 +0,0 @@ -// Package kubernetes provides functions to trace k8s.io/client-go (https://github.com/kubernetes/client-go). -package kubernetes // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes" - -import ( - "net/http" - "strings" - - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -const ( - prefixAPI = "/api/v1/" - prefixWatch = "watch/" -) - -// WrapRoundTripper wraps a RoundTripper intended for interfacing with -// Kubernetes and traces all requests. -func WrapRoundTripper(rt http.RoundTripper) http.RoundTripper { - return httptrace.WrapRoundTripper(rt, - httptrace.WithBefore(func(req *http.Request, span ddtrace.Span) { - span.SetTag(ext.ServiceName, "kubernetes") - span.SetTag(ext.ResourceName, requestToResource(req.Method, req.URL.Path)) - })) -} - -func requestToResource(method, path string) string { - if !strings.HasPrefix(path, prefixAPI) { - return method - } - - var out strings.Builder - out.WriteString(method) - out.WriteByte(' ') - - path = strings.TrimPrefix(path, prefixAPI) - - if strings.HasPrefix(path, prefixWatch) { - // strip out /watch - path = strings.TrimPrefix(path, prefixWatch) - out.WriteString(prefixWatch) - } - - // {type}/{name} - var lastType string - for i, str := range strings.Split(path, "/") { - if i > 0 { - out.WriteByte('/') - } - if i%2 == 0 { - lastType = str - out.WriteString(lastType) - } else { - // parse {name} - out.WriteString(typeToPlaceholder(lastType)) - } - } - return out.String() -} - -func typeToPlaceholder(typ string) string { - switch typ { - case "namespaces": - return "{namespace}" - case "proxy": - return "{path}" - default: - return "{name}" - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes_test.go deleted file mode 100644 index 75ae2e13..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes/kubernetes_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package kubernetes - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -func TestPathToResource(t *testing.T) { - expected := map[string]string{ - "/api/v1/componentstatuses": "componentstatuses", - "/api/v1/componentstatuses/NAME": "componentstatuses/{name}", - "/api/v1/configmaps": "configmaps", - "/api/v1/namespaces/default/bindings": "namespaces/{namespace}/bindings", - "/api/v1/namespaces/someothernamespace/configmaps": "namespaces/{namespace}/configmaps", - "/api/v1/namespaces/default/configmaps/some-config-map": "namespaces/{namespace}/configmaps/{name}", - "/api/v1/namespaces/default/persistentvolumeclaims/pvc-abcd/status": "namespaces/{namespace}/persistentvolumeclaims/{name}/status", - "/api/v1/namespaces/default/pods/pod-1234/proxy": "namespaces/{namespace}/pods/{name}/proxy", - "/api/v1/namespaces/default/pods/pod-5678/proxy/some-path": "namespaces/{namespace}/pods/{name}/proxy/{path}", - "/api/v1/watch/configmaps": "watch/configmaps", - "/api/v1/watch/namespaces": "watch/namespaces", - "/api/v1/watch/namespaces/default/configmaps": "watch/namespaces/{namespace}/configmaps", - "/api/v1/watch/namespaces/someothernamespace/configmaps/another-name": "watch/namespaces/{namespace}/configmaps/{name}", - } - - for path, expectedResource := range expected { - assert.Equal(t, "GET "+expectedResource, requestToResource("GET", path), "mapping %v", path) - } -} - -func TestKubernetes(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Hello World")) - })) - defer s.Close() - - cfg, err := clientcmd.BuildConfigFromKubeconfigGetter(s.URL, func() (*clientcmdapi.Config, error) { - return clientcmdapi.NewConfig(), nil - }) - assert.NoError(t, err) - cfg.WrapTransport = WrapRoundTripper - - client, err := kubernetes.NewForConfig(cfg) - assert.NoError(t, err) - - client.Core().Namespaces().List(meta_v1.ListOptions{}) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - { - s := spans[0] - assert.Equal(t, "http.request", s.OperationName()) - assert.Equal(t, "kubernetes", s.Tag(ext.ServiceName)) - assert.Equal(t, "GET namespaces", s.Tag(ext.ResourceName)) - assert.Equal(t, "200", s.Tag(ext.HTTPCode)) - assert.Equal(t, "GET", s.Tag(ext.HTTPMethod)) - assert.Equal(t, "/api/v1/namespaces", s.Tag(ext.HTTPURL)) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns.go deleted file mode 100644 index 0d93a0f1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns.go +++ /dev/null @@ -1,111 +0,0 @@ -package dns - -import ( - "context" - "errors" - "net" - "time" - - "github.com/miekg/dns" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// ListenAndServe calls dns.ListenAndServe with a wrapped Handler. -func ListenAndServe(addr string, network string, handler dns.Handler) error { - return dns.ListenAndServe(addr, network, WrapHandler(handler)) -} - -// ListenAndServeTLS calls dns.ListenAndServeTLS with a wrapped Handler. -func ListenAndServeTLS(addr, certFile, keyFile string, handler dns.Handler) error { - return dns.ListenAndServeTLS(addr, certFile, keyFile, WrapHandler(handler)) -} - -// A Handler wraps a DNS Handler so that requests are traced. -type Handler struct { - dns.Handler -} - -// WrapHandler creates a new, wrapped DNS handler. -func WrapHandler(handler dns.Handler) *Handler { - return &Handler{ - Handler: handler, - } -} - -// ServeDNS dispatches requests to the underlying Handler. All requests will be -// traced. -func (h *Handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { - span, _ := startSpan(context.Background(), r.Opcode) - rw := &responseWriter{ResponseWriter: w} - h.Handler.ServeDNS(rw, r) - span.Finish(tracer.WithError(rw.err)) -} - -type responseWriter struct { - dns.ResponseWriter - err error -} - -// WriteMsg writes the message to the response writer. If a non-success rcode is -// set the error in the struct will be non-nil. -func (rw *responseWriter) WriteMsg(msg *dns.Msg) error { - if msg.Rcode != dns.RcodeSuccess { - rw.err = errors.New(dns.RcodeToString[msg.Rcode]) - } - return rw.ResponseWriter.WriteMsg(msg) -} - -// Exchange calls dns.Exchange and traces the request. -func Exchange(m *dns.Msg, addr string) (r *dns.Msg, err error) { - span, _ := startSpan(context.Background(), m.Opcode) - r, err = dns.Exchange(m, addr) - span.Finish(tracer.WithError(err)) - return r, err -} - -// ExchangeConn calls dns.ExchangeConn and traces the request. -func ExchangeConn(c net.Conn, m *dns.Msg) (r *dns.Msg, err error) { - span, _ := startSpan(context.Background(), m.Opcode) - r, err = dns.ExchangeConn(c, m) - span.Finish(tracer.WithError(err)) - return r, err -} - -// ExchangeContext calls dns.ExchangeContext and traces the request. -func ExchangeContext(ctx context.Context, m *dns.Msg, addr string) (r *dns.Msg, err error) { - span, ctx := startSpan(ctx, m.Opcode) - r, err = dns.ExchangeContext(ctx, m, addr) - span.Finish(tracer.WithError(err)) - return r, err -} - -// A Client wraps a DNS Client so that requests are traced. -type Client struct { - *dns.Client -} - -// Exchange calls the underlying Client.Exchange and traces the request. -func (c *Client) Exchange(m *dns.Msg, addr string) (r *dns.Msg, rtt time.Duration, err error) { - span, _ := startSpan(context.Background(), m.Opcode) - r, rtt, err = c.Client.Exchange(m, addr) - span.Finish(tracer.WithError(err)) - return r, rtt, err -} - -// ExchangeContext calls the underlying Client.ExchangeContext and traces the request. -func (c *Client) ExchangeContext(ctx context.Context, m *dns.Msg, addr string) (r *dns.Msg, rtt time.Duration, err error) { - span, ctx := startSpan(ctx, m.Opcode) - r, rtt, err = c.Client.ExchangeContext(ctx, m, addr) - span.Finish(tracer.WithError(err)) - return r, rtt, err -} - -func startSpan(ctx context.Context, opcode int) (ddtrace.Span, context.Context) { - return tracer.StartSpanFromContext(ctx, "dns.request", - tracer.ServiceName("dns"), - tracer.ResourceName(dns.OpcodeToString[opcode]), - tracer.SpanType(ext.SpanTypeDNS)) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns_test.go deleted file mode 100644 index 310914ff..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/dns_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package dns - -import ( - "net" - "testing" - "time" - - "github.com/miekg/dns" - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -func TestDNS(t *testing.T) { - mux := dns.NewServeMux() - mux.HandleFunc(".", func(w dns.ResponseWriter, r *dns.Msg) { - m := new(dns.Msg) - m.SetReply(r) - w.WriteMsg(m) - }) - addr := getFreeAddr(t).String() - - // start the server - go func() { - err := ListenAndServe(addr, "udp", mux) - if err != nil { - t.Fatal(err) - } - }() - waitTillUDPReady(t, addr) - - mt := mocktracer.Start() - defer mt.Stop() - - m := new(dns.Msg) - m.SetQuestion("miek.nl.", dns.TypeMX) - - _, err := Exchange(m, addr) - assert.NoError(t, err) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - for _, s := range spans { - assert.Equal(t, "dns.request", s.OperationName()) - assert.Equal(t, "dns", s.Tag(ext.SpanType)) - assert.Equal(t, "dns", s.Tag(ext.ServiceName)) - assert.Equal(t, "QUERY", s.Tag(ext.ResourceName)) - } -} - -func getFreeAddr(t *testing.T) net.Addr { - li, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatal(err) - } - addr := li.Addr() - li.Close() - return addr -} - -func waitTillUDPReady(t *testing.T, addr string) { - deadline := time.Now().Add(time.Second * 10) - for time.Now().Before(deadline) { - m := new(dns.Msg) - m.SetQuestion("miek.nl.", dns.TypeMX) - _, err := dns.Exchange(m, addr) - if err == nil { - break - } - time.Sleep(time.Millisecond * 100) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/example_test.go deleted file mode 100644 index d13996c1..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns/example_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package dns_test - -import ( - "fmt" - - "github.com/miekg/dns" - dnstrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns" -) - -func Example_client() { - m := new(dns.Msg) - m.SetQuestion("miek.nl.", dns.TypeMX) - // calling dnstrace.Exchange will call dns.Exchange but trace the request - reply, err := dnstrace.Exchange(m, "127.0.0.1:53") - fmt.Println(reply, err) -} - -func Example_server() { - mux := dns.NewServeMux() - mux.HandleFunc(".", func(w dns.ResponseWriter, r *dns.Msg) { - m := new(dns.Msg) - m.SetReply(r) - w.WriteMsg(m) - }) - // calling dnstrace.ListenAndServe will call dns.ListenAndServe but all - // requests will be traced - dnstrace.ListenAndServe(":dns", "udp", mux) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/example_test.go deleted file mode 100644 index e8e281d4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/example_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package mongo_test - -import ( - "context" - - "github.com/mongodb/mongo-go-driver/bson" - "github.com/mongodb/mongo-go-driver/mongo" - "github.com/mongodb/mongo-go-driver/mongo/clientopt" - - mongotrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo" -) - -func Example() { - // connect to MongoDB - client, err := mongo.Connect(context.Background(), "mongodb://localhost:27017", - clientopt.Monitor(mongotrace.NewMonitor())) - if err != nil { - panic(err) - } - db := client.Database("example") - inventory := db.Collection("inventory") - - inventory.InsertOne(context.Background(), bson.NewDocument( - bson.EC.String("item", "canvas"), - bson.EC.Int32("qty", 100), - bson.EC.ArrayFromElements("tags", - bson.VC.String("cotton"), - ), - bson.EC.SubDocumentFromElements("size", - bson.EC.Int32("h", 28), - bson.EC.Double("w", 35.5), - bson.EC.String("uom", "cm"), - ), - )) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo.go deleted file mode 100644 index ea50735b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo.go +++ /dev/null @@ -1,100 +0,0 @@ -// Package mongo provides functions to trace the mongodb/mongo-go-driver package (https://github.com/mongodb/mongo-go-driver). The -// minimum required version is v0.0.13. -// -// `NewMonitor` will return an event.CommandMonitor which is used to trace requests. -package mongo - -import ( - "context" - "fmt" - "strings" - "sync" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/mongodb/mongo-go-driver/core/event" -) - -type spanKey struct { - ConnectionID string - RequestID int64 -} - -type monitor struct { - sync.Mutex - spans map[spanKey]ddtrace.Span -} - -func (m *monitor) Started(ctx context.Context, evt *event.CommandStartedEvent) { - hostname, port := peerInfo(evt) - statement := evt.Command.ToExtJSON(false) - - span, _ := tracer.StartSpanFromContext(ctx, "mongodb.query", - tracer.ServiceName("mongo"), - tracer.ResourceName("mongo."+evt.CommandName), - tracer.Tag(ext.DBInstance, evt.DatabaseName), - tracer.Tag(ext.DBStatement, statement), - tracer.Tag(ext.DBType, "mongo"), - tracer.Tag(ext.PeerHostname, hostname), - tracer.Tag(ext.PeerPort, port), - ) - key := spanKey{ - ConnectionID: evt.ConnectionID, - RequestID: evt.RequestID, - } - m.Lock() - m.spans[key] = span - m.Unlock() -} - -func (m *monitor) Succeeded(ctx context.Context, evt *event.CommandSucceededEvent) { - m.Finished(&evt.CommandFinishedEvent, nil) -} - -func (m *monitor) Failed(ctx context.Context, evt *event.CommandFailedEvent) { - m.Finished(&evt.CommandFinishedEvent, fmt.Errorf("%s", evt.Failure)) -} - -func (m *monitor) Finished(evt *event.CommandFinishedEvent, err error) { - key := spanKey{ - ConnectionID: evt.ConnectionID, - RequestID: evt.RequestID, - } - m.Lock() - span, ok := m.spans[key] - if ok { - delete(m.spans, key) - } - m.Unlock() - if !ok { - return - } - span.Finish(tracer.WithError(err)) -} - -// NewMonitor creates a new mongodb event CommandMonitor. -func NewMonitor() *event.CommandMonitor { - m := &monitor{ - spans: make(map[spanKey]ddtrace.Span), - } - return &event.CommandMonitor{ - Started: m.Started, - Succeeded: m.Succeeded, - Failed: m.Failed, - } -} - -func peerInfo(evt *event.CommandStartedEvent) (hostname, port string) { - hostname = evt.ConnectionID - port = "27017" - if idx := strings.IndexByte(hostname, '['); idx >= 0 { - hostname = hostname[:idx] - } - if idx := strings.IndexByte(hostname, ':'); idx >= 0 { - port = hostname[idx+1:] - hostname = hostname[:idx] - } - return hostname, port -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo_test.go deleted file mode 100644 index 4d772f58..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/mongodb/mongo-go-driver/mongo/mongo_test.go +++ /dev/null @@ -1,192 +0,0 @@ -package mongo - -import ( - "context" - "fmt" - "io" - "net" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/mongodb/mongo-go-driver/bson" - "github.com/mongodb/mongo-go-driver/core/result" - "github.com/mongodb/mongo-go-driver/core/wiremessage" - "github.com/mongodb/mongo-go-driver/mongo" - "github.com/mongodb/mongo-go-driver/mongo/clientopt" - - "github.com/stretchr/testify/assert" -) - -func Test(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - li, err := mockMongo() - if err != nil { - t.Fatal(err) - } - - hostname, port, _ := net.SplitHostPort(li.Addr().String()) - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) - defer cancel() - - span, ctx := tracer.StartSpanFromContext(ctx, "mongodb-test") - - addr := fmt.Sprintf("mongodb://%s", li.Addr().String()) - - client, err := mongo.Connect(ctx, addr, - clientopt.Single(true), - clientopt.Monitor(NewMonitor())) - if err != nil { - t.Fatal(err) - } - - client. - Database("test-database"). - Collection("test-collection"). - InsertOne(ctx, bson.NewDocument( - bson.EC.String("test-item", "test-value"), - )) - - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - - s := spans[0] - assert.Equal(t, "mongo", s.Tag(ext.ServiceName)) - assert.Equal(t, "mongo.insert", s.Tag(ext.ResourceName)) - assert.Equal(t, hostname, s.Tag(ext.PeerHostname)) - assert.Equal(t, port, s.Tag(ext.PeerPort)) - assert.Contains(t, s.Tag(ext.DBStatement), `{"insert":"test-collection","$db":"test-database","documents":[{"test-item":"test-value","_id":{"`) - assert.Equal(t, "test-database", s.Tag(ext.DBInstance)) - assert.Equal(t, "mongo", s.Tag(ext.DBType)) -} - -// mockMongo implements a crude mongodb server that responds with -// expected replies so that we can confirm tracing works properly -func mockMongo() (net.Listener, error) { - li, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return li, err - } - - go func() { - var requestID int32 - nextRequestID := func() int32 { - requestID++ - return requestID - } - defer li.Close() - for { - conn, err := li.Accept() - if err != nil { - break - } - go func() { - defer conn.Close() - - for { - var hdrbuf [16]byte - _, err := io.ReadFull(conn, hdrbuf[:]) - if err != nil { - panic(err) - } - - hdr, err := wiremessage.ReadHeader(hdrbuf[:], 0) - if err != nil { - panic(err) - } - - msgbuf := make([]byte, hdr.MessageLength) - copy(msgbuf, hdrbuf[:]) - _, err = io.ReadFull(conn, msgbuf[16:]) - if err != nil { - panic(err) - } - - switch hdr.OpCode { - case wiremessage.OpQuery: - var msg wiremessage.Query - err = msg.UnmarshalWireMessage(msgbuf) - if err != nil { - panic(err) - } - - bs, _ := bson.Marshal(result.IsMaster{ - IsMaster: true, - OK: 1, - MaxBSONObjectSize: 16777216, - MaxMessageSizeBytes: 48000000, - MaxWriteBatchSize: 100000, - LogicalSessionTimeoutMinutes: 30, - ReadOnly: false, - MinWireVersion: 0, - MaxWireVersion: 7, - }) - - reply := wiremessage.Reply{ - MsgHeader: wiremessage.Header{ - RequestID: nextRequestID(), - ResponseTo: hdr.RequestID, - }, - ResponseFlags: wiremessage.AwaitCapable, - NumberReturned: 1, - Documents: []bson.Reader{bs}, - } - bs, err = reply.MarshalWireMessage() - if err != nil { - panic(err) - } - - _, err = conn.Write(bs) - if err != nil { - panic(err) - } - - case wiremessage.OpMsg: - var msg wiremessage.Msg - err = msg.UnmarshalWireMessage(msgbuf) - if err != nil { - panic(err) - } - - bs, _ := bson.NewDocument( - bson.EC.Int32("n", 1), - bson.EC.Int32("ok", 1), - ).MarshalBSON() - - bs, _ = wiremessage.Msg{ - MsgHeader: wiremessage.Header{ - RequestID: nextRequestID(), - ResponseTo: hdr.RequestID, - }, - Sections: []wiremessage.Section{ - &wiremessage.SectionBody{ - Document: bs, - }, - }, - }.MarshalWireMessage() - - _, err = conn.Write(bs) - if err != nil { - panic(err) - } - - default: - panic("unknown op code: " + hdr.OpCode.String()) - } - - } - }() - } - }() - - return li, nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/example_test.go deleted file mode 100644 index ba9dd611..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/example_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package http_test - -import ( - "net/http" - - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" -) - -func Example() { - mux := httptrace.NewServeMux() - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Hello World!\n")) - }) - http.ListenAndServe(":8080", mux) -} - -func Example_withServiceName() { - mux := httptrace.NewServeMux(httptrace.WithServiceName("my-service")) - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Hello World!\n")) - }) - http.ListenAndServe(":8080", mux) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http.go deleted file mode 100644 index 11ffeb73..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http.go +++ /dev/null @@ -1,46 +0,0 @@ -// Package http provides functions to trace the net/http package (https://golang.org/pkg/net/http). -package http // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" - -import ( - "net/http" - - "gopkg.in/DataDog/dd-trace-go.v1/contrib/internal/httputil" -) - -// ServeMux is an HTTP request multiplexer that traces all the incoming requests. -type ServeMux struct { - *http.ServeMux - config *muxConfig -} - -// NewServeMux allocates and returns an http.ServeMux augmented with the -// global tracer. -func NewServeMux(opts ...MuxOption) *ServeMux { - cfg := new(muxConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return &ServeMux{ - ServeMux: http.NewServeMux(), - config: cfg, - } -} - -// ServeHTTP dispatches the request to the handler -// whose pattern most closely matches the request URL. -// We only need to rewrite this function to be able to trace -// all the incoming requests to the underlying multiplexer -func (mux *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // get the resource associated to this request - _, route := mux.Handler(r) - resource := r.Method + " " + route - httputil.TraceAndServe(mux.ServeMux, w, r, mux.config.serviceName, resource) -} - -// WrapHandler wraps an http.Handler with tracing using the given service and resource. -func WrapHandler(h http.Handler, service, resource string) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - httputil.TraceAndServe(h, w, req, service, resource) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http_test.go deleted file mode 100644 index cc528aa8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/http_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package http - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -func TestHttpTracer200(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - url := "/200" - r := httptest.NewRequest("GET", url, nil) - w := httptest.NewRecorder() - router().ServeHTTP(w, r) - - assert := assert.New(t) - assert.Equal(200, w.Code) - assert.Equal("OK\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal("GET "+url, s.Tag(ext.ResourceName)) - assert.Equal("200", s.Tag(ext.HTTPCode)) - assert.Equal("GET", s.Tag(ext.HTTPMethod)) - assert.Equal(url, s.Tag(ext.HTTPURL)) - assert.Equal(nil, s.Tag(ext.Error)) -} - -func TestHttpTracer500(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - // Send and verify a 500 request - url := "/500" - r := httptest.NewRequest("GET", url, nil) - w := httptest.NewRecorder() - router().ServeHTTP(w, r) - - assert := assert.New(t) - assert.Equal(500, w.Code) - assert.Equal("500!\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal("GET "+url, s.Tag(ext.ResourceName)) - assert.Equal("500", s.Tag(ext.HTTPCode)) - assert.Equal("GET", s.Tag(ext.HTTPMethod)) - assert.Equal(url, s.Tag(ext.HTTPURL)) - assert.Equal("500: Internal Server Error", s.Tag(ext.Error).(error).Error()) -} - -func TestWrapHandler200(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - assert := assert.New(t) - - handler := WrapHandler(http.HandlerFunc(handler200), "my-service", "my-resource") - - url := "/" - r := httptest.NewRequest("GET", url, nil) - w := httptest.NewRecorder() - handler.ServeHTTP(w, r) - assert.Equal(200, w.Code) - assert.Equal("OK\n", w.Body.String()) - - spans := mt.FinishedSpans() - assert.Equal(1, len(spans)) - - s := spans[0] - assert.Equal("http.request", s.OperationName()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal("my-resource", s.Tag(ext.ResourceName)) - assert.Equal("200", s.Tag(ext.HTTPCode)) - assert.Equal("GET", s.Tag(ext.HTTPMethod)) - assert.Equal(url, s.Tag(ext.HTTPURL)) - assert.Equal(nil, s.Tag(ext.Error)) -} - -func router() http.Handler { - mux := NewServeMux(WithServiceName("my-service")) - mux.HandleFunc("/200", handler200) - mux.HandleFunc("/500", handler500) - return mux -} - -func handler200(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("OK\n")) -} - -func handler500(w http.ResponseWriter, r *http.Request) { - http.Error(w, "500!", http.StatusInternalServerError) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/option.go deleted file mode 100644 index 8f0b6057..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/option.go +++ /dev/null @@ -1,56 +0,0 @@ -package http - -import ( - "net/http" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -type muxConfig struct{ serviceName string } - -// MuxOption represents an option that can be passed to NewServeMux. -type MuxOption func(*muxConfig) - -func defaults(cfg *muxConfig) { - cfg.serviceName = "http.router" -} - -// WithServiceName sets the given service name for the returned ServeMux. -func WithServiceName(name string) MuxOption { - return func(cfg *muxConfig) { - cfg.serviceName = name - } -} - -// A RoundTripperBeforeFunc can be used to modify a span before an http -// RoundTrip is made. -type RoundTripperBeforeFunc func(*http.Request, ddtrace.Span) - -// A RoundTripperAfterFunc can be used to modify a span after an http -// RoundTrip is made. It is possible for the http Response to be nil. -type RoundTripperAfterFunc func(*http.Response, ddtrace.Span) - -type roundTripperConfig struct { - before RoundTripperBeforeFunc - after RoundTripperAfterFunc -} - -// A RoundTripperOption represents an option that can be passed to -// WrapRoundTripper. -type RoundTripperOption func(*roundTripperConfig) - -// WithBefore adds a RoundTripperBeforeFunc to the RoundTripper -// config. -func WithBefore(f RoundTripperBeforeFunc) RoundTripperOption { - return func(cfg *roundTripperConfig) { - cfg.before = f - } -} - -// WithAfter adds a RoundTripperAfterFunc to the RoundTripper -// config. -func WithAfter(f RoundTripperAfterFunc) RoundTripperOption { - return func(cfg *roundTripperConfig) { - cfg.after = f - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper.go deleted file mode 100644 index cc759832..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper.go +++ /dev/null @@ -1,68 +0,0 @@ -package http - -import ( - "errors" - "fmt" - "net/http" - "os" - "strconv" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -const defaultResourceName = "http.request" - -type roundTripper struct { - base http.RoundTripper - cfg *roundTripperConfig -} - -func (rt *roundTripper) RoundTrip(req *http.Request) (res *http.Response, err error) { - span, _ := tracer.StartSpanFromContext(req.Context(), "http.request", - tracer.SpanType(ext.SpanTypeHTTP), - tracer.ResourceName(defaultResourceName), - tracer.Tag(ext.HTTPMethod, req.Method), - tracer.Tag(ext.HTTPURL, req.URL.Path), - ) - defer func() { - if rt.cfg.after != nil { - rt.cfg.after(res, span) - } - span.Finish(tracer.WithError(err)) - }() - if rt.cfg.before != nil { - rt.cfg.before(req, span) - } - // inject the span context into the http request - err = tracer.Inject(span.Context(), tracer.HTTPHeadersCarrier(req.Header)) - if err != nil { - // this should never happen - fmt.Fprintf(os.Stderr, "failed to inject http headers for round tripper: %v\n", err) - } - res, err = rt.base.RoundTrip(req) - if err != nil { - span.SetTag("http.errors", err.Error()) - } else { - span.SetTag(ext.HTTPCode, strconv.Itoa(res.StatusCode)) - // treat 5XX as errors - if res.StatusCode/100 == 5 { - span.SetTag("http.errors", res.Status) - err = errors.New(res.Status) - } - } - return res, err -} - -// WrapRoundTripper returns a new RoundTripper which traces all requests sent -// over the transport. -func WrapRoundTripper(rt http.RoundTripper, opts ...RoundTripperOption) http.RoundTripper { - cfg := new(roundTripperConfig) - for _, opt := range opts { - opt(cfg) - } - return &roundTripper{ - base: rt, - cfg: cfg, - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper_test.go deleted file mode 100644 index cc9e4077..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http/roundtripper_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package http - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestRoundTripper(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - spanctx, err := tracer.Extract(tracer.HTTPHeadersCarrier(r.Header)) - assert.NoError(t, err) - - span := tracer.StartSpan("test", - tracer.ChildOf(spanctx)) - defer span.Finish() - - w.Write([]byte("Hello World")) - })) - defer s.Close() - - rt := WrapRoundTripper(http.DefaultTransport, - WithBefore(func(req *http.Request, span ddtrace.Span) { - span.SetTag("CalledBefore", true) - }), - WithAfter(func(res *http.Response, span ddtrace.Span) { - span.SetTag("CalledAfter", true) - })) - - client := &http.Client{ - Transport: rt, - } - - client.Get(s.URL + "/hello/world") - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - - s0 := spans[0] - assert.Equal(t, "test", s0.OperationName()) - assert.Equal(t, "test", s0.Tag(ext.ResourceName)) - - s1 := spans[1] - assert.Equal(t, "http.request", s1.OperationName()) - assert.Equal(t, "http.request", s1.Tag(ext.ResourceName)) - assert.Equal(t, "200", s1.Tag(ext.HTTPCode)) - assert.Equal(t, "GET", s1.Tag(ext.HTTPMethod)) - assert.Equal(t, "/hello/world", s1.Tag(ext.HTTPURL)) - assert.Equal(t, true, s1.Tag("CalledBefore")) - assert.Equal(t, true, s1.Tag("CalledAfter")) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace.go deleted file mode 100644 index fbedfe94..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace.go +++ /dev/null @@ -1,116 +0,0 @@ -// Package elastic provides functions to trace the gopkg.in/olivere/elastic.v{3,5} packages. -package elastic // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic" - -import ( - "bufio" - "errors" - "fmt" - "io" - "net/http" - "regexp" - "strconv" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// NewHTTPClient returns a new http.Client which traces requests under the given service name. -func NewHTTPClient(opts ...ClientOption) *http.Client { - cfg := new(clientConfig) - defaults(cfg) - for _, fn := range opts { - fn(cfg) - } - return &http.Client{Transport: &httpTransport{config: cfg}} -} - -// httpTransport is a traced HTTP transport that captures Elasticsearch spans. -type httpTransport struct{ config *clientConfig } - -// bodyCutoff specifies the maximum number of bytes that will be stored as a tag -// value obtained from an HTTP request or response body. -var bodyCutoff = 5 * 1024 - -// RoundTrip satisfies the RoundTripper interface, wraps the sub Transport and -// captures a span of the Elasticsearch request. -func (t *httpTransport) RoundTrip(req *http.Request) (*http.Response, error) { - url := req.URL.Path - method := req.Method - resource := quantize(url, method) - span, _ := tracer.StartSpanFromContext(req.Context(), "elasticsearch.query", - tracer.ServiceName(t.config.serviceName), - tracer.SpanType(ext.SpanTypeElasticSearch), - tracer.ResourceName(resource), - tracer.Tag("elasticsearch.method", method), - tracer.Tag("elasticsearch.url", url), - tracer.Tag("elasticsearch.params", req.URL.Query().Encode()), - ) - defer span.Finish() - - snip, rc, err := peek(req.Body, int(req.ContentLength), bodyCutoff) - if err == nil { - span.SetTag("elasticsearch.body", snip) - } - req.Body = rc - // process using the standard transport - res, err := t.config.transport.RoundTrip(req) - if err != nil { - // roundtrip error - span.SetTag(ext.Error, err) - } else if res.StatusCode < 200 || res.StatusCode > 299 { - // HTTP error - snip, rc, err := peek(res.Body, int(res.ContentLength), bodyCutoff) - if err != nil { - snip = http.StatusText(res.StatusCode) - } - span.SetTag(ext.Error, errors.New(snip)) - res.Body = rc - } - if res != nil { - span.SetTag(ext.HTTPCode, strconv.Itoa(res.StatusCode)) - } - return res, err -} - -var ( - idRegexp = regexp.MustCompile("/([0-9]+)([/\\?]|$)") - idPlaceholder = []byte("/?$2") - indexRegexp = regexp.MustCompile("[0-9]{2,}") - indexPlaceholder = []byte("?") -) - -// quantize quantizes an Elasticsearch to extract a meaningful resource from the request. -// We quantize based on the method+url with some cleanup applied to the URL. -// URLs with an ID will be generalized as will (potential) timestamped indices. -func quantize(url, method string) string { - quantizedURL := idRegexp.ReplaceAll([]byte(url), idPlaceholder) - quantizedURL = indexRegexp.ReplaceAll(quantizedURL, indexPlaceholder) - return fmt.Sprintf("%s %s", method, quantizedURL) -} - -// peek attempts to return the first n bytes, as a string, from the provided io.ReadCloser. -// It returns a new io.ReadCloser which points to the same underlying stream and can be read -// from to access the entire data including the snippet. max is used to specify the length -// of the stream contained in the reader. If unknown, it should be -1. If 0 < max < n it -// will override n. -func peek(rc io.ReadCloser, max int, n int) (string, io.ReadCloser, error) { - if rc == nil { - return "", rc, errors.New("empty stream") - } - if max > 0 && max < n { - n = max - } - r := bufio.NewReaderSize(rc, n) - rc2 := struct { - io.Reader - io.Closer - }{ - Reader: r, - Closer: rc, - } - snip, err := r.Peek(n) - if err == io.EOF { - err = nil - } - return string(snip), rc2, err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace_test.go deleted file mode 100644 index c8fa0b56..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/elastictrace_test.go +++ /dev/null @@ -1,345 +0,0 @@ -package elastic - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "io/ioutil" - "os" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - elasticv3 "gopkg.in/olivere/elastic.v3" - elasticv5 "gopkg.in/olivere/elastic.v5" - - "testing" -) - -const debug = false - -func TestMain(m *testing.M) { - _, ok := os.LookupEnv("INTEGRATION") - if !ok { - fmt.Println("--- SKIP: to enable integration test, set the INTEGRATION environment variable") - os.Exit(0) - } - os.Exit(m.Run()) -} - -func TestClientV5(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv5.NewClient( - elasticv5.SetURL("http://127.0.0.1:9201"), - elasticv5.SetHttpClient(tc), - elasticv5.SetSniff(false), - elasticv5.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Index(). - Index("twitter").Id("1"). - Type("tweet"). - BodyString(`{"user": "test", "message": "hello"}`). - Do(context.TODO()) - assert.NoError(err) - checkPUTTrace(assert, mt) - - mt.Reset() - _, err = client.Get().Index("twitter").Type("tweet"). - Id("1").Do(context.TODO()) - assert.NoError(err) - checkGETTrace(assert, mt) - - mt.Reset() - _, err = client.Get().Index("not-real-index"). - Id("1").Do(context.TODO()) - assert.Error(err) - checkErrTrace(assert, mt) -} - -func TestClientErrorCutoffV3(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - oldCutoff := bodyCutoff - defer func() { - bodyCutoff = oldCutoff - }() - bodyCutoff = 10 - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv5.NewClient( - elasticv5.SetURL("http://127.0.0.1:9200"), - elasticv5.SetHttpClient(tc), - elasticv5.SetSniff(false), - elasticv5.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Index(). - Index("twitter").Id("1"). - Type("tweet"). - BodyString(`{"user": "test", "message": "hello"}`). - Do(context.TODO()) - assert.NoError(err) - - span := mt.FinishedSpans()[0] - assert.Equal(`{"user": "`, span.Tag("elasticsearch.body")) -} - -func TestClientErrorCutoffV5(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - oldCutoff := bodyCutoff - defer func() { - bodyCutoff = oldCutoff - }() - bodyCutoff = 10 - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv5.NewClient( - elasticv5.SetURL("http://127.0.0.1:9201"), - elasticv5.SetHttpClient(tc), - elasticv5.SetSniff(false), - elasticv5.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Get().Index("not-real-index"). - Id("1").Do(context.TODO()) - assert.Error(err) - - span := mt.FinishedSpans()[0] - assert.Equal(`{"error":{`, span.Tag(ext.Error).(error).Error()) -} - -func TestClientV3(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv3.NewClient( - elasticv3.SetURL("http://127.0.0.1:9200"), - elasticv3.SetHttpClient(tc), - elasticv3.SetSniff(false), - elasticv3.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Index(). - Index("twitter").Id("1"). - Type("tweet"). - BodyString(`{"user": "test", "message": "hello"}`). - DoC(context.TODO()) - assert.NoError(err) - checkPUTTrace(assert, mt) - - mt.Reset() - _, err = client.Get().Index("twitter").Type("tweet"). - Id("1").DoC(context.TODO()) - assert.NoError(err) - checkGETTrace(assert, mt) - - mt.Reset() - _, err = client.Get().Index("not-real-index"). - Id("1").DoC(context.TODO()) - assert.Error(err) - checkErrTrace(assert, mt) -} - -func TestClientV3Failure(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv3.NewClient( - // inexistent service, it must fail - elasticv3.SetURL("http://127.0.0.1:29200"), - elasticv3.SetHttpClient(tc), - elasticv3.SetSniff(false), - elasticv3.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Index(). - Index("twitter").Id("1"). - Type("tweet"). - BodyString(`{"user": "test", "message": "hello"}`). - DoC(context.TODO()) - assert.Error(err) - - spans := mt.FinishedSpans() - checkPUTTrace(assert, mt) - - assert.NotEmpty(spans[0].Tag(ext.Error)) - assert.Equal("*net.OpError", fmt.Sprintf("%T", spans[0].Tag(ext.Error).(error))) -} - -func TestClientV5Failure(t *testing.T) { - assert := assert.New(t) - mt := mocktracer.Start() - defer mt.Stop() - - tc := NewHTTPClient(WithServiceName("my-es-service")) - client, err := elasticv5.NewClient( - // inexistent service, it must fail - elasticv5.SetURL("http://127.0.0.1:29201"), - elasticv5.SetHttpClient(tc), - elasticv5.SetSniff(false), - elasticv5.SetHealthcheck(false), - ) - assert.NoError(err) - - _, err = client.Index(). - Index("twitter").Id("1"). - Type("tweet"). - BodyString(`{"user": "test", "message": "hello"}`). - Do(context.TODO()) - assert.Error(err) - - spans := mt.FinishedSpans() - checkPUTTrace(assert, mt) - - assert.NotEmpty(spans[0].Tag(ext.Error)) - assert.Equal("*net.OpError", fmt.Sprintf("%T", spans[0].Tag(ext.Error).(error))) -} - -func checkPUTTrace(assert *assert.Assertions, mt mocktracer.Tracer) { - span := mt.FinishedSpans()[0] - assert.Equal("my-es-service", span.Tag(ext.ServiceName)) - assert.Equal("PUT /twitter/tweet/?", span.Tag(ext.ResourceName)) - assert.Equal("/twitter/tweet/1", span.Tag("elasticsearch.url")) - assert.Equal("PUT", span.Tag("elasticsearch.method")) - assert.Equal(`{"user": "test", "message": "hello"}`, span.Tag("elasticsearch.body")) -} - -func checkGETTrace(assert *assert.Assertions, mt mocktracer.Tracer) { - span := mt.FinishedSpans()[0] - assert.Equal("my-es-service", span.Tag(ext.ServiceName)) - assert.Equal("GET /twitter/tweet/?", span.Tag(ext.ResourceName)) - assert.Equal("/twitter/tweet/1", span.Tag("elasticsearch.url")) - assert.Equal("GET", span.Tag("elasticsearch.method")) -} - -func checkErrTrace(assert *assert.Assertions, mt mocktracer.Tracer) { - span := mt.FinishedSpans()[0] - assert.Equal("my-es-service", span.Tag(ext.ServiceName)) - assert.Equal("GET /not-real-index/_all/?", span.Tag(ext.ResourceName)) - assert.Equal("/not-real-index/_all/1", span.Tag("elasticsearch.url")) - assert.NotEmpty(span.Tag(ext.Error)) - assert.Equal("*errors.errorString", fmt.Sprintf("%T", span.Tag(ext.Error).(error))) -} - -func TestQuantize(t *testing.T) { - for _, tc := range []struct { - url, method string - expected string - }{ - { - url: "/twitter/tweets", - method: "POST", - expected: "POST /twitter/tweets", - }, - { - url: "/logs_2016_05/event/_search", - method: "GET", - expected: "GET /logs_?_?/event/_search", - }, - { - url: "/twitter/tweets/123", - method: "GET", - expected: "GET /twitter/tweets/?", - }, - { - url: "/logs_2016_05/event/123", - method: "PUT", - expected: "PUT /logs_?_?/event/?", - }, - } { - assert.Equal(t, tc.expected, quantize(tc.url, tc.method)) - } -} - -func TestPeek(t *testing.T) { - assert := assert.New(t) - - for _, tt := range [...]struct { - max int // content length - txt string // stream - n int // bytes to peek at - snip string // expected snippet - err error // expected error - }{ - 0: { - // extract 3 bytes from a content of length 7 - txt: "ABCDEFG", - max: 7, - n: 3, - snip: "ABC", - }, - 1: { - // extract 7 bytes from a content of length 7 - txt: "ABCDEFG", - max: 7, - n: 7, - snip: "ABCDEFG", - }, - 2: { - // extract 100 bytes from a content of length 9 (impossible scenario) - txt: "ABCDEFG", - max: 9, - n: 100, - snip: "ABCDEFG", - }, - 3: { - // extract 5 bytes from a content of length 2 (impossible scenario) - txt: "ABCDEFG", - max: 2, - n: 5, - snip: "AB", - }, - 4: { - txt: "ABCDEFG", - max: 0, - n: 1, - snip: "A", - }, - 5: { - n: 4, - max: 4, - err: errors.New("empty stream"), - }, - 6: { - txt: "ABCDEFG", - n: 4, - max: -1, - snip: "ABCD", - }, - } { - var readcloser io.ReadCloser - if tt.txt != "" { - readcloser = ioutil.NopCloser(bytes.NewBufferString(tt.txt)) - } - snip, rc, err := peek(readcloser, tt.max, tt.n) - assert.Equal(tt.err, err) - assert.Equal(tt.snip, snip) - - if readcloser != nil { - // if a non-nil io.ReadCloser was sent, the returned io.ReadCloser - // must always return the entire original content. - all, err := ioutil.ReadAll(rc) - assert.Nil(err) - assert.Equal(tt.txt, string(all)) - } - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/example_test.go deleted file mode 100644 index 5bde6454..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/example_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package elastic_test - -import ( - "context" - - elastictrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - elasticv3 "gopkg.in/olivere/elastic.v3" - elasticv5 "gopkg.in/olivere/elastic.v5" -) - -// To start tracing elastic.v5 requests, create a new TracedHTTPClient that you will -// use when initializing the elastic.Client. -func Example_v5() { - tc := elastictrace.NewHTTPClient(elastictrace.WithServiceName("my-es-service")) - client, _ := elasticv5.NewClient( - elasticv5.SetURL("http://127.0.0.1:9200"), - elasticv5.SetHttpClient(tc), - ) - - // Spans are emitted for all - client.Index(). - Index("twitter").Type("tweet").Index("1"). - BodyString(`{"user": "test", "message": "hello"}`). - Do(context.Background()) - - // Use a context to pass information down the call chain - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.ServiceName("web"), - tracer.ResourceName("/tweet/1"), - ) - client.Get(). - Index("twitter").Type("tweet").Index("1"). - Do(ctx) - root.Finish() -} - -// To trace elastic.v3 you create a TracedHTTPClient in the same way but all requests must use -// the DoC() call to pass the request context. -func Example_v3() { - tc := elastictrace.NewHTTPClient(elastictrace.WithServiceName("my-es-service")) - client, _ := elasticv3.NewClient( - elasticv3.SetURL("http://127.0.0.1:9200"), - elasticv3.SetHttpClient(tc), - ) - - // Spans are emitted for all - client.Index(). - Index("twitter").Type("tweet").Index("1"). - BodyString(`{"user": "test", "message": "hello"}`). - DoC(context.Background()) - - // Use a context to pass information down the call chain - root, ctx := tracer.StartSpanFromContext(context.Background(), "parent.request", - tracer.ServiceName("web"), - tracer.ResourceName("/tweet/1"), - ) - client.Get(). - Index("twitter").Type("tweet").Index("1"). - DoC(ctx) - root.Finish() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/option.go deleted file mode 100644 index 6a24607e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic/option.go +++ /dev/null @@ -1,30 +0,0 @@ -package elastic - -import "net/http" - -type clientConfig struct { - serviceName string - transport *http.Transport -} - -// ClientOption represents an option that can be used when creating a client. -type ClientOption func(*clientConfig) - -func defaults(cfg *clientConfig) { - cfg.serviceName = "elastic.client" - cfg.transport = http.DefaultTransport.(*http.Transport) -} - -// WithServiceName sets the given service name for the client. -func WithServiceName(name string) ClientOption { - return func(cfg *clientConfig) { - cfg.serviceName = name - } -} - -// WithTransport sets the given transport as an http.Transport for the client. -func WithTransport(t *http.Transport) ClientOption { - return func(cfg *clientConfig) { - cfg.transport = t - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/example_test.go deleted file mode 100644 index 2e1b0b81..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/example_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package leveldb_test - -import ( - "context" - - leveldbtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func Example() { - db, _ := leveldbtrace.OpenFile("/tmp/example.leveldb", nil) - - // Create a root span, giving name, server and resource. - _, ctx := tracer.StartSpanFromContext(context.Background(), "my-query", - tracer.ServiceName("my-db"), - tracer.ResourceName("initial-access"), - ) - - // use WithContext to associate the span with the parent - db.WithContext(ctx). - // calls will be traced - Put([]byte("key"), []byte("value"), nil) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb.go deleted file mode 100644 index 90486cff..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb.go +++ /dev/null @@ -1,267 +0,0 @@ -// Package leveldb provides functions to trace the syndtr/goleveldb package (https://github.com/syndtr/goleveldb). -package leveldb // import "gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb" - -import ( - "context" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// A DB wraps a leveldb.DB and traces all queries. -type DB struct { - *leveldb.DB - cfg *config -} - -// Open calls leveldb.Open and wraps the resulting DB. -func Open(stor storage.Storage, o *opt.Options, opts ...Option) (*DB, error) { - db, err := leveldb.Open(stor, o) - if err != nil { - return nil, err - } - return WrapDB(db, opts...), nil -} - -// OpenFile calls leveldb.OpenFile and wraps the resulting DB. -func OpenFile(path string, o *opt.Options, opts ...Option) (*DB, error) { - db, err := leveldb.OpenFile(path, o) - if err != nil { - return nil, err - } - return WrapDB(db, opts...), nil -} - -// WrapDB wraps a leveldb.DB so that queries are traced. -func WrapDB(db *leveldb.DB, opts ...Option) *DB { - return &DB{ - DB: db, - cfg: newConfig(opts...), - } -} - -// WithContext returns a new DB with the context set to ctx. -func (db *DB) WithContext(ctx context.Context) *DB { - newcfg := *db.cfg - newcfg.ctx = ctx - return &DB{ - DB: db.DB, - cfg: &newcfg, - } -} - -// CompactRange calls DB.CompactRange and traces the result. -func (db *DB) CompactRange(r util.Range) error { - span := startSpan(db.cfg, "CompactRange") - err := db.DB.CompactRange(r) - span.Finish(tracer.WithError(err)) - return err -} - -// Delete calls DB.Delete and traces the result. -func (db *DB) Delete(key []byte, wo *opt.WriteOptions) error { - span := startSpan(db.cfg, "Delete") - err := db.DB.Delete(key, wo) - span.Finish(tracer.WithError(err)) - return err -} - -// Get calls DB.Get and traces the result. -func (db *DB) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - span := startSpan(db.cfg, "Get") - value, err = db.DB.Get(key, ro) - span.Finish(tracer.WithError(err)) - return value, err -} - -// GetSnapshot calls DB.GetSnapshot and returns a wrapped Snapshot. -func (db *DB) GetSnapshot() (*Snapshot, error) { - snap, err := db.DB.GetSnapshot() - if err != nil { - return nil, err - } - return WrapSnapshot(snap, func(cfg *config) { - *cfg = *db.cfg - }), nil -} - -// Has calls DB.Has and traces the result. -func (db *DB) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - span := startSpan(db.cfg, "Has") - ret, err = db.DB.Has(key, ro) - span.Finish(tracer.WithError(err)) - return ret, err -} - -// NewIterator calls DB.NewIterator and returns a wrapped Iterator. -func (db *DB) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - return WrapIterator(db.DB.NewIterator(slice, ro), func(cfg *config) { - *cfg = *db.cfg - }) -} - -// OpenTransaction calls DB.OpenTransaction and returns a wrapped Transaction. -func (db *DB) OpenTransaction() (*Transaction, error) { - tr, err := db.DB.OpenTransaction() - if err != nil { - return nil, err - } - return WrapTransaction(tr, func(cfg *config) { - *cfg = *db.cfg - }), nil -} - -// Put calls DB.Put and traces the result. -func (db *DB) Put(key, value []byte, wo *opt.WriteOptions) error { - span := startSpan(db.cfg, "Put") - err := db.DB.Put(key, value, wo) - span.Finish(tracer.WithError(err)) - return err -} - -// Write calls DB.Write and traces the result. -func (db *DB) Write(batch *leveldb.Batch, wo *opt.WriteOptions) error { - span := startSpan(db.cfg, "Write") - err := db.DB.Write(batch, wo) - span.Finish(tracer.WithError(err)) - return err -} - -// A Snapshot wraps a leveldb.Snapshot and traces all queries. -type Snapshot struct { - *leveldb.Snapshot - cfg *config -} - -// WrapSnapshot wraps a leveldb.Snapshot so that queries are traced. -func WrapSnapshot(snap *leveldb.Snapshot, opts ...Option) *Snapshot { - return &Snapshot{ - Snapshot: snap, - cfg: newConfig(opts...), - } -} - -// WithContext returns a new Snapshot with the context set to ctx. -func (snap *Snapshot) WithContext(ctx context.Context) *Snapshot { - newcfg := *snap.cfg - newcfg.ctx = ctx - return &Snapshot{ - Snapshot: snap.Snapshot, - cfg: &newcfg, - } -} - -// Get calls Snapshot.Get and traces the result. -func (snap *Snapshot) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - span := startSpan(snap.cfg, "Get") - value, err = snap.Snapshot.Get(key, ro) - span.Finish(tracer.WithError(err)) - return value, err -} - -// Has calls Snapshot.Has and traces the result. -func (snap *Snapshot) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - span := startSpan(snap.cfg, "Has") - ret, err = snap.Snapshot.Has(key, ro) - span.Finish(tracer.WithError(err)) - return ret, err -} - -// NewIterator calls Snapshot.NewIterator and returns a wrapped Iterator. -func (snap *Snapshot) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - return WrapIterator(snap.Snapshot.NewIterator(slice, ro), func(cfg *config) { - *cfg = *snap.cfg - }) -} - -// A Transaction wraps a leveldb.Transaction and traces all queries. -type Transaction struct { - *leveldb.Transaction - cfg *config -} - -// WrapTransaction wraps a leveldb.Transaction so that queries are traced. -func WrapTransaction(tr *leveldb.Transaction, opts ...Option) *Transaction { - return &Transaction{ - Transaction: tr, - cfg: newConfig(opts...), - } -} - -// WithContext returns a new Transaction with the context set to ctx. -func (tr *Transaction) WithContext(ctx context.Context) *Transaction { - newcfg := *tr.cfg - newcfg.ctx = ctx - return &Transaction{ - Transaction: tr.Transaction, - cfg: &newcfg, - } -} - -// Commit calls Transaction.Commit and traces the result. -func (tr *Transaction) Commit() error { - span := startSpan(tr.cfg, "Commit") - err := tr.Transaction.Commit() - span.Finish(tracer.WithError(err)) - return err -} - -// Get calls Transaction.Get and traces the result. -func (tr *Transaction) Get(key []byte, ro *opt.ReadOptions) ([]byte, error) { - span := startSpan(tr.cfg, "Get") - value, err := tr.Transaction.Get(key, ro) - span.Finish(tracer.WithError(err)) - return value, err -} - -// Has calls Transaction.Has and traces the result. -func (tr *Transaction) Has(key []byte, ro *opt.ReadOptions) (bool, error) { - span := startSpan(tr.cfg, "Has") - ret, err := tr.Transaction.Has(key, ro) - span.Finish(tracer.WithError(err)) - return ret, err -} - -// NewIterator calls Transaction.NewIterator and returns a wrapped Iterator. -func (tr *Transaction) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - return WrapIterator(tr.Transaction.NewIterator(slice, ro), func(cfg *config) { - *cfg = *tr.cfg - }) -} - -// An Iterator wraps a leveldb.Iterator and traces until Release is called. -type Iterator struct { - iterator.Iterator - span ddtrace.Span -} - -// WrapIterator wraps a leveldb.Iterator so that queries are traced. -func WrapIterator(it iterator.Iterator, opts ...Option) *Iterator { - return &Iterator{ - Iterator: it, - span: startSpan(newConfig(opts...), "Iterator"), - } -} - -// Release calls Iterator.Release and traces the result. -func (it *Iterator) Release() { - err := it.Error() - it.Iterator.Release() - it.span.Finish(tracer.WithError(err)) -} - -func startSpan(cfg *config, name string) ddtrace.Span { - span, _ := tracer.StartSpanFromContext(cfg.ctx, "leveldb.query", - tracer.SpanType(ext.SpanTypeLevelDB), - tracer.ServiceName(cfg.serviceName), - tracer.ResourceName(name), - ) - return span -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb_test.go deleted file mode 100644 index 14e17a40..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/leveldb_test.go +++ /dev/null @@ -1,145 +0,0 @@ -package leveldb - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestDB(t *testing.T) { - testAction(t, "CompactRange", func(mt mocktracer.Tracer, db *DB) { - db.CompactRange(util.Range{}) - }) - - testAction(t, "Delete", func(mt mocktracer.Tracer, db *DB) { - db.Delete([]byte("hello"), nil) - }) - - testAction(t, "Has", func(mt mocktracer.Tracer, db *DB) { - db.Has([]byte("hello"), nil) - }) - - testAction(t, "Get", func(mt mocktracer.Tracer, db *DB) { - db.Get([]byte("hello"), nil) - }) - - testAction(t, "Put", func(mt mocktracer.Tracer, db *DB) { - span, ctx := tracer.StartSpanFromContext(context.Background(), "http.request", - tracer.ServiceName("my-http-server")) - - err := db.WithContext(ctx). - Put([]byte("hello"), []byte("world"), nil) - assert.NoError(t, err) - - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - }) - - testAction(t, "Write", func(mt mocktracer.Tracer, db *DB) { - var batch leveldb.Batch - batch.Put([]byte("hello"), []byte("world")) - db.Write(&batch, nil) - }) -} - -func TestSnapshot(t *testing.T) { - testAction(t, "Get", func(mt mocktracer.Tracer, db *DB) { - snapshot, err := db.GetSnapshot() - assert.NoError(t, err) - defer snapshot.Release() - - snapshot.Get([]byte("hello"), nil) - }) - - testAction(t, "Has", func(mt mocktracer.Tracer, db *DB) { - snapshot, err := db.GetSnapshot() - assert.NoError(t, err) - defer snapshot.Release() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "http.request", - tracer.ServiceName("my-http-server")) - - _, err = snapshot.WithContext(ctx). - Has([]byte("hello"), nil) - assert.NoError(t, err) - - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - }) -} - -func TestTransaction(t *testing.T) { - testAction(t, "Commit", func(mt mocktracer.Tracer, db *DB) { - transaction, err := db.OpenTransaction() - assert.NoError(t, err) - transaction.Commit() - }) - - testAction(t, "Get", func(mt mocktracer.Tracer, db *DB) { - transaction, err := db.OpenTransaction() - assert.NoError(t, err) - defer transaction.Discard() - - transaction.Get([]byte("hello"), nil) - }) - - testAction(t, "Has", func(mt mocktracer.Tracer, db *DB) { - transaction, err := db.OpenTransaction() - assert.NoError(t, err) - defer transaction.Discard() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "http.request", - tracer.ServiceName("my-http-server")) - - _, err = transaction.WithContext(ctx). - Has([]byte("hello"), nil) - assert.NoError(t, err) - - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - }) -} - -func TestIterator(t *testing.T) { - testAction(t, "Iterator", func(mt mocktracer.Tracer, db *DB) { - iterator := db.NewIterator(nil, nil) - iterator.Release() - }) -} - -func testAction(t *testing.T, name string, f func(mt mocktracer.Tracer, db *DB)) { - t.Run(name, func(t *testing.T) { - mt := mocktracer.Start() - defer mt.Stop() - - db, err := Open(storage.NewMemStorage(), &opt.Options{}, - WithServiceName("my-database")) - assert.NoError(t, err) - defer db.Close() - - f(mt, db) - - spans := mt.FinishedSpans() - assert.Equal(t, "leveldb.query", spans[0].OperationName()) - assert.Equal(t, ext.SpanTypeLevelDB, spans[0].Tag(ext.SpanType)) - assert.Equal(t, "my-database", spans[0].Tag(ext.ServiceName)) - assert.Equal(t, name, spans[0].Tag(ext.ResourceName)) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/option.go deleted file mode 100644 index 3455ad31..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb/option.go +++ /dev/null @@ -1,36 +0,0 @@ -package leveldb - -import "context" - -type config struct { - serviceName string - ctx context.Context -} - -func newConfig(opts ...Option) *config { - cfg := &config{ - serviceName: "leveldb", - ctx: context.Background(), - } - for _, opt := range opts { - opt(cfg) - } - return cfg -} - -// Option represents an option that can be used customize the db tracing config. -type Option func(*config) - -// WithContext sets the tracing context for the db. -func WithContext(ctx context.Context) Option { - return func(cfg *config) { - cfg.ctx = ctx - } -} - -// WithServiceName sets the given service name for the db. -func WithServiceName(serviceName string) Option { - return func(cfg *config) { - cfg.serviceName = serviceName - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb.go deleted file mode 100644 index c95f6a0f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb.go +++ /dev/null @@ -1,313 +0,0 @@ -package buntdb - -import ( - "context" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/tidwall/buntdb" -) - -// A DB wraps a buntdb.DB, automatically tracing any transactions. -type DB struct { - *buntdb.DB - opts []Option - ctx context.Context -} - -// Open calls buntdb.Open and wraps the result. -func Open(path string, opts ...Option) (*DB, error) { - db, err := buntdb.Open(path) - if err != nil { - return nil, err - } - return WrapDB(db, opts...), nil -} - -// WrapDB wraps a buntdb.DB so it can be traced. -func WrapDB(db *buntdb.DB, opts ...Option) *DB { - return &DB{ - DB: db, - opts: opts, - ctx: context.Background(), - } -} - -// Begin calls the underlying DB.Begin and traces the transaction. -func (db *DB) Begin(writable bool) (*Tx, error) { - tx, err := db.DB.Begin(writable) - if err != nil { - return nil, err - } - return WrapTx(tx, db.opts...), nil -} - -// Update calls the underlying DB.Update and traces the transaction. -func (db *DB) Update(fn func(tx *Tx) error) error { - return db.DB.Update(func(tx *buntdb.Tx) error { - return fn(WrapTx(tx, db.opts...)) - }) -} - -// View calls the underlying DB.View and traces the transaction. -func (db *DB) View(fn func(tx *Tx) error) error { - return db.DB.View(func(tx *buntdb.Tx) error { - return fn(WrapTx(tx, db.opts...)) - }) -} - -// WithContext sets the context for the DB. -func (db *DB) WithContext(ctx context.Context) *DB { - newdb := *db - newdb.opts = append(newdb.opts[:len(newdb.opts):len(newdb.opts)], WithContext(ctx)) - return &newdb -} - -// A Tx wraps a buntdb.Tx, automatically tracing any queries. -type Tx struct { - *buntdb.Tx - cfg *config -} - -// WrapTx wraps a buntdb.Tx so it can be traced. -func WrapTx(tx *buntdb.Tx, opts ...Option) *Tx { - cfg := new(config) - defaults(cfg) - for _, opt := range opts { - opt(cfg) - } - return &Tx{ - Tx: tx, - cfg: cfg, - } -} - -func (tx *Tx) startSpan(name string) ddtrace.Span { - span, _ := tracer.StartSpanFromContext(tx.cfg.ctx, "buntdb.query", - tracer.SpanType(ext.AppTypeDB), - tracer.ServiceName(tx.cfg.serviceName), - tracer.ResourceName(name), - ) - return span -} - -// WithContext sets the context for the Tx. -func (tx *Tx) WithContext(ctx context.Context) *Tx { - newcfg := *tx.cfg - newcfg.ctx = ctx - return &Tx{ - Tx: tx.Tx, - cfg: &newcfg, - } -} - -// Ascend calls the underlying Tx.Ascend and traces the query. -func (tx *Tx) Ascend(index string, iterator func(key, value string) bool) error { - span := tx.startSpan("Ascend") - err := tx.Tx.Ascend(index, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// AscendEqual calls the underlying Tx.AscendEqual and traces the query. -func (tx *Tx) AscendEqual(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("AscendEqual") - err := tx.Tx.AscendEqual(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// AscendGreaterOrEqual calls the underlying Tx.AscendGreaterOrEqual and traces the query. -func (tx *Tx) AscendGreaterOrEqual(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("AscendGreaterOrEqual") - err := tx.Tx.AscendGreaterOrEqual(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// AscendKeys calls the underlying Tx.AscendKeys and traces the query. -func (tx *Tx) AscendKeys(pattern string, iterator func(key, value string) bool) error { - span := tx.startSpan("AscendKeys") - err := tx.Tx.AscendKeys(pattern, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// AscendLessThan calls the underlying Tx.AscendLessThan and traces the query. -func (tx *Tx) AscendLessThan(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("AscendLessThan") - err := tx.Tx.AscendLessThan(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// AscendRange calls the underlying Tx.AscendRange and traces the query. -func (tx *Tx) AscendRange(index, greaterOrEqual, lessThan string, iterator func(key, value string) bool) error { - span := tx.startSpan("AscendRange") - err := tx.Tx.AscendRange(index, greaterOrEqual, lessThan, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// CreateIndex calls the underlying Tx.CreateIndex and traces the query. -func (tx *Tx) CreateIndex(name, pattern string, less ...func(a, b string) bool) error { - span := tx.startSpan("CreateIndex") - err := tx.Tx.CreateIndex(name, pattern, less...) - span.Finish(tracer.WithError(err)) - return err -} - -// CreateIndexOptions calls the underlying Tx.CreateIndexOptions and traces the query. -func (tx *Tx) CreateIndexOptions(name, pattern string, opts *buntdb.IndexOptions, less ...func(a, b string) bool) error { - span := tx.startSpan("CreateIndexOptions") - err := tx.Tx.CreateIndexOptions(name, pattern, opts, less...) - span.Finish(tracer.WithError(err)) - return err -} - -// CreateSpatialIndex calls the underlying Tx.CreateSpatialIndex and traces the query. -func (tx *Tx) CreateSpatialIndex(name, pattern string, rect func(item string) (min, max []float64)) error { - span := tx.startSpan("CreateSpatialIndex") - err := tx.Tx.CreateSpatialIndex(name, pattern, rect) - span.Finish(tracer.WithError(err)) - return err -} - -// CreateSpatialIndexOptions calls the underlying Tx.CreateSpatialIndexOptions and traces the query. -func (tx *Tx) CreateSpatialIndexOptions(name, pattern string, opts *buntdb.IndexOptions, rect func(item string) (min, max []float64)) error { - span := tx.startSpan("CreateSpatialIndexOptions") - err := tx.Tx.CreateSpatialIndexOptions(name, pattern, opts, rect) - span.Finish(tracer.WithError(err)) - return err -} - -// Delete calls the underlying Tx.Delete and traces the query. -func (tx *Tx) Delete(key string) (val string, err error) { - span := tx.startSpan("Delete") - val, err = tx.Tx.Delete(key) - span.Finish(tracer.WithError(err)) - return val, err -} - -// DeleteAll calls the underlying Tx.DeleteAll and traces the query. -func (tx *Tx) DeleteAll() error { - span := tx.startSpan("DeleteAll") - err := tx.Tx.DeleteAll() - span.Finish(tracer.WithError(err)) - return err -} - -// Descend calls the underlying Tx.Descend and traces the query. -func (tx *Tx) Descend(index string, iterator func(key, value string) bool) error { - span := tx.startSpan("Descend") - err := tx.Tx.Descend(index, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DescendEqual calls the underlying Tx.DescendEqual and traces the query. -func (tx *Tx) DescendEqual(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("DescendEqual") - err := tx.Tx.DescendEqual(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DescendGreaterThan calls the underlying Tx.DescendGreaterThan and traces the query. -func (tx *Tx) DescendGreaterThan(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("DescendGreaterThan") - err := tx.Tx.DescendGreaterThan(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DescendKeys calls the underlying Tx.DescendKeys and traces the query. -func (tx *Tx) DescendKeys(pattern string, iterator func(key, value string) bool) error { - span := tx.startSpan("DescendKeys") - err := tx.Tx.DescendKeys(pattern, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DescendLessOrEqual calls the underlying Tx.DescendLessOrEqual and traces the query. -func (tx *Tx) DescendLessOrEqual(index, pivot string, iterator func(key, value string) bool) error { - span := tx.startSpan("DescendLessOrEqual") - err := tx.Tx.DescendLessOrEqual(index, pivot, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DescendRange calls the underlying Tx.DescendRange and traces the query. -func (tx *Tx) DescendRange(index, lessOrEqual, greaterThan string, iterator func(key, value string) bool) error { - span := tx.startSpan("DescendRange") - err := tx.Tx.DescendRange(index, lessOrEqual, greaterThan, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// DropIndex calls the underlying Tx.DropIndex and traces the query. -func (tx *Tx) DropIndex(name string) error { - span := tx.startSpan("DropIndex") - err := tx.Tx.DropIndex(name) - span.Finish(tracer.WithError(err)) - return err -} - -// Get calls the underlying Tx.Get and traces the query. -func (tx *Tx) Get(key string, ignoreExpired ...bool) (val string, err error) { - span := tx.startSpan("Get") - val, err = tx.Tx.Get(key, ignoreExpired...) - span.Finish(tracer.WithError(err)) - return val, err -} - -// Indexes calls the underlying Tx.Indexes and traces the query. -func (tx *Tx) Indexes() ([]string, error) { - span := tx.startSpan("Indexes") - indexes, err := tx.Tx.Indexes() - span.Finish(tracer.WithError(err)) - return indexes, err -} - -// Intersects calls the underlying Tx.Intersects and traces the query. -func (tx *Tx) Intersects(index, bounds string, iterator func(key, value string) bool) error { - span := tx.startSpan("Intersects") - err := tx.Tx.Intersects(index, bounds, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// Len calls the underlying Tx.Len and traces the query. -func (tx *Tx) Len() (int, error) { - span := tx.startSpan("Len") - n, err := tx.Tx.Len() - span.Finish(tracer.WithError(err)) - return n, err -} - -// Nearby calls the underlying Tx.Nearby and traces the query. -func (tx *Tx) Nearby(index, bounds string, iterator func(key, value string, dist float64) bool) error { - span := tx.startSpan("Nearby") - err := tx.Tx.Nearby(index, bounds, iterator) - span.Finish(tracer.WithError(err)) - return err -} - -// Set calls the underlying Tx.Set and traces the query. -func (tx *Tx) Set(key, value string, opts *buntdb.SetOptions) (previousValue string, replaced bool, err error) { - span := tx.startSpan("Set") - previousValue, replaced, err = tx.Tx.Set(key, value, opts) - span.Finish(tracer.WithError(err)) - return previousValue, replaced, err -} - -// TTL calls the underlying Tx.TTL and traces the query. -func (tx *Tx) TTL(key string) (time.Duration, error) { - span := tx.startSpan("TTL") - duration, err := tx.Tx.TTL(key) - span.Finish(tracer.WithError(err)) - return duration, err -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb_test.go deleted file mode 100644 index 637a16d6..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/buntdb_test.go +++ /dev/null @@ -1,425 +0,0 @@ -package buntdb - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/tidwall/buntdb" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func TestAscend(t *testing.T) { - testView(t, "Ascend", func(tx *Tx) error { - var arr []string - err := tx.Ascend("test-index", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:a", "1", - "regular:b", "2", - "regular:c", "3", - "regular:d", "4", - "regular:e", "5", - }, arr) - return nil - }) -} - -func TestAscendEqual(t *testing.T) { - testView(t, "AscendEqual", func(tx *Tx) error { - var arr []string - err := tx.AscendEqual("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{"regular:c", "3"}, arr) - return nil - }) -} - -func TestAscendGreaterOrEqual(t *testing.T) { - testView(t, "AscendGreaterOrEqual", func(tx *Tx) error { - var arr []string - err := tx.AscendGreaterOrEqual("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:c", "3", - "regular:d", "4", - "regular:e", "5", - }, arr) - return nil - }) -} - -func TestAscendKeys(t *testing.T) { - testView(t, "AscendKeys", func(tx *Tx) error { - var arr []string - err := tx.AscendKeys("regular:*", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:a", "1", - "regular:b", "2", - "regular:c", "3", - "regular:d", "4", - "regular:e", "5", - }, arr) - return nil - }) -} - -func TestAscendLessThan(t *testing.T) { - testView(t, "AscendLessThan", func(tx *Tx) error { - var arr []string - err := tx.AscendLessThan("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:a", "1", - "regular:b", "2", - }, arr) - return nil - }) -} - -func TestAscendRange(t *testing.T) { - testView(t, "AscendRange", func(tx *Tx) error { - var arr []string - err := tx.AscendRange("test-index", "2", "4", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:b", "2", - "regular:c", "3", - }, arr) - return nil - }) -} - -func TestCreateIndex(t *testing.T) { - testUpdate(t, "CreateIndex", func(tx *Tx) error { - err := tx.CreateIndex("test-create-index", "*") - assert.NoError(t, err) - return nil - }) -} - -func TestCreateIndexOptions(t *testing.T) { - testUpdate(t, "CreateIndexOptions", func(tx *Tx) error { - err := tx.CreateIndexOptions("test-create-index", "*", nil) - assert.NoError(t, err) - return nil - }) -} - -func TestCreateSpatialIndex(t *testing.T) { - testUpdate(t, "CreateSpatialIndex", func(tx *Tx) error { - err := tx.CreateSpatialIndex("test-create-index", "*", buntdb.IndexRect) - assert.NoError(t, err) - return nil - }) -} - -func TestCreateSpatialIndexOptions(t *testing.T) { - testUpdate(t, "CreateSpatialIndexOptions", func(tx *Tx) error { - err := tx.CreateSpatialIndexOptions("test-create-index", "*", nil, buntdb.IndexRect) - assert.NoError(t, err) - return nil - }) -} - -func TestDelete(t *testing.T) { - testUpdate(t, "Delete", func(tx *Tx) error { - val, err := tx.Delete("regular:a") - assert.NoError(t, err) - assert.Equal(t, "1", val) - return nil - }) -} - -func TestDeleteAll(t *testing.T) { - testUpdate(t, "DeleteAll", func(tx *Tx) error { - err := tx.DeleteAll() - assert.NoError(t, err) - return nil - }) -} - -func TestDescend(t *testing.T) { - testView(t, "Descend", func(tx *Tx) error { - var arr []string - err := tx.Descend("test-index", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:e", "5", - "regular:d", "4", - "regular:c", "3", - "regular:b", "2", - "regular:a", "1", - }, arr) - return nil - }) -} - -func TestDescendEqual(t *testing.T) { - testView(t, "DescendEqual", func(tx *Tx) error { - var arr []string - err := tx.DescendEqual("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{"regular:c", "3"}, arr) - return nil - }) -} - -func TestDescendGreaterThan(t *testing.T) { - testView(t, "DescendGreaterThan", func(tx *Tx) error { - var arr []string - err := tx.DescendGreaterThan("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:e", "5", - "regular:d", "4", - }, arr) - return nil - }) -} - -func TestDescendKeys(t *testing.T) { - testView(t, "DescendKeys", func(tx *Tx) error { - var arr []string - err := tx.DescendKeys("regular:*", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:e", "5", - "regular:d", "4", - "regular:c", "3", - "regular:b", "2", - "regular:a", "1", - }, arr) - return nil - }) -} - -func TestDescendLessOrEqual(t *testing.T) { - testView(t, "DescendLessOrEqual", func(tx *Tx) error { - var arr []string - err := tx.DescendLessOrEqual("test-index", "3", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:c", "3", - "regular:b", "2", - "regular:a", "1", - }, arr) - return nil - }) -} - -func TestDescendRange(t *testing.T) { - testView(t, "DescendRange", func(tx *Tx) error { - var arr []string - err := tx.DescendRange("test-index", "4", "2", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "regular:d", "4", - "regular:c", "3", - }, arr) - return nil - }) -} - -func TestDropIndex(t *testing.T) { - testUpdate(t, "DropIndex", func(tx *Tx) error { - err := tx.DropIndex("test-index") - assert.NoError(t, err) - return nil - }) -} - -func TestGet(t *testing.T) { - testView(t, "Get", func(tx *Tx) error { - val, err := tx.Get("regular:a") - assert.NoError(t, err) - assert.Equal(t, "1", val) - return nil - }) -} - -func TestIndexes(t *testing.T) { - testView(t, "Indexes", func(tx *Tx) error { - indexes, err := tx.Indexes() - assert.NoError(t, err) - assert.Equal(t, []string{"test-index", "test-spatial-index"}, indexes) - return nil - }) -} - -func TestIntersects(t *testing.T) { - testView(t, "Intersects", func(tx *Tx) error { - var arr []string - err := tx.Intersects("test-spatial-index", "[3 3],[4 4]", func(key, value string) bool { - arr = append(arr, key, value) - return true - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "spatial:c", "[3 3]", - "spatial:d", "[4 4]", - }, arr) - return nil - }) -} - -func TestLen(t *testing.T) { - testView(t, "Len", func(tx *Tx) error { - n, err := tx.Len() - assert.NoError(t, err) - assert.Equal(t, 10, n) - return nil - }) -} - -func TestNearby(t *testing.T) { - testView(t, "Nearby", func(tx *Tx) error { - var arr []string - err := tx.Nearby("test-spatial-index", "[3 3]", func(key, value string, distance float64) bool { - arr = append(arr, key, value) - return false - }) - assert.NoError(t, err) - assert.Equal(t, []string{ - "spatial:c", "[3 3]", - }, arr) - return nil - }) -} - -func TestSet(t *testing.T) { - testUpdate(t, "Set", func(tx *Tx) error { - previousValue, replaced, err := tx.Set("regular:a", "11", nil) - assert.NoError(t, err) - assert.True(t, replaced) - assert.Equal(t, "1", previousValue) - return nil - }) -} - -func TestTTL(t *testing.T) { - testUpdate(t, "TTL", func(tx *Tx) error { - duration, err := tx.TTL("regular:a") - assert.NoError(t, err) - assert.Equal(t, time.Duration(-1), duration) - return nil - }) -} - -func testUpdate(t *testing.T, name string, f func(tx *Tx) error) { - mt := mocktracer.Start() - defer mt.Stop() - - db := getDatabase(t) - defer db.Close() - - span, ctx := tracer.StartSpanFromContext(context.Background(), "parent") - err := db.WithContext(ctx).Update(f) - assert.NoError(t, err) - span.Finish() - - spans := mt.FinishedSpans() - assert.Len(t, spans, 2) - assert.Equal(t, spans[0].TraceID(), spans[1].TraceID()) - - assert.Equal(t, ext.AppTypeDB, spans[0].Tag(ext.SpanType)) - assert.Equal(t, name, spans[0].Tag(ext.ResourceName)) - assert.Equal(t, "buntdb", spans[0].Tag(ext.ServiceName)) - assert.Equal(t, "buntdb.query", spans[0].OperationName()) -} - -func testView(t *testing.T, name string, f func(tx *Tx) error) { - mt := mocktracer.Start() - defer mt.Stop() - - db := getDatabase(t) - defer db.Close() - - err := db.View(f) - assert.NoError(t, err) - - spans := mt.FinishedSpans() - assert.Len(t, spans, 1) - assert.Equal(t, ext.AppTypeDB, spans[0].Tag(ext.SpanType)) - assert.Equal(t, name, spans[0].Tag(ext.ResourceName)) - assert.Equal(t, "buntdb", spans[0].Tag(ext.ServiceName)) - assert.Equal(t, "buntdb.query", spans[0].OperationName()) -} - -func getDatabase(t *testing.T) *DB { - bdb, err := buntdb.Open(":memory:") - if err != nil { - t.Fatal(err) - } - - err = bdb.CreateIndex("test-index", "regular:*", buntdb.IndexBinary) - if err != nil { - t.Fatal(err) - } - - err = bdb.CreateSpatialIndex("test-spatial-index", "spatial:*", buntdb.IndexRect) - if err != nil { - t.Fatal(err) - } - - err = bdb.Update(func(tx *buntdb.Tx) error { - tx.Set("regular:a", "1", nil) - tx.Set("regular:b", "2", nil) - tx.Set("regular:c", "3", nil) - tx.Set("regular:d", "4", nil) - tx.Set("regular:e", "5", nil) - - tx.Set("spatial:a", "[1 1]", nil) - tx.Set("spatial:b", "[2 2]", nil) - tx.Set("spatial:c", "[3 3]", nil) - tx.Set("spatial:d", "[4 4]", nil) - tx.Set("spatial:e", "[5 5]", nil) - - return nil - }) - if err != nil { - t.Fatal(err) - } - - return WrapDB(bdb) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/example_test.go deleted file mode 100644 index 95ef3c9a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/example_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package buntdb_test - -import ( - "context" - "log" - - buntdbtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func Example() { - db, err := buntdbtrace.Open(":memory:") - if err != nil { - log.Fatal(err) - } - - // Create a root span, giving name, server and resource. - _, ctx := tracer.StartSpanFromContext(context.Background(), "my-query", - tracer.ServiceName("my-db"), - tracer.ResourceName("initial-access"), - ) - - // use WithContext to associate the span with the parent - db.WithContext(ctx). - Update(func(tx *buntdbtrace.Tx) error { - _, _, err := tx.Set("key", "value", nil) - return err - }) - - db.View(func(tx *buntdbtrace.Tx) error { - // you can also use WithContext on the transaction - val, err := tx.WithContext(ctx).Get("key") - log.Println(val) - return err - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/option.go deleted file mode 100644 index b96ab85f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb/option.go +++ /dev/null @@ -1,30 +0,0 @@ -package buntdb - -import "context" - -type config struct { - serviceName string - ctx context.Context -} - -func defaults(cfg *config) { - cfg.serviceName = "buntdb" - cfg.ctx = context.Background() -} - -// An Option customizes the config. -type Option func(cfg *config) - -// WithContext sets the context for the transaction. -func WithContext(ctx context.Context) Option { - return func(cfg *config) { - cfg.ctx = ctx - } -} - -// WithServiceName sets the given service name for the transaction. -func WithServiceName(serviceName string) Option { - return func(cfg *config) { - cfg.serviceName = serviceName - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/Gopkg.toml b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/Gopkg.toml deleted file mode 100644 index 1fb732af..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/Gopkg.toml +++ /dev/null @@ -1,9 +0,0 @@ -ignored = [ - # From these libraries we should always ensure compatibility with the latest: - "github.com/opentracing/*", - "golang.org/x/*", -] - -[[constraint]] - name = "github.com/tinylib/msgp" - revision = "3b5c87ab5fb00c660bf85b888445d9a01db64db4" # Feb 15, 2018 diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ddtrace.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ddtrace.go deleted file mode 100644 index ea787454..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ddtrace.go +++ /dev/null @@ -1,108 +0,0 @@ -// Package ddtrace contains the interfaces that specify the implementations of Datadog's -// tracing library, as well as a set of sub-packages containing various implementations: -// our native implementation ("tracer"), a wrapper that can be used with Opentracing -// ("opentracer") and a mock tracer to be used for testing ("mocktracer"). Additionally, -// package "ext" provides a set of tag names and values specific to Datadog's APM product. -// -// To get started, visit the documentation for any of the packages you'd like to begin -// with by accessing the subdirectories of this package: https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/ddtrace#pkg-subdirectories. -package ddtrace // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - -import "time" - -// Tracer specifies an implementation of the Datadog tracer which allows starting -// and propagating spans. The official implementation if exposed as functions -// within the "tracer" package. -type Tracer interface { - // StartSpan starts a span with the given operation name and options. - StartSpan(operationName string, opts ...StartSpanOption) Span - - // Extract extracts a span context from a given carrier. Note that baggage item - // keys will always be lower-cased to maintain consistency. It is impossible to - // maintain the original casing due to MIME header canonicalization standards. - Extract(carrier interface{}) (SpanContext, error) - - // Inject injects a span context into the given carrier. - Inject(context SpanContext, carrier interface{}) error - - // Stop stops the active tracer and sets the global tracer to a no-op. Calls to - // Stop should be idempotent. - Stop() -} - -// Span represents a chunk of computation time. Spans have names, durations, -// timestamps and other metadata. A Tracer is used to create hierarchies of -// spans in a request, buffer and submit them to the server. -type Span interface { - // SetTag sets a key/value pair as metadata on the span. - SetTag(key string, value interface{}) - - // SetOperationName sets the operation name for this span. An operation name should be - // a representative name for a group of spans (e.g. "grpc.server" or "http.request"). - SetOperationName(operationName string) - - // BaggageItem returns the baggage item held by the given key. - BaggageItem(key string) string - - // SetBaggageItem sets a new baggage item at the given key. The baggage - // item should propagate to all descendant spans, both in- and cross-process. - SetBaggageItem(key, val string) - - // Finish finishes the current span with the given options. Finish calls should be idempotent. - Finish(opts ...FinishOption) - - // Context returns the SpanContext of this Span. - Context() SpanContext -} - -// SpanContext represents a span state that can propagate to descendant spans -// and across process boundaries. It contains all the information needed to -// spawn a direct descendant of the span that it belongs to. It can be used -// to create distributed tracing by propagating it using the provided interfaces. -type SpanContext interface { - // SpanID returns the span ID that this context is carrying. - SpanID() uint64 - - // TraceID returns the trace ID that this context is carrying. - TraceID() uint64 - - // ForeachBaggageItem provides an iterator over the key/value pairs set as - // baggage within this context. Iteration stops when the handler returns - // false. - ForeachBaggageItem(handler func(k, v string) bool) -} - -// StartSpanOption is a configuration option that can be used with a Tracer's StartSpan method. -type StartSpanOption func(cfg *StartSpanConfig) - -// FinishOption is a configuration option that can be used with a Span's Finish method. -type FinishOption func(cfg *FinishConfig) - -// FinishConfig holds the configuration for finishing a span. It is usually passed around by -// reference to one or more FinishOption functions which shape it into its final form. -type FinishConfig struct { - // FinishTime represents the time that should be set as finishing time for the - // span. Implementations should use the current time when FinishTime.IsZero(). - FinishTime time.Time - - // Error holds an optional error that should be set on the span before - // finishing. - Error error -} - -// StartSpanConfig holds the configuration for starting a new span. It is usually passed -// around by reference to one or more StartSpanOption functions which shape it into its -// final form. -type StartSpanConfig struct { - // Parent holds the SpanContext that should be used as a parent for the - // new span. If nil, implementations should return a root span. - Parent SpanContext - - // StartTime holds the time that should be used as the start time of the span. - // Implementations should use the current time when StartTime.IsZero(). - StartTime time.Time - - // Tags holds a set of key/value pairs that should be set as metadata on the - // new span. - Tags map[string]interface{} -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/example_test.go deleted file mode 100644 index 96f28437..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/example_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package ddtrace_test - -import ( - "io/ioutil" - "log" - - opentracing "github.com/opentracing/opentracing-go" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -// The below example illustrates a simple use case using the "tracer" package, -// our native Datadog APM tracing client integration. For thorough documentation -// and further examples, visit its own godoc page. -func Example_datadog() { - // Start the tracer and defer the Stop method. - tracer.Start(tracer.WithAgentAddr("host:port")) - defer tracer.Stop() - - // Start a root span. - span := tracer.StartSpan("get.data") - defer span.Finish() - - // Create a child of it, computing the time needed to read a file. - child := tracer.StartSpan("read.file", tracer.ChildOf(span.Context())) - child.SetTag(ext.ResourceName, "test.json") - - // Perform an operation. - _, err := ioutil.ReadFile("~/test.json") - - // We may finish the child span using the returned error. If it's - // nil, it will be disregarded. - child.Finish(tracer.WithError(err)) - if err != nil { - log.Fatal(err) - } -} - -// The below example illustrates how to set up an opentracing.Tracer using Datadog's -// tracer. -func Example_opentracing() { - // Start a Datadog tracer, optionally providing a set of options, - // returning an opentracing.Tracer which wraps it. - t := opentracer.New(tracer.WithAgentAddr("host:port")) - defer tracer.Stop() // important for data integrity (flushes any leftovers) - - // Use it with the Opentracing API. The (already started) Datadog tracer - // may be used in parallel with the Opentracing API if desired. - opentracing.SetGlobalTracer(t) -} - -// The code below illustrates a scenario of how one could use a mock tracer in tests -// to assert that spans are created correctly. -func Example_mocking() { - // Setup the test environment: start the mock tracer. - mt := mocktracer.Start() - defer mt.Stop() - - // Run test code: in this example we will simply create a span to illustrate. - tracer.StartSpan("test.span").Finish() - - // Assert the results: query the mock tracer for finished spans. - spans := mt.FinishedSpans() - if len(spans) != 1 { - // fail - } - if spans[0].OperationName() != "test.span" { - // fail - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/app_types.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/app_types.go deleted file mode 100644 index 77a26fbf..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/app_types.go +++ /dev/null @@ -1,70 +0,0 @@ -package ext // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - -// App types determine how to categorize a trace in the Datadog application. -// For more fine-grained behaviour, use the SpanType* constants. -const ( - // DEPRECATED: Use SpanTypeWeb - // AppTypeWeb specifies the Web span type and can be used as a tag value - // for a span's SpanType tag. - AppTypeWeb = "web" - - // AppTypeDB specifies the DB span type and can be used as a tag value - // for a span's SpanType tag. If possible, use one of the SpanType* - // constants for a more accurate indication. - AppTypeDB = "db" - - // AppTypeCache specifies the Cache span type and can be used as a tag value - // for a span's SpanType tag. If possible, consider using SpanTypeRedis or - // SpanTypeMemcached. - AppTypeCache = "cache" - - // AppTypeRPC specifies the RPC span type and can be used as a tag value - // for a span's SpanType tag. - AppTypeRPC = "rpc" -) - -// Span types have similar behaviour to "app types" and help categorize -// traces in the Datadog application. They can also help fine grain agent -// level bahviours such as obfuscation and quantization, when these are -// enabled in the agent's configuration. -const ( - // SpanTypeWeb marks a span as an HTTP server request. - SpanTypeWeb = "web" - - // SpanTypeHTTP marks a span as an HTTP client request. - SpanTypeHTTP = "http" - - // SpanTypeSQL marks a span as an SQL operation. These spans may - // have an "sql.command" tag. - SpanTypeSQL = "sql" - - // SpanTypeCassandra marks a span as a Cassandra operation. These - // spans may have an "sql.command" tag. - SpanTypeCassandra = "cassandra" - - // SpanTypeRedis marks a span as a Redis operation. These spans may - // also have a "redis.raw_command" tag. - SpanTypeRedis = "redis" - - // SpanTypeMemcached marks a span as a memcached operation. - SpanTypeMemcached = "memcached" - - // SpanTypeMongoDB marks a span as a MongoDB operation. - SpanTypeMongoDB = "mongodb" - - // SpanTypeElasticSearch marks a span as an ElasticSearch operation. - // These spans may also have an "elasticsearch.body" tag. - SpanTypeElasticSearch = "elasticsearch" - - // SpanTypeLevelDB marks a span as a leveldb operation - SpanTypeLevelDB = "leveldb" - - // SpanTypeDNS marks a span as a DNS operation. - SpanTypeDNS = "dns" - - // SpanTypeMessageConsumer marks a span as a queue operation - SpanTypeMessageConsumer = "queue" - - // SpanTypeMessageProducer marks a span as a queue operation. - SpanTypeMessageProducer = "queue" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/cassandra.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/cassandra.go deleted file mode 100644 index c3569cda..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/cassandra.go +++ /dev/null @@ -1,21 +0,0 @@ -package ext - -const ( - // CassandraQuery is the tag name used for cassandra queries. - CassandraQuery = "cassandra.query" - - // CassandraConsistencyLevel is the tag name to set for consitency level. - CassandraConsistencyLevel = "cassandra.consistency_level" - - // CassandraCluster specifies the tag name that is used to set the cluster. - CassandraCluster = "cassandra.cluster" - - // CassandraRowCount specifies the tag name to use when settings the row count. - CassandraRowCount = "cassandra.row_count" - - // CassandraKeyspace is used as tag name for setting the key space. - CassandraKeyspace = "cassandra.keyspace" - - // CassandraPaginated specifies the tag name for paginated queries. - CassandraPaginated = "cassandra.paginated" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/db.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/db.go deleted file mode 100644 index d3074121..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/db.go +++ /dev/null @@ -1,16 +0,0 @@ -package ext - -const ( - // DBApplication indicates the application using the database. - DBApplication = "db.application" - // DBName indicates the database name. - DBName = "db.name" - // DBType indicates the type of Database. - DBType = "db.type" - // DBInstance indicates the instance name of Database. - DBInstance = "db.instance" - // DBUser indicates the user name of Database, e.g. "readonly_user" or "reporting_user". - DBUser = "db.user" - // DBStatement records a database statement for the given database type. - DBStatement = "db.statement" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/ext_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/ext_test.go deleted file mode 100644 index c5b3b30d..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/ext_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package ext - -import "testing" - -// TestSpec asserts that the constants represented in this package match the -// ones that are expected by the rest of our pipeline. -func TestSpec(t *testing.T) { - // tests holds pairs of tests where each i == i+1 - // - // changing any of these should be considered a breaking change and - // should require a major version release. - tests := []string{ - AppTypeWeb, "web", - AppTypeDB, "db", - AppTypeCache, "cache", - AppTypeRPC, "rpc", - SpanTypeWeb, "web", - SpanTypeHTTP, "http", - SpanTypeSQL, "sql", - SQLType, "sql", - SpanTypeCassandra, "cassandra", - SpanTypeRedis, "redis", - SpanTypeElasticSearch, "elasticsearch", - SQLQuery, "sql.query", - HTTPURL, "http.url", - Environment, "env", - } - if len(tests)%2 != 0 { - t.Fatal("uneven test count") - } - for i := 0; i < len(tests); i += 2 { - if tests[i] != tests[i+1] { - t.Fatalf("changed %q", tests[i+1]) - } - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/peer.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/peer.go deleted file mode 100644 index 3b32cef4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/peer.go +++ /dev/null @@ -1,14 +0,0 @@ -package ext - -const ( - // PeerHostIPV4 records IPv4 host address of the peer. - PeerHostIPV4 = "peer.ipv4" - // PeerHostIPV6 records the IPv6 host address of the peer. - PeerHostIPV6 = "peer.ipv6" - // PeerService records the service name of the peer service. - PeerService = "peer.service" - // PeerHostname records the host name of the peer. - PeerHostname = "peer.hostname" - // PeerPort records the port number of the peer. - PeerPort = "peer.port" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/priority.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/priority.go deleted file mode 100644 index cbda4204..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/priority.go +++ /dev/null @@ -1,22 +0,0 @@ -package ext - -// Priority is a hint given to the backend so that it knows which traces to reject or kept. -// In a distributed context, it should be set before any context propagation (fork, RPC calls) to be effective. - -const ( - // PriorityUserReject informs the backend that a trace should be rejected and not stored. - // This should be used by user code overriding default priority. - PriorityUserReject = -1 - - // PriorityAutoReject informs the backend that a trace should be rejected and not stored. - // This is used by the builtin sampler. - PriorityAutoReject = 0 - - // PriorityAutoKeep informs the backend that a trace should be kept and not stored. - // This is used by the builtin sampler. - PriorityAutoKeep = 1 - - // PriorityUserKeep informs the backend that a trace should be kept and not stored. - // This should be used by user code overriding default priority. - PriorityUserKeep = 2 -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/system.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/system.go deleted file mode 100644 index 9256aa5b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/system.go +++ /dev/null @@ -1,7 +0,0 @@ -package ext - -// Standard system metadata names -const ( - // The pid of the traced process - Pid = "system.pid" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/tags.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/tags.go deleted file mode 100644 index 6775e2aa..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext/tags.go +++ /dev/null @@ -1,57 +0,0 @@ -// Package ext contains a set of Datadog-specific constants. Most of them are used -// for setting span metadata. -package ext - -const ( - // TargetHost sets the target host address. - TargetHost = "out.host" - - // TargetPort sets the target host port. - TargetPort = "out.port" - - // SamplingPriority is the tag that marks the sampling priority of a span. - SamplingPriority = "sampling.priority" - - // SQLType sets the sql type tag. - SQLType = "sql" - - // SQLQuery sets the sql query tag on a span. - SQLQuery = "sql.query" - - // HTTPMethod specifies the HTTP method used in a span. - HTTPMethod = "http.method" - - // HTTPCode sets the HTTP status code as a tag. - HTTPCode = "http.status_code" - - // HTTPURL sets the HTTP URL for a span. - HTTPURL = "http.url" - - // TODO: In the next major version, suffix these constants (SpanType, etc) - // with "*Key" (SpanTypeKey, etc) to more easily differentiate between - // constants representing tag values and constants representing keys. - - // SpanType defines the Span type (web, db, cache). - SpanType = "span.type" - - // ServiceName defines the Service name for this Span. - ServiceName = "service.name" - - // ResourceName defines the Resource name for the Span. - ResourceName = "resource.name" - - // Error specifies the error tag. It's value is usually of type "error". - Error = "error" - - // ErrorMsg specifies the error message. - ErrorMsg = "error.msg" - - // ErrorType specifies the error type. - ErrorType = "error.type" - - // ErrorStack specifies the stack dump. - ErrorStack = "error.stack" - - // Environment specifies the environment to use with a trace. - Environment = "env" -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal/globaltracer.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal/globaltracer.go deleted file mode 100644 index 008f5f03..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal/globaltracer.go +++ /dev/null @@ -1,98 +0,0 @@ -package internal // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - -import ( - "sync" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -var ( - mu sync.RWMutex // guards globalTracer - globalTracer ddtrace.Tracer = &NoopTracer{} -) - -// SetGlobalTracer sets the global tracer to t. -func SetGlobalTracer(t ddtrace.Tracer) { - mu.Lock() - defer mu.Unlock() - if !Testing { - // avoid infinite loop when calling (*mocktracer.Tracer).Stop - globalTracer.Stop() - } - globalTracer = t -} - -// GetGlobalTracer returns the currently active tracer. -func GetGlobalTracer() ddtrace.Tracer { - mu.RLock() - defer mu.RUnlock() - return globalTracer -} - -// Testing is set to true when the mock tracer is active. It usually signifies that we are in a test -// environment. This value is used by tracer.Start to prevent overriding the GlobalTracer in tests. -var Testing = false - -var _ ddtrace.Tracer = (*NoopTracer)(nil) - -// NoopTracer is an implementation of ddtrace.Tracer that is a no-op. -type NoopTracer struct{} - -// StartSpan implements ddtrace.Tracer. -func (NoopTracer) StartSpan(operationName string, opts ...ddtrace.StartSpanOption) ddtrace.Span { - return NoopSpan{} -} - -// SetServiceInfo implements ddtrace.Tracer. -func (NoopTracer) SetServiceInfo(name, app, appType string) {} - -// Extract implements ddtrace.Tracer. -func (NoopTracer) Extract(carrier interface{}) (ddtrace.SpanContext, error) { - return NoopSpanContext{}, nil -} - -// Inject implements ddtrace.Tracer. -func (NoopTracer) Inject(context ddtrace.SpanContext, carrier interface{}) error { return nil } - -// Stop implements ddtrace.Tracer. -func (NoopTracer) Stop() {} - -var _ ddtrace.Span = (*NoopSpan)(nil) - -// NoopSpan is an implementation of ddtrace.Span that is a no-op. -type NoopSpan struct{} - -// SetTag implements ddtrace.Span. -func (NoopSpan) SetTag(key string, value interface{}) {} - -// SetOperationName implements ddtrace.Span. -func (NoopSpan) SetOperationName(operationName string) {} - -// BaggageItem implements ddtrace.Span. -func (NoopSpan) BaggageItem(key string) string { return "" } - -// SetBaggageItem implements ddtrace.Span. -func (NoopSpan) SetBaggageItem(key, val string) {} - -// Finish implements ddtrace.Span. -func (NoopSpan) Finish(opts ...ddtrace.FinishOption) {} - -// Tracer implements ddtrace.Span. -func (NoopSpan) Tracer() ddtrace.Tracer { return NoopTracer{} } - -// Context implements ddtrace.Span. -func (NoopSpan) Context() ddtrace.SpanContext { return NoopSpanContext{} } - -var _ ddtrace.SpanContext = (*NoopSpanContext)(nil) - -// NoopSpanContext is an implementation of ddtrace.SpanContext that is a no-op. -type NoopSpanContext struct{} - -// SpanID implements ddtrace.SpanContext. -func (NoopSpanContext) SpanID() uint64 { return 0 } - -// TraceID implements ddtrace.SpanContext. -func (NoopSpanContext) TraceID() uint64 { return 0 } - -// ForeachBaggageItem implements ddtrace.SpanContext. -func (NoopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/example_test.go deleted file mode 100644 index 76b642ea..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/example_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package mocktracer_test - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" -) - -func Example() { - // Start the mock tracer. - mt := mocktracer.Start() - defer mt.Stop() - - // ...run some code with generates spans. - - // Query the mock tracer for finished spans. - spans := mt.FinishedSpans() - if len(spans) != 1 { - // should only have 1 span - } - - // Run assertions... -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan.go deleted file mode 100644 index 1e760bb8..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan.go +++ /dev/null @@ -1,214 +0,0 @@ -package mocktracer // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer" - -import ( - "fmt" - "sync" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -var _ ddtrace.Span = (*mockspan)(nil) -var _ Span = (*mockspan)(nil) - -// Span is an interface that allows querying a span returned by the mock tracer. -type Span interface { - // SpanID returns the span's ID. - SpanID() uint64 - - // TraceID returns the span's trace ID. - TraceID() uint64 - - // ParentID returns the span's parent ID. - ParentID() uint64 - - // StartTime returns the time when the span has started. - StartTime() time.Time - - // FinishTime returns the time when the span has finished. - FinishTime() time.Time - - // OperationName returns the operation name held by this span. - OperationName() string - - // Tag returns the value of the tag at key k. - Tag(k string) interface{} - - // Tags returns a copy of all the tags in this span. - Tags() map[string]interface{} - - // Context returns the span's SpanContext. - Context() ddtrace.SpanContext - - // Stringer allows pretty-printing the span's fields for debugging. - fmt.Stringer -} - -func newSpan(t *mocktracer, operationName string, cfg *ddtrace.StartSpanConfig) *mockspan { - if cfg.Tags == nil { - cfg.Tags = make(map[string]interface{}) - } - if cfg.Tags[ext.ResourceName] == nil { - cfg.Tags[ext.ResourceName] = operationName - } - s := &mockspan{ - name: operationName, - tracer: t, - } - if cfg.StartTime.IsZero() { - s.startTime = time.Now() - } else { - s.startTime = cfg.StartTime - } - id := nextID() - s.context = &spanContext{spanID: id, traceID: id, span: s} - if ctx, ok := cfg.Parent.(*spanContext); ok { - if ctx.span != nil && s.tags[ext.ServiceName] == nil { - // if we have a local parent and no service, inherit the parent's - s.SetTag(ext.ServiceName, ctx.span.Tag(ext.ServiceName)) - } - if ctx.hasSamplingPriority() { - s.SetTag(ext.SamplingPriority, ctx.samplingPriority()) - } - s.parentID = ctx.spanID - s.context.priority = ctx.samplingPriority() - s.context.hasPriority = ctx.hasSamplingPriority() - s.context.traceID = ctx.traceID - s.context.baggage = make(map[string]string, len(ctx.baggage)) - ctx.ForeachBaggageItem(func(k, v string) bool { - s.context.baggage[k] = v - return true - }) - } - for k, v := range cfg.Tags { - s.SetTag(k, v) - } - return s -} - -type mockspan struct { - sync.RWMutex // guards below fields - name string - tags map[string]interface{} - finishTime time.Time - - startTime time.Time - parentID uint64 - context *spanContext - tracer *mocktracer -} - -// SetTag sets a given tag on the span. -func (s *mockspan) SetTag(key string, value interface{}) { - s.Lock() - defer s.Unlock() - if s.tags == nil { - s.tags = make(map[string]interface{}, 1) - } - if key == ext.SamplingPriority { - switch p := value.(type) { - case int: - s.context.setSamplingPriority(p) - case float64: - s.context.setSamplingPriority(int(p)) - } - } - s.tags[key] = value -} - -func (s *mockspan) FinishTime() time.Time { - s.RLock() - defer s.RUnlock() - return s.finishTime -} - -func (s *mockspan) StartTime() time.Time { return s.startTime } - -func (s *mockspan) Tag(k string) interface{} { - s.RLock() - defer s.RUnlock() - return s.tags[k] -} - -func (s *mockspan) Tags() map[string]interface{} { - s.RLock() - defer s.RUnlock() - // copy - cp := make(map[string]interface{}, len(s.tags)) - for k, v := range s.tags { - cp[k] = v - } - return cp -} - -func (s *mockspan) TraceID() uint64 { return s.context.traceID } - -func (s *mockspan) SpanID() uint64 { return s.context.spanID } - -func (s *mockspan) ParentID() uint64 { return s.parentID } - -func (s *mockspan) OperationName() string { - s.RLock() - defer s.RUnlock() - return s.name -} - -// SetOperationName resets the original operation name to the given one. -func (s *mockspan) SetOperationName(operationName string) { - s.Lock() - defer s.Unlock() - s.name = operationName - return -} - -// BaggageItem returns the baggage item with the given key. -func (s *mockspan) BaggageItem(key string) string { - return s.context.baggageItem(key) -} - -// SetBaggageItem sets a new baggage item at the given key. The baggage -// item should propagate to all descendant spans, both in- and cross-process. -func (s *mockspan) SetBaggageItem(key, val string) { - s.context.setBaggageItem(key, val) - return -} - -// Finish finishes the current span with the given options. -func (s *mockspan) Finish(opts ...ddtrace.FinishOption) { - var cfg ddtrace.FinishConfig - for _, fn := range opts { - fn(&cfg) - } - var t time.Time - if cfg.FinishTime.IsZero() { - t = time.Now() - } else { - t = cfg.FinishTime - } - if cfg.Error != nil { - s.SetTag(ext.Error, cfg.Error) - } - s.Lock() - s.finishTime = t - s.Unlock() - s.tracer.addFinishedSpan(s) -} - -// String implements fmt.Stringer. -func (s *mockspan) String() string { - sc := s.context - return fmt.Sprintf(` -name: %s -tags: %#v -start: %s -finish: %s -id: %d -parent: %d -trace: %d -baggage: %#v -`, s.name, s.tags, s.startTime, s.finishTime, sc.spanID, s.parentID, sc.traceID, sc.baggage) -} - -// Context returns the SpanContext of this Span. -func (s *mockspan) Context() ddtrace.SpanContext { return s.context } diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan_test.go deleted file mode 100644 index e675d284..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspan_test.go +++ /dev/null @@ -1,173 +0,0 @@ -package mocktracer - -import ( - "errors" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" -) - -// basicSpan returns a span with no configuration, having the set operation name. -func basicSpan(operationName string) *mockspan { - return newSpan(&mocktracer{}, operationName, &ddtrace.StartSpanConfig{}) -} - -func TestNewSpan(t *testing.T) { - t.Run("basic", func(t *testing.T) { - s := basicSpan("http.request") - - assert := assert.New(t) - assert.Equal("http.request", s.name) - assert.False(s.startTime.IsZero()) - assert.Zero(s.parentID) - assert.NotNil(s.context) - assert.NotZero(s.context.spanID) - assert.Equal(s.context.spanID, s.context.traceID) - }) - - t.Run("options", func(t *testing.T) { - tr := new(mocktracer) - startTime := time.Now() - tags := map[string]interface{}{"k": "v", "k1": "v1"} - opts := &ddtrace.StartSpanConfig{ - StartTime: startTime, - Tags: tags, - } - s := newSpan(tr, "http.request", opts) - - assert := assert.New(t) - assert.Equal(tr, s.tracer) - assert.Equal("http.request", s.name) - assert.Equal(startTime, s.startTime) - assert.Equal(tags, s.tags) - }) - - t.Run("parent", func(t *testing.T) { - baggage := map[string]string{"A": "B", "C": "D"} - parentctx := &spanContext{spanID: 1, traceID: 2, baggage: baggage} - opts := &ddtrace.StartSpanConfig{Parent: parentctx} - s := newSpan(&mocktracer{}, "http.request", opts) - - assert := assert.New(t) - assert.NotNil(s.context) - assert.Equal(uint64(1), s.parentID) - assert.Equal(uint64(2), s.context.traceID) - assert.Equal(baggage, s.context.baggage) - }) -} - -func TestSpanSetTag(t *testing.T) { - s := basicSpan("http.request") - s.SetTag("a", "b") - s.SetTag("c", "d") - - assert := assert.New(t) - assert.Len(s.Tags(), 3) - assert.Equal("http.request", s.Tag(ext.ResourceName)) - assert.Equal("b", s.Tag("a")) - assert.Equal("d", s.Tag("c")) -} - -func TestSpanSetTagPriority(t *testing.T) { - assert := assert.New(t) - s := basicSpan("http.request") - assert.False(s.context.hasSamplingPriority()) - s.SetTag(ext.SamplingPriority, -1) - assert.True(s.context.hasSamplingPriority()) - assert.Equal(-1, s.context.samplingPriority()) -} - -func TestSpanTagImmutability(t *testing.T) { - s := basicSpan("http.request") - s.SetTag("a", "b") - tags := s.Tags() - tags["a"] = 123 - tags["b"] = 456 - - assert := assert.New(t) - assert.Equal("b", s.tags["a"]) - assert.Zero(s.tags["b"]) -} - -func TestSpanStartTime(t *testing.T) { - startTime := time.Now() - s := newSpan(&mocktracer{}, "http.request", &ddtrace.StartSpanConfig{StartTime: startTime}) - - assert := assert.New(t) - assert.Equal(startTime, s.startTime) - assert.Equal(startTime, s.StartTime()) -} - -func TestSpanFinishTime(t *testing.T) { - s := basicSpan("http.request") - finishTime := time.Now() - s.Finish(tracer.FinishTime(finishTime)) - - assert := assert.New(t) - assert.Equal(finishTime, s.finishTime) - assert.Equal(finishTime, s.FinishTime()) -} - -func TestSpanOperationName(t *testing.T) { - t.Run("default", func(t *testing.T) { - s := basicSpan("http.request") - assert.Equal(t, "http.request", s.name) - assert.Equal(t, "http.request", s.OperationName()) - }) - - t.Run("default", func(t *testing.T) { - s := basicSpan("http.request") - s.SetOperationName("db.query") - assert.Equal(t, "db.query", s.name) - assert.Equal(t, "db.query", s.OperationName()) - }) -} - -func TestSpanBaggageFunctions(t *testing.T) { - t.Run("SetBaggageItem", func(t *testing.T) { - s := basicSpan("http.request") - s.SetBaggageItem("a", "b") - assert.Equal(t, "b", s.context.baggage["a"]) - }) - - t.Run("BaggageItem", func(t *testing.T) { - s := basicSpan("http.request") - s.SetBaggageItem("a", "b") - assert.Equal(t, "b", s.BaggageItem("a")) - }) -} - -func TestSpanContext(t *testing.T) { - t.Run("Context", func(t *testing.T) { - s := basicSpan("http.request") - assert.Equal(t, s.context, s.Context()) - }) - - t.Run("IDs", func(t *testing.T) { - parent := basicSpan("http.request") - child := newSpan(&mocktracer{}, "db.query", &ddtrace.StartSpanConfig{ - Parent: parent.Context(), - }) - - assert := assert.New(t) - assert.Equal(parent.SpanID(), child.ParentID()) - assert.Equal(parent.TraceID(), child.TraceID()) - assert.NotZero(child.SpanID()) - }) -} - -func TestSpanFinish(t *testing.T) { - s := basicSpan("http.request") - want := errors.New("some error") - s.Finish(tracer.WithError(want)) - - assert := assert.New(t) - assert.False(s.FinishTime().IsZero()) - assert.True(s.FinishTime().Before(time.Now())) - assert.Equal(want, s.Tag(ext.Error)) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext.go deleted file mode 100644 index 49246a09..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext.go +++ /dev/null @@ -1,73 +0,0 @@ -package mocktracer - -import ( - "sync" - "sync/atomic" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -var _ ddtrace.SpanContext = (*spanContext)(nil) - -type spanContext struct { - sync.RWMutex // guards below fields - baggage map[string]string - priority int - hasPriority bool - - spanID uint64 - traceID uint64 - span *mockspan // context owner -} - -func (sc *spanContext) TraceID() uint64 { return sc.traceID } - -func (sc *spanContext) SpanID() uint64 { return sc.spanID } - -func (sc *spanContext) ForeachBaggageItem(handler func(k, v string) bool) { - sc.RLock() - defer sc.RUnlock() - for k, v := range sc.baggage { - if !handler(k, v) { - break - } - } -} - -func (sc *spanContext) setBaggageItem(k, v string) { - sc.Lock() - defer sc.Unlock() - if sc.baggage == nil { - sc.baggage = make(map[string]string, 1) - } - sc.baggage[k] = v -} - -func (sc *spanContext) baggageItem(k string) string { - sc.RLock() - defer sc.RUnlock() - return sc.baggage[k] -} - -func (sc *spanContext) setSamplingPriority(p int) { - sc.Lock() - defer sc.Unlock() - sc.priority = p - sc.hasPriority = true -} - -func (sc *spanContext) hasSamplingPriority() bool { - sc.RLock() - defer sc.RUnlock() - return sc.hasPriority -} - -func (sc *spanContext) samplingPriority() int { - sc.RLock() - defer sc.RUnlock() - return sc.priority -} - -var mockIDSource uint64 = 123 - -func nextID() uint64 { return atomic.AddUint64(&mockIDSource, 1) } diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext_test.go deleted file mode 100644 index 98ceca19..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package mocktracer - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestMockIDs(t *testing.T) { - last := nextID() - for i := 0; i < 10; i++ { - // ensure incremental (unique) IDs - next := nextID() - if next <= last { - t.Fail() - } - last = next - } -} - -func TestSpanContextSetBaggage(t *testing.T) { - var sc spanContext - sc.setBaggageItem("a", "b") - sc.setBaggageItem("c", "d") - assert.Equal(t, sc.baggage["a"], "b") - assert.Equal(t, sc.baggage["c"], "d") -} - -func TestSpanContextGetBaggage(t *testing.T) { - var sc spanContext - sc.setBaggageItem("a", "b") - sc.setBaggageItem("c", "d") - assert.Equal(t, sc.baggageItem("a"), "b") - assert.Equal(t, sc.baggageItem("c"), "d") -} - -func TestSpanContextIterator(t *testing.T) { - var sc spanContext - sc.setBaggageItem("a", "b") - sc.setBaggageItem("c", "d") - - t.Run("some", func(t *testing.T) { - var seen int - sc.ForeachBaggageItem(func(k, v string) bool { - seen++ - return false - }) - assert.Equal(t, seen, 1) - }) - - t.Run("all", func(t *testing.T) { - seen := make(map[string]interface{}, 2) - sc.ForeachBaggageItem(func(k, v string) bool { - seen[k] = v - return true - }) - assert.Len(t, seen, 2) - assert.Equal(t, seen["a"], "b") - assert.Equal(t, seen["c"], "d") - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer.go deleted file mode 100644 index 6d1349c6..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer.go +++ /dev/null @@ -1,159 +0,0 @@ -// Package mocktracer provides a mock implementation of the tracer used in testing. It -// allows querying spans generated at runtime, without having them actually be sent to -// an agent. It provides a simple way to test that instrumentation is running correctly -// in your application. -// -// Simply call "Start" at the beginning of your tests to start and obtain an instance -// of the mock tracer. -package mocktracer - -import ( - "strconv" - "strings" - "sync" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -var _ ddtrace.Tracer = (*mocktracer)(nil) -var _ Tracer = (*mocktracer)(nil) - -// Tracer exposes an interface for querying the currently running mock tracer. -type Tracer interface { - // FinishedSpans returns the set of finished spans. - FinishedSpans() []Span - - // Reset resets the spans and services recorded in the tracer. This is - // especially useful when running tests in a loop, where a clean start - // is desired for FinishedSpans calls. - Reset() - - // Stop deactivates the mock tracer and allows a normal tracer to take over. - // It should always be called when testing has finished. - Stop() -} - -// Start sets the internal tracer to a mock and returns an interface -// which allows querying it. Call Start at the beginning of your tests -// to activate the mock tracer. When your test runs, use the returned -// interface to query the tracer's state. -func Start() Tracer { - var t mocktracer - internal.SetGlobalTracer(&t) - internal.Testing = true - return &t -} - -type mocktracer struct { - sync.RWMutex // guards below spans - finishedSpans []Span -} - -// Stop deactivates the mock tracer and sets the active tracer to a no-op. -func (*mocktracer) Stop() { - internal.SetGlobalTracer(&internal.NoopTracer{}) - internal.Testing = false -} - -func (t *mocktracer) StartSpan(operationName string, opts ...ddtrace.StartSpanOption) ddtrace.Span { - var cfg ddtrace.StartSpanConfig - for _, fn := range opts { - fn(&cfg) - } - return newSpan(t, operationName, &cfg) -} - -func (t *mocktracer) FinishedSpans() []Span { - t.RLock() - defer t.RUnlock() - return t.finishedSpans -} - -func (t *mocktracer) Reset() { - t.Lock() - defer t.Unlock() - t.finishedSpans = nil -} - -func (t *mocktracer) addFinishedSpan(s Span) { - t.Lock() - defer t.Unlock() - if t.finishedSpans == nil { - t.finishedSpans = make([]Span, 0, 1) - } - t.finishedSpans = append(t.finishedSpans, s) -} - -const ( - traceHeader = tracer.DefaultTraceIDHeader - spanHeader = tracer.DefaultParentIDHeader - priorityHeader = tracer.DefaultPriorityHeader - baggagePrefix = tracer.DefaultBaggageHeaderPrefix -) - -func (t *mocktracer) Extract(carrier interface{}) (ddtrace.SpanContext, error) { - reader, ok := carrier.(tracer.TextMapReader) - if !ok { - return nil, tracer.ErrInvalidCarrier - } - var sc spanContext - err := reader.ForeachKey(func(key, v string) error { - k := strings.ToLower(key) - if k == traceHeader { - id, err := strconv.ParseUint(v, 10, 64) - if err != nil { - return tracer.ErrSpanContextCorrupted - } - sc.traceID = id - } - if k == spanHeader { - id, err := strconv.ParseUint(v, 10, 64) - if err != nil { - return tracer.ErrSpanContextCorrupted - } - sc.spanID = id - } - if k == priorityHeader { - p, err := strconv.Atoi(v) - if err != nil { - return tracer.ErrSpanContextCorrupted - } - sc.priority = p - sc.hasPriority = true - } - if strings.HasPrefix(k, baggagePrefix) { - sc.setBaggageItem(strings.TrimPrefix(k, baggagePrefix), v) - } - return nil - }) - if err != nil { - return nil, err - } - if sc.traceID == 0 || sc.spanID == 0 { - return nil, tracer.ErrSpanContextNotFound - } - return &sc, err -} - -func (t *mocktracer) Inject(context ddtrace.SpanContext, carrier interface{}) error { - writer, ok := carrier.(tracer.TextMapWriter) - if !ok { - return tracer.ErrInvalidCarrier - } - ctx, ok := context.(*spanContext) - if !ok || ctx.traceID == 0 || ctx.spanID == 0 { - return tracer.ErrInvalidSpanContext - } - writer.Set(traceHeader, strconv.FormatUint(ctx.traceID, 10)) - writer.Set(spanHeader, strconv.FormatUint(ctx.spanID, 10)) - if ctx.hasSamplingPriority() { - writer.Set(priorityHeader, strconv.Itoa(ctx.priority)) - } - ctx.ForeachBaggageItem(func(k, v string) bool { - writer.Set(baggagePrefix+k, v) - return true - }) - return nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer_test.go deleted file mode 100644 index 7c6a654f..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mocktracer_test.go +++ /dev/null @@ -1,238 +0,0 @@ -package mocktracer - -import ( - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - "github.com/stretchr/testify/assert" -) - -func TestStart(t *testing.T) { - trc := Start() - if tt, ok := internal.GetGlobalTracer().(Tracer); !ok || tt != trc { - t.Fail() - } -} - -func TestTracerStop(t *testing.T) { - Start().Stop() - if _, ok := internal.GetGlobalTracer().(*internal.NoopTracer); !ok { - t.Fail() - } -} - -func TestTracerStartSpan(t *testing.T) { - parentTags := map[string]interface{}{ext.ServiceName: "root-service", ext.SamplingPriority: -1} - startTime := time.Now() - - t.Run("with-service", func(t *testing.T) { - var mt mocktracer - parent := newSpan(&mt, "http.request", &ddtrace.StartSpanConfig{Tags: parentTags}) - s, ok := mt.StartSpan( - "db.query", - tracer.ServiceName("my-service"), - tracer.StartTime(startTime), - tracer.ChildOf(parent.Context()), - ).(*mockspan) - - assert := assert.New(t) - assert.True(ok) - assert.Equal("db.query", s.OperationName()) - assert.Equal(startTime, s.StartTime()) - assert.Equal("my-service", s.Tag(ext.ServiceName)) - assert.Equal(parent.SpanID(), s.ParentID()) - assert.Equal(parent.TraceID(), s.TraceID()) - assert.True(parent.context.hasSamplingPriority()) - assert.Equal(-1, parent.context.samplingPriority()) - }) - - t.Run("inherit", func(t *testing.T) { - var mt mocktracer - parent := newSpan(&mt, "http.request", &ddtrace.StartSpanConfig{Tags: parentTags}) - s, ok := mt.StartSpan("db.query", tracer.ChildOf(parent.Context())).(*mockspan) - - assert := assert.New(t) - assert.True(ok) - assert.Equal("db.query", s.OperationName()) - assert.Equal("root-service", s.Tag(ext.ServiceName)) - assert.Equal(parent.SpanID(), s.ParentID()) - assert.Equal(parent.TraceID(), s.TraceID()) - assert.True(s.context.hasSamplingPriority()) - assert.Equal(-1, s.context.samplingPriority()) - }) -} - -func TestTracerFinishedSpans(t *testing.T) { - var mt mocktracer - parent := newSpan(&mt, "http.request", &ddtrace.StartSpanConfig{}) - child := mt.StartSpan("db.query", tracer.ChildOf(parent.Context())) - child.Finish() - parent.Finish() - found := 0 - for _, s := range mt.FinishedSpans() { - switch s.OperationName() { - case "http.request": - assert.Equal(t, parent, s) - found++ - case "db.query": - assert.Equal(t, child, s) - found++ - } - } - assert.Equal(t, 2, found) -} - -func TestTracerReset(t *testing.T) { - var mt mocktracer - mt.StartSpan("db.query").Finish() - - assert := assert.New(t) - assert.Len(mt.finishedSpans, 1) - - mt.Reset() - - assert.Nil(mt.finishedSpans) -} - -func TestTracerInject(t *testing.T) { - t.Run("errors", func(t *testing.T) { - var mt mocktracer - assert := assert.New(t) - - err := mt.Inject(&spanContext{}, 2) - assert.Equal(tracer.ErrInvalidCarrier, err) // 2 is not a carrier - - err = mt.Inject(&spanContext{}, tracer.TextMapCarrier(map[string]string{})) - assert.Equal(tracer.ErrInvalidSpanContext, err) // no traceID and spanID - - err = mt.Inject(&spanContext{traceID: 2}, tracer.TextMapCarrier(map[string]string{})) - assert.Equal(tracer.ErrInvalidSpanContext, err) // no spanID - - err = mt.Inject(&spanContext{traceID: 2, spanID: 1}, tracer.TextMapCarrier(map[string]string{})) - assert.Nil(err) // ok - }) - - t.Run("ok", func(t *testing.T) { - sctx := &spanContext{ - traceID: 1, - spanID: 2, - priority: -1, - hasPriority: true, - baggage: map[string]string{"A": "B", "C": "D"}, - } - carrier := make(map[string]string) - err := (&mocktracer{}).Inject(sctx, tracer.TextMapCarrier(carrier)) - - assert := assert.New(t) - assert.Nil(err) - assert.Equal("1", carrier[traceHeader]) - assert.Equal("2", carrier[spanHeader]) - assert.Equal("-1", carrier[priorityHeader]) - assert.Equal("B", carrier[baggagePrefix+"A"]) - assert.Equal("D", carrier[baggagePrefix+"C"]) - }) -} - -func TestTracerExtract(t *testing.T) { - // carry creates a tracer.TextMapCarrier containing the given sequence - // of key/value pairs. - carry := func(kv ...string) tracer.TextMapCarrier { - var k string - m := make(map[string]string) - if n := len(kv); n%2 == 0 && n >= 2 { - for i, v := range kv { - if (i+1)%2 == 0 { - m[k] = v - } else { - k = v - } - } - } - return tracer.TextMapCarrier(m) - } - - // tests carry helper function. - t.Run("carry", func(t *testing.T) { - for _, tt := range []struct { - in []string - out tracer.TextMapCarrier - }{ - {in: []string{}, out: map[string]string{}}, - {in: []string{"A"}, out: map[string]string{}}, - {in: []string{"A", "B", "C"}, out: map[string]string{}}, - {in: []string{"A", "B"}, out: map[string]string{"A": "B"}}, - {in: []string{"A", "B", "C", "D"}, out: map[string]string{"A": "B", "C": "D"}}, - } { - assert.Equal(t, tt.out, carry(tt.in...)) - } - }) - - var mt mocktracer - - // tests error return values. - t.Run("errors", func(t *testing.T) { - assert := assert.New(t) - - _, err := mt.Extract(2) - assert.Equal(tracer.ErrInvalidCarrier, err) - - _, err = mt.Extract(carry(traceHeader, "a")) - assert.Equal(tracer.ErrSpanContextCorrupted, err) - - _, err = mt.Extract(carry(spanHeader, "a", traceHeader, "2", baggagePrefix+"x", "y")) - assert.Equal(tracer.ErrSpanContextCorrupted, err) - - _, err = mt.Extract(carry(spanHeader, "1")) - assert.Equal(tracer.ErrSpanContextNotFound, err) - - _, err = mt.Extract(carry()) - assert.Equal(tracer.ErrSpanContextNotFound, err) - }) - - t.Run("ok", func(t *testing.T) { - assert := assert.New(t) - - ctx, err := mt.Extract(carry(traceHeader, "1", spanHeader, "2")) - assert.Nil(err) - sc, ok := ctx.(*spanContext) - assert.True(ok) - assert.Equal(uint64(1), sc.traceID) - assert.Equal(uint64(2), sc.spanID) - - ctx, err = mt.Extract(carry(traceHeader, "1", spanHeader, "2", baggagePrefix+"A", "B", baggagePrefix+"C", "D")) - assert.Nil(err) - sc, ok = ctx.(*spanContext) - assert.True(ok) - assert.Equal("B", sc.baggageItem("a")) - assert.Equal("D", sc.baggageItem("c")) - - ctx, err = mt.Extract(carry(traceHeader, "1", spanHeader, "2", priorityHeader, "-1")) - assert.Nil(err) - sc, ok = ctx.(*spanContext) - assert.True(ok) - assert.True(sc.hasSamplingPriority()) - assert.Equal(-1, sc.samplingPriority()) - }) - - t.Run("consistency", func(t *testing.T) { - assert := assert.New(t) - want := &spanContext{traceID: 1, spanID: 2, baggage: map[string]string{"a": "B", "C": "D"}} - mc := tracer.TextMapCarrier(make(map[string]string)) - err := mt.Inject(want, mc) - assert.Nil(err) - sc, err := mt.Extract(mc) - assert.Nil(err) - got, ok := sc.(*spanContext) - assert.True(ok) - - assert.Equal(uint64(1), got.traceID) - assert.Equal(uint64(2), got.spanID) - assert.Equal("D", got.baggageItem("c")) - assert.Equal("B", got.baggageItem("a")) - }) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/example_test.go deleted file mode 100644 index 5df6f5b2..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/example_test.go +++ /dev/null @@ -1,18 +0,0 @@ -package opentracer_test - -import ( - opentracing "github.com/opentracing/opentracing-go" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" -) - -func Example() { - // Start a Datadog tracer, optionally providing a set of options, - // returning an opentracing.Tracer which wraps it. - t := opentracer.New(tracer.WithAgentAddr("host:port")) - - // Use it with the Opentracing API. The (already started) Datadog tracer - // may be used in parallel with the Opentracing API if desired. - opentracing.SetGlobalTracer(t) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/option.go deleted file mode 100644 index cbae4518..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/option.go +++ /dev/null @@ -1,24 +0,0 @@ -package opentracer // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer" - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - - opentracing "github.com/opentracing/opentracing-go" -) - -// ServiceName can be used with opentracing.StartSpan to set the -// service name of a span. -func ServiceName(name string) opentracing.StartSpanOption { - return opentracing.Tag{Key: ext.ServiceName, Value: name} -} - -// ResourceName can be used with opentracing.StartSpan to set the -// resource name of a span. -func ResourceName(name string) opentracing.StartSpanOption { - return opentracing.Tag{Key: ext.ResourceName, Value: name} -} - -// SpanType can be used with opentracing.StartSpan to set the type of a span. -func SpanType(name string) opentracing.StartSpanOption { - return opentracing.Tag{Key: ext.SpanType, Value: name} -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go deleted file mode 100644 index 1e02764e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/span.go +++ /dev/null @@ -1,83 +0,0 @@ -package opentracer - -import ( - "fmt" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - opentracing "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/log" -) - -var _ opentracing.Span = (*span)(nil) - -// span implements opentracing.Span on top of ddtrace.Span. -type span struct { - ddtrace.Span - *opentracer -} - -func (s *span) Context() opentracing.SpanContext { return s.Span.Context() } -func (s *span) Finish() { s.Span.Finish() } -func (s *span) Tracer() opentracing.Tracer { return s.opentracer } -func (s *span) LogEvent(event string) { /* deprecated */ } -func (s *span) LogEventWithPayload(event string, payload interface{}) { /* deprecated */ } -func (s *span) Log(data opentracing.LogData) { /* deprecated */ } - -func (s *span) FinishWithOptions(opts opentracing.FinishOptions) { - for _, lr := range opts.LogRecords { - if len(lr.Fields) > 0 { - s.LogFields(lr.Fields...) - } - } - s.Span.Finish(tracer.FinishTime(opts.FinishTime)) -} - -func (s *span) LogFields(fields ...log.Field) { - // catch standard opentracing keys and adjust to internal ones as per spec: - // https://github.com/opentracing/specification/blob/master/semantic_conventions.md#log-fields-table - for _, f := range fields { - switch f.Key() { - case "event": - if v, ok := f.Value().(string); ok && v == "error" { - s.SetTag("error", true) - } - case "error", "error.object": - if err, ok := f.Value().(error); ok { - s.SetTag("error", err) - } - case "message": - s.SetTag(ext.ErrorMsg, fmt.Sprint(f.Value())) - case "stack": - s.SetTag(ext.ErrorStack, fmt.Sprint(f.Value())) - default: - // not implemented - } - } -} - -func (s *span) LogKV(keyVals ...interface{}) { - fields, err := log.InterleavedKVToFields(keyVals...) - if err != nil { - // TODO(gbbr): create a log package - return - } - s.LogFields(fields...) -} - -func (s *span) SetBaggageItem(key, val string) opentracing.Span { - s.Span.SetBaggageItem(key, val) - return s -} - -func (s *span) SetOperationName(operationName string) opentracing.Span { - s.Span.SetOperationName(operationName) - return s -} - -func (s *span) SetTag(key string, value interface{}) opentracing.Span { - s.Span.SetTag(key, value) - return s -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer.go deleted file mode 100644 index df730280..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer.go +++ /dev/null @@ -1,81 +0,0 @@ -// Package opentracer provides a wrapper on top of the Datadog tracer that can be used with Opentracing. -// It also provides a set of opentracing.StartSpanOption that are specific to Datadog's APM product. -// To use it, simply call "New". -// -// Note that there are currently some small incompatibilities between the Opentracing spec and the Datadog -// APM product, which we are in the process of addressing on the long term. When using Datadog, the -// Opentracing operation name is what is called resource in Datadog's terms and the Opentracing "component" -// tag is Datadog's operation name. Meaning that in order to define (in Opentracing terms) a span that -// has the operation name "/user/profile" and the component "http.request", one would do: -// opentracing.StartSpan("http.request", opentracer.ResourceName("/user/profile")) -// -// Some libraries and frameworks are supported out-of-the-box by using our integrations. You can see a list -// of supported integrations here: https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/contrib. They are fully -// compatible with the Opentracing implementation. -package opentracer - -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - - opentracing "github.com/opentracing/opentracing-go" -) - -// New creates, instantiates and returns an Opentracing compatible version of the -// Datadog tracer using the provided set of options. -func New(opts ...tracer.StartOption) opentracing.Tracer { - tracer.Start(opts...) - return &opentracer{internal.GetGlobalTracer()} -} - -var _ opentracing.Tracer = (*opentracer)(nil) - -// opentracer implements opentracing.Tracer on top of ddtrace.Tracer. -type opentracer struct{ ddtrace.Tracer } - -// StartSpan implements opentracing.Tracer. -func (t *opentracer) StartSpan(operationName string, options ...opentracing.StartSpanOption) opentracing.Span { - var sso opentracing.StartSpanOptions - for _, o := range options { - o.Apply(&sso) - } - opts := []ddtrace.StartSpanOption{tracer.StartTime(sso.StartTime)} - for _, ref := range sso.References { - if v, ok := ref.ReferencedContext.(ddtrace.SpanContext); ok && ref.Type == opentracing.ChildOfRef { - opts = append(opts, tracer.ChildOf(v)) - break // can only have one parent - } - } - for k, v := range sso.Tags { - opts = append(opts, tracer.Tag(k, v)) - } - return &span{ - Span: t.Tracer.StartSpan(operationName, opts...), - opentracer: t, - } -} - -// Inject implements opentracing.Tracer. -func (t *opentracer) Inject(ctx opentracing.SpanContext, format interface{}, carrier interface{}) error { - sctx, ok := ctx.(ddtrace.SpanContext) - if !ok { - return opentracing.ErrUnsupportedFormat - } - switch format { - case opentracing.TextMap, opentracing.HTTPHeaders: - return t.Tracer.Inject(sctx, carrier) - default: - return opentracing.ErrUnsupportedFormat - } -} - -// Extract implements opentracing.Tracer. -func (t *opentracer) Extract(format interface{}, carrier interface{}) (opentracing.SpanContext, error) { - switch format { - case opentracing.TextMap, opentracing.HTTPHeaders: - return t.Tracer.Extract(carrier) - default: - return nil, opentracing.ErrUnsupportedFormat - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer_test.go deleted file mode 100644 index e87e236b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer/tracer_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package opentracer - -import ( - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - - "github.com/stretchr/testify/assert" -) - -func TestStart(t *testing.T) { - assert := assert.New(t) - ot := New() - dd, ok := internal.GetGlobalTracer().(ddtrace.Tracer) - assert.True(ok) - ott, ok := ot.(*opentracer) - assert.True(ok) - assert.Equal(ott.Tracer, dd) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context.go deleted file mode 100644 index b95b1483..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context.go +++ /dev/null @@ -1,42 +0,0 @@ -package tracer - -import ( - "context" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" -) - -type contextKey struct{} - -var activeSpanKey = contextKey{} - -// ContextWithSpan returns a copy of the given context which includes the span s. -func ContextWithSpan(ctx context.Context, s Span) context.Context { - return context.WithValue(ctx, activeSpanKey, s) -} - -// SpanFromContext returns the span contained in the given context. A second return -// value indicates if a span was found in the context. If no span is found, a no-op -// span is returned. -func SpanFromContext(ctx context.Context) (Span, bool) { - if ctx == nil { - return &internal.NoopSpan{}, false - } - v := ctx.Value(activeSpanKey) - if s, ok := v.(ddtrace.Span); ok { - return s, true - } - return &internal.NoopSpan{}, false -} - -// StartSpanFromContext returns a new span with the given operation name and options. If a span -// is found in the context, it will be used as the parent of the resulting span. If the ChildOf -// option is passed, the span from context will take precedence over it as the parent span. -func StartSpanFromContext(ctx context.Context, operationName string, opts ...StartSpanOption) (Span, context.Context) { - if s, ok := SpanFromContext(ctx); ok { - opts = append(opts, ChildOf(s.Context())) - } - s := StartSpan(operationName, opts...) - return s, ContextWithSpan(ctx, s) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context_test.go deleted file mode 100644 index 1f41ee3b..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/context_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package tracer - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" -) - -func TestContextWithSpan(t *testing.T) { - want := &span{SpanID: 123} - ctx := ContextWithSpan(context.Background(), want) - got, ok := ctx.Value(activeSpanKey).(*span) - assert := assert.New(t) - assert.True(ok) - assert.Equal(got, want) -} - -func TestSpanFromContext(t *testing.T) { - t.Run("regular", func(t *testing.T) { - assert := assert.New(t) - want := &span{SpanID: 123} - ctx := ContextWithSpan(context.Background(), want) - got, ok := SpanFromContext(ctx) - assert.True(ok) - assert.Equal(got, want) - }) - t.Run("no-op", func(t *testing.T) { - assert := assert.New(t) - span, ok := SpanFromContext(context.Background()) - assert.False(ok) - _, ok = span.(*internal.NoopSpan) - assert.True(ok) - span, ok = SpanFromContext(nil) - assert.False(ok) - _, ok = span.(*internal.NoopSpan) - assert.True(ok) - }) -} - -func TestStartSpanFromContext(t *testing.T) { - _, _, stop := startTestTracer() - defer stop() - - parent := &span{context: &spanContext{spanID: 123, traceID: 456}} - parent2 := &span{context: &spanContext{spanID: 789, traceID: 456}} - pctx := ContextWithSpan(context.Background(), parent) - child, ctx := StartSpanFromContext( - pctx, - "http.request", - ServiceName("gin"), - ResourceName("/"), - ChildOf(parent2.Context()), // we do this to assert that the span in pctx takes priority. - ) - assert := assert.New(t) - - got, ok := child.(*span) - assert.True(ok) - gotctx, ok := SpanFromContext(ctx) - assert.True(ok) - assert.Equal(gotctx, got) - _, ok = gotctx.(*internal.NoopSpan) - assert.False(ok) - - assert.Equal(uint64(456), got.TraceID) - assert.Equal(uint64(123), got.ParentID) - assert.Equal("http.request", got.Name) - assert.Equal("gin", got.Service) - assert.Equal("/", got.Resource) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/doc.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/doc.go deleted file mode 100644 index 2abd319a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/doc.go +++ /dev/null @@ -1,50 +0,0 @@ -// Package tracer contains Datadog's core tracing client. It is used to trace -// requests as they flow across web servers, databases and microservices, giving -// developers visibility into bottlenecks and troublesome requests. To start the -// tracer, simply call the start method along with an optional set of options. -// By default, the trace agent is considered to be found at "localhost:8126". In a -// setup where this would be different (let's say 127.0.0.1:1234), we could do: -// tracer.Start(tracer.WithAgentAddr("127.0.0.1:1234")) -// defer tracer.Stop() -// -// The tracing client can perform trace sampling. While the trace agent -// already samples traces to reduce bandwidth usage, client sampling reduces -// performance overhead. To make use of it, the package comes with a ready-to-use -// rate sampler that can be passed to the tracer. To use it and keep only 30% of the -// requests, one would do: -// s := tracer.NewRateSampler(0.3) -// tracer.Start(tracer.WithSampler(s)) -// -// All spans created by the tracer contain a context hereby referred to as the span -// context. Note that this is different from Go's context. The span context is used -// to package essential information from a span, which is needed when creating child -// spans that inherit from it. Thus, a child span is created from a span's span context. -// The span context can originate from within the same process, but also a -// different process or even a different machine in the case of distributed tracing. -// -// To make use of distributed tracing, a span's context may be injected via a carrier -// into a transport (HTTP, RPC, etc.) to be extracted on the other end and used to -// create spans that are direct descendants of it. A couple of carrier interfaces -// which should cover most of the use-case scenarios are readily provided, such as -// HTTPCarrier and TextMapCarrier. Users are free to create their own, which will work -// with our propagation algorithm as long as they implement the TextMapReader and TextMapWriter -// interfaces. An example alternate implementation is the MDCarrier in our gRPC integration. -// -// As an example, injecting a span's context into an HTTP request would look like this: -// req, err := http.NewRequest("GET", "http://example.com", nil) -// // ... -// err := tracer.Inject(span.Context(), tracer.HTTPHeadersCarrier(req.Header)) -// // ... -// http.DefaultClient.Do(req) -// Then, on the server side, to continue the trace one would do: -// sctx, err := tracer.Extract(tracer.HTTPHeadersCarrier(req.Header)) -// // ... -// span := tracer.StartSpan("child.span", tracer.ChildOf(sctx)) -// In the same manner, any means can be used as a carrier to inject a context into a transport. Go's -// context can also be used as a means to transport spans within the same process. The methods -// StartSpanFromContext, ContextWithSpan and SpanFromContext exist for this reason. -// -// Some libraries and frameworks are supported out-of-the-box by using one -// of our integrations. You can see a list of supported integrations here: -// https://godoc.org/gopkg.in/DataDog/dd-trace-go.v1/contrib -package tracer // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors.go deleted file mode 100644 index 35c14c60..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors.go +++ /dev/null @@ -1,69 +0,0 @@ -package tracer - -import ( - "fmt" - "log" - "strconv" -) - -var errorPrefix = fmt.Sprintf("Datadog Tracer Error (%s): ", tracerVersion) - -type traceEncodingError struct{ context error } - -func (e *traceEncodingError) Error() string { - return fmt.Sprintf("error encoding trace: %s", e.context) -} - -type spanBufferFullError struct{} - -func (e *spanBufferFullError) Error() string { - return fmt.Sprintf("trace span cap (%d) reached, dropping trace", traceMaxSize) -} - -type dataLossError struct { - count int // number of items lost - context error // any context error, if available -} - -func (e *dataLossError) Error() string { - return fmt.Sprintf("lost traces (count: %d), error: %v", e.count, e.context) -} - -type errorSummary struct { - Count int - Example string -} - -func aggregateErrors(errChan <-chan error) map[string]errorSummary { - errs := make(map[string]errorSummary, len(errChan)) - for { - select { - case err := <-errChan: - if err == nil { - break - } - key := fmt.Sprintf("%T", err) - summary := errs[key] - summary.Count++ - summary.Example = err.Error() - errs[key] = summary - default: // stop when there's no more data - return errs - } - } -} - -// logErrors logs the errors, preventing log file flooding, when there -// are many messages, it caps them and shows a quick summary. -// As of today it only logs using standard golang log package, but -// later we could send those stats to agent // TODO(ufoot). -func logErrors(errChan <-chan error) { - errs := aggregateErrors(errChan) - for _, v := range errs { - var repeat string - if v.Count > 1 { - repeat = " (repeated " + strconv.Itoa(v.Count) + " times)" - } - log.Println(errorPrefix + v.Example + repeat) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors_test.go deleted file mode 100644 index 226c14d4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/errors_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package tracer - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestAggregateErrors(t *testing.T) { - assert := assert.New(t) - - errChan := make(chan error, 100) - errChan <- &traceEncodingError{context: errors.New("couldn't encode at byte 0")} - errChan <- &traceEncodingError{context: errors.New("couldn't encode at byte 0")} - errChan <- &traceEncodingError{context: errors.New("couldn't encode at byte 0")} - errChan <- &traceEncodingError{context: errors.New("couldn't encode at byte 0")} - errChan <- &dataLossError{count: 42} - errChan <- nil - errChan <- errors.New("unexpected error type") - - errs := aggregateErrors(errChan) - - assert.Equal(map[string]errorSummary{ - "*tracer.traceEncodingError": errorSummary{ - Count: 4, - Example: "error encoding trace: couldn't encode at byte 0", - }, - "*tracer.dataLossError": errorSummary{ - Count: 1, - Example: "lost traces (count: 42), error: ", - }, - "*errors.errorString": errorSummary{ - Count: 1, - Example: "unexpected error type", - }, - }, errs) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/example_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/example_test.go deleted file mode 100644 index d86b05b9..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/example_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tracer - -import ( - "io/ioutil" - "log" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -// A basic example demonstrating how to start the tracer, as well as how -// to create a root span and a child span that is a descendant of it. -func Example() { - // Start the tracer and defer the Stop method. - Start(WithAgentAddr("host:port")) - defer Stop() - - // Start a root span. - span := StartSpan("get.data") - defer span.Finish() - - // Create a child of it, computing the time needed to read a file. - child := StartSpan("read.file", ChildOf(span.Context())) - child.SetTag(ext.ResourceName, "test.json") - - // Perform an operation. - _, err := ioutil.ReadFile("~/test.json") - - // We may finish the child span using the returned error. If it's - // nil, it will be disregarded. - child.Finish(WithError(err)) - if err != nil { - log.Fatal(err) - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option.go deleted file mode 100644 index 78fb0fef..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option.go +++ /dev/null @@ -1,163 +0,0 @@ -package tracer - -import ( - "os" - "path/filepath" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -// config holds the tracer configuration. -type config struct { - // debug, when true, writes details to logs. - debug bool - - // serviceName specifies the name of this application. - serviceName string - - // sampler specifies the sampler that will be used for sampling traces. - sampler Sampler - - // agentAddr specifies the hostname and of the agent where the traces - // are sent to. - agentAddr string - - // globalTags holds a set of tags that will be automatically applied to - // all spans. - globalTags map[string]interface{} - - // transport specifies the Transport interface which will be used to send data to the agent. - transport transport - - // propagator propagates span context cross-process - propagator Propagator -} - -// StartOption represents a function that can be provided as a parameter to Start. -type StartOption func(*config) - -// defaults sets the default values for a config. -func defaults(c *config) { - c.serviceName = filepath.Base(os.Args[0]) - c.sampler = NewAllSampler() - c.agentAddr = defaultAddress -} - -// WithDebugMode enables debug mode on the tracer, resulting in more verbose logging. -func WithDebugMode(enabled bool) StartOption { - return func(c *config) { - c.debug = enabled - } -} - -// WithPropagator sets an alternative propagator to be used by the tracer. -func WithPropagator(p Propagator) StartOption { - return func(c *config) { - c.propagator = p - } -} - -// WithServiceName sets the default service name to be used with the tracer. -func WithServiceName(name string) StartOption { - return func(c *config) { - c.serviceName = name - } -} - -// WithAgentAddr sets the address where the agent is located. The default is -// localhost:8126. It should contain both host and port. -func WithAgentAddr(addr string) StartOption { - return func(c *config) { - c.agentAddr = addr - } -} - -// WithGlobalTag sets a key/value pair which will be set as a tag on all spans -// created by tracer. This option may be used multiple times. -func WithGlobalTag(k string, v interface{}) StartOption { - return func(c *config) { - if c.globalTags == nil { - c.globalTags = make(map[string]interface{}) - } - c.globalTags[k] = v - } -} - -// WithSampler sets the given sampler to be used with the tracer. By default -// an all-permissive sampler is used. -func WithSampler(s Sampler) StartOption { - return func(c *config) { - c.sampler = s - } -} - -// StartSpanOption is a configuration option for StartSpan. It is aliased in order -// to help godoc group all the functions returning it together. It is considered -// more correct to refer to it as the type as the origin, ddtrace.StartSpanOption. -type StartSpanOption = ddtrace.StartSpanOption - -// Tag sets the given key/value pair as a tag on the started Span. -func Tag(k string, v interface{}) StartSpanOption { - return func(cfg *ddtrace.StartSpanConfig) { - if cfg.Tags == nil { - cfg.Tags = map[string]interface{}{} - } - cfg.Tags[k] = v - } -} - -// ServiceName sets the given service name on the started span. For example "http.server". -func ServiceName(name string) StartSpanOption { - return Tag(ext.ServiceName, name) -} - -// ResourceName sets the given resource name on the started span. A resource could -// be an SQL query, a URL, an RPC method or something else. -func ResourceName(name string) StartSpanOption { - return Tag(ext.ResourceName, name) -} - -// SpanType sets the given span type on the started span. Some examples in the case of -// the Datadog APM product could be "web", "db" or "cache". -func SpanType(name string) StartSpanOption { - return Tag(ext.SpanType, name) -} - -// ChildOf tells StartSpan to use the given span context as a parent for the -// created span. -func ChildOf(ctx ddtrace.SpanContext) StartSpanOption { - return func(cfg *ddtrace.StartSpanConfig) { - cfg.Parent = ctx - } -} - -// StartTime sets a custom time as the start time for the created span. By -// default a span is started using the creation time. -func StartTime(t time.Time) StartSpanOption { - return func(cfg *ddtrace.StartSpanConfig) { - cfg.StartTime = t - } -} - -// FinishOption is a configuration option for FinishSpan. It is aliased in order -// to help godoc group all the functions returning it together. It is considered -// more correct to refer to it as the type as the origin, ddtrace.FinishOption. -type FinishOption = ddtrace.FinishOption - -// FinishTime sets the given time as the finishing time for the span. By default, -// the current time is used. -func FinishTime(t time.Time) FinishOption { - return func(cfg *ddtrace.FinishConfig) { - cfg.FinishTime = t - } -} - -// WithError marks the span as having had an error. It uses the information from -// err to set tags such as the error message, error type and stack trace. -func WithError(err error) FinishOption { - return func(cfg *ddtrace.FinishConfig) { - cfg.Error = err - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option_test.go deleted file mode 100644 index 19c29590..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/option_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tracer - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func withTransport(t transport) StartOption { - return func(c *config) { - c.transport = t - } -} - -func TestTracerOptionsDefaults(t *testing.T) { - assert := assert.New(t) - var c config - defaults(&c) - assert.Equal(float64(1), c.sampler.(RateSampler).Rate()) - assert.Equal("tracer.test", c.serviceName) - assert.Equal("localhost:8126", c.agentAddr) -} - -func TestTracerOptions(t *testing.T) { - assert := assert.New(t) - tracer := newTracer( - WithSampler(NewRateSampler(0.5)), - WithServiceName("api-intake"), - WithAgentAddr("ddagent.consul.local:58126"), - WithGlobalTag("k", "v"), - WithDebugMode(true), - ) - c := tracer.config - assert.Equal(float64(0.5), c.sampler.(RateSampler).Rate()) - assert.Equal("api-intake", c.serviceName) - assert.Equal("ddagent.consul.local:58126", c.agentAddr) - assert.NotNil(c.globalTags) - assert.Equal("v", c.globalTags["k"]) - assert.True(c.debug) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload.go deleted file mode 100644 index 65ce37fe..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload.go +++ /dev/null @@ -1,116 +0,0 @@ -package tracer - -import ( - "bytes" - "encoding/binary" - "io" - - "github.com/tinylib/msgp/msgp" -) - -// payload is a wrapper on top of the msgpack encoder which allows constructing an -// encoded array by pushing its entries sequentially, one at a time. It basically -// allows us to encode as we would with a stream, except that the contents of the stream -// can be read as a slice by the msgpack decoder at any time. It follows the guidelines -// from the msgpack array spec: -// https://github.com/msgpack/msgpack/blob/master/spec.md#array-format-family -// -// payload implements io.Reader and can be used with the decoder directly. To create -// a new payload use the newPayload method. -// -// payload is not safe for concurrent use. -// -// This structure basically allows us to push traces into the payload one at a time -// in order to always have knowledge of the payload size, but also making it possible -// for the agent to decode it as an array. -type payload struct { - // header specifies the first few bytes in the msgpack stream - // indicating the type of array (fixarray, array16 or array32) - // and the number of items contained in the stream. - header []byte - - // off specifies the current read position on the header. - off int - - // count specifies the number of items in the stream. - count uint64 - - // buf holds the sequence of msgpack-encoded items. - buf bytes.Buffer -} - -var _ io.Reader = (*payload)(nil) - -// newPayload returns a ready to use payload. -func newPayload() *payload { - p := &payload{ - header: make([]byte, 8), - off: 8, - } - return p -} - -// push pushes a new item into the stream. -func (p *payload) push(t spanList) error { - if err := msgp.Encode(&p.buf, t); err != nil { - return err - } - p.count++ - p.updateHeader() - return nil -} - -// itemCount returns the number of items available in the srteam. -func (p *payload) itemCount() int { - return int(p.count) -} - -// size returns the payload size in bytes. After the first read the value becomes -// inaccurate by up to 8 bytes. -func (p *payload) size() int { - return p.buf.Len() + len(p.header) - p.off -} - -// reset resets the internal buffer, counter and read offset. -func (p *payload) reset() { - p.off = 8 - p.count = 0 - p.buf.Reset() -} - -// https://github.com/msgpack/msgpack/blob/master/spec.md#array-format-family -const ( - msgpackArrayFix byte = 144 // up to 15 items - msgpackArray16 = 0xdc // up to 2^16-1 items, followed by size in 2 bytes - msgpackArray32 = 0xdd // up to 2^32-1 items, followed by size in 4 bytes -) - -// updateHeader updates the payload header based on the number of items currently -// present in the stream. -func (p *payload) updateHeader() { - n := p.count - switch { - case n <= 15: - p.header[7] = msgpackArrayFix + byte(n) - p.off = 7 - case n <= 1<<16-1: - binary.BigEndian.PutUint64(p.header, n) // writes 2 bytes - p.header[5] = msgpackArray16 - p.off = 5 - default: // n <= 1<<32-1 - binary.BigEndian.PutUint64(p.header, n) // writes 4 bytes - p.header[3] = msgpackArray32 - p.off = 3 - } -} - -// Read implements io.Reader. It reads from the msgpack-encoded stream. -func (p *payload) Read(b []byte) (n int, err error) { - if p.off < len(p.header) { - // reading header - n = copy(b, p.header[p.off:]) - p.off += n - return n, nil - } - return p.buf.Read(b) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload_test.go deleted file mode 100644 index 6e277bfb..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/payload_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package tracer - -import ( - "bytes" - "io/ioutil" - "strconv" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/tinylib/msgp/msgp" -) - -var fixedTime = now() - -func newSpanList(count int) spanList { - n := count%5 + 1 // max trace size 5 - itoa := map[int]string{0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5"} - list := make([]*span, n) - for i := 0; i < n; i++ { - list[i] = newBasicSpan("span.list." + itoa[i]) - list[i].Start = fixedTime - } - return list -} - -// TestPayloadIntegrity tests that whatever we push into the payload -// allows us to read the same content as would have been encoded by -// the codec. -func TestPayloadIntegrity(t *testing.T) { - assert := assert.New(t) - p := newPayload() - want := new(bytes.Buffer) - for _, n := range []int{10, 1 << 10, 1 << 17} { - t.Run(strconv.Itoa(n), func(t *testing.T) { - p.reset() - lists := make(spanLists, n) - for i := 0; i < n; i++ { - list := newSpanList(i) - lists[i] = list - p.push(list) - } - want.Reset() - err := msgp.Encode(want, lists) - assert.NoError(err) - assert.Equal(want.Len(), p.size()) - assert.Equal(p.itemCount(), n) - - got, err := ioutil.ReadAll(p) - assert.NoError(err) - assert.Equal(want.Bytes(), got) - }) - } -} - -// TestPayloadDecode ensures that whatever we push into the payload can -// be decoded by the codec. -func TestPayloadDecode(t *testing.T) { - assert := assert.New(t) - p := newPayload() - for _, n := range []int{10, 1 << 10} { - t.Run(strconv.Itoa(n), func(t *testing.T) { - p.reset() - for i := 0; i < n; i++ { - p.push(newSpanList(i)) - } - var got spanLists - err := msgp.Decode(p, &got) - assert.NoError(err) - }) - } -} - -func BenchmarkPayloadThroughput(b *testing.B) { - b.Run("10K", benchmarkPayloadThroughput(1)) - b.Run("100K", benchmarkPayloadThroughput(10)) - b.Run("1MB", benchmarkPayloadThroughput(100)) -} - -// benchmarkPayloadThroughput benchmarks the throughput of the payload by subsequently -// pushing a trace containing count spans of approximately 10KB in size each. -func benchmarkPayloadThroughput(count int) func(*testing.B) { - return func(b *testing.B) { - p := newPayload() - s := newBasicSpan("X") - s.Meta["key"] = strings.Repeat("X", 10*1024) - trace := make(spanList, count) - for i := 0; i < count; i++ { - trace[i] = s - } - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - p.reset() - for p.size() < payloadMaxLimit { - p.push(trace) - } - } - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/propagator.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/propagator.go deleted file mode 100644 index 3c7822d4..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/propagator.go +++ /dev/null @@ -1,52 +0,0 @@ -package tracer - -import ( - "errors" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -// Propagator implementations should be able to inject and extract -// SpanContexts into an implementation specific carrier. -type Propagator interface { - // Inject takes the SpanContext and injects it into the carrier. - Inject(context ddtrace.SpanContext, carrier interface{}) error - - // Extract returns the SpanContext from the given carrier. - Extract(carrier interface{}) (ddtrace.SpanContext, error) -} - -// TextMapWriter allows setting key/value pairs of strings on the underlying -// data structure. Carriers implementing TextMapWriter are compatible to be -// used with Datadog's TextMapPropagator. -type TextMapWriter interface { - // Set sets the given key/value pair. - Set(key, val string) -} - -// TextMapReader allows iterating over sets of key/value pairs. Carriers implementing -// TextMapReader are compatible to be used with Datadog's TextMapPropagator. -type TextMapReader interface { - // ForeachKey iterates over all keys that exist in the underlying - // carrier. It takes a callback function which will be called - // using all key/value pairs as arguments. ForeachKey will return - // the first error returned by the handler. - ForeachKey(handler func(key, val string) error) error -} - -var ( - // ErrInvalidCarrier is returned when the carrier provided to the propagator - // does not implemented the correct interfaces. - ErrInvalidCarrier = errors.New("invalid carrier") - - // ErrInvalidSpanContext is returned when the span context found in the - // carrier is not of the expected type. - ErrInvalidSpanContext = errors.New("invalid span context") - - // ErrSpanContextCorrupted is returned when there was a problem parsing - // the information found in the carrier. - ErrSpanContextCorrupted = errors.New("span context corrupted") - - // ErrSpanContextNotFound represents missing information in the given carrier. - ErrSpanContextNotFound = errors.New("span context not found") -) diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/rand.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/rand.go deleted file mode 100644 index 356ae549..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/rand.go +++ /dev/null @@ -1,50 +0,0 @@ -package tracer - -import ( - cryptorand "crypto/rand" - "log" - "math" - "math/big" - "math/rand" - "sync" - "time" -) - -// random holds a thread-safe source of random numbers. -var random *rand.Rand - -func init() { - var seed int64 - n, err := cryptorand.Int(cryptorand.Reader, big.NewInt(math.MaxInt64)) - if err == nil { - seed = n.Int64() - } else { - log.Printf("%scannot generate random seed: %v; using current time\n", errorPrefix, err) - seed = time.Now().UnixNano() - } - random = rand.New(&safeSource{ - source: rand.NewSource(seed), - }) -} - -// safeSource holds a thread-safe implementation of rand.Source64. -type safeSource struct { - source rand.Source - sync.Mutex -} - -func (rs *safeSource) Int63() int64 { - rs.Lock() - n := rs.source.Int63() - rs.Unlock() - - return n -} - -func (rs *safeSource) Uint64() uint64 { return uint64(rs.Int63()) } - -func (rs *safeSource) Seed(seed int64) { - rs.Lock() - rs.Seed(seed) - rs.Unlock() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler.go deleted file mode 100644 index 253af006..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler.go +++ /dev/null @@ -1,72 +0,0 @@ -package tracer - -import ( - "math" - "sync" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -// Sampler is the generic interface of any sampler. It must be safe for concurrent use. -type Sampler interface { - // Sample returns true if the given span should be sampled. - Sample(span Span) bool -} - -// RateSampler is a sampler implementation which randomly selects spans using a -// provided rate. For example, a rate of 0.75 will permit 75% of the spans. -// RateSampler implementations should be safe for concurrent use. -type RateSampler interface { - Sampler - - // Rate returns the current sample rate. - Rate() float64 - - // SetRate sets a new sample rate. - SetRate(rate float64) -} - -// rateSampler samples from a sample rate. -type rateSampler struct { - sync.RWMutex - rate float64 -} - -// NewAllSampler is a short-hand for NewRateSampler(1). It is all-permissive. -func NewAllSampler() RateSampler { return NewRateSampler(1) } - -// NewRateSampler returns an initialized RateSampler with a given sample rate. -func NewRateSampler(rate float64) RateSampler { - return &rateSampler{rate: rate} -} - -// Rate returns the current rate of the sampler. -func (r *rateSampler) Rate() float64 { - r.RLock() - defer r.RUnlock() - return r.rate -} - -// SetRate sets a new sampling rate. -func (r *rateSampler) SetRate(rate float64) { - r.Lock() - r.rate = rate - r.Unlock() -} - -// constants used for the Knuth hashing, same as agent. -const knuthFactor = uint64(1111111111111111111) - -// Sample returns true if the given span should be sampled. -func (r *rateSampler) Sample(spn ddtrace.Span) bool { - s, ok := spn.(*span) - if !ok { - return false - } - r.RLock() - defer r.RUnlock() - if r.rate < 1 { - return s.TraceID*knuthFactor < uint64(r.rate*math.MaxUint64) - } - return true -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler_test.go deleted file mode 100644 index 58e42ede..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/sampler_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package tracer - -import ( - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - - "github.com/stretchr/testify/assert" -) - -func TestRateSampler(t *testing.T) { - assert := assert.New(t) - assert.True(NewRateSampler(1).Sample(newBasicSpan("test"))) - assert.False(NewRateSampler(0).Sample(newBasicSpan("test"))) - assert.False(NewRateSampler(0).Sample(newBasicSpan("test"))) - assert.False(NewRateSampler(1).Sample(internal.NoopSpan{})) -} - -func TestRateSamplerFinishedSpan(t *testing.T) { - rs := NewRateSampler(0.9999) - tracer := newTracer(WithSampler(rs)) // high probability of sampling - span := newBasicSpan("test") - span.finished = true - tracer.sample(span) - if !rs.Sample(span) { - t.Skip("wasn't sampled") // no flaky tests - } - _, ok := span.Metrics[sampleRateMetricKey] - assert.False(t, ok) -} - -func TestRateSamplerSetting(t *testing.T) { - assert := assert.New(t) - rs := NewRateSampler(1) - assert.Equal(float64(1), rs.Rate()) - rs.SetRate(0.5) - assert.Equal(float64(0.5), rs.Rate()) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span.go deleted file mode 100644 index 65cb400e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span.go +++ /dev/null @@ -1,231 +0,0 @@ -//go:generate msgp -unexported -marshal=false -o=span_msgp.go -tests=false - -package tracer - -import ( - "fmt" - "reflect" - "runtime/debug" - "strings" - "sync" - "time" - - "github.com/tinylib/msgp/msgp" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" -) - -type ( - // spanList implements msgp.Encodable on top of a slice of spans. - spanList []*span - - // spanLists implements msgp.Decodable on top of a slice of spanList. - // This type is only used in tests. - spanLists []spanList -) - -var ( - _ ddtrace.Span = (*span)(nil) - _ msgp.Encodable = (*spanList)(nil) - _ msgp.Decodable = (*spanLists)(nil) -) - -// span represents a computation. Callers must call Finish when a span is -// complete to ensure it's submitted. -type span struct { - sync.RWMutex `msg:"-"` - - Name string `msg:"name"` // operation name - Service string `msg:"service"` // service name (i.e. "grpc.server", "http.request") - Resource string `msg:"resource"` // resource name (i.e. "/user?id=123", "SELECT * FROM users") - Type string `msg:"type"` // protocol associated with the span (i.e. "web", "db", "cache") - Start int64 `msg:"start"` // span start time expressed in nanoseconds since epoch - Duration int64 `msg:"duration"` // duration of the span expressed in nanoseconds - Meta map[string]string `msg:"meta,omitempty"` // arbitrary map of metadata - Metrics map[string]float64 `msg:"metrics,omitempty"` // arbitrary map of numeric metrics - SpanID uint64 `msg:"span_id"` // identifier of this span - TraceID uint64 `msg:"trace_id"` // identifier of the root span - ParentID uint64 `msg:"parent_id"` // identifier of the span's direct parent - Error int32 `msg:"error"` // error status of the span; 0 means no errors - - finished bool `msg:"-"` // true if the span has been submitted to a tracer. - context *spanContext `msg:"-"` // span propagation context -} - -// Context yields the SpanContext for this Span. Note that the return -// value of Context() is still valid after a call to Finish(). This is -// called the span context and it is different from Go's context. -func (s *span) Context() ddtrace.SpanContext { return s.context } - -// SetBaggageItem sets a key/value pair as baggage on the span. Baggage items -// are propagated down to descendant spans and injected cross-process. Use with -// care as it adds extra load onto your tracing layer. -func (s *span) SetBaggageItem(key, val string) { - s.context.setBaggageItem(key, val) -} - -// BaggageItem gets the value for a baggage item given its key. Returns the -// empty string if the value isn't found in this Span. -func (s *span) BaggageItem(key string) string { - return s.context.baggageItem(key) -} - -// SetTag adds a set of key/value metadata to the span. -func (s *span) SetTag(key string, value interface{}) { - s.Lock() - defer s.Unlock() - // We don't lock spans when flushing, so we could have a data race when - // modifying a span as it's being flushed. This protects us against that - // race, since spans are marked `finished` before we flush them. - if s.finished { - return - } - if key == ext.Error { - s.setTagError(value) - return - } - if v, ok := value.(string); ok { - s.setTagString(key, v) - return - } - if v, ok := toFloat64(value); ok { - s.setTagNumeric(key, v) - return - } - // not numeric, not a string and not an error, the likelihood of this - // happening is close to zero, but we should nevertheless account for it. - s.Meta[key] = fmt.Sprint(value) -} - -// setTagError sets the error tag. It accounts for various valid scenarios. -// This method is not safe for concurrent use. -func (s *span) setTagError(value interface{}) { - switch v := value.(type) { - case bool: - // bool value as per Opentracing spec. - if !v { - s.Error = 0 - } else { - s.Error = 1 - } - case error: - // if anyone sets an error value as the tag, be nice here - // and provide all the benefits. - s.Error = 1 - s.Meta[ext.ErrorMsg] = v.Error() - s.Meta[ext.ErrorType] = reflect.TypeOf(v).String() - s.Meta[ext.ErrorStack] = string(debug.Stack()) - case nil: - // no error - s.Error = 0 - default: - // in all other cases, let's assume that setting this tag - // is the result of an error. - s.Error = 1 - } -} - -// setTagString sets a string tag. This method is not safe for concurrent use. -func (s *span) setTagString(key, v string) { - switch key { - case ext.ServiceName: - s.Service = v - case ext.ResourceName: - s.Resource = v - case ext.SpanType: - s.Type = v - default: - s.Meta[key] = v - } -} - -// setTagNumeric sets a numeric tag, in our case called a metric. This method -// is not safe for concurrent use. -func (s *span) setTagNumeric(key string, v float64) { - switch key { - case ext.SamplingPriority: - // setting sampling priority per spec - s.Metrics[samplingPriorityKey] = v - s.context.setSamplingPriority(int(v)) - default: - s.Metrics[key] = v - } -} - -// Finish closes this Span (but not its children) providing the duration -// of its part of the tracing session. -func (s *span) Finish(opts ...ddtrace.FinishOption) { - var cfg ddtrace.FinishConfig - for _, fn := range opts { - fn(&cfg) - } - var t int64 - if cfg.FinishTime.IsZero() { - t = now() - } else { - t = cfg.FinishTime.UnixNano() - } - if cfg.Error != nil { - s.SetTag(ext.Error, cfg.Error) - } - s.finish(t) -} - -// SetOperationName sets or changes the operation name. -func (s *span) SetOperationName(operationName string) { - s.Lock() - defer s.Unlock() - - s.Name = operationName -} - -func (s *span) finish(finishTime int64) { - s.Lock() - defer s.Unlock() - // We don't lock spans when flushing, so we could have a data race when - // modifying a span as it's being flushed. This protects us against that - // race, since spans are marked `finished` before we flush them. - if s.finished { - // already finished - return - } - if s.Duration == 0 { - s.Duration = finishTime - s.Start - } - s.finished = true - - if !s.context.sampled { - // not sampled - return - } - s.context.finish() -} - -// String returns a human readable representation of the span. Not for -// production, just debugging. -func (s *span) String() string { - lines := []string{ - fmt.Sprintf("Name: %s", s.Name), - fmt.Sprintf("Service: %s", s.Service), - fmt.Sprintf("Resource: %s", s.Resource), - fmt.Sprintf("TraceID: %d", s.TraceID), - fmt.Sprintf("SpanID: %d", s.SpanID), - fmt.Sprintf("ParentID: %d", s.ParentID), - fmt.Sprintf("Start: %s", time.Unix(0, s.Start)), - fmt.Sprintf("Duration: %s", time.Duration(s.Duration)), - fmt.Sprintf("Error: %d", s.Error), - fmt.Sprintf("Type: %s", s.Type), - "Tags:", - } - s.RLock() - for key, val := range s.Meta { - lines = append(lines, fmt.Sprintf("\t%s:%s", key, val)) - } - for key, val := range s.Metrics { - lines = append(lines, fmt.Sprintf("\t%s:%f", key, val)) - } - s.RUnlock() - return strings.Join(lines, "\n") -} - -const samplingPriorityKey = "_sampling_priority_v1" diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_msgp.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_msgp.go deleted file mode 100644 index 39cac84a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_msgp.go +++ /dev/null @@ -1,448 +0,0 @@ -package tracer - -// NOTE: THIS FILE WAS PRODUCED BY THE -// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) -// DO NOT EDIT - -import ( - "github.com/tinylib/msgp/msgp" -) - -// DecodeMsg implements msgp.Decodable -func (z *span) DecodeMsg(dc *msgp.Reader) (err error) { - var field []byte - _ = field - var zb0001 uint32 - zb0001, err = dc.ReadMapHeader() - if err != nil { - return - } - for zb0001 > 0 { - zb0001-- - field, err = dc.ReadMapKeyPtr() - if err != nil { - return - } - switch msgp.UnsafeString(field) { - case "name": - z.Name, err = dc.ReadString() - if err != nil { - return - } - case "service": - z.Service, err = dc.ReadString() - if err != nil { - return - } - case "resource": - z.Resource, err = dc.ReadString() - if err != nil { - return - } - case "type": - z.Type, err = dc.ReadString() - if err != nil { - return - } - case "start": - z.Start, err = dc.ReadInt64() - if err != nil { - return - } - case "duration": - z.Duration, err = dc.ReadInt64() - if err != nil { - return - } - case "meta": - var zb0002 uint32 - zb0002, err = dc.ReadMapHeader() - if err != nil { - return - } - if z.Meta == nil && zb0002 > 0 { - z.Meta = make(map[string]string, zb0002) - } else if len(z.Meta) > 0 { - for key := range z.Meta { - delete(z.Meta, key) - } - } - for zb0002 > 0 { - zb0002-- - var za0001 string - var za0002 string - za0001, err = dc.ReadString() - if err != nil { - return - } - za0002, err = dc.ReadString() - if err != nil { - return - } - z.Meta[za0001] = za0002 - } - case "metrics": - var zb0003 uint32 - zb0003, err = dc.ReadMapHeader() - if err != nil { - return - } - if z.Metrics == nil && zb0003 > 0 { - z.Metrics = make(map[string]float64, zb0003) - } else if len(z.Metrics) > 0 { - for key := range z.Metrics { - delete(z.Metrics, key) - } - } - for zb0003 > 0 { - zb0003-- - var za0003 string - var za0004 float64 - za0003, err = dc.ReadString() - if err != nil { - return - } - za0004, err = dc.ReadFloat64() - if err != nil { - return - } - z.Metrics[za0003] = za0004 - } - case "span_id": - z.SpanID, err = dc.ReadUint64() - if err != nil { - return - } - case "trace_id": - z.TraceID, err = dc.ReadUint64() - if err != nil { - return - } - case "parent_id": - z.ParentID, err = dc.ReadUint64() - if err != nil { - return - } - case "error": - z.Error, err = dc.ReadInt32() - if err != nil { - return - } - default: - err = dc.Skip() - if err != nil { - return - } - } - } - return -} - -// EncodeMsg implements msgp.Encodable -func (z *span) EncodeMsg(en *msgp.Writer) (err error) { - // map header, size 12 - // write "name" - err = en.Append(0x8c, 0xa4, 0x6e, 0x61, 0x6d, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Name) - if err != nil { - return - } - // write "service" - err = en.Append(0xa7, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Service) - if err != nil { - return - } - // write "resource" - err = en.Append(0xa8, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Resource) - if err != nil { - return - } - // write "type" - err = en.Append(0xa4, 0x74, 0x79, 0x70, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Type) - if err != nil { - return - } - // write "start" - err = en.Append(0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) - if err != nil { - return - } - err = en.WriteInt64(z.Start) - if err != nil { - return - } - // write "duration" - err = en.Append(0xa8, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteInt64(z.Duration) - if err != nil { - return - } - // write "meta" - err = en.Append(0xa4, 0x6d, 0x65, 0x74, 0x61) - if err != nil { - return - } - err = en.WriteMapHeader(uint32(len(z.Meta))) - if err != nil { - return - } - for za0001, za0002 := range z.Meta { - err = en.WriteString(za0001) - if err != nil { - return - } - err = en.WriteString(za0002) - if err != nil { - return - } - } - // write "metrics" - err = en.Append(0xa7, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73) - if err != nil { - return - } - err = en.WriteMapHeader(uint32(len(z.Metrics))) - if err != nil { - return - } - for za0003, za0004 := range z.Metrics { - err = en.WriteString(za0003) - if err != nil { - return - } - err = en.WriteFloat64(za0004) - if err != nil { - return - } - } - // write "span_id" - err = en.Append(0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) - if err != nil { - return - } - err = en.WriteUint64(z.SpanID) - if err != nil { - return - } - // write "trace_id" - err = en.Append(0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) - if err != nil { - return - } - err = en.WriteUint64(z.TraceID) - if err != nil { - return - } - // write "parent_id" - err = en.Append(0xa9, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64) - if err != nil { - return - } - err = en.WriteUint64(z.ParentID) - if err != nil { - return - } - // write "error" - err = en.Append(0xa5, 0x65, 0x72, 0x72, 0x6f, 0x72) - if err != nil { - return - } - err = en.WriteInt32(z.Error) - if err != nil { - return - } - return -} - -// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message -func (z *span) Msgsize() (s int) { - s = 1 + 5 + msgp.StringPrefixSize + len(z.Name) + 8 + msgp.StringPrefixSize + len(z.Service) + 9 + msgp.StringPrefixSize + len(z.Resource) + 5 + msgp.StringPrefixSize + len(z.Type) + 6 + msgp.Int64Size + 9 + msgp.Int64Size + 5 + msgp.MapHeaderSize - if z.Meta != nil { - for za0001, za0002 := range z.Meta { - _ = za0002 - s += msgp.StringPrefixSize + len(za0001) + msgp.StringPrefixSize + len(za0002) - } - } - s += 8 + msgp.MapHeaderSize - if z.Metrics != nil { - for za0003, za0004 := range z.Metrics { - _ = za0004 - s += msgp.StringPrefixSize + len(za0003) + msgp.Float64Size - } - } - s += 8 + msgp.Uint64Size + 9 + msgp.Uint64Size + 10 + msgp.Uint64Size + 6 + msgp.Int32Size - return -} - -// DecodeMsg implements msgp.Decodable -func (z *spanList) DecodeMsg(dc *msgp.Reader) (err error) { - var zb0002 uint32 - zb0002, err = dc.ReadArrayHeader() - if err != nil { - return - } - if cap((*z)) >= int(zb0002) { - (*z) = (*z)[:zb0002] - } else { - (*z) = make(spanList, zb0002) - } - for zb0001 := range *z { - if dc.IsNil() { - err = dc.ReadNil() - if err != nil { - return - } - (*z)[zb0001] = nil - } else { - if (*z)[zb0001] == nil { - (*z)[zb0001] = new(span) - } - err = (*z)[zb0001].DecodeMsg(dc) - if err != nil { - return - } - } - } - return -} - -// EncodeMsg implements msgp.Encodable -func (z spanList) EncodeMsg(en *msgp.Writer) (err error) { - err = en.WriteArrayHeader(uint32(len(z))) - if err != nil { - return - } - for zb0003 := range z { - if z[zb0003] == nil { - err = en.WriteNil() - if err != nil { - return - } - } else { - err = z[zb0003].EncodeMsg(en) - if err != nil { - return - } - } - } - return -} - -// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message -func (z spanList) Msgsize() (s int) { - s = msgp.ArrayHeaderSize - for zb0003 := range z { - if z[zb0003] == nil { - s += msgp.NilSize - } else { - s += z[zb0003].Msgsize() - } - } - return -} - -// DecodeMsg implements msgp.Decodable -func (z *spanLists) DecodeMsg(dc *msgp.Reader) (err error) { - var zb0003 uint32 - zb0003, err = dc.ReadArrayHeader() - if err != nil { - return - } - if cap((*z)) >= int(zb0003) { - (*z) = (*z)[:zb0003] - } else { - (*z) = make(spanLists, zb0003) - } - for zb0001 := range *z { - var zb0004 uint32 - zb0004, err = dc.ReadArrayHeader() - if err != nil { - return - } - if cap((*z)[zb0001]) >= int(zb0004) { - (*z)[zb0001] = ((*z)[zb0001])[:zb0004] - } else { - (*z)[zb0001] = make(spanList, zb0004) - } - for zb0002 := range (*z)[zb0001] { - if dc.IsNil() { - err = dc.ReadNil() - if err != nil { - return - } - (*z)[zb0001][zb0002] = nil - } else { - if (*z)[zb0001][zb0002] == nil { - (*z)[zb0001][zb0002] = new(span) - } - err = (*z)[zb0001][zb0002].DecodeMsg(dc) - if err != nil { - return - } - } - } - } - return -} - -// EncodeMsg implements msgp.Encodable -func (z spanLists) EncodeMsg(en *msgp.Writer) (err error) { - err = en.WriteArrayHeader(uint32(len(z))) - if err != nil { - return - } - for zb0005 := range z { - err = en.WriteArrayHeader(uint32(len(z[zb0005]))) - if err != nil { - return - } - for zb0006 := range z[zb0005] { - if z[zb0005][zb0006] == nil { - err = en.WriteNil() - if err != nil { - return - } - } else { - err = z[zb0005][zb0006].EncodeMsg(en) - if err != nil { - return - } - } - } - } - return -} - -// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message -func (z spanLists) Msgsize() (s int) { - s = msgp.ArrayHeaderSize - for zb0005 := range z { - s += msgp.ArrayHeaderSize - for zb0006 := range z[zb0005] { - if z[zb0005][zb0006] == nil { - s += msgp.NilSize - } else { - s += z[zb0005][zb0006].Msgsize() - } - } - } - return -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_test.go deleted file mode 100644 index d25c7514..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/span_test.go +++ /dev/null @@ -1,348 +0,0 @@ -package tracer - -import ( - "errors" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - - "github.com/stretchr/testify/assert" -) - -// newSpan creates a new span. This is a low-level function, required for testing and advanced usage. -// Most of the time one should prefer the Tracer NewRootSpan or NewChildSpan methods. -func newSpan(name, service, resource string, spanID, traceID, parentID uint64) *span { - span := &span{ - Name: name, - Service: service, - Resource: resource, - Meta: map[string]string{}, - Metrics: map[string]float64{}, - SpanID: spanID, - TraceID: traceID, - ParentID: parentID, - Start: now(), - } - span.context = newSpanContext(span, nil) - return span -} - -// newBasicSpan is the OpenTracing Span constructor -func newBasicSpan(operationName string) *span { - return newSpan(operationName, "", "", 0, 0, 0) -} - -func TestSpanBaggage(t *testing.T) { - assert := assert.New(t) - - span := newBasicSpan("web.request") - span.SetBaggageItem("key", "value") - assert.Equal("value", span.BaggageItem("key")) -} - -func TestSpanContext(t *testing.T) { - assert := assert.New(t) - - span := newBasicSpan("web.request") - assert.NotNil(span.Context()) -} - -func TestSpanOperationName(t *testing.T) { - assert := assert.New(t) - - span := newBasicSpan("web.request") - span.SetOperationName("http.request") - assert.Equal("http.request", span.Name) -} - -func TestSpanFinish(t *testing.T) { - assert := assert.New(t) - wait := time.Millisecond * 2 - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // the finish should set finished and the duration - time.Sleep(wait) - span.Finish() - assert.True(span.Duration > int64(wait)) - assert.True(span.finished) -} - -func TestSpanFinishTwice(t *testing.T) { - assert := assert.New(t) - wait := time.Millisecond * 2 - - tracer, _, stop := startTestTracer() - defer stop() - - assert.Equal(tracer.payload.itemCount(), 0) - - // the finish must be idempotent - span := tracer.newRootSpan("pylons.request", "pylons", "/") - time.Sleep(wait) - span.Finish() - assert.Equal(tracer.payload.itemCount(), 1) - - previousDuration := span.Duration - time.Sleep(wait) - span.Finish() - assert.Equal(previousDuration, span.Duration) - assert.Equal(tracer.payload.itemCount(), 1) -} - -func TestSpanFinishWithTime(t *testing.T) { - assert := assert.New(t) - - finishTime := time.Now().Add(10 * time.Second) - span := newBasicSpan("web.request") - span.Finish(FinishTime(finishTime)) - - duration := finishTime.UnixNano() - span.Start - assert.Equal(duration, span.Duration) -} - -func TestSpanFinishWithError(t *testing.T) { - assert := assert.New(t) - - err := errors.New("test error") - span := newBasicSpan("web.request") - span.Finish(WithError(err)) - - assert.Equal(int32(1), span.Error) - assert.Equal("test error", span.Meta[ext.ErrorMsg]) - assert.Equal("*errors.errorString", span.Meta[ext.ErrorType]) - assert.NotEmpty(span.Meta[ext.ErrorStack]) -} - -func TestSpanSetTag(t *testing.T) { - assert := assert.New(t) - - span := newBasicSpan("web.request") - span.SetTag("component", "tracer") - assert.Equal("tracer", span.Meta["component"]) - - span.SetTag("tagInt", 1234) - assert.Equal(float64(1234), span.Metrics["tagInt"]) - - span.SetTag("tagStruct", struct{ A, B int }{1, 2}) - assert.Equal("{1 2}", span.Meta["tagStruct"]) - - span.SetTag(ext.Error, true) - assert.Equal(int32(1), span.Error) - - span.SetTag(ext.Error, nil) - assert.Equal(int32(0), span.Error) - - span.SetTag(ext.Error, errors.New("abc")) - assert.Equal(int32(1), span.Error) - assert.Equal("abc", span.Meta[ext.ErrorMsg]) - assert.Equal("*errors.errorString", span.Meta[ext.ErrorType]) - assert.NotEmpty(span.Meta[ext.ErrorStack]) - - span.SetTag(ext.Error, "something else") - assert.Equal(int32(1), span.Error) - - span.SetTag(ext.Error, false) - assert.Equal(int32(0), span.Error) - - span.SetTag(ext.SamplingPriority, 2) - assert.Equal(float64(2), span.Metrics[samplingPriorityKey]) -} - -func TestSpanSetDatadogTags(t *testing.T) { - assert := assert.New(t) - - span := newBasicSpan("web.request") - span.SetTag(ext.SpanType, "http") - span.SetTag(ext.ServiceName, "db-cluster") - span.SetTag(ext.ResourceName, "SELECT * FROM users;") - - assert.Equal("http", span.Type) - assert.Equal("db-cluster", span.Service) - assert.Equal("SELECT * FROM users;", span.Resource) -} - -func TestSpanStart(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // a new span sets the Start after the initialization - assert.NotEqual(int64(0), span.Start) -} - -func TestSpanString(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - // don't bother checking the contents, just make sure it works. - assert.NotEqual("", span.String()) - span.Finish() - assert.NotEqual("", span.String()) -} - -func TestSpanSetMetric(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // check the map is properly initialized - span.SetTag("bytes", 1024.42) - assert.Equal(1, len(span.Metrics)) - assert.Equal(1024.42, span.Metrics["bytes"]) - - // operating on a finished span is a no-op - span.Finish() - span.SetTag("finished.test", 1337) - assert.Equal(1, len(span.Metrics)) - assert.Equal(0.0, span.Metrics["finished.test"]) -} - -func TestSpanError(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // check the error is set in the default meta - err := errors.New("Something wrong") - span.SetTag(ext.Error, err) - assert.Equal(int32(1), span.Error) - assert.Equal("Something wrong", span.Meta["error.msg"]) - assert.Equal("*errors.errorString", span.Meta["error.type"]) - assert.NotEqual("", span.Meta["error.stack"]) - - // operating on a finished span is a no-op - span = tracer.newRootSpan("flask.request", "flask", "/") - nMeta := len(span.Meta) - span.Finish() - span.SetTag(ext.Error, err) - assert.Equal(int32(0), span.Error) - assert.Equal(nMeta, len(span.Meta)) - assert.Equal("", span.Meta["error.msg"]) - assert.Equal("", span.Meta["error.type"]) - assert.Equal("", span.Meta["error.stack"]) -} - -func TestSpanError_Typed(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // check the error is set in the default meta - err := &boomError{} - span.SetTag(ext.Error, err) - assert.Equal(int32(1), span.Error) - assert.Equal("boom", span.Meta["error.msg"]) - assert.Equal("*tracer.boomError", span.Meta["error.type"]) - assert.NotEqual("", span.Meta["error.stack"]) -} - -func TestSpanErrorNil(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - // don't set the error if it's nil - nMeta := len(span.Meta) - span.SetTag(ext.Error, nil) - assert.Equal(int32(0), span.Error) - assert.Equal(nMeta, len(span.Meta)) -} - -// Prior to a bug fix, this failed when running `go test -race` -func TestSpanModifyWhileFlushing(t *testing.T) { - tracer, _, stop := startTestTracer() - defer stop() - - done := make(chan struct{}) - go func() { - span := tracer.newRootSpan("pylons.request", "pylons", "/") - span.Finish() - // It doesn't make much sense to update the span after it's been finished, - // but an error in a user's code could lead to this. - span.SetTag("race_test", "true") - span.SetTag("race_test2", 133.7) - span.SetTag("race_test3", 133.7) - span.SetTag(ext.Error, errors.New("t")) - done <- struct{}{} - }() - - for { - select { - case <-done: - return - default: - tracer.forceFlush() - } - } -} - -func TestSpanSamplingPriority(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(withTransport(newDefaultTransport())) - - span := tracer.newRootSpan("my.name", "my.service", "my.resource") - _, ok := span.Metrics[samplingPriorityKey] - assert.False(ok) - - for _, priority := range []int{ - ext.PriorityUserReject, - ext.PriorityAutoReject, - ext.PriorityAutoKeep, - ext.PriorityUserKeep, - 999, // not used, but we should allow it - } { - span.SetTag(ext.SamplingPriority, priority) - v, ok := span.Metrics[samplingPriorityKey] - assert.True(ok) - assert.EqualValues(priority, v) - assert.EqualValues(span.context.priority, v) - assert.True(span.context.hasPriority) - - childSpan := tracer.newChildSpan("my.child", span) - v0, ok0 := span.Metrics[samplingPriorityKey] - v1, ok1 := childSpan.Metrics[samplingPriorityKey] - assert.Equal(ok0, ok1) - assert.Equal(v0, v1) - assert.EqualValues(childSpan.context.priority, v0) - assert.EqualValues(childSpan.context.hasPriority, ok0) - } -} - -func BenchmarkSetTagMetric(b *testing.B) { - span := newBasicSpan("bench.span") - keys := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - - b.ResetTimer() - for i := 0; i < b.N; i++ { - k := string(keys[i%len(keys)]) - span.SetTag(k, float64(12.34)) - } -} - -func BenchmarkSetTagString(b *testing.B) { - span := newBasicSpan("bench.span") - keys := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - - b.ResetTimer() - for i := 0; i < b.N; i++ { - k := string(keys[i%len(keys)]) - span.SetTag(k, "some text") - } -} - -func BenchmarkSetTagField(b *testing.B) { - span := newBasicSpan("bench.span") - keys := []string{ext.ServiceName, ext.ResourceName, ext.SpanType} - - b.ResetTimer() - for i := 0; i < b.N; i++ { - k := keys[i%len(keys)] - span.SetTag(k, "some text") - } -} - -type boomError struct{} - -func (e *boomError) Error() string { return "boom" } diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext.go deleted file mode 100644 index 6758f3ba..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext.go +++ /dev/null @@ -1,193 +0,0 @@ -package tracer - -import ( - "sync" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" -) - -var _ ddtrace.SpanContext = (*spanContext)(nil) - -// SpanContext represents a span state that can propagate to descendant spans -// and across process boundaries. It contains all the information needed to -// spawn a direct descendant of the span that it belongs to. It can be used -// to create distributed tracing by propagating it using the provided interfaces. -type spanContext struct { - // the below group should propagate only locally - - trace *trace // reference to the trace that this span belongs too - span *span // reference to the span that hosts this context - sampled bool // whether this span will be sampled or not - - // the below group should propagate cross-process - - traceID uint64 - spanID uint64 - - mu sync.RWMutex // guards below fields - baggage map[string]string - priority int - hasPriority bool -} - -// newSpanContext creates a new SpanContext to serve as context for the given -// span. If the provided parent is not nil, the context will inherit the trace, -// baggage and other values from it. This method also pushes the span into the -// new context's trace and as a result, it should not be called multiple times -// for the same span. -func newSpanContext(span *span, parent *spanContext) *spanContext { - context := &spanContext{ - traceID: span.TraceID, - spanID: span.SpanID, - sampled: true, - span: span, - } - if v, ok := span.Metrics[samplingPriorityKey]; ok { - context.hasPriority = true - context.priority = int(v) - } - if parent != nil { - context.trace = parent.trace - context.sampled = parent.sampled - context.hasPriority = parent.hasSamplingPriority() - context.priority = parent.samplingPriority() - parent.ForeachBaggageItem(func(k, v string) bool { - context.setBaggageItem(k, v) - return true - }) - } - if context.trace == nil { - context.trace = newTrace() - } - // put span in context's trace - context.trace.push(span) - return context -} - -// SpanID implements ddtrace.SpanContext. -func (c *spanContext) SpanID() uint64 { return c.spanID } - -// TraceID implements ddtrace.SpanContext. -func (c *spanContext) TraceID() uint64 { return c.traceID } - -// ForeachBaggageItem implements ddtrace.SpanContext. -func (c *spanContext) ForeachBaggageItem(handler func(k, v string) bool) { - c.mu.RLock() - defer c.mu.RUnlock() - for k, v := range c.baggage { - if !handler(k, v) { - break - } - } -} - -func (c *spanContext) setSamplingPriority(p int) { - c.mu.Lock() - defer c.mu.Unlock() - c.priority = p - c.hasPriority = true -} - -func (c *spanContext) samplingPriority() int { - c.mu.RLock() - defer c.mu.RUnlock() - return c.priority -} - -func (c *spanContext) hasSamplingPriority() bool { - c.mu.RLock() - defer c.mu.RUnlock() - return c.hasPriority -} - -func (c *spanContext) setBaggageItem(key, val string) { - c.mu.Lock() - defer c.mu.Unlock() - if c.baggage == nil { - c.baggage = make(map[string]string, 1) - } - c.baggage[key] = val -} - -func (c *spanContext) baggageItem(key string) string { - c.mu.RLock() - defer c.mu.RUnlock() - return c.baggage[key] -} - -// finish marks this span as finished in the trace. -func (c *spanContext) finish() { c.trace.ackFinish() } - -// trace holds information about a specific trace. This structure is shared -// between all spans in a trace. -type trace struct { - mu sync.RWMutex // guards below fields - spans []*span // all the spans that are part of this trace - finished int // the number of finished spans - full bool // signifies that the span buffer is full -} - -var ( - // traceStartSize is the initial size of our trace buffer, - // by default we allocate for a handful of spans within the trace, - // reasonable as span is actually way bigger, and avoids re-allocating - // over and over. Could be fine-tuned at runtime. - traceStartSize = 10 - // traceMaxSize is the maximum number of spans we keep in memory. - // This is to avoid memory leaks, if above that value, spans are randomly - // dropped and ignore, resulting in corrupted tracing data, but ensuring - // original program continues to work as expected. - traceMaxSize = int(1e5) -) - -// newTrace creates a new trace using the given callback which will be called -// upon completion of the trace. -func newTrace() *trace { - return &trace{spans: make([]*span, 0, traceStartSize)} -} - -// push pushes a new span into the trace. If the buffer is full, it returns -// a errBufferFull error. -func (t *trace) push(sp *span) { - t.mu.Lock() - defer t.mu.Unlock() - if t.full { - return - } - if len(t.spans) >= traceMaxSize { - // capacity is reached, we will not be able to complete this trace. - t.full = true - t.spans = nil // GC - if tr, ok := internal.GetGlobalTracer().(*tracer); ok { - // we have a tracer we can submit errors too. - tr.pushError(&spanBufferFullError{}) - } - return - } - t.spans = append(t.spans, sp) -} - -// ackFinish aknowledges that another span in the trace has finished, and checks -// if the trace is complete, in which case it calls the onFinish function. -func (t *trace) ackFinish() { - t.mu.Lock() - defer t.mu.Unlock() - if t.full { - // capacity has been reached, the buffer is no longer tracking - // all the spans in the trace, so the below conditions will not - // be accurate and would trigger a pre-mature flush, exposing us - // to a race condition where spans can be modified while flushing. - return - } - t.finished++ - if len(t.spans) != t.finished { - return - } - if tr, ok := internal.GetGlobalTracer().(*tracer); ok { - // we have a tracer that can receive completed traces. - tr.pushTrace(t.spans) - } - t.spans = nil - t.finished = 0 // important, because a buffer can be used for several flushes -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext_test.go deleted file mode 100644 index 3670799a..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/spancontext_test.go +++ /dev/null @@ -1,285 +0,0 @@ -package tracer - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func setupteardown(start, max int) func() { - oldStartSize := traceStartSize - oldMaxSize := traceMaxSize - traceStartSize = start - traceMaxSize = max - return func() { - traceStartSize = oldStartSize - traceMaxSize = oldMaxSize - } -} - -func TestNewSpanContextPushError(t *testing.T) { - defer setupteardown(2, 2)() - - tracer, _, stop := startTestTracer() - defer stop() - parent := newBasicSpan("test1") // 1st span in trace - parent.context.trace.push(newBasicSpan("test2")) // 2nd span in trace - child := newSpan("child", "", "", 0, 0, 0) - - // new context having a parent with a trace of two spans. - // One more should overflow. - child.context = newSpanContext(child, parent.context) - - select { - case err := <-tracer.errorBuffer: - assert.Equal(t, &spanBufferFullError{}, err) - default: - t.Fatal("no error pushed") - } -} - -func TestSpanTracePushOne(t *testing.T) { - defer setupteardown(2, 5)() - - assert := assert.New(t) - - tracer, transport, stop := startTestTracer() - defer stop() - - traceID := random.Uint64() - root := newSpan("name1", "a-service", "a-resource", traceID, traceID, 0) - trace := root.context.trace - - assert.Len(tracer.errorBuffer, 0) - assert.Len(trace.spans, 1) - assert.Equal(root, trace.spans[0], "the span is the one pushed before") - - root.Finish() - tracer.forceFlush() - - select { - case err := <-tracer.errorBuffer: - assert.Fail("unexpected error:", err.Error()) - t.Logf("trace: %v", trace) - default: - traces := transport.Traces() - assert.Len(tracer.errorBuffer, 0) - assert.Len(traces, 1) - trc := traces[0] - assert.Len(trc, 1, "there was a trace in the channel") - comparePayloadSpans(t, root, trc[0]) - assert.Equal(0, len(trace.spans), "no more spans in the trace") - } -} - -func TestSpanTracePushNoFinish(t *testing.T) { - defer setupteardown(2, 5)() - - assert := assert.New(t) - - tracer, _, stop := startTestTracer() - defer stop() - - buffer := newTrace() - assert.NotNil(buffer) - assert.Len(buffer.spans, 0) - - traceID := random.Uint64() - root := newSpan("name1", "a-service", "a-resource", traceID, traceID, 0) - root.context.trace = buffer - - buffer.push(root) - assert.Len(tracer.errorBuffer, 0) - assert.Len(buffer.spans, 1, "there is one span in the buffer") - assert.Equal(root, buffer.spans[0], "the span is the one pushed before") - - select { - case err := <-tracer.errorBuffer: - assert.Fail("unexpected error:", err.Error()) - t.Logf("buffer: %v", buffer) - case <-time.After(time.Second / 10): - t.Logf("expected timeout, nothing should show up in buffer as the trace is not finished") - } -} - -func TestSpanTracePushSeveral(t *testing.T) { - defer setupteardown(2, 5)() - - assert := assert.New(t) - - tracer, transport, stop := startTestTracer() - defer stop() - buffer := newTrace() - assert.NotNil(buffer) - assert.Len(buffer.spans, 0) - - traceID := random.Uint64() - root := newSpan("name1", "a-service", "a-resource", traceID, traceID, 0) - span2 := newSpan("name2", "a-service", "a-resource", random.Uint64(), traceID, root.SpanID) - span3 := newSpan("name3", "a-service", "a-resource", random.Uint64(), traceID, root.SpanID) - span3a := newSpan("name3", "a-service", "a-resource", random.Uint64(), traceID, span3.SpanID) - - trace := []*span{root, span2, span3, span3a} - - for i, span := range trace { - span.context.trace = buffer - buffer.push(span) - assert.Len(tracer.errorBuffer, 0) - assert.Len(buffer.spans, i+1, "there is one more span in the buffer") - assert.Equal(span, buffer.spans[i], "the span is the one pushed before") - } - - for _, span := range trace { - span.Finish() - } - tracer.forceFlush() - - select { - case err := <-tracer.errorBuffer: - assert.Fail("unexpected error:", err.Error()) - default: - traces := transport.Traces() - assert.Len(traces, 1) - trace := traces[0] - assert.Len(trace, 4, "there was one trace with the right number of spans in the channel") - for _, span := range trace { - assert.Contains(trace, span, "the trace contains the spans") - } - } -} - -func TestNewSpanContext(t *testing.T) { - t.Run("basic", func(t *testing.T) { - span := &span{ - TraceID: 1, - SpanID: 2, - ParentID: 3, - } - ctx := newSpanContext(span, nil) - assert := assert.New(t) - assert.Equal(ctx.traceID, span.TraceID) - assert.Equal(ctx.spanID, span.SpanID) - assert.Equal(ctx.priority, 0) - assert.False(ctx.hasPriority) - assert.NotNil(ctx.trace) - assert.Contains(ctx.trace.spans, span) - }) - - t.Run("priority", func(t *testing.T) { - span := &span{ - TraceID: 1, - SpanID: 2, - ParentID: 3, - Metrics: map[string]float64{samplingPriorityKey: 1}, - } - ctx := newSpanContext(span, nil) - assert := assert.New(t) - assert.Equal(ctx.traceID, span.TraceID) - assert.Equal(ctx.spanID, span.SpanID) - assert.Equal(ctx.TraceID(), span.TraceID) - assert.Equal(ctx.SpanID(), span.SpanID) - assert.Equal(ctx.priority, 1) - assert.True(ctx.hasPriority) - assert.NotNil(ctx.trace) - assert.Contains(ctx.trace.spans, span) - }) -} - -func TestSpanContextParent(t *testing.T) { - s := &span{ - TraceID: 1, - SpanID: 2, - ParentID: 3, - } - for name, parentCtx := range map[string]*spanContext{ - "basic": &spanContext{ - sampled: false, - baggage: map[string]string{"A": "A", "B": "B"}, - trace: newTrace(), - }, - "nil-trace": &spanContext{ - sampled: false, - }, - "priority": &spanContext{ - sampled: true, - baggage: map[string]string{"A": "A", "B": "B"}, - trace: &trace{spans: []*span{newBasicSpan("abc")}}, - hasPriority: true, - priority: 2, - }, - } { - t.Run(name, func(t *testing.T) { - ctx := newSpanContext(s, parentCtx) - assert := assert.New(t) - assert.Equal(ctx.traceID, s.TraceID) - assert.Equal(ctx.spanID, s.SpanID) - if parentCtx.trace != nil { - assert.Equal(len(ctx.trace.spans), len(parentCtx.trace.spans)) - } - assert.NotNil(ctx.trace) - assert.Contains(ctx.trace.spans, s) - assert.Equal(ctx.hasPriority, parentCtx.hasPriority) - assert.Equal(ctx.priority, parentCtx.priority) - assert.Equal(ctx.sampled, parentCtx.sampled) - assert.Equal(ctx.baggage, parentCtx.baggage) - }) - } -} - -func TestSpanContextPushFull(t *testing.T) { - oldMaxSize := traceMaxSize - defer func() { - traceMaxSize = oldMaxSize - }() - traceMaxSize = 2 - tracer, _, stop := startTestTracer() - defer stop() - - span1 := newBasicSpan("span1") - span2 := newBasicSpan("span2") - span3 := newBasicSpan("span3") - - buffer := newTrace() - assert := assert.New(t) - buffer.push(span1) - assert.Len(tracer.errorBuffer, 0) - buffer.push(span2) - assert.Len(tracer.errorBuffer, 0) - buffer.push(span3) - assert.Len(tracer.errorBuffer, 1) - err := <-tracer.errorBuffer - assert.Equal(&spanBufferFullError{}, err) -} - -func TestSpanContextBaggage(t *testing.T) { - assert := assert.New(t) - - var ctx spanContext - ctx.setBaggageItem("key", "value") - assert.Equal("value", ctx.baggage["key"]) -} - -func TestSpanContextIterator(t *testing.T) { - assert := assert.New(t) - - got := make(map[string]string) - ctx := spanContext{baggage: map[string]string{"key": "value"}} - ctx.ForeachBaggageItem(func(k, v string) bool { - got[k] = v - return true - }) - - assert.Len(got, 1) - assert.Equal("value", got["key"]) -} - -func TestSpanContextIteratorBreak(t *testing.T) { - got := make(map[string]string) - ctx := spanContext{baggage: map[string]string{"key": "value"}} - ctx.ForeachBaggageItem(func(k, v string) bool { - return false - }) - - assert.Len(t, got, 0) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap.go deleted file mode 100644 index 30c4c78e..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap.go +++ /dev/null @@ -1,197 +0,0 @@ -package tracer - -import ( - "net/http" - "strconv" - "strings" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) - -// HTTPHeadersCarrier wraps an http.Header as a TextMapWriter and TextMapReader, allowing -// it to be used using the provided Propagator implementation. -type HTTPHeadersCarrier http.Header - -var _ TextMapWriter = (*HTTPHeadersCarrier)(nil) -var _ TextMapReader = (*HTTPHeadersCarrier)(nil) - -// Set implements TextMapWriter. -func (c HTTPHeadersCarrier) Set(key, val string) { - http.Header(c).Set(key, val) -} - -// ForeachKey implements TextMapReader. -func (c HTTPHeadersCarrier) ForeachKey(handler func(key, val string) error) error { - for k, vals := range c { - for _, v := range vals { - if err := handler(k, v); err != nil { - return err - } - } - } - return nil -} - -// TextMapCarrier allows the use of a regular map[string]string as both TextMapWriter -// and TextMapReader, making it compatible with the provided Propagator. -type TextMapCarrier map[string]string - -var _ TextMapWriter = (*TextMapCarrier)(nil) -var _ TextMapReader = (*TextMapCarrier)(nil) - -// Set implements TextMapWriter. -func (c TextMapCarrier) Set(key, val string) { - c[key] = val -} - -// ForeachKey conforms to the TextMapReader interface. -func (c TextMapCarrier) ForeachKey(handler func(key, val string) error) error { - for k, v := range c { - if err := handler(k, v); err != nil { - return err - } - } - return nil -} - -const ( - // DefaultBaggageHeaderPrefix specifies the prefix that will be used in - // HTTP headers or text maps to prefix baggage keys. - DefaultBaggageHeaderPrefix = "ot-baggage-" - - // DefaultTraceIDHeader specifies the key that will be used in HTTP headers - // or text maps to store the trace ID. - DefaultTraceIDHeader = "x-datadog-trace-id" - - // DefaultParentIDHeader specifies the key that will be used in HTTP headers - // or text maps to store the parent ID. - DefaultParentIDHeader = "x-datadog-parent-id" - - // DefaultPriorityHeader specifies the key that will be used in HTTP headers - // or text maps to store the sampling priority value. - DefaultPriorityHeader = "x-datadog-sampling-priority" -) - -// PropagatorConfig defines the configuration for initializing a propagator. -type PropagatorConfig struct { - // BaggagePrefix specifies the prefix that will be used to store baggage - // items in a map. It defaults to DefaultBaggageHeaderPrefix. - BaggagePrefix string - - // TraceHeader specifies the map key that will be used to store the trace ID. - // It defaults to DefaultTraceIDHeader. - TraceHeader string - - // ParentHeader specifies the map key that will be used to store the parent ID. - // It defaults to DefaultParentIDHeader. - ParentHeader string - - // PriorityHeader specifies the map key that will be used to store the sampling priority. - // It deafults to DefaultPriorityHeader. - PriorityHeader string -} - -// NewPropagator returns a new propagator which uses TextMap to inject -// and extract values. It propagates trace and span IDs and baggage. -// To use the defaults, nil may be provided in place of the config. -func NewPropagator(cfg *PropagatorConfig) Propagator { - if cfg == nil { - cfg = new(PropagatorConfig) - } - if cfg.BaggagePrefix == "" { - cfg.BaggagePrefix = DefaultBaggageHeaderPrefix - } - if cfg.TraceHeader == "" { - cfg.TraceHeader = DefaultTraceIDHeader - } - if cfg.ParentHeader == "" { - cfg.ParentHeader = DefaultParentIDHeader - } - if cfg.PriorityHeader == "" { - cfg.PriorityHeader = DefaultPriorityHeader - } - return &propagator{cfg} -} - -// propagator implements a propagator which uses TextMap internally. -// It propagates the trace and span IDs, as well as the baggage from the -// context. -type propagator struct{ cfg *PropagatorConfig } - -// Inject defines the Propagator to propagate SpanContext data -// out of the current process. The implementation propagates the -// TraceID and the current active SpanID, as well as the Span baggage. -func (p *propagator) Inject(spanCtx ddtrace.SpanContext, carrier interface{}) error { - switch v := carrier.(type) { - case TextMapWriter: - return p.injectTextMap(spanCtx, v) - default: - return ErrInvalidCarrier - } -} - -func (p *propagator) injectTextMap(spanCtx ddtrace.SpanContext, writer TextMapWriter) error { - ctx, ok := spanCtx.(*spanContext) - if !ok || ctx.traceID == 0 || ctx.spanID == 0 { - return ErrInvalidSpanContext - } - // propagate the TraceID and the current active SpanID - writer.Set(p.cfg.TraceHeader, strconv.FormatUint(ctx.traceID, 10)) - writer.Set(p.cfg.ParentHeader, strconv.FormatUint(ctx.spanID, 10)) - if ctx.hasSamplingPriority() { - writer.Set(p.cfg.PriorityHeader, strconv.Itoa(ctx.samplingPriority())) - } - // propagate OpenTracing baggage - for k, v := range ctx.baggage { - writer.Set(p.cfg.BaggagePrefix+k, v) - } - return nil -} - -// Extract implements Propagator. -func (p *propagator) Extract(carrier interface{}) (ddtrace.SpanContext, error) { - switch v := carrier.(type) { - case TextMapReader: - return p.extractTextMap(v) - default: - return nil, ErrInvalidCarrier - } -} - -func (p *propagator) extractTextMap(reader TextMapReader) (ddtrace.SpanContext, error) { - var ctx spanContext - err := reader.ForeachKey(func(k, v string) error { - var err error - key := strings.ToLower(k) - switch key { - case p.cfg.TraceHeader: - ctx.traceID, err = parseUint64(v) - if err != nil { - return ErrSpanContextCorrupted - } - case p.cfg.ParentHeader: - ctx.spanID, err = parseUint64(v) - if err != nil { - return ErrSpanContextCorrupted - } - case p.cfg.PriorityHeader: - ctx.priority, err = strconv.Atoi(v) - if err != nil { - return ErrSpanContextCorrupted - } - ctx.hasPriority = true - default: - if strings.HasPrefix(key, p.cfg.BaggagePrefix) { - ctx.setBaggageItem(strings.TrimPrefix(key, p.cfg.BaggagePrefix), v) - } - } - return nil - }) - if err != nil { - return nil, err - } - if ctx.traceID == 0 || ctx.spanID == 0 { - return nil, ErrSpanContextNotFound - } - return &ctx, nil -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap_test.go deleted file mode 100644 index 18564623..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/textmap_test.go +++ /dev/null @@ -1,170 +0,0 @@ -package tracer - -import ( - "errors" - "net/http" - "strconv" - "testing" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - - "github.com/stretchr/testify/assert" -) - -func TestHTTPHeadersCarrierSet(t *testing.T) { - h := http.Header{} - c := HTTPHeadersCarrier(h) - c.Set("A", "x") - assert.Equal(t, "x", h.Get("A")) -} - -func TestHTTPHeadersCarrierForeachKey(t *testing.T) { - h := http.Header{} - h.Add("A", "x") - h.Add("B", "y") - got := map[string]string{} - err := HTTPHeadersCarrier(h).ForeachKey(func(k, v string) error { - got[k] = v - return nil - }) - assert := assert.New(t) - assert.Nil(err) - assert.Equal("x", h.Get("A")) - assert.Equal("y", h.Get("B")) -} - -func TestHTTPHeadersCarrierForeachKeyError(t *testing.T) { - want := errors.New("random error") - h := http.Header{} - h.Add("A", "x") - h.Add("B", "y") - got := HTTPHeadersCarrier(h).ForeachKey(func(k, v string) error { - if k == "B" { - return want - } - return nil - }) - assert.Equal(t, want, got) -} - -func TestTextMapCarrierSet(t *testing.T) { - m := map[string]string{} - c := TextMapCarrier(m) - c.Set("a", "b") - assert.Equal(t, "b", m["a"]) -} - -func TestTextMapCarrierForeachKey(t *testing.T) { - want := map[string]string{"A": "x", "B": "y"} - got := map[string]string{} - err := TextMapCarrier(want).ForeachKey(func(k, v string) error { - got[k] = v - return nil - }) - assert := assert.New(t) - assert.Nil(err) - assert.Equal(got, want) -} - -func TestTextMapCarrierForeachKeyError(t *testing.T) { - m := map[string]string{"A": "x", "B": "y"} - want := errors.New("random error") - got := TextMapCarrier(m).ForeachKey(func(k, v string) error { - return want - }) - assert.Equal(t, got, want) -} - -func TestTextMapPropagatorErrors(t *testing.T) { - propagator := NewPropagator(nil) - assert := assert.New(t) - - err := propagator.Inject(&spanContext{}, 2) - assert.Equal(ErrInvalidCarrier, err) - err = propagator.Inject(internal.NoopSpanContext{}, TextMapCarrier(map[string]string{})) - assert.Equal(ErrInvalidSpanContext, err) - err = propagator.Inject(&spanContext{}, TextMapCarrier(map[string]string{})) - assert.Equal(ErrInvalidSpanContext, err) // no traceID and spanID - err = propagator.Inject(&spanContext{traceID: 1}, TextMapCarrier(map[string]string{})) - assert.Equal(ErrInvalidSpanContext, err) // no spanID - - _, err = propagator.Extract(2) - assert.Equal(ErrInvalidCarrier, err) - - _, err = propagator.Extract(TextMapCarrier(map[string]string{ - DefaultTraceIDHeader: "1", - DefaultParentIDHeader: "A", - })) - assert.Equal(ErrSpanContextCorrupted, err) - - _, err = propagator.Extract(TextMapCarrier(map[string]string{ - DefaultTraceIDHeader: "A", - DefaultParentIDHeader: "2", - })) - assert.Equal(ErrSpanContextCorrupted, err) - - _, err = propagator.Extract(TextMapCarrier(map[string]string{ - DefaultTraceIDHeader: "0", - DefaultParentIDHeader: "0", - })) - assert.Equal(ErrSpanContextNotFound, err) -} - -func TestTextMapPropagatorInjectHeader(t *testing.T) { - assert := assert.New(t) - - propagator := NewPropagator(&PropagatorConfig{ - BaggagePrefix: "bg-", - TraceHeader: "tid", - ParentHeader: "pid", - }) - tracer := newTracer(WithPropagator(propagator)) - - root := tracer.StartSpan("web.request").(*span) - root.SetBaggageItem("item", "x") - root.SetTag(ext.SamplingPriority, 0) - ctx := root.Context() - headers := http.Header{} - - carrier := HTTPHeadersCarrier(headers) - err := tracer.Inject(ctx, carrier) - assert.Nil(err) - - tid := strconv.FormatUint(root.TraceID, 10) - pid := strconv.FormatUint(root.SpanID, 10) - - assert.Equal(headers.Get("tid"), tid) - assert.Equal(headers.Get("pid"), pid) - assert.Equal(headers.Get("bg-item"), "x") - assert.Equal(headers.Get(DefaultPriorityHeader), "0") -} - -func TestTextMapPropagatorInjectExtract(t *testing.T) { - propagator := NewPropagator(&PropagatorConfig{ - BaggagePrefix: "bg-", - TraceHeader: "tid", - ParentHeader: "pid", - }) - tracer := newTracer(WithPropagator(propagator)) - root := tracer.StartSpan("web.request").(*span) - root.SetTag(ext.SamplingPriority, -1) - root.SetBaggageItem("item", "x") - ctx := root.Context().(*spanContext) - headers := TextMapCarrier(map[string]string{}) - err := tracer.Inject(ctx, headers) - - assert := assert.New(t) - assert.Nil(err) - - sctx, err := tracer.Extract(headers) - assert.Nil(err) - - xctx, ok := sctx.(*spanContext) - assert.True(ok) - assert.Equal(xctx.traceID, ctx.traceID) - assert.Equal(xctx.spanID, ctx.spanID) - assert.Equal(xctx.baggage, ctx.baggage) - assert.Equal(xctx.priority, ctx.priority) - assert.Equal(xctx.hasPriority, ctx.hasPriority) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time.go deleted file mode 100644 index 459161c7..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build !windows - -package tracer - -import "time" - -// now returns current UTC time in nanos. -func now() int64 { - return time.Now().UTC().UnixNano() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows.go deleted file mode 100644 index f9c56aeb..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows.go +++ /dev/null @@ -1,35 +0,0 @@ -package tracer - -import ( - "log" - "time" - - "golang.org/x/sys/windows" -) - -// This method is more precise than the go1.8 time.Now on Windows -// See https://msdn.microsoft.com/en-us/library/windows/desktop/hh706895(v=vs.85).aspx -// It is however ~10x slower and requires Windows 8+. -func highPrecisionNow() int64 { - var ft windows.Filetime - windows.GetSystemTimePreciseAsFileTime(&ft) - return ft.Nanoseconds() -} - -func lowPrecisionNow() int64 { - return time.Now().UTC().UnixNano() -} - -var now func() int64 - -// If GetSystemTimePreciseAsFileTime is not available we default to the less -// precise implementation based on time.Now() -func init() { - if err := windows.LoadGetSystemTimePreciseAsFileTime(); err != nil { - log.Printf("Unable to load high precison timer, defaulting to time.Now()") - now = lowPrecisionNow - } else { - log.Printf("Using high precision timer") - now = highPrecisionNow - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows_test.go deleted file mode 100644 index 6ffc80ae..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/time_windows_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tracer - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func BenchmarkNormalTimeNow(b *testing.B) { - for n := 0; n < b.N; n++ { - lowPrecisionNow() - } -} - -func BenchmarkHighPrecisionTime(b *testing.B) { - for n := 0; n < b.N; n++ { - highPrecisionNow() - } -} - -func TestHighPrecisionTimerIsMoreAccurate(t *testing.T) { - startLow := lowPrecisionNow() - startHigh := highPrecisionNow() - stopHigh := highPrecisionNow() - for stopHigh == startHigh { - stopHigh = highPrecisionNow() - } - stopLow := lowPrecisionNow() - assert.Equal(t, int64(0), stopLow-startLow) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer.go deleted file mode 100644 index 6ef9d4db..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer.go +++ /dev/null @@ -1,370 +0,0 @@ -package tracer - -import ( - "errors" - "log" - "os" - "strconv" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" -) - -var _ ddtrace.Tracer = (*tracer)(nil) - -// tracer creates, buffers and submits Spans which are used to time blocks of -// computation. They are accumulated and streamed into an internal payload, -// which is flushed to the agent whenever its size exceeds a specific threshold -// or when a certain interval of time has passed, whichever happens first. -// -// tracer operates based on a worker loop which responds to various request -// channels. It additionally holds two buffers which accumulates error and trace -// queues to be processed by the payload encoder. -type tracer struct { - *config - *payload - - flushAllReq chan chan<- struct{} - flushTracesReq chan struct{} - flushErrorsReq chan struct{} - exitReq chan struct{} - - payloadQueue chan []*span - errorBuffer chan error - - // stopped is a channel that will be closed when the worker has exited. - stopped chan struct{} - - // syncPush is used for testing. When non-nil, it causes pushTrace to become - // a synchronous (blocking) operation, meaning that it will only return after - // the trace has been fully processed and added onto the payload. - syncPush chan struct{} -} - -const ( - // flushInterval is the interval at which the payload contents will be flushed - // to the transport. - flushInterval = 2 * time.Second - - // payloadMaxLimit is the maximum payload size allowed and should indicate the - // maximum size of the package that the agent can receive. - payloadMaxLimit = 9.5 * 1024 * 1024 // 9.5 MB - - // payloadSizeLimit specifies the maximum allowed size of the payload before - // it will trigger a flush to the transport. - payloadSizeLimit = payloadMaxLimit / 2 -) - -// Start starts the tracer with the given set of options. It will stop and replace -// any running tracer, meaning that calling it several times will result in a restart -// of the tracer by replacing the current instance with a new one. -func Start(opts ...StartOption) { - if internal.Testing { - return // mock tracer active - } - internal.SetGlobalTracer(newTracer(opts...)) -} - -// Stop stops the started tracer. Subsequent calls are valid but become no-op. -func Stop() { - internal.SetGlobalTracer(&internal.NoopTracer{}) -} - -// Span is an alias for ddtrace.Span. It is here to allow godoc to group methods returning -// ddtrace.Span. It is recommended and is considered more correct to refer to this type as -// ddtrace.Span instead. -type Span = ddtrace.Span - -// StartSpan starts a new span with the given operation name and set of options. -// If the tracer is not started, calling this function is a no-op. -func StartSpan(operationName string, opts ...StartSpanOption) Span { - return internal.GetGlobalTracer().StartSpan(operationName, opts...) -} - -// Extract extracts a SpanContext from the carrier. The carrier is expected -// to implement TextMapReader, otherwise an error is returned. -// If the tracer is not started, calling this function is a no-op. -func Extract(carrier interface{}) (ddtrace.SpanContext, error) { - return internal.GetGlobalTracer().Extract(carrier) -} - -// Inject injects the given SpanContext into the carrier. The carrier is -// expected to implement TextMapWriter, otherwise an error is returned. -// If the tracer is not started, calling this function is a no-op. -func Inject(ctx ddtrace.SpanContext, carrier interface{}) error { - return internal.GetGlobalTracer().Inject(ctx, carrier) -} - -const ( - // payloadQueueSize is the buffer size of the trace channel. - payloadQueueSize = 1000 - - // errorBufferSize is the buffer size of the error channel. - errorBufferSize = 200 -) - -func newTracer(opts ...StartOption) *tracer { - c := new(config) - defaults(c) - for _, fn := range opts { - fn(c) - } - if c.transport == nil { - c.transport = newTransport(c.agentAddr) - } - if c.propagator == nil { - c.propagator = NewPropagator(nil) - } - t := &tracer{ - config: c, - payload: newPayload(), - flushAllReq: make(chan chan<- struct{}), - flushTracesReq: make(chan struct{}, 1), - flushErrorsReq: make(chan struct{}, 1), - exitReq: make(chan struct{}), - payloadQueue: make(chan []*span, payloadQueueSize), - errorBuffer: make(chan error, errorBufferSize), - stopped: make(chan struct{}), - } - - go t.worker() - - return t -} - -// worker receives finished traces to be added into the payload, as well -// as periodically flushes traces to the transport. -func (t *tracer) worker() { - defer close(t.stopped) - ticker := time.NewTicker(flushInterval) - defer ticker.Stop() - - for { - select { - case trace := <-t.payloadQueue: - t.pushPayload(trace) - - case <-ticker.C: - t.flush() - - case done := <-t.flushAllReq: - t.flush() - done <- struct{}{} - - case <-t.flushTracesReq: - t.flushTraces() - - case <-t.flushErrorsReq: - t.flushErrors() - - case <-t.exitReq: - t.flush() - return - } - } -} - -func (t *tracer) pushTrace(trace []*span) { - select { - case <-t.stopped: - return - default: - } - select { - case t.payloadQueue <- trace: - default: - t.pushError(&dataLossError{ - context: errors.New("payload queue full, dropping trace"), - count: len(trace), - }) - } - if t.syncPush != nil { - // only in tests - <-t.syncPush - } -} - -func (t *tracer) pushError(err error) { - select { - case <-t.stopped: - return - default: - } - if len(t.errorBuffer) >= cap(t.errorBuffer)/2 { // starts being full, anticipate, try and flush soon - select { - case t.flushErrorsReq <- struct{}{}: - default: // a flush was already requested, skip - } - } - select { - case t.errorBuffer <- err: - default: - // OK, if we get this, our error error buffer is full, - // we can assume it is filled with meaningful messages which - // are going to be logged and hopefully read, nothing better - // we can do, blocking would make things worse. - } -} - -// StartSpan creates, starts, and returns a new Span with the given `operationName`. -func (t *tracer) StartSpan(operationName string, options ...ddtrace.StartSpanOption) ddtrace.Span { - var opts ddtrace.StartSpanConfig - for _, fn := range options { - fn(&opts) - } - var startTime int64 - if opts.StartTime.IsZero() { - startTime = now() - } else { - startTime = opts.StartTime.UnixNano() - } - var context *spanContext - if opts.Parent != nil { - if ctx, ok := opts.Parent.(*spanContext); ok { - context = ctx - } - } - id := random.Uint64() - // span defaults - span := &span{ - Name: operationName, - Service: t.config.serviceName, - Resource: operationName, - Meta: map[string]string{}, - Metrics: map[string]float64{}, - SpanID: id, - TraceID: id, - ParentID: 0, - Start: startTime, - } - if context != nil { - // this is a child span - span.TraceID = context.traceID - span.ParentID = context.spanID - if context.hasSamplingPriority() { - span.Metrics[samplingPriorityKey] = float64(context.samplingPriority()) - } - if context.span != nil { - context.span.RLock() - span.Service = context.span.Service - context.span.RUnlock() - } - } - span.context = newSpanContext(span, context) - if context == nil || context.span == nil { - // this is either a global root span or a process-level root span - span.SetTag(ext.Pid, strconv.Itoa(os.Getpid())) - t.sample(span) - } - // add tags from options - for k, v := range opts.Tags { - span.SetTag(k, v) - } - // add global tags - for k, v := range t.config.globalTags { - span.SetTag(k, v) - } - return span -} - -// Stop stops the tracer. -func (t *tracer) Stop() { - select { - case <-t.stopped: - return - default: - t.exitReq <- struct{}{} - <-t.stopped - } -} - -// Inject uses the configured or default TextMap Propagator. -func (t *tracer) Inject(ctx ddtrace.SpanContext, carrier interface{}) error { - return t.config.propagator.Inject(ctx, carrier) -} - -// Extract uses the configured or default TextMap Propagator. -func (t *tracer) Extract(carrier interface{}) (ddtrace.SpanContext, error) { - return t.config.propagator.Extract(carrier) -} - -// flushTraces will push any currently buffered traces to the server. -func (t *tracer) flushTraces() { - if t.payload.itemCount() == 0 { - return - } - size, count := t.payload.size(), t.payload.itemCount() - if t.config.debug { - log.Printf("Sending payload: size: %d traces: %d\n", size, count) - } - err := t.config.transport.send(t.payload) - if err != nil { - t.pushError(&dataLossError{context: err, count: count}) - } - t.payload.reset() -} - -// flushErrors will process log messages that were queued -func (t *tracer) flushErrors() { - logErrors(t.errorBuffer) -} - -func (t *tracer) flush() { - t.flushTraces() - t.flushErrors() -} - -// forceFlush forces a flush of data (traces and services) to the agent. -// Flushes are done by a background task on a regular basis, so you never -// need to call this manually, mostly useful for testing and debugging. -func (t *tracer) forceFlush() { - done := make(chan struct{}) - t.flushAllReq <- done - <-done -} - -// pushPayload pushes the trace onto the payload. If the payload becomes -// larger than the threshold as a result, it sends a flush request. -func (t *tracer) pushPayload(trace []*span) { - if err := t.payload.push(trace); err != nil { - t.pushError(&traceEncodingError{context: err}) - } - if t.payload.size() > payloadSizeLimit { - // getting large - select { - case t.flushTracesReq <- struct{}{}: - default: - // flush already queued - } - } - if t.syncPush != nil { - // only in tests - t.syncPush <- struct{}{} - } -} - -// sampleRateMetricKey is the metric key holding the applied sample rate. Has to be the same as the Agent. -const sampleRateMetricKey = "_sample_rate" - -// Sample samples a span with the internal sampler. -func (t *tracer) sample(span *span) { - sampler := t.config.sampler - sampled := sampler.Sample(span) - span.context.sampled = sampled - if !sampled { - return - } - if rs, ok := sampler.(RateSampler); ok && rs.Rate() < 1 { - // the span was sampled using a rate sampler which wasn't all permissive, - // so we make note of the sampling rate. - span.Lock() - defer span.Unlock() - if span.finished { - // we don't touch finished span as they might be flushing - return - } - span.Metrics[sampleRateMetricKey] = rs.Rate() - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer_test.go deleted file mode 100644 index 711f0d36..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/tracer_test.go +++ /dev/null @@ -1,902 +0,0 @@ -package tracer - -import ( - "fmt" - "net/http" - "os" - "strconv" - "strings" - "sync" - "testing" - "time" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal" - - "github.com/stretchr/testify/assert" - "github.com/tinylib/msgp/msgp" -) - -func (t *tracer) newRootSpan(name, service, resource string) *span { - return t.StartSpan(name, SpanType("test"), ServiceName(service), ResourceName(resource)).(*span) -} - -func (t *tracer) newChildSpan(name string, parent *span) *span { - if parent == nil { - return t.StartSpan(name).(*span) - } - return t.StartSpan(name, ChildOf(parent.Context())).(*span) -} - -// TestTracerFrenetic does frenetic testing in a scenario where the tracer is started -// and stopped in parallel with spans being created. -func TestTracerCleanStop(t *testing.T) { - if testing.Short() { - return - } - var wg sync.WaitGroup - transport := newDummyTransport() - - n := 5000 - - wg.Add(3) - for j := 0; j < 3; j++ { - go func() { - defer wg.Done() - for i := 0; i < n; i++ { - span := StartSpan("test.span") - child := StartSpan("child.span", ChildOf(span.Context())) - time.Sleep(time.Millisecond) - child.Finish() - time.Sleep(time.Millisecond) - span.Finish() - } - }() - } - - wg.Add(1) - go func() { - defer wg.Done() - for i := 0; i < n; i++ { - Start(withTransport(transport)) - time.Sleep(time.Millisecond) - Start(withTransport(transport)) - Start(withTransport(transport)) - } - }() - - wg.Add(1) - go func() { - defer wg.Done() - for i := 0; i < n; i++ { - Stop() - Stop() - Stop() - time.Sleep(time.Millisecond) - Stop() - Stop() - Stop() - } - }() - - wg.Wait() -} - -func TestTracerStart(t *testing.T) { - t.Run("normal", func(t *testing.T) { - Start() - defer Stop() - if _, ok := internal.GetGlobalTracer().(*tracer); !ok { - t.Fail() - } - }) - - t.Run("testing", func(t *testing.T) { - internal.Testing = true - Start() - defer Stop() - if _, ok := internal.GetGlobalTracer().(*tracer); ok { - t.Fail() - } - if _, ok := internal.GetGlobalTracer().(*internal.NoopTracer); !ok { - t.Fail() - } - internal.Testing = false - }) - - t.Run("deadlock/api", func(t *testing.T) { - Stop() - Stop() - - Start() - Start() - Start() - - // ensure at least one worker started and handles requests - internal.GetGlobalTracer().(*tracer).forceFlush() - - Stop() - Stop() - Stop() - Stop() - }) - - t.Run("deadlock/direct", func(t *testing.T) { - tr, _, stop := startTestTracer() - defer stop() - go tr.worker() - tr.forceFlush() // blocks until worker is started - select { - case <-tr.stopped: - t.Fatal("stopped channel should be open") - default: - // OK - } - tr.Stop() - select { - case <-tr.stopped: - // OK - default: - t.Fatal("stopped channel should be closed") - } - tr.Stop() - tr.Stop() - }) -} - -func TestTracerStartSpan(t *testing.T) { - tracer := newTracer() - span := tracer.StartSpan("web.request").(*span) - assert := assert.New(t) - assert.NotEqual(uint64(0), span.TraceID) - assert.NotEqual(uint64(0), span.SpanID) - assert.Equal(uint64(0), span.ParentID) - assert.Equal("web.request", span.Name) - assert.Equal("tracer.test", span.Service) -} - -func TestTracerStartSpanOptions(t *testing.T) { - tracer := newTracer() - now := time.Now() - opts := []StartSpanOption{ - SpanType("test"), - ServiceName("test.service"), - ResourceName("test.resource"), - StartTime(now), - } - span := tracer.StartSpan("web.request", opts...).(*span) - assert := assert.New(t) - assert.Equal("test", span.Type) - assert.Equal("test.service", span.Service) - assert.Equal("test.resource", span.Resource) - assert.Equal(now.UnixNano(), span.Start) -} - -func TestTracerStartChildSpan(t *testing.T) { - t.Run("own-service", func(t *testing.T) { - assert := assert.New(t) - tracer := newTracer() - root := tracer.StartSpan("web.request", ServiceName("root-service")).(*span) - child := tracer.StartSpan("db.query", ChildOf(root.Context()), ServiceName("child-service")).(*span) - - assert.NotEqual(uint64(0), child.TraceID) - assert.NotEqual(uint64(0), child.SpanID) - assert.Equal(root.SpanID, child.ParentID) - assert.Equal(root.TraceID, child.ParentID) - assert.Equal("child-service", child.Service) - }) - - t.Run("inherit-service", func(t *testing.T) { - assert := assert.New(t) - tracer := newTracer() - root := tracer.StartSpan("web.request", ServiceName("root-service")).(*span) - child := tracer.StartSpan("db.query", ChildOf(root.Context())).(*span) - - assert.Equal("root-service", child.Service) - }) -} - -func TestTracerBaggagePropagation(t *testing.T) { - assert := assert.New(t) - tracer := newTracer() - root := tracer.StartSpan("web.request").(*span) - root.SetBaggageItem("key", "value") - child := tracer.StartSpan("db.query", ChildOf(root.Context())).(*span) - context := child.Context().(*spanContext) - - assert.Equal("value", context.baggage["key"]) -} - -func TestPropagationDefaults(t *testing.T) { - assert := assert.New(t) - - tracer := newTracer() - root := tracer.StartSpan("web.request").(*span) - root.SetBaggageItem("x", "y") - root.SetTag(ext.SamplingPriority, -1) - ctx := root.Context().(*spanContext) - headers := http.Header{} - - // inject the spanContext - carrier := HTTPHeadersCarrier(headers) - err := tracer.Inject(ctx, carrier) - assert.Nil(err) - - tid := strconv.FormatUint(root.TraceID, 10) - pid := strconv.FormatUint(root.SpanID, 10) - - assert.Equal(headers.Get(DefaultTraceIDHeader), tid) - assert.Equal(headers.Get(DefaultParentIDHeader), pid) - assert.Equal(headers.Get(DefaultBaggageHeaderPrefix+"x"), "y") - assert.Equal(headers.Get(DefaultPriorityHeader), "-1") - - // retrieve the spanContext - propagated, err := tracer.Extract(carrier) - assert.Nil(err) - pctx := propagated.(*spanContext) - - // compare if there is a Context match - assert.Equal(ctx.traceID, pctx.traceID) - assert.Equal(ctx.spanID, pctx.spanID) - assert.Equal(ctx.baggage, pctx.baggage) - assert.Equal(ctx.priority, -1) - assert.True(ctx.hasPriority) - - // ensure a child can be created - child := tracer.StartSpan("db.query", ChildOf(propagated)).(*span) - - assert.NotEqual(uint64(0), child.TraceID) - assert.NotEqual(uint64(0), child.SpanID) - assert.Equal(root.SpanID, child.ParentID) - assert.Equal(root.TraceID, child.ParentID) - assert.Equal(child.context.priority, -1) - assert.True(child.context.hasPriority) -} - -func TestTracerSamplingPriorityPropagation(t *testing.T) { - assert := assert.New(t) - tracer := newTracer() - root := tracer.StartSpan("web.request", Tag(ext.SamplingPriority, 2)).(*span) - child := tracer.StartSpan("db.query", ChildOf(root.Context())).(*span) - assert.EqualValues(2, root.Metrics[samplingPriorityKey]) - assert.EqualValues(2, child.Metrics[samplingPriorityKey]) - assert.EqualValues(2, root.context.priority) - assert.EqualValues(2, child.context.priority) - assert.True(root.context.hasPriority) - assert.True(child.context.hasPriority) -} - -func TestTracerBaggageImmutability(t *testing.T) { - assert := assert.New(t) - tracer := newTracer() - root := tracer.StartSpan("web.request").(*span) - root.SetBaggageItem("key", "value") - child := tracer.StartSpan("db.query", ChildOf(root.Context())).(*span) - child.SetBaggageItem("key", "changed!") - parentContext := root.Context().(*spanContext) - childContext := child.Context().(*spanContext) - assert.Equal("value", parentContext.baggage["key"]) - assert.Equal("changed!", childContext.baggage["key"]) -} - -func TestTracerSpanTags(t *testing.T) { - tracer := newTracer() - tag := Tag("key", "value") - span := tracer.StartSpan("web.request", tag).(*span) - assert := assert.New(t) - assert.Equal("value", span.Meta["key"]) -} - -func TestTracerSpanGlobalTags(t *testing.T) { - assert := assert.New(t) - tracer := newTracer(WithGlobalTag("key", "value")) - s := tracer.StartSpan("web.request").(*span) - assert.Equal("value", s.Meta["key"]) - child := tracer.StartSpan("db.query", ChildOf(s.Context())).(*span) - assert.Equal("value", child.Meta["key"]) -} - -func TestNewSpan(t *testing.T) { - assert := assert.New(t) - - // the tracer must create root spans - tracer := newTracer(withTransport(newDefaultTransport())) - span := tracer.newRootSpan("pylons.request", "pylons", "/") - assert.Equal(uint64(0), span.ParentID) - assert.Equal("pylons", span.Service) - assert.Equal("pylons.request", span.Name) - assert.Equal("/", span.Resource) -} - -func TestNewSpanChild(t *testing.T) { - assert := assert.New(t) - - // the tracer must create child spans - tracer := newTracer(withTransport(newDefaultTransport())) - parent := tracer.newRootSpan("pylons.request", "pylons", "/") - child := tracer.newChildSpan("redis.command", parent) - // ids and services are inherited - assert.Equal(parent.SpanID, child.ParentID) - assert.Equal(parent.TraceID, child.TraceID) - assert.Equal(parent.Service, child.Service) - // the resource is not inherited and defaults to the name - assert.Equal("redis.command", child.Resource) -} - -func TestNewRootSpanHasPid(t *testing.T) { - assert := assert.New(t) - - tracer := newTracer(withTransport(newDefaultTransport())) - root := tracer.newRootSpan("pylons.request", "pylons", "/") - - assert.Equal(strconv.Itoa(os.Getpid()), root.Meta[ext.Pid]) -} - -func TestNewChildHasNoPid(t *testing.T) { - assert := assert.New(t) - - tracer := newTracer(withTransport(newDefaultTransport())) - root := tracer.newRootSpan("pylons.request", "pylons", "/") - child := tracer.newChildSpan("redis.command", root) - - assert.Equal("", child.Meta[ext.Pid]) -} - -func TestTracerSampler(t *testing.T) { - assert := assert.New(t) - - sampler := NewRateSampler(0.9999) // high probability of sampling - tracer := newTracer( - withTransport(newDefaultTransport()), - WithSampler(sampler), - ) - - span := tracer.newRootSpan("pylons.request", "pylons", "/") - - if !sampler.Sample(span) { - t.Skip("wasn't sampled") // no flaky tests - } - // only run test if span was sampled to avoid flaky tests - _, ok := span.Metrics[sampleRateMetricKey] - assert.True(ok) -} - -func TestTracerEdgeSampler(t *testing.T) { - assert := assert.New(t) - - // a sample rate of 0 should sample nothing - tracer0, _, stop := startTestTracer( - withTransport(newDefaultTransport()), - WithSampler(NewRateSampler(0)), - ) - defer stop() - // a sample rate of 1 should sample everything - tracer1, _, stop := startTestTracer( - withTransport(newDefaultTransport()), - WithSampler(NewRateSampler(1)), - ) - defer stop() - - count := payloadQueueSize / 3 - - for i := 0; i < count; i++ { - span0 := tracer0.newRootSpan("pylons.request", "pylons", "/") - span0.Finish() - span1 := tracer1.newRootSpan("pylons.request", "pylons", "/") - span1.Finish() - } - - assert.Equal(tracer0.payload.itemCount(), 0) - assert.Equal(tracer1.payload.itemCount(), count) -} - -func TestTracerConcurrent(t *testing.T) { - assert := assert.New(t) - tracer, transport, stop := startTestTracer() - defer stop() - - // Wait for three different goroutines that should create - // three different traces with one child each - var wg sync.WaitGroup - wg.Add(3) - go func() { - defer wg.Done() - tracer.newRootSpan("pylons.request", "pylons", "/").Finish() - }() - go func() { - defer wg.Done() - tracer.newRootSpan("pylons.request", "pylons", "/home").Finish() - }() - go func() { - defer wg.Done() - tracer.newRootSpan("pylons.request", "pylons", "/trace").Finish() - }() - - wg.Wait() - tracer.forceFlush() - traces := transport.Traces() - assert.Len(traces, 3) - assert.Len(traces[0], 1) - assert.Len(traces[1], 1) - assert.Len(traces[2], 1) -} - -func TestTracerParentFinishBeforeChild(t *testing.T) { - assert := assert.New(t) - tracer, transport, stop := startTestTracer() - defer stop() - - // Testing an edge case: a child refers to a parent that is already closed. - - parent := tracer.newRootSpan("pylons.request", "pylons", "/") - parent.Finish() - - tracer.forceFlush() - traces := transport.Traces() - assert.Len(traces, 1) - assert.Len(traces[0], 1) - comparePayloadSpans(t, parent, traces[0][0]) - - child := tracer.newChildSpan("redis.command", parent) - child.Finish() - - tracer.forceFlush() - - traces = transport.Traces() - assert.Len(traces, 1) - assert.Len(traces[0], 1) - comparePayloadSpans(t, child, traces[0][0]) - assert.Equal(parent.SpanID, traces[0][0].ParentID, "child should refer to parent, even if they have been flushed separately") -} - -func TestTracerConcurrentMultipleSpans(t *testing.T) { - assert := assert.New(t) - tracer, transport, stop := startTestTracer() - defer stop() - - // Wait for two different goroutines that should create - // two traces with two children each - var wg sync.WaitGroup - wg.Add(2) - go func() { - defer wg.Done() - parent := tracer.newRootSpan("pylons.request", "pylons", "/") - child := tracer.newChildSpan("redis.command", parent) - child.Finish() - parent.Finish() - }() - go func() { - defer wg.Done() - parent := tracer.newRootSpan("pylons.request", "pylons", "/") - child := tracer.newChildSpan("redis.command", parent) - child.Finish() - parent.Finish() - }() - - wg.Wait() - tracer.forceFlush() - traces := transport.Traces() - assert.Len(traces, 2) - assert.Len(traces[0], 2) - assert.Len(traces[1], 2) -} - -func TestTracerAtomicFlush(t *testing.T) { - assert := assert.New(t) - tracer, transport, stop := startTestTracer() - defer stop() - - // Make sure we don't flush partial bits of traces - root := tracer.newRootSpan("pylons.request", "pylons", "/") - span := tracer.newChildSpan("redis.command", root) - span1 := tracer.newChildSpan("redis.command.1", span) - span2 := tracer.newChildSpan("redis.command.2", span) - span.Finish() - span1.Finish() - span2.Finish() - - tracer.forceFlush() - traces := transport.Traces() - assert.Len(traces, 0, "nothing should be flushed now as span2 is not finished yet") - - root.Finish() - - tracer.forceFlush() - traces = transport.Traces() - assert.Len(traces, 1) - assert.Len(traces[0], 4, "all spans should show up at once") -} - -// TestTracerTraceMaxSize tests a bug that was encountered in environments -// creating a large volume of spans that reached the trace cap value (traceMaxSize). -// The bug was that once the cap is reached, no more spans are pushed onto -// the buffer, yet they are part of the same trace. The trace is considered -// completed and flushed when the number of finished spans == number of spans -// in buffer. When reaching the cap, this condition might become true too -// early, and some spans in the buffer might still not be finished when flushing. -// Changing these spans at the moment of flush would (and did) cause a race -// condition. -func TestTracerTraceMaxSize(t *testing.T) { - _, _, stop := startTestTracer() - defer stop() - - otss, otms := traceStartSize, traceMaxSize - traceStartSize, traceMaxSize = 3, 3 - defer func() { - traceStartSize, traceMaxSize = otss, otms - }() - - spans := make([]ddtrace.Span, 5) - spans[0] = StartSpan("span0") - spans[1] = StartSpan("span1", ChildOf(spans[0].Context())) - spans[2] = StartSpan("span2", ChildOf(spans[0].Context())) - spans[3] = StartSpan("span3", ChildOf(spans[0].Context())) - spans[4] = StartSpan("span4", ChildOf(spans[0].Context())) - - var wg sync.WaitGroup - wg.Add(1) - go func() { - defer wg.Done() - for i := 0; i < 5000; i++ { - spans[1].SetTag(strconv.Itoa(i), 1) - spans[2].SetTag(strconv.Itoa(i), 1) - } - }() - - wg.Add(1) - go func() { - defer wg.Done() - spans[0].Finish() - spans[3].Finish() - spans[4].Finish() - }() - - wg.Wait() -} - -func TestTracerRace(t *testing.T) { - assert := assert.New(t) - - tracer, transport, stop := startTestTracer() - defer stop() - - total := payloadQueueSize / 3 - var wg sync.WaitGroup - wg.Add(total) - - // Trying to be quite brutal here, firing lots of concurrent things, finishing in - // different orders, and modifying spans after creation. - for n := 0; n < total; n++ { - i := n // keep local copy - odd := ((i % 2) != 0) - go func() { - if i%11 == 0 { - time.Sleep(time.Microsecond) - } - - parent := tracer.newRootSpan("pylons.request", "pylons", "/") - - tracer.newChildSpan("redis.command", parent).Finish() - child := tracer.newChildSpan("async.service", parent) - - if i%13 == 0 { - time.Sleep(time.Microsecond) - } - - if odd { - parent.SetTag("odd", "true") - parent.SetTag("oddity", 1) - parent.Finish() - } else { - child.SetTag("odd", "false") - child.SetTag("oddity", 0) - child.Finish() - } - - if i%17 == 0 { - time.Sleep(time.Microsecond) - } - - if odd { - child.Resource = "HGETALL" - child.SetTag("odd", "false") - child.SetTag("oddity", 0) - } else { - parent.Resource = "/" + strconv.Itoa(i) + ".html" - parent.SetTag("odd", "true") - parent.SetTag("oddity", 1) - } - - if i%19 == 0 { - time.Sleep(time.Microsecond) - } - - if odd { - child.Finish() - } else { - parent.Finish() - } - - wg.Done() - }() - } - - wg.Wait() - - tracer.forceFlush() - traces := transport.Traces() - assert.Len(traces, total, "we should have exactly as many traces as expected") - for _, trace := range traces { - assert.Len(trace, 3, "each trace should have exactly 3 spans") - var parent, child, redis *span - for _, span := range trace { - switch span.Name { - case "pylons.request": - parent = span - case "async.service": - child = span - case "redis.command": - redis = span - default: - assert.Fail("unexpected span", span) - } - } - assert.NotNil(parent) - assert.NotNil(child) - assert.NotNil(redis) - - assert.Equal(uint64(0), parent.ParentID) - assert.Equal(parent.TraceID, parent.SpanID) - - assert.Equal(parent.TraceID, redis.TraceID) - assert.Equal(parent.TraceID, child.TraceID) - - assert.Equal(parent.TraceID, redis.ParentID) - assert.Equal(parent.TraceID, child.ParentID) - } -} - -// TestWorker is definitely a flaky test, as here we test that the worker -// background task actually does flush things. Most other tests are and should -// be using forceFlush() to make sure things are really sent to transport. -// Here, we just wait until things show up, as we would do with a real program. -func TestWorker(t *testing.T) { - if testing.Short() { - return - } - assert := assert.New(t) - - tracer, transport, stop := startTestTracer() - defer stop() - - n := payloadQueueSize * 10 // put more traces than the chan size, on purpose - for i := 0; i < n; i++ { - root := tracer.newRootSpan("pylons.request", "pylons", "/") - child := tracer.newChildSpan("redis.command", root) - child.Finish() - root.Finish() - } - - now := time.Now() - count := 0 - for time.Now().Before(now.Add(time.Minute)) && count < payloadQueueSize { - nbTraces := len(transport.Traces()) - if nbTraces > 0 { - t.Logf("popped %d traces", nbTraces) - } - count += nbTraces - time.Sleep(time.Millisecond) - } - // here we just check that we have "enough traces". In practice, lots of them - // are dropped, it's another interesting side-effect of this test: it does - // trigger error messages (which are repeated, so it aggregates them etc.) - if count < payloadQueueSize { - assert.Fail(fmt.Sprintf("timeout, not enough traces in buffer (%d/%d)", count, n)) - } -} - -func newTracerChannels() *tracer { - return &tracer{ - payload: newPayload(), - payloadQueue: make(chan []*span, payloadQueueSize), - errorBuffer: make(chan error, errorBufferSize), - flushTracesReq: make(chan struct{}, 1), - flushErrorsReq: make(chan struct{}, 1), - } -} - -func TestPushPayload(t *testing.T) { - tracer := newTracerChannels() - s := newBasicSpan("3MB") - s.Meta["key"] = strings.Repeat("X", payloadSizeLimit/2+10) - - // half payload size reached, we have 1 item, no flush request - tracer.pushPayload([]*span{s}) - assert.Equal(t, tracer.payload.itemCount(), 1) - assert.Len(t, tracer.flushTracesReq, 0) - - // payload size exceeded, we have 2 items and a flush request - tracer.pushPayload([]*span{s}) - assert.Equal(t, tracer.payload.itemCount(), 2) - assert.Len(t, tracer.flushTracesReq, 1) -} - -func TestPushTrace(t *testing.T) { - assert := assert.New(t) - - tracer := newTracerChannels() - trace := []*span{ - &span{ - Name: "pylons.request", - Service: "pylons", - Resource: "/", - }, - &span{ - Name: "pylons.request", - Service: "pylons", - Resource: "/foo", - }, - } - tracer.pushTrace(trace) - - assert.Len(tracer.payloadQueue, 1) - assert.Len(tracer.flushTracesReq, 0, "no flush requested yet") - - t0 := <-tracer.payloadQueue - assert.Equal(trace, t0) - - many := payloadQueueSize + 2 - for i := 0; i < many; i++ { - tracer.pushTrace(make([]*span, i)) - } - assert.Len(tracer.payloadQueue, payloadQueueSize) - assert.Len(tracer.errorBuffer, 2) -} - -func TestPushErr(t *testing.T) { - assert := assert.New(t) - - tracer := newTracerChannels() - - err := fmt.Errorf("ooops") - tracer.pushError(err) - - assert.Len(tracer.errorBuffer, 1, "there should be data in channel") - assert.Len(tracer.flushErrorsReq, 0, "no flush requested yet") - - pushed := <-tracer.errorBuffer - assert.Equal(err, pushed) - - many := errorBufferSize/2 + 1 - for i := 0; i < many; i++ { - tracer.pushError(fmt.Errorf("err %d", i)) - } - assert.Len(tracer.errorBuffer, many, "all errs should be in the channel, not yet blocking") - assert.Len(tracer.flushErrorsReq, 1, "a err flush should have been requested") - for i := 0; i < cap(tracer.errorBuffer); i++ { - tracer.pushError(fmt.Errorf("err %d", i)) - } - // if we reach this, means pushError is not blocking, which is what we want to double-check -} - -// BenchmarkConcurrentTracing tests the performance of spawning a lot of -// goroutines where each one creates a trace with a parent and a child. -func BenchmarkConcurrentTracing(b *testing.B) { - tracer, _, stop := startTestTracer(WithSampler(NewRateSampler(0))) - defer stop() - - b.ResetTimer() - for n := 0; n < b.N; n++ { - go func() { - parent := tracer.StartSpan("pylons.request", ServiceName("pylons"), ResourceName("/")) - defer parent.Finish() - - for i := 0; i < 10; i++ { - tracer.StartSpan("redis.command", ChildOf(parent.Context())).Finish() - } - }() - } -} - -// BenchmarkTracerAddSpans tests the performance of creating and finishing a root -// span. It should include the encoding overhead. -func BenchmarkTracerAddSpans(b *testing.B) { - tracer, _, stop := startTestTracer(WithSampler(NewRateSampler(0))) - defer stop() - - for n := 0; n < b.N; n++ { - span := tracer.StartSpan("pylons.request", ServiceName("pylons"), ResourceName("/")) - span.Finish() - } -} - -// startTestTracer returns a Tracer with a DummyTransport -func startTestTracer(opts ...StartOption) (*tracer, *dummyTransport, func()) { - transport := newDummyTransport() - o := append([]StartOption{withTransport(transport)}, opts...) - tracer := newTracer(o...) - tracer.syncPush = make(chan struct{}) - internal.SetGlobalTracer(tracer) - return tracer, transport, func() { - internal.SetGlobalTracer(&internal.NoopTracer{}) - tracer.Stop() - } -} - -// Mock Transport with a real Encoder -type dummyTransport struct { - sync.RWMutex - traces spanLists -} - -func newDummyTransport() *dummyTransport { - return &dummyTransport{traces: spanLists{}} -} - -func (t *dummyTransport) send(p *payload) error { - traces, err := decode(p) - if err != nil { - return err - } - t.Lock() - t.traces = append(t.traces, traces...) - t.Unlock() - return nil -} - -func decode(p *payload) (spanLists, error) { - var traces spanLists - err := msgp.Decode(p, &traces) - return traces, err -} - -func encode(traces [][]*span) (*payload, error) { - p := newPayload() - for _, t := range traces { - if err := p.push(t); err != nil { - return p, err - } - } - return p, nil -} - -func (t *dummyTransport) Traces() spanLists { - t.Lock() - defer t.Unlock() - - traces := t.traces - t.traces = spanLists{} - return traces -} - -// comparePayloadSpans allows comparing two spans which might have been -// read from the msgpack payload. In that case the private fields will -// not be available and the maps (meta & metrics will be nil for lengths -// of 0). This function covers for those cases and correctly compares. -func comparePayloadSpans(t *testing.T, a, b *span) { - assert.Equal(t, cpspan(a), cpspan(b)) -} - -func cpspan(s *span) *span { - if len(s.Metrics) == 0 { - s.Metrics = nil - } - if len(s.Meta) == 0 { - s.Meta = nil - } - return &span{ - Name: s.Name, - Service: s.Service, - Resource: s.Resource, - Type: s.Type, - Start: s.Start, - Duration: s.Duration, - Meta: s.Meta, - Metrics: s.Metrics, - SpanID: s.SpanID, - TraceID: s.TraceID, - ParentID: s.ParentID, - Error: s.Error, - } -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport.go deleted file mode 100644 index 6bbceb69..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport.go +++ /dev/null @@ -1,129 +0,0 @@ -package tracer - -import ( - "fmt" - "net" - "net/http" - "runtime" - "strconv" - "strings" - "time" -) - -var tracerVersion = "v1.2" - -const ( - defaultHostname = "localhost" - defaultPort = "8126" - defaultAddress = defaultHostname + ":" + defaultPort - defaultHTTPTimeout = time.Second // defines the current timeout before giving up with the send process - traceCountHeader = "X-Datadog-Trace-Count" // header containing the number of traces in the payload -) - -// Transport is an interface for span submission to the agent. -type transport interface { - send(p *payload) error -} - -// newTransport returns a new Transport implementation that sends traces to a -// trace agent running on the given hostname and port. If the zero values for -// hostname and port are provided, the default values will be used ("localhost" -// for hostname, and "8126" for port). -// -// In general, using this method is only necessary if you have a trace agent -// running on a non-default port or if it's located on another machine. -func newTransport(addr string) transport { - return newHTTPTransport(addr) -} - -// newDefaultTransport return a default transport for this tracing client -func newDefaultTransport() transport { - return newHTTPTransport(defaultAddress) -} - -type httpTransport struct { - traceURL string // the delivery URL for traces - client *http.Client // the HTTP client used in the POST - headers map[string]string // the Transport headers -} - -// newHTTPTransport returns an httpTransport for the given endpoint -func newHTTPTransport(addr string) *httpTransport { - // initialize the default EncoderPool with Encoder headers - defaultHeaders := map[string]string{ - "Datadog-Meta-Lang": "go", - "Datadog-Meta-Lang-Version": strings.TrimPrefix(runtime.Version(), "go"), - "Datadog-Meta-Lang-Interpreter": runtime.Compiler + "-" + runtime.GOARCH + "-" + runtime.GOOS, - "Datadog-Meta-Tracer-Version": tracerVersion, - "Content-Type": "application/msgpack", - } - return &httpTransport{ - traceURL: fmt.Sprintf("http://%s/v0.3/traces", resolveAddr(addr)), - client: &http.Client{ - // We copy the transport to avoid using the default one, as it might be - // augmented with tracing and we don't want these calls to be recorded. - // See https://golang.org/pkg/net/http/#DefaultTransport . - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - DualStack: true, - }).DialContext, - MaxIdleConns: 100, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - }, - Timeout: defaultHTTPTimeout, - }, - headers: defaultHeaders, - } -} - -func (t *httpTransport) send(p *payload) error { - // prepare the client and send the payload - req, err := http.NewRequest("POST", t.traceURL, p) - if err != nil { - return fmt.Errorf("cannot create http request: %v", err) - } - for header, value := range t.headers { - req.Header.Set(header, value) - } - req.Header.Set(traceCountHeader, strconv.Itoa(p.itemCount())) - req.Header.Set("Content-Length", strconv.Itoa(p.size())) - response, err := t.client.Do(req) - if err != nil { - return err - } - defer response.Body.Close() - if code := response.StatusCode; code >= 400 { - // error, check the body for context information and - // return a nice error. - msg := make([]byte, 1000) - n, _ := response.Body.Read(msg) - txt := http.StatusText(code) - if n > 0 { - return fmt.Errorf("%s (Status: %s)", msg[:n], txt) - } - return fmt.Errorf("%s", txt) - } - return nil -} - -// resolveAddr resolves the given agent address and fills in any missing host -// and port using the defaults. -func resolveAddr(addr string) string { - host, port, err := net.SplitHostPort(addr) - if err != nil { - // no port in addr - host = addr - } - if host == "" { - host = defaultHostname - } - if port == "" { - port = defaultPort - } - return fmt.Sprintf("%s:%s", host, port) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport_test.go deleted file mode 100644 index 5cbb1dc7..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/transport_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package tracer - -import ( - "fmt" - "log" - "net" - "net/http" - "net/http/httptest" - "net/url" - "os" - "strconv" - "strings" - "testing" - - "github.com/stretchr/testify/assert" -) - -// integration indicates if the test suite should run integration tests. -var integration bool - -func TestMain(m *testing.M) { - _, integration = os.LookupEnv("INTEGRATION") - os.Exit(m.Run()) -} - -// getTestSpan returns a Span with different fields set -func getTestSpan() *span { - return &span{ - TraceID: 42, - SpanID: 52, - ParentID: 42, - Type: "web", - Service: "high.throughput", - Name: "sending.events", - Resource: "SEND /data", - Start: 1481215590883401105, - Duration: 1000000000, - Meta: map[string]string{"http.host": "192.168.0.1"}, - Metrics: map[string]float64{"http.monitor": 41.99}, - } -} - -// getTestTrace returns a list of traces that is composed by ``traceN`` number -// of traces, each one composed by ``size`` number of spans. -func getTestTrace(traceN, size int) [][]*span { - var traces [][]*span - - for i := 0; i < traceN; i++ { - trace := []*span{} - for j := 0; j < size; j++ { - trace = append(trace, getTestSpan()) - } - traces = append(traces, trace) - } - return traces -} - -type mockDatadogAPIHandler struct { - t *testing.T -} - -func (m mockDatadogAPIHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - assert := assert.New(m.t) - - header := r.Header.Get("X-Datadog-Trace-Count") - assert.NotEqual("", header, "X-Datadog-Trace-Count header should be here") - count, err := strconv.Atoi(header) - assert.Nil(err, "header should be an int") - assert.NotEqual(0, count, "there should be a non-zero amount of traces") -} - -func mockDatadogAPINewServer(t *testing.T) *httptest.Server { - handler := mockDatadogAPIHandler{t: t} - server := httptest.NewServer(handler) - return server -} - -func TestTracesAgentIntegration(t *testing.T) { - if !integration { - t.Skip("to enable integration test, set the INTEGRATION environment variable") - } - assert := assert.New(t) - - testCases := []struct { - payload [][]*span - }{ - {getTestTrace(1, 1)}, - {getTestTrace(10, 1)}, - {getTestTrace(1, 10)}, - {getTestTrace(10, 10)}, - } - - for _, tc := range testCases { - transport := newHTTPTransport(defaultAddress) - p, err := encode(tc.payload) - assert.NoError(err) - err = transport.send(p) - assert.NoError(err) - } -} - -func TestResolveAddr(t *testing.T) { - for _, tt := range []struct { - in, out string - }{ - {"host", fmt.Sprintf("host:%s", defaultPort)}, - {"www.my-address.com", fmt.Sprintf("www.my-address.com:%s", defaultPort)}, - {"localhost", fmt.Sprintf("localhost:%s", defaultPort)}, - {":1111", fmt.Sprintf("%s:1111", defaultHostname)}, - {"", defaultAddress}, - {"custom:1234", "custom:1234"}, - } { - t.Run(tt.in, func(t *testing.T) { - assert.Equal(t, resolveAddr(tt.in), tt.out) - }) - } -} - -func TestTransportResponseError(t *testing.T) { - assert := assert.New(t) - ln, err := net.Listen("tcp4", ":0") - assert.Nil(err) - go http.Serve(ln, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte(strings.Repeat("X", 1002))) - })) - defer ln.Close() - addr := ln.Addr().String() - log.Println(addr) - transport := newHTTPTransport(addr) - err = transport.send(newPayload()) - want := fmt.Sprintf("%s (Status: Bad Request)", strings.Repeat("X", 1000)) - assert.Equal(want, err.Error()) -} - -func TestTraceCountHeader(t *testing.T) { - assert := assert.New(t) - - testCases := []struct { - payload [][]*span - }{ - {getTestTrace(1, 1)}, - {getTestTrace(10, 1)}, - {getTestTrace(100, 10)}, - } - - receiver := mockDatadogAPINewServer(t) - parsedURL, err := url.Parse(receiver.URL) - assert.NoError(err) - host := parsedURL.Host - _, port, err := net.SplitHostPort(host) - assert.Nil(err) - assert.NotEmpty(port, "port should be given, as it's chosen randomly") - for _, tc := range testCases { - transport := newHTTPTransport(host) - p, err := encode(tc.payload) - assert.NoError(err) - err = transport.send(p) - assert.NoError(err) - } - - receiver.Close() -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util.go deleted file mode 100644 index c2129778..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util.go +++ /dev/null @@ -1,50 +0,0 @@ -package tracer - -import ( - "strconv" - "strings" -) - -// toFloat64 attempts to convert value into a float64. If it succeeds it returns -// the value and true, otherwise 0 and false. -func toFloat64(value interface{}) (f float64, ok bool) { - switch i := value.(type) { - case byte: - return float64(i), true - case float32: - return float64(i), true - case float64: - return i, true - case int: - return float64(i), true - case int16: - return float64(i), true - case int32: - return float64(i), true - case int64: - return float64(i), true - case uint: - return float64(i), true - case uint16: - return float64(i), true - case uint32: - return float64(i), true - case uint64: - return float64(i), true - default: - return 0, false - } -} - -// parseUint64 parses a uint64 from either an unsigned 64 bit base-10 string -// or a signed 64 bit base-10 string representing an unsigned integer -func parseUint64(str string) (uint64, error) { - if strings.HasPrefix(str, "-") { - id, err := strconv.ParseInt(str, 10, 64) - if err != nil { - return 0, err - } - return uint64(id), nil - } - return strconv.ParseUint(str, 10, 64) -} diff --git a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util_test.go b/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util_test.go deleted file mode 100644 index de2ad165..00000000 --- a/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer/util_test.go +++ /dev/null @@ -1,60 +0,0 @@ -package tracer - -import ( - "fmt" - "math" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestToFloat64(t *testing.T) { - for i, tt := range [...]struct { - value interface{} - f float64 - ok bool - }{ - 0: {1, 1, true}, - 1: {byte(1), 1, true}, - 2: {int(1), 1, true}, - 3: {int16(1), 1, true}, - 4: {int32(1), 1, true}, - 5: {int64(1), 1, true}, - 6: {uint(1), 1, true}, - 7: {uint16(1), 1, true}, - 8: {uint32(1), 1, true}, - 9: {uint64(1), 1, true}, - 10: {"a", 0, false}, - 11: {float32(1.25), 1.25, true}, - 12: {float64(1.25), 1.25, true}, - } { - t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - f, ok := toFloat64(tt.value) - if ok != tt.ok { - t.Fatalf("expected ok: %t", tt.ok) - } - if f != tt.f { - t.Fatalf("expected: %#v, got: %#v", tt.f, f) - } - }) - } -} - -func TestParseUint64(t *testing.T) { - t.Run("negative", func(t *testing.T) { - id, err := parseUint64("-8809075535603237910") - assert.NoError(t, err) - assert.Equal(t, uint64(9637668538106313706), id) - }) - - t.Run("positive", func(t *testing.T) { - id, err := parseUint64(fmt.Sprintf("%d", uint64(math.MaxUint64))) - assert.NoError(t, err) - assert.Equal(t, uint64(math.MaxUint64), id) - }) - - t.Run("invalid", func(t *testing.T) { - _, err := parseUint64("abcd") - assert.Error(t, err) - }) -}